summaryrefslogtreecommitdiff
path: root/digital/asserv/src/hdlcounter/test_noise_filter.v
AgeCommit message (Expand)Author
2007-06-30Added hdlcounter for CPLD.Nicolas Schodet
width='100%'> -rw-r--r--cesar/bsu/aclf/aclf.h8
-rw-r--r--cesar/bsu/aclf/src/aclf.c9
-rw-r--r--cesar/bsu/aclf/test/utest/Config4
-rw-r--r--cesar/bsu/aclf/test/utest/Makefile3
-rw-r--r--cesar/bsu/bsu.h32
-rw-r--r--cesar/bsu/inc/context.h10
-rw-r--r--cesar/bsu/ntb/ntb.h2
-rw-r--r--cesar/bsu/src/bsu.c28
-rw-r--r--cesar/bsu/stub/src/bsu.c9
-rw-r--r--cesar/bsu/test/utest/Config6
-rw-r--r--cesar/bsu/test/utest/src/schedules.c46
-rw-r--r--cesar/bsu/test/utest/src/tests.c7
-rw-r--r--cesar/ce/fcall/test/Makefile1
-rw-r--r--cesar/ce/rx/bitloading/inc/nsr.h11
-rw-r--r--cesar/ce/rx/bitloading/src/export_ce_rx_param.py4
-rw-r--r--cesar/ce/rx/bitloading/src/intervals.c4
-rw-r--r--cesar/ce/rx/bitloading/src/nsr.c48
-rw-r--r--cesar/ce/rx/bitloading/test/Config1
-rw-r--r--cesar/ce/rx/bitloading/test/common-rule.mk4
-rw-r--r--cesar/ce/rx/bitloading/test/data/bl_initial_final.data664
-rw-r--r--cesar/ce/rx/bitloading/test/data/bl_initial_final_with_carriers_masked.data664
-rw-r--r--cesar/ce/rx/bitloading/test/data/mean_on_sound_nsr.data2668
-rw-r--r--cesar/ce/rx/bitloading/test/data/nsr_on_sound.data2732
-rw-r--r--cesar/ce/rx/bitloading/test/data/nsr_on_sound_max.data3072
-rw-r--r--cesar/ce/rx/bitloading/test/data/test_content.txt5
-rw-r--r--cesar/ce/rx/bitloading/test/data/tonemap_initial_0db_nsr_margin_0_00_ber_margin.data686
-rw-r--r--cesar/ce/rx/bitloading/test/data/tonemap_initial_0db_nsr_margin_0_01_ber_margin.data588
-rw-r--r--cesar/ce/rx/bitloading/test/data/tonemap_initial_1db_nsr_margin_0_00_ber_margin.data786
-rw-r--r--cesar/ce/rx/bitloading/test/data/tonemap_initial_1db_nsr_margin_0_01_ber_margin.data512
-rw-r--r--cesar/ce/rx/bitloading/test/data/tonemap_initial_2db_nsr_margin_0_00_ber_margin.data644
-rw-r--r--cesar/ce/rx/bitloading/test/data/tonemap_initial_2db_nsr_margin_0_01_ber_margin.data414
-rw-r--r--cesar/ce/rx/bitloading/test/data/tonemap_initial_3db_nsr_margin_0_00_ber_margin.data502
-rw-r--r--cesar/ce/rx/bitloading/test/data/tonemap_initial_3db_nsr_margin_0_01_ber_margin.data442
-rw-r--r--cesar/ce/rx/bitloading/test/data/tonemap_initial_under_ber_0db_nsr_margin_0_00_ber_margin.data664
-rw-r--r--cesar/ce/rx/bitloading/test/host-Makefile2
-rw-r--r--cesar/ce/rx/bitloading/test/intervals/Makefile4
-rw-r--r--cesar/ce/rx/bitloading/test/intervals/src/test_intervals_fsm.c2
-rw-r--r--cesar/ce/rx/bitloading/test/sparc-Makefile2
-rw-r--r--cesar/ce/rx/bitloading/test/src/test_bl.c6
-rw-r--r--cesar/ce/rx/ce_rx_param.h2
-rw-r--r--cesar/ce/rx/cp/test/Makefile4
-rw-r--r--cesar/ce/rx/stub/src/rx.c7
-rw-r--r--cesar/ce/rx/test/Makefile3
-rw-r--r--cesar/ce/tx/test/Config3
-rw-r--r--cesar/ce/tx/test/Makefile2
-rw-r--r--cesar/cl/Config6
-rw-r--r--cesar/cl/Module5
-rw-r--r--cesar/cl/cl_eoc_mactotei.h159
-rw-r--r--cesar/cl/cl_mactotei.h23
-rw-r--r--cesar/cl/inc/context.h39
-rw-r--r--cesar/cl/inc/trace.h3
-rw-r--r--cesar/cl/mcast.h36
-rw-r--r--cesar/cl/src/bridge_table.c10
-rw-r--r--cesar/cl/src/cl.c72
-rw-r--r--cesar/cl/src/cl_eoc_mactotei.c328
-rw-r--r--cesar/cl/src/cl_mactotei.c2
-rw-r--r--cesar/cl/src/mcast.c60
-rw-r--r--cesar/cl/src/receive.c16
-rw-r--r--cesar/cl/src/send_data.c152
-rw-r--r--cesar/cl/src/trace.c8
-rw-r--r--cesar/cl/stub/Module5
-rw-r--r--cesar/cl/stub/src/cl_eoc_mactotei.c62
-rw-r--r--cesar/cl/stub/src/mcast.c26
-rw-r--r--cesar/cl/test/bridge_table/Makefile1
-rw-r--r--cesar/cl/test/data_rate/Makefile1
-rw-r--r--cesar/cl/test/functional/host-Config2
-rw-r--r--cesar/cl/test/functional/src/cl.c4
-rw-r--r--cesar/cl/test/utest/src/cl.c3
-rw-r--r--cesar/cl/test/utest/src/misc.c3
-rw-r--r--cesar/cl/test/utest_eoc/Config9
-rw-r--r--cesar/cl/test/utest_eoc/Makefile17
-rw-r--r--cesar/cl/test/utest_eoc/src/cl.c50
-rw-r--r--cesar/cl/test/utest_eoc/src/hle_tools.c37
-rw-r--r--cesar/cl/test/utest_eoc/src/mcast.c69
-rw-r--r--cesar/cl/test/utest_eoc/src/receive.c83
-rw-r--r--cesar/cl/test/utest_eoc/src/send.c261
-rw-r--r--cesar/cl/test/utest_eoc/src/test.c88
-rw-r--r--cesar/cl/test/utest_eoc/src/test_mactotei.c232
-rw-r--r--cesar/cl/test/utest_eoc/test.h124
-rw-r--r--cesar/common/config-sets/eoc29
-rw-r--r--cesar/common/config-sets/eoc-board2
-rw-r--r--cesar/common/config-sets/eoc-master12
-rw-r--r--cesar/common/config-sets/eoc-slave5
-rw-r--r--cesar/common/defs/eoc.h19
-rw-r--r--cesar/common/defs/homeplugAV.h2
-rw-r--r--cesar/common/defs/igmp.h4
-rw-r--r--cesar/cp/Config2
-rw-r--r--cesar/cp/av/beacon/test/utest/Makefile6
-rw-r--r--cesar/cp/av/cco/action/test/utest2/Makefile10
-rw-r--r--cesar/cp/av/cl_interf/test/utest/Makefile2
-rw-r--r--cesar/cp/av/fsm/test/utest/Makefile2
-rw-r--r--cesar/cp/av/msg/test/utest/Makefile20
-rw-r--r--cesar/cp/av/msg/test/utest/src/test-msg-read-header.c8
-rw-r--r--cesar/cp/av/sta/action/test/utest/src/assoc.c70
-rw-r--r--cesar/cp/beacon/src/beacon.c21
-rw-r--r--cesar/cp/cco/action/inc/cco_action.h13
-rw-r--r--cesar/cp/cco/action/test/utest/override/mac/sar/inc/context.h8
-rw-r--r--cesar/cp/cco/bw/stub/src/bw.c32
-rw-r--r--cesar/cp/cco/bw/test/Makefile1
-rw-r--r--cesar/cp/cco/region/test/Makefile1
-rw-r--r--cesar/cp/cl_interf/src/cl_interf.c15
-rw-r--r--cesar/cp/defs.h26
-rw-r--r--cesar/cp/eoc/Config1
-rw-r--r--cesar/cp/eoc/Module15
-rw-r--r--cesar/cp/eoc/beacon/Config1
-rw-r--r--cesar/cp/eoc/beacon/Module3
-rw-r--r--cesar/cp/eoc/beacon/beacon.h18
-rw-r--r--cesar/cp/eoc/beacon/inc/beacon.h24
-rw-r--r--cesar/cp/eoc/beacon/src/beacon.c32
-rw-r--r--cesar/cp/eoc/beacon/stub/Module3
-rw-r--r--cesar/cp/eoc/beacon/stub/src/beacon.c22
-rw-r--r--cesar/cp/eoc/beacon/test/utest2/Config8
-rw-r--r--cesar/cp/eoc/beacon/test/utest2/Makefile20
-rw-r--r--cesar/cp/eoc/beacon/test/utest2/inc/scenario_defs.h63
-rw-r--r--cesar/cp/eoc/beacon/test/utest2/override/cp/inc/context.h56
-rw-r--r--cesar/cp/eoc/beacon/test/utest2/override/cp/sta/core/defs.h57
-rw-r--r--cesar/cp/eoc/beacon/test/utest2/override/cyg/kernel/kapi.h37
-rw-r--r--cesar/cp/eoc/beacon/test/utest2/src/beacon.c1389
-rw-r--r--cesar/cp/eoc/beacon/test/utest2/src/beacon_scenario.c245
-rw-r--r--cesar/cp/eoc/beacon/test/utest2/src/bsu_beacon_stub.c69
-rw-r--r--cesar/cp/eoc/beacon/test/utest2/src/bsu_stub.c61
-rw-r--r--cesar/cp/eoc/beacon/test/utest2/src/bsu_stub_scenario.c55
-rw-r--r--cesar/cp/eoc/beacon/test/utest2/src/ca_stub.c65
-rw-r--r--cesar/cp/eoc/beacon/test/utest2/src/fsm_stub.c58
-rw-r--r--cesar/cp/eoc/beacon/test/utest2/src/pbproc_stub.c27
-rw-r--r--cesar/cp/eoc/beacon/test/utest2/src/phy_stub.c29
-rw-r--r--cesar/cp/eoc/beacon/test/utest2/src/scenario_actions.c25
-rw-r--r--cesar/cp/eoc/beacon/test/utest2/src/secu_stub.c25
-rw-r--r--cesar/cp/eoc/beacon/test/utest2/src/sta_mgr_stub.c217
-rw-r--r--cesar/cp/eoc/beacon/test/utest2/src/stubs.c91
-rw-r--r--cesar/cp/eoc/cco/action/Config2
-rw-r--r--cesar/cp/eoc/cco/action/Module7
-rw-r--r--cesar/cp/eoc/cco/action/cco_action.h92
-rw-r--r--cesar/cp/eoc/cco/action/cco_action_master.h67
-rw-r--r--cesar/cp/eoc/cco/action/doc/Makefile48
-rw-r--r--cesar/cp/eoc/cco/action/doc/cp_eoc_cco_action.odtbin0 -> 125849 bytes-rw-r--r--cesar/cp/eoc/cco/action/doc/simple.sdl12
-rw-r--r--cesar/cp/eoc/cco/action/doc/slave_states.sdl26
-rw-r--r--cesar/cp/eoc/cco/action/drv.h34
-rw-r--r--cesar/cp/eoc/cco/action/inc/cco_action.h38
-rw-r--r--cesar/cp/eoc/cco/action/src/cco_action.c286
-rw-r--r--cesar/cp/eoc/cco/action/src/cco_action_master.c524
-rw-r--r--cesar/cp/eoc/cco/action/src/drv.c49
-rw-r--r--cesar/cp/eoc/cco/action/src/vs_eoc_master.c821
-rw-r--r--cesar/cp/eoc/cco/action/stub/Module7
-rw-r--r--cesar/cp/eoc/cco/action/stub/src/cco_action.c75
-rw-r--r--cesar/cp/eoc/cco/action/stub/src/cco_action_master.c68
-rw-r--r--cesar/cp/eoc/cco/action/stub/src/drv.c24
-rw-r--r--cesar/cp/eoc/cco/action/stub/src/vs_eoc_master.c96
-rw-r--r--cesar/cp/eoc/cco/action/test/utest/Config14
-rw-r--r--cesar/cp/eoc/cco/action/test/utest/Makefile21
-rw-r--r--cesar/cp/eoc/cco/action/test/utest/inc/scenario_defs.h138
-rw-r--r--cesar/cp/eoc/cco/action/test/utest/override/cp/inc/context.h98
-rw-r--r--cesar/cp/eoc/cco/action/test/utest/override/cp/sta/core/core.h49
-rw-r--r--cesar/cp/eoc/cco/action/test/utest/override/cp/sta/core/defs.h57
-rw-r--r--cesar/cp/eoc/cco/action/test/utest/override/cyg/kernel/kapi.h37
-rw-r--r--cesar/cp/eoc/cco/action/test/utest/override/mac/sar/inc/context.h23
-rw-r--r--cesar/cp/eoc/cco/action/test/utest/src/stub.c56
-rw-r--r--cesar/cp/eoc/cco/action/test/utest/src/test_actions.c471
-rw-r--r--cesar/cp/eoc/cco/action/test/utest_eoc/Makefile12
-rw-r--r--cesar/cp/eoc/cco/action/test/utest_eoc/actions-Config23
-rw-r--r--cesar/cp/eoc/cco/action/test/utest_eoc/actions-Makefile29
-rw-r--r--cesar/cp/eoc/cco/action/test/utest_eoc/fsm-Config8
-rw-r--r--cesar/cp/eoc/cco/action/test/utest_eoc/fsm-Makefile19
-rw-r--r--cesar/cp/eoc/cco/action/test/utest_eoc/inc/scenario_defs.h351
-rw-r--r--cesar/cp/eoc/cco/action/test/utest_eoc/inc/test_cco_action.h56
-rw-r--r--cesar/cp/eoc/cco/action/test/utest_eoc/override/cp/inc/context.h120
-rw-r--r--cesar/cp/eoc/cco/action/test/utest_eoc/override/cp/sta/core/core.h56
-rw-r--r--cesar/cp/eoc/cco/action/test/utest_eoc/override/cp/sta/core/defs.h57
-rw-r--r--cesar/cp/eoc/cco/action/test/utest_eoc/override/cyg/kernel/kapi.h37
-rw-r--r--cesar/cp/eoc/cco/action/test/utest_eoc/src/actions.c116
-rw-r--r--cesar/cp/eoc/cco/action/test/utest_eoc/src/ce_rx_stub.c31
-rw-r--r--cesar/cp/eoc/cco/action/test/utest_eoc/src/cl_interf_stub.c44
-rw-r--r--cesar/cp/eoc/cco/action/test/utest_eoc/src/core_stub.c42
-rw-r--r--cesar/cp/eoc/cco/action/test/utest_eoc/src/cp_msg_stub.c438
-rw-r--r--cesar/cp/eoc/cco/action/test/utest_eoc/src/cp_stub.c51
-rw-r--r--cesar/cp/eoc/cco/action/test/utest_eoc/src/cyg_stub.c40
-rw-r--r--cesar/cp/eoc/cco/action/test/utest_eoc/src/dataplane_stub.c38
-rw-r--r--cesar/cp/eoc/cco/action/test/utest_eoc/src/fsm_event_stub.c78
-rw-r--r--cesar/cp/eoc/cco/action/test/utest_eoc/src/hal_phy_stub.c26
-rw-r--r--cesar/cp/eoc/cco/action/test/utest_eoc/src/msg_vs.c686
-rw-r--r--cesar/cp/eoc/cco/action/test/utest_eoc/src/scenario_event_stub.c241
-rw-r--r--cesar/cp/eoc/cco/action/test/utest_eoc/src/test_actions.c4016
-rw-r--r--cesar/cp/eoc/cco/action/test/utest_eoc/src/test_fsm.c429
-rw-r--r--cesar/cp/eoc/cco/action/test/utest_mcast/Config19
-rw-r--r--cesar/cp/eoc/cco/action/test/utest_mcast/Makefile18
-rw-r--r--cesar/cp/eoc/cco/action/test/utest_mcast/inc/scenario_defs.h160
-rw-r--r--cesar/cp/eoc/cco/action/test/utest_mcast/inc/test_cco_action.h46
-rw-r--r--cesar/cp/eoc/cco/action/test/utest_mcast/override/cp/inc/context.h90
-rw-r--r--cesar/cp/eoc/cco/action/test/utest_mcast/override/cp/sta/core/defs.h57
-rw-r--r--cesar/cp/eoc/cco/action/test/utest_mcast/override/cyg/kernel/kapi.h37
-rw-r--r--cesar/cp/eoc/cco/action/test/utest_mcast/override/mac/sar/inc/context.h24
-rw-r--r--cesar/cp/eoc/cco/action/test/utest_mcast/src/cl_mcast.c60
-rw-r--r--cesar/cp/eoc/cco/action/test/utest_mcast/src/fsm_stub.c55
-rw-r--r--cesar/cp/eoc/cco/action/test/utest_mcast/src/msg_stub.c289
-rw-r--r--cesar/cp/eoc/cco/action/test/utest_mcast/src/scenario_actions.c72
-rw-r--r--cesar/cp/eoc/cco/action/test/utest_mcast/src/test_cco_action.c75
-rw-r--r--cesar/cp/eoc/cco/action/test/utest_mcast/src/test_mcast_suite.c97
-rw-r--r--cesar/cp/eoc/cco/action/vs_eoc_master.h100
-rw-r--r--cesar/cp/eoc/cco/bw/Module3
-rw-r--r--cesar/cp/eoc/cco/bw/bw.h66
-rw-r--r--cesar/cp/eoc/cco/bw/doc/bandwidth_scheduler.odtbin0 -> 105290 bytes-rw-r--r--cesar/cp/eoc/cco/bw/doc/beacon_period.odtbin0 -> 193316 bytes-rw-r--r--cesar/cp/eoc/cco/bw/inc/bw.h35
-rw-r--r--cesar/cp/eoc/cco/bw/inc/service.h63
-rw-r--r--cesar/cp/eoc/cco/bw/service.h73
-rw-r--r--cesar/cp/eoc/cco/bw/src/bw.c174
-rw-r--r--cesar/cp/eoc/cco/bw/src/service.c137
-rw-r--r--cesar/cp/eoc/cco/bw/stub/Module3
-rw-r--r--cesar/cp/eoc/cco/bw/stub/src/bw.c46
-rw-r--r--cesar/cp/eoc/cco/bw/stub/src/service.c59
-rw-r--r--cesar/cp/eoc/cco/bw/test/utest/Config8
-rw-r--r--cesar/cp/eoc/cco/bw/test/utest/Makefile12
-rw-r--r--cesar/cp/eoc/cco/bw/test/utest/override/cp/inc/context.h49
-rw-r--r--cesar/cp/eoc/cco/bw/test/utest/override/cp/sta/core/core.h31
-rw-r--r--cesar/cp/eoc/cco/bw/test/utest/override/cp/sta/core/defs.h58
-rw-r--r--cesar/cp/eoc/cco/bw/test/utest/src/bw_stub.c114
-rw-r--r--cesar/cp/eoc/cco/bw/test/utest/src/serv.c92
-rw-r--r--cesar/cp/eoc/fsm/Config1
-rw-r--r--cesar/cp/eoc/fsm/Module40
-rw-r--r--cesar/cp/eoc/fsm/src/fsm/cp.conf6
-rw-r--r--cesar/cp/eoc/fsm/src/fsm/cp_eoc_cco.fsm220
-rw-r--r--cesar/cp/eoc/fsm/src/fsm/cp_eoc_sta.fsm253
-rw-r--r--cesar/cp/eoc/fsm/src/fsm/template_defs.h52
-rw-r--r--cesar/cp/eoc/fsm/src/fsm/template_tables.h46
-rw-r--r--cesar/cp/eoc/fsm/src/tables.c37
-rw-r--r--cesar/cp/eoc/fsm/stub/Module4
-rw-r--r--cesar/cp/eoc/fsm/stub/src/fsm_stub.c87
-rw-r--r--cesar/cp/eoc/fsm/test/utest/Config3
-rw-r--r--cesar/cp/eoc/fsm/test/utest/Makefile14
-rw-r--r--cesar/cp/eoc/fsm/test/utest/inc/scenario_defs.h135
-rw-r--r--cesar/cp/eoc/fsm/test/utest/override/cp/inc/context.h35
-rw-r--r--cesar/cp/eoc/fsm/test/utest/override/cp/sta/core/core.h26
-rw-r--r--cesar/cp/eoc/fsm/test/utest/src/actions.c97
-rw-r--r--cesar/cp/eoc/fsm/test/utest/src/fsm_stub.c263
-rw-r--r--cesar/cp/eoc/fsm/test/utest/src/test_fsm.c477
-rw-r--r--cesar/cp/eoc/fsm/test/utest/src/utest.fsm86
-rw-r--r--cesar/cp/eoc/inc/dbg_print.h63
-rw-r--r--cesar/cp/eoc/inc/trace.h31
-rw-r--r--cesar/cp/eoc/msg/Config2
-rw-r--r--cesar/cp/eoc/msg/Module3
-rw-r--r--cesar/cp/eoc/msg/inc/msg_vs.h252
-rw-r--r--cesar/cp/eoc/msg/inc/vs_eoc_get_topo.h27
-rw-r--r--cesar/cp/eoc/msg/msg.h23
-rw-r--r--cesar/cp/eoc/msg/src/msg_vs.c654
-rw-r--r--cesar/cp/eoc/msg/stub/Module3
-rw-r--r--cesar/cp/eoc/msg/stub/src/msg_vs.c302
-rw-r--r--cesar/cp/eoc/msg/test/utest/Config7
-rw-r--r--cesar/cp/eoc/msg/test/utest/Makefile21
-rw-r--r--cesar/cp/eoc/msg/test/utest/doc/Makefile20
-rw-r--r--cesar/cp/eoc/msg/test/utest/doc/read-header.txt67
-rw-r--r--cesar/cp/eoc/msg/test/utest/override/cp/inc/context.h76
-rw-r--r--cesar/cp/eoc/msg/test/utest/override/cp/sta/core/defs.h60
-rw-r--r--cesar/cp/eoc/msg/test/utest/override/cyg/kernel/kapi.h37
-rw-r--r--cesar/cp/eoc/msg/test/utest/override/mac/sar/inc/context.h23
-rw-r--r--cesar/cp/eoc/msg/test/utest/src/msg_cc_eoc.c134
-rw-r--r--cesar/cp/eoc/msg/test/utest/src/msg_vs_eoc.c315
-rw-r--r--cesar/cp/eoc/multi_sta/action/Config1
-rw-r--r--cesar/cp/eoc/multi_sta/action/Module1
-rw-r--r--cesar/cp/eoc/multi_sta/action/multi_sta_action.h62
-rw-r--r--cesar/cp/eoc/multi_sta/action/src/multi_sta_action.c441
-rw-r--r--cesar/cp/eoc/multi_sta/action/stub/Module1
-rw-r--r--cesar/cp/eoc/multi_sta/action/stub/src/multi_sta_action.c50
-rw-r--r--cesar/cp/eoc/multi_sta/action/test/utest/Makefile12
-rw-r--r--cesar/cp/eoc/multi_sta/action/test/utest/actions-Config14
-rw-r--r--cesar/cp/eoc/multi_sta/action/test/utest/actions-Makefile26
-rw-r--r--cesar/cp/eoc/multi_sta/action/test/utest/actions-override/cp/inc/context.h97
-rw-r--r--cesar/cp/eoc/multi_sta/action/test/utest/actions-override/cp/sta/core/core.h52
-rw-r--r--cesar/cp/eoc/multi_sta/action/test/utest/actions-override/cp/sta/core/defs.h57
-rw-r--r--cesar/cp/eoc/multi_sta/action/test/utest/actions-override/cyg/kernel/kapi.h37
-rw-r--r--cesar/cp/eoc/multi_sta/action/test/utest/fsm-Config13
-rw-r--r--cesar/cp/eoc/multi_sta/action/test/utest/fsm-Makefile25
-rw-r--r--cesar/cp/eoc/multi_sta/action/test/utest/fsm-override/cp/inc/context.h94
-rw-r--r--cesar/cp/eoc/multi_sta/action/test/utest/fsm-override/cp/sta/core/core.h53
-rw-r--r--cesar/cp/eoc/multi_sta/action/test/utest/fsm-override/cp/sta/core/defs.h57
-rw-r--r--cesar/cp/eoc/multi_sta/action/test/utest/fsm-override/cyg/kernel/kapi.h37
-rw-r--r--cesar/cp/eoc/multi_sta/action/test/utest/inc/scenario_defs.h135
-rw-r--r--cesar/cp/eoc/multi_sta/action/test/utest/src/actions.c41
-rw-r--r--cesar/cp/eoc/multi_sta/action/test/utest/src/actions_stub.c81
-rw-r--r--cesar/cp/eoc/multi_sta/action/test/utest/src/beacon_stub.c30
-rw-r--r--cesar/cp/eoc/multi_sta/action/test/utest/src/cl_interf_stub.c44
-rw-r--r--cesar/cp/eoc/multi_sta/action/test/utest/src/cp_eoc_sta_misc_stub.c23
-rw-r--r--cesar/cp/eoc/multi_sta/action/test/utest/src/cp_stub.c59
-rw-r--r--cesar/cp/eoc/multi_sta/action/test/utest/src/cyg_stub.c40
-rw-r--r--cesar/cp/eoc/multi_sta/action/test/utest/src/dataplane_stub.c32
-rw-r--r--cesar/cp/eoc/multi_sta/action/test/utest/src/fsm_stub.c201
-rw-r--r--cesar/cp/eoc/multi_sta/action/test/utest/src/hal_phy_stub.c26
-rw-r--r--cesar/cp/eoc/multi_sta/action/test/utest/src/mgr_stub.c63
-rw-r--r--cesar/cp/eoc/multi_sta/action/test/utest/src/test_actions.c284
-rw-r--r--cesar/cp/eoc/multi_sta/action/test/utest/src/test_fsm.c125
-rw-r--r--cesar/cp/eoc/multi_sta_fsm/Config1
-rw-r--r--cesar/cp/eoc/multi_sta_fsm/Module40
-rw-r--r--cesar/cp/eoc/multi_sta_fsm/doc/cp_eoc_multi_sta_fsm.odtbin0 -> 180232 bytes-rw-r--r--cesar/cp/eoc/multi_sta_fsm/forward.h19
-rw-r--r--cesar/cp/eoc/multi_sta_fsm/fsm.h68
-rw-r--r--cesar/cp/eoc/multi_sta_fsm/inc/context.h33
-rw-r--r--cesar/cp/eoc/multi_sta_fsm/inc/events.h75
-rw-r--r--cesar/cp/eoc/multi_sta_fsm/inc/tables.h52
-rw-r--r--cesar/cp/eoc/multi_sta_fsm/src/events.c71
-rw-r--r--cesar/cp/eoc/multi_sta_fsm/src/fsm.c158
-rw-r--r--cesar/cp/eoc/multi_sta_fsm/src/fsm/multi_sta.conf6
-rw-r--r--cesar/cp/eoc/multi_sta_fsm/src/fsm/multi_sta.fsm45
-rw-r--r--cesar/cp/eoc/multi_sta_fsm/src/fsm/template_defs.h53
-rw-r--r--cesar/cp/eoc/multi_sta_fsm/src/fsm/template_tables.h46
-rw-r--r--cesar/cp/eoc/multi_sta_fsm/src/tables.c25
-rw-r--r--cesar/cp/eoc/multi_sta_fsm/stub/Module3
-rw-r--r--cesar/cp/eoc/multi_sta_fsm/stub/src/fsm_stub.c56
-rw-r--r--cesar/cp/eoc/multi_sta_fsm/test/utest/Config6
-rw-r--r--cesar/cp/eoc/multi_sta_fsm/test/utest/Makefile19
-rw-r--r--cesar/cp/eoc/multi_sta_fsm/test/utest/inc/scenario_defs.h107
-rw-r--r--cesar/cp/eoc/multi_sta_fsm/test/utest/override/cp/inc/context.h69
-rw-r--r--cesar/cp/eoc/multi_sta_fsm/test/utest/override/cp/sta/core/core.h40
-rw-r--r--cesar/cp/eoc/multi_sta_fsm/test/utest/override/cp/sta/core/defs.h58
-rw-r--r--cesar/cp/eoc/multi_sta_fsm/test/utest/src/actions.c34
-rw-r--r--cesar/cp/eoc/multi_sta_fsm/test/utest/src/fsm_stub.c185
-rw-r--r--cesar/cp/eoc/multi_sta_fsm/test/utest/src/test_fsm.c294
-rw-r--r--cesar/cp/eoc/multi_sta_fsm/test/utest/src/utest.fsm53
-rw-r--r--cesar/cp/eoc/src/trace.c100
-rw-r--r--cesar/cp/eoc/sta/action/Config1
-rw-r--r--cesar/cp/eoc/sta/action/Module8
-rw-r--r--cesar/cp/eoc/sta/action/action.h22
-rw-r--r--cesar/cp/eoc/sta/action/assoc_slave.h229
-rw-r--r--cesar/cp/eoc/sta/action/doc/Makefile48
-rw-r--r--cesar/cp/eoc/sta/action/doc/assoc.sdl41
-rw-r--r--cesar/cp/eoc/sta/action/doc/cp_eoc_sta_action.odtbin0 -> 249905 bytes-rw-r--r--cesar/cp/eoc/sta/action/drv.h65
-rw-r--r--cesar/cp/eoc/sta/action/inc/assoc.h43
-rw-r--r--cesar/cp/eoc/sta/action/inc/vs.h35
-rw-r--r--cesar/cp/eoc/sta/action/src/action.c36
-rw-r--r--cesar/cp/eoc/sta/action/src/assoc.c35
-rw-r--r--cesar/cp/eoc/sta/action/src/assoc_slave.c683
-rw-r--r--cesar/cp/eoc/sta/action/src/drv.c164
-rw-r--r--cesar/cp/eoc/sta/action/src/poweron.c87
-rw-r--r--cesar/cp/eoc/sta/action/src/vs.c317
-rw-r--r--cesar/cp/eoc/sta/action/stub/Module7
-rw-r--r--cesar/cp/eoc/sta/action/stub/src/action.c19
-rw-r--r--cesar/cp/eoc/sta/action/stub/src/assoc.c21
-rw-r--r--cesar/cp/eoc/sta/action/stub/src/assoc_slave.c176
-rw-r--r--cesar/cp/eoc/sta/action/stub/src/drv.c49
-rw-r--r--cesar/cp/eoc/sta/action/stub/src/poweron.c26
-rw-r--r--cesar/cp/eoc/sta/action/stub/src/vs.c38
-rw-r--r--cesar/cp/eoc/sta/action/test/utest/Makefile12
-rw-r--r--cesar/cp/eoc/sta/action/test/utest/actions-Config13
-rw-r--r--cesar/cp/eoc/sta/action/test/utest/actions-Makefile25
-rw-r--r--cesar/cp/eoc/sta/action/test/utest/actions-override/cp/inc/context.h93
-rw-r--r--cesar/cp/eoc/sta/action/test/utest/actions-override/cp/sta/core/core.h51
-rw-r--r--cesar/cp/eoc/sta/action/test/utest/actions-override/cp/sta/core/defs.h57
-rw-r--r--cesar/cp/eoc/sta/action/test/utest/actions-override/cyg/kernel/kapi.h37
-rw-r--r--cesar/cp/eoc/sta/action/test/utest/fsm-Config4
-rw-r--r--cesar/cp/eoc/sta/action/test/utest/fsm-Makefile20
-rw-r--r--cesar/cp/eoc/sta/action/test/utest/fsm-override/cp/inc/context.h35
-rw-r--r--cesar/cp/eoc/sta/action/test/utest/fsm-override/cp/sta/core/core.h26
-rw-r--r--cesar/cp/eoc/sta/action/test/utest/inc/scenario_defs.h283
-rw-r--r--cesar/cp/eoc/sta/action/test/utest/inc/test_sta_action.h56
-rw-r--r--cesar/cp/eoc/sta/action/test/utest/src/actions.c118
-rw-r--r--cesar/cp/eoc/sta/action/test/utest/src/cl_interf_stub.c44
-rw-r--r--cesar/cp/eoc/sta/action/test/utest/src/cp_stub.c58
-rw-r--r--cesar/cp/eoc/sta/action/test/utest/src/cyg_stub.c40
-rw-r--r--cesar/cp/eoc/sta/action/test/utest/src/fsm_stub.c335
-rw-r--r--cesar/cp/eoc/sta/action/test/utest/src/phy_stub.c26
-rw-r--r--cesar/cp/eoc/sta/action/test/utest/src/test_actions.c1967
-rw-r--r--cesar/cp/eoc/sta/action/test/utest/src/test_fsm.c743
-rw-r--r--cesar/cp/eoc/sta/action/test/utest_eoc/Config8
-rw-r--r--cesar/cp/eoc/sta/action/test/utest_eoc/Makefile24
-rw-r--r--cesar/cp/eoc/sta/action/test/utest_eoc/assoc-Makefile20
-rw-r--r--cesar/cp/eoc/sta/action/test/utest_eoc/inc/scenario_defs.h408
-rw-r--r--cesar/cp/eoc/sta/action/test/utest_eoc/inc/test_sta_action.h70
-rw-r--r--cesar/cp/eoc/sta/action/test/utest_eoc/override/cp/inc/context.h79
-rw-r--r--cesar/cp/eoc/sta/action/test/utest_eoc/override/cp/sta/core/core.h38
-rw-r--r--cesar/cp/eoc/sta/action/test/utest_eoc/scenario-Config9
-rw-r--r--cesar/cp/eoc/sta/action/test/utest_eoc/scenario-Makefile22
-rw-r--r--cesar/cp/eoc/sta/action/test/utest_eoc/src/assoc.c461
-rw-r--r--cesar/cp/eoc/sta/action/test/utest_eoc/src/beacon_stub.c112
-rw-r--r--cesar/cp/eoc/sta/action/test/utest_eoc/src/ce_stub.c24
-rw-r--r--cesar/cp/eoc/sta/action/test/utest_eoc/src/core_stub.c42
-rw-r--r--cesar/cp/eoc/sta/action/test/utest_eoc/src/cp_stub.c35
-rw-r--r--cesar/cp/eoc/sta/action/test/utest_eoc/src/dataplane_stub.c84
-rw-r--r--cesar/cp/eoc/sta/action/test/utest_eoc/src/drv.c688
-rw-r--r--cesar/cp/eoc/sta/action/test/utest_eoc/src/fsm_stub.c50
-rw-r--r--cesar/cp/eoc/sta/action/test/utest_eoc/src/key.c34
-rw-r--r--cesar/cp/eoc/sta/action/test/utest_eoc/src/mac_sar_interface_stub.c35
-rw-r--r--cesar/cp/eoc/sta/action/test/utest_eoc/src/misc.c2074
-rw-r--r--cesar/cp/eoc/sta/action/test/utest_eoc/src/msg_stub.c421
-rw-r--r--cesar/cp/eoc/sta/action/test/utest_eoc/src/scenario_actions.c171
-rw-r--r--cesar/cp/eoc/sta/action/test/utest_eoc/src/secu.c52
-rw-r--r--cesar/cp/eoc/sta/action/test/utest_eoc/src/test_sta_action.c123
-rw-r--r--cesar/cp/eoc/sta/action/vs.h38
-rw-r--r--cesar/cp/eoc/sta/mgr/Config1
-rw-r--r--cesar/cp/eoc/sta/mgr/Module3
-rw-r--r--cesar/cp/eoc/sta/mgr/doc/sta_manager.odtbin0 -> 292047 bytes-rw-r--r--cesar/cp/eoc/sta/mgr/doc/sta_mgr.xmi1832
-rw-r--r--cesar/cp/eoc/sta/mgr/src/sta_mgr.c572
-rw-r--r--cesar/cp/eoc/sta/mgr/src/sta_own_data.c89
-rw-r--r--cesar/cp/eoc/sta/mgr/sta_mgr.h75
-rw-r--r--cesar/cp/eoc/sta/mgr/sta_own_data.h46
-rw-r--r--cesar/cp/eoc/sta/mgr/stub/Module3
-rw-r--r--cesar/cp/eoc/sta/mgr/stub/src/sta_mgr.c101
-rw-r--r--cesar/cp/eoc/sta/mgr/stub/src/sta_own_data.c48
-rw-r--r--cesar/cp/eoc/sta/mgr/test/utest/Config5
-rw-r--r--cesar/cp/eoc/sta/mgr/test/utest/Makefile14
-rw-r--r--cesar/cp/eoc/sta/mgr/test/utest/doc/Makefile20
-rw-r--r--cesar/cp/eoc/sta/mgr/test/utest/doc/net.txt190
-rw-r--r--cesar/cp/eoc/sta/mgr/test/utest/doc/net_list.txt114
-rw-r--r--cesar/cp/eoc/sta/mgr/test/utest/doc/sta.txt44
-rw-r--r--cesar/cp/eoc/sta/mgr/test/utest/doc/sta_mgr.txt14
-rw-r--r--cesar/cp/eoc/sta/mgr/test/utest/doc/sta_own_data.txt111
-rw-r--r--cesar/cp/eoc/sta/mgr/test/utest/override/cp/cco/action/inc/context.h26
-rw-r--r--cesar/cp/eoc/sta/mgr/test/utest/override/cp/inc/context.h57
-rw-r--r--cesar/cp/eoc/sta/mgr/test/utest/override/cp/sta/core/core.h21
-rw-r--r--cesar/cp/eoc/sta/mgr/test/utest/override/cp/sta/core/defs.h57
-rw-r--r--cesar/cp/eoc/sta/mgr/test/utest/override/mac/sar/inc/context.h23
-rw-r--r--cesar/cp/eoc/sta/mgr/test/utest/src/core_stub.c23
-rw-r--r--cesar/cp/eoc/sta/mgr/test/utest/src/net_test.c225
-rw-r--r--cesar/cp/eoc/sta/mgr/test/utest/src/sar_stub.c50
-rw-r--r--cesar/cp/eoc/sta/mgr/test/utest/src/sta-test.c689
-rw-r--r--cesar/cp/eoc/sta/mgr/test/utest/src/sta_mgr.c1584
-rw-r--r--cesar/cp/eoc/sta/mgr/test/utest/src/station_test.c431
-rw-r--r--cesar/cp/eoc/sta/mgr/test/utest/src/test_sta_mgr.c142
-rw-r--r--cesar/cp/eoc/sta/mgr/test/utest/test_sta_mgr.h50
-rw-r--r--cesar/cp/fsm/src/fsm.c17
-rw-r--r--cesar/cp/inc/context.h6
-rw-r--r--cesar/cp/msg/inc/cc_assoc.h3
-rw-r--r--cesar/cp/msg/inc/msg_drv.h38
-rw-r--r--cesar/cp/msg/msg.h1
-rw-r--r--cesar/cp/msg/src/msg.c110
-rw-r--r--cesar/cp/msg/src/msg_cm.c5
-rw-r--r--cesar/cp/msg/src/msg_drv.c76
-rw-r--r--cesar/cp/msg/stub/src/msg_drv.c58
-rw-r--r--cesar/cp/secu/stub/src/secu.c16
-rw-r--r--cesar/cp/src/cp.c16
-rw-r--r--cesar/cp/src/trace.c2
-rw-r--r--cesar/cp/sta/action/Config1
-rw-r--r--cesar/cp/sta/action/Module7
-rw-r--r--cesar/cp/sta/action/inc/context.h4
-rw-r--r--cesar/cp/sta/action/src/bridge.c2
-rw-r--r--cesar/cp/sta/action/src/drv.c8
-rw-r--r--cesar/cp/sta/action/src/misc.c5
-rw-r--r--cesar/cp/sta/action/src/vs.c27
-rw-r--r--cesar/cp/sta/core/core.h10
-rw-r--r--cesar/cp/sta/core/inc/core.h4
-rw-r--r--cesar/cp/sta/core/src/core.c42
-rw-r--r--cesar/cp/sta/core/test/Makefile.mk7
-rw-r--r--cesar/cp/sta/mgr/Config2
-rw-r--r--cesar/cp/sta/mgr/inc/sta.h5
-rw-r--r--cesar/cp/sta/mgr/inc/sta_mgr.h1
-rw-r--r--cesar/cp/sta/mgr/inc/sta_own_data.h10
-rw-r--r--cesar/cp/sta/mgr/net.h20
-rw-r--r--cesar/cp/sta/mgr/src/net.c30
-rw-r--r--cesar/cp/sta/mgr/src/sta.c23
-rw-r--r--cesar/cp/sta/mgr/src/sta_mgr.c11
-rw-r--r--cesar/cp/sta/mgr/src/sta_own_data.c30
-rw-r--r--cesar/cp/sta/mgr/sta.h60
-rw-r--r--cesar/cp/sta/mgr/sta_mgr.h1
-rw-r--r--cesar/cp/sta/mgr/sta_own_data.h47
-rw-r--r--cesar/cp/sta/mgr/stub/src/net.c8
-rw-r--r--cesar/cp/sta/mgr/stub/src/sta.c8
-rw-r--r--cesar/cp/sta/mgr/stub/src/sta_mgr.c1
-rw-r--r--cesar/cp/test/mme/Makefile2
-rw-r--r--cesar/cp/types.h7
-rw-r--r--cesar/doc/tdma/MSTAR_eoc_tdma_solution.rst493
-rw-r--r--cesar/doc/tdma/Makefile8
-rw-r--r--cesar/doc/tdma/beacon-alloc.pngbin0 -> 22319 bytes-rw-r--r--cesar/doc/tdma/polling.pngbin0 -> 17462 bytes-rw-r--r--cesar/ecos/packages/hal/common/current/cdl/interrupts.cdl2
-rw-r--r--cesar/ecos/packages/kernel/current/src/common/thread.cxx169
-rw-r--r--cesar/hal/leon/watchdog.h4
-rw-r--r--cesar/hal/phy/defs.h5
-rw-r--r--cesar/hal/phy/inc/phy_params.txt2
-rw-r--r--cesar/hal/phy/inc/regs.h4
-rw-r--r--cesar/hal/phy/maximus/dur/test/Config1
-rw-r--r--cesar/hal/phy/maximus/dur/test/Makefile1
-rw-r--r--cesar/hal/phy/maximus/src/maximus_phy_ctrl.c10
-rw-r--r--cesar/hal/phy/phy.h16
-rw-r--r--cesar/hal/phy/spoc/src/spoc.c3
-rw-r--r--cesar/hal/phy/src/rx.c2
-rw-r--r--cesar/hal/phy/src/tx.c18
-rw-r--r--cesar/hal/phy/test/bridgedma/Makefile.mk1
-rw-r--r--cesar/host/sci/cesar/test/Makefile1
-rw-r--r--cesar/interface/fcall/test/Makefile1
-rw-r--r--cesar/interface/sniffer/test/Makefile1
-rw-r--r--cesar/interface/test/Makefile.mk1
-rw-r--r--cesar/lib/Config1
-rw-r--r--cesar/lib/blk.h10
-rw-r--r--cesar/lib/src/blk.c6
-rw-r--r--cesar/lib/test/blk/Config2
-rw-r--r--cesar/lib/test/stats/Makefile1
-rw-r--r--cesar/lib/test/trace/Makefile1
-rw-r--r--cesar/lib/utils.h8
-rw-r--r--cesar/mac/ca/ca.h45
-rw-r--r--cesar/mac/ca/inc/alloc.h14
-rw-r--r--cesar/mac/ca/inc/context.h29
-rw-r--r--cesar/mac/ca/mfs.h1
-rw-r--r--cesar/mac/ca/src/access.c196
-rw-r--r--cesar/mac/ca/src/alloc.c7
-rw-r--r--cesar/mac/ca/src/ca.c166
-rw-r--r--cesar/mac/ca/stub/src/ca.c6
-rw-r--r--cesar/mac/ca/test/ca/src/phy_stub.c1
-rw-r--r--cesar/mac/ca/test/ca/src/test_access.c2
-rw-r--r--cesar/mac/ca/test/ca_eoc/Config7
-rw-r--r--cesar/mac/ca/test/ca_eoc/Makefile8
-rw-r--r--cesar/mac/ca/test/ca_eoc/inc/phy_stub.h23
-rw-r--r--cesar/mac/ca/test/ca_eoc/src/test_access.c1002
-rw-r--r--cesar/mac/ca/test/ca_eoc/src/test_alloc.c444
-rw-r--r--cesar/mac/ca/test/ca_eoc/src/test_ca.c39
-rw-r--r--cesar/mac/common/Config6
-rw-r--r--cesar/mac/common/defs.h46
-rw-r--r--cesar/mac/common/mfs.h12
-rw-r--r--cesar/mac/common/src/mfs.c23
-rw-r--r--cesar/mac/common/src/sta.c5
-rw-r--r--cesar/mac/common/src/store.c173
-rw-r--r--cesar/mac/common/src/tonemap.c2
-rw-r--r--cesar/mac/common/src/tonemask.c18
-rw-r--r--cesar/mac/common/sta.h14
-rw-r--r--cesar/mac/common/store.h53
-rw-r--r--cesar/mac/common/test/store/Config3
-rw-r--r--cesar/mac/common/test/store/override/mac/common/mfs.h1
-rw-r--r--cesar/mac/common/test/store/override/mac/common/sta.h1
-rw-r--r--cesar/mac/common/test/store/src/test_store.c16
-rw-r--r--cesar/mac/common/test/tonemap/Config1
-rw-r--r--cesar/mac/common/test/tonemap/src/test_tonemap.c16
-rw-r--r--cesar/mac/common/timings.h6
-rw-r--r--cesar/mac/common/tonemap.h4
-rw-r--r--cesar/mac/pbproc/Config3
-rw-r--r--cesar/mac/pbproc/inc/context.h33
-rw-r--r--cesar/mac/pbproc/inc/fc.h221
-rw-r--r--cesar/mac/pbproc/inc/prep_mpdu.h16
-rw-r--r--cesar/mac/pbproc/pbproc.h16
-rw-r--r--cesar/mac/pbproc/src/fsm.c10
-rw-r--r--cesar/mac/pbproc/src/fsm_handle_fc.c128
-rw-r--r--cesar/mac/pbproc/src/fsm_rx_beacon.c11
-rw-r--r--cesar/mac/pbproc/src/fsm_rx_data.c185
-rw-r--r--cesar/mac/pbproc/src/fsm_rx_sound.c67
-rw-r--r--cesar/mac/pbproc/src/fsm_top.c11
-rw-r--r--cesar/mac/pbproc/src/fsm_tx_data.c210
-rw-r--r--cesar/mac/pbproc/src/fsm_tx_sound.c32
-rw-r--r--cesar/mac/pbproc/src/pbproc.c23
-rw-r--r--cesar/mac/pbproc/src/prep_mpdu.c437
-rw-r--r--cesar/mac/pbproc/src/trace.c67
-rw-r--r--cesar/mac/pbproc/stub/Module1
-rw-r--r--cesar/mac/pbproc/stub/src/pbproc_stub.c26
-rw-r--r--cesar/mac/pbproc/test/fsm/Makefile1
-rw-r--r--cesar/mac/pbproc/test/int/Config7
-rw-r--r--cesar/mac/pbproc/test/int/Makefile2
-rw-r--r--cesar/mac/pbproc/test/int/src/add_seg.c4
-rw-r--r--cesar/mac/pbproc/test/int/src/test_pbproc.c9
-rw-r--r--cesar/mac/pbproc/test/pbproc/src/test_pbproc.c3
-rw-r--r--cesar/mac/pbproc/test/pbproc_eoc/Config7
-rw-r--r--cesar/mac/pbproc/test/pbproc_eoc/Makefile15
-rw-r--r--cesar/mac/pbproc/test/pbproc_eoc/inc/scenario_defs.h349
-rw-r--r--cesar/mac/pbproc/test/pbproc_eoc/inc/test_pbproc.h96
-rw-r--r--cesar/mac/pbproc/test/pbproc_eoc/inc/utils.h82
-rw-r--r--cesar/mac/pbproc/test/pbproc_eoc/src/ca.c179
-rw-r--r--cesar/mac/pbproc/test/pbproc_eoc/src/hal.c27
-rw-r--r--cesar/mac/pbproc/test/pbproc_eoc/src/phy.c400
-rw-r--r--cesar/mac/pbproc/test/pbproc_eoc/src/prep_mpdu.c1925
-rw-r--r--cesar/mac/pbproc/test/pbproc_eoc/src/rx_data.c1932
-rw-r--r--cesar/mac/pbproc/test/pbproc_eoc/src/rx_sound.c353
-rw-r--r--cesar/mac/pbproc/test/pbproc_eoc/src/scenario_defs.c166
-rw-r--r--cesar/mac/pbproc/test/pbproc_eoc/src/test_pbproc.c502
-rw-r--r--cesar/mac/pbproc/test/pbproc_eoc/src/tx_data.c923
-rw-r--r--cesar/mac/pbproc/test/pbproc_eoc/src/tx_sound.c377
-rw-r--r--cesar/mac/pbproc/test/pbproc_eoc/src/utils.c271
-rw-r--r--cesar/mac/sar/src/mfs.c1
-rw-r--r--cesar/mac/sar/src/rx.c1
-rw-r--r--cesar/mac/sar/src/trace.c2
-rw-r--r--cesar/mac/sar/stub/src/sar.c18
-rw-r--r--cesar/mac/sar/test/functional/host-Config3
-rw-r--r--cesar/mac/sar/test/functional/sparc-Config3
-rw-r--r--cesar/mac/sar/test/utest/host/src/misc.c2
-rw-r--r--cesar/mac/sar/test/utest/host/src/reassembly.c14
-rw-r--r--cesar/mac/sar/test/utest/lib/Makefile1
-rw-r--r--cesar/maximus/common/types/phy_types.h4
-rw-r--r--cesar/maximus/python/Makefile2
-rw-r--r--cesar/maximus/python/maximus/station/sta.py5
-rw-r--r--cesar/maximus/scheduler/utest/Makefile1
-rw-r--r--cesar/maximus/sci/utest/scimsg/Makefile1
-rw-r--r--cesar/maximus/sci/utest/server/Makefile1
-rw-r--r--cesar/projects/eoc/Makefile16
-rw-r--r--cesar/projects/eoc/master-Config8
-rw-r--r--cesar/projects/eoc/master-Makefile15
-rw-r--r--cesar/projects/eoc/master-ecos.ecc.sh5
-rw-r--r--cesar/projects/eoc/slave-Config8
-rw-r--r--cesar/projects/eoc/slave-Makefile15
-rw-r--r--cesar/projects/eoc/slave-ecos.ecc.sh5
-rw-r--r--cesar/projects/eoc/src/eoc.c24
-rw-r--r--cesar/station/src/station.c9
-rw-r--r--cesar/test_general/station/common/src/station.c5
-rw-r--r--cesar/test_general/station/compliance-eoc/Makefile20
-rw-r--r--cesar/test_general/station/compliance-eoc/Makefile.mk12
-rw-r--r--cesar/test_general/station/compliance-eoc/master-Config2
-rw-r--r--cesar/test_general/station/compliance-eoc/master-Makefile8
-rw-r--r--cesar/test_general/station/compliance-eoc/master-ecos.ecc.sh5
-rw-r--r--cesar/test_general/station/compliance-eoc/py/sc01_dut_as_a_cco.py96
-rw-r--r--cesar/test_general/station/compliance-eoc/py/test01_eoc_init_one_cco.py95
-rw-r--r--cesar/test_general/station/compliance-eoc/py/test01_eoc_init_one_sta.py94
-rw-r--r--cesar/test_general/station/compliance-eoc/py/test02_eoc_beacon.py121
-rw-r--r--cesar/test_general/station/compliance-eoc/py/test03_eoc_init_cco_sta.py85
-rw-r--r--cesar/test_general/station/compliance-eoc/py/test05_eoc_init_cco_multista.py182
-rw-r--r--cesar/test_general/station/compliance-eoc/py/test06_eoc_change_nek.py101
-rw-r--r--cesar/test_general/station/compliance-eoc/py/trace.py29
-rw-r--r--cesar/test_general/station/compliance-eoc/slave-Config2
-rw-r--r--cesar/test_general/station/compliance-eoc/slave-Makefile8
-rw-r--r--cesar/test_general/station/compliance-eoc/slave-ecos.ecc.sh5
-rw-r--r--cesar/test_general/station/compliance-eoc/src/fcall_av_stub.c26
-rw-r--r--cesar/test_general/station/interoperability/Makefile2
-rw-r--r--cesar/test_general/station/vs_eoc/py/vs_eoc_get_topo.py175
-rw-r--r--cesar/tools/sniffer_phy/Config2
-rw-r--r--cesar/tools/sniffer_phy/Makefile3
-rw-r--r--cesar/tools/sniffer_phy/src/lowlevel.c9
-rw-r--r--cesar/tools/sniffer_phy/src/mme.c83
-rw-r--r--cesar/tools/sniffer_phy/src/test_mme.c9
-rw-r--r--cleopatre/Config.bundle-eoc14
-rw-r--r--cleopatre/Makefile27
-rw-r--r--cleopatre/application/afe/src/afe.c2
-rw-r--r--cleopatre/application/autodiscoveryd/Makefile63
-rw-r--r--cleopatre/application/autodiscoveryd/Module1
-rw-r--r--cleopatre/application/autodiscoveryd/inc/autodiscoveryd.h128
-rw-r--r--cleopatre/application/autodiscoveryd/src/autodiscoveryd.c495
-rw-r--r--cleopatre/application/igmp_snoopd/Makefile3
-rw-r--r--cleopatre/application/igmp_snoopd/igmp_snoopd.conf2
-rw-r--r--cleopatre/application/libmme/Makefile16
-rw-r--r--cleopatre/application/libmme/inc/libmme.h2
-rw-r--r--cleopatre/application/libmme/src/mme.c13
-rw-r--r--cleopatre/application/libspid/.gitignore1
-rw-r--r--cleopatre/application/libspid/Makefile12
-rw-r--r--cleopatre/application/libspid/Module9
l---------cleopatre/application/libspid/config_to_header1
-rw-r--r--cleopatre/application/libspid/inc/defs.h281
-rw-r--r--cleopatre/application/libspid/inc/label.h134
-rw-r--r--cleopatre/application/libspid/inc/libspid.h1328
-rw-r--r--cleopatre/application/libspid/inc/nvram_utils.h2
-rw-r--r--cleopatre/application/libspid/inc/openssl_md5.h100
-rw-r--r--cleopatre/application/libspid/inc/path.h144
-rw-r--r--cleopatre/application/libspid/src/analog_alarm_eoc.c278
-rw-r--r--cleopatre/application/libspid/src/autoconf_eoc.c456
-rw-r--r--cleopatre/application/libspid/src/community_eoc.c859
-rw-r--r--cleopatre/application/libspid/src/config_backup_eoc.c607
-rw-r--r--cleopatre/application/libspid/src/config_item.c31
-rw-r--r--cleopatre/application/libspid/src/config_line.c402
-rw-r--r--cleopatre/application/libspid/src/current_alarm_eoc.c160
-rw-r--r--cleopatre/application/libspid/src/discrete_alarm_eoc.c237
-rw-r--r--cleopatre/application/libspid/src/ethctl_eoc.c644
-rw-r--r--cleopatre/application/libspid/src/ethernet_port_eoc.c732
-rw-r--r--cleopatre/application/libspid/src/hardware.c110
-rw-r--r--cleopatre/application/libspid/src/igmp_snooping_eoc.c462
-rw-r--r--cleopatre/application/libspid/src/image.c268
-rw-r--r--cleopatre/application/libspid/src/maclimit_eoc.c500
-rw-r--r--cleopatre/application/libspid/src/master_config_eoc.c712
-rw-r--r--cleopatre/application/libspid/src/misc.c191
-rw-r--r--cleopatre/application/libspid/src/misc_eoc.c475
-rw-r--r--cleopatre/application/libspid/src/network.c488
-rw-r--r--cleopatre/application/libspid/src/nvram.c35
-rw-r--r--cleopatre/application/libspid/src/openssl_md5.c243
-rw-r--r--cleopatre/application/libspid/src/port_eoc.c1057
-rw-r--r--cleopatre/application/libspid/src/secu.c8
-rw-r--r--cleopatre/application/libspid/src/service_eoc.c1643
-rw-r--r--cleopatre/application/libspid/src/storm_eoc.c622
-rw-r--r--cleopatre/application/libspid/src/system.c808
-rw-r--r--cleopatre/application/libspid/src/tonemap_snr_eoc.c433
-rw-r--r--cleopatre/application/libspid/src/trap_eoc.c454
-rw-r--r--cleopatre/application/libspid/src/upgrade_eoc.c847
-rw-r--r--cleopatre/application/libspid/src/util.c237
-rw-r--r--cleopatre/application/libspid/src/vlan_eoc.c471
-rw-r--r--cleopatre/application/libspid/src/vlan_port_eoc.c664
-rw-r--r--cleopatre/application/libspid/src/wl_eoc.c2132
-rw-r--r--cleopatre/application/managerd/Module3
-rw-r--r--cleopatre/application/managerd/inc/bridge.h4
-rw-r--r--cleopatre/application/managerd/inc/gpio_event.h58
-rw-r--r--cleopatre/application/managerd/inc/js_eoc_mme.h79
-rw-r--r--cleopatre/application/managerd/inc/managerd.h46
-rw-r--r--cleopatre/application/managerd/inc/qos_eoc.h41
-rw-r--r--cleopatre/application/managerd/inc/vs_eoc_mme.h154
-rw-r--r--cleopatre/application/managerd/inc/vs_mme.h119
-rw-r--r--cleopatre/application/managerd/src/bridge.c295
-rw-r--r--cleopatre/application/managerd/src/gpio_event.c171
-rw-r--r--cleopatre/application/managerd/src/js_eoc_mme.c94
-rw-r--r--cleopatre/application/managerd/src/managerd.c222
-rw-r--r--cleopatre/application/managerd/src/mme_nl.c135
-rw-r--r--cleopatre/application/managerd/src/qos_eoc.c77
-rw-r--r--cleopatre/application/managerd/src/vs_eoc_mme.c886
-rw-r--r--cleopatre/application/managerd/src/vs_mme.c1341
-rw-r--r--cleopatre/application/onlined/Makefile78
-rw-r--r--cleopatre/application/onlined/inc/onlined.h193
-rw-r--r--cleopatre/application/onlined/inc/onlined_configure.h80
-rw-r--r--cleopatre/application/onlined/inc/onlined_mme.h55
-rw-r--r--cleopatre/application/onlined/src/onlined.c424
-rw-r--r--cleopatre/application/onlined/src/onlined_configure.c1725
-rw-r--r--cleopatre/application/onlined/src/onlined_mme.c1545
-rw-r--r--cleopatre/application/spidgoahead/.gitignore4
-rw-r--r--cleopatre/application/spidgoahead/LINUX/main.c473
-rw-r--r--cleopatre/application/spidgoahead/LINUX/spidcom_asp_functions.c437
-rw-r--r--cleopatre/application/spidgoahead/Makefile98
-rw-r--r--cleopatre/application/spidgoahead/asp.c322
-rw-r--r--cleopatre/application/spidgoahead/balloc.c974
-rw-r--r--cleopatre/application/spidgoahead/base64.c150
-rw-r--r--cleopatre/application/spidgoahead/cgi.c332
-rw-r--r--cleopatre/application/spidgoahead/default.c603
-rw-r--r--cleopatre/application/spidgoahead/default.css188
-rw-r--r--cleopatre/application/spidgoahead/doc/spc300_spidgoahead_archi.odtbin0 -> 404630 bytes-rw-r--r--cleopatre/application/spidgoahead/ej.h47
-rw-r--r--cleopatre/application/spidgoahead/ejIntrn.h231
-rw-r--r--cleopatre/application/spidgoahead/ejlex.c722
-rw-r--r--cleopatre/application/spidgoahead/ejparse.c1805
-rw-r--r--cleopatre/application/spidgoahead/emfdb.c1064
-rw-r--r--cleopatre/application/spidgoahead/emfdb.h111
-rw-r--r--cleopatre/application/spidgoahead/form.c169
-rw-r--r--cleopatre/application/spidgoahead/h.c196
-rw-r--r--cleopatre/application/spidgoahead/handler.c417
-rw-r--r--cleopatre/application/spidgoahead/license.txt282
-rw-r--r--cleopatre/application/spidgoahead/md5.h50
-rw-r--r--cleopatre/application/spidgoahead/md5c.c338
-rw-r--r--cleopatre/application/spidgoahead/mime.c119
-rw-r--r--cleopatre/application/spidgoahead/misc.c690
-rw-r--r--cleopatre/application/spidgoahead/mocana_ssl.c539
-rw-r--r--cleopatre/application/spidgoahead/page.c143
-rw-r--r--cleopatre/application/spidgoahead/readme.txt3
-rw-r--r--cleopatre/application/spidgoahead/release.htm637
-rw-r--r--cleopatre/application/spidgoahead/release.txt625
-rw-r--r--cleopatre/application/spidgoahead/ringq.c595
-rw-r--r--cleopatre/application/spidgoahead/rom.c194
-rw-r--r--cleopatre/application/spidgoahead/security.c240
-rw-r--r--cleopatre/application/spidgoahead/sock.c792
-rw-r--r--cleopatre/application/spidgoahead/sockGen.c1046
-rw-r--r--cleopatre/application/spidgoahead/sym.c476
-rw-r--r--cleopatre/application/spidgoahead/uemf.c294
-rw-r--r--cleopatre/application/spidgoahead/uemf.h1094
-rw-r--r--cleopatre/application/spidgoahead/um.c1435
-rw-r--r--cleopatre/application/spidgoahead/um.h186
-rw-r--r--cleopatre/application/spidgoahead/um_httpd.conf78
-rw-r--r--cleopatre/application/spidgoahead/umui.c642
-rw-r--r--cleopatre/application/spidgoahead/url.c223
-rw-r--r--cleopatre/application/spidgoahead/value.c1214
-rw-r--r--cleopatre/application/spidgoahead/web/action.asp83
-rw-r--r--cleopatre/application/spidgoahead/web/addgroup.asp43
-rw-r--r--cleopatre/application/spidgoahead/web/addlimit.asp37
-rw-r--r--cleopatre/application/spidgoahead/web/adduser.asp51
-rw-r--r--cleopatre/application/spidgoahead/web/back.pngbin0 -> 488 bytes-rw-r--r--cleopatre/application/spidgoahead/web/banner.asp11
-rw-r--r--cleopatre/application/spidgoahead/web/br0.asp264
-rw-r--r--cleopatre/application/spidgoahead/web/count.asp5
-rw-r--r--cleopatre/application/spidgoahead/web/delgroup.asp28
-rw-r--r--cleopatre/application/spidgoahead/web/dellimit.asp28
-rw-r--r--cleopatre/application/spidgoahead/web/deluser.asp28
-rw-r--r--cleopatre/application/spidgoahead/web/eth0.asp239
-rw-r--r--cleopatre/application/spidgoahead/web/footer.html7
-rw-r--r--cleopatre/application/spidgoahead/web/index.asp27
-rw-r--r--cleopatre/application/spidgoahead/web/jslib/query.js111
-rw-r--r--cleopatre/application/spidgoahead/web/left.pngbin0 -> 2897 bytes-rw-r--r--cleopatre/application/spidgoahead/web/loadcfg.asp24
-rwxr-xr-xcleopatre/application/spidgoahead/web/logo-spidcom.jpgbin0 -> 2271 bytes-rw-r--r--cleopatre/application/spidgoahead/web/nav.asp71
-rw-r--r--cleopatre/application/spidgoahead/web/none.html40
-rw-r--r--cleopatre/application/spidgoahead/web/pattern.pngbin0 -> 597 bytes-rw-r--r--cleopatre/application/spidgoahead/web/plc0.asp307
-rw-r--r--cleopatre/application/spidgoahead/web/savecfg.asp24
-rw-r--r--cleopatre/application/spidgoahead/web/soft.asp15
-rwxr-xr-xcleopatre/application/spidgoahead/web/spidcom.gifbin0 -> 20557 bytes-rw-r--r--cleopatre/application/spidgoahead/web/stat.asp61
-rw-r--r--cleopatre/application/spidgoahead/web/style/doc.css42
-rw-r--r--cleopatre/application/spidgoahead/web/style/help.htm40
-rw-r--r--cleopatre/application/spidgoahead/web/style/menu.htm55
-rw-r--r--cleopatre/application/spidgoahead/web/style/normal_ws.css48
-rw-r--r--cleopatre/application/spidgoahead/web/style/option.htm28
-rw-r--r--cleopatre/application/spidgoahead/web/um.htm10
-rw-r--r--cleopatre/application/spidgoahead/web/ws.gifbin0 -> 1373 bytes-rw-r--r--cleopatre/application/spidgoahead/webcomp.c189
-rw-r--r--cleopatre/application/spidgoahead/webrom.c16
-rw-r--r--cleopatre/application/spidgoahead/webs.c3078
-rw-r--r--cleopatre/application/spidgoahead/webs.h234
-rw-r--r--cleopatre/application/spidgoahead/websSSL.c709
-rw-r--r--cleopatre/application/spidgoahead/websSSL.h66
-rw-r--r--cleopatre/application/spidgoahead/websda.c245
-rw-r--r--cleopatre/application/spidgoahead/websda.h42
-rw-r--r--cleopatre/application/spidgoahead/websuemf.c218
-rw-r--r--cleopatre/application/spidgoahead/wsIntrn.h310
-rw-r--r--cleopatre/application/spidnetsnmp/.gitignore17
-rw-r--r--cleopatre/application/spidnetsnmp/AGENT.txt1167
-rw-r--r--cleopatre/application/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
-rw-r--r--cleopatre/buildroot/Makefile31
-rw-r--r--cleopatre/buildroot/package/Config.in22
-rw-r--r--cleopatre/buildroot/package/autodiscoveryd/Config.in7
-rw-r--r--cleopatre/buildroot/package/autodiscoveryd/autodiscoveryd.mk69
-rw-r--r--cleopatre/buildroot/package/busybox/busybox.mk2
-rw-r--r--cleopatre/buildroot/package/ethtool/ethtool.patch1187
-rw-r--r--cleopatre/buildroot/package/iproute2/iproute2.mk6
-rw-r--r--cleopatre/buildroot/package/iproute2/iproute2.patch10
-rw-r--r--cleopatre/buildroot/package/iptables/Config.in3
-rw-r--r--cleopatre/buildroot/package/lzo/lzo.mk1
-rw-r--r--cleopatre/buildroot/package/netfilter/Config.in5
-rw-r--r--cleopatre/buildroot/package/onlined/Config.in7
-rw-r--r--cleopatre/buildroot/package/onlined/onlined.mk70
-rw-r--r--cleopatre/buildroot/package/openssh/S50sshd64
-rw-r--r--cleopatre/buildroot/package/openssh/S71sshd61
-rw-r--r--cleopatre/buildroot/package/openssh/openssh.mk7
-rw-r--r--cleopatre/buildroot/package/openssh/openssh.patch89
-rw-r--r--cleopatre/buildroot/package/plcdrv/Config.in22
-rw-r--r--cleopatre/buildroot/package/plcdrv/plcdrv.mk6
-rw-r--r--cleopatre/buildroot/package/spidgoahead/Config.in9
-rw-r--r--cleopatre/buildroot/package/spidgoahead/spidgoahead.mk113
-rw-r--r--cleopatre/buildroot/package/spidnetsnmp/Config.in16
-rw-r--r--cleopatre/buildroot/package/spidnetsnmp/spidnetsnmp.mk163
-rw-r--r--cleopatre/buildroot/package/zlib/zlib.mk2
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/Config.in112
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/Makefile.in16
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/common/busybox.config.eoc_base648
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/common/busybox.config.eoc_master29
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/common/defconfig.eoc_arch_mse5002
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/common/defconfig.eoc_arch_spc3001
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/common/defconfig.eoc_base540
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/common/defconfig.eoc_master11
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/common/defconfig.eoc_slave9
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/common/linux26.config.chip_mse5001
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/common/linux26.config.eoc_base832
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/common/linux26.config.eoc_master1
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/common/linux26.config.eoc_master_mse5001
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/common/linux26.config.eoc_netfilter96
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/common/linux26.config.eoc_slave1
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/common/linux26.config.eoc_slave_mse5001
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/common/target_skeleton_add_eoc_master/etc/alarm_analog.conf9
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/common/target_skeleton_add_eoc_master/etc/alarm_discrete.conf4
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/common/target_skeleton_add_eoc_master/etc/confbak.conf1
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/common/target_skeleton_add_eoc_master/etc/eoc.conf3
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/common/target_skeleton_add_eoc_master/etc/ethctl.conf1
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/common/target_skeleton_add_eoc_master/etc/igmp.conf1
-rwxr-xr-xcleopatre/buildroot/target/device/Spidcom/common/target_skeleton_add_eoc_master/etc/init.d/S55wl45
-rwxr-xr-xcleopatre/buildroot/target/device/Spidcom/common/target_skeleton_add_eoc_master/etc/init.d/S56service43
-rwxr-xr-xcleopatre/buildroot/target/device/Spidcom/common/target_skeleton_add_eoc_master/etc/init.d/S58vlan25
-rwxr-xr-xcleopatre/buildroot/target/device/Spidcom/common/target_skeleton_add_eoc_master/etc/init.d/S59broadstorm24
-rwxr-xr-xcleopatre/buildroot/target/device/Spidcom/common/target_skeleton_add_eoc_master/etc/init.d/S60onlined41
-rwxr-xr-xcleopatre/buildroot/target/device/Spidcom/common/target_skeleton_add_eoc_master/etc/init.d/S61autodiscoveryd40
-rwxr-xr-xcleopatre/buildroot/target/device/Spidcom/common/target_skeleton_add_eoc_master/etc/init.d/S62master_bwlimit24
-rwxr-xr-xcleopatre/buildroot/target/device/Spidcom/common/target_skeleton_add_eoc_master/etc/init.d/S80telnetd41
-rwxr-xr-xcleopatre/buildroot/target/device/Spidcom/common/target_skeleton_add_eoc_master/etc/init.d/S90httpd41
-rwxr-xr-xcleopatre/buildroot/target/device/Spidcom/common/target_skeleton_add_eoc_master/etc/init.d/S91stp37
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/common/target_skeleton_add_eoc_master/etc/maclimit.conf1
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/common/target_skeleton_add_eoc_master/etc/master.conf14
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/common/target_skeleton_add_eoc_master/etc/port.conf1
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/common/target_skeleton_add_eoc_master/etc/port_v2.conf1
-rwxr-xr-xcleopatre/buildroot/target/device/Spidcom/common/target_skeleton_add_eoc_master/etc/rc.sysinit25
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/common/target_skeleton_add_eoc_master/etc/save.lst5
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/common/target_skeleton_add_eoc_master/etc/service.conf1
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/common/target_skeleton_add_eoc_master/etc/slave.conf2
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/common/target_skeleton_add_eoc_master/etc/snmp.conf14
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/common/target_skeleton_add_eoc_master/etc/system.conf40
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/common/target_skeleton_add_eoc_master/etc/trap.conf1
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/common/target_skeleton_add_eoc_master/etc/update.info1
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/common/target_skeleton_add_eoc_master/etc/vlan.conf1
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/common/target_skeleton_add_eoc_master/etc/web_reset.info1
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/common/target_skeleton_add_eoc_master/etc/white_list.conf1
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/common/target_skeleton_add_eoc_master/var/run/info/alarm.info1
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/common/target_skeleton_add_eoc_master/var/run/info/eoc.info2
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/common/target_skeleton_add_eoc_master/var/run/info/online.info1
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/common/target_skeleton_add_eoc_master/var/run/info/snmp.info1
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/common/target_skeleton_add_eoc_master/var/run/info/trap.info1
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/common/target_skeleton_add_eoc_slave/etc/alarm.conf1
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/common/target_skeleton_add_eoc_slave/etc/eoc.conf2
-rwxr-xr-xcleopatre/buildroot/target/device/Spidcom/common/target_skeleton_add_eoc_slave/etc/init.d/S80telnetd41
-rwxr-xr-xcleopatre/buildroot/target/device/Spidcom/common/target_skeleton_add_eoc_slave/etc/init.d/S91stp37
-rwxr-xr-xcleopatre/buildroot/target/device/Spidcom/common/target_skeleton_add_eoc_slave/etc/rc.sysinit25
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/common/target_skeleton_add_eoc_slave/etc/slave.conf2
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/common/target_skeleton_add_eoc_slave/etc/system.conf23
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/common/target_skeleton_add_eoc_slave/var/run/.empty0
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/common/target_skeleton_base/etc/hpav.conf4
-rwxr-xr-xcleopatre/buildroot/target/device/Spidcom/desc.py9
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/response_file.mk7
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/targets/mcr500_eoc_master/defconfig.part4
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/targets/mcr500_eoc_master/desc32
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/targets/mcr500_eoc_master/linux26.config.part4
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/targets/mcr500_eoc_master/target_skeleton_add/etc/network/interfaces30
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/targets/mcr500_eoc_slave/defconfig.part4
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/targets/mcr500_eoc_slave/desc31
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/targets/mcr500_eoc_slave/linux26.config.part4
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/targets/mcr500_eoc_slave/target_skeleton_add/etc/network/interfaces24
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/targets/mcr510_eoc_slave/defconfig.part4
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/targets/mcr510_eoc_slave/desc31
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/targets/mcr510_eoc_slave/linux26.config.part3
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/targets/mcr510_eoc_slave/target_skeleton_add/etc/network/interfaces24
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/targets/mse500dini_300_eoc_master/defconfig.part8
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/targets/mse500dini_300_eoc_master/desc25
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/targets/mse500dini_300_eoc_master/linux26.config.part18
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/targets/mse500dini_300_eoc_master/target_skeleton_add/etc/network/interfaces24
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/targets/mse500dini_300_eoc_slave/defconfig.part8
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/targets/mse500dini_300_eoc_slave/desc26
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/targets/mse500dini_300_eoc_slave/linux26.config.part18
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/targets/mse500dini_300_eoc_slave/target_skeleton_add/etc/network/interfaces24
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/targets/msk500_eoc_master/defconfig.part4
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/targets/msk500_eoc_master/desc32
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/targets/msk500_eoc_master/linux26.config.part4
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/targets/msk500_eoc_master/target_skeleton_add/etc/network/interfaces30
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/targets/msk500_eoc_slave/defconfig.part4
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/targets/msk500_eoc_slave/desc31
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/targets/msk500_eoc_slave/linux26.config.part4
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/targets/msk500_eoc_slave/target_skeleton_add/etc/network/interfaces24
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/targets/scr300_eoc_master/defconfig.part4
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/targets/scr300_eoc_master/desc30
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/targets/scr300_eoc_master/linux26.config.part3
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/targets/scr300_eoc_master/target_skeleton_add/etc/network/interfaces24
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/targets/scr310_eoc_master/defconfig.part10
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/targets/scr310_eoc_master/desc30
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/targets/scr310_eoc_master/linux26.config.part3
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/targets/scr310_eoc_master/target_skeleton_add/etc/network/interfaces24
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/targets/scr310_eoc_slave/defconfig.part4
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/targets/scr310_eoc_slave/desc29
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/targets/scr310_eoc_slave/linux26.config.part3
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/targets/scr310_eoc_slave/target_skeleton_add/etc/network/interfaces24
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/targets/spk300g_eoc_master/defconfig.part4
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/targets/spk300g_eoc_master/desc30
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/targets/spk300g_eoc_master/linux26.config.part3
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/targets/spk300g_eoc_master/target_skeleton_add/etc/network/interfaces24
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/targets/spk300g_eoc_slave/defconfig.part4
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/targets/spk300g_eoc_slave/desc29
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/targets/spk300g_eoc_slave/linux26.config.part3
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/targets/spk300g_eoc_slave/target_skeleton_add/etc/network/interfaces24
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/targets/spk310_eoc_master/defconfig.part4
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/targets/spk310_eoc_master/desc30
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/targets/spk310_eoc_master/linux26.config.part3
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/targets/spk310_eoc_master/target_skeleton_add/etc/network/interfaces24
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/targets/spk310_eoc_slave/defconfig.part4
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/targets/spk310_eoc_slave/desc29
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/targets/spk310_eoc_slave/linux26.config.part3
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/targets/spk310_eoc_slave/target_skeleton_add/etc/network/interfaces24
-rw-r--r--cleopatre/buildroot/target/device/x86/i386/busybox.config4
-rw-r--r--cleopatre/buildroot/target/initramfs/initramfs.mk9
-rw-r--r--cleopatre/buildroot/target/linux/Makefile.in2
-rw-r--r--cleopatre/busybox-1.11.1-spc300/Makefile12
-rw-r--r--cleopatre/busybox-1.11.1-spc300/archival/tar.c2
-rw-r--r--cleopatre/busybox-1.11.1-spc300/include/applets.h18
-rw-r--r--cleopatre/busybox-1.11.1-spc300/include/usage.h96
-rw-r--r--cleopatre/busybox-1.11.1-spc300/loginutils/login.c792
-rw-r--r--cleopatre/busybox-1.11.1-spc300/miscutils/Config.in27
-rw-r--r--cleopatre/busybox-1.11.1-spc300/miscutils/Kbuild4
-rw-r--r--cleopatre/busybox-1.11.1-spc300/miscutils/factory.c28
-rw-r--r--cleopatre/busybox-1.11.1-spc300/miscutils/nvram.c504
-rw-r--r--cleopatre/busybox-1.11.1-spc300/miscutils/save.c28
-rw-r--r--cleopatre/busybox-1.11.1-spc300/miscutils/wl.c611
-rw-r--r--cleopatre/busybox-1.11.1-spc300/networking/Config.in84
-rw-r--r--cleopatre/busybox-1.11.1-spc300/networking/Kbuild14
-rw-r--r--cleopatre/busybox-1.11.1-spc300/networking/broadstorm.c47
-rw-r--r--cleopatre/busybox-1.11.1-spc300/networking/confbackup.c441
-rw-r--r--cleopatre/busybox-1.11.1-spc300/networking/ethctl.c498
-rw-r--r--cleopatre/busybox-1.11.1-spc300/networking/ethport.c341
-rw-r--r--cleopatre/busybox-1.11.1-spc300/networking/ftpgetput.c67
-rw-r--r--cleopatre/busybox-1.11.1-spc300/networking/igmp.c243
-rw-r--r--cleopatre/busybox-1.11.1-spc300/networking/maclimit.c277
-rw-r--r--cleopatre/busybox-1.11.1-spc300/networking/master_bwlimit.c49
-rw-r--r--cleopatre/busybox-1.11.1-spc300/networking/mme.c729
-rw-r--r--cleopatre/busybox-1.11.1-spc300/networking/port.c360
-rw-r--r--cleopatre/busybox-1.11.1-spc300/networking/service.c461
-rw-r--r--cleopatre/busybox-1.11.1-spc300/networking/sp.c378
-rw-r--r--cleopatre/busybox-1.11.1-spc300/networking/tcpudp.c18
-rw-r--r--cleopatre/busybox-1.11.1-spc300/networking/telnet.c14
-rw-r--r--cleopatre/busybox-1.11.1-spc300/networking/telnetd.c989
-rw-r--r--cleopatre/busybox-1.11.1-spc300/networking/tp.c266
-rw-r--r--cleopatre/busybox-1.11.1-spc300/networking/udhcp/dhcpc.c15
-rw-r--r--cleopatre/busybox-1.11.1-spc300/networking/vlan.c208
-rw-r--r--cleopatre/busybox-1.11.1-spc300/networking/vlanport.c393
-rw-r--r--cleopatre/devkit/doc/cleopatre_autodiscoveryd_specs.odtbin0 -> 1468555 bytes-rw-r--r--cleopatre/devkit/doc/cleopatre_eoc_master_features.odtbin0 -> 1470002 bytes-rw-r--r--cleopatre/devkit/doc/cleopatre_onlined_specs.odtbin0 -> 124624 bytes-rw-r--r--cleopatre/devkit/doc/cleopatre_tftp_image_update_protocol.odtbin0 -> 1471681 bytes-rw-r--r--cleopatre/devkit/plcd/inc/plcd_ctx.h18
-rw-r--r--cleopatre/devkit/plcd/src/plcd_main.c1
-rw-r--r--cleopatre/devkit/plcd/src/plcd_stack.c150
-rw-r--r--cleopatre/devkit/tests/autodiscoverd/utests/Makefile44
-rw-r--r--cleopatre/devkit/tests/autodiscoverd/utests/src/autodiscoveryd_utests.c231
-rw-r--r--cleopatre/devkit/tests/autodiscoverd/utests/testfiles/system.conf3
-rw-r--r--cleopatre/devkit/tests/autodiscoverd/utests/testfiles/version3
-rw-r--r--cleopatre/devkit/tests/common/Makefile2
-rw-r--r--cleopatre/devkit/tests/libmme/utests/Makefile2
-rw-r--r--cleopatre/devkit/tests/libspid/utests/Makefile56
-rw-r--r--cleopatre/devkit/tests/libspid/utests/inc/eoc_utests.h103
-rw-r--r--cleopatre/devkit/tests/libspid/utests/inc/misc_utests.h32
-rw-r--r--cleopatre/devkit/tests/libspid/utests/inc/utest_launcher.h20
-rw-r--r--cleopatre/devkit/tests/libspid/utests/inc/utest_tonemap_snr_eoc.h84
-rw-r--r--cleopatre/devkit/tests/libspid/utests/src/analog_alarm_eoc_utests.c268
-rw-r--r--cleopatre/devkit/tests/libspid/utests/src/autoconf_eoc_utests.c189
-rw-r--r--cleopatre/devkit/tests/libspid/utests/src/community_eoc_utests.c472
-rw-r--r--cleopatre/devkit/tests/libspid/utests/src/config_backup_eoc_utests.c516
-rw-r--r--cleopatre/devkit/tests/libspid/utests/src/config_line_utests.c155
-rw-r--r--cleopatre/devkit/tests/libspid/utests/src/current_alarm_eoc_utests.c210
-rw-r--r--cleopatre/devkit/tests/libspid/utests/src/discrete_alarm_eoc_utests.c234
-rw-r--r--cleopatre/devkit/tests/libspid/utests/src/ethctl_eoc_utests.c454
-rw-r--r--cleopatre/devkit/tests/libspid/utests/src/ethernet_port_eoc_utests.c542
-rw-r--r--cleopatre/devkit/tests/libspid/utests/src/hardware_utests.c162
-rw-r--r--cleopatre/devkit/tests/libspid/utests/src/igmp_snooping_eoc_utests.c300
-rw-r--r--cleopatre/devkit/tests/libspid/utests/src/image_utests.c2
-rw-r--r--cleopatre/devkit/tests/libspid/utests/src/maclimit_eoc_utests.c367
-rw-r--r--cleopatre/devkit/tests/libspid/utests/src/master_config_eoc_utests.c321
-rw-r--r--cleopatre/devkit/tests/libspid/utests/src/misc_eoc_utests.c323
-rw-r--r--cleopatre/devkit/tests/libspid/utests/src/misc_utests.c220
-rw-r--r--cleopatre/devkit/tests/libspid/utests/src/network_utests.c168
-rw-r--r--cleopatre/devkit/tests/libspid/utests/src/port_eoc_stub.c78
-rw-r--r--cleopatre/devkit/tests/libspid/utests/src/port_eoc_utests.c495
-rw-r--r--cleopatre/devkit/tests/libspid/utests/src/service_eoc_stub.c107
-rw-r--r--cleopatre/devkit/tests/libspid/utests/src/service_eoc_utests.c682
-rw-r--r--cleopatre/devkit/tests/libspid/utests/src/storm_eoc_utests.c445
-rw-r--r--cleopatre/devkit/tests/libspid/utests/src/system_utests.c895
-rw-r--r--cleopatre/devkit/tests/libspid/utests/src/trap_eoc_utests.c373
-rw-r--r--cleopatre/devkit/tests/libspid/utests/src/upgrade_eoc_utests.c218
-rw-r--r--cleopatre/devkit/tests/libspid/utests/src/utest_launcher.c30
-rw-r--r--cleopatre/devkit/tests/libspid/utests/src/utest_tonemap_snr_eoc.c223
-rw-r--r--cleopatre/devkit/tests/libspid/utests/src/utest_tonemap_snr_eoc_cap.c304
-rw-r--r--cleopatre/devkit/tests/libspid/utests/src/util_utests.c266
-rw-r--r--cleopatre/devkit/tests/libspid/utests/src/vlan_port_utests.c362
-rw-r--r--cleopatre/devkit/tests/libspid/utests/src/vlan_utests.c346
-rw-r--r--cleopatre/devkit/tests/libspid/utests/src/wl_eoc_stub.c108
-rw-r--r--cleopatre/devkit/tests/libspid/utests/src/wl_eoc_utests.c1138
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/alarm.info7
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/alarm_analog.conf3
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/alarm_discrete.conf4
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/confbak.conf4
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/confbak_duindex.conf4
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/config.tarbin0 -> 20480 bytes-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/eoc.conf3
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/eoc_1.conf1
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/eoc_2.conf1
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/eoc_3.conf1
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/eth_port_mac_1.conf6
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/eth_port_mac_2.conf20
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/ethctl.conf5
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/ethctl_check.conf4
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/ethctl_dumac.conf5
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/ethport.conf21
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/firmware.imgbin0 -> 5011 bytes-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/hostname1
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/igmp.conf5
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/igmp_check.conf4
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/igmp_dumac.conf5
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/image1.tstbin1028 -> 1024 bytes-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/image2.tstbin1028 -> 1024 bytes-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/line.cnf1
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/line_removed.cnf1
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/maclimit.conf6
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/maclimit_check.conf5
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/maclimitation_dumac.conf7
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/master.conf10
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/master.tarbin0 -> 10240 bytes-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/network_br.tst26
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/nvram1.tstbin1776 -> 1776 bytes-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/nvram2.tstbin1776 -> 1776 bytes-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/online.info5
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/port.conf21
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/port_error_mac.conf21
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/port_no_service_index.conf21
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/port_sync.conf7
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/port_v2.conf21
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/port_wl_mac_change.conf21
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/reset_cause.tst1
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/save.lst5
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/service.conf2
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/service_dup_index.conf3
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/service_error_acs.conf2
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/service_error_name.conf2
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/service_error_qos.conf2
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/service_error_type.conf2
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/service_pir_cir.conf2
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/service_sync.conf1
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/slave.conf2
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/snmpd.conf104
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/storm.conf21
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/storm_protection_dup_key.conf21
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/storm_protection_index_err.conf21
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/storm_protection_mac_format.conf21
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/storm_protection_mac_not_in_wl.conf21
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/storm_protection_mult_en_err.conf21
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/storm_protection_mult_thr_err.conf21
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/storm_protection_storm_en_err.conf21
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/storm_protection_storm_thr_err.conf21
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/storm_protection_unknow_en_err.conf21
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/storm_protection_unknow_thr_err.conf21
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/system.conf12
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/system_no_vlan_num.conf9
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/system_v2.conf12
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/trap.conf5
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/trap_community_long.conf5
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/trap_du_ip.conf6
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/trap_en_error.conf5
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/trap_ip_error.conf5
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/trap_null_community.conf5
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/update.info4
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/vlan_port_error1.conf20
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/vlan_port_error2.conf22
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/vlan_port_error3.conf22
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/vlan_port_line2.conf3
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/vlan_port_line7.conf8
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/vlan_table.conf7
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/vlan_table_du_id.conf8
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/vlan_table_id_0.conf7
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/vlan_table_id_4096.conf7
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/vlan_table_value_error.conf7
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/vlanport.conf21
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/vlanport_no_vlanid.conf21
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/white_list.conf4
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/white_list.info1
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/white_list_tei.info1
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/wl.conf_error_auth4
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/wl.conf_error_dpw4
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/wl.conf_error_etime4
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/wl.conf_error_ip4
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/wl.conf_error_ip14
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/wl.conf_error_mac4
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/wl.conf_error_mac14
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/wl.conf_error_output4
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/wl.conf_error_ptime4
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/wl.conf_error_stime4
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/wl.conf_error_tei4
-rw-r--r--cleopatre/devkit/tests/libspid/utests/testfiles/wl.conf_no_error4
-rw-r--r--cleopatre/devkit/tests/managerd/utests/Makefile15
-rw-r--r--cleopatre/devkit/tests/managerd/utests/override/inc/managerd_config.h1
-rw-r--r--cleopatre/devkit/tests/managerd/utests/override/inc/stub.h1
-rw-r--r--cleopatre/devkit/tests/managerd/utests/override/src/libmme_stub.c405
-rw-r--r--cleopatre/devkit/tests/managerd/utests/override/src/libspid_stub.c124
-rw-r--r--cleopatre/devkit/tests/managerd/utests/src/qos_eoc_utests.c191
-rw-r--r--cleopatre/devkit/tests/managerd/utests/src/vs_eoc_mme_utests.c201
-rw-r--r--cleopatre/devkit/tests/managerd/utests/src/vs_mme_utests.c33
-rw-r--r--cleopatre/devkit/tests/managerd/utests/testfiles/eoc.conf3
-rw-r--r--cleopatre/devkit/tests/managerd/utests/testfiles/service.conf2
-rw-r--r--cleopatre/devkit/tests/managerd/utests/testfiles/slave.conf2
-rw-r--r--cleopatre/devkit/tests/onlined/ftests/Makefile30
-rwxr-xr-xcleopatre/devkit/tests/onlined/ftests/onlined_ftest.py126
-rw-r--r--cleopatre/devkit/tests/onlined/ftests/stub/libmme/inc/libmme.h141
-rw-r--r--cleopatre/devkit/tests/onlined/ftests/stub/libmme/src/mme.c456
-rw-r--r--cleopatre/devkit/tests/onlined/ftests/testfiles/expected_online.info6
-rw-r--r--cleopatre/devkit/tests/onlined/ftests/testfiles/expected_update.info6
-rw-r--r--cleopatre/devkit/tests/onlined/ftests/testfiles/port.conf20
-rw-r--r--cleopatre/devkit/tests/onlined/ftests/testfiles/service.conf8
-rw-r--r--cleopatre/devkit/tests/onlined/ftests/testfiles/slave.conf2
-rw-r--r--cleopatre/devkit/tests/onlined/ftests/testfiles/system.conf30
-rw-r--r--cleopatre/devkit/tests/onlined/ftests/testfiles/update.info6
-rw-r--r--cleopatre/devkit/tests/onlined/ftests/testfiles/white_list.conf6
-rw-r--r--cleopatre/devkit/tests/onlined/utests/Makefile79
-rw-r--r--cleopatre/devkit/tests/onlined/utests/inc/eoc_utests.h35
-rw-r--r--cleopatre/devkit/tests/onlined/utests/inc/libspid_stubs.h6
-rw-r--r--cleopatre/devkit/tests/onlined/utests/inc/onlined_mme_utests.h18
-rw-r--r--cleopatre/devkit/tests/onlined/utests/inc/onlined_utests.h19
-rw-r--r--cleopatre/devkit/tests/onlined/utests/src/libspid_stubs.c392
-rw-r--r--cleopatre/devkit/tests/onlined/utests/src/onlined_mme_utests.c786
-rw-r--r--cleopatre/devkit/tests/onlined/utests/src/onlined_utests.c726
-rw-r--r--cleopatre/devkit/tests/onlined/utests/testfiles/ethctl.conf5
-rw-r--r--cleopatre/devkit/tests/onlined/utests/testfiles/igmp.conf5
-rw-r--r--cleopatre/devkit/tests/onlined/utests/testfiles/maclimit.conf4
-rw-r--r--cleopatre/devkit/tests/onlined/utests/testfiles/master_bcast_limit.conf4
-rw-r--r--cleopatre/devkit/tests/onlined/utests/testfiles/master_unknown_limit.conf4
-rw-r--r--cleopatre/devkit/tests/onlined/utests/testfiles/port.conf6
-rw-r--r--cleopatre/devkit/tests/onlined/utests/testfiles/port_v2.conf21
-rw-r--r--cleopatre/devkit/tests/onlined/utests/testfiles/service.conf2
-rw-r--r--cleopatre/devkit/tests/onlined/utests/testfiles/slave.conf2
-rw-r--r--cleopatre/devkit/tests/onlined/utests/testfiles/slave_mac.conf2
-rw-r--r--cleopatre/devkit/tests/onlined/utests/testfiles/slave_output.conf2
-rw-r--r--cleopatre/devkit/tests/onlined/utests/testfiles/system.conf22
-rw-r--r--cleopatre/devkit/tests/onlined/utests/testfiles/system_v2.conf23
-rw-r--r--cleopatre/devkit/tests/onlined/utests/testfiles/update.info4
-rw-r--r--cleopatre/devkit/tests/onlined/utests/testfiles/update.info_fail4
-rw-r--r--cleopatre/devkit/tests/onlined/utests/testfiles/update.info_pass4
-rw-r--r--cleopatre/devkit/tests/onlined/utests/testfiles/white_list.conf4
-rwxr-xr-xcleopatre/devkit/tests/overnight_utests/ot229
-rw-r--r--cleopatre/devkit/tests/plcd/override/ioctl.h23
-rw-r--r--cleopatre/devkit/tests/plcd/override/spc300-reset_cause.h17
-rw-r--r--cleopatre/devkit/tests/plcdrv/utests/stub/linux/inc/asm/arch/nvram.h8
-rw-r--r--cleopatre/devkit/tests/plcdrv/utests/stub/linux/inc/asm/arch/platform.h3
-rw-r--r--cleopatre/devkit/tests/stub/doc/ReadMe.txt74
-rw-r--r--cleopatre/devkit/tests/stub/libmme/Module1
-rw-r--r--cleopatre/devkit/tests/stub/libmme/inc/mme.h38
-rw-r--r--cleopatre/devkit/tests/stub/libmme/src/mme.c346
-rw-r--r--cleopatre/devkit/tests/stub/libspid/Module1
-rw-r--r--cleopatre/devkit/tests/stub/libspid/inc/config_item_utests.h31
-rw-r--r--cleopatre/devkit/tests/stub/libspid/inc/libspid_stub.h10
-rw-r--r--cleopatre/devkit/tests/stub/libspid/src/image.c109
-rw-r--r--cleopatre/devkit/tests/stub/libspid/src/network.c75
-rw-r--r--cleopatre/devkit/tests/stub/libspid/src/system.c193
-rw-r--r--cleopatre/devkit/tests/stub/libspid/src/upgrade_eoc.c31
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/back_to_back/back_to_back_1-1_uni_1514_10sX20-10MBs.sig170
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/latency/1-1/bidirectional/frame_size__1024/latency_1-1_bi_1024_600sX1.sig170
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/latency/1-1/bidirectional/frame_size__128/latency_1-1_bi_128_600sX1.sig170
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/latency/1-1/bidirectional/frame_size__1280/latency_1-1_bi_1280_600sX1.sig170
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/latency/1-1/bidirectional/frame_size__1514/latency_1-1_bi_1514_600sX1.sig170
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/latency/1-1/bidirectional/frame_size__256/latency_1-1_bi_256_600sX1.sig170
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/latency/1-1/bidirectional/frame_size__512/latency_1-1_bi_512_600sX1.sig170
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/latency/1-1/bidirectional/frame_size__64/latency_1-1_bi_64_600sX1.sig170
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/latency/1-1/unidirectional/frame_size__1024/latency_1-1_uni_1024_600sX1.sig170
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/latency/1-1/unidirectional/frame_size__1024/latency_1-1_uni_1024_600sX1_reverse.sig170
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/latency/1-1/unidirectional/frame_size__128/latency_1-1_uni_128_600sX1.sig170
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/latency/1-1/unidirectional/frame_size__128/latency_1-1_uni_128_600sX1_reverse.sig170
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/latency/1-1/unidirectional/frame_size__1280/latency_1-1_uni_1280_600sX1.sig170
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/latency/1-1/unidirectional/frame_size__1280/latency_1-1_uni_1280_600sX1_reverse.sig170
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/latency/1-1/unidirectional/frame_size__1514/latency_1-1_uni_1514_600sX1.sig170
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/latency/1-1/unidirectional/frame_size__1514/latency_1-1_uni_1514_600sX1_reverse.sig170
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/latency/1-1/unidirectional/frame_size__256/latency_1-1_uni_256_600sX1.sig170
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/latency/1-1/unidirectional/frame_size__256/latency_1-1_uni_256_600sX1_reverse.sig170
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/latency/1-1/unidirectional/frame_size__512/latency_1-1_uni_512_600sX1.sig170
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/latency/1-1/unidirectional/frame_size__512/latency_1-1_uni_512_600sX1_reverse.sig170
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/latency/1-1/unidirectional/frame_size__64/latency_1-1_uni_64_600sX1.sig170
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/latency/1-1/unidirectional/frame_size__64/latency_1-1_uni_64_600sX1_reverse.sig170
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/packet_loss/1-1/bidirectional/frame_size__1024/packet_loss_1-1_bi_1024_999sX1.sig170
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/packet_loss/1-1/bidirectional/frame_size__128/packet_loss_1-1_bi_128_999sX1.sig170
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/packet_loss/1-1/bidirectional/frame_size__1280/packet_loss_1-1_bi_1280_999sX1.sig170
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/packet_loss/1-1/bidirectional/frame_size__1514/packet_loss_1-1_bi_1514_999sX1.sig170
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/packet_loss/1-1/bidirectional/frame_size__256/packet_loss_1-1_bi_256_999sX1.sig170
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/packet_loss/1-1/bidirectional/frame_size__512/packet_loss_1-1_bi_512_999sX1.sig170
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/packet_loss/1-1/bidirectional/frame_size__64/packet_loss_1-1_bi_64_999sX1.sig170
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/packet_loss/1-1/unidirectional/frame_size__1024/packet_loss_1-1_uni_1024_999sX1.sig170
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/packet_loss/1-1/unidirectional/frame_size__1024/packet_loss_1-1_uni_1024_999sX1_reverse.sig170
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/packet_loss/1-1/unidirectional/frame_size__128/packet_loss_1-1_uni_128_999sX1.sig170
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/packet_loss/1-1/unidirectional/frame_size__128/packet_loss_1-1_uni_128_999sX1_reverse.sig170
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/packet_loss/1-1/unidirectional/frame_size__1280/packet_loss_1-1_uni_1280_999sX1.sig170
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/packet_loss/1-1/unidirectional/frame_size__1280/packet_loss_1-1_uni_1280_999sX1_reverse.sig170
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/packet_loss/1-1/unidirectional/frame_size__1514/packet_loss_1-1_uni_1514_999sX1.sig170
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/packet_loss/1-1/unidirectional/frame_size__1514/packet_loss_1-1_uni_1514_999sX1_reverse.sig170
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/packet_loss/1-1/unidirectional/frame_size__256/packet_loss_1-1_uni_256_999sX1.sig170
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/packet_loss/1-1/unidirectional/frame_size__256/packet_loss_1-1_uni_256_999sX1_reverse.sig170
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/packet_loss/1-1/unidirectional/frame_size__512/packet_loss_1-1_uni_512_999sX1.sig170
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/packet_loss/1-1/unidirectional/frame_size__512/packet_loss_1-1_uni_512_999sX1_reverse.sig170
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/packet_loss/1-1/unidirectional/frame_size__64/packet_loss_1-1_uni_64_999sX1.sig170
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/packet_loss/1-1/unidirectional/frame_size__64/packet_loss_1-1_uni_64_999sX1_reverse.sig170
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/packet_loss/1-X/frame_size__1024/packet_loss_1-X_uni_1024_999sX1.sig177
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/packet_loss/1-X/frame_size__128/packet_loss_1-X_uni_128_999sX1.sig177
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/packet_loss/1-X/frame_size__1280/packet_loss_1-X_uni_1280_999sX1.sig177
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/packet_loss/1-X/frame_size__1514/packet_loss_1-X_uni_1514_999sX1.sig177
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/packet_loss/1-X/frame_size__256/packet_loss_1-X_uni_256_999sX1.sig177
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/packet_loss/1-X/frame_size__512/packet_loss_1-X_uni_512_999sX1.sig177
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/packet_loss/1-X/frame_size__64/packet_loss_1-X_uni_64_999sX1.sig177
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/packet_loss/X-1/frame_size__1024/packet_loss_X-1_uni_1024_999sX1.sig177
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/packet_loss/X-1/frame_size__128/packet_loss_X-1_uni_128_999sX1.sig177
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/packet_loss/X-1/frame_size__1280/packet_loss_X-1_uni_1280_999sX1.sig177
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/packet_loss/X-1/frame_size__1514/packet_loss_X-1_uni_1514_999sX1.sig177
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/packet_loss/X-1/frame_size__256/packet_loss_X-1_uni_256_999sX1.sig177
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/packet_loss/X-1/frame_size__512/packet_loss_X-1_uni_512_999sX1.sig177
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/packet_loss/X-1/frame_size__64/packet_loss_X-1_uni_64_999sX1.sig178
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/start.sig170
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/1-1/bidirectional/frame_size__1024/throughput_1-1_bi_1024_10s_10-84MBs.sigbin0 -> 15940 bytes-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/1-1/bidirectional/frame_size__1024/throughput_1-1_bi_1024_10s_auto.sigbin0 -> 15938 bytes-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/1-1/bidirectional/frame_size__128/throughput_1-1_bi_128_10s_10-84MBs.sigbin0 -> 15886 bytes-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/1-1/bidirectional/frame_size__128/throughput_1-1_bi_128_10s_auto.sigbin0 -> 15884 bytes-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/1-1/bidirectional/frame_size__1280/throughput_1-1_bi_1280_10s_10-84MBs.sigbin0 -> 15940 bytes-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/1-1/bidirectional/frame_size__1280/throughput_1-1_bi_1280_10s_auto.sigbin0 -> 15938 bytes-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/1-1/bidirectional/frame_size__1514/throughput_1-1_bi_1514_10s_10-84MBs.sig171
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/1-1/bidirectional/frame_size__1514/throughput_1-1_bi_1514_10s_auto.sig171
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/1-1/bidirectional/frame_size__256/throughput_1-1_bi_256_10s_10-84MBs.sigbin0 -> 15886 bytes-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/1-1/bidirectional/frame_size__256/throughput_1-1_bi_256_10s_auto.sigbin0 -> 15884 bytes-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/1-1/bidirectional/frame_size__512/throughput_1-1_bi_512_10s_10-84MBs.sigbin0 -> 15886 bytes-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/1-1/bidirectional/frame_size__512/throughput_1-1_bi_512_10s_auto.sigbin0 -> 15884 bytes-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/1-1/bidirectional/frame_size__64/throughput_1-1_bi_64_10s_10-84MBs.sigbin0 -> 15832 bytes-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/1-1/bidirectional/frame_size__64/throughput_1-1_bi_64_10s_auto.sigbin0 -> 15830 bytes-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/1-1/unidirectional/frame_size__1024/throughput_1-1_uni_1024_10s_10-84MBs.sigbin0 -> 15912 bytes-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/1-1/unidirectional/frame_size__1024/throughput_1-1_uni_1024_10s_10-84MBs_reverse.sigbin0 -> 15912 bytes-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/1-1/unidirectional/frame_size__1024/throughput_1-1_uni_1024_10s_auto.sigbin0 -> 15912 bytes-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/1-1/unidirectional/frame_size__1024/throughput_1-1_uni_1024_10s_auto_reverse.sigbin0 -> 15910 bytes-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/1-1/unidirectional/frame_size__128/throughput_1-1_uni_128_10s_10-84MBs.sigbin0 -> 15858 bytes-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/1-1/unidirectional/frame_size__128/throughput_1-1_uni_128_10s_10-84MBs_reverse.sigbin0 -> 15858 bytes-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/1-1/unidirectional/frame_size__128/throughput_1-1_uni_128_10s_auto.sigbin0 -> 15856 bytes-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/1-1/unidirectional/frame_size__128/throughput_1-1_uni_128_10s_auto_reverse.sigbin0 -> 15858 bytes-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/1-1/unidirectional/frame_size__1280/throughput_1-1_uni_1280_10s_10-84MBs.sigbin0 -> 15912 bytes-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/1-1/unidirectional/frame_size__1280/throughput_1-1_uni_1280_10s_10-84MBs_reverse.sigbin0 -> 15912 bytes-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/1-1/unidirectional/frame_size__1280/throughput_1-1_uni_1280_10s_auto.sigbin0 -> 15910 bytes-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/1-1/unidirectional/frame_size__1280/throughput_1-1_uni_1280_10s_auto_reverse.sigbin0 -> 15910 bytes-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/1-1/unidirectional/frame_size__1514/throughput_1-1_uni_1514_10s_10-84MBs.sig170
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/1-1/unidirectional/frame_size__1514/throughput_1-1_uni_1514_10s_10-84MBs_reverse.sig170
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/1-1/unidirectional/frame_size__1514/throughput_1-1_uni_1514_10s_auto.sig170
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/1-1/unidirectional/frame_size__1514/throughput_1-1_uni_1514_10s_auto_reverse.sig170
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/1-1/unidirectional/frame_size__1514/throughput_1-1_uni_1514_900s_59MBs.sig170
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/1-1/unidirectional/frame_size__256/throughput_1-1_uni_256_10s_10-84MBs.sigbin0 -> 15858 bytes-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/1-1/unidirectional/frame_size__256/throughput_1-1_uni_256_10s_10-84MBs_reverse.sigbin0 -> 15858 bytes-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/1-1/unidirectional/frame_size__256/throughput_1-1_uni_256_10s_auto.sigbin0 -> 15858 bytes-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/1-1/unidirectional/frame_size__256/throughput_1-1_uni_256_10s_auto_reverse.sigbin0 -> 15858 bytes-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/1-1/unidirectional/frame_size__512/throughput_1-1_uni_512_10s_10-84MBs.sigbin0 -> 15858 bytes-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/1-1/unidirectional/frame_size__512/throughput_1-1_uni_512_10s_10-84MBs_reverse.sigbin0 -> 15858 bytes-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/1-1/unidirectional/frame_size__512/throughput_1-1_uni_512_10s_auto.sigbin0 -> 15858 bytes-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/1-1/unidirectional/frame_size__512/throughput_1-1_uni_512_10s_auto_reverse.sigbin0 -> 15856 bytes-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/1-1/unidirectional/frame_size__64/throughput_1-1_uni_64_10s_10-84MBs.sigbin0 -> 15804 bytes-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/1-1/unidirectional/frame_size__64/throughput_1-1_uni_64_10s_10-84MBs_reverse.sigbin0 -> 15804 bytes-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/1-1/unidirectional/frame_size__64/throughput_1-1_uni_64_10s_auto.sigbin0 -> 15802 bytes-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/1-1/unidirectional/frame_size__64/throughput_1-1_uni_64_10s_auto_reverse.sigbin0 -> 15802 bytes-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/1-X/frame_size__1024/throughput_1-X_uni_1024_10s_10-84MBs.sig178
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/1-X/frame_size__1024/throughput_1-X_uni_1024_10s_auto.sig129
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/1-X/frame_size__128/throughput_1-X_uni_128_10s_10-84MBs.sig178
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/1-X/frame_size__128/throughput_1-X_uni_128_10s_auto.sig178
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/1-X/frame_size__1280/throughput_1-X_uni_1280_10s_10-84MBs.sig178
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/1-X/frame_size__1280/throughput_1-X_uni_1280_10s_auto.sig178
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/1-X/frame_size__1514/throughput_1-X_uni_1514_10s_10-84MBs.sig178
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/1-X/frame_size__1514/throughput_1-X_uni_1514_10s_auto.sig177
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/1-X/frame_size__256/throughput_1-X_uni_256_10s_10-84MBs.sig178
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/1-X/frame_size__256/throughput_1-X_uni_256_10s_auto.sig159
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/1-X/frame_size__512/throughput_1-X_uni_512_10s_10-84MBs.sig178
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/1-X/frame_size__512/throughput_1-X_uni_512_10s_auto.sig178
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/1-X/frame_size__64/throughput_1-X_uni_64_10s_10-84MBs.sig178
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/1-X/frame_size__64/throughput_1-X_uni_64_10s_auto.sig178
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/X-1/frame_size__1024/throughput_X-1_uni_1024_10s_10-84MBs.sig178
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/X-1/frame_size__1024/throughput_X-1_uni_1024_10s_auto.sig178
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/X-1/frame_size__128/throughput_X-1_uni_128_10s_10-84MBs.sig178
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/X-1/frame_size__128/throughput_X-1_uni_128_10s_auto.sig178
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/X-1/frame_size__1280/throughput_X-1_uni_1280_10s_10-84MBs.sig178
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/X-1/frame_size__1280/throughput_X-1_uni_1280_10s_auto.sig178
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/X-1/frame_size__1514/throughput_X-1_uni_1514_10s_10-84MBs.sig178
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/X-1/frame_size__1514/throughput_X-1_uni_1514_10s_auto.sig178
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/X-1/frame_size__256/throughput_X-1_uni_256_10s_10-84MBs.sig178
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/X-1/frame_size__256/throughput_X-1_uni_256_10s_auto.sig178
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/X-1/frame_size__512/throughput_X-1_uni_512_10s_10-84MBs.sig178
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/X-1/frame_size__512/throughput_X-1_uni_512_10s_auto.sig178
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/X-1/frame_size__64/throughput_X-1_uni_64_10s_10-84MBs.sig178
-rw-r--r--cleopatre/devkit/tests/validation/SmartBits_test_scripts/throughput/X-1/frame_size__64/throughput_X-1_uni_64_10s_auto.sig178
-rw-r--r--cleopatre/devkit/tests/validation/doc/howto_coexistance_test.txt24
-rw-r--r--cleopatre/devkit/tests/validation/doc/howto_distribute_test_results.txt4
-rw-r--r--cleopatre/devkit/tests/validation/doc/howto_iperf.txt36
-rw-r--r--cleopatre/devkit/tests/validation/doc/howto_perform_full_test.txt53
-rw-r--r--cleopatre/devkit/tests/validation/doc/howto_sanity_check.txt58
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_back_to_back_test/start_back_to_back_test.bat1
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_back_to_back_test/start_back_to_back_test.vbs30
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_latency_test/1-1/bidirectional/frame_size__1024/start_latency_test_1-1_bi_1024_600sX1.vbs42
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_latency_test/1-1/bidirectional/frame_size__128/start_latency_test_1-1_bi_128_600sX1.vbs42
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_latency_test/1-1/bidirectional/frame_size__1280/start_latency_test_1-1_bi_1280_600sX1.vbs42
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_latency_test/1-1/bidirectional/frame_size__1514/start_latency_test_1-1_bi_1514_600sX1.vbs42
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_latency_test/1-1/bidirectional/frame_size__256/start_latency_test_1-1_bi_256_600sX1.vbs42
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_latency_test/1-1/bidirectional/frame_size__512/start_latency_test_1-1_bi_512_600sX1.vbs42
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_latency_test/1-1/bidirectional/frame_size__64/start_latency_test_1-1_bi_64_600sX1.vbs41
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_latency_test/1-1/bidirectional/start_latency_test_1-1_bi.bat62
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_latency_test/1-1/set_datarate_for_latency_test.vbs53
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_latency_test/1-1/start_latency_test_1-1.bat3
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_latency_test/1-1/start_latency_test_1-1_all.bat3
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_latency_test/1-1/start_latency_test_1-1_reverse.bat2
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_latency_test/1-1/unidirectional/frame_size__1024/start_latency_test_1-1_uni_1024_600sX1.vbs42
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_latency_test/1-1/unidirectional/frame_size__1024/start_latency_test_1-1_uni_1024_600sX1_reverse.vbs42
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_latency_test/1-1/unidirectional/frame_size__128/start_latency_test_1-1_uni_128_600sX1.vbs42
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_latency_test/1-1/unidirectional/frame_size__128/start_latency_test_1-1_uni_128_600sX1_reverse.vbs43
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_latency_test/1-1/unidirectional/frame_size__1280/start_latency_test_1-1_uni_1280_600sX1.vbs42
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_latency_test/1-1/unidirectional/frame_size__1280/start_latency_test_1-1_uni_1280_600sX1_reverse.vbs42
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_latency_test/1-1/unidirectional/frame_size__1514/start_latency_test_1-1_uni_1514_600sX1.vbs42
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_latency_test/1-1/unidirectional/frame_size__1514/start_latency_test_1-1_uni_1514_600sX1_reverse.vbs42
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_latency_test/1-1/unidirectional/frame_size__256/start_latency_test_1-1_uni_256_600sX1.vbs43
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_latency_test/1-1/unidirectional/frame_size__256/start_latency_test_1-1_uni_256_600sX1_reverse.vbs43
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_latency_test/1-1/unidirectional/frame_size__512/start_latency_test_1-1_uni_512_600sX1.vbs43
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_latency_test/1-1/unidirectional/frame_size__512/start_latency_test_1-1_uni_512_600sX1_reverse.vbs43
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_latency_test/1-1/unidirectional/frame_size__64/start_latency_test_1-1_uni_64_600sX1.vbs43
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_latency_test/1-1/unidirectional/frame_size__64/start_latency_test_1-1_uni_64_600sX1_reverse.vbs43
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_latency_test/1-1/unidirectional/start_latency_test_1-1_uni.bat62
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_latency_test/1-1/unidirectional/start_latency_test_1-1_uni_reverse.bat62
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_packet_loss_test/1-1/bidirectional/frame_size__1024/start_packet_loss_test_1-1_bi_1024_999sx1.vbs42
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_packet_loss_test/1-1/bidirectional/frame_size__128/start_packet_loss_test_1-1_bi_128_999sx1.vbs39
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_packet_loss_test/1-1/bidirectional/frame_size__1280/start_packet_loss_test_1-1_bi_1280_999sx1.vbs42
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_packet_loss_test/1-1/bidirectional/frame_size__1514/start_packet_loss_test_1-1_bi_1514_999sx1.vbs42
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_packet_loss_test/1-1/bidirectional/frame_size__256/start_packet_loss_test_1-1_bi_256_999sx1.vbs43
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_packet_loss_test/1-1/bidirectional/frame_size__512/start_packet_loss_test_1-1_bi_512_999sx1.vbs43
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_packet_loss_test/1-1/bidirectional/frame_size__64/start_packet_loss_test_1-1_bi_64_999sx1.vbs42
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_packet_loss_test/1-1/bidirectional/start_packet_loss_test_1-1_bi.bat61
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_packet_loss_test/1-1/start_packet_loss_test_1-1.bat3
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_packet_loss_test/1-1/start_packet_loss_test_1-1_all.bat3
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_packet_loss_test/1-1/start_packet_loss_test_1-1_reverse.bat2
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_packet_loss_test/1-1/unidirectional/frame_size__1024/start_packet_loss_test_1-1_uni_1024_999sx1.vbs43
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_packet_loss_test/1-1/unidirectional/frame_size__1024/start_packet_loss_test_1-1_uni_1024_999sx1_reverse.vbs42
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_packet_loss_test/1-1/unidirectional/frame_size__128/start_packet_loss_test_1-1_uni_128_999sx1.vbs43
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_packet_loss_test/1-1/unidirectional/frame_size__128/start_packet_loss_test_1-1_uni_128_999sx1_reverse.vbs42
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_packet_loss_test/1-1/unidirectional/frame_size__1280/start_packet_loss_test_1-1_uni_1280_999sx1.vbs42
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_packet_loss_test/1-1/unidirectional/frame_size__1280/start_packet_loss_test_1-1_uni_1280_999sx1_reverse.vbs43
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_packet_loss_test/1-1/unidirectional/frame_size__1514/start_packet_loss_test_1-1_uni_1514_999sx1.vbs42
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_packet_loss_test/1-1/unidirectional/frame_size__1514/start_packet_loss_test_1-1_uni_1514_999sx1_reverse.vbs43
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_packet_loss_test/1-1/unidirectional/frame_size__256/start_packet_loss_test_1-1_uni_256_999sx1.vbs42
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_packet_loss_test/1-1/unidirectional/frame_size__256/start_packet_loss_test_1-1_uni_256_999sx1_reverse.vbs42
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_packet_loss_test/1-1/unidirectional/frame_size__512/start_packet_loss_test_1-1_uni_512_999sx1.vbs43
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_packet_loss_test/1-1/unidirectional/frame_size__512/start_packet_loss_test_1-1_uni_512_999sx1_reverse.vbs43
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_packet_loss_test/1-1/unidirectional/frame_size__64/start_packet_loss_test_1-1_uni_64_999sx1.vbs43
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_packet_loss_test/1-1/unidirectional/frame_size__64/start_packet_loss_test_1-1_uni_64_999sx1_reverse.vbs42
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_packet_loss_test/1-1/unidirectional/start_packet_loss_test_1-1_uni.bat61
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_packet_loss_test/1-1/unidirectional/start_packet_loss_test_1-1_uni_reverse.bat61
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_packet_loss_test/1-X/frame_size__1024/start_packet_loss_test_1-X_uni_1024_999sx1.vbs44
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_packet_loss_test/1-X/frame_size__128/start_packet_loss_test_1-X_uni_128_999sx1.vbs43
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_packet_loss_test/1-X/frame_size__1280/start_packet_loss_test_1-X_uni_1280_999sx1.vbs43
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_packet_loss_test/1-X/frame_size__1514/start_packet_loss_test_1-X_uni_1514_999sx1.vbs43
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_packet_loss_test/1-X/frame_size__256/start_packet_loss_test_1-X_uni_256_999sx1.vbs44
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_packet_loss_test/1-X/frame_size__512/start_packet_loss_test_1-X_uni_512_999sx1.vbs44
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_packet_loss_test/1-X/frame_size__64/start_packet_loss_test_1-X_uni_64_999sx1.vbs43
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_packet_loss_test/1-X/start_packet_loss_test_1-X.bat62
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_packet_loss_test/X-1/frame_size__1024/start_packet_loss_test_X-1_uni_1024_999sx1.vbs44
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_packet_loss_test/X-1/frame_size__128/start_packet_loss_test_X-1_uni_128_999sx1.vbs44
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_packet_loss_test/X-1/frame_size__1280/start_packet_loss_test_X-1_uni_1280_999sx1.vbs43
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_packet_loss_test/X-1/frame_size__1514/start_packet_loss_test_X-1_uni_1514_999sx1.vbs43
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_packet_loss_test/X-1/frame_size__256/start_packet_loss_test_X-1_uni_256_999sx1.vbs45
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_packet_loss_test/X-1/frame_size__512/start_packet_loss_test_X-1_uni_512_999sx1.vbs44
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_packet_loss_test/X-1/frame_size__64/start_packet_loss_test_X-1_uni_64_999sx1.vbs45
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_packet_loss_test/X-1/start_packet_loss_test_X-1.bat62
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_packet_loss_test/set_datarate_for_packet_loss_test.vbs53
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_packet_loss_test/start_packet_loss_test.bat4
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-1/bidirectional/frame_size__1024/start_throughput_test_1-1_bi_1024_10s_10-84MBs.vbsbin0 -> 2874 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-1/bidirectional/frame_size__1024/start_throughput_test_1-1_bi_1024_10s_auto.vbsbin0 -> 2866 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-1/bidirectional/frame_size__128/start_throughput_test_1-1_bi_128_10s_10-84MBs.vbsbin0 -> 2870 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-1/bidirectional/frame_size__128/start_throughput_test_1-1_bi_128_10s_auto.vbsbin0 -> 2866 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-1/bidirectional/frame_size__1280/start_throughput_test_1-1_bi_1280_10s_10-84MBs.vbsbin0 -> 2874 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-1/bidirectional/frame_size__1280/start_throughput_test_1-1_bi_1280_10s_auto.vbsbin0 -> 2866 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-1/bidirectional/frame_size__1514/start_throughput_test_1-1_bi_1514_10s_10-84MBs.vbsbin0 -> 2882 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-1/bidirectional/frame_size__1514/start_throughput_test_1-1_bi_1514_10s_auto.vbsbin0 -> 2874 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-1/bidirectional/frame_size__256/start_throughput_test_1-1_bi_256_10s_10-84MBs.vbsbin0 -> 2870 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-1/bidirectional/frame_size__256/start_throughput_test_1-1_bi_256_10s_auto.vbsbin0 -> 2862 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-1/bidirectional/frame_size__512/start_throughput_test_1-1_bi_512_10s_10-84MBs.vbsbin0 -> 2870 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-1/bidirectional/frame_size__512/start_throughput_test_1-1_bi_512_10s_auto.vbsbin0 -> 2862 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-1/bidirectional/frame_size__64/start_throughput_test_1-1_bi_64_10s_10-84MBs.vbsbin0 -> 2866 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-1/bidirectional/frame_size__64/start_throughput_test_1-1_bi_64_10s_auto.vbsbin0 -> 2858 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-1/bidirectional/start_throughput_test_1-1_auto_bi.bat45
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-1/bidirectional/start_throughput_test_1-1_bi.bat53
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-1/start_throughput_test_1-1.bat3
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-1/start_throughput_test_1-1_all.bat3
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-1/start_throughput_test_1-1_reverse.bat2
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-1/unidirectional/frame_size__1024/start_throughput_test_1-1_uni_1024_10s_10-84MBs.vbsbin0 -> 2882 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-1/unidirectional/frame_size__1024/start_throughput_test_1-1_uni_1024_10s_10-84MBs_reverse.vbsbin0 -> 2910 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-1/unidirectional/frame_size__1024/start_throughput_test_1-1_uni_1024_10s_auto.vbsbin0 -> 2870 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-1/unidirectional/frame_size__1024/start_throughput_test_1-1_uni_1024_10s_auto_reverse.vbsbin0 -> 2946 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-1/unidirectional/frame_size__128/start_throughput_test_1-1_uni_128_10s_10-84MBs.vbsbin0 -> 2878 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-1/unidirectional/frame_size__128/start_throughput_test_1-1_uni_128_10s_10-84MBs_reverse.vbsbin0 -> 2906 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-1/unidirectional/frame_size__128/start_throughput_test_1-1_uni_128_10s_auto.vbsbin0 -> 2866 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-1/unidirectional/frame_size__128/start_throughput_test_1-1_uni_128_10s_auto_reverse.vbsbin0 -> 2898 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-1/unidirectional/frame_size__1280/start_throughput_test_1-1_uni_1280_10s_10-84MBs.vbsbin0 -> 2882 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-1/unidirectional/frame_size__1280/start_throughput_test_1-1_uni_1280_10s_10-84MBs_reverse.vbsbin0 -> 2910 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-1/unidirectional/frame_size__1280/start_throughput_test_1-1_uni_1280_10s_auto.vbsbin0 -> 2870 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-1/unidirectional/frame_size__1280/start_throughput_test_1-1_uni_1280_10s_auto_reverse.vbsbin0 -> 2902 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-1/unidirectional/frame_size__1514/start_throughput_test_1-1_uni_1514_10s_10-84MBs.vbsbin0 -> 2886 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-1/unidirectional/frame_size__1514/start_throughput_test_1-1_uni_1514_10s_10-84MBs_reverse.vbsbin0 -> 2918 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-1/unidirectional/frame_size__1514/start_throughput_test_1-1_uni_1514_10s_auto.vbsbin0 -> 2878 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-1/unidirectional/frame_size__1514/start_throughput_test_1-1_uni_1514_10s_auto_reverse.vbsbin0 -> 2910 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-1/unidirectional/frame_size__256/start_throughput_test_1-1_uni_256_10s_10-84MBs.vbsbin0 -> 2878 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-1/unidirectional/frame_size__256/start_throughput_test_1-1_uni_256_10s_10-84MBs_reverse.vbsbin0 -> 2906 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-1/unidirectional/frame_size__256/start_throughput_test_1-1_uni_256_10s_auto.vbsbin0 -> 2866 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-1/unidirectional/frame_size__256/start_throughput_test_1-1_uni_256_10s_auto_reverse.vbsbin0 -> 2898 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-1/unidirectional/frame_size__512/start_throughput_test_1-1_uni_512_10s_10-84MBs.vbsbin0 -> 2878 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-1/unidirectional/frame_size__512/start_throughput_test_1-1_uni_512_10s_10-84MBs_reverse.vbsbin0 -> 2906 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-1/unidirectional/frame_size__512/start_throughput_test_1-1_uni_512_10s_auto.vbsbin0 -> 2870 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-1/unidirectional/frame_size__512/start_throughput_test_1-1_uni_512_10s_auto_reverse.vbsbin0 -> 2898 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-1/unidirectional/frame_size__64/start_throughput_test_1-1_uni_64_10s_10-84MBs.vbsbin0 -> 2874 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-1/unidirectional/frame_size__64/start_throughput_test_1-1_uni_64_10s_10-84MBs_reverse.vbsbin0 -> 2902 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-1/unidirectional/frame_size__64/start_throughput_test_1-1_uni_64_10s_auto.vbsbin0 -> 2862 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-1/unidirectional/frame_size__64/start_throughput_test_1-1_uni_64_10s_auto_reverse.vbsbin0 -> 2894 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-1/unidirectional/start_throughput_test_1-1_auto_uni.bat47
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-1/unidirectional/start_throughput_test_1-1_auto_uni_reverse.bat45
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-1/unidirectional/start_throughput_test_1-1_uni.bat43
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-1/unidirectional/start_throughput_test_1-1_uni_reverse.bat45
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-X/frame_size__1024/start_throughput_test_1-X_uni_1024_10s_10-84MBs.vbsbin0 -> 2888 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-X/frame_size__1024/start_throughput_test_1-X_uni_1024_10s_auto.vbsbin0 -> 2880 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-X/frame_size__128/start_throughput_test_1-X_uni_128_10s_10-84MBs.vbsbin0 -> 2882 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-X/frame_size__128/start_throughput_test_1-X_uni_128_10s_auto.vbsbin0 -> 2874 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-X/frame_size__1280/start_throughput_test_1-X_uni_1280_10s_10-84MBs.vbsbin0 -> 2888 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-X/frame_size__1280/start_throughput_test_1-X_uni_1280_10s_auto.vbsbin0 -> 2880 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-X/frame_size__1514/start_throughput_test_1-X_uni_1514_10s_10-84MBs.vbsbin0 -> 2896 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-X/frame_size__1514/start_throughput_test_1-X_uni_1514_10s_auto.vbsbin0 -> 2884 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-X/frame_size__256/start_throughput_test_1-X_uni_256_10s_10-84MBs.vbsbin0 -> 2882 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-X/frame_size__256/start_throughput_test_1-X_uni_256_10s_auto.vbsbin0 -> 2874 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-X/frame_size__512/start_throughput_test_1-X_uni_512_10s_10-84MBs.vbsbin0 -> 2882 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-X/frame_size__512/start_throughput_test_1-X_uni_512_10s_auto.vbsbin0 -> 2874 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-X/frame_size__64/start_throughput_test_1-X_uni_64_10s_10-84MBs.vbsbin0 -> 2876 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-X/frame_size__64/start_throughput_test_1-X_uni_64_10s_auto.vbsbin0 -> 2868 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-X/start_throughput_test_1-X.bat52
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/1-X/start_throughput_test_1-X_auto.bat52
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/X-1/frame_size__1024/start_throughput_test_X-1_uni_1024_10s_10-84MBs.vbsbin0 -> 2888 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/X-1/frame_size__1024/start_throughput_test_X-1_uni_1024_10s_auto.vbsbin0 -> 2880 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/X-1/frame_size__128/start_throughput_test_X-1_uni_128_10s_10-84MBs.vbsbin0 -> 2882 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/X-1/frame_size__128/start_throughput_test_X-1_uni_128_10s_auto.vbsbin0 -> 2874 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/X-1/frame_size__1280/start_throughput_test_X-1_uni_1280_10s_10-84MBs.vbsbin0 -> 2888 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/X-1/frame_size__1280/start_throughput_test_X-1_uni_1280_10s_auto.vbsbin0 -> 2880 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/X-1/frame_size__1514/start_throughput_test_X-1_uni_1514_10s_10-84MBs.vbsbin0 -> 2896 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/X-1/frame_size__1514/start_throughput_test_X-1_uni_1514_10s_auto.vbsbin0 -> 2888 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/X-1/frame_size__256/start_throughput_test_X-1_uni_256_10s_10-84MBs.vbsbin0 -> 2882 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/X-1/frame_size__256/start_throughput_test_X-1_uni_256_10s_auto.vbsbin0 -> 2874 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/X-1/frame_size__512/start_throughput_test_X-1_uni_512_10s_10-84MBs.vbsbin0 -> 2882 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/X-1/frame_size__512/start_throughput_test_X-1_uni_512_10s_auto.vbsbin0 -> 2874 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/X-1/frame_size__64/start_throughput_test_X-1_uni_64_10s_10-84MBs.vbsbin0 -> 2876 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/X-1/frame_size__64/start_throughput_test_X-1_uni_64_10s_auto.vbsbin0 -> 2868 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/X-1/start_throughput_test_X-1.bat52
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/X-1/start_throughput_test_X-1_auto.bat52
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_SmartBits_throughput_test/start_throughput_test.bat4
-rw-r--r--cleopatre/devkit/tests/validation/scripts/automate_iperf/check_if_test_failed20
-rwxr-xr-xcleopatre/devkit/tests/validation/scripts/automate_iperf/process_iperf_tcp3
-rwxr-xr-xcleopatre/devkit/tests/validation/scripts/automate_iperf/process_iperf_tcp.awk51
-rwxr-xr-xcleopatre/devkit/tests/validation/scripts/automate_iperf/process_iperf_udp3
-rwxr-xr-xcleopatre/devkit/tests/validation/scripts/automate_iperf/process_iperf_udp.awk91
-rw-r--r--cleopatre/devkit/tests/validation/scripts/board_file_checker/board_file_check17
-rw-r--r--cleopatre/devkit/tests/validation/scripts/board_file_checker/check32
-rwxr-xr-xcleopatre/devkit/tests/validation/scripts/board_file_checker/check_conf_files78
-rw-r--r--cleopatre/devkit/tests/validation/scripts/board_file_checker/check_info_files43
-rwxr-xr-xcleopatre/devkit/tests/validation/scripts/board_file_checker/check_messages43
-rwxr-xr-xcleopatre/devkit/tests/validation/scripts/board_file_checker/check_misc33
-rwxr-xr-xcleopatre/devkit/tests/validation/scripts/board_file_checker/check_online_info_content23
-rwxr-xr-xcleopatre/devkit/tests/validation/scripts/board_file_checker/check_processes44
-rw-r--r--cleopatre/devkit/tests/validation/scripts/board_file_checker/check_snmp5
-rwxr-xr-xcleopatre/devkit/tests/validation/scripts/board_file_checker/check_white_list_info_content23
-rwxr-xr-xcleopatre/devkit/tests/validation/scripts/checklist_tests/checklist_tests45
-rwxr-xr-xcleopatre/devkit/tests/validation/scripts/checklist_tests/common_functions.pl918
-rwxr-xr-xcleopatre/devkit/tests/validation/scripts/checklist_tests/ct4186
-rw-r--r--cleopatre/devkit/tests/validation/scripts/misc/HyperTerminal_reboot1.vbs24
-rw-r--r--cleopatre/devkit/tests/validation/scripts/misc/HyperTerminal_reboot2.vbs25
-rw-r--r--cleopatre/devkit/tests/validation/scripts/misc/email_tr18
-rw-r--r--cleopatre/devkit/tests/validation/scripts/misc/minicom_reboot_scr31011
-rw-r--r--cleopatre/devkit/tests/validation/scripts/misc/reboot1.htbin0 -> 56308 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/misc/reboot2.htbin0 -> 61301 bytes-rw-r--r--cleopatre/devkit/tests/validation/scripts/misc/send_e2
-rw-r--r--cleopatre/devkit/tests/validation/scripts/misc/set_1-X.vbs63
-rwxr-xr-xcleopatre/devkit/tests/validation/scripts/misc/telnet_reboot_scr31013
-rwxr-xr-xcleopatre/devkit/tests/validation/scripts/misc/telnet_reboot_spk300g13
-rwxr-xr-xcleopatre/devkit/tests/validation/scripts/test_snmp/common_functions.pl934
-rwxr-xr-xcleopatre/devkit/tests/validation/scripts/test_snmp/ff69
-rwxr-xr-xcleopatre/devkit/tests/validation/scripts/test_snmp/test_snmp35
-rwxr-xr-xcleopatre/devkit/tests/validation/scripts/test_snmp/tsnmp1729
-rw-r--r--cleopatre/doc/dev_manual/Makefile13
-rw-r--r--cleopatre/doc/dev_manual/SPC3XX_developer_manual.rst2338
-rwxr-xr-xcleopatre/doc/dev_manual/nvram_getdefault55
-rw-r--r--cleopatre/doc/operator_manual_v1/Makefile9
-rw-r--r--cleopatre/doc/operator_manual_v1/SPC3XX_eoc_operator_manual_v1.rst4691
-rw-r--r--cleopatre/doc/operator_manual_v2/Makefile9
-rw-r--r--cleopatre/doc/operator_manual_v2/SPC3XX_eoc_operator_manual_v2.rst5579
-rw-r--r--cleopatre/doc/release_note/Makefile12
-rw-r--r--cleopatre/doc/release_note/SPC3XX_eoc_release_note.rst723
-rw-r--r--cleopatre/linux-2.6.25.10-spc300/arch/arm/Makefile9
-rw-r--r--cleopatre/linux-2.6.25.10-spc300/arch/arm/boot/Makefile5
-rw-r--r--cleopatre/linux-2.6.25.10-spc300/arch/arm/configs/spc300_defconfig941
-rw-r--r--cleopatre/linux-2.6.25.10-spc300/arch/arm/mach-spc300/Kconfig16
-rw-r--r--cleopatre/linux-2.6.25.10-spc300/drivers/net/arm/synop3504.c340
-rw-r--r--cleopatre/linux-2.6.25.10-spc300/drivers/net/phy/icplus.c1463
-rw-r--r--cleopatre/linux-2.6.25.10-spc300/drivers/net/phy/icplus.h212
-rw-r--r--cleopatre/linux-2.6.25.10-spc300/include/linux/ethtool.h124
-rw-r--r--cleopatre/linux-2.6.25.10-spc300/include/linux/phy.h36
-rw-r--r--cleopatre/linux-2.6.25.10-spc300/net/bridge/br_forward.c15
-rw-r--r--cleopatre/linux-2.6.25.10-spc300/net/core/ethtool.c18
-rwxr-xr-xcleopatre/tools/makeflash/makeflash.sh32
-rw-r--r--cleopatre/tools/openocd-r668/config/scr300.cfg47
-rw-r--r--cleopatre/tools/openocd-r668/config/scr300.ocd84
-rw-r--r--cleopatre/u-boot-1.1.6/include/asm-arm/arch-spc300-fcm3/image_desc.h5
-rw-r--r--common/doc/template/glossary/glossary38
-rw-r--r--common/doc/template/mstar/mstar.sty3
-rw-r--r--common/lib/mmtcgen/const.py6
-rw-r--r--common/lib/mmtcgen/mme.txt45
-rw-r--r--common/lib/scammer/commonfields.py6
-rw-r--r--common/lib/scammer/vs.py38
-rw-r--r--common/tests/tests129
-rw-r--r--common/tests/tests.long4
-rwxr-xr-xcommon/tools/bundle_delivery/bundle_delivery.py5
-rwxr-xr-xcommon/tools/bundle_delivery/tests/test_bundle_delivery.py41
-rw-r--r--common/tools/flashfs/image_500/autoconf/NOPRUNE0
-rw-r--r--common/tools/flashfs/image_500/tonemask/tonemask_eoc12
-rw-r--r--common/tools/flashfs/image_500/tonemask/tonemask_eoc_spc200_spc30012
-rw-r--r--common/tools/flashfs/image_500/tonemask/tonemask_plc12
-rw-r--r--common/tools/flashfs/image_autoswitch/500/autoconf/NOPRUNE0
-rw-r--r--common/tools/flashfs/image_autoswitch/500/tonemask/tonemask_eoc12
-rw-r--r--common/tools/flashfs/image_autoswitch/500/tonemask/tonemask_eoc_spc200_spc30012
-rw-r--r--common/tools/flashfs/image_autoswitch/500/tonemask/tonemask_plc12
-rw-r--r--common/tools/genNVRAM/nvram_mcr500-ddr2_300_01.conf1
-rw-r--r--common/tools/genNVRAM/nvram_mcr500-ddr2_500_01.conf1
-rw-r--r--common/tools/genNVRAM/nvram_mcr510-ddr1_300_01.conf1
-rw-r--r--common/tools/genNVRAM/nvram_mcr510-ddr1_500_01.conf1
-rw-r--r--common/tools/genNVRAM/nvram_mcr510-ddr2_300_01.conf1
-rw-r--r--common/tools/genNVRAM/nvram_mcr510-ddr2_500_01.conf1
-rw-r--r--common/tools/mksimage/mksimage.c12
-rw-r--r--validation/validlib/spc300.py11
4478 files changed, 1261789 insertions, 10789 deletions
diff --git a/cesar/bsu/Config b/cesar/bsu/Config
index 285d104d70..34e5d5173d 100644
--- a/cesar/bsu/Config
+++ b/cesar/bsu/Config
@@ -1 +1,4 @@
+CONFIG_BSU_SCHEDULER_PREPARE = n
+CONFIG_BSU_SKEW = n
CONFIG_BSU_WAKEUP_DELAY_MS = 15
+CONFIG_BSU_WATCHDOG_REFRESH = n
diff --git a/cesar/bsu/aclf/aclf.h b/cesar/bsu/aclf/aclf.h
index 8e24256672..f608dc3e0f 100644
--- a/cesar/bsu/aclf/aclf.h
+++ b/cesar/bsu/aclf/aclf.h
@@ -243,6 +243,14 @@ void
bsu_aclf_bpsd_avoid_overlap (bsu_aclf_t *ctx);
/**
+ * ACLF should extend beacon period
+ * \param ctx the module context.
+ * \param status true to start, false stop.
+ */
+void
+bsu_aclf_beacon_skew (bsu_aclf_t *ctx, bool status);
+
+/**
* Clear all data in BSU ACLF.
* \param ctx the module context.
*/
diff --git a/cesar/bsu/aclf/src/aclf.c b/cesar/bsu/aclf/src/aclf.c
index ca781b9e3d..6246b9c6a9 100644
--- a/cesar/bsu/aclf/src/aclf.c
+++ b/cesar/bsu/aclf/src/aclf.c
@@ -392,6 +392,15 @@ bsu_aclf_bpsd_avoid_overlap (bsu_aclf_t *ctx)
}
void
+bsu_aclf_beacon_skew (bsu_aclf_t *ctx, bool status)
+{
+ bsu_aclf_set_frequency (ctx, BSU_ACLF_FREQ_CABLE);
+ if (status)
+ *((bsu_aclf_bp_t*) &ctx->beacon_period_theo_tck) += MAC_MS_TO_TCK (7);
+ ctx->beacon_period_tck = ctx->beacon_period_theo_tck;
+}
+
+void
bsu_aclf_clear_sync (bsu_aclf_t *ctx)
{
uint i;
diff --git a/cesar/bsu/aclf/test/utest/Config b/cesar/bsu/aclf/test/utest/Config
index 2ab0d84445..8923e021fd 100644
--- a/cesar/bsu/aclf/test/utest/Config
+++ b/cesar/bsu/aclf/test/utest/Config
@@ -1,5 +1,5 @@
-CONFIG_TRACE = y
-CONFIG_STATS = y
CONFIG_ACLF_SYNC_TO_SLOWER_WEIGHT_NB=1000000
CONFIG_ACLF_TRACKING[target-cable] = n
CONFIG_ACLF_TRACKING[target-tracking] = y
+CONFIG_STATS = y
+CONFIG_TRACE = y
diff --git a/cesar/bsu/aclf/test/utest/Makefile b/cesar/bsu/aclf/test/utest/Makefile
index 4d38a48e18..4823313043 100644
--- a/cesar/bsu/aclf/test/utest/Makefile
+++ b/cesar/bsu/aclf/test/utest/Makefile
@@ -7,13 +7,16 @@ TARGET_cable=
COMMON_SOURCES = aclf.c common.c bpsd.c freq.c
COMMON_MODULES = lib bsu/aclf hal/timer/stub
+COMMON_CONFIG_MODULES = mac/common
TARGET_tracking_PROGRAMS = test_aclf_tracking
test_aclf_tracking_SOURCES = $(COMMON_SOURCES)
test_aclf_tracking_MODULES = $(COMMON_MODULES)
+test_aclf_tracking_CONFIG_MODULES = $(COMMON_CONFIG_MODULES)
TARGET_cable_PROGRAMS = test_aclf_cable
test_aclf_cable_SOURCES = $(COMMON_SOURCES)
test_aclf_cable_MODULES = $(COMMON_MODULES)
+test_aclf_cable_CONFIG_MODULES = $(COMMON_CONFIG_MODULES)
include $(BASE)/common/make/top.mk
diff --git a/cesar/bsu/bsu.h b/cesar/bsu/bsu.h
index b67d2afb95..40211312c6 100644
--- a/cesar/bsu/bsu.h
+++ b/cesar/bsu/bsu.h
@@ -44,6 +44,19 @@ typedef enum bsu_update_sta_type_t bsu_update_sta_type_t;
typedef void
(*bsu_beacon_processed_t) (void *ctx, bsu_beacon_t *beacon);
+/** Function to call on timer process.
+ * \param ctx upper layer context.
+ * \param beacon the beacon sent or received.
+ */
+typedef void
+(*bsu_refresh_wd_t) (void *ctx);
+
+/** Function to call on timer event if the station is CCo.
+ * \param user_data the registered user data.
+ */
+typedef void
+(*bsu_scheduler_prepare_t) (void *user_data);
+
BEGIN_DECLS
/**
@@ -73,6 +86,25 @@ void
bsu_init_beacon_cb (bsu_t *ctx, bsu_beacon_processed_t cb, void *cb_ud);
/**
+ * Initialise the cp sta callback to refresh wd.
+ * \param ctx module context
+ * \param cb the callback function to register
+ * \param user_data the data to provide with the callback
+ */
+void
+bsu_init_refresh_cb (bsu_t *ctx, bsu_refresh_wd_t cb, void *user_data);
+
+/**
+ * Initialise the callback to prepare the scheduler.
+ * \param ctx module context
+ * \param cb the callback function to register
+ * \param user_data the data to provide with the callback
+ */
+void
+bsu_init_scheduler_prepare (bsu_t *ctx, bsu_scheduler_prepare_t cb,
+ void *user_data);
+
+/**
* Uninitialise the module.
* \param the ctx module.
*/
diff --git a/cesar/bsu/inc/context.h b/cesar/bsu/inc/context.h
index 9bcc4a1410..702203b489 100644
--- a/cesar/bsu/inc/context.h
+++ b/cesar/bsu/inc/context.h
@@ -79,6 +79,14 @@ struct bsu_t
void *ul_data;
/** Call back to provide the beacon to the upper layer. */
bsu_beacon_processed_t ul_cb;
+ /** Call back to refresh watch dog */
+ bsu_refresh_wd_t ul_wd;
+ /** User data to provide with the callback. */
+ void *ul_wd_ud;
+ /** Call back to prepare scheduler. */
+ bsu_scheduler_prepare_t ul_scheduler_prepare;
+ /** Registered user data for scheduler prepare callback. */
+ void *ul_scheduler_prepare_ud;
/** ACLF context. */
bsu_aclf_t *aclf;
/** PBProc context. */
@@ -135,6 +143,8 @@ struct bsu_t
#endif /* !CONFIG_TRACE */
/** Statistics. */
bsu_stats_t stats;
+ /** Retrieved information from the beacon of the tracked AVLN */
+ bool avln_tracked;
};
#endif /* bsu_inc_context_h */
diff --git a/cesar/bsu/ntb/ntb.h b/cesar/bsu/ntb/ntb.h
index ed0205d1f4..5b369796eb 100644
--- a/cesar/bsu/ntb/ntb.h
+++ b/cesar/bsu/ntb/ntb.h
@@ -22,7 +22,7 @@
BEGIN_DECLS
-/*
+/**
* Synchronize local clock to be as close as possible to estimated value
* of the NTB clock reference.
* \param ctx the module context data.
diff --git a/cesar/bsu/src/bsu.c b/cesar/bsu/src/bsu.c
index 89e00428a5..682542fe40 100644
--- a/cesar/bsu/src/bsu.c
+++ b/cesar/bsu/src/bsu.c
@@ -126,6 +126,8 @@ bsu_track_avln_identify (bsu_t *ctx, bsu_avln_t *avln)
ctx->tei_track = avln->beacon.vf.stei;
ctx->cco_mac_address_track = avln->cco_mac_address;
ctx->sta_avln = avln;
+ if (CONFIG_BSU_SKEW)
+ bsu_aclf_beacon_skew (ctx->aclf, false);
}
else
{
@@ -140,6 +142,8 @@ bsu_track_avln_identify (bsu_t *ctx, bsu_avln_t *avln)
/* When the CCo starts it must keep the ntb offset tck of the network.
*/
ctx->poweron.sync.ntb_offset_tck = old_avln->sync.ntb_offset_tck;
+ if (CONFIG_BSU_SKEW)
+ bsu_aclf_beacon_skew (ctx->aclf, true);
bsu_aclf_clear_sync (ctx->aclf);
}
ctx->track_new = true;
@@ -149,6 +153,7 @@ bsu_track_avln_identify (bsu_t *ctx, bsu_avln_t *avln)
ctx->stats.neighbor_beacon_nb = 0;
ctx->stats.neighbor_beacon_last_mac = 0;
#endif /* CONFIG_STATS */
+ ctx->avln_tracked = false;
}
/**
@@ -858,7 +863,7 @@ bsu_timer_event_process__sta (bsu_t *ctx)
{
u32 bpsd0;
bsu_aclf_beacon_period_start_date (ctx->aclf, &bpsd0, 1);
- if (ctx->track_new)
+ if (ctx->track_new && ctx->avln_tracked)
{
u32 bpsd[BSU_BEACON_SCHEDULES_NB];
uint bp = bsu_aclf_beacon_period_tck (ctx->aclf);
@@ -922,6 +927,8 @@ bsu_timer_event_process__cco (bsu_t *ctx)
&ctx->sta_avln->sync, ctx->mac_config, ctx->phy);
ctx->track_new = false;
}
+ if (CONFIG_BSU_SCHEDULER_PREPARE)
+ ctx->ul_scheduler_prepare (ctx->ul_scheduler_prepare_ud);
/* Inform PBProc we send a central beacon. */
pbproc_beacon_detected (
ctx->pbproc,
@@ -1013,6 +1020,8 @@ bsu_timer_event_process (void *ud)
if (ctx->activate)
{
dbg_assert (ctx);
+ if (CONFIG_BSU_WATCHDOG_REFRESH)
+ (*ctx->ul_wd) (ctx->ul_wd_ud);
dbg_assert (
less_mod2p32 (phy_date (),
bsu_aclf_beacon_period_start_date_next(ctx->aclf)));
@@ -1148,6 +1157,21 @@ bsu_init_beacon_cb (bsu_t *ctx, bsu_beacon_processed_t cb, void *cb_ud)
}
void
+bsu_init_refresh_cb (bsu_t *ctx, bsu_refresh_wd_t wd, void *user_data)
+{
+ ctx->ul_wd = wd;
+ ctx->ul_wd_ud = user_data;
+}
+
+void
+bsu_init_scheduler_prepare (bsu_t *ctx, bsu_scheduler_prepare_t cb,
+ void *user_data)
+{
+ ctx->ul_scheduler_prepare = cb;
+ ctx->ul_scheduler_prepare_ud = user_data;
+}
+
+void
bsu_uninit (bsu_t *ctx)
{
dbg_assert (ctx);
@@ -1211,6 +1235,7 @@ bsu_beacon_process__avln_tracked (bsu_t *ctx, bsu_beacon_t *beacon,
bsu_beacon_send_prepare (ctx, BSU_BEACON_TYPE_DISCOVER, beacon);
ctx->sta_avln->beacon.beacon_period_start_date = bts_date;
bsu_stats_store (ctx);
+ ctx->avln_tracked = true;
return ctx->sta_avln;
}
@@ -1480,6 +1505,7 @@ bsu_untrack_avln (bsu_t *ctx)
arch_dsr_unlock ();
}
+
void
bsu_power_on (bsu_t *ctx, u8 snid)
{
diff --git a/cesar/bsu/stub/src/bsu.c b/cesar/bsu/stub/src/bsu.c
index 4e23c1d472..d31c27a05b 100644
--- a/cesar/bsu/stub/src/bsu.c
+++ b/cesar/bsu/stub/src/bsu.c
@@ -108,3 +108,12 @@ bsu_update_discover_info (
void
bsu_update_discover_info (
bsu_t *ctx, bsu_beacon_bmi_discover_info_t *discover) {}
+
+void
+bsu_init_scheduler_prepare (bsu_t *ctx, bsu_scheduler_prepare_t cb,
+ void *user_data) __attribute__ ((weak));
+
+void
+bsu_init_scheduler_prepare (bsu_t *ctx, bsu_scheduler_prepare_t cb,
+ void *user_data)
+{ }
diff --git a/cesar/bsu/test/utest/Config b/cesar/bsu/test/utest/Config
index c8e0346a7e..77f1d523fe 100644
--- a/cesar/bsu/test/utest/Config
+++ b/cesar/bsu/test/utest/Config
@@ -1,6 +1,6 @@
+CONFIG_ACLF_TRACKING[target-cable] = n
+CONFIG_ACLF_TRACKING[target-tracking] = y
CONFIG_DEBUG_FATAL_CATCH=y
CONFIG_RESTRACK=y
-CONFIG_TRACE = y
CONFIG_STATS = y
-CONFIG_ACLF_TRACKING[target-tracking] = y
-CONFIG_ACLF_TRACKING[target-cable] = n
+CONFIG_TRACE = y
diff --git a/cesar/bsu/test/utest/src/schedules.c b/cesar/bsu/test/utest/src/schedules.c
index e8811a638b..a115532ece 100644
--- a/cesar/bsu/test/utest/src/schedules.c
+++ b/cesar/bsu/test/utest/src/schedules.c
@@ -10,6 +10,7 @@
* \brief BSU schedule tests.
* \ingroup bsu
*/
+#include "config.h"
#include "common/std.h"
#include "lib/test.h"
#include "bsu/bsu.h"
@@ -321,6 +322,7 @@ test_case_track_new (test_t t)
test_fail_unless (ctx.bsu->nid_track == beacon.vf.nid);
test_fail_unless (ctx.bsu->snid_track == 0x1);
test_fail_unless (ctx.bsu->sta_avln == avln);
+ ctx.bsu->avln_tracked = true;
bsu_timer_event_process (ctx.bsu);
test_fail_unless (ctx.bsu->track_new == false);
test_fail_unless (ctx.bsu->sta_avln != &ctx.bsu->poweron);
@@ -367,6 +369,7 @@ test_case_track_new (test_t t)
test_fail_unless (ctx.bsu->snid_track == 0x1);
test_fail_unless (ctx.bsu->sta_avln == avln);
avln = test_case_track_new_beacon (t, &ctx, &beacon);
+ test_fail_unless (ctx.bsu->avln_tracked == true);
bsu_timer_event_process (ctx.bsu);
test_fail_unless (ctx.bsu->track_new == false);
test_fail_unless (ctx.bsu->sta_avln != &ctx.bsu->poweron);
@@ -406,6 +409,7 @@ test_case_track_new (test_t t)
bsu_timer_event_process (ctx.bsu);
bsu_track_avln (ctx.bsu, beacon.vf.nid, 0x1, 0x1,
beacon.bmis.mac_address.mac_address);
+ ctx.bsu->avln_tracked = true;
test_fail_unless (ctx.bsu->track_new);
bsu_timer_event_process (ctx.bsu);
test_fail_unless (ctx.bsu->track_new == false);
@@ -429,6 +433,45 @@ test_case_track_new (test_t t)
bsu_test_uninit (&ctx);
}
test_end;
+ test_begin (t, "Track new after overlap.")
+ {
+ bsu_test_init (&ctx);
+ ctx.bsu->aclf->beacon_period_tck = ctx.bsu->aclf->beacon_period_tck;
+ for (i = 0; i < COUNT (ctx.bsu->aclf->bpsd); i++)
+ ctx.bsu->aclf->bpsd[i] = i * ctx.bsu->aclf->beacon_period_tck;
+ ctx.bsu->activate = true;
+ ctx.bsu->is_sta = BSU_UPDATE_STA_TYPE_STA;
+ bsu_avln_t *avln = test_case_track_new_beacon (t, &ctx, &beacon);
+ bsu_timer_event_process (ctx.bsu);
+ bsu_track_avln (ctx.bsu, beacon.vf.nid, 0x1, 0x1,
+ beacon.bmis.mac_address.mac_address);
+ ctx.bsu->avln_tracked = true;
+ test_fail_unless (ctx.bsu->track_new);
+ bsu_timer_event_process (ctx.bsu);
+ test_fail_unless (ctx.bsu->track_new == false);
+ /* avoid recalculation of scheduler on beacon reception */
+ test_case_track_new_beacon (t, &ctx, &beacon);
+ for (i = 0; i < BSU_BEACON_SCHEDULES_NB - 1; i++)
+ {
+ test_fail_unless (
+ lesseq_mod2p32 (
+ ctx.ca.beacon_periods[i].start_date
+ + ctx.bsu->aclf->beacon_period_tck,
+ ctx.ca.beacon_periods[i + 1].start_date));
+ }
+ /* Check beacon has been modified. */
+ beacon.bmis.ps.nb = 1;
+ beacon.bmis.ps.ps[0] = beacon.bmis.ps.ps[1];
+ if (beacon.bmis.ps.ps[0].pscd)
+ test_fail_unless (beacon.bmis.ps.ps[0].pscd - 2 ==
+ avln->beacon.bmis.ps.ps[0].pscd);
+ else
+ test_fail_unless (beacon.bmis.ps.ps[0].cscd - 2 ==
+ avln->beacon.bmis.ps.ps[0].cscd);
+ bsu_test_uninit (&ctx);
+ }
+ test_end;
+
test_begin (t, "Track new for CCo")
{
bsu_test_init (&ctx);
@@ -595,7 +638,8 @@ test_suite_bsu_schedule (test_t t)
{
test_suite_begin (t, "BSU schedules");
test_case_ca_schedules (t);
- test_case_ca_schedules_intellon (t);
+ if (CONFIG_BSU_BEACON_REGIONS_PRESENT)
+ test_case_ca_schedules_intellon (t);
test_case_ca_schedules_special_allocations (t);
test_case_track_new (t);
}
diff --git a/cesar/bsu/test/utest/src/tests.c b/cesar/bsu/test/utest/src/tests.c
index 400f85231f..6199456939 100644
--- a/cesar/bsu/test/utest/src/tests.c
+++ b/cesar/bsu/test/utest/src/tests.c
@@ -40,6 +40,12 @@ bsu_test_upper_layer_beacon_received (void *ctx, bsu_beacon_t *beacon)
test->ul.beacon->next = beacon;
}
+static void
+bsu_test_upper_layer_wd_refresh (void *ctx)
+{
+ dbg_assert (ctx);
+}
+
void
bsu_test_upper_layer_beacon_received_init (bsu_test_t *ctx)
{
@@ -74,6 +80,7 @@ bsu_test_init (bsu_test_t *ctx)
ctx->mac_store, (ca_t*) &ctx->ca, (sar_t*) ctx,
ctx->timer, INVALID_PTR);
bsu_init_beacon_cb (ctx->bsu, bsu_test_upper_layer_beacon_received, ctx);
+ bsu_init_refresh_cb (ctx->bsu, bsu_test_upper_layer_wd_refresh, ctx);
/* Warn just for the test. */
ctx->bsu->sta_avln = &ctx->bsu->poweron;
ctx->bsu->sta_avln->sync.ntb_offset_tck = 256;
diff --git a/cesar/ce/fcall/test/Makefile b/cesar/ce/fcall/test/Makefile
index cf5b4d4da8..1833bbd0e5 100644
--- a/cesar/ce/fcall/test/Makefile
+++ b/cesar/ce/fcall/test/Makefile
@@ -7,6 +7,7 @@ test_ce_fcall_SOURCES = test_fcall.c fcall_stub.c ecos_stub.c
test_ce_fcall_MODULES = ce/fcall ce/common ce/rx/bitloading \
ce/rx/bitloading/fsm ce/rx/cp/stub \
lib mac/common host
+test_ce_fcall_CONFIG_MODULES = cp/sta/mgr
host_MODULE_MODULES =
include $(BASE)/common/make/top.mk
diff --git a/cesar/ce/rx/bitloading/inc/nsr.h b/cesar/ce/rx/bitloading/inc/nsr.h
index cf3812a1cf..de19915bdf 100644
--- a/cesar/ce/rx/bitloading/inc/nsr.h
+++ b/cesar/ce/rx/bitloading/inc/nsr.h
@@ -95,6 +95,17 @@ void
ce_rx_bl_nsr_compute_mean (ce_rx_bitloading_t *bl);
/**
+ * Compute the mean of the total NSR sum for all the channels together.
+ * \param bl the bit loading context of the station.
+ * \return the average total nsr.
+ *
+ * This function compute the mean of the NSR-s for all the channels together.
+ * It adds NSR means of all the channels and divides the sum with number of channels.
+ */
+u8
+ce_rx_bl_nsr_compute_total_mean (ce_rx_bitloading_t *bl);
+
+/**
* Change margin to apply to NSR before usage in the bit loading algorithms.
* \param margin_q margin to apply to NSR
*
diff --git a/cesar/ce/rx/bitloading/src/export_ce_rx_param.py b/cesar/ce/rx/bitloading/src/export_ce_rx_param.py
index fa23480d17..39de6c2a73 100644
--- a/cesar/ce/rx/bitloading/src/export_ce_rx_param.py
+++ b/cesar/ce/rx/bitloading/src/export_ce_rx_param.py
@@ -1,12 +1,12 @@
#!/usr/bin/env python
-# Get ce_rx_param.h file copy it in a new file ce_rx_param_tns_av.txt
+# Get ce_rx_param.h file copy it in a new file ce_rx_param_tns_eoc.txt
# add in this file current git branch name.
import sys, subprocess, os
ce_rx_param_path = sys.path[0]+ '/../../ce_rx_param.h'
-ce_rx_param_path_tns = sys.path[0]+ '/../../ce_rx_param_tns_av.txt'
+ce_rx_param_path_tns = sys.path[0]+ '/../../ce_rx_param_tns_eoc.txt'
# Get current branch branch name
pr = subprocess.Popen(['git', 'describe'], cwd=os.path.dirname('./'),
diff --git a/cesar/ce/rx/bitloading/src/intervals.c b/cesar/ce/rx/bitloading/src/intervals.c
index 2ce5857dfe..5149862867 100644
--- a/cesar/ce/rx/bitloading/src/intervals.c
+++ b/cesar/ce/rx/bitloading/src/intervals.c
@@ -22,8 +22,8 @@
#include "ce/rx/cp/inc/cp.h"
#include "ce_rx_bl_fsm_defs.h"
-u8 ce_rx_bl_intervals_fsm_count_ = 6;
-u8 ce_rx_bl_intervals_repetition_count_ = 4;
+u8 ce_rx_bl_intervals_fsm_count_ = 1;
+u8 ce_rx_bl_intervals_repetition_count_ = 1;
u32
ce_rx_bl_intervals_get_tmi_used_list (sta_t *sta, bool check_default)
diff --git a/cesar/ce/rx/bitloading/src/nsr.c b/cesar/ce/rx/bitloading/src/nsr.c
index 963aba2663..1750717193 100644
--- a/cesar/ce/rx/bitloading/src/nsr.c
+++ b/cesar/ce/rx/bitloading/src/nsr.c
@@ -18,6 +18,8 @@
#include "ce/rx/bitloading/inc/ber.h"
#include "hal/phy/defs.h"
+#include "stdio.h"
+
/**
* Default value of margin to apply to NSR.
*/
@@ -146,6 +148,7 @@ ce_rx_bl_nsr_compute_mean (ce_rx_bitloading_t *bl)
/* Tone represents the current tone.
* tone_limit represents the limit of tone for this block. */
uint tone, tone_limit;
+
for (i = 0, tone = 0,
tone_limit = BLK_SIZE / CE_RX_BITLOADING_NOISE_NRJ_SIZE;
i < bl->noise_nrj_blk_count;
@@ -174,6 +177,51 @@ ce_rx_bl_nsr_compute_mean (ce_rx_bitloading_t *bl)
}
}
+u8
+ce_rx_bl_nsr_compute_total_mean (ce_rx_bitloading_t *bl)
+{
+ /* Check parameter. */
+ dbg_assert (bl);
+ dbg_assert_ptr (bl->noise_nrj);
+
+ /* Go through each block of NSR sum. */
+ blk_t *blk = bl->noise_nrj;
+ uint i;
+ u32 total_sum = 0;
+ u8 ch_nb = 0;
+ u8 average_nsr;
+ /* Tone represents the current tone.
+ * tone_limit represents the limit of tone for this block. */
+ uint tone, tone_limit;
+
+ for (i = 0, tone = 0,
+ tone_limit = BLK_SIZE / CE_RX_BITLOADING_NOISE_NRJ_SIZE;
+ i < bl->noise_nrj_blk_count;
+ i++, tone_limit += BLK_SIZE / CE_RX_BITLOADING_NOISE_NRJ_SIZE)
+ {
+ /* Sanity check. */
+ dbg_assert (blk);
+ /* Get current NSR sum. */
+ u32 *cur_sum_nsr = (u32 *) blk->data;
+
+ /* If tone limit is over number of tone, we need to force it to the
+ * maximum value. */
+ if (tone_limit > PHY_CARRIER_NB)
+ tone_limit = PHY_CARRIER_NB;
+ uint j;
+ /* Go through each sum of NSR of this block. */
+ for (j = 0; tone < tone_limit; j++, tone++)
+ {
+ total_sum = total_sum + cur_sum_nsr[j];
+ ch_nb++;
+ }
+ /* Next block. */
+ blk = blk->next;
+ }
+ average_nsr = (u8)(total_sum / ch_nb / CE_RX_BL_NSR_SOUND_RESCALE);
+ return average_nsr;
+}
+
void
ce_rx_bl_nsr_margin_set (u8 margin_q)
{
diff --git a/cesar/ce/rx/bitloading/test/Config b/cesar/ce/rx/bitloading/test/Config
index 1221024089..a4713fdb2d 100644
--- a/cesar/ce/rx/bitloading/test/Config
+++ b/cesar/ce/rx/bitloading/test/Config
@@ -1 +1,2 @@
CONFIG_DEBUG_FATAL_CATCH = y
+CONFIG_MAC_COMMON_EOC_TONEMASK = y
diff --git a/cesar/ce/rx/bitloading/test/common-rule.mk b/cesar/ce/rx/bitloading/test/common-rule.mk
index 8c056944dd..2b8f3d30e7 100644
--- a/cesar/ce/rx/bitloading/test/common-rule.mk
+++ b/cesar/ce/rx/bitloading/test/common-rule.mk
@@ -2,7 +2,7 @@
# Rule to generate header from data vector (must be defined after include).
$(bl_test_vectors_tns_h): $(OBJ_INC_DIR)/%.h : $(bl_test_vectors_dir)/%.data \
$(bl_test_vector_tools) $(OBJ_INC_DIR_STAMP)
- $(bl_test_vector_tools) $(@:$(OBJ_INC_DIR)/%.h=%) -f < $< > $@
+ $(bl_test_vector_tools) $(@:$(OBJ_INC_DIR)/%.h=%) -f -m 1408 < $< > $@
$(bl_test_vectors_ber_tns_h): $(OBJ_INC_DIR)/%.h : $(bl_test_vectors_dir)/%.data \
$(bl_test_vector_tools) $(OBJ_INC_DIR_STAMP)
@@ -10,7 +10,7 @@ $(bl_test_vectors_ber_tns_h): $(OBJ_INC_DIR)/%.h : $(bl_test_vectors_dir)/%.data
$(bl_test_vectors_scilab_h): $(OBJ_INC_DIR)/%.h : $(bl_test_vectors_dir)/%.data \
$(bl_test_vector_tools) $(OBJ_INC_DIR_STAMP)
- $(bl_test_vector_tools) $(@:$(OBJ_INC_DIR)/%.h=%) -d < $< > $@
+ $(bl_test_vector_tools) $(@:$(OBJ_INC_DIR)/%.h=%) -d -m 1408 < $< > $@
$(bl_test_vectors_pber_h): $(OBJ_INC_DIR)/%.h : $(bl_test_vectors_dir)/%.data \
$(bl_test_vector_tools) $(OBJ_INC_DIR_STAMP)
diff --git a/cesar/ce/rx/bitloading/test/data/bl_initial_final.data b/cesar/ce/rx/bitloading/test/data/bl_initial_final.data
index ff358985d0..384f23f37b 100644
--- a/cesar/ce/rx/bitloading/test/data/bl_initial_final.data
+++ b/cesar/ce/rx/bitloading/test/data/bl_initial_final.data
@@ -72,29 +72,6 @@
0
0
0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
4
4
4
@@ -108,10 +85,42 @@
4
4
4
+6
4
4
4
+6
+6
4
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
4
4
4
@@ -138,45 +147,83 @@
4
4
4
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-4
-4
-4
-4
-4
-4
6
-4
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+8
+6
+6
+8
+8
+8
+8
+8
+8
+6
+8
+8
+8
+8
+6
+8
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
6
6
6
@@ -213,19 +260,6 @@
4
4
4
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
4
4
4
@@ -250,11 +284,24 @@
4
4
4
+6
+6
+6
+6
4
+6
+6
+6
+6
+6
+6
4
+6
+6
4
4
4
+6
4
4
4
@@ -268,10 +315,40 @@
4
4
4
+6
+6
+6
4
+6
+6
+6
+6
+6
+6
4
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
4
4
+6
4
4
4
@@ -281,26 +358,6 @@
4
4
4
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
4
4
4
@@ -388,36 +445,6 @@
4
4
4
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
4
4
4
@@ -455,6 +482,17 @@
4
4
4
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
4
4
4
@@ -482,23 +520,6 @@
3
3
3
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-3
-2
-2
-2
-3
-2
3
3
3
@@ -528,21 +549,9 @@
2
2
2
-2
-2
-2
-2
-2
-2
-2
-1
-1
-1
-1
-1
-1
1
1
+2
1
1
1
@@ -587,20 +596,6 @@
0
0
0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
1
1
1
@@ -608,33 +603,8 @@
1
2
1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
2
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
2
-1
-1
-1
2
2
2
@@ -672,6 +642,170 @@
2
2
2
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+4
+3
+3
+3
+3
+3
+3
+3
+3
+3
+4
+3
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+3
+3
+4
+4
+4
+4
+3
+3
+4
+3
+3
+3
+3
+4
+3
+3
+3
+3
+3
+4
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
2
2
2
@@ -721,32 +855,10 @@
2
2
2
-3
-3
2
-3
-3
-3
-3
-3
-3
-3
-3
2
2
2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
2
2
2
@@ -815,7 +927,6 @@
2
2
2
-1
2
2
2
@@ -824,47 +935,24 @@
2
2
2
-1
2
2
2
1
1
+1
+1
2
1
1
1
1
1
-2
-2
-2
1
-2
1
1
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+1
+1
0
0
0
@@ -881,52 +969,28 @@
0
0
0
-2
-2
-2
-2
-2
-2
-2
1
1
1
1
1
-2
1
1
1
1
1
1
-2
1
1
-2
-2
-2
-2
-2
-2
-2
-2
-2
1
-2
-2
1
1
1
-2
-2
-2
1
1
-2
1
-2
1
+0
1
1
1
@@ -939,9 +1003,7 @@
1
1
1
-0
1
-0
1
0
0
@@ -1472,65 +1534,3 @@
0
0
0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
diff --git a/cesar/ce/rx/bitloading/test/data/bl_initial_final_with_carriers_masked.data b/cesar/ce/rx/bitloading/test/data/bl_initial_final_with_carriers_masked.data
index ff358985d0..8ef0409dd0 100644
--- a/cesar/ce/rx/bitloading/test/data/bl_initial_final_with_carriers_masked.data
+++ b/cesar/ce/rx/bitloading/test/data/bl_initial_final_with_carriers_masked.data
@@ -74,29 +74,6 @@
0
0
0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
4
4
4
@@ -108,10 +85,42 @@
4
4
4
+6
4
4
4
+6
+6
4
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
4
4
4
@@ -138,45 +147,83 @@
4
4
4
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-4
-4
-4
-4
-4
-4
6
-4
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+8
+6
+6
+8
+8
+8
+8
+8
+8
+6
+8
+8
+8
+8
+6
+8
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
6
6
6
@@ -213,19 +260,6 @@
4
4
4
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
4
4
4
@@ -250,11 +284,24 @@
4
4
4
+6
+6
+6
+6
4
+6
+6
+6
+6
+6
+6
4
+6
+6
4
4
4
+6
4
4
4
@@ -268,10 +315,40 @@
4
4
4
+6
+6
+6
4
+6
+6
+6
+6
+6
+6
4
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
4
4
+6
4
4
4
@@ -281,26 +358,6 @@
4
4
4
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
4
4
4
@@ -388,36 +445,6 @@
4
4
4
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
4
4
4
@@ -455,6 +482,17 @@
4
4
4
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
4
4
4
@@ -482,23 +520,6 @@
3
3
3
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-3
-2
-2
-2
-3
-2
3
3
3
@@ -528,21 +549,9 @@
2
2
2
-2
-2
-2
-2
-2
-2
-2
-1
-1
-1
-1
-1
-1
1
1
+2
1
1
1
@@ -587,20 +596,6 @@
0
0
0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
1
1
1
@@ -608,33 +603,8 @@
1
2
1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
2
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
2
-1
-1
-1
2
2
2
@@ -672,6 +642,170 @@
2
2
2
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+4
+3
+3
+3
+3
+3
+3
+3
+3
+3
+4
+3
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+3
+3
+4
+4
+4
+4
+3
+3
+4
+3
+3
+3
+3
+4
+3
+3
+3
+3
+3
+4
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
2
2
2
@@ -721,32 +855,10 @@
2
2
2
-3
-3
2
-3
-3
-3
-3
-3
-3
-3
-3
2
2
2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
2
2
2
@@ -815,7 +927,6 @@
2
2
2
-1
2
2
2
@@ -824,47 +935,24 @@
2
2
2
-1
2
2
2
1
1
+1
+1
2
1
1
1
1
1
-2
-2
-2
1
-2
1
1
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+1
+1
0
0
0
@@ -881,52 +969,28 @@
0
0
0
-2
-2
-2
-2
-2
-2
-2
1
1
1
1
1
-2
1
1
1
1
1
1
-2
1
1
-2
-2
-2
-2
-2
-2
-2
-2
-2
1
-2
-2
1
1
1
-2
-2
-2
1
1
-2
1
-2
1
+0
1
1
1
@@ -939,9 +1003,7 @@
1
1
1
-0
1
-0
1
0
0
@@ -1472,65 +1534,3 @@
0
0
0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
diff --git a/cesar/ce/rx/bitloading/test/data/mean_on_sound_nsr.data b/cesar/ce/rx/bitloading/test/data/mean_on_sound_nsr.data
index 0ae65b9aa2..63ff34e23f 100644
--- a/cesar/ce/rx/bitloading/test/data/mean_on_sound_nsr.data
+++ b/cesar/ce/rx/bitloading/test/data/mean_on_sound_nsr.data
@@ -72,1372 +72,1372 @@
7.378698e+019
7.378698e+019
7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-839
-702
-642
-626
-521
-514
+1727
+1397
+1354
+1174
+1098
+1102
+1067
+974
+889
+847
+832
+838
+767
+688
+771
+773
+740
+690
+651
+731
+593
+636
+616
+666
+612
+564
+481
+613
496
-540
-489
-502
-452
-506
-469
-454
-473
-475
-422
-461
-440
-421
-388
-367
-379
-368
-347
-334
-355
-382
-345
-396
-406
-404
-443
-419
-451
-553
-556
-561
-657
-728
-708
-727
-850
-823
-885
-800
-925
-997
-823
-834
-792
-919
-993
-880
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-488
-453
-413
-386
-399
-388
-364
-340
-349
-303
-362
-317
-311
-290
-281
-280
-240
-250
-229
-209
-237
-226
-217
-231
-205
-240
-248
-230
-227
-245
-253
-271
-272
-316
-304
-337
-329
-344
-369
-335
-372
-354
-339
-389
-393
-426
-377
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-471
-482
-484
-513
-435
-420
-403
-399
-378
-379
-381
-358
-428
-402
-388
-409
-376
-409
-436
-476
+552
+522
+543
+433
+457
+450
472
-548
-568
-593
-646
-655
-738
-711
-795
-784
-965
-883
-1031
-1055
-1047
-928
-933
-1012
+411
+489
+447
+366
+510
+483
+511
+523
+515
+533
+559
+626
+635
+729
+868
+821
+877
+872
+1039
+1058
+1040
+1126
+1124
+1026
+1004
1016
+988
+858
+1023
860
-888
-776
-835
-818
+974
+777
+781
+861
+792
+806
+747
771
-711
-729
-688
-737
-665
-645
-645
-647
-707
-683
-753
-975
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-802
-720
-716
-761
-718
-655
-639
-567
+728
+693
+666
+714
641
-706
-596
-601
-631
-581
-586
-574
-623
-597
-509
-556
-496
+590
+576
+590
534
-508
+579
+478
+468
+475
+473
+466
+439
506
-511
-502
-493
+462
+508
+445
+512
+438
+412
+473
459
-451
+444
+442
+432
+389
+385
+395
+376
+359
+353
+307
+328
+285
+306
+303
+261
+270
+266
+262
+249
+247
+297
+268
+276
+264
+292
+315
+292
+352
+369
+334
+346
+413
+359
+420
+387
+416
+389
+437
+462
+454
487
-445
-502
-510
-519
-468
-486
-530
-443
-527
-521
-536
+454
+494
+497
+478
+484
+563
+514
+505
+548
+491
+555
+534
+569
+534
+567
+588
584
-618
-547
-619
-659
-626
-620
+570
+507
+522
+475
+461
+487
+471
+525
+581
+499
+494
+531
+531
+555
+640
+600
+653
+681
+705
+810
+896
+947
+897
+1064
+1076
+1079
+1249
+1349
+1338
+1244
+1283
+1267
+1136
+1279
+1054
+1050
+981
+1035
+854
+1082
+940
+829
+958
+851
+867
+879
+879
+777
+905
+818
+870
+870
+808
+739
+747
702
-724
-751
-817
-732
-802
-828
-745
-918
-855
-858
-804
-831
-850
-789
-712
-724
-722
-706
-737
+720
689
-657
-678
-642
-680
-647
+718
+742
+635
+645
+625
719
-704
-682
-663
-729
-767
-772
-836
-903
-920
-964
-1064
-1147
-1270
-1285
-1481
-1491
-1470
-1612
-1697
-1837
-1788
-1773
-1774
-1631
-1657
-1409
-1452
-1270
-1253
-1367
-1388
-1453
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-1154
-1038
-1013
-908
-953
-874
-897
-850
-872
-834
-817
-833
+693
+675
807
-848
-903
-818
-849
-789
-826
-868
-922
-828
-865
-808
-864
-729
-741
-835
-748
-650
-774
-735
-657
+684
+688
+725
+756
+736
+699
+788
+847
+876
+853
+847
+760
+740
+784
+785
+732
+793
+823
+725
+692
+709
+686
+736
+652
+654
+589
+687
+619
+642
+727
+642
+564
+581
+626
+583
+660
+660
655
-710
+609
+612
+590
+635
+686
+607
+668
+679
+663
+628
+718
+649
757
-772
-755
-772
-792
-880
-777
-721
-738
-792
-711
-728
-782
743
-797
-873
+696
+878
+865
+868
+878
+954
+1001
+1080
+961
+1117
+1149
+1087
+1018
+905
+1008
+1001
+1026
+979
+980
+893
+866
+815
+866
+852
+830
+838
799
+801
+815
+863
+818
+790
+915
+861
+1047
+1071
+1049
+1125
+1278
+1348
+1447
+1506
+1685
+1728
+1768
+1843
+2041
+2076
+2313
+2167
+2099
+2075
+1955
+1885
+1751
+1566
+1559
+1535
+1465
+1567
+1330
+1284
+1402
+1354
+1282
+1310
+1230
+1196
+1172
+1286
+1233
+1208
+1031
+1076
+1108
+1092
+1058
+1020
+1029
+989
+1177
+981
+1037
+1060
+1056
+1048
+1076
+1041
+965
+1019
+961
+1173
+1006
+1004
+868
907
-908
-957
-974
-1203
-1187
-1346
-1390
-1668
+937
+1129
+966
+835
+905
+873
+869
+781
+869
+887
+875
+844
+765
+1012
+940
+926
+814
+798
+956
+952
+963
+868
+881
+1007
+988
+921
+1015
+1048
+1324
+1255
+1377
+1450
1675
-1736
-1890
-2401
-2112
-2295
-2639
-3027
-2738
-2659
-2401
-2740
+1700
+1801
+2071
+2252
+2664
+3142
+3499
+2914
+3533
+4274
+3398
+3971
+3319
+3447
+2931
+3131
+2487
+2532
+2086
+2530
+2174
+2369
+2370
+2047
+2223
+2022
+1876
+1943
2181
-2450
-1853
-2126
-2188
-2192
-1888
-2100
-1838
-1929
-1788
-1975
-1962
-1881
-1979
-1995
-1899
-1999
-2131
-2116
-2090
-2323
-2344
-2436
-2389
-2526
-2503
-2655
-2655
-2614
-2758
-2653
-2814
-2925
-2828
-3326
-2799
-3660
-3313
-3751
-3850
-4072
-4426
-4705
-5315
-5295
-6049
-6071
-6036
-6680
-7593
-8084
-8140
-7583
-7674
-8858
-9830
-11119
-10967
-11006
-11326
-12522
-11757
-12280
-13567
-12548
-14190
-16528
-17557
-19127
-19835
-23490
-31988
-42970
-64207
-71717
-71975
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-32909
-30914
-25028
-19446
-14900
-13658
-13520
-11222
-10710
-9523
-8784
-7603
-7326
-6625
-6530
-6259
-5606
-5870
-6127
-5710
-6085
-5808
-5683
-5816
-5945
-5692
-5319
-6049
-6231
-5972
-5468
-6073
-6184
-6264
-6140
-6343
-6846
-5716
-5889
-5733
-5940
-5526
-5342
-5364
-5378
-4778
-4465
-4572
-4692
-4438
-4388
-3776
-4047
+2197
+2301
+2193
+2463
+2448
+2269
+2604
+2542
+2792
+3234
3155
-3494
-3641
-3691
-3340
-3387
-3203
-3329
-2987
-3031
-2762
-2761
-2736
-2404
-2677
-2685
-2802
-2609
-2503
-2660
-2635
-2630
-2446
-2557
-2920
-3141
-2776
-2949
-2885
-3174
-2934
+3310
+3033
+3516
+3029
+3781
+3438
+3723
+3738
+3868
+3837
+3961
+4424
+4161
+4853
+5184
+5675
+5521
+5332
+7195
+7568
+8133
+8375
+7395
+8310
+9551
+10156
+11088
+10894
+11157
+12096
+10749
+11628
+12160
+12303
+11090
+12726
+12633
+15165
+14282
+14963
+15940
+17365
+17640
+19769
+23355
+26173
+31967
+34240
+35550
+38594
+50907
+53753
+72108
+73745
+92893
+115092
+111025
+137003
+167764
+157712
+189478
+191278
+195958
+208661
+178158
+149693
+114574
+103762
+87681
+72673
+71667
+59849
+42489
+41648
+31436
+27435
+26081
+19694
+18713
+16127
+14983
+14049
+16315
+12574
+11307
+12678
+8491
+8689
+9309
+6815
+7199
+7910
+7087
+7100
+7340
+6248
+6757
+6817
+7230
+7413
+7894
+7391
+8376
+7644
+8638
+8007
+7524
+7880
+6970
+7485
+7392
+7729
+7192
+7777
+7336
+7199
+6995
+7172
+5338
+5342
+5345
+5860
+4918
+5601
+4679
+4545
+4244
+3911
+4338
+4213
+3554
+3532
+3708
+3642
+3112
+3315
+3184
+3437
+3360
+2970
2952
-3755
-3387
-3953
-3817
-4293
-3294
-3809
-3941
+3115
+2864
+3535
+3405
+3177
+3015
+2860
3179
-3332
-3365
-3354
-3011
-3100
-3255
+3504
+3431
+3681
+3177
+4203
+3506
+3904
+3400
+3654
+3915
+4136
+4176
+4198
+4480
+3700
+4402
+4303
+3880
+4186
+3794
+3696
+3525
+3856
+3502
+3668
+3183
+3388
3236
-3126
-3216
-3204
-3328
-3314
-2673
-3046
-2811
-3106
-2670
-2461
-2319
-2567
-2694
-2557
-2483
-2422
-2535
-2249
-2472
-2169
-2272
-2326
-2467
-2378
+3229
+3140
+3031
+3034
+2981
+3136
+2699
+3119
+2889
+3067
+3384
+3169
+3275
+2855
+2908
+2919
+2742
+2804
+2665
+2696
+2452
+2260
+2508
+2721
+2449
2413
-2140
-2142
-2050
-2030
-1919
-1942
-2062
-1935
-1856
-1621
-1774
-1701
-1924
-1765
-1814
-2046
-2143
-2154
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-2652
-2442
-2200
-2279
-2397
-2142
-2122
-2388
-2453
-2063
-2182
+2492
+2148
2136
-2241
+2243
+2063
+2318
+1816
+2027
2119
-2055
-2360
-2244
-2057
-2189
-2491
-2144
-2128
-2199
-2008
-2266
-2166
-2360
-2406
-2238
-2607
-2337
-2337
-2603
-2728
-2791
-2648
-2436
-2398
-2600
-2407
-2626
-2962
-2763
-2916
+1961
+2162
+2186
+2264
+2459
+2326
+2133
+2164
+2107
+2201
+2438
+2366
+2327
+2460
+2726
+2211
+2361
+2454
+2190
+3014
+2825
+2679
+2747
+2277
+2700
+2874
+3274
+2619
+3008
+3008
+2917
+2840
+2689
2999
-2881
-2824
-3048
-3035
-3003
-3651
-3434
-3547
-3898
-3738
-4099
-3858
-3897
-3381
-4089
-4053
-4376
-4157
-4580
-4277
-4781
-4862
-5180
-5370
-4741
-4905
-5214
-4828
+2774
+3068
+2776
+2925
+2600
+3116
+2920
+2937
+3254
+3208
+3057
+3189
+3011
+3255
+3368
+3018
+2920
+3282
+3062
+3260
+2845
+2983
+3444
+3252
+3323
+3608
+3322
+3378
+3300
+3655
+3384
+3622
+3533
+3505
+3938
+4115
+4005
+3904
+3919
+4049
+3838
+4425
+4190
+4748
+4988
+4866
5203
-4887
-5010
-5090
-5397
-5070
-4579
-5513
-5407
-5885
-5140
+5097
+5781
+5986
+6760
+6041
+6461
+7078
+5259
+6533
+6015
+6146
+5876
+5740
+5534
+6049
+6091
+6389
+6774
+6956
+6722
+6260
+6686
+6132
+6276
+7491
+5415
+6880
+5758
+7225
+6768
+6830
+6098
+6195
+5358
+5771
+6523
+5671
+5248
+5750
+6040
+5517
+6122
+5870
+6131
+5266
6112
-5657
-5261
-5847
-5988
-4788
-5507
-5211
-5292
-5135
-5254
-5302
-4939
-4559
-4837
-4876
-4415
-5076
-4860
-4546
-5002
-4722
-4873
-4752
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-5567
-5244
-4729
-5047
-5081
-4803
-5604
-5399
-5793
-5752
-5621
-5440
-5229
-5678
-5990
-5729
-5648
-5826
-6024
-5228
-5252
-5433
-4708
-5128
-4394
-4733
-4929
-5598
-4946
-5175
-4838
-5305
-5104
-5610
-5724
-5295
-5288
-4992
-5151
-5010
-5613
-5717
-5129
-5680
-5483
-6225
-6158
-6199
-6776
-6980
-7774
-7316
-8331
-8312
-9194
-9942
-10040
-10039
-11381
-10234
-11383
-10936
-12726
-13735
-14329
-16072
-13092
-13821
-15240
-15273
-15002
-17110
-18355
-16882
-16793
-16377
-16103
-17000
-15490
-19173
-20024
-21530
-22468
-23429
-20801
-22210
-20844
-20253
-21268
-18833
-15274
-16954
-16825
-16432
-17952
-16360
-17216
-17257
-15853
-15246
-14300
-14668
-14618
-13927
-14304
-12995
-14243
-14029
-14777
-16418
-15941
-16640
-14575
-12941
-12979
-14252
-14203
-14433
-15851
-15857
-14612
-15254
-16995
-18636
-21011
-17909
-20011
-18135
-20644
-20803
-20091
-21258
-20759
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-33132
-30968
-31248
-29038
-28764
-24300
-24832
-27594
-26844
-27940
-26456
-28846
-33011
-34122
-38382
-44115
-44851
-48972
-57033
-52267
-62251
-67900
-71638
-63734
-60582
-59935
-64865
-53039
-64929
-51991
-52000
-47776
-58543
-53404
-69278
-62508
-68322
-74682
-72944
-75831
-83742
-86330
-79784
-93554
-98501
-107689
-119188
-129321
-121179
-108405
-124143
-134404
-135155
-158467
-167078
-160052
-157773
-133020
-136958
-157087
-156295
-147117
-151914
-149603
-157031
-163897
-175241
-176395
-188320
-199635
-189150
-177680
-168262
-167843
-182802
-203569
-196383
-204178
-214121
-209961
-209022
-200031
-223670
-197449
-186796
-179627
-164025
-166181
-153507
-153797
-153640
-125167
-140749
-148179
-171828
-166630
-186992
-215725
-231786
-219696
-186567
-197709
-194740
-219999
-216835
-249492
-262405
-270181
-241187
-233841
-237693
-260726
-226171
-209223
-172046
-149675
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
-7.378698e+019
+5700
+5423
+6065
+6238
+6140
+6527
+6457
+6196
+5991
+5523
+6153
+5425
+5423
+6305
+5997
+6363
+5745
+6487
+5454
+6304
+5940
+6449
+5869
+6328
+6415
+4908
+5977
+6048
+5753
+6236
+5463
+6079
+5159
+7325
+6371
+7218
+7364
+6689
+6738
+6712
+5818
+6580
+7313
+6297
+5406
+5004
+6307
+4899
+5727
+5776
+5499
+4984
+5213
+5737
+6211
+5174
+6044
+5920
+6176
+6712
+6215
+5181
+6258
+5865
+6502
+7434
+7004
+6906
+7456
+7956
+7405
+7233
+8687
+8475
+8565
+8578
+8693
+8845
+9323
+9302
+11332
+11741
+12702
+12956
+12890
+12902
+11519
+12508
+14826
+13933
+13579
+12860
+14769
+15573
+14135
+14945
+18356
+21048
+19259
+22229
+20779
+21332
+21759
+25083
+20401
+21791
+27472
+25822
+24793
+21948
+23443
+22952
+20040
+17379
+15910
+16860
+14873
+15401
+13771
+16019
+15497
+14710
+16565
+15247
+17333
+16225
+16975
+15447
+15446
+14414
+15479
+17910
+15362
+16622
+19562
+16426
+16456
+15695
+16469
+16982
+16611
+17557
+16132
+16777
+14450
+17506
+16636
+16294
+18032
+19725
+21454
+23446
+25556
+21662
+22729
+24703
+20100
+21834
+24675
+28669
+26461
+31410
+26503
+27658
+28585
+27442
+30156
+32056
+30697
+36024
+36638
+39279
+36877
+34782
+34450
+32301
+36961
+40004
+36238
+41591
+50843
+54630
+54984
+51793
+50590
+47418
+56342
+44373
+48733
+48268
+49550
+54876
+54768
+44480
+51353
+65019
+69833
+72633
+83208
+70984
+85232
+88627
+95449
+91914
+108244
+122905
+136107
+130412
+128042
+140781
+135019
+135856
+118964
+119944
+126620
+110827
+120298
+135059
+145246
+147460
+145322
+155784
+147820
+153989
+139419
+158296
+134282
+145550
+138874
+161362
+192158
+188681
+184427
+209261
+206339
+209197
+245428
+224773
+231443
+219648
+208261
+196629
+230046
+204652
+186103
+185368
+194031
+193700
+165994
+162488
+169930
+192391
+179117
+195013
+190160
+198704
+207704
+200135
+214317
+229946
+195992
+215527
+206208
+188989
+167939
+177087
+190562
+210961
+215581
+234305
+221554
+218386
+194663
+229155
+232688
+232637
+223111
+238837
+249356
+250264
+234680
+246252
+253555
+237237
+214922
+198973
+211626
+197535
+199049
+201379
+223560
+207400
+211748
+225484
+211812
+230857
+233179
+215132
+226446
+205548
+212025
+218527
+229579
+225934
+261636
+241316
+261608
+272608
+257358
+253348
+257741
+235016
+238936
+224173
+222983
+183313
+232725
+228535
+200118
+213735
+254581
+248723
+233264
+254846
+266394
+278451
+253403
+219660
+230979
+209193
+192327
+215221
+238017
+277717
+259689
+235266
+281159
+236993
+241488
+262040
+257546
+266672
+275003
+293016
+290792
+243514
+268784
+234710
+231334
+216503
+227298
+221550
+259169
+237517
+215591
+241518
+221151
+212388
+221646
+213483
+229665
+211350
+195659
+207931
+238856
+223103
+244576
+251398
+248969
+264261
+278668
+271647
+228853
+240313
+250236
+253099
+273183
+259414
+270122
+256818
+258576
+228484
+258373
+246602
+239692
+232285
+267208
+285488
+283911
+276743
+271651
+249661
+241637
+238788
+246834
+250997
+269876
+249810
+232338
+266683
+281196
+269954
+255164
+269080
+261621
+259270
+253184
+248223
+249087
+248441
+219762
+220143
+201316
+216939
+231644
+226650
+230527
+210679
+232037
+234536
+220304
+270454
+270534
+273594
+251799
+266621
+242213
+263859
+261086
+230321
+257584
+252416
+245544
+207731
+209048
+198455
+214572
+207740
+223005
+226528
+222440
+230954
+237594
+243133
+234346
+223815
+236296
+246389
+240461
+227864
+261125
+232633
+210208
+207410
+236561
+256136
+237239
+207131
+235048
+233755
+231697
+249926
+236938
+210136
+239364
+188680
+216933
+245282
+248480
+223508
+215001
+259596
+252554
+255116
+242091
+201290
+185337
+215989
+182586
+160904
+196712
+194115
+217382
+230097
+246002
+242975
+282330
+258535
+234272
+253181
+243694
+209682
+247613
+215995
+203494
+209211
+205149
+208719
+223954
+263191
+271344
+276312
+275057
+243935
+232633
+234261
+243458
+260568
+264630
+271986
+245244
+281346
+304046
+280404
+258822
+238645
+279809
+236179
+224962
+269033
+273262
+311812
+292010
+281512
+305268
+283757
+278776
+247400
+232152
+259056
+225276
+241337
+264409
+282951
+250957
+255530
+237263
+231634
+224589
+247727
+251542
+268298
+244772
+259214
+247484
+221396
+230774
+238964
+260534
+267239
+266001
+305859
+290956
+257192
+221978
+238789
+228370
+235347
+246370
+243088
+271347
+264477
+241214
+255481
+245444
+231931
+227949
+195435
+208663
+232838
+198073
+241760
+254391
+267822
+289519
+264820
+265054
+242994
+224584
+195306
+173393
+127734
7.378698e+019
7.378698e+019
7.378698e+019
diff --git a/cesar/ce/rx/bitloading/test/data/nsr_on_sound.data b/cesar/ce/rx/bitloading/test/data/nsr_on_sound.data
index 84350b0870..c021b48035 100644
--- a/cesar/ce/rx/bitloading/test/data/nsr_on_sound.data
+++ b/cesar/ce/rx/bitloading/test/data/nsr_on_sound.data
@@ -72,1372 +72,1372 @@
3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-367 426 378 214 712 373 475 347 521 229 466 526 310 739 302 342 398 458 392
-307 416 380 337 556 288 213 144 316 230 586 237 401 410 437 563 204 379 272
-321 379 274 222 688 250 372 324 296 218 379 333 376 410 200 417 263 197 185
-291 339 313 444 351 217 327 174 298 334 193 270 333 462 269 337 361 363 276
-299 395 239 419 299 141 338 204 285 174 234 209 183 230 311 281 186 221 309
-285 278 291 238 245 169 275 336 286 233 267 228 309 211 253 239 374 164 211
-289 256 172 273 238 358 244 192 259 217 229 349 200 172 293 173 325 276 197
-306 292 174 418 213 221 189 247 310 248 253 307 249 437 369 165 297 321 116
-337 221 268 218 197 240 258 211 233 274 254 157 172 254 304 240 232 277 300
-188 238 303 221 240 334 183 361 244 256 217 132 249 266 307 200 260 334 245
-213 184 203 169 375 240 173 227 158 146 177 272 241 220 162 237 418 207 274
-231 368 223 269 262 210 254 269 203 186 188 395 278 202 180 253 380 274 187
-221 257 282 314 386 157 167 223 205 127 151 198 161 252 375 253 276 186 267
-251 191 202 245 263 242 204 210 291 229 143 240 336 212 194 218 172 237 239
-229 195 218 256 236 227 266 256 374 153 362 190 211 152 274 267 173 205 255
-168 254 251 241 200 309 244 224 215 140 239 152 428 255 229 286 217 238 228
-192 198 162 199 218 250 228 125 298 187 308 212 235 289 144 233 211 185 136
-180 201 215 157 372 263 175 183 287 281 303 187 317 184 195 302 188 200 192
-232 232 174 184 269 249 225 204 238 174 370 203 250 186 120 282 169 153 273
-254 272 211 217 195 211 203 250 155 191 282 170 221 174 177 224 196 215 187
-154 286 176 186 174 211 166 198 145 297 222 270 120 101 191 183 155 222 236
-167 232 132 161 137 204 198 238 143 156 241 214 164 178 229 93 188 201 216
-132 221 160 190 122 164 241 131 196 218 154 239 190 302 156 190 203 186 213
-179 215 194 173 132 168 201 194 147 241 169 213 242 133 193 152 149 215 186
-222 193 159 167 190 156 115 212 129 234 151 170 145 92 197 218 142 250 159
-155 183 198 222 176 146 164 154 184 121 225 176 164 127 203 150 119 182 127
-163 254 168 180 173 144 154 168 181 168 202 152 190 140 155 232 202 124 231
-120 187 279 164 190 212 239 155 216 203 283 165 159 136 166 203 149 172 237
-187 211 251 113 133 219 151 216 147 175 111 197 203 172 138 137 135 164 224
-245 255 181 203 167 118 281 150 182 148 210 185 183 224 147 245 206 211 224
-328 214 175 262 153 243 227 160 238 194 152 247 116 232 189 195 170 153 211
-262 178 192 204 216 161 240 142 226 202 198 230 170 218 174 212 249 224 143
-206 252 160 175 177 236 243 282 252 205 241 163 258 179 161 338 191 259 232
-245 319 292 172 234 231 212 251 204 223 216 137 109 228 139 113 181 259 224
-155 227 154 330 271 247 235 186 242 236 200 193 294 179 200 222 171 169 382
-357 213 271 302 239 292 191 310 186 251 303 262 305 401 195 233 431 227 289
-257 274 227 321 213 318 340 173 164 244 307 180 261 427 284 262 301 278 458
-192 244 223 227 258 251 425 238 297 296 298 225 402 288 283 317 257 294 322
-407 426 358 312 276 428 324 315 346 359 306 257 304 283 299 288 319 336 303
-378 326 338 263 430 388 286 304 429 410 309 394 489 398 295 169 532 230 556
-422 336 307 348 407 397 570 390 357 325 324 322 284 320 285 217 576 291 257
-282 310 414 259 259 708 438 330 279 321 277 367 602 420 393 332 305 207 405
-329 389 475 349 400 407 371 713 470 453 491 363 389 468 311 537 361 366 433
-275 379 402 417 280 420 506 438 353 405 369 492 565 336 521 435 360 435 434
-454 642 440 330 404 382 570 306 436 509 445 436 566 732 471 332 344 276 334
-368 390 241 380 277 395 702 437 623 439 385 266 496 315 289 396 374 508 322
-310 385 480 483 365 824 530 554 460 577 402 260 278 693 361 687 450 431 262
-377 477 515 294 622 560 494 427 648 614 643 338 363 323 582 646 743 399 409
-351 334 453 215 302 464 405 414 381 673 426 294 504 377 354 587 378 414 501
-459 272 394 355 292 996 307 286 504 356 470 375 409 452 460 489 330 269 457
-388 443 365 280 420 506 669 302 847 211 428 279 287 293 322 590 254 305 342
-581 411 369 327 396 743 785 386 754 379 570 278 441 288 273 515 391 352 500
-429 464 401 348 397 524 596 324 917 451 543 395 698 640 333 405 664 431 477
-277 485 438 432 672 638 454 248 525 541 545 317 336 540 330 312 488 390 400
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-208 219 172 182 320 347 468 294 220 356 220 209 218 252 164 165 211 177 237
-121 285 177 194 295 327 400 214 172 276 168 223 236 118 175 165 320 155 285
-117 209 195 222 214 257 325 215 158 236 161 237 153 230 147 246 243 137 229
-117 237 186 204 213 227 300 251 226 183 196 166 162 181 140 149 149 198 187
-182 279 211 174 220 186 227 222 178 173 173 180 307 279 189 172 106 150 191
-153 172 240 187 224 239 199 172 230 222 160 184 194 238 226 212 124 164 150
-165 161 181 190 145 188 201 182 209 190 173 186 192 149 141 185 180 206 238
-126 111 212 179 202 205 187 213 207 155 125 82 134 176 152 267 150 183 171
-157 136 259 180 213 167 211 193 258 236 169 170 129 131 95 161 174 151 130
-180 133 122 130 159 179 176 132 115 128 159 136 168 209 161 142 152 171 129
-220 161 136 215 210 175 144 187 155 142 165 168 247 133 237 196 131 251 166
-168 86 168 235 159 165 153 131 91 187 136 166 197 139 253 109 228 144 103
-122 138 232 167 202 149 137 129 194 191 168 68 145 166 196 123 133 178 121
-123 154 208 171 107 121 172 122 162 108 117 131 126 160 137 164 207 176 96
-116 134 137 111 185 87 165 108 143 116 149 165 113 174 117 187 151 143 176
-137 147 134 88 208 94 149 111 151 123 229 131 172 93 160 86 150 167 135
-76 95 89 96 112 128 165 131 144 147 132 107 115 136 102 120 109 187 89
-95 106 162 135 129 98 172 99 119 150 134 89 131 132 159 96 98 154 126
-100 104 123 82 137 87 119 85 145 137 132 114 80 147 140 96 123 117 113
-87 109 86 70 99 86 87 128 100 139 225 138 97 96 96 109 57 94 86
-149 116 92 111 118 119 167 159 135 154 126 104 74 133 123 106 95 104 73
-108 127 99 65 132 174 156 129 84 82 155 99 91 95 131 127 94 118 90
-126 131 87 107 105 92 103 88 110 81 141 110 77 146 72 110 94 145 141
-146 94 97 104 97 83 136 89 149 96 156 91 89 98 136 183 56 168 128
-123 72 92 105 84 116 117 101 93 72 158 99 93 113 107 89 98 109 111
-127 58 114 110 139 68 162 174 97 121 256 88 114 121 119 98 53 150 115
-100 98 136 105 147 115 149 88 189 100 153 174 104 130 98 151 95 128 97
-149 119 102 101 97 95 108 124 145 96 144 123 74 104 118 156 82 103 149
-147 70 69 88 96 95 99 94 106 72 93 150 138 95 75 219 108 154 191
-166 107 139 151 89 194 115 108 162 87 90 104 93 138 94 114 106 143 136
-144 178 114 106 110 150 126 149 81 140 128 97 134 156 122 137 109 117 110
-145 111 142 163 174 118 156 156 150 153 116 110 102 92 142 112 148 156 136
-108 108 131 194 190 106 92 113 246 117 126 113 133 125 114 153 184 139 99
-75 106 123 139 267 162 164 158 226 141 133 211 118 133 291 99 100 142 214
-140 159 138 97 155 148 159 107 116 123 159 206 165 152 154 212 105 166 235
-132 157 184 166 170 161 238 225 128 94 100 171 128 162 226 218 149 203 197
-241 170 158 198 194 169 248 85 137 117 121 166 109 104 315 196 121 100 184
-169 216 225 162 282 143 185 172 144 133 106 159 84 165 248 191 115 188 189
-148 225 225 108 309 109 189 238 180 105 188 162 158 201 330 137 170 157 171
-155 219 148 159 112 139 189 158 158 168 142 178 255 193 216 163 93 139 204
-193 143 188 173 190 219 239 162 145 80 146 223 181 205 383 153 188 167 164
-156 127 139 191 190 110 148 138 139 194 296 132 165 221 373 137 148 166 196
-208 129 165 130 176 186 137 244 173 211 145 194 135 131 303 132 163 134 126
-259 172 237 130 207 184 160 142 135 310 156 159 168 231 261 208 133 179 267
-183 104 226 201 294 187 218 235 156 248 162 127 161 162 451 160 139 189 133
-238 232 236 237 256 198 90 192 263 452 178 177 176 217 166 123 293 167 156
-164 142 329 215 287 190 221 129 232 289 128 136 159 138 151 147 188 128 216
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-165 196 230 183 275 227 203 195 223 218 444 243 155 290 175 273 350 162 269
-195 283 268 225 473 221 224 205 219 184 341 225 173 222 187 226 260 186 263
-385 329 250 250 253 239 194 171 192 207 326 146 194 203 220 172 308 316 252
-136 278 377 225 200 201 330 256 244 265 227 253 282 258 257 263 274 387 163
-150 150 193 211 220 208 236 252 222 200 233 317 166 305 125 280 241 173 255
-243 316 197 170 263 212 253 283 147 159 260 211 200 276 173 115 182 232 104
-262 193 244 178 256 165 159 162 241 246 142 174 165 168 234 237 211 228 165
-166 158 172 267 307 159 208 206 154 139 219 196 203 200 219 215 248 187 174
-238 168 179 185 136 209 149 192 183 128 161 263 223 202 212 196 177 183 209
-178 172 200 145 196 168 117 258 287 201 159 189 131 248 213 188 156 194 207
-192 201 196 263 174 175 140 97 166 242 210 174 259 200 130 219 189 237 158
-171 167 181 215 142 143 151 182 211 192 172 239 245 205 171 133 143 146 193
-223 255 153 126 195 203 150 155 253 394 241 195 292 194 119 183 295 221 227
-104 266 244 259 172 214 135 184 273 163 302 232 217 175 149 198 211 162 161
-155 211 195 155 205 184 157 195 268 143 260 147 182 211 227 195 196 228 176
-210 155 203 283 244 186 227 180 192 215 222 236 219 207 239 151 150 164 211
-211 216 229 209 190 157 190 203 247 165 186 182 175 164 117 211 112 187 224
-229 197 200 172 255 162 221 212 200 219 184 209 217 186 324 146 185 214 162
-244 167 200 264 218 154 238 135 226 237 242 278 236 197 248 225 204 224 206
-235 166 230 268 306 187 290 301 217 134 367 233 177 353 224 164 288 203 186
-226 155 192 182 351 251 387 157 189 291 175 272 240 147 182 240 305 276 268
-202 266 224 146 332 225 308 298 236 275 263 384 336 297 195 303 302 289 328
-377 194 245 233 341 270 306 161 289 317 375 252 468 168 294 301 282 254 270
-373 350 320 383 407 419 284 230 232 246 240 420 307 253 181 269 234 203 291
-406 340 178 338 298 337 309 213 314 446 230 485 390 283 301 347 258 374 297
-519 358 312 333 289 255 400 232 386 254 385 271 419 239 170 333 376 384 314
-437 420 438 343 271 318 322 440 357 376 259 417 252 495 308 512 326 507 220
-342 290 276 386 314 367 398 317 349 361 604 408 283 489 314 260 402 251 346
-346 497 179 469 416 441 412 452 330 365 387 261 573 283 381 623 366 403 373
-367 418 286 323 457 520 366 452 386 366 345 459 491 365 563 397 278 332 285
-645 403 466 628 428 408 643 556 375 397 362 481 539 632 298 659 338 529 382
-445 468 299 622 333 638 356 564 474 577 344 374 506 412 478 577 276 359 293
-442 504 533 458 418 528 601 401 409 692 741 528 689 418 616 386 349 604 483
-630 450 435 388 510 500 636 517 512 561 367 628 686 476 516 578 608 451 575
-498 323 520 623 489 397 503 434 562 549 760 729 581 429 536 739 463 446 367
-421 547 256 329 346 582 546 420 427 429 343 414 854 515 457 477 599 411 452
-607 447 381 558 389 443 411 449 426 484 746 501 249 564 386 486 329 487 524
-665 444 354 401 574 465 427 509 509 430 604 425 560 447 634 814 282 551 528
-653 510 474 543 547 553 629 456 434 475 624 435 661 313 369 472 526 378 608
-381 627 381 412 446 309 518 365 467 401 465 530 480 308 498 445 442 322 375
-581 477 496 684 506 474 385 475 220 375 518 428 411 375 423 484 310 367 448
-397 509 326 506 305 447 271 415 322 403 587 411 389 274 282 304 358 311 558
-322 441 302 508 232 256 368 402 411 448 726 315 503 377 311 540 386 376 709
-330 391 451 408 358 410 395 520 358 478 517 391 291 264 311 489 439 270 707
-652 352 448 323 362 453 259 272 361 302 565 348 505 434 281 487 306 323 298
-366 426 290 365 334 368 250 255 418 223 333 368 502 200 535 565 442 298 218
-371 374 324 379 302 365 426 449 225 381 393 358 298 381 312 439 467 350 337
-553 302 393 276 269 286 313 215 215 320 417 308 494 282 363 511 516 229 276
-472 265 641 434 386 378 244 421 316 378 304 424 306 213 297 597 302 335 297
-366 311 253 556 458 435 296 354 234 451 224 229 414 213 300 275 240 410 302
-306 470 325 323 244 396 358 269 304 520 271 251 360 237 460 289 262 244 245
-451 269 265 249 355 517 239 302 389 213 254 304 323 392 238 361 361 363 291
-297 349 310 458 365 244 275 293 224 450 383 357 409 351 166 209 441 329 244
-312 314 230 533 217 393 348 367 335 625 332 319 418 397 344 380 268 255 334
-332 218 302 560 272 260 285 484 224 384 279 358 528 346 289 360 318 445 251
-317 235 428 735 390 319 392 464 298 440 323 280 475 532 297 226 462 246 300
-302 384 529 969 308 406 550 611 378 440 420 456 949 599 375 322 393 572 305
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-629 508 330 538 275 357 318 295 419 511 217 409 536 480 421 258 286 589 245
-422 567 287 305 392 222 294 318 377 307 333 307 349 524 439 294 265 441 398
-514 418 346 469 353 323 288 260 445 246 198 459 255 649 241 319 296 434 291
-310 485 314 414 385 332 274 473 329 469 397 353 312 437 322 289 481 416 444
-401 371 392 288 237 331 339 257 363 488 435 386 229 574 460 413 236 347 280
-358 352 217 256 428 295 462 286 253 213 233 379 299 525 314 274 344 424 314
-402 244 295 254 371 373 334 318 285 418 231 334 208 530 247 206 432 346 251
-366 273 307 369 179 339 233 204 299 197 251 287 331 415 313 234 320 295 181
-328 460 240 234 376 223 325 249 239 313 237 190 279 449 440 412 403 265 436
-318 586 245 250 575 307 307 286 256 281 222 350 308 444 305 257 660 426 326
-262 208 332 259 329 306 209 283 436 259 262 233 331 250 241 253 520 360 332
-295 294 250 332 596 282 299 227 169 275 218 316 238 419 229 277 409 268 318
-345 291 207 335 308 300 391 357 313 537 365 273 262 183 274 307 321 401 228
-215 346 225 165 334 253 361 334 359 295 260 227 249 273 225 423 343 289 345
-301 222 310 208 277 187 278 382 241 197 312 430 198 378 316 452 380 255 244
-176 317 262 231 426 240 231 197 369 216 204 314 342 328 315 325 298 334 333
-155 258 453 150 425 315 254 280 250 393 278 470 216 279 379 304 454 431 177
-329 215 361 266 403 272 320 228 307 335 174 374 257 243 422 192 474 195 305
-270 272 305 191 291 199 217 216 346 240 224 126 251 169 377 331 345 206 266
-295 260 268 293 359 266 249 228 284 257 243 313 118 287 466 281 332 262 228
-234 240 174 293 334 262 202 297 188 293 207 191 193 246 315 203 223 278 342
-303 177 335 274 239 277 217 326 261 354 228 156 215 230 348 289 297 262 289
-245 197 218 367 375 250 151 245 269 345 125 223 181 335 292 299 268 215 231
-311 216 268 370 386 328 181 221 288 268 213 208 205 128 236 202 308 301 173
-221 267 209 227 302 161 265 243 227 363 261 322 296 225 246 190 357 312 163
-221 287 367 202 234 183 289 171 208 331 352 204 144 281 246 283 280 232 255
-177 221 166 260 345 262 221 98 120 262 257 218 298 334 223 199 343 251 432
-266 299 232 257 267 154 236 183 203 187 292 270 208 176 268 123 219 237 292
-243 324 132 286 225 275 246 197 138 252 201 231 247 240 246 187 178 252 186
-155 203 215 375 229 290 274 153 191 189 300 340 277 209 214 276 213 274 258
-167 198 251 269 154 197 187 232 193 189 215 281 254 196 239 304 256 203 246
-225 270 214 240 244 349 256 196 288 186 176 383 397 251 181 211 228 165 310
-161 255 148 339 212 270 248 245 266 285 209 498 342 201 230 200 218 317 203
-194 291 178 166 235 234 233 261 382 278 377 383 242 342 276 220 180 269 196
-225 274 225 230 223 240 175 195 216 205 328 321 224 295 169 216 189 295 207
-196 312 206 265 180 220 266 225 264 200 252 489 361 264 204 201 157 155 203
-367 227 350 219 279 246 215 189 340 211 231 431 271 278 236 268 236 241 206
-219 225 234 174 244 297 207 279 346 182 178 279 91 203 270 183 247 195 157
-271 327 222 317 248 259 257 274 387 168 306 211 292 408 208 268 157 212 221
-265 275 277 300 180 318 348 195 386 276 351 287 251 296 155 225 174 225 174
-238 200 225 286 427 193 201 200 286 232 416 318 325 347 288 268 225 278 147
-237 375 281 280 291 271 336 250 365 281 273 236 256 440 243 355 243 216 321
-255 347 230 309 320 307 289 350 413 222 170 262 530 409 262 210 364 241 389
-310 219 292 248 261 184 212 230 243 321 312 370 269 324 329 243 276 323 231
-217 187 301 326 392 326 266 218 503 289 299 267 295 287 392 217 434 334 334
-375 232 263 323 411 172 206 298 294 322 295 563 329 360 477 418 314 338 273
-268 255 256 191 387 340 228 319 276 502 282 287 296 313 336 318 526 218 357
-326 408 282 350 271 223 415 244 146 280 256 156 385 225 380 306 582 251 408
-384 444 221 385 208 390 311 176 459 439 291 604 199 284 276 293 396 388 530
-320 411 406 357 191 317 351 343 374 522 307 568 341 346 456 264 309 374 327
-334 341 297 338 425 354 238 512 188 484 375 327 249 515 564 353 570 344 333
-283 335 320 375 529 308 425 339 419 427 504 418 391 370 524 481 626 342 351
-370 288 202 405 357 484 326 462 427 377 341 268 544 264 387 323 492 363 282
-444 203 418 370 370 360 344 319 366 338 477 277 338 597 390 463 713 404 428
-301 399 445 363 317 325 452 457 510 426 340 236 494 689 556 306 411 570 274
-194 243 282 536 462 403 390 639 276 361 239 348 354 641 327 259 386 420 323
-527 443 285 506 467 404 327 472 366 384 447 548 426 693 477 602 415 503 433
-348 405 448 296 487 297 401 292 471 294 524 498 457 537 440 754 361 600 219
-433 328 711 458 314 341 289 457 356 345 384 503 270 626 497 538 367 521 415
-542 336 430 468 669 474 316 447 326 250 349 457 369 502 318 342 258 506 280
-427 293 515 667 375 274 371 541 370 357 387 458 312 599 285 396 382 475 416
-585 430 448 317 295 258 407 406 347 473 290 759 251 645 286 417 445 661 362
-541 419 468 332 367 402 457 483 412 307 206 430 395 533 277 261 372 494 343
-293 364 527 391 218 290 538 469 439 319 358 298 212 361 274 249 396 399 373
-475 348 424 337 320 378 502 362 263 356 407 341 347 395 233 320 287 391 394
-517 343 344 304 426 287 459 368 390 285 424 270 313 300 331 329 372 354 448
-226 376 291 314 436 341 578 323 358 323 388 324 321 329 297 351 348 462 325
-406 225 350 438 344 371 318 448 277 273 389 389 340 494 362 461 318 387 419
-468 392 185 174 326 395 349 377 224 280 343 282 484 494 477 242 341 359 355
-397 289 345 294 147 249 465 252 422 230 450 359 375 277 325 540 282 277 269
-336 385 373 300 248 181 324 263 263 301 374 435 403 371 467 163 487 349 427
-296 341 506 309 325 444 263 238 307 339 256 392 262 298 379 276 287 269 316
-306 420 204 312 193 349 269 390 203 418 304 250 443 613 359 389 384 398 265
-266 360 509 281 345 252 374 292 304 350 258 443 278 319 298 262 355 294 310
-354 285 577 364 342 280 390 506 415 211 326 429 428 306 407 158 323 406 332
-303 315 371 308 388 593 503 200 254 352 481 317 316 416 378 254 449 206 292
-260 461 364 253 274 363 482 376 284 219 303 402 306 233 413 446 284 366 395
-324 305 235 401 529 271 339 281 339 315 295 460 309 266 419 271 340 370 237
-388 413 408 380 404 297 438 352 305 322 367 306 356 278 363 261 416 575 305
-417 572 439 483 305 398 262 321 303 256 413 430 448 331 246 450 402 339 472
-282 639 444 427 332 273 659 264 404 423 350 350 439 341 200 295 466 393 356
-372 508 499 328 457 510 419 332 475 556 410 451 426 260 385 401 420 331 408
-463 411 461 439 273 584 569 405 496 430 670 456 476 409 343 445 601 218 436
-346 454 386 558 393 391 362 340 514 375 355 414 645 360 518 415 865 492 562
-653 585 636 419 450 447 537 714 515 481 376 387 403 356 434 395 479 493 402
-645 460 553 364 522 403 440 354 429 478 428 958 636 514 616 650 542 500 616
-833 549 802 653 479 513 506 467 540 756 539 564 349 610 548 523 598 468 608
-824 497 893 513 725 599 689 388 701 810 483 501 572 569 648 574 552 769 765
-594 624 692 1016 634 454 449 471 550 1144 786 445 701 406 535 622 738 577 777
-486 570 728 914 957 557 666 485 812 1093 828 935 906 474 557 873 787 680 762
-342 1010 679 615 950 524 532 434 533 1053 943 753 727 1003 587 620 924 763 1175
-921 731 489 859 993 879 777 649 486 868 839 616 653 586 736 503 752 884 751
-961 664 977 705 1148 1063 511 647 726 736 1140 719 770 609 661 861 680 897 847
-793 894 916 681 674 600 1334 581 971 703 979 835 1397 898 716 583 769 801 998
-751 835 1191 509 1249 918 1048 753 830 585 980 1478 910 644 824 1084 964 1015 890
-1355 956 811 651 910 716 1317 1277 558 642 816 1169 825 860 933 505 799 899 987
-664 809 880 641 780 1011 2068 928 688 755 1160 928 671 917 560 898 1065 815 614
-936 402 1650 1112 829 631 1620 1064 524 867 942 822 576 714 745 541 1138 728 1021
-1100 637 750 1018 659 725 1503 838 762 728 916 924 992 633 675 563 784 633 655
-882 485 1570 847 824 905 1021 797 1053 999 629 813 724 1113 564 792 539 682 507
-1376 643 905 946 653 762 781 710 828 632 380 719 510 744 615 442 403 779 566
-1156 551 999 673 726 644 1186 514 550 985 787 538 696 623 788 590 455 845 489
-665 408 841 804 723 616 554 586 770 1158 503 422 522 589 611 582 445 715 551
-725 727 754 424 719 589 558 726 563 976 502 584 512 443 595 668 444 815 580
-649 834 716 642 484 487 485 378 879 1367 508 1114 366 420 643 542 784 940 756
-722 783 981 395 591 423 854 425 901 907 711 864 670 629 601 600 532 1115 489
-877 737 476 837 452 520 624 592 834 676 549 1053 566 611 440 1184 574 1442 763
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-756 440 461 865 289 653 523 922 447 552 476 651 885 432 756 468 476 432 479
-652 314 379 426 446 516 464 797 470 315 370 834 738 461 535 514 648 471 513
-508 497 585 438 452 547 342 648 413 680 531 526 538 538 366 658 414 475 470
-504 399 461 450 604 590 607 569 343 395 330 396 529 385 338 429 400 404 497
-621 547 242 470 736 435 471 299 563 641 524 600 304 416 504 456 299 524 406
-513 495 350 530 518 389 440 569 487 378 284 479 224 414 418 586 318 450 466
-519 479 368 429 595 298 331 373 599 513 405 202 345 612 503 745 263 518 427
-725 385 418 469 485 454 454 345 452 421 313 303 281 423 482 551 454 444 221
-613 528 388 401 381 413 419 493 414 360 468 452 316 355 363 545 461 424 492
-550 424 328 309 381 317 422 460 409 360 581 453 346 335 569 349 522 449 362
-411 435 319 297 301 381 454 389 593 431 423 351 325 447 222 550 441 635 361
-511 414 281 383 473 528 389 338 340 211 511 269 457 554 462 353 375 644 423
-414 543 226 387 412 518 284 328 320 450 362 441 362 382 578 404 442 507 310
-483 263 492 399 533 419 415 475 430 473 537 410 273 459 214 655 277 465 385
-481 464 433 529 297 354 308 371 608 456 458 390 380 362 760 585 394 455 498
-363 512 310 319 431 317 430 481 491 278 522 371 523 353 336 478 554 357 351
-334 382 256 373 371 419 384 535 555 402 521 491 395 366 434 509 288 368 687
-271 393 360 431 448 344 535 371 231 403 307 371 326 402 356 515 368 461 607
-441 343 253 404 409 337 413 482 420 427 335 310 519 566 353 479 492 434 435
-483 381 461 439 357 463 358 387 242 339 425 425 564 475 340 561 570 454 528
-545 332 403 675 410 252 565 571 590 467 392 387 382 329 394 739 463 416 454
-490 384 351 348 450 239 549 327 391 428 435 317 448 462 281 529 613 388 445
-297 418 263 291 325 595 534 385 346 245 452 415 389 433 316 823 723 503 469
-383 448 412 393 378 469 593 389 253 375 397 270 402 402 382 560 484 432 256
-398 364 544 488 280 400 588 451 308 367 558 367 240 354 404 497 805 475 329
-295 343 330 351 526 374 373 389 205 401 459 567 231 307 216 260 646 328 328
-436 321 356 167 243 443 351 166 354 306 386 517 288 581 406 390 564 307 460
-432 455 466 442 366 456 493 263 421 321 538 428 534 309 399 484 450 278 398
-349 392 406 336 401 313 283 166 450 345 342 431 390 382 294 441 534 509 351
-358 295 373 262 406 301 176 154 359 295 396 379 388 316 268 299 422 457 279
-386 363 391 271 364 416 344 284 579 301 452 546 237 305 559 351 423 248 535
-333 507 534 408 364 314 437 343 225 310 323 390 445 358 409 321 376 311 282
-357 269 438 267 292 359 306 359 346 282 371 316 328 393 242 415 308 335 262
-252 232 326 241 676 297 242 276 360 392 562 274 324 220 348 194 317 351 343
-201 285 250 539 542 435 322 241 313 366 387 304 534 376 310 359 275 375 335
-488 337 506 309 710 359 253 244 306 275 173 333 358 503 332 478 323 593 318
-447 355 250 487 524 363 395 228 323 361 306 259 547 331 467 232 485 560 423
-365 329 285 383 593 504 351 261 343 302 456 289 413 380 281 392 357 445 445
-264 393 374 390 560 442 403 242 373 294 401 319 489 325 634 257 348 508 326
-478 325 353 519 502 316 373 498 396 377 193 391 374 568 458 421 364 368 256
-500 673 421 501 813 466 177 248 585 357 287 434 417 370 500 455 368 395 394
-377 506 416 403 452 430 402 339 384 384 402 327 442 242 391 634 332 197 322
-510 333 379 454 386 307 216 294 297 396 369 290 295 233 408 440 338 439 472
-283 373 336 330 329 245 483 301 312 455 303 271 291 344 627 684 368 298 380
-299 599 381 431 417 351 514 331 261 360 328 393 278 499 456 768 266 313 288
-274 238 258 423 309 387 304 262 423 374 520 403 296 598 339 425 281 316 328
-322 321 394 409 259 373 420 223 432 382 405 460 422 367 222 412 431 337 329
-484 374 249 382 405 389 352 329 340 307 385 358 357 572 435 563 335 492 330
-261 290 427 307 331 248 516 386 367 440 354 478 257 338 514 424 322 410 391
-413 636 477 318 307 379 451 271 284 437 323 431 381 556 603 406 271 299 330
-292 482 469 313 396 270 527 255 390 499 449 606 316 357 554 548 568 511 500
-486 359 426 336 359 383 442 287 323 391 515 628 307 414 327 237 467 378 530
-569 349 340 468 449 376 474 442 557 519 387 335 339 657 665 496 425 354 424
-326 542 401 449 439 344 514 656 468 526 360 472 287 676 524 325 490 358 478
-570 541 535 413 379 397 553 346 570 459 509 489 429 596 433 335 518 338 684
-336 482 582 355 446 517 563 531 490 305 478 484 483 761 673 382 436 658 298
-854 715 697 405 698 562 407 757 450 417 356 465 607 729 497 689 677 509 946
-570 1145 583 217 740 437 391 661 601 453 483 645 759 754 510 632 616 465 622
-828 738 633 738 439 560 628 621 526 784 750 751 1036 623 721 644 357 825 591
-862 784 710 625 797 721 629 986 786 553 553 529 979 922 573 664 523 620 396
-505 1001 817 719 881 1304 576 1336 878 771 524 925 835 866 703 558 723 1130 802
-867 1030 972 946 989 928 974 1248 561 774 729 581 860 822 724 671 987 739 513
-970 1109 825 983 1024 807 929 1243 1095 683 871 705 786 763 590 741 1087 718 565
-773 1028 816 424 1105 737 929 1503 794 1040 880 1330 1130 1210 973 857 1047 651 734
-1323 957 1228 1102 1185 810 986 1197 977 1193 970 1104 1402 1570 1714 1543 1012 1528 1014
-1041 1582 885 802 890 969 1001 850 1234 1340 918 1154 1233 840 1169 1111 1047 906 1096
-923 775 1312 1263 1467 1434 850 1869 1363 1149 900 920 1254 1216 1150 906 907 933 1214
-1488 915 1189 1071 2155 1584 1284 1914 1524 1699 922 1265 716 1506 1006 1466 993 1141 1239
-2757 1302 1597 865 1812 995 1494 2357 1540 1811 1354 1203 1515 976 732 1685 1777 1209 1779
-2105 1542 1018 900 1175 1125 1305 1610 1240 1115 1003 1946 1177 1253 1200 1494 1454 1669 1689
-1973 1004 1616 1666 1304 1043 1500 1032 1944 1129 1423 1289 986 1087 1074 1422 1331 1046 1396
-964 929 1481 907 943 1090 1035 1408 1883 964 1357 1704 912 1245 868 818 898 1951 1461
-1509 1475 1411 1355 1446 812 908 1019 1644 1301 1211 837 1569 1847 1610 1432 1398 1610 1636
-1058 1267 1004 693 1098 747 1010 1466 1053 978 931 1115 600 1606 942 1214 1546 1619 774
-1089 1711 1301 982 833 882 891 1301 1319 1455 1230 889 1318 896 1253 2997 953 913 1062
-749 1562 782 555 1049 728 685 1088 1037 720 702 804 757 1240 810 1013 1159 1301 869
-992 1459 888 894 776 865 1067 1431 1327 860 1065 1005 923 884 587 1766 1217 1023 1170
-1003 1223 1345 856 1068 680 654 808 1809 1161 788 937 1247 880 1312 2388 846 1064 718
-1156 1800 909 908 918 1085 1000 1400 693 925 734 1131 1427 765 1183 1867 1205 966 758
-1120 1166 806 944 1200 1213 676 776 957 1033 695 941 1065 538 1137 1316 816 872 672
-1045 1558 1094 741 477 1032 836 1130 891 858 992 906 943 757 1462 2088 1405 990 748
-1043 1003 629 1078 572 873 401 765 898 494 1095 1086 1137 1171 1358 1278 637 1259 691
-845 1712 1456 764 1026 801 907 1054 559 697 961 676 791 901 934 1639 1116 803 685
-790 1130 1404 701 571 531 1203 824 1162 1035 914 968 944 859 919 835 984 421 795
-763 1004 1110 1419 941 486 1489 699 1167 1061 1059 1531 632 616 929 1443 933 710 773
-933 765 898 801 805 1086 890 664 1522 1050 806 1169 855 799 1186 1465 1045 1135 773
-1137 1073 643 526 853 659 851 856 2470 1266 1010 1268 459 528 824 958 1190 459 847
-602 832 696 650 1640 836 829 884 1978 1175 677 1231 1178 648 1209 1117 1063 605 957
-1208 657 1074 733 867 800 1375 1161 1411 1009 985 1158 888 675 985 756 1059 982 1173
-1175 765 1178 766 562 658 1186 1200 1475 638 858 1093 825 527 1031 949 1173 754 1228
-1107 1111 825 445 804 1102 1486 1001 1358 745 885 1110 780 841 1283 803 1598 773 934
-1357 1103 677 882 834 1035 1311 1105 1822 1009 1206 1515 1126 1088 1210 747 516 536 1173
-997 1002 893 1248 1056 1003 1430 647 1160 959 1378 1016 667 847 1356 1003 1237 915 1297
-795 751 950 1114 1435 948 799 1509 1273 1109 1006 1449 616 592 989 829 810 1314 1568
-912 1233 834 1078 1513 1212 987 1061 1636 1648 1756 1170 686 1143 737 674 1175 755 1861
-1101 857 744 1460 1306 1402 938 949 1298 1042 1447 1473 830 1091 1076 797 1918 765 1782
-1030 1136 1012 1188 1183 1436 684 917 1038 2045 1849 1346 984 1238 872 1071 699 1140 2277
-1117 1022 961 1318 1541 1013 1277 1031 1290 1117 1343 1117 1322 1053 1752 685 1263 615 1862
-1896 1265 898 1703 1023 1757 1255 990 1150 1470 1067 1196 763 1193 865 1198 1217 1195 1896
-1504 1253 871 1168 1202 1016 1534 1134 1004 1465 1558 703 1212 1156 1584 1654 1410 921 1430
-1642 936 876 604 1137 1698 1492 1080 1422 1497 917 1299 1417 1017 1662 1923 1516 1144 1945
-1879 1350 1088 1104 1253 913 1742 1101 1171 1307 1006 834 1639 1593 1006 1433 1792 1320 1698
-1325 1337 1186 1708 1241 1423 1419 949 1049 1245 1625 1766 817 1107 1550 1367 922 1350 1456
-2029 876 898 1137 928 1547 1147 804 2220 1490 1446 1509 1281 1028 2125 1550 1298 1302 1594
-2035 885 1443 1290 963 1897 1547 1201 1174 1139 1132 1561 1148 1148 1137 1756 1360 1437 955
-1214 1123 1202 1028 1486 2376 1677 1486 1594 1394 2198 2065 926 1521 984 1401 1040 1030 993
-1540 1597 1046 1575 1623 2277 1273 1386 1114 1146 1729 2158 1488 1459 1478 1419 1491 1017 973
-1289 1046 993 1436 1024 1552 1589 1184 1948 1534 1379 1931 1611 1469 1285 1652 1513 1368 1066
-1273 2234 1899 1198 1552 2536 1928 974 2376 1144 2127 2338 1800 1395 1193 1298 1672 1324 1341
-2011 1593 1426 886 987 2317 1458 1558 1148 1063 997 2307 1695 1286 1373 1337 1111 888 1155
-2952 2374 1417 1355 1372 1861 2016 2065 2281 1272 1823 1363 1362 1467 1530 1923 2118 2824 1404
-1876 1690 2705 1429 1350 1668 1679 1277 2156 1354 2255 1153 1110 1608 1989 1733 1217 1238 1992
-1520 1513 1763 1699 1266 3100 2013 1616 1579 2425 3133 2179 1415 1263 1494 2249 2053 1493 1870
-2671 1638 1906 2224 2602 2090 1501 1523 1721 1419 2625 2034 1929 2164 1947 1736 1466 1640 1742
-2505 2097 1779 2258 2076 2384 2601 1506 1280 2172 2362 2204 1620 1883 1911 2604 1229 1317 2904
-2582 2022 3090 1389 2264 2334 2596 2485 3231 2184 1941 2323 1706 1896 3153 1684 2268 1611 1290
-2270 1699 1632 2693 2641 1217 3348 2533 2579 2484 2245 2999 1699 2816 1727 1650 2386 2762 3322
-4203 2576 1603 1962 2679 1947 3101 1834 4258 3374 4038 1953 2117 3105 3088 2267 3387 1227 1774
-1734 2668 3449 2309 2698 1755 2079 3247 3436 3413 2924 1977 1616 2721 3815 2580 2831 1952 3106
-4671 2114 2861 2908 2502 2051 3037 3542 3817 2386 2240 3400 2904 3198 3721 2626 4357 2472 2662
-4636 2707 1824 3581 2402 2840 2472 4754 3206 2379 3196 2894 1775 4099 4351 2836 2373 1988 3363
-4058 2187 1462 2907 3799 2944 2653 4001 4031 1650 4892 2510 2156 2919 4687 2640 2693 3092 2068
-5997 2281 2919 2416 2514 2327 2788 4311 4993 2640 3165 3379 3578 3556 6210 2665 2801 1872 3051
-5440 2371 2631 4517 4716 2766 3012 5607 6289 2388 4258 3733 4110 3666 4350 3009 2823 4036 2416
-4706 3080 2545 4180 4410 3285 5943 4124 5028 2025 6659 5341 3211 2398 6597 4049 2737 3626 2863
-6087 2645 2793 3462 4442 2046 5975 8683 4463 3166 3394 3909 5054 3408 5327 2647 2058 4593 3185
-2958 2458 2719 3044 2651 3988 5002 2752 4865 4107 4254 4235 5209 2130 4384 4192 3925 3661 5509
-3709 3561 2677 3235 3464 2683 6645 4579 4707 3350 4268 2942 3830 2868 4857 3691 3614 3757 4468
-8421 2507 4684 3375 2945 4601 6182 5211 2411 3937 5358 1845 6455 3729 4293 3854 3502 5559 5289
-3991 5201 1772 4058 5451 3206 10173 6484 4430 3481 7675 3476 3928 2627 5688 4721 2999 5589 8435
-4029 8684 3865 3910 10836 3698 11909 5803 3681 4601 4634 3088 7504 3109 7085 4116 3809 5631 5646
-7874 6420 4846 4318 4538 4382 10447 6213 4102 6291 4133 3822 5057 3187 9399 3822 2693 6731 5914
-6322 6166 4579 6102 3854 6057 6428 7390 3930 7620 3949 3882 9679 2929 7526 5381 1744 5642 5382
-6520 7710 3150 6791 4933 3916 10072 8997 3011 9287 2691 3235 9035 4431 7313 3865 4025 3208 5407
-7618 10714 3647 3976 5507 5797 10864 8807 5123 10125 3738 5348 10748 4198 5403 4288 4466 3350 5246
-6478 9985 5184 4786 4341 8161 12110 3313 3221 11240 2832 4448 7425 4321 5754 7416 3080 4002 3595
-6727 18505 3377 4143 6053 7110 8199 5992 3824 8645 3094 6231 5118 6186 5053 4688 4621 5272 3825
-6769 17167 4984 5410 4273 11405 9122 5878 5712 6269 4995 6744 8105 5009 6069 9196 3312 5334 3142
-7835 11028 4589 5686 5426 7741 11473 4557 4201 9480 3247 4642 7913 3710 3903 9969 5286 4568 3956
-10900 8648 4828 5834 5135 10620 23078 5013 4175 5449 3043 3287 7434 4086 5117 11736 5977 6669 3785
-8542 13586 5411 6652 4268 12278 16408 5508 4486 6655 5404 5380 8903 6283 6191 16499 10666 8214 5683
-8064 19203 6079 6329 5745 13609 13662 4627 3883 9989 4541 7121 10370 3394 5112 14510 18814 8047 3697
-7548 10990 8358 13190 4698 14356 16581 5834 5321 5798 5738 3446 18468 6976 9225 9427 17150 10512 8091
-7737 12622 10282 11069 7041 17533 17584 6165 5120 7858 4422 5011 14027 8017 8008 14150 21019 4674 6098
-12365 12172 12606 15399 7452 16862 14526 13416 3738 11724 4271 4437 27642 9707 12820 12403 14584 8627 8407
-9511 19313 11950 10479 9833 9602 18695 10801 3397 42089 8143 7239 63458 15273 23275 7133 20917 8833 3951
-13042 15449 12817 8595 8450 6171 22254 7277 3831 85520 9479 5564 100203 16822 31061 10466 31112 10291 9820
-15211 17754 13614 9442 9190 7946 21822 8710 5337 201847 10156 7479 127774 12990 87434 5114 20394 10997 16759
-8484 17414 17805 5899 11718 4335 11890 9791 8157 252974 9582 7600 120326 29539 116669 7761 25509 5889 9975
-12847 18129 28133 7517 33139 6929 12453 8313 11141 136927 9153 7536 189210 24181 103221 7298 30036 11803 25797
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-6864 25392 5000 21925 8636 17550 12703 69407 9518 5349 6350 17167 15936 51272 6829 7595 10077 8747 6321
-5642 16572 5714 23642 7810 12904 13174 39255 10300 6106 9014 23618 14573 62342 10433 5623 10504 6327 10138
-6635 23510 11147 11083 8388 12074 20996 21212 9219 4723 4689 30598 13750 13451 9956 7474 7957 8860 12045
-6101 19587 9168 12097 7933 9969 12927 10667 6883 5675 7518 17555 10626 8129 7459 4602 8338 4578 14926
-3272 14360 11592 6020 4555 3913 10029 7926 3909 5805 3920 15143 4698 9838 8717 3832 9252 6269 8509
-5202 12529 11345 6037 3632 6432 8264 3445 5957 5482 4935 13323 7371 5523 6714 2666 8546 4434 7914
-6521 8695 10047 5271 6759 6470 8052 4073 5940 5928 4531 10679 6334 3429 5055 4101 12889 3628 10046
-3704 8043 8188 3707 4602 5491 8940 3843 4227 3587 3786 6391 6217 4003 5360 3142 9668 5743 7970
-4021 9268 12901 8300 3259 3538 4527 1712 4289 3426 5649 4835 4476 4445 9328 2372 7773 2707 4922
-3361 8204 6993 6699 4088 4089 3873 2262 3585 3030 2908 5695 3683 4065 5401 3172 8659 5271 5438
-5451 5030 4659 8068 4725 2503 3743 3027 5305 3177 4926 3452 4341 3133 4359 2809 6080 3840 4824
-2210 2689 3578 6944 3055 2191 4092 2532 2953 2818 5344 3076 2428 2766 6763 3116 4794 4130 6751
-2537 2056 2738 8753 2635 2680 5131 1968 3039 3596 4158 2488 2496 3148 4186 2448 4587 2475 8480
-1646 3860 2037 4567 2764 2759 4362 4634 2454 2108 2906 1915 2932 2509 7679 2302 3873 2683 4948
-2768 4790 2268 2346 3153 2059 3625 2328 3244 4031 3483 2117 2376 2190 6887 1965 5170 2311 4924
-2580 4547 1915 3084 2991 2230 1930 3205 3509 2135 2386 2923 3047 2051 8182 2632 3621 3081 3418
-2255 3920 2942 3357 2420 1721 2024 1798 2102 3431 2371 2504 3271 1791 5003 3514 4101 2321 2417
-2097 3924 2052 3946 3208 2047 3497 2232 4058 2377 2492 4166 1708 1790 5279 2291 3177 2500 2932
-2017 3764 2885 2655 3678 1588 3157 4268 3167 2325 2683 3367 3564 1906 3924 4745 3462 2441 2612
-2396 3309 1842 2641 2216 1607 3097 1847 4299 1374 2376 3667 3076 2932 2926 3774 5770 2482 2619
-3244 3634 2313 3441 3486 2383 3263 3442 4988 2887 1932 3512 1206 1578 3419 4609 4318 2659 1494
-3160 2887 2282 2615 3636 2505 3467 2931 5402 1811 2009 4998 1794 1920 3193 2688 2830 2505 2543
-2762 2558 3120 2591 2432 2672 4733 2417 4371 1627 3319 3065 2109 2327 2449 3086 3494 2391 2473
-3007 3145 1789 2314 4487 2333 3843 4331 4045 1267 2950 3406 2525 3218 1985 2433 3062 2801 2320
-4255 2980 2989 2443 2430 2185 5137 3645 3425 2190 4175 5013 2169 2662 1674 2208 2181 2662 2057
-3607 2356 3616 2485 3195 3181 3822 3111 2954 1916 4062 3008 2656 1760 2184 2033 2514 2388 3230
-3875 1443 3751 3886 1939 2422 3829 4579 1995 2160 3430 3270 1260 2244 1745 1757 2294 2474 2178
-5995 2748 3615 2251 4694 3274 3490 4560 1501 1497 3010 1403 2995 5199 2091 2368 2063 2387 2328
-3941 2549 3835 3115 3780 2430 2926 5165 2585 2250 5981 2445 2142 4209 1858 1498 1954 2817 3722
-3717 1820 2801 2605 2139 2628 3747 4343 2464 3797 5141 2442 2105 2908 2295 1947 2656 3055 4132
-4112 2254 3905 2709 2158 2321 2771 5671 2263 2656 3334 2531 2079 1874 2101 1474 2473 1757 3512
-4553 2120 2020 3111 2133 2728 2761 6325 3100 2474 4729 2960 3153 3109 2754 2237 2003 1658 3773
-2860 1678 1883 3068 3166 2168 3737 6227 3233 3606 3458 3601 3093 3551 2989 1977 3131 2636 2695
-3847 2040 2042 4377 2735 1905 2901 4660 1863 3109 3651 3514 2818 5353 2434 2053 3868 3612 2731
-2919 3091 3482 5269 2346 1419 3701 6845 2221 2426 2447 2783 3465 3092 1905 2202 2486 2671 3568
-3058 2629 3066 4223 2147 2489 3395 4587 1770 1892 4237 4769 3288 4100 3251 3004 2633 4287 1438
-2685 4267 4833 4429 3042 2124 3768 8687 3042 3163 1744 3312 2488 4038 2800 1495 3007 3704 2414
-2527 1737 4861 3728 1252 2669 3303 3440 1877 3253 3421 2346 4159 4378 1806 2384 2321 1891 2951
-2498 1315 3814 4991 1865 2950 2501 6183 2305 2053 3002 2066 3882 2629 4362 2011 3122 2344 2054
-2359 2811 3055 4603 1623 1231 2609 4913 1771 3023 3548 4119 2437 2453 2749 1882 2542 4112 2631
-3835 3138 3248 2702 1403 956 1795 3440 2418 4197 3610 2732 3382 4134 3683 2668 3297 2867 2927
-2528 2116 2014 3604 3240 2141 2645 3595 2524 3093 3562 2043 3443 2305 2248 2952 2220 3192 3041
-2369 3722 2472 2499 2668 1613 1650 2345 3075 2633 3441 2381 2419 4740 3288 1933 2285 2584 2634
-2192 3914 1890 2790 2335 1558 2374 2494 2051 3471 2855 1597 1822 2982 3291 2290 2207 4269 4581
-2487 3737 3459 1409 2626 1893 2338 2181 1597 3696 3482 1886 2547 4221 2629 2648 2402 3837 2016
-1477 3235 2678 1543 2240 1800 1273 2506 2413 2886 2644 1728 2704 3471 2569 1667 2408 4017 2133
-1676 4001 1471 1350 1788 2500 2534 2326 2304 2529 1984 2240 1150 2552 2389 1918 2191 3819 1701
-1906 1790 1316 2399 2225 2473 1830 1871 1669 2746 2903 2415 2253 3741 2030 1829 1732 5105 1209
-1504 2524 2231 3331 1945 2655 2046 2332 2434 1468 2056 3365 2779 2868 1828 1403 1527 4084 2196
-786 3872 1802 1374 2829 1770 2537 2061 2333 2077 1512 2348 1432 2513 2239 2069 2209 4153 2254
-1676 1889 1614 2114 1604 2115 2701 1952 2205 1839 1232 1625 2733 3344 2677 1896 2310 4482 1687
-1549 2767 1465 1695 1492 2240 1753 1990 1755 1967 1503 1293 1632 1837 2437 941 1768 3922 1866
-2599 1690 1546 1373 1767 1268 3081 1891 1716 3073 1830 1193 2252 2000 2552 2289 3279 1657 1397
-1914 1251 1382 1686 1155 1594 2664 1689 1830 1576 1189 1157 1634 1140 2375 1242 1458 1607 1438
-1963 2175 886 1817 1690 1436 1910 1964 3057 3692 1418 1646 1304 1053 1563 1084 1465 1484 1589
-1644 2888 1333 2105 1964 1143 2590 1720 1393 3093 1020 1138 1611 1572 2115 1271 2539 1978 1481
-1834 1843 1834 1551 1750 1566 2636 1530 1514 3040 1439 1491 1384 1716 2198 2351 1896 1891 1605
-2017 1682 1063 1344 1249 1892 2082 1425 1903 2127 1496 1768 1683 1207 2041 2093 1491 1759 1412
-1680 1193 1517 1284 1634 1653 1891 1557 1322 4185 1068 1563 1447 2258 1440 1246 1646 1894 1701
-1615 1617 1603 972 1317 2256 1591 1245 2039 2392 1449 1343 1379 1488 1113 3965 879 1144 1026
-1836 1130 1653 1335 1242 1847 2184 1236 1382 2381 1383 1491 1376 1333 1177 4414 1259 1293 1682
-1338 682 1897 1074 1347 2083 1775 1980 1137 1440 1634 1102 931 1317 1192 3538 1147 1402 1363
-1707 1207 2048 1527 1469 1418 1094 2395 2040 2250 1384 774 1400 707 1421 2088 1425 1585 864
-1157 1082 1508 1241 1300 2004 1441 2054 1361 1150 1181 1041 1413 1619 1438 2252 908 953 1145
-1244 957 1358 1512 1335 1655 713 2447 1510 1264 1363 988 1141 1772 1805 1400 1000 1412 1358
-1404 1063 1152 1444 1346 1879 1297 1965 963 919 977 995 1413 1949 1799 1559 1101 1675 1093
-1705 653 1162 866 1250 662 1029 1488 1697 956 1242 784 1305 1899 1426 1190 827 1264 1435
-704 924 1403 1312 1477 1402 1288 2323 1954 1114 1219 940 810 1592 2155 1588 842 1084 1303
-711 1446 936 1407 1772 1096 1015 1836 1599 1263 1431 1333 913 2038 1618 1694 913 1249 1242
-1466 1658 1244 1349 1066 787 1590 2218 1402 1033 1174 674 1307 2131 2421 1115 894 1321 1772
-1496 1514 892 2287 1105 878 1640 1346 1684 1219 1093 1139 843 1335 1752 1708 901 1187 771
-1516 779 1080 1767 680 1153 1560 1870 1514 962 1052 1436 1062 1238 1496 802 1268 1194 1350
-1179 1097 913 1449 1098 835 1579 1902 1453 923 1180 1129 1245 1537 2596 1293 1053 1744 1065
-975 1754 837 2431 1183 1129 1218 1337 688 981 1636 1185 979 1552 1880 1124 1575 1833 737
-1279 977 1220 1163 1272 1398 1499 1394 1139 1213 952 1402 1316 1178 1809 1470 1493 1611 1204
-1804 1152 885 1719 985 1003 603 1304 1022 1204 1231 833 1296 1367 1737 1427 1785 856 1033
-947 1059 1052 1027 1105 1313 1870 865 1782 1951 1136 1357 1534 1515 1318 1314 1071 992 1085
-1602 1171 1284 963 1403 1441 1262 1910 1455 1123 1344 1397 1484 2385 1410 1218 1328 1895 1669
-1435 1258 1624 2478 1117 1332 2222 1192 1475 2075 1034 2092 1666 2654 1081 965 1128 1901 1112
-1147 1643 983 1917 953 1469 1533 1466 1181 1236 1246 1808 1081 1063 1811 1620 1315 1388 1518
-1853 1590 1315 783 1332 1010 1295 1136 1348 1375 1689 2890 1419 1421 1739 1080 1537 1941 1264
-1300 1535 1199 944 1271 1662 2171 1178 939 1561 1453 1864 1420 1050 1668 1815 1218 1717 1446
-1981 1404 1877 1527 1211 1559 1847 1192 1665 1179 2145 2436 1671 1285 1488 1167 1200 1605 1717
-1676 1834 1344 1589 1270 1018 1602 1187 1221 1197 2172 1052 1391 1250 2374 1318 1787 1013 1578
-1127 1725 1494 1566 1222 1842 1518 1395 1417 892 1243 1870 1525 1382 1190 2288 1087 1666 1603
-1693 2882 1617 1601 1326 1491 2161 1770 1655 1965 1527 1279 1794 1985 2630 2849 1762 2302 1391
-1265 2316 1449 1066 1860 1382 2242 1601 1589 1180 1437 1044 2206 1651 1477 2619 2040 2307 1453
-2416 2392 1765 2314 1595 1133 2470 1312 1700 1424 1865 968 1544 1540 1408 3545 1770 3423 2978
-2053 2099 2934 947 979 1247 1651 2460 1952 1630 1724 1252 2026 1925 2335 4091 1788 1668 1504
-2050 2115 1674 1999 1131 1420 3021 1761 2508 1960 1834 1481 3088 1530 1629 5473 1973 1998 2144
-1954 1843 1001 1364 1107 1729 1979 1552 1646 1509 1475 1498 1365 1233 1322 3524 2171 1665 1362
-2199 2480 1627 2027 1924 1704 2777 2618 1141 1611 1412 1269 1430 1813 1588 3756 1819 1369 1622
-1530 4327 1976 1761 1767 1359 2538 1713 1884 1447 1570 1585 1288 2397 2024 3578 2196 918 1585
-1494 1491 1507 2177 1009 1734 1798 1541 1803 1792 1148 1550 1430 1119 1416 2469 1757 1387 1583
-1100 2538 1959 1947 1669 1894 1182 1151 1353 1199 1813 1048 1515 1456 1541 3206 1889 1335 1863
-1351 1838 1771 2708 1960 1481 1533 979 1391 1469 1936 934 2059 1459 1259 1923 2815 1883 1220
-1587 2243 1016 1831 1918 2069 1418 1921 1280 887 1562 2358 1584 1093 1537 2421 1680 1528 1933
-841 1579 1167 1564 1242 2338 1745 1228 1025 1135 1591 1618 1601 1255 1785 1804 1748 1705 1636
-1719 1951 656 1201 1879 1776 1914 1183 1223 1236 1856 1198 1758 1294 1934 1535 1897 2112 1135
-1206 2015 1018 1719 1460 2063 2098 1419 1117 1411 1223 1939 1824 1670 2294 1957 1588 2070 832
-1086 2622 1204 1553 1386 1838 1378 1771 1317 1174 1751 1385 1175 1250 2088 2178 1549 2571 1466
-1269 1917 1888 1077 1472 1311 1307 630 1130 1524 1461 2111 1332 1909 1703 1632 1971 3097 961
-1180 2563 1529 716 711 1395 963 1613 1746 1334 1798 2661 1364 1355 2946 1360 2896 1292 1130
-1565 1845 1472 2593 863 1290 1380 1251 1252 1424 1368 1478 1358 2778 2384 938 1983 2058 1160
-1718 1159 1320 1345 1780 1472 1305 1734 1018 1106 2024 2812 1047 3193 2422 1294 2007 2089 774
-1287 1415 1247 1408 1885 1580 1549 1084 1208 2684 1839 2395 922 2087 1569 1200 2432 2475 1219
-1518 1251 1624 1350 907 851 1511 1078 1097 2148 2056 1431 1117 1121 1227 1094 1365 1730 925
-1478 1371 1804 2540 1396 952 1459 686 1560 2160 1893 1712 1307 2289 1152 1134 1772 1318 958
-1441 1303 1171 2612 1092 713 666 1792 1253 1098 1589 1395 1374 1878 1489 1355 1481 1678 1326
-899 1213 1028 2563 1318 1603 1049 1866 1639 1862 3320 1674 1151 1837 1201 1282 962 1333 1709
-909 915 1231 2042 1234 1288 1059 1255 1046 1563 1682 1378 1383 1286 1324 1676 1691 1420 990
-745 1214 1026 1391 1025 1199 1111 1274 1785 1562 1921 1177 1243 1062 1337 1380 621 1456 854
-838 1242 1262 1598 997 1169 973 1245 1462 1499 1433 952 1420 1164 908 516 1099 1489 765
-1047 916 905 1498 1202 2013 648 1947 1783 1391 1566 1379 1225 845 1252 1315 872 1676 913
-932 1484 1259 998 1552 1903 1399 1696 1563 1403 991 1341 1276 1172 1556 977 691 2030 1373
-709 707 1153 698 1485 1482 1252 2007 951 1427 1124 1276 1386 1293 1070 1454 801 2695 1322
-1335 1302 916 1393 1155 948 1153 2624 964 1044 1129 1402 914 1463 1423 1244 975 1001 1210
-1238 1376 1112 832 1874 869 1311 1690 1000 975 817 1945 854 1014 1005 1433 1452 1059 1158
-1087 1081 1740 876 928 1286 1160 1606 544 1662 1404 2696 832 776 1428 1247 1270 1541 926
-1131 892 1102 1424 1003 950 1276 1449 567 766 1447 1484 1078 1012 1259 1012 1642 1008 868
-913 1378 1089 1518 1152 1207 1062 1721 995 1235 1361 1707 901 1516 932 1463 1360 1079 898
-954 1067 1543 979 747 780 1484 1639 586 1057 969 1614 682 750 1113 1246 1226 1554 616
-812 1204 1324 1623 955 1025 1851 1618 1145 865 1633 1300 806 664 837 940 1210 910 870
-1113 1261 1004 1225 1091 812 2370 952 857 1194 1308 1042 924 1398 893 896 1515 1238 1008
-1085 1182 1473 1191 602 1126 2044 1440 1459 941 1828 2302 581 652 1161 996 959 1350 1072
-999 1145 1074 824 805 886 1970 1574 1452 937 1232 1836 1574 1058 753 1107 1519 1142 709
-1175 1399 944 1278 1139 785 2465 705 1661 794 1197 1623 756 901 1151 882 1106 2286 680
-1092 1065 1530 1134 803 699 1665 867 1198 978 1524 975 659 798 1125 953 677 1885 704
-886 1681 835 703 822 1439 1343 944 834 1166 1162 929 1181 891 1076 979 1049 1738 691
-1071 1125 720 952 1287 1065 1717 745 1260 999 893 1134 898 694 785 860 578 1704 992
-790 1408 756 878 1037 926 1622 1059 946 737 1315 1511 766 934 908 826 615 1665 586
-528 945 1056 978 935 789 867 1000 1031 728 1132 1157 994 854 967 1081 673 1952 567
-1387 1353 761 836 772 1023 795 1056 603 787 1486 1070 245 676 1335 904 931 1461 968
-1189 1254 875 676 802 879 1099 982 937 1250 1738 841 591 1069 1252 718 1120 1440 886
-950 892 912 1382 1094 1496 842 1019 469 1067 803 1044 958 577 1237 840 721 1612 469
-1078 1250 778 1065 1171 806 748 869 1028 735 616 1248 780 857 868 759 957 1189 831
-496 706 682 1065 1023 1010 537 701 654 462 506 1018 642 642 1162 834 884 1373 1007
-855 792 838 981 651 1631 839 904 715 837 735 754 896 984 630 1524 575 1103 610
-901 779 1068 1035 971 912 689 852 813 726 594 1042 459 934 665 1593 686 755 690
-873 774 752 767 1094 1213 1233 1182 809 863 579 1028 777 612 853 842 1006 1892 1135
-1148 749 627 707 926 940 864 861 836 812 993 1007 602 889 924 1175 1073 1086 557
-865 915 1165 899 644 679 693 585 1046 751 771 1378 746 1315 864 1114 1049 1123 639
-1300 997 1188 925 1460 1153 641 1091 496 895 727 1236 1101 964 963 1272 1019 1128 888
-910 1541 990 1096 1247 1283 1057 778 828 707 851 1119 1227 1293 839 1015 1398 793 1395
-485 1133 673 1706 1497 1367 682 871 783 840 769 1899 1019 1223 980 1287 1203 867 1187
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-902 683 636 683 768 973 1483 1749 805 774 1482 1162 2586 1172 1923 1273 3295 985 1865
-932 633 984 1403 1288 944 1062 1966 553 590 1330 1178 2155 882 2113 1127 1495 676 1888
-884 956 851 1321 743 672 1226 1686 1492 842 981 863 1191 1119 1572 1015 1562 722 1210
-1107 1150 800 1232 1048 1233 1246 1536 751 841 1043 1205 1642 681 1785 722 1313 1033 1288
-1155 970 1194 2007 1364 573 868 1686 1142 944 1099 1215 1063 1137 1522 1406 1232 1039 1162
-727 769 1408 1022 1005 1006 1205 1490 935 1073 1106 947 790 897 1431 996 1076 949 1519
-1350 749 715 1275 806 773 1572 879 739 1014 1016 1215 1051 1302 1639 1190 631 1227 1020
-793 1220 995 1207 956 891 1165 1088 1258 1493 901 1161 909 1658 1762 1670 867 1312 1383
-1241 1345 1103 1601 753 1089 1293 1062 1221 1411 691 1851 1466 1196 1862 748 1065 1104 1205
-1179 679 1436 1265 706 1043 1121 852 1242 726 630 932 743 1090 1652 829 1326 1010 1145
-1225 991 1520 1138 1612 905 1202 1573 773 923 758 1336 1141 1279 1061 758 717 892 927
-1009 1228 1444 1162 745 1262 1249 1612 809 908 822 1481 1103 496 1568 785 1043 887 679
-854 1394 907 939 768 850 1734 1652 1000 1344 1092 758 1161 1001 1355 1126 1058 836 1468
-1861 1338 1197 1032 632 1122 857 1172 1014 918 548 1321 1224 850 897 1287 785 1018 1062
-666 1205 1590 1147 1182 1459 1045 960 842 1519 583 624 888 1318 1036 1007 1059 704 692
-1044 1853 1335 1502 1060 1212 1444 1533 957 1093 876 868 1086 995 1029 1293 1128 1268 851
-672 1699 793 993 1162 1761 983 623 1225 866 1183 716 1653 1422 1429 1088 941 1307 811
-1075 1529 1268 1220 1081 1348 1063 1217 874 899 942 808 1234 963 780 456 1325 955 509
-1439 1132 933 785 1220 1219 1362 1004 927 1009 1458 1036 1108 918 1494 711 1259 899 885
-1149 1410 1696 1191 1809 1721 927 842 1241 947 1332 1526 975 1060 1060 1154 1749 913 967
-892 751 1008 811 1370 1590 855 827 1438 1031 1292 618 889 991 1170 1259 1641 943 992
-1205 569 1232 945 895 1192 1033 983 1514 1134 1099 603 950 642 1404 1008 1713 981 1123
-1115 649 956 1856 1099 830 1055 1395 969 1234 1352 1054 1053 860 843 1013 1363 1360 839
-1220 655 1079 996 915 905 1348 1025 1008 1355 946 991 812 901 774 916 1180 995 1058
-1087 752 1050 1125 1421 916 1078 1410 1093 1468 1466 926 640 1242 681 1220 1402 1575 984
-858 1208 1097 925 912 841 1141 1476 839 1395 1221 1156 1083 1007 851 627 1328 1450 1163
-1607 1008 1307 398 2307 1055 1445 1200 937 1396 1087 1418 713 557 1031 1067 1265 1693 932
-869 1107 1074 749 1482 1847 1044 1132 903 1057 1233 1028 1136 1014 1005 1399 1761 1393 1624
-791 755 1050 938 1455 1390 1360 930 1328 1467 747 1224 744 1124 769 852 1711 1511 1120
-903 899 1949 1273 1119 2362 1392 1347 1380 1586 1168 1450 538 1414 1166 1126 1096 1178 1427
-1591 1243 1356 947 1033 1638 873 1076 1354 935 791 1128 897 1345 1426 988 1225 1312 1050
-1585 880 1484 1397 1624 1096 966 996 672 1547 675 1475 931 1417 849 1221 1570 1027 798
-1217 1426 1398 1274 1292 2406 1448 1206 871 674 1399 928 995 1262 1605 873 1425 1531 1506
-1579 1438 906 1233 1796 1207 1581 1177 646 1605 1273 1626 1465 1348 1347 1355 1358 1513 1463
-2017 2057 1309 1018 1010 1825 1290 1595 1351 1649 719 880 1580 1606 1322 1225 1448 1333 1285
-1320 1854 869 908 1148 1235 2137 897 855 1079 1208 1359 862 2021 1238 1355 1655 1488 1677
-1343 1513 667 830 1373 1126 1182 1094 961 1464 996 1093 948 1466 734 2192 1404 1729 1029
-1489 1273 1003 1143 1129 1712 1153 1099 873 1175 1250 803 643 1631 1250 1337 1491 1024 1312
-1128 1290 1107 796 1117 2355 1456 1698 1071 1221 956 1731 1534 1669 581 1139 1451 1584 823
-817 1374 734 673 1167 1710 1832 1518 1263 1475 1337 1106 686 1304 1150 1254 1201 1396 872
-1460 1343 1075 1195 1354 1205 2041 1923 778 1594 1207 1762 1309 1107 653 1374 1724 1108 738
-1743 1651 881 1070 1312 857 1693 2400 1444 1083 1791 2658 1434 1189 1345 979 1420 1782 1410
-1668 1842 618 1323 1008 1052 1363 2577 1023 1490 1184 1725 1401 1415 1015 1406 1173 1829 1141
-1100 1264 879 1253 973 1551 1488 2331 892 1437 1007 1620 1072 1447 1089 1427 1649 4167 1060
-1389 1967 1697 1164 1212 1354 1442 1870 1241 1025 1265 1727 1512 1724 1484 1047 1920 2268 1190
-1390 1926 970 913 1316 1119 1736 2041 1289 1684 1249 1713 1844 1221 1086 1175 1100 2137 1466
-1108 1979 1620 1425 1354 1399 1083 1868 1175 1098 789 1181 2036 1947 1286 1090 1042 2505 845
-952 2221 1262 1859 1367 1614 1343 1516 1436 1115 1157 1300 1128 2067 1119 1637 1601 2027 2242
-1287 1906 1030 997 1055 1429 1275 2607 1305 1249 1166 1428 1791 1515 1423 1561 1259 3114 1444
-1921 1375 1542 1352 1773 2080 1118 2181 1124 1889 944 1303 767 1844 1672 702 942 2040 1963
-1711 1583 1276 1659 1602 2415 1632 2305 1642 1783 1646 1812 1141 2691 1636 2020 1317 2726 2093
-1700 1480 1652 1264 2021 2383 1035 1783 1140 1657 911 1574 2001 3828 1781 1762 1042 2207 1410
-1760 1811 1501 1345 2213 2109 1210 3120 1747 1798 987 1385 1709 2578 2226 1665 1598 1458 1479
-3086 1994 2192 2884 1781 1788 1940 2454 2244 1561 1406 1625 1547 2220 2266 1635 1442 1698 1272
-2006 2008 1662 1560 1979 4383 1949 1891 1436 1590 1383 1340 1550 3146 1565 1252 1775 1875 1163
-2966 1677 2437 1993 1654 2869 2253 1713 1250 1842 1534 2052 1647 2652 2367 2002 1927 2635 1479
-2742 1659 1934 3964 1726 2783 1396 1894 1345 2160 819 2326 1122 2685 2236 1610 1092 1961 1205
-2919 1418 1757 2459 2513 2225 1783 1650 945 1425 1359 2630 1258 2693 4104 1537 877 1695 1781
-2202 1465 1687 2396 1398 1651 1580 1407 1083 1852 1510 2094 1791 1982 2365 1755 943 1731 1229
-2726 1472 1452 3294 2684 2061 1802 1794 1076 1664 1551 3189 2495 1902 2274 2528 1641 1950 1299
-2451 2057 2006 3284 1781 1310 1823 1180 1613 1233 1461 3401 1901 2743 2160 2070 1754 2460 1816
-2119 1493 1950 3096 2925 1367 1702 2059 1423 1928 1771 2122 1270 2287 2994 1905 2096 4926 2143
-1833 2346 1721 3193 1100 1546 1563 1390 1892 1452 2048 3213 1453 2465 1707 2485 2317 3771 2000
-2302 1108 1922 3428 1206 1667 1642 2434 2189 1957 3006 3121 2339 1650 2432 1627 1919 4780 2787
-1584 1603 1688 3353 1768 2209 1321 1810 2738 1242 1484 4093 2290 2001 2894 1435 2990 2897 1236
-3275 1653 1320 4090 1311 1533 1954 3425 2041 2810 1513 2576 2921 2491 2627 2030 1900 3862 2094
-2395 1482 1475 5481 2446 1537 1107 1998 1893 2174 2393 3702 4075 2262 1639 1639 4034 2699 1763
-1489 1008 1851 4643 2346 1526 2303 4123 1650 1840 2081 4294 6605 2570 2260 1340 3642 1868 1776
-2445 1517 1642 4566 1199 2740 2516 4047 1928 2706 1378 5150 5310 2505 2576 2051 1639 2884 2221
-2449 3187 1962 3491 2443 1924 1269 3577 1924 1654 1771 2603 3146 2380 4005 1509 1734 2272 1742
-969 1812 1941 1856 2429 2515 2330 2401 2009 1652 1336 5792 4043 2977 4338 1987 2187 2127 1901
-2589 2282 3944 2429 2725 2804 3491 2530 1789 2332 2168 3606 2212 1697 5819 1495 2152 1575 1895
-1883 2023 2289 2074 2443 1837 1934 2575 2215 1575 2004 3493 2491 2475 5249 2389 1807 2806 2305
-1733 3126 1814 1810 2745 2106 2051 3339 2323 2648 1901 3625 2698 1500 6489 2476 2024 2754 2274
-3118 1320 1472 1941 3023 2530 2046 3448 1826 2121 1711 1972 3102 1765 3298 2084 3487 3476 2694
-2459 2834 2408 1680 2902 4369 1636 1903 2293 1501 2098 2308 2569 2233 4405 2759 2008 2694 2537
-3266 3574 2224 2171 3086 2906 1651 1385 1887 2463 2312 2598 2196 2355 4129 2283 1841 2407 3627
-1806 3642 5094 2824 2937 2129 1874 1381 1960 2246 3473 3066 1966 1693 5081 2755 2682 2067 2600
-3156 3360 3282 1791 2811 3302 2208 2538 2640 1598 2821 2689 1035 1770 3204 2381 2065 2810 2705
-2516 3672 2735 2291 2658 2895 1277 2279 2425 1148 2186 2326 1854 2619 1730 2373 1763 2747 2010
-3952 5046 3171 1540 4398 3453 2854 1942 2181 2601 2450 1841 2799 2561 2063 2394 3425 2133 1570
-3247 3736 3598 1677 3166 3059 1862 2492 3197 2598 2911 1791 3345 2267 2687 2478 3116 2137 2005
-3683 3898 4019 1635 3112 5030 2959 1693 3186 3096 2160 2427 3220 2973 1796 2213 2540 4065 2203
-2456 3738 4629 1168 2278 2896 1925 1548 3808 1810 2026 2028 4477 2417 1944 2080 3749 1765 2091
-3467 3629 2237 2104 3308 7803 1989 1967 3664 2181 2563 2795 4475 3395 1700 2335 4755 2179 1527
-3447 3714 2241 2628 2422 4157 1516 1945 2720 1938 3890 1467 2154 3707 1531 2404 7803 1568 2498
-2939 3862 2003 2847 3595 5944 1999 1443 2523 2021 2079 2413 1560 2568 1682 2869 4162 1640 1838
-2908 4495 2485 2384 2025 5325 1702 1952 2404 1927 1727 2493 2854 5075 2189 3614 5256 1842 2898
-2381 2745 3353 2042 2375 5754 2671 2805 5222 1441 3188 2186 2118 3001 2609 3827 3962 2659 2555
-2042 2295 3569 3171 1619 4525 2478 1349 2806 1885 1218 2837 1431 2740 1385 1652 3580 2159 2754
-3847 3856 1921 2339 2351 4486 2072 1886 4045 1373 2468 2747 2657 2073 2257 2658 4050 2047 3189
-2199 4420 2635 2184 1889 2695 1720 1482 4240 1695 1786 2109 2787 4317 1658 3182 3892 2921 1699
-2917 1814 2596 2092 1345 2164 2102 2709 5031 1716 2019 2434 3833 3055 1914 3841 5129 1770 1801
-2892 3015 3268 2772 1976 3406 2448 1876 3679 1588 1613 2047 2733 2893 1665 2952 3824 1789 2348
-2814 2665 2380 2469 1649 3098 2377 2157 4223 1765 3080 2903 3838 1243 1664 3167 4057 2676 1692
-2019 3737 2649 3553 1720 2484 2203 2568 2713 1676 1973 3400 2263 3027 1378 2343 3817 2433 4414
-2919 3358 3369 1541 2835 3149 1518 2945 2222 1643 1607 2327 2142 1478 2899 1591 3080 3034 3272
-2131 2614 2236 2445 1837 3968 2134 1931 2249 1923 1325 1909 2433 1495 1829 1917 3983 2200 2756
-2449 2567 2162 3469 1934 3238 2049 2351 1813 2154 2570 2086 2310 2115 1850 2358 2536 1686 4255
-1584 2482 1593 2325 2680 3941 1864 2591 2504 1587 2113 2754 2744 1766 2448 3180 3235 2237 2698
-2253 1957 1545 2435 2374 2730 1902 2969 1786 3080 1166 2017 1774 2535 2701 2533 2502 1441 2244
-2795 1868 1556 1881 3625 6126 1709 1711 2282 3071 2516 2261 2713 3074 2898 1164 2613 2139 2225
-3211 2425 3035 2542 2879 4038 2216 2448 2474 2409 2732 1858 2423 1702 2354 1199 2356 1952 1925
-2134 2023 1760 2815 4160 3332 2993 1949 2355 2373 1558 1938 2147 1686 2381 1902 1643 1923 2122
-4006 1947 1823 3625 5092 2771 1840 2374 1802 1906 1795 1484 2913 3353 2173 2048 1980 2673 1917
-2336 2096 1525 2546 3309 3480 1399 2340 2425 1801 2204 2706 2357 2566 3545 2128 1980 2254 1870
-3385 1931 2112 2272 5052 3713 1473 1923 1831 2492 1766 1796 1729 1807 5049 1747 2102 2109 2009
-2932 2099 1989 3413 2474 3062 2363 1526 1502 2483 1751 2544 1801 1539 4628 2132 2257 2225 2431
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3926 3834 2968 2094 2207 1580 2091 1784 2741 1090 2973 2872 7051 3642 2717 1739 2233 2189 3164
-4399 3113 2938 1608 2181 1753 1298 1556 3409 2091 3131 1928 4984 3917 1872 2071 1963 2180 3430
-3924 3232 2420 1500 2707 1860 1754 2343 2351 947 1851 1440 4949 2051 1569 1845 1614 3252 3319
-3019 2335 3682 2332 2261 2074 1803 1846 2679 2877 2236 3129 4080 2861 1797 2423 1749 2512 2252
-4588 3366 2074 1940 1397 2211 1659 3157 4115 2157 3422 1865 4153 3032 1743 1314 2068 2275 1735
-2144 2581 3475 1717 1619 1610 2273 4146 2508 2353 3634 1881 2600 2777 1901 1809 1380 2491 2738
-2292 2519 3129 1709 1852 2058 3854 4204 4287 1518 4740 1899 3938 4329 2243 1523 1117 3760 2270
-2066 2357 4744 1225 2173 2696 3440 4848 3831 1769 2797 1637 1886 4492 2125 2566 2175 2476 1995
-2198 2372 5301 1267 4115 4537 1088 4358 3577 2637 3138 2035 2527 3600 3724 1695 1850 2503 2517
-2421 1890 4874 1992 2387 3332 2369 3650 2935 2319 3210 2801 2032 4058 2871 2977 1924 2992 3619
-2541 2698 2926 2770 2624 3131 1688 4401 4144 2645 2709 3021 3704 3016 1995 1851 1630 3308 2606
-2477 3329 3457 1668 2455 2893 1664 4623 2439 2115 2025 4176 3581 2560 2336 2714 2300 2446 2422
-3060 1783 2528 2778 1727 1433 1331 2766 7149 1457 2498 2669 2854 3279 3332 2295 1290 3070 2380
-2313 3812 2862 2945 2754 2080 1921 2656 3502 2491 2213 3507 2910 5368 2867 2419 1843 2628 2857
-3626 3684 2141 4015 2915 2406 1770 2474 3972 2490 1840 4032 3257 4417 2230 2796 1018 4497 3330
-2900 2337 1823 2184 3574 2045 1813 2153 4767 1919 1596 4145 2549 3829 1110 4082 1859 5785 3963
-2436 2392 2368 3240 3167 2004 1894 1414 2477 1327 3081 3226 2829 2252 2308 5796 1873 6107 3466
-2301 3043 3105 2826 2707 2220 1607 2116 4291 2089 2360 5896 2556 3181 2631 3152 957 5502 2816
-3618 1816 2171 2563 2823 2786 1672 3231 2982 1806 2684 3689 2897 1955 2275 2616 2445 7406 5800
-2711 1630 1965 2341 2928 1549 1752 2114 2743 1112 3774 3807 2101 2670 2295 4405 1679 4530 3567
-2711 1113 2427 2086 3285 1888 1541 3287 2477 1950 3554 4015 1675 2770 1642 3450 2782 3880 3365
-1943 1722 2676 3040 4885 1675 2560 2990 2656 1726 2998 3424 2887 2951 1437 2043 1114 5774 3115
-1361 2448 2082 1757 2997 1843 1799 3457 1781 2083 2202 3262 2013 2790 2299 2587 1988 2254 3724
-2651 2456 2637 2073 3074 1999 1390 2830 1691 1778 4617 2566 1944 2729 2523 2682 1800 3865 3412
-1208 1902 3064 1945 2588 2287 1618 3750 2439 2014 2588 1998 1911 2032 2149 1651 2515 1423 2661
-1545 1779 3139 2354 2326 1930 2077 5818 2310 2838 2734 2387 1639 2285 2109 607 2269 1832 2992
-1863 1685 2226 2076 1963 3117 1748 4144 2359 2183 2357 3345 2339 2831 2633 1407 3218 2135 3205
-2378 3040 2495 2163 2095 2383 2203 3819 1966 3167 1943 4726 2401 3993 3014 1495 3656 2323 3925
-1411 2318 2362 1793 1771 2073 2322 3980 3464 3611 2312 2739 2555 3668 2825 1286 2355 1912 2232
-2227 2712 4680 1689 3061 2104 2039 4959 2576 2781 2148 2582 1566 3387 2247 2283 2019 2397 1709
-1870 2406 1707 2347 1984 2353 2104 2228 3288 3342 1776 2310 2402 2688 2590 2009 2763 2479 3316
-2325 3272 1380 2690 2449 3013 2443 3404 2889 5965 1114 2405 2319 3282 2137 1054 1982 2195 4085
-1456 3472 3008 2084 2390 2787 2984 3748 3622 5148 1748 2173 1093 2669 2133 1611 2140 1803 2424
-1555 2715 2160 4940 2089 2902 2367 1750 3401 11249 1045 3228 2012 1894 1916 1588 2741 2033 1710
-1391 3285 2680 3763 3143 5160 2042 2962 2677 5678 2581 1862 2134 2322 2550 2230 1858 2608 3457
-1585 2808 2684 4639 2345 2154 3056 2488 3155 3722 2058 3315 2062 3242 1990 2564 1497 2489 2452
-1576 3358 3460 3887 4049 2157 2831 1991 1935 4604 2504 2768 2330 2559 2263 1808 1851 2157 2154
-1749 2946 4053 4425 3300 2007 1963 1883 1914 3230 1828 2661 2261 1971 2541 2098 1574 1672 3356
-1823 3511 2966 2839 1504 1906 3366 1400 2778 2244 2145 3203 1547 1866 2094 3163 3966 3330 3289
-1332 3647 3705 3917 2484 2092 1813 2896 1972 2534 2177 3361 1915 1755 2683 2434 2898 2067 1921
-1790 4425 2910 2814 2597 1885 2341 2394 3090 2231 2735 2775 2848 3259 3086 2628 3082 2403 4039
-2205 4551 5430 1226 2148 1972 1923 3081 1606 3375 1941 2586 1924 3224 2651 1610 4643 3722 4496
-2554 3772 2653 2463 2704 2155 1726 1521 2972 2239 2250 3093 2485 2446 2675 2196 2747 2923 3157
-2974 4177 4459 2380 2281 2028 2159 2557 2635 2739 2919 3068 2080 3969 1822 2804 3718 3449 1742
-1800 4574 4222 1894 3283 2075 3086 2319 1890 4030 2578 2514 2110 2228 2228 2714 3527 2888 2131
-2907 4272 3851 1786 2138 2194 2808 2230 3931 7213 2774 3101 2938 1411 1557 1625 5347 2786 4276
-2575 3552 3857 2342 2390 1960 2413 2174 3264 6232 2333 2679 2905 2619 1628 1810 7174 1833 4769
-1549 3518 4020 2888 3558 1555 2808 3171 3443 5080 2104 2350 3543 2847 1663 1760 6717 2951 3368
-3086 1959 3286 1540 3875 2659 2445 1911 4494 5002 2970 1533 4347 4497 3576 3037 7528 3596 3037
-2999 4954 2741 2425 5343 3739 2703 1977 3604 5728 2956 3329 3348 4526 2298 3489 3995 3190 2968
-2299 6347 2352 2318 5503 2983 5675 2901 3668 6133 3002 3169 2143 4561 2977 3161 6135 1825 6709
-2851 3807 2392 2029 4778 2511 3602 1810 3132 7235 3704 2330 2385 6348 3660 3217 5738 2574 5404
-3142 4887 3662 2717 6261 3288 3300 3068 4537 3861 3361 1907 2856 4779 3802 5003 7811 2628 8282
-3717 7363 5071 2206 7035 2610 3914 3432 2436 4828 3239 3523 2734 4720 4946 3427 4303 3535 5933
-4696 4628 3775 2950 9268 2861 3383 3503 3665 3986 2625 3500 4001 7884 7374 4887 3694 5064 5607
-3548 5023 4540 2930 8387 3903 4045 6257 5897 4965 3218 5052 2872 7230 6415 4750 3744 3814 7860
-3959 3385 8964 3733 9857 5325 2987 3844 4091 4427 4593 3676 2889 5071 6051 2780 3705 7847 8197
-4941 4356 4766 5001 6446 4609 3796 4044 3054 5603 5428 5481 4095 4950 5471 5896 3766 7232 6436
-5871 7394 4801 5034 3542 7598 3014 2931 4584 5839 3543 5687 4562 3838 6341 3330 5086 19381 5751
-4156 7454 4359 3844 6068 3800 2462 4098 3267 9280 3653 6222 4460 3232 4972 5258 2855 10309 7480
-4433 3280 5046 5910 5529 5271 4937 3556 4505 5766 2940 3356 3427 4236 6376 8762 2953 20142 7717
-3847 5521 4759 5568 4828 3539 2015 7036 3772 6740 2617 3940 4364 3951 2788 10607 6223 14338 7441
-8098 5483 4158 4527 4737 5487 4230 5868 3940 6821 3564 5562 6086 1904 6674 17380 5061 15979 5344
-3768 5316 6686 6971 3482 6580 4005 6938 6766 12677 4337 4932 7651 4046 5199 15652 4497 14272 6714
-10559 3927 7274 5663 4932 7251 4618 8933 3857 8477 4833 5885 4877 3917 3898 23463 4351 13991 5420
-11021 5658 5856 4445 8044 8385 4364 12936 7863 8403 3489 5809 5762 3571 3458 26909 7418 12045 7248
-9068 6740 6812 4629 5480 5508 5718 4448 6811 7007 3995 5322 5846 4447 2917 22374 3440 6117 7697
-9774 6310 9620 6944 5247 3970 5495 6264 9847 8658 6538 4053 4293 4412 5742 18648 3303 7589 4596
-9942 4859 11231 3418 8524 6219 11080 7251 13253 8006 7140 9153 6161 4381 4988 12960 5099 6300 4822
-7011 5337 11192 6194 7358 3389 13560 3318 11341 6378 3928 7546 7376 6179 7994 15370 10253 7896 3478
-8764 6960 9776 4877 8344 5585 12869 4618 16542 5216 3834 4908 8496 3345 8493 14492 6913 4371 4124
-5886 3785 16898 4828 9975 5999 8902 9460 10936 5443 8625 5998 20917 5692 5466 10706 11337 5294 6399
-6863 5924 22950 4642 8967 4628 9226 8423 20255 5803 6981 10411 13472 5369 9274 11060 6773 5861 7498
-5136 7264 8352 4826 7053 7016 6912 11633 11493 6791 14698 7734 15623 5935 10352 11205 8769 3615 5981
-5852 6226 14212 2706 15290 8530 12169 7480 20025 5593 9415 4162 12010 4344 7360 7743 5884 5070 5464
-5325 4142 7327 5183 15791 17566 5963 5847 10640 4890 8593 6019 9262 6167 8304 12156 7484 8008 6918
-5291 4459 7916 4990 15877 16185 6144 11820 14189 4346 10851 4234 9650 5172 4383 7948 4012 6633 8881
-4075 5009 11004 5849 15165 12265 10763 10012 7890 3577 7848 3905 15721 5914 7346 10332 5836 5626 13364
-5448 6367 5872 6720 9873 13850 7435 10853 8380 4561 11504 2902 8550 5625 6075 12214 6464 4691 9776
-4014 5646 11017 9265 12925 15498 13368 11918 7296 4552 10551 5725 15951 8765 7705 8141 10167 6801 12843
-6697 12925 5880 5673 9435 14870 15325 7492 12408 5975 7486 3053 22875 13521 7370 11881 9582 5051 12737
-8492 12991 12774 8992 11457 12766 10201 6449 8616 8455 9486 6071 19445 20551 8447 8619 11491 4142 15094
-8093 19219 6898 7942 10229 3636 7318 8816 8044 7740 7430 7633 33555 34111 7458 4419 10518 4698 15692
-5001 12363 9068 11215 6098 4762 8741 8157 10087 10220 8960 4414 32795 27132 9308 6226 19188 6168 22675
-6909 10859 7078 9365 7308 5776 8175 11891 5958 8864 12692 5006 31325 11060 13860 7632 14416 4550 14889
-6802 6575 13382 9382 6766 5094 8348 13414 7886 7502 24370 4309 18469 9838 11430 8610 20035 4452 24337
-5354 8158 6688 8956 4729 6153 6468 13817 12263 8895 29107 1961 18689 10848 17186 11492 13693 5044 8518
-6929 6319 6511 13535 5991 5525 4894 17693 6152 11874 18724 4392 11780 9158 13548 8245 24871 5565 10700
-4623 14168 4373 8181 11628 3724 5525 15223 6511 7697 28076 2809 11714 10847 19261 8697 22576 6406 10012
-10851 10505 6244 5266 7761 6055 9244 7907 7090 7308 14266 3610 8483 7468 19337 8387 19029 6255 13855
-8647 10186 5853 6438 5849 6888 5966 8651 8357 7638 12617 4520 9527 5082 10001 5737 8979 7615 6554
-9109 7104 5294 7262 5761 5205 6066 9555 10136 5848 15397 5419 5142 4002 21347 8064 10901 8507 10947
-11291 12042 4358 4632 5173 6338 4448 7677 10526 7264 8495 2626 9652 5716 28605 5911 8559 11336 5193
-13797 9377 6224 4382 8132 4204 5122 4832 9118 5920 6601 5361 4087 4616 35867 4892 7486 9907 6180
-14415 8507 8905 4178 5185 7242 4015 4233 10308 10549 6561 4188 5473 5874 37651 3501 6454 14807 8499
-23687 7414 8347 3518 5314 5392 6373 3989 12555 4592 8100 3937 4955 5920 24875 4616 6593 9275 5976
-15709 5332 6604 2150 4305 5595 5533 7055 6567 3881 14587 6779 3975 3441 40036 5322 3641 14110 8932
-19216 4036 13777 3780 6730 10873 7056 3602 6912 5826 11342 7786 4751 4749 20312 5154 5645 15799 6597
-20227 3924 7281 3770 2448 7735 6465 7828 4064 5590 10026 5700 5102 5584 22085 4752 5816 16414 5793
-14723 3581 7089 3010 6775 9312 3728 7766 8214 8532 9234 5696 4684 3997 14787 5445 8311 14071 5884
-16600 4926 12425 6959 4309 6772 4854 5669 4992 5238 6979 6839 3755 6130 10056 5428 8141 10332 5450
-10290 4638 9642 4212 5937 5001 8741 8476 7112 5409 7868 5422 4021 2951 14475 6768 13074 10274 5042
-7352 5744 5949 3742 5782 8169 7339 13834 4581 7833 10838 5507 2748 5884 11440 11347 9278 7898 3608
-8828 2855 8198 5090 4229 8036 7299 7040 6336 12090 4397 5664 3175 6377 9688 11271 8282 7965 5488
-6624 7246 6406 6090 4984 3395 11645 8108 5550 10123 8624 4984 4017 4047 13151 6982 11059 6828 6033
-3364 3238 5439 5532 3463 5985 5185 6232 7968 4153 6796 4459 4898 4882 15981 11820 10570 6408 7083
-4812 5302 11285 8554 4339 4950 7860 7156 5659 5953 7117 4566 3477 3479 19817 9112 12322 3978 5576
-5008 4267 9781 7596 5510 5436 16120 5126 4688 6692 11687 4658 4300 6069 13214 8091 6647 5187 3206
-5450 5277 12055 8543 7175 4562 7371 7203 7544 4803 8341 6646 3925 3948 13068 7488 18429 4359 4203
-6587 4068 11471 12093 8008 5162 4930 12273 3933 4622 10531 9154 6594 4614 16724 5628 19144 4023 6418
-6406 4425 13314 20114 7266 4871 5473 6831 4750 4034 6485 7015 5149 5072 12638 7797 18008 4855 6937
-3641 4544 8301 19169 6976 5211 6305 7081 5473 5489 7373 7209 4857 7352 15964 8928 21727 5264 7221
-4468 3262 5503 12476 7018 5210 4564 10700 5645 5707 9371 9458 6936 4530 9900 7484 13335 3959 8944
-6536 3317 7325 12854 3501 5713 4415 7816 7568 3269 6842 7594 4572 3947 6939 7522 13304 3619 6287
-3947 4318 7440 8436 5523 5863 3639 7856 6184 5200 8126 9360 7186 5812 8950 5662 7980 6462 5361
-3789 3270 7078 14557 5983 4768 5068 9237 13747 8661 8397 7585 7456 3911 6397 7210 5918 6023 6340
-3537 4523 6933 11415 8568 4138 5395 9227 7389 4887 6943 6730 10095 3200 7908 8395 12400 3903 9346
-5513 3220 6044 13718 7013 4696 4611 8523 13332 6753 7987 8312 5853 7663 5413 10239 9243 4605 4384
-6157 4096 8553 8949 3996 5159 7244 10621 20853 12714 4421 7508 4808 9481 4640 7284 10125 4915 9063
-4035 2401 6005 11345 3749 5386 5308 12615 13500 11589 8784 13074 5480 6416 6154 9041 8659 6990 10113
-5627 4292 6105 8958 5944 5531 7623 7851 8885 13390 10760 4896 5938 7826 6642 9510 5526 5812 7704
-7720 4537 10208 8219 6545 5162 9458 6638 6091 7162 7655 5774 8035 8590 10937 7518 5373 9466 9828
-8674 4595 10420 5102 7975 4472 9813 5910 8766 12841 10802 4654 9349 11052 14883 4845 10317 6047 10943
-16188 6428 9470 8261 8746 8624 11003 2946 14495 10196 11166 6170 8922 10253 12043 5440 5746 8769 12185
-11418 7001 25490 10048 14920 8757 6441 3485 12791 11227 9899 5834 10664 13353 12030 8607 9138 7759 10743
-9748 7875 13730 5250 8966 3928 6361 5423 13694 6174 16098 7538 13996 16763 8846 6244 5738 5436 8328
-16976 18045 10270 7803 8753 10648 4298 3958 8313 9484 16432 6283 10388 19026 7621 6253 10404 9712 5438
-15140 18386 3890 9921 9480 6104 6774 4773 5721 9867 12574 6779 9383 21890 8973 4975 6248 5727 5679
-27487 21263 5972 4532 7701 5159 8297 7083 6013 8492 6905 8125 16998 21439 11143 4567 9872 3606 11472
-32352 18906 7987 6540 7263 6013 8992 5304 6057 6004 12166 9820 19337 13036 10373 4109 7321 5255 10799
-20847 23514 7138 8958 5423 4010 12196 5890 4375 11286 8684 6527 15092 12346 11094 5603 10895 5396 11596
-40381 18624 5453 5637 10747 4741 15010 5350 4810 11507 5039 4810 17754 20874 7319 5393 6739 5249 6522
-39505 19547 4350 8150 7651 2458 19465 5510 4720 10676 7228 5115 13840 12825 9485 4314 10295 3798 8283
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-32150 6302 6145 5907 32366 7813 39001 11917 10151 14663 5085 11379 10908 8552 7715 9119 62129 8637 24817
-33895 3881 8595 6185 24692 9803 74715 15371 5983 8880 6988 13315 8073 8742 6315 8275 29080 5889 15520
-29068 8632 5912 5243 19214 8292 80973 9860 6531 12041 9450 17409 6663 7587 6721 13351 23814 9606 16490
-24753 7406 9276 5575 11845 7817 79741 9433 8682 10608 13083 15020 6919 6111 9997 9026 14863 13876 11837
-26366 7848 6964 8638 10628 6209 56767 10102 13573 10272 9107 19051 8861 7014 10098 23230 14905 11664 11968
-27458 8309 8584 7435 6333 6429 35118 8938 6881 19279 10166 9993 6324 4153 21186 11213 8623 14031 10402
-29515 4908 8303 8953 6346 8126 12827 6791 8766 11944 5632 6399 9306 6068 40410 15284 5616 31910 8809
-18218 6815 6194 11709 13935 6733 11319 13408 15430 19684 10635 11108 5934 4678 34906 14821 7998 30293 18330
-22289 4937 8971 11371 13459 9168 16824 9973 23838 11175 11158 6146 11008 7437 26871 19582 6693 20628 13497
-23198 7262 7310 12687 16747 8754 13311 5725 30699 14976 12846 11313 5852 5419 35625 12352 5431 19386 16543
-24441 9499 12925 17539 10164 7333 12652 10349 36963 17037 10568 14380 6411 6015 14357 9842 5224 15197 10439
-23226 11351 8836 11011 15394 6195 17072 13981 30357 19946 16103 17081 8418 7574 13200 21165 6011 14041 13078
-13982 15809 20807 24257 7219 6741 17646 10273 51597 18650 11344 20257 12490 6225 14775 22350 6192 19611 13387
-15519 14558 25923 11455 12782 8212 20258 11291 65546 13499 8776 13016 7223 13980 16361 10775 5807 27732 21449
-11394 19266 23525 15643 19480 6828 33259 18666 54207 19115 10968 11236 12243 13478 16691 33804 6340 15556 22937
-10760 17547 22076 12394 14147 5582 38373 36680 66150 13781 18266 23991 11723 11489 20076 54092 6385 14308 21280
-12671 16002 23610 7027 13277 9108 26847 34699 88116 9962 21749 19357 17481 13643 18793 44128 6485 14417 28717
-10673 29301 26840 13794 17883 7878 22090 37732 71035 8942 21552 19562 21029 10175 17127 33254 11470 34680 50219
-13249 35867 36331 17365 13000 16564 15085 43829 117229 12159 17620 19036 23169 12813 21356 25257 8655 36721 56517
-15268 51222 23913 10216 17587 9855 29380 28132 78833 11019 20204 14937 22672 11839 28970 33520 9179 35583 44216
-12753 96937 22853 19183 19118 21711 30251 35751 45457 13115 19572 11632 36267 21210 34195 38420 8719 32059 72190
-21589 102205 40371 20749 54832 20053 19019 21688 44873 15137 14267 11839 19206 21397 62410 41891 16110 27909 69514
-25069 97159 67476 19227 48334 28060 27670 26571 24954 11300 25602 9851 24067 24587 66468 37350 14228 39348 63240
-24695 119201 45583 15782 36329 11582 18925 19851 35550 18406 24225 13129 7471 17951 81450 47898 13545 28916 24984
-39005 100984 60153 15608 40003 7194 9937 26031 38032 17101 35277 7468 12303 28903 61224 30482 11793 16921 17111
-69885 85524 50854 21112 56938 9335 20095 21196 28132 21958 39112 4313 4374 16107 36802 41278 12480 9521 20368
-73646 115359 55347 22089 68228 10477 11521 25823 18808 30469 32647 13790 11874 24088 24837 40960 8968 12872 14415
-56170 72388 27428 13236 61843 12023 9052 18156 28672 32343 31454 15118 9769 22279 20101 45359 11542 9100 7845
-54922 83069 13948 9835 76233 20693 15710 20238 43629 40433 47681 21530 19487 41351 34281 40662 9264 10942 12918
-41229 55239 11738 10185 75336 6408 9594 18945 48979 37675 27787 46180 10840 22193 17647 28050 7630 8496 9770
-20417 44082 16952 12783 24711 10340 17745 26313 76156 54881 30403 41705 11641 22834 27540 21673 10381 12475 10975
-25742 47712 15800 9631 24905 9744 9075 27245 45716 33236 25474 48293 21015 18808 20358 28549 13111 13890 15568
-8084 27107 16885 15976 30779 10642 17014 34752 132248 22246 23122 102991 21991 14141 14947 23623 12005 11982 15630
-10643 41891 28188 14234 22716 11948 21185 24574 92973 24158 24367 62650 19277 21389 21480 32133 8586 15399 9548
-7633 36858 23158 8962 20240 10944 21937 25675 189293 29667 30112 75419 27021 34559 33368 38856 16500 10040 17904
-8008 41213 15550 12060 30352 17512 27247 26527 116408 18475 32599 59614 13058 36786 33101 55238 19433 20376 10270
-9387 29051 40351 11865 19656 23794 25428 54384 64915 29459 25384 69677 21349 92707 49760 36366 21241 11665 12629
-12296 39203 39484 28868 29697 29832 56248 40314 44560 34030 37803 36355 14792 106903 71286 36840 15665 21601 13710
-12253 51902 53297 24169 13752 26355 36372 26152 65024 29601 37811 21765 14250 135490 65685 33430 21869 11814 11977
-13568 33470 72061 36303 18641 36176 36628 23372 56536 46081 33218 23182 12858 154157 55079 26410 19267 12447 10947
-18967 40919 48800 23016 16921 81518 30623 32619 66071 71991 50978 17237 35455 105406 71017 23898 28361 16905 14848
-23661 36200 112689 33704 22498 93351 47837 42272 47446 103172 28215 20476 26820 65215 53938 20118 11054 14992 16482
-15719 21877 105675 31732 13935 97269 44030 55832 25931 123864 40885 31197 19831 42815 39107 10846 8321 12737 16350
-27833 58160 112306 62001 31017 86662 29485 75179 38961 99321 42159 44371 44165 46105 49214 10625 9913 10689 10598
-23695 69410 54648 74802 41681 69635 36567 97522 39584 128049 50442 37656 54375 55252 42314 13158 12213 18803 15956
-22621 99244 87231 141135 26960 80004 34013 99360 32612 115220 53256 24355 41409 38060 40259 11946 12079 40840 22446
-14033 113230 70229 238667 33402 59972 31072 115485 21623 109192 39865 40906 51031 48105 62840 10179 13061 35059 24340
-32569 190023 54394 205976 35197 46795 29203 88764 20577 90278 66249 34056 41967 55649 87614 13019 20108 56496 59616
-51099 103018 71612 235861 43794 23874 43256 96069 27003 95366 40517 26790 34769 49060 63349 15686 20969 64802 44313
-52357 70708 68112 187994 83064 31348 51556 79509 22131 70210 31088 21353 23198 44000 35321 16147 26356 63858 51546
-74003 118300 54519 126573 106587 20604 71608 39186 23199 41411 81309 26144 41127 60150 58815 20297 68435 78539 68556
-117308 93791 27082 212730 125471 17200 51344 30214 17085 80036 49632 17473 44463 83112 40379 12213 92274 118211 46829
-126637 62467 34006 115667 108109 22179 111626 32801 19497 77785 44975 26805 81963 94819 31221 13364 103952 63917 112190
-99437 105105 23756 142824 156781 32195 134666 27121 19567 46805 39397 24630 62179 84096 31102 19276 148753 102423 205324
-112347 83854 23391 230809 88244 41238 146458 22700 25491 55609 38694 24998 68377 73505 56255 16142 172096 107654 199386
-55895 105827 30997 148261 73826 28979 96981 30994 25987 41689 84190 33517 77432 88692 40678 21542 136736 157195 241077
-67036 60081 43598 105433 109550 39662 82619 14196 57545 56031 66748 23771 42891 89385 38372 16443 239222 96946 249320
-92592 48148 51084 87377 68247 27498 106439 14514 55675 27990 77588 20066 43959 79344 48191 19236 165205 71370 159176
-89764 85392 45012 91638 51937 33612 72919 31269 41004 57373 166142 45198 50375 58057 28221 25364 132748 64557 130526
-142780 107912 58492 105002 67353 39041 35239 24110 24356 20213 116719 74691 64552 112522 53416 30768 191278 94113 129772
-173507 178046 55918 95423 50259 22634 51942 49277 40313 26140 125478 63165 76961 68989 37399 38881 156595 74888 98995
-166851 132066 66412 82794 74632 30759 52919 49590 27929 27716 62900 72803 64952 37686 25159 22697 184360 77968 137425
-133904 170238 78103 66656 67644 30697 94760 44996 52164 24303 33002 70773 31376 56288 35975 33995 176193 118301 123821
-146961 227870 56242 78897 98308 27731 88895 35351 75277 27923 46282 65172 33286 48468 20279 35022 63258 71837 174172
-125940 200312 39153 43985 73232 20074 134776 43855 128677 39145 23163 57350 25821 42906 21393 40076 92439 109252 230246
-75082 102914 52785 68308 75284 24073 145132 63295 170718 78817 25088 93763 20762 36801 32505 79160 110268 124039 178230
-147333 103059 89828 111600 70768 33744 113063 46203 121099 88139 38107 73342 25048 24691 40719 117336 119847 179620 121246
-106933 132127 64195 102729 64129 50376 92971 80159 110382 75675 29131 47736 21882 22300 50501 119408 200065 190656 114398
-79639 152520 108518 67820 45452 62782 73648 69842 98512 71404 31388 84130 19802 52641 53390 199862 142174 218241 157280
-72086 225175 158780 71745 32606 64268 46739 102169 93368 67395 48596 62092 25837 26573 84216 248601 155413 233956 76926
-68461 243260 154073 83227 34792 81351 33951 165574 70516 99088 89809 52370 22804 34446 47066 195087 67014 177749 76288
-76550 178851 145387 102337 44648 87922 26561 121713 55405 57288 85800 54960 27923 41079 46904 218144 57027 188914 70547
-72204 128464 102442 117562 64866 82603 21033 128627 60321 84350 126163 45039 27796 41409 39669 158694 30367 193848 73034
-100564 91480 73956 137578 35641 57427 27318 122558 55230 63720 139797 52523 59063 43952 100050 212531 29013 120694 71420
-94043 170552 78844 211034 38393 100188 41202 107782 69426 83913 124597 49661 83368 55894 86950 169917 28180 78754 63927
-120752 87317 79462 232834 50332 116743 38742 145520 85379 89792 141284 56925 96618 72933 30905 239597 24531 125861 98383
-58160 103976 58146 173715 37873 187005 35310 155506 56435 168032 89574 53901 110900 102463 35519 260182 45314 47821 85810
-68648 88477 34204 148315 50971 207138 74057 131505 69513 162374 142332 52344 184220 124388 19671 176856 42504 79560 82618
-83035 112706 41183 58347 67191 158951 66632 91604 46642 241025 133988 93010 184345 122242 21906 266289 86410 74887 83763
-108923 109769 26511 33799 124628 53187 109798 101875 132712 221669 58140 51255 152005 134969 20465 279887 128370 51193 95482
-150170 126136 21760 29667 101674 87061 147049 61306 100572 147867 59205 49101 144936 189179 25262 219153 83516 48225 193878
-149992 116785 20607 33055 73712 62890 147635 54033 97919 186672 88146 40757 96110 215650 36858 220150 41938 59657 157729
-111528 111506 21703 27602 185526 95072 56071 69995 193008 150947 74893 69822 110555 236545 42613 236267 74080 66841 190292
-142260 93515 27817 23244 166951 38140 83987 52862 187871 126152 84411 65886 109730 202174 70255 138308 51245 58052 152914
-155522 88349 32171 20015 182712 42424 61750 51342 148248 143075 100053 58259 70130 187231 53581 194765 41749 55926 87264
-112161 72878 35198 23965 231225 36877 38857 40947 165241 109038 155609 42735 51850 143206 122529 138035 40654 35048 110407
-140764 71698 20452 21244 174290 42307 45417 34236 105774 83459 94643 38567 34977 186007 125981 127372 62702 27608 120742
-108948 81841 17732 27051 173295 41873 28243 26460 135478 61210 114957 53878 37668 172785 166804 78057 78619 35536 138288
-113073 32783 22984 30571 115327 47715 32675 25518 108976 68482 152058 46067 52528 141335 191648 23603 59341 23242 170398
-107236 23570 44547 38424 99575 71176 31657 32829 92199 78881 90997 30636 64066 228099 159824 15584 88470 36576 126729
-66375 30303 25633 24745 55182 104048 59096 16187 101363 46931 91535 19974 125644 134850 242733 30879 115265 36916 131925
-56784 39446 39136 19962 34723 69656 36003 39795 66329 52553 69055 41496 75281 141791 205141 12809 88871 35300 64964
-98647 58297 66811 24759 77448 47983 26850 34457 62294 58408 97974 27008 39367 136235 219110 18288 93167 52973 97046
-67369 68698 102515 36527 81535 29374 63688 28379 71811 78820 103063 23024 40547 153923 181833 21745 75647 58659 120548
-77792 112749 168947 23592 53626 25481 62592 28677 61106 96798 99621 16892 44439 176991 145844 25634 183587 83480 144521
-57869 93595 144211 21312 47454 49524 67721 35846 62663 95432 63113 24292 77396 246384 101159 24591 139599 114385 116443
-48288 157587 158870 25396 57941 33587 103488 37902 92296 95052 76429 12880 59575 228786 111451 33734 177549 156423 109194
-82764 95422 187976 72885 84346 33069 160532 33480 79988 67744 61629 16927 66975 191380 137971 57276 204029 172865 242136
-186345 172677 186571 50759 42506 28943 143795 15444 103973 42746 115408 16032 73898 238933 208162 143702 151863 63495 216716
-165085 184580 141174 59583 53009 28809 95533 20506 96713 58025 156806 12873 74321 142970 199965 135681 234693 59734 167058
-187019 149378 151675 47767 41394 29319 115121 20360 36986 56069 87933 16016 84071 103298 179912 121672 148505 35194 160702
-162951 116706 209819 138896 77376 69132 79424 47354 60531 111954 58306 45758 67410 159945 150236 101716 84719 32217 103787
-170015 144714 210029 125548 68822 108774 55639 46027 118914 64323 57431 28153 107160 93147 177723 87765 71956 47521 66369
-186813 106948 242391 63992 68411 176372 105146 46405 160285 107992 51894 55869 102766 181157 170482 108203 73555 30995 50321
-187369 109168 221275 48629 39589 236717 115038 46067 147300 128892 41840 78361 106128 136111 148958 108532 103066 21693 35200
-206292 143587 249382 48422 43965 261093 136768 71030 72462 63875 51035 184261 163457 161627 174690 76968 181440 35925 43899
-222063 154877 248345 111721 90643 136847 167250 209301 97333 62597 79430 133224 125795 118835 169106 60027 226056 50335 29070
-203176 103503 259531 89263 81718 137319 280092 172646 126687 50653 132603 95786 228509 62650 189832 39235 190061 58813 64650
-226526 135781 205366 88485 122957 104144 213219 104618 131264 34128 101170 90625 153039 138208 128694 42895 146628 79582 43953
-178934 105485 161877 104548 153247 90707 148122 61371 207085 26019 124099 153254 187726 114100 112951 66493 130286 46604 48583
-90495 95501 201695 145758 200311 59944 193832 44454 221202 39012 125989 101549 178797 96022 111799 60439 137729 88105 65454
-140478 104576 225152 245119 139956 73182 203637 30008 164235 45633 89824 145191 171631 141952 100772 72965 83352 105656 193584
-75997 128103 220076 166243 85150 88348 225056 25491 91096 54873 87173 151455 189107 65539 63209 60833 75347 125360 170172
-51481 104070 151809 150420 114239 56505 165431 30704 62588 30493 75017 219243 204752 52166 31690 74871 159517 189358 63273
-17664 110555 123087 61302 72193 101120 97370 25380 52556 34018 36791 197857 141042 46693 47684 64408 184239 196916 23568
-25232 122498 101034 47732 44818 95177 45265 23423 34854 26152 33162 226137 107074 18545 38188 22938 198671 187782 23237
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
-3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
+791 287 803 684 830 1520 602 1619 1070 1115 822 1026 430 913 1171 756 520 598 857
+972 473 695 557 502 964 620 856 947 1160 625 660 596 413 713 511 883 575 550
+1040 632 622 579 636 644 554 783 838 644 862 966 687 506 787 506 677 474 434
+648 646 1056 505 490 549 643 394 604 403 461 752 669 364 617 849 667 470 368
+621 621 987 525 426 575 313 580 878 708 686 474 291 482 556 433 693 421 163
+601 459 591 714 378 1108 392 312 559 815 785 303 429 500 582 447 588 385 521
+609 373 795 412 470 593 546 396 604 697 692 282 850 342 427 840 302 514 396
+539 594 424 617 441 774 463 310 293 863 622 330 429 304 484 376 583 429 379
+660 503 465 392 529 482 403 313 229 574 492 159 487 614 266 492 532 307 554
+348 630 329 355 660 831 335 472 362 591 498 245 272 480 316 363 351 392 224
+268 521 490 265 383 879 663 435 334 449 194 293 343 316 307 616 513 238 399
+434 463 383 170 368 530 337 459 331 950 309 312 594 256 328 280 398 439 620
+342 504 434 410 425 472 556 466 276 443 179 364 297 470 250 453 270 196 481
+350 393 397 426 234 382 602 387 190 390 271 129 193 289 402 146 517 499 344
+281 473 572 309 362 324 662 224 359 257 422 210 365 329 285 278 387 415 817
+229 364 465 426 351 470 464 352 476 350 258 378 355 267 240 378 402 307 819
+271 360 491 188 566 456 814 221 408 226 463 430 409 207 338 238 354 217 378
+303 358 386 327 347 211 377 161 471 396 348 457 187 199 461 281 542 438 314
+340 373 341 108 411 372 517 463 316 205 329 150 390 226 291 263 308 487 299
+401 351 364 316 401 472 371 406 379 223 449 157 371 420 352 338 386 285 510
+391 257 357 283 265 216 379 253 341 412 228 251 461 366 211 357 145 231 238
+238 237 421 327 304 281 384 327 276 373 530 251 241 278 156 361 193 400 464
+266 187 224 383 273 379 454 447 232 262 360 415 250 245 380 262 277 330 226
+288 386 312 190 371 334 353 345 400 330 519 153 454 178 299 540 336 299 240
+286 273 296 229 271 505 418 298 420 153 360 349 229 431 268 192 152 327 362
+349 289 262 226 273 316 313 231 318 365 303 194 236 263 297 232 256 380 256
+215 211 200 295 259 174 171 207 224 214 223 314 331 253 326 211 309 270 165
+200 280 217 280 348 268 283 421 327 221 289 411 283 189 309 229 219 637 417
+208 233 223 221 215 219 232 352 201 376 206 219 279 129 233 354 219 308 287
+331 291 207 261 244 284 306 281 250 293 285 394 257 226 288 283 213 382 173
+259 368 292 312 160 267 452 138 294 336 224 264 153 214 314 252 327 127 212
+437 367 237 227 225 241 405 275 197 280 206 187 318 364 318 194 203 222 262
+262 156 266 129 218 234 216 208 224 236 181 173 206 381 311 299 157 129 133
+198 182 234 188 232 143 287 271 217 238 196 300 227 200 223 424 289 115 184
+201 115 276 234 188 196 130 156 236 241 309 133 242 249 239 344 282 252 252
+246 211 263 276 302 107 163 152 332 218 230 209 310 215 261 322 251 275 144
+192 251 191 143 195 141 195 224 231 108 280 211 265 221 205 246 252 215 141
+225 161 232 369 348 307 208 152 277 165 240 305 335 149 257 302 184 272 164
+204 226 284 126 261 148 191 216 235 222 257 426 174 153 172 280 274 196 209
+147 222 149 190 240 291 220 173 284 141 84 203 176 202 193 97 179 163 125
+225 289 309 131 189 255 181 219 260 198 318 460 286 278 298 341 201 234 178
+190 376 362 156 230 158 188 373 257 295 123 217 186 163 294 232 231 244 314
+345 424 176 165 228 325 213 274 295 242 209 257 147 333 155 318 457 156 144
+305 217 244 220 187 175 189 354 331 213 275 222 232 168 300 470 248 332 291
+185 559 191 215 291 264 310 274 221 287 274 280 215 166 202 190 206 297 270
+216 330 230 285 364 315 227 379 174 283 284 215 156 279 321 233 345 164 268
+156 318 228 228 247 383 271 138 371 299 279 256 297 207 178 452 354 346 304
+398 278 227 464 348 327 308 274 255 260 324 379 258 276 391 338 232 298 313
+309 270 258 411 376 298 478 232 233 322 230 390 251 377 399 228 271 366 341
+323 365 222 413 255 355 381 505 346 321 400 302 363 314 416 395 497 375 384
+430 517 517 634 555 248 538 344 373 301 377 281 404 316 411 673 473 537 322
+273 357 527 433 429 335 698 466 435 442 345 654 435 257 138 344 369 320 545
+483 500 529 529 254 295 575 370 539 317 515 608 310 431 596 198 323 446 518
+348 284 352 759 428 442 338 357 471 289 437 646 549 342 451 474 244 596 482
+601 487 432 511 315 511 925 661 800 380 630 393 397 358 661 387 407 567 455
+599 388 559 664 610 364 528 352 454 565 772 544 662 538 317 551 653 563 371
+592 841 900 525 538 279 500 308 333 419 632 779 444 364 233 402 521 580 698
+579 840 719 466 568 377 307 588 746 764 304 470 701 288 465 407 908 651 552
+331 421 755 682 500 683 439 355 834 503 509 1112 315 488 768 431 622 520 418
+437 578 615 728 317 399 652 616 266 610 537 660 508 692 588 359 292 531 369
+642 545 375 714 340 548 742 503 512 492 555 574 396 621 284 216 509 592 385
+515 579 530 589 499 359 654 796 381 387 422 504 288 458 649 226 847 562 410
+554 859 436 483 386 670 460 635 552 431 615 355 556 615 466 372 291 442 215
+631 776 258 451 328 226 423 563 464 366 433 434 510 355 418 381 494 394 248
+567 562 435 476 485 340 594 418 525 542 613 487 643 335 370 391 406 780 755
+351 790 335 359 509 525 326 462 258 592 424 377 385 413 520 251 276 576 442
+524 708 563 477 361 325 580 653 491 271 641 438 425 506 467 306 537 549 434
+436 659 689 193 266 423 493 274 571 281 353 326 227 408 433 241 415 343 352
+377 484 253 405 473 248 470 312 510 392 511 199 406 587 264 304 412 258 563
+322 454 401 415 293 380 196 439 414 616 525 381 372 467 412 537 475 397 689
+491 527 464 459 147 417 172 277 444 412 435 501 420 492 232 331 480 437 386
+461 609 572 531 258 358 541 277 425 393 510 320 259 411 299 285 333 473 342
+256 402 349 541 402 391 355 137 459 321 368 274 459 620 271 497 329 413 257
+419 493 480 312 423 340 368 197 229 335 458 259 285 693 360 540 446 325 363
+217 279 379 346 446 510 427 154 429 323 550 438 360 502 299 376 377 251 258
+221 490 385 388 506 301 349 277 337 352 358 320 422 285 380 353 238 405 217
+389 321 296 508 510 383 327 246 332 196 430 443 305 234 326 273 282 364 166
+286 466 468 253 316 183 348 403 380 392 236 544 540 404 312 409 244 231 369
+468 429 388 261 403 337 324 314 266 270 269 263 228 286 375 208 320 303 380
+426 346 301 421 243 259 350 277 165 233 263 305 401 344 257 353 241 224 202
+243 216 480 283 291 228 297 231 249 383 308 272 296 340 145 391 311 165 349
+309 383 322 371 353 222 274 258 307 356 327 242 267 393 292 213 267 210 246
+235 240 310 196 303 151 322 245 232 360 356 262 347 192 322 137 201 364 299
+349 388 245 193 161 324 226 224 426 218 228 290 335 208 229 467 284 498 213
+189 266 330 156 254 291 269 191 267 188 137 309 196 229 232 250 242 283 269
+193 269 184 295 164 328 168 224 362 303 246 202 156 181 164 346 137 336 191
+323 209 230 250 202 264 226 230 171 211 235 375 294 249 227 119 294 193 212
+188 280 226 173 301 113 292 203 234 351 118 212 320 169 265 246 282 186 343
+249 246 185 130 219 356 216 349 255 240 261 216 187 176 251 220 207 352 116
+237 264 186 213 237 313 283 254 235 279 317 97 202 175 138 123 262 158 200
+137 274 506 266 230 298 252 237 178 168 168 228 262 294 337 264 248 302 162
+222 348 301 277 138 155 317 164 259 144 294 250 196 143 335 198 174 231 243
+206 261 259 257 258 286 230 277 270 224 336 297 330 143 226 143 316 235 273
+160 190 147 256 114 321 195 169 249 280 252 186 169 189 345 183 299 304 226
+289 237 190 297 262 325 191 203 284 247 253 316 346 203 205 166 213 313 326
+162 223 262 216 239 176 278 143 279 142 200 250 236 133 251 273 189 330 183
+139 158 172 122 170 142 233 223 251 164 291 220 174 247 267 266 199 221 262
+206 154 409 227 315 161 175 207 188 327 205 321 251 253 278 243 228 148 206
+195 385 201 215 258 237 186 132 288 261 222 333 237 171 168 219 204 215 238
+173 221 255 207 233 168 199 206 175 349 236 238 238 285 261 183 184 198 212
+256 253 190 266 309 157 295 140 214 147 174 211 252 173 186 325 208 228 220
+117 207 117 161 275 223 248 316 246 220 197 221 202 183 175 391 196 136 273
+193 160 277 224 147 154 136 197 195 240 184 119 201 203 178 235 207 180 268
+193 213 207 160 238 188 127 206 222 146 186 294 232 204 149 189 144 161 199
+206 143 274 185 260 202 256 130 183 210 172 141 173 193 146 218 317 223 128
+169 141 132 115 256 137 290 221 232 117 158 204 184 159 197 163 231 222 247
+135 196 148 256 155 143 231 174 139 198 142 153 221 261 114 108 154 147 337
+162 238 207 205 173 229 292 189 110 169 201 136 125 205 153 138 197 87 140
+124 178 155 104 218 107 320 148 136 106 127 201 99 165 105 253 108 136 127
+190 184 78 115 82 255 171 100 194 166 134 156 121 160 223 169 201 236 182
+117 122 97 75 96 108 203 106 136 149 216 173 216 164 228 122 104 145 139
+154 165 154 155 172 86 168 82 133 167 159 171 189 149 181 154 117 198 160
+169 238 86 69 125 123 142 174 135 147 149 215 241 137 115 175 173 95 176
+126 140 137 130 81 149 133 182 129 107 127 161 122 121 157 153 165 92 74
+166 192 85 125 97 115 118 142 124 174 134 153 132 240 162 125 129 72 80
+67 241 194 137 98 118 149 92 80 144 164 141 166 141 160 109 106 91 138
+213 168 150 126 133 89 130 111 112 94 97 189 95 143 141 133 150 95 125
+152 136 112 143 136 162 138 86 182 126 90 101 154 119 84 124 103 99 126
+122 97 122 99 118 159 91 93 143 170 123 112 122 136 190 178 51 102 122
+212 125 89 154 116 161 146 107 116 158 189 209 94 169 160 130 182 173 132
+160 130 123 135 111 144 150 160 96 116 123 164 105 143 209 155 84 117 123
+167 154 108 132 100 120 137 157 87 210 107 207 111 186 135 140 124 157 85
+175 102 165 153 134 131 173 97 85 90 128 179 106 65 119 160 162 143 144
+188 133 121 187 135 195 131 217 70 168 104 197 106 178 154 199 101 75 123
+140 250 150 119 136 117 177 157 179 181 170 236 132 155 83 127 198 156 130
+163 166 125 146 194 153 175 122 145 129 163 176 158 159 151 150 113 112 79
+161 184 113 121 260 272 217 180 204 119 128 167 230 146 177 243 127 119 177
+114 195 160 203 189 262 213 162 195 206 132 273 93 227 167 187 231 163 138
+151 290 144 212 128 254 183 211 132 134 113 148 99 90 171 148 219 147 204
+117 218 148 212 145 207 164 225 289 205 140 282 150 133 158 120 80 114 180
+351 144 209 203 200 301 177 150 184 171 185 269 281 142 157 132 377 141 157
+186 231 192 209 206 206 198 138 212 312 176 210 118 210 133 135 128 118 101
+197 271 267 241 141 207 251 122 220 149 248 271 178 241 169 169 272 169 215
+135 180 357 214 163 144 173 116 214 197 105 163 105 223 220 204 247 301 218
+290 107 151 166 150 167 274 262 300 248 164 262 152 194 161 252 284 170 203
+280 114 177 219 207 196 151 191 203 261 186 150 118 155 219 269 215 188 205
+314 123 253 178 196 276 193 215 167 249 274 169 238 262 217 142 278 177 232
+246 216 252 197 161 280 205 285 183 296 255 208 212 258 149 293 185 253 259
+235 175 222 177 170 249 316 171 354 221 198 294 207 164 223 273 212 219 234
+340 229 184 179 325 280 170 242 311 148 253 280 183 303 216 137 315 286 253
+152 251 154 276 329 263 172 290 319 216 179 221 255 216 172 291 180 133 245
+253 191 123 285 196 306 312 194 356 224 161 244 397 153 254 313 220 317 200
+188 188 256 248 219 295 237 289 164 174 220 375 365 166 211 241 253 289 347
+150 220 248 148 237 294 272 305 340 215 230 149 182 290 270 248 249 277 225
+269 272 211 219 205 281 178 385 208 170 238 325 179 232 161 236 295 270 266
+342 300 208 290 387 338 299 273 347 186 166 248 427 233 218 299 241 317 234
+216 248 261 135 258 204 251 296 263 266 245 345 228 196 286 315 348 260 262
+208 231 204 246 160 212 362 330 236 225 360 233 204 281 295 242 290 326 158
+322 163 263 128 305 302 286 269 392 282 223 259 384 336 209 203 300 372 216
+310 129 328 325 341 295 258 140 195 160 252 250 280 273 302 232 190 137 275
+282 299 325 297 276 373 189 198 281 154 233 299 360 328 185 322 309 274 289
+286 258 359 216 313 301 209 181 355 293 346 285 211 316 240 256 301 195 157
+175 172 219 226 261 286 300 351 309 312 216 441 340 237 270 621 223 198 252
+229 193 287 292 342 275 198 231 199 341 286 208 224 350 381 381 250 181 232
+498 222 330 344 403 174 310 196 348 198 209 181 303 250 333 126 275 385 306
+218 362 298 395 230 304 224 290 276 311 283 257 218 267 151 399 470 284 351
+189 249 201 284 227 368 374 257 358 332 168 274 286 303 334 339 425 176 410
+394 379 366 181 215 279 370 244 323 202 223 222 205 344 206 441 332 238 260
+197 184 293 309 173 183 313 218 290 287 267 269 265 253 253 397 253 173 241
+223 181 172 244 405 260 296 207 296 272 238 234 223 208 284 304 423 184 305
+313 283 220 122 397 200 210 345 211 194 178 199 210 161 239 298 270 210 261
+263 253 126 209 256 140 180 200 201 251 312 254 261 251 181 401 265 140 243
+322 192 240 294 357 151 128 372 96 179 231 325 253 232 202 311 349 188 212
+253 241 163 258 199 233 285 236 306 213 167 100 320 245 159 201 388 240 269
+335 284 220 229 167 324 265 358 211 236 356 317 210 311 251 168 347 170 231
+220 366 236 367 280 219 136 220 210 293 304 329 496 211 290 300 410 316 321
+210 239 176 230 175 287 282 348 197 362 153 242 339 178 327 347 276 116 257
+330 159 401 194 259 271 154 303 204 179 248 155 191 367 259 327 234 300 167
+283 332 407 326 261 218 341 164 283 378 127 233 267 262 269 279 223 241 157
+307 267 484 291 198 248 367 207 202 473 261 341 173 176 210 165 216 300 159
+311 187 441 227 185 445 490 116 250 267 211 360 178 254 301 250 332 255 214
+209 342 258 367 287 351 304 242 354 320 372 345 226 363 281 296 471 247 446
+234 444 198 265 279 218 439 176 289 405 300 412 283 267 207 353 395 332 213
+345 396 198 284 219 748 301 300 265 256 268 345 417 199 391 169 272 303 529
+498 283 146 286 235 348 485 425 292 411 315 458 256 346 342 342 254 407 347
+463 345 318 552 314 543 224 374 239 334 267 284 220 323 365 300 532 382 322
+821 580 329 290 388 652 398 227 180 301 392 761 320 417 434 236 272 362 338
+838 938 287 379 254 295 222 397 324 411 358 616 575 407 492 440 404 512 367
+483 752 635 276 436 442 539 189 470 460 416 561 527 484 544 523 287 451 525
+281 455 751 348 311 284 371 523 537 490 532 313 500 473 382 405 394 626 552
+528 601 349 352 366 487 600 800 354 521 483 562 543 435 645 451 639 985 415
+451 746 517 430 576 815 626 378 344 225 572 351 678 337 455 357 573 1305 490
+723 485 494 290 545 414 299 289 700 426 629 640 588 465 715 635 482 811 625
+497 956 467 946 755 858 500 698 462 436 421 505 600 710 929 393 463 658 615
+617 520 566 805 703 671 580 658 588 911 748 736 610 722 761 728 593 883 422
+1039 424 567 450 643 731 811 316 759 639 651 494 695 970 611 287 1098 814 717
+761 441 539 325 950 277 733 927 506 507 676 799 853 548 676 730 425 305 848
+608 682 484 288 583 343 1041 733 804 408 388 679 277 793 482 565 1020 923 1093
+600 371 494 459 738 785 925 761 512 329 637 653 561 809 752 681 647 390 940
+715 707 456 466 501 358 910 489 484 604 408 613 670 685 498 318 657 655 605
+821 680 523 706 930 440 633 559 449 847 533 372 723 532 605 988 845 539 433
+512 599 506 558 426 522 827 453 547 628 378 620 386 469 347 508 641 447 640
+853 643 565 720 741 536 560 433 463 571 281 548 495 202 473 582 466 511 333
+455 566 555 453 896 374 362 393 368 293 613 391 482 636 656 497 524 482 325
+272 414 408 526 553 570 305 480 580 431 731 717 420 639 806 604 447 532 402
+180 537 445 440 451 401 312 351 404 437 540 497 365 412 581 493 449 328 498
+846 485 614 846 690 390 497 620 477 285 490 316 505 383 697 526 542 658 417
+439 873 624 436 595 416 355 530 402 562 495 467 356 531 329 407 333 505 284
+456 505 289 712 538 159 422 443 416 228 180 493 481 429 282 558 456 308 528
+504 368 464 592 539 349 266 529 822 669 489 354 686 378 546 461 319 469 300
+495 442 246 669 493 414 297 335 366 363 737 455 347 366 447 444 340 416 414
+390 470 355 336 651 455 635 392 319 411 554 445 354 504 430 337 247 511 444
+354 395 472 515 424 481 639 404 500 226 466 364 455 726 432 457 254 384 410
+582 436 418 283 421 265 384 619 301 405 418 434 574 297 269 499 434 436 880
+323 425 445 394 437 366 431 456 328 328 405 269 463 371 500 380 401 399 261
+557 399 430 353 300 302 358 505 221 416 689 269 693 677 434 449 422 408 717
+592 304 265 271 487 434 255 317 265 520 346 422 346 622 660 494 462 317 401
+372 323 409 391 571 500 569 603 409 210 370 516 435 293 620 471 359 262 588
+431 513 345 309 709 399 610 612 470 372 647 375 304 392 433 334 327 399 287
+539 471 554 290 354 297 482 400 291 394 299 217 500 490 401 418 322 699 258
+493 457 387 205 452 350 384 268 357 493 491 408 529 237 369 350 361 262 175
+469 344 382 388 477 286 418 276 539 217 438 505 221 403 374 472 364 343 182
+275 453 205 199 271 392 423 554 409 414 255 392 493 347 297 287 308 366 335
+444 264 309 342 191 368 348 534 204 331 445 376 610 256 407 353 354 298 409
+320 197 265 265 182 323 423 385 220 401 449 303 667 425 337 305 463 335 289
+384 204 352 417 261 292 631 342 223 381 439 315 373 523 408 203 349 354 379
+377 331 327 385 201 403 246 419 388 394 557 433 531 369 567 229 315 215 365
+406 509 388 255 544 350 308 206 304 197 462 212 257 259 236 311 291 299 246
+152 342 276 390 532 230 340 327 338 438 342 291 248 290 253 273 334 421 317
+397 363 237 407 86 304 387 378 203 230 278 206 268 376 556 317 373 259 320
+384 454 313 274 511 315 408 265 430 412 281 335 408 334 262 412 421 295 320
+432 313 425 330 289 304 296 179 474 319 471 258 303 431 429 274 427 391 243
+291 449 327 509 208 369 216 285 381 353 248 427 275 426 451 182 373 300 347
+330 351 310 430 672 458 239 301 529 469 369 377 224 427 713 583 361 308 221
+336 381 336 233 145 299 357 432 422 417 235 280 283 389 591 295 292 429 348
+239 482 329 417 276 340 461 459 415 231 239 317 322 328 524 190 442 284 244
+294 377 380 245 412 515 266 411 412 326 444 315 343 248 441 241 367 401 452
+295 279 387 428 294 300 311 432 382 409 317 422 376 417 328 377 322 710 405
+323 381 232 530 296 308 326 476 376 323 363 347 328 301 499 495 360 316 412
+525 366 456 280 508 592 260 317 328 444 274 259 305 208 375 325 277 320 227
+324 483 359 580 245 491 389 259 236 596 528 339 343 350 526 428 280 362 373
+584 448 292 367 464 359 514 506 427 348 379 304 592 350 411 442 490 366 406
+237 318 403 727 637 487 276 401 446 552 471 474 513 430 616 312 218 482 324
+396 526 412 364 391 315 222 574 371 348 524 338 411 372 967 289 446 551 290
+568 418 317 316 325 333 457 403 429 275 510 405 476 500 472 617 384 361 489
+582 266 278 447 411 317 470 453 343 303 351 332 516 366 374 495 281 359 283
+358 374 210 376 614 191 308 410 623 342 258 309 549 257 479 226 357 428 366
+348 526 395 254 355 604 393 417 233 573 240 377 243 374 439 341 429 419 488
+320 375 379 394 300 264 435 473 359 632 386 419 403 404 269 398 482 452 316
+319 250 240 269 447 382 325 295 253 412 511 681 400 459 312 424 443 281 257
+428 434 381 261 322 406 594 333 182 416 490 451 390 447 232 404 556 348 459
+279 388 316 333 207 382 415 410 639 620 594 439 397 535 605 367 406 237 253
+250 613 358 307 201 526 347 229 399 511 306 522 449 321 318 409 312 257 253
+379 425 357 568 319 499 227 311 426 244 328 402 354 332 363 134 342 270 294
+273 484 277 393 220 448 397 427 318 232 181 636 306 452 330 315 288 506 253
+139 586 223 563 199 304 484 310 192 243 472 315 266 432 314 324 405 441 309
+381 339 268 340 262 554 401 512 172 434 448 424 339 453 276 328 260 442 361
+240 495 277 280 208 494 477 384 320 401 163 349 322 332 262 167 272 454 304
+274 282 462 325 302 474 156 242 407 267 228 230 285 462 255 397 374 270 529
+258 362 229 148 384 420 309 207 402 211 290 178 274 335 278 289 266 415 348
+325 292 291 442 404 330 344 293 262 267 513 328 380 536 287 297 322 319 303
+216 310 352 273 351 536 268 431 226 299 477 288 303 198 143 282 284 233 414
+387 191 208 313 299 358 320 280 286 286 322 206 378 487 374 165 513 454 272
+345 320 440 311 251 352 443 247 593 465 320 301 211 514 317 407 372 362 341
+236 276 222 597 438 207 400 212 334 181 331 186 269 436 447 279 390 299 361
+282 143 341 370 231 254 484 312 404 222 370 239 151 234 241 179 230 451 222
+300 481 257 460 185 329 259 234 286 239 131 226 321 248 324 237 192 432 380
+287 306 495 270 296 355 307 302 277 251 137 177 144 498 403 704 223 273 246
+144 205 285 390 238 442 339 349 398 295 218 347 264 221 358 279 262 254 254
+232 282 193 449 356 380 224 341 356 342 261 461 242 272 350 364 221 485 466
+305 208 292 357 380 284 342 369 231 340 453 386 161 269 332 358 423 307 479
+262 136 374 294 290 197 234 431 545 353 308 177 342 284 354 618 282 461 282
+208 296 410 276 380 220 301 450 376 253 215 413 294 232 384 351 197 251 280
+296 289 243 357 237 331 251 384 321 363 281 267 159 158 657 275 312 278 358
+326 255 423 192 283 213 168 265 270 195 243 276 314 212 556 422 406 368 224
+356 208 276 360 324 263 203 362 602 207 344 435 280 353 315 339 183 339 292
+302 281 278 396 315 153 334 790 227 441 548 235 402 438 422 250 184 238 292
+250 274 331 336 350 354 178 689 188 259 336 381 285 192 195 209 230 390 344
+261 345 317 306 382 265 443 492 496 220 382 284 291 227 536 377 225 226 272
+262 386 218 313 467 506 430 200 323 370 369 298 338 304 418 366 285 452 149
+205 472 261 278 348 427 346 261 358 179 272 412 307 327 354 345 451 303 398
+164 550 331 317 448 201 322 209 315 208 363 358 280 274 309 109 291 408 510
+312 199 251 325 330 489 247 305 469 176 341 348 286 449 549 328 578 283 559
+295 410 412 277 360 373 274 417 333 413 301 332 368 187 375 294 196 293 256
+410 406 443 266 430 434 442 221 234 400 424 291 213 310 450 251 353 534 686
+422 408 501 260 385 298 501 456 238 294 314 445 263 388 311 423 368 365 425
+353 417 326 392 222 512 318 308 354 453 316 194 393 348 301 206 506 338 359
+517 338 605 263 663 240 528 654 500 316 433 384 375 324 434 516 589 265 406
+329 373 272 448 432 609 404 357 339 410 490 246 820 365 405 357 501 542 520
+506 392 465 363 382 749 527 347 367 529 515 288 447 391 396 524 304 358 400
+366 315 422 434 413 590 676 429 380 374 452 393 250 604 453 471 487 396 444
+473 272 208 432 742 866 671 637 449 569 344 304 359 704 342 402 268 737 293
+681 325 322 506 509 687 916 384 467 514 414 635 315 476 385 442 415 584 536
+309 392 381 514 602 888 884 384 567 631 291 714 450 427 465 481 314 754 820
+228 186 328 335 1005 455 481 333 408 579 479 601 555 426 332 821 329 462 787
+608 453 556 288 658 590 405 607 849 493 502 514 370 347 492 667 618 583 1017
+430 493 507 473 521 650 627 711 348 393 514 480 663 461 635 534 646 911 927
+486 430 284 317 668 623 495 633 680 552 416 1040 322 602 480 757 450 676 419
+471 456 368 333 546 522 579 300 447 383 654 559 435 859 540 548 410 486 775
+560 342 467 491 440 354 541 816 705 367 455 493 476 296 530 321 299 263 388
+633 472 430 399 417 395 284 697 405 671 806 628 408 470 295 618 668 424 458
+628 580 498 348 332 522 399 496 497 318 779 503 409 578 533 597 452 395 649
+512 290 572 512 722 327 533 506 662 630 772 529 444 523 636 348 479 375 379
+762 479 468 683 531 438 523 467 477 642 476 579 300 459 451 354 321 434 462
+654 402 391 384 339 804 375 507 703 610 516 407 803 416 350 360 462 390 437
+459 320 449 331 365 401 312 471 636 370 565 400 479 527 538 407 415 562 485
+517 221 153 425 638 322 831 334 397 338 644 391 832 366 314 289 418 303 502
+787 704 203 270 211 464 219 475 573 302 408 595 421 228 427 347 479 310 327
+533 431 390 474 368 257 371 202 539 580 345 442 491 437 666 394 706 487 116
+539 300 452 329 400 317 267 696 505 274 238 435 784 241 492 475 395 512 445
+365 243 462 363 599 460 307 334 345 588 296 525 392 461 613 397 457 239 448
+497 444 541 188 409 230 506 457 353 433 436 414 448 272 577 498 447 376 444
+272 396 555 484 231 277 451 300 371 284 503 385 752 366 368 464 487 354 295
+444 410 317 436 290 483 216 390 411 481 358 345 469 311 368 580 495 533 276
+510 372 429 212 276 383 379 493 438 300 496 654 344 366 399 626 369 347 355
+450 450 842 446 338 236 369 438 407 498 509 430 253 394 334 586 452 511 262
+562 233 339 480 373 332 617 302 433 558 297 421 472 345 381 409 490 400 333
+555 388 607 468 429 393 352 355 356 350 260 315 158 588 527 378 349 238 442
+624 609 359 454 479 320 504 460 465 667 319 411 269 303 657 309 393 576 517
+401 728 812 353 471 229 392 400 342 755 383 214 420 490 407 486 366 287 245
+319 497 587 544 536 753 536 640 285 459 448 935 462 553 450 517 554 538 334
+433 459 501 507 550 439 440 598 458 914 710 469 360 598 733 454 329 783 440
+450 579 437 679 629 513 639 643 468 383 284 576 441 372 455 601 452 873 495
+788 560 660 443 408 535 781 468 304 745 377 525 687 435 434 450 654 940 502
+795 640 565 695 735 628 840 870 311 742 861 720 674 565 320 474 538 566 610
+828 675 588 620 570 991 863 1045 759 572 910 341 669 534 319 579 663 518 763
+819 826 552 699 474 1502 1035 980 724 444 294 543 1239 695 463 450 949 563 497
+604 617 527 927 1042 791 1561 478 812 501 627 983 704 1116 800 378 800 462 583
+783 579 662 1072 1284 1474 990 1095 637 700 811 435 958 854 569 646 775 1051 636
+487 600 788 1411 1048 817 912 1117 881 416 863 396 1186 1249 661 906 712 816 1150
+1340 641 976 690 588 1032 1022 1342 1116 587 1198 592 1088 827 443 1033 642 939 705
+1113 601 1084 1123 866 1215 1056 848 1229 875 672 707 985 818 773 1335 639 1029 547
+1064 931 577 1294 663 734 596 1283 1534 1260 984 879 1090 1178 1106 1058 1370 782 1013
+1300 617 571 1075 656 1616 1494 879 1644 1404 839 824 1303 494 856 1411 811 1056 879
+1374 1055 1220 1035 1061 1918 983 1048 2224 1684 1277 811 694 461 866 1766 980 768 755
+952 735 1309 1317 906 1143 1464 1839 1181 922 1273 1338 548 747 715 1465 728 721 1287
+1312 1007 639 1365 1002 1004 879 1073 968 1274 1527 1481 1066 866 841 1052 741 976 868
+1753 513 816 1673 845 1052 1098 660 1278 1821 1113 784 847 889 1349 736 959 967 565
+1421 698 764 928 909 1119 973 988 1281 622 2006 802 1205 1256 653 689 779 555 930
+2215 1022 986 1253 787 676 768 836 978 924 1010 884 727 596 1459 690 665 737 701
+1653 783 964 799 569 959 734 759 534 1218 715 1277 761 748 593 1137 685 655 1095
+1098 434 596 1118 506 655 1326 1157 620 921 612 830 833 645 1218 480 717 454 661
+994 768 671 1219 716 900 623 836 359 869 610 708 900 736 1118 776 566 998 451
+1487 674 920 542 521 418 948 304 1001 1092 603 750 512 938 698 678 623 909 967
+958 823 394 563 451 941 799 449 981 460 904 771 596 791 1355 703 649 813 522
+1035 669 915 507 756 479 457 486 618 787 678 847 561 1143 1380 770 1034 1004 763
+430 773 655 736 832 638 604 817 436 467 1020 736 406 799 1065 489 700 337 700
+603 1038 446 491 770 318 773 688 355 814 731 604 383 1100 837 712 348 882 309
+595 507 545 553 632 527 690 412 413 717 896 863 789 640 970 791 745 1138 901
+844 389 780 681 466 1029 754 540 666 599 1062 726 643 731 707 350 411 959 529
+595 714 673 573 633 592 368 583 895 770 619 762 480 582 765 713 807 614 446
+987 763 792 568 374 814 577 640 422 540 673 833 789 375 770 632 682 449 766
+562 729 361 599 989 904 362 462 574 634 551 821 426 468 846 641 713 659 385
+791 446 619 564 531 929 604 583 447 688 743 454 578 1002 624 249 675 361 483
+795 748 602 526 413 515 676 542 352 575 534 891 637 636 964 314 482 678 263
+913 718 575 1055 1048 709 634 339 505 447 532 578 969 625 635 595 569 378 399
+818 430 823 486 1001 691 467 485 977 416 605 1040 454 490 444 478 619 599 393
+680 399 537 539 622 548 651 735 575 566 446 808 959 315 621 541 787 617 539
+311 538 796 489 737 512 529 437 503 599 362 848 245 475 461 671 594 276 418
+670 365 512 456 854 668 734 670 407 509 689 615 548 532 472 403 267 513 346
+679 450 649 430 790 439 330 377 547 862 353 827 418 721 836 531 507 390 397
+506 825 636 520 870 228 1050 554 527 301 349 732 376 610 561 264 447 489 537
+523 595 732 584 527 573 720 327 623 639 328 715 374 543 397 406 352 384 710
+461 508 461 551 824 692 306 419 512 413 492 545 464 409 565 350 386 380 953
+803 626 604 294 662 626 461 412 609 485 425 495 618 578 549 501 415 374 243
+569 562 503 350 298 499 476 595 607 463 564 614 486 397 621 229 568 501 494
+418 461 643 635 396 415 1052 565 707 508 524 1135 464 429 639 414 611 517 655
+602 692 311 428 464 495 301 432 552 259 509 398 648 533 469 463 414 588 763
+537 609 452 218 739 822 426 539 671 437 365 504 517 450 453 588 378 561 593
+757 465 477 607 452 646 431 345 813 269 481 514 576 570 834 571 486 255 523
+678 775 399 539 468 391 260 575 275 423 638 714 1047 396 303 578 464 574 537
+630 753 630 459 536 545 596 442 545 701 314 666 275 193 356 714 434 746 429
+538 857 520 369 442 368 565 327 409 1033 251 781 449 471 447 521 948 558 368
+400 609 520 596 428 521 225 580 417 591 657 764 594 614 356 461 498 476 588
+580 457 479 358 616 345 552 495 481 534 483 432 496 462 424 445 770 271 489
+777 776 765 552 490 566 373 377 261 341 672 194 617 293 459 337 797 522 514
+911 552 552 222 801 437 532 512 356 507 389 743 389 396 608 319 315 264 331
+618 696 639 499 511 770 719 401 728 842 561 593 428 302 472 539 730 502 601
+519 635 711 505 170 389 639 547 526 534 386 443 386 376 608 517 471 466 733
+522 463 702 410 256 542 482 351 565 542 583 641 473 415 657 349 408 502 675
+519 400 391 478 438 368 433 425 508 482 455 480 368 487 521 266 429 155 645
+387 379 517 457 646 467 556 345 284 705 483 374 487 528 441 291 415 361 502
+497 541 508 287 397 266 722 376 464 511 409 416 385 643 455 446 573 302 710
+482 635 723 370 466 682 832 753 899 548 338 834 396 538 297 677 191 666 399
+492 503 527 398 634 659 600 269 436 484 370 750 467 336 551 357 398 410 539
+411 236 390 369 405 450 420 449 193 472 303 612 404 409 475 434 373 660 472
+344 350 452 441 411 524 286 448 661 337 441 570 829 344 323 740 297 293 509
+347 509 477 638 529 402 443 172 277 489 485 445 472 489 657 344 345 364 415
+429 331 562 386 355 401 241 422 519 722 430 403 314 383 344 487 557 481 491
+357 349 340 270 296 459 573 333 541 311 396 402 376 527 467 325 447 472 185
+254 442 392 229 603 481 456 349 426 466 189 516 410 683 559 476 384 453 494
+577 562 527 220 506 589 455 467 451 305 228 713 369 253 435 230 441 324 783
+524 462 452 367 668 309 283 424 346 312 322 446 446 353 539 770 430 516 348
+397 367 438 277 523 416 333 434 547 554 274 532 284 482 482 400 301 532 445
+192 397 289 464 321 597 268 382 444 415 345 476 398 398 211 461 377 548 290
+659 396 602 458 516 436 358 484 536 566 313 719 272 690 444 454 390 551 773
+772 863 390 506 540 408 595 483 439 292 379 430 250 351 520 369 505 366 474
+600 658 507 511 473 320 625 415 315 338 455 683 334 627 602 342 323 426 250
+848 373 286 440 291 473 485 402 472 424 252 350 358 467 412 182 405 451 363
+355 591 273 393 334 376 217 273 559 421 427 739 517 502 396 260 370 353 232
+463 902 434 264 264 634 433 700 392 439 330 285 439 485 313 398 441 562 910
+281 569 476 349 420 628 521 553 298 542 418 415 451 577 664 564 380 364 577
+276 385 470 447 436 444 610 641 551 297 396 491 356 382 867 534 383 835 351
+612 286 530 408 386 554 455 237 534 178 381 337 487 589 397 554 330 471 526
+314 308 501 365 403 408 391 616 655 482 564 256 681 434 406 421 553 258 360
+394 797 630 395 359 488 602 312 514 499 529 408 762 581 378 579 243 532 569
+465 573 585 568 350 468 964 283 392 564 280 382 427 551 446 565 516 473 537
+658 468 501 337 496 380 854 345 251 410 532 353 275 316 465 670 600 356 484
+711 337 406 334 664 534 680 310 571 397 713 355 851 517 387 366 658 427 431
+461 410 522 354 390 800 665 356 508 614 913 510 534 561 473 473 836 229 353
+772 700 802 596 698 595 1161 414 466 739 622 728 611 582 468 451 1023 512 646
+461 690 463 554 529 676 628 414 678 878 834 559 590 478 609 590 1000 619 676
+955 867 993 738 451 608 557 796 482 519 635 678 610 549 427 501 887 559 1275
+733 859 699 631 388 749 846 639 568 748 567 700 620 989 783 464 1126 928 743
+937 1303 836 777 981 899 945 695 452 912 752 571 1068 724 675 710 1165 938 575
+574 1190 785 588 728 948 1243 688 510 480 1146 1073 1211 632 712 513 906 1355 874
+755 733 918 1024 1164 724 492 870 989 880 1201 893 932 484 382 846 1072 1898 859
+842 1244 1554 1197 1164 871 785 1020 962 786 700 1303 891 814 909 1671 864 990 1114
+706 677 1053 744 1132 1123 1276 1777 1350 862 670 1430 1494 1290 836 1081 950 1703 1241
+716 1049 851 2201 699 1461 996 1808 1251 780 1547 1403 2476 1184 675 1497 1212 2071 1438
+1319 1090 737 2467 1019 1436 1186 2308 1966 1366 1138 1521 2222 1332 1260 1712 769 2713 2291
+1266 1655 1837 2177 1254 1259 2287 2363 2429 1231 1420 1604 2836 1389 1207 1461 1563 2468 1541
+1070 1220 1029 1864 1472 1357 2177 2145 779 1064 1476 1627 1285 1600 1603 1252 1501 1528 1638
+1838 989 1214 1915 867 1370 2492 3277 1991 904 2142 1272 2453 3376 1265 1982 951 1170 2098
+2490 1855 1973 3730 1869 1685 3020 2004 2563 1614 2879 1553 2010 2303 1563 1416 1673 2712 1697
+1495 2145 1180 1143 1859 951 3032 1266 3569 1291 1181 1700 1477 2067 678 2122 1704 1437 1992
+2229 1041 878 2499 2567 1913 3386 1218 7121 1739 1586 1928 1174 1829 1175 1165 1451 1427 1403
+1238 1952 952 1575 1362 1947 1082 1379 3631 1923 1167 1566 2082 1710 1795 2104 861 1331 1877
+1260 1600 1056 961 2901 1044 2884 1268 2746 1702 1782 1222 1284 1680 1998 1712 1134 2137 2381
+1276 2229 1037 1331 1629 1266 1014 1402 2689 2029 1354 940 1823 1228 1757 966 925 891 2067
+881 2307 1179 1433 2797 1501 1745 1066 1178 1452 2274 938 1510 2727 1563 2135 818 1013 1229
+621 1740 973 859 1728 1066 863 1322 912 1327 1406 1451 1705 1455 1097 1014 1065 1079 1950
+730 1034 1046 1073 1964 1197 997 929 1544 1142 1182 1610 1052 1911 1012 1460 1161 1349 1665
+1077 1436 597 1264 1221 1570 865 578 819 1127 1101 1192 1113 1315 977 1102 698 863 911
+1117 1294 872 1751 1392 1458 994 859 902 1501 1212 1206 1190 1889 1256 1027 1112 1293 1717
+1180 1185 1032 1114 1309 1037 980 856 753 1468 1335 1119 1264 1192 1190 722 1021 717 1179
+1090 1153 1156 1969 1236 665 811 1073 617 1447 1562 589 986 1571 1332 1279 1240 1362 1376
+1342 708 903 1963 1256 1084 490 949 888 1127 1655 1303 952 663 1232 1341 597 1489 2582
+1092 969 1385 1977 838 914 871 873 593 1047 1756 859 418 782 1220 1326 780 754 995
+705 829 936 2115 551 1216 942 1427 1055 1386 1528 780 1109 712 1255 1369 1044 848 1314
+876 771 888 1642 1305 902 919 1273 1059 1389 1675 948 471 1015 623 995 870 800 792
+1054 688 1007 1240 732 922 718 710 818 837 1452 1263 987 1067 693 1032 787 986 831
+959 1217 1075 835 709 521 835 1074 722 898 1274 1026 985 1441 834 866 443 1009 1738
+830 877 750 1333 1735 584 1087 1042 1026 733 910 1326 909 1207 1307 1238 978 1101 1751
+1106 763 1135 1734 1047 1178 1160 579 1209 1061 1246 919 1279 1100 1150 750 639 1368 1449
+1365 989 831 1808 1346 672 1022 1342 1301 951 1220 1040 1623 828 1311 722 1345 808 1337
+1089 1053 756 1706 1059 1053 1396 823 793 956 1309 1127 927 1292 749 1428 1331 752 1235
+1134 1208 754 1372 792 1019 1193 1581 1214 1307 1296 873 1278 2235 1548 1064 904 1253 1375
+1059 832 1471 1544 1070 677 1138 880 1467 1805 1808 1140 1295 1605 1462 1157 1039 856 960
+791 1574 703 1633 565 981 1273 930 683 1265 1181 1537 1427 1262 1500 1106 1324 1019 810
+1081 1673 593 800 1176 1192 1064 980 882 1084 1448 1451 1665 2492 1475 1607 1269 1187 1627
+845 1176 798 1256 1493 1198 1404 1484 1020 1590 1095 1102 1079 1236 1623 1942 799 1344 1674
+1530 1336 1518 1094 950 1562 867 1034 1484 1197 1112 1582 1879 2695 1289 2173 1075 848 1307
+1680 1744 1407 1831 1371 1005 1690 1791 1550 2547 2215 1309 1712 1814 703 1770 1688 1524 1378
+2715 1327 1449 1131 1340 1224 1109 1226 1656 2072 2168 1580 1364 2449 1121 1818 1363 1922 945
+1482 1621 1235 1589 1509 1174 1618 1207 1865 1691 2627 2481 2677 1416 1473 1618 1502 1461 1200
+1735 1302 1453 852 1019 977 1302 1314 1480 2463 1307 2037 1456 1660 1133 1887 1090 1684 2668
+1955 1118 2094 1356 1188 1049 1250 1617 1958 1730 2199 1616 3277 1408 1168 2064 1096 2523 2741
+926 1212 1093 1039 1444 1507 1526 1040 1565 1348 1853 1757 2704 1915 1541 1405 1060 1600 2241
+1875 1560 1182 2739 758 1559 1715 3116 2291 2129 1383 1824 2281 2792 1196 1947 1280 2004 2293
+1968 887 1791 1984 2397 1197 1390 2188 2032 1645 2773 1230 1006 2084 1652 896 2057 1755 1738
+1332 1013 2563 1899 2148 1732 2405 1992 893 914 1808 1256 3166 2960 2667 2029 1250 1140 2206
+1513 2579 1624 1767 1589 2004 2647 2484 1463 1636 2066 1588 2453 1778 1203 1442 2914 1474 1296
+1151 1836 2598 1785 817 1706 1799 1884 2196 2619 1820 665 2077 3660 1618 1638 1776 3495 1614
+787 2862 2096 2644 1493 2207 1953 1994 1392 1573 1949 1136 2763 1359 2223 2643 2062 2032 1284
+1880 1969 1781 1885 1964 1129 2055 2259 1595 2259 1081 1458 3457 1696 1517 1971 2603 3178 1900
+2802 3177 1595 3663 3293 2409 1243 2180 2036 1456 1930 2022 2530 2662 3388 1189 1387 1825 1244
+1368 2816 2640 2877 2980 1934 1419 2075 1494 1721 1399 1525 3019 1597 2503 2317 3435 1243 1172
+1350 1844 1096 2122 3758 2040 1921 2712 2214 2909 3186 2297 1849 4674 3578 2095 2315 2463 1686
+1900 4125 1762 1751 4869 2380 2013 1697 2411 1444 2290 1265 3803 2383 2994 3593 4219 2477 1872
+1928 2418 2241 1961 5691 2581 2167 1820 3068 2994 1977 1897 2632 2983 3377 3376 5817 2207 2783
+2578 4126 1977 3758 2952 2067 1862 2761 3600 2164 2784 2089 3508 2580 2200 2443 4796 1971 2236
+2828 2369 1913 2118 2799 2614 3025 1280 4340 1853 2615 1726 3234 3585 1756 2027 5228 2103 3245
+3349 3028 3646 1830 4173 2756 2388 2300 4807 2648 3294 4216 3847 4101 4266 6944 4352 3586 2826
+1842 3257 4273 6508 6782 3037 2736 980 4135 4106 2253 1973 4374 2624 3357 4922 7548 2980 4218
+4912 4205 4099 4943 4525 2668 3638 1896 5107 5471 5196 2552 3231 1415 2622 9059 4750 4413 2570
+5398 4613 3025 5950 4047 3442 3094 2634 4646 5394 2936 2952 4495 2574 3741 6763 7495 2592 3777
+5003 3318 3360 4777 2962 2141 3721 4497 3470 5644 2105 2600 3604 2854 6404 3806 4363 2584 3044
+5069 2355 4794 7643 3154 3170 3488 5434 2137 2963 3050 4385 5310 2053 3059 7202 5916 4557 3214
+9781 3391 3746 7499 3202 3188 2779 5954 3747 3461 5130 3211 10408 4378 2784 4997 5843 4081 3159
+9424 3950 5497 4875 3271 3922 4452 7377 5477 2850 6884 3824 7172 2103 2340 10286 5391 4326 3063
+12488 2328 4234 12688 2715 4136 3358 7985 4982 4024 5341 5585 6235 3164 2880 10800 3252 3736 5414
+7024 2437 4835 11236 2959 4308 3262 6908 4338 6216 4427 3770 8901 3889 3645 12318 4841 4522 3657
+9478 2631 2797 6582 4160 4659 2999 6028 5393 6994 4192 7940 11169 2709 3308 6833 5898 6234 5995
+11777 4689 6319 4974 4475 1800 3700 12102 3671 5762 4521 4608 11313 2651 4537 6453 5200 4216 12147
+7482 5953 4264 4628 4468 4217 2953 7700 4947 6799 2233 3329 10367 5478 7154 5557 3729 4417 6442
+7262 11360 5263 4384 4237 5108 2912 13191 4304 6160 8283 5257 5976 3068 5672 4067 3571 2361 8031
+8164 12188 5284 4856 6295 3865 4304 10612 3676 3921 7396 5737 7066 5335 4359 8269 4401 2664 7133
+10688 6865 3395 5448 5722 6211 2549 10268 4225 7142 6642 6515 6126 5024 3914 5782 6082 4496 9788
+8759 7754 5093 4588 4435 5706 7391 7575 3174 4726 5469 6207 4580 2710 4445 8379 4144 5250 4975
+12305 15767 4900 3130 5347 6108 6629 5023 2112 3953 8964 6289 4297 5574 4357 3172 6821 4788 11369
+12516 13320 3385 3609 8480 3699 11822 7123 3291 4635 4366 10037 5636 4727 4428 5928 3593 5487 3940
+7020 15112 10546 4589 9589 6132 14219 6019 3652 6949 9640 7154 5673 5733 4391 5217 7792 3420 11223
+7701 17108 5566 5533 9618 6184 12148 7159 2864 6154 6590 9918 4310 9977 5724 5615 5978 3259 4274
+8200 8706 16887 4944 7144 6013 7901 4027 5110 5238 9516 12647 6462 6931 8113 3517 8158 5882 6760
+9383 3269 15195 6838 7585 8093 10612 5334 6959 10001 11930 9052 5753 7607 7018 4490 9032 8137 5151
+6845 7988 20160 5927 12557 6643 8262 9071 5352 8488 9107 13451 5231 10211 9774 4385 10134 6474 4911
+6377 13014 11606 6529 10777 7038 10419 5971 9177 6221 5099 12175 11161 13789 8083 3473 13225 9467 3981
+4900 7480 10797 9815 12676 11009 8710 6352 9426 7649 10622 15473 9344 8972 8422 7490 12545 19848 6282
+7638 7761 11963 8923 14953 14455 9190 11299 10487 3024 13174 19782 9501 24359 6436 14859 11089 14456 8528
+10299 6474 16481 11324 11892 14265 14766 18641 5186 9766 9263 20087 7790 14029 7650 12643 21666 30633 5795
+10925 11310 17481 18132 12276 17432 10759 24897 9498 12452 11959 14751 11754 16795 6382 14589 27846 45639 8814
+16011 20823 9108 20457 7905 28261 17067 17804 10019 10332 6495 6529 30963 17997 18957 22259 28640 24316 11341
+35931 20948 7105 11887 9283 23202 4774 29609 12345 9834 7569 10316 10494 35641 22333 28471 26599 20627 10761
+40118 17229 11011 23493 9331 15937 7967 33539 9710 11323 10285 14347 20827 19229 15339 45985 21498 21401 18080
+66801 38116 11198 21036 11659 46975 15666 25928 11821 13063 8109 10327 30908 48127 14717 45999 17011 30693 15463
+66076 23586 11846 11384 13672 44067 13212 29858 11761 24177 9088 11414 27583 27102 26265 41753 31562 57982 28267
+112602 31144 12020 14832 15344 51714 25484 11468 15170 73083 14862 26286 84404 22653 22503 43815 25514 45617 36518
+95661 14205 11516 21791 21093 68849 44989 20493 38031 42712 13075 15244 80061 72370 18940 15786 37044 34621 34102
+163021 21073 17366 18636 20696 62090 47931 24848 68280 54805 17310 26063 126598 53956 12259 15710 27071 65341 39434
+127131 36375 19606 13563 23569 53336 72435 37803 114361 109926 13548 31933 175724 38986 33593 32151 28779 59315 71246
+64722 25849 24324 10413 35939 53380 74830 46178 139111 104109 27277 39312 132089 20759 23413 39338 48900 85020 59775
+79456 44966 34449 7366 40735 68573 167584 36211 201479 149688 41097 24173 100872 55808 29975 26826 26012 80717 85550
+35517 44319 40584 13524 96463 107347 230141 54304 171492 267237 17117 47081 139997 72092 15505 26851 40030 107820 66342
+56618 44540 65074 14773 97725 151289 127560 40363 74987 221100 18198 94960 148926 92138 21367 28656 41292 114874 43825
+70867 90821 237794 19938 165999 87776 192743 42781 45412 169351 52690 72159 79745 89394 17354 54584 98959 161302 50374
+66684 152462 194764 33812 108374 82920 132908 38901 53516 82419 128453 172812 76422 63300 10075 48069 242643 81263 47352
+103114 178899 225604 51950 137221 54637 85750 36187 29318 26013 76560 212473 84493 139099 16178 52064 114784 152390 84869
+148350 206231 70864 76643 136656 45677 72723 47865 44722 39277 112481 291724 70478 221343 21277 64753 150223 91853 69140
+187574 144050 61701 70237 108807 29277 56696 48136 31287 44085 140452 165274 144956 205320 28129 45120 65356 45255 70797
+131266 114695 58685 100122 71651 21105 29501 21670 24257 38821 132232 129159 127776 184968 38805 36112 30768 68235 62259
+125393 158742 52844 61828 41282 16635 16706 23299 34402 50800 87934 43867 77677 114716 49953 45388 16397 40170 30424
+179746 79732 16577 35082 32025 17199 7810 37850 39639 29624 79880 37632 49444 99357 53475 43330 16117 60556 70664
+154394 34305 16167 13932 26493 15338 15275 15286 29579 31705 74670 22120 23978 68943 117278 64182 16829 35175 57326
+139268 27352 24705 21077 39608 12253 9769 20256 13005 26610 44968 11099 25529 37347 146282 22955 11910 19471 36930
+72011 23982 16977 14322 23552 10651 6698 11861 12092 27810 30604 9138 13368 53290 270637 20115 10747 14976 38010
+51049 21722 22615 8616 25691 11309 8979 18953 20521 43861 44994 11987 7751 18938 163066 20764 15150 13247 39356
+45399 12255 13621 8161 42614 13092 12822 9839 6721 31205 38985 9757 8528 10987 64672 12131 13646 14987 34227
+31852 14024 19312 8790 37861 6892 9595 13511 15505 34140 58512 6866 9950 8810 56625 7635 27860 9652 18271
+13524 8447 12912 3840 27463 5727 6389 5918 5740 32762 57273 6612 5292 11019 31151 12247 15949 11441 24944
+11220 10163 12827 6644 24218 5597 8130 11831 16129 26599 32074 4301 7000 11842 19136 7986 18303 9165 17468
+9433 8288 12091 3547 29288 5957 10573 7503 9846 22465 18739 4213 5704 9377 37325 8606 12719 10673 21423
+5764 6303 8318 6205 9542 3082 6631 7547 6102 17064 13134 7198 8188 9792 20364 4287 15035 7537 25002
+5519 8320 9867 4704 7655 4466 9812 10024 7986 15181 9537 5820 8739 8383 17931 5862 13169 7538 17268
+5027 5432 6290 5817 6457 6709 11463 4789 12303 11195 5799 7117 5737 8271 11002 8751 7839 9396 13816
+2580 5307 5830 3589 4417 2335 12716 12081 11306 5389 6047 5295 8358 7182 9688 2997 6028 14839 16358
+2355 6652 4269 4931 4221 3654 8947 8351 8612 4949 5863 6713 2814 8083 8556 6853 5848 16633 15169
+5865 5205 4288 3151 1894 3940 8198 8931 8578 3077 5291 6629 4936 9050 8179 5331 6315 16607 39530
+5050 4618 5862 5971 3686 4040 8452 4190 10172 4386 3691 9678 2669 4281 7193 7243 2059 10092 16126
+2960 3696 2522 2922 2303 2765 5535 3606 14209 4585 3432 7221 5206 4067 5923 4854 6653 6450 18512
+4337 7121 4547 4300 5218 5256 4656 3651 19027 4133 3668 2872 2570 5307 5086 5949 5851 6596 20304
+1894 8549 2962 1913 3140 3714 5315 5183 7133 4501 6326 4984 3644 2342 3604 3113 4362 2442 5545
+4919 5865 2441 2677 3235 1469 8091 2546 8133 3654 5164 2141 4806 3088 6650 4121 5065 3475 5008
+4440 5520 2855 3880 4417 5253 5319 3834 13142 2129 5656 2158 3563 4114 2451 5192 5141 4882 4491
+2763 3024 2797 2255 2922 4143 3033 2665 11768 3968 2845 3268 1849 3484 3207 2344 3138 2048 3225
+1927 3868 3173 2552 3123 3560 4540 3069 5694 2951 6079 2914 3203 3524 4898 2526 3743 2813 4240
+2681 4390 1989 3531 6565 3090 3451 2943 7904 2770 5729 3107 2093 2711 6230 4745 4593 4690 1936
+2495 4766 2895 3357 4873 1455 2627 1920 7538 3664 4523 2604 2218 3675 3133 3031 4323 3971 4265
+2044 4880 3175 3434 7933 2540 1895 2923 5526 3674 4368 3741 2586 4426 3511 2467 3937 1558 2837
+2504 2789 5270 1961 3822 3482 2595 2099 7350 2332 4304 3459 2453 9681 2639 2711 5062 2485 2733
+1805 2845 3203 2591 4537 2121 1496 1868 5817 3220 5304 3820 2641 3926 2280 2718 5269 1843 2058
+2952 2551 2685 1402 3787 2394 2879 3407 6095 2469 5505 3318 2935 4048 2091 3955 6612 3005 2108
+2917 2794 1659 3014 4071 1936 3366 2888 7032 3267 4916 2990 2556 2939 2530 5780 3918 3531 2661
+3845 4167 3162 2612 1952 1901 2859 3383 6416 4739 4951 2948 3325 1832 2313 5356 4666 5210 3055
+3079 5721 1897 4733 4031 3003 4041 3189 5569 2471 4367 5512 2840 2865 2378 6301 3523 2983 1925
+4921 6328 3780 2927 1747 3350 4333 5360 2485 3903 6457 6167 1630 1479 2915 5605 4290 4456 2864
+4347 5378 2771 2719 2799 1808 4575 3967 5424 3277 4969 4778 2292 2998 2545 4627 3877 3634 3438
+4726 3355 3930 4467 2442 2156 4079 4101 5600 1955 6568 5271 3470 2875 2280 7750 5227 6748 2577
+5777 4435 2728 3348 1967 3353 4549 5219 3908 2576 6395 1782 3702 2559 1616 6771 5985 3449 2500
+4388 5208 2441 3343 2400 3447 4327 4437 3576 4045 3335 3546 3645 2617 3401 9722 9062 5693 3432
+2485 3581 2387 2505 3411 2969 3490 2399 3921 2832 5919 4765 3321 3195 2470 14048 3577 5521 3276
+3558 2772 3503 1690 3413 3444 3488 4083 2625 2037 4121 3323 3822 2874 2677 8998 4319 4612 6121
+5164 2954 2412 3485 4297 2773 5581 3665 3357 3064 3021 2369 4639 2101 3924 9423 3806 3702 5128
+3958 3705 1883 3469 1877 2743 3709 3300 3104 3614 4059 3024 5481 1692 2337 5192 5748 3688 3634
+4195 3553 3676 2716 3131 2276 4619 3591 2753 2445 2263 3188 6503 2447 2705 9503 4849 2838 3862
+6426 3997 2213 2367 2765 1527 1859 4993 2722 2916 3389 3230 5588 2138 2983 6253 6494 4845 3526
+5190 3180 3410 2115 2920 1941 5139 3288 2931 4032 3568 2851 5477 4196 3499 5105 7672 3598 3318
+5398 3182 1920 3091 4303 2774 3019 2491 1436 1755 4795 2119 4933 3449 5004 6270 5889 3290 3209
+6681 3644 2761 3644 3187 2257 4056 2657 4950 1539 3041 4476 4950 2849 1963 5220 10052 1914 4049
+3962 4631 2468 2562 4113 2448 4946 3167 2318 2739 4068 4235 3625 3705 4121 5103 5329 3511 2646
+3139 3249 2469 2749 3678 2035 6922 4298 3109 3571 3484 2345 5883 3521 3070 3907 3755 2399 4812
+3245 4466 2798 2055 4386 2415 3895 3074 2640 2367 3174 3367 4818 4702 4355 4173 3239 3186 4106
+3232 5498 1661 2449 3367 1454 5957 3195 3230 2561 5009 3030 4074 3652 3430 2723 3388 2804 7422
+1746 2853 2599 1406 1976 2600 3133 2230 2011 1519 3964 2289 5495 2568 1945 2103 2871 2767 4639
+2545 3877 2369 1566 2792 1842 2524 3785 1604 1626 2591 2662 3805 1046 2382 3760 1750 1777 6451
+2359 1964 2447 1530 3065 3416 2556 2809 2022 1617 3009 1655 2574 2185 3466 4705 2189 1804 5413
+1907 1379 4183 2056 5093 3008 1497 3268 3127 1898 3882 2834 3329 1419 2900 4819 3234 2556 3281
+1215 3280 3472 1509 1815 3496 2949 2400 1867 1881 2512 2084 2905 1775 1762 4491 2014 1866 3436
+1863 2123 3272 1629 3151 2401 3857 2271 2814 1809 4113 3131 2802 2178 2088 2861 2973 2670 5212
+1810 3918 2240 1759 3001 2335 1217 1663 2386 2098 1808 3112 2024 1638 3271 2222 1590 3473 2893
+3140 2020 2758 1258 3287 2866 2324 2316 1682 1797 2624 2715 2141 1632 2560 1937 1834 2059 2230
+1798 2114 3260 1283 2301 2319 1446 1571 2697 2536 2341 3740 2989 1870 2293 1244 1656 1588 1277
+1195 1102 2258 1163 2203 2004 1068 2121 1917 1149 2407 2561 2790 2957 1796 2865 1686 1616 2302
+1645 1957 3788 1429 2541 2392 3231 2929 1719 1526 3821 1329 1515 1686 1889 1888 1447 2081 2400
+1421 1306 4445 1490 3264 2262 2260 1533 2735 914 1738 2886 1489 2671 2127 2048 1905 1335 2197
+2169 1424 2241 1474 1969 1222 1984 1788 1216 2117 1746 1390 2343 2104 1650 2194 1672 1905 1164
+1614 2010 1884 1341 1638 1956 1083 1229 1921 1828 2254 2193 1021 2373 1754 1832 1586 1302 2744
+1130 2976 2671 680 1223 1634 1984 2920 1117 2680 1968 1934 1970 1523 2122 2107 1135 1234 2223
+1572 1520 2547 1000 2386 1539 1075 2921 2057 2240 2030 2553 946 1185 1854 1991 1851 2141 1192
+1714 733 1860 1420 1440 1882 1514 1579 1212 1864 1391 1973 2064 1584 1776 1197 1249 1468 1652
+1484 1563 1137 1937 1193 1688 2024 1587 825 2076 2731 2014 1464 1780 2398 1345 1525 1404 1322
+1440 1278 1995 1511 1677 1342 1160 1976 1023 1972 1235 2725 1678 1470 1242 936 1485 1457 2648
+1253 1288 1547 1362 2028 991 1375 2330 1663 1019 2190 3278 1822 1699 1484 1276 2395 1858 1800
+2323 938 2121 1866 1399 1346 1727 1523 2263 1514 2162 1748 874 1289 1824 1083 1631 1706 2588
+2305 1134 1496 1376 1469 1625 1105 1847 892 1453 1828 1256 1600 1054 1207 1474 893 2763 1439
+977 1295 1695 1401 1528 1229 1068 1358 1837 1741 2401 2316 1678 1238 1151 1303 1669 435 1728
+1011 1388 2550 1294 1126 1148 2279 1673 1012 1612 2246 2224 1811 1626 1744 1583 1058 1176 1037
+1842 1431 1748 2125 1320 1590 1023 1466 708 2232 1952 1590 1409 1370 1139 850 990 931 1498
+2124 2296 1746 1886 2090 1336 1134 1331 1404 1488 2614 1652 2006 1403 2228 1653 2052 1514 1630
+2013 2770 1327 1982 1758 1191 1374 1257 1750 926 2051 1629 2131 1802 1415 2458 2032 1561 925
+1574 1523 1629 1018 1554 1517 1151 1510 1424 1226 1419 1916 1742 1125 1666 1910 2684 1956 1640
+1079 1836 2525 819 1911 1150 2074 709 877 1784 1911 1444 1982 1431 1501 935 818 2079 1778
+1997 1376 1389 1298 879 1009 2504 1656 2217 968 2343 1076 1332 1066 1028 1769 1486 520 1258
+2175 2083 1955 1124 1002 1223 1487 1744 1039 1629 2508 1320 1721 1699 1334 958 1603 1918 1683
+1153 1352 2790 2096 1161 1993 1750 2259 1912 1628 3099 1438 2678 1801 867 1084 1878 1160 1191
+1560 2415 2430 3137 1687 1331 1364 1335 1783 2331 1373 1714 1735 1053 1186 1544 1395 1493 1736
+1917 1217 2133 3218 2015 1627 1372 1876 969 1665 2910 1721 2554 2093 1415 1696 1511 1638 1429
+1053 1848 2152 1629 1438 878 1849 1479 1773 1500 1921 1509 1816 1958 1755 1347 1061 1885 1333
+2205 1038 2163 2733 3464 1601 2036 1313 2601 3635 1677 2651 1710 1426 2190 1770 2770 1373 1581
+1551 1758 1656 2018 2583 1402 1841 2108 2218 1481 1981 1572 1973 1360 1719 1429 1865 1476 1317
+2155 1370 2415 1839 2796 1420 2129 2540 1952 1176 1368 2417 2300 1761 1103 2081 3262 2138 874
+2018 911 2718 981 2898 1183 1752 1722 2022 2158 2001 1415 1411 830 1999 1355 1646 1220 2067
+1217 1578 1559 1217 1706 3020 1222 1336 1994 2788 1655 3046 2885 1867 1045 1670 2834 1165 909
+1741 1381 2187 2232 1632 2459 1538 2347 1964 2445 1159 1712 1641 2784 1713 1442 1468 2758 2591
+1705 2168 1542 1466 2162 2791 2944 2041 2369 1493 1350 2707 2226 1748 2268 1904 2246 2139 2030
+3121 1670 1844 1529 2300 3391 2142 1831 2100 1178 966 2336 1987 1278 2993 1729 2593 1988 2702
+3001 1589 2358 2198 1688 2950 2391 1546 1958 1715 1967 2854 2615 1547 1403 1114 2251 2238 2502
+1621 2547 2361 1479 2776 3557 2835 1132 2274 2072 1726 3035 2527 1788 2091 1448 2504 3510 1278
+2179 2333 704 1637 753 3702 2471 1653 2681 2678 1009 2164 1617 1207 1858 1480 1624 1731 1675
+1996 2522 1095 1734 1767 1986 2703 2850 4127 2120 970 2475 1369 1873 2776 1792 2060 2809 2798
+1684 3283 2432 1922 1646 4590 2690 2221 1128 2578 1427 1851 1030 1922 1121 2097 3099 1835 2330
+1861 1853 1091 2888 2272 2208 1536 1673 2008 947 1899 2781 2137 1621 1768 2336 1953 1881 2148
+1913 3080 1662 2405 2144 2001 2954 1498 1750 2152 1599 1650 1725 2343 2408 1829 2538 2218 1906
+1695 1734 1940 2991 2716 2758 2579 1293 1004 1827 1207 1930 1876 920 1714 1368 2808 1068 2617
+2864 1791 1989 2323 1981 2632 2829 1474 1152 1393 1507 1266 1000 1025 1486 2590 2422 2267 1130
+1712 1556 2561 1511 2280 1549 1542 1230 1455 1732 1900 1382 1563 2215 1341 2439 2014 2014 1493
+3349 1777 1276 1720 2052 1815 2304 1854 2069 1986 1044 1587 1608 2008 1740 1643 3793 1591 1423
+2306 978 1215 1774 3062 1703 1272 2786 1093 1588 1733 1414 1501 1641 1205 1402 2907 1737 1961
+2768 1438 919 2873 2410 2662 1511 1511 2284 966 1132 802 2554 1043 1470 2493 2790 1567 1658
+2141 1278 989 1618 1942 1214 1277 1066 1043 1440 1823 1246 1942 1742 1772 1981 2064 1471 2190
+1151 1405 1423 2219 1428 1474 1428 1457 1640 1340 1920 1555 1398 1641 2286 2422 2981 1816 1211
+2003 2238 1372 1213 2103 1858 2152 1508 1157 752 1621 1586 1765 2322 1162 1971 1094 1014 1859
+2049 1427 1414 2116 1575 1241 2089 1257 2182 1155 1726 1085 1537 1357 1538 1699 1443 1124 2670
+1797 1350 1040 952 1456 2114 1523 1926 1860 1084 2287 1220 1518 1757 1550 1445 1598 1790 1570
+2374 1853 706 1655 981 977 1372 1971 1633 845 2042 646 1862 2122 1117 2130 1493 1699 1319
+2073 2711 1142 1272 1101 1480 992 1124 1827 767 791 660 1916 1503 1792 987 1403 2968 2321
+2074 2322 1302 1183 1416 1492 746 905 963 1097 2014 1520 1964 894 1245 938 2054 2186 2013
+926 2749 891 1545 1533 1949 2518 1330 727 880 1137 1297 1270 2516 2481 1298 1147 1692 1908
+1024 2335 935 1086 1207 1257 774 1322 1433 1231 1118 1455 1447 1761 1138 1081 1403 2344 1293
+752 3137 1165 934 991 2128 1429 801 1318 1009 1679 2682 1086 1218 2444 992 1167 2088 2617
+1009 1518 1754 902 1044 1421 1105 1572 1524 1453 1345 1508 1219 2610 955 1110 1668 1977 1760
+1025 2054 1662 1553 1950 1381 1086 2013 828 597 1374 1176 1672 1573 1917 1409 1705 2642 1524
+1164 2842 1086 1278 957 1106 1824 1496 2182 862 1059 950 2249 2505 1585 2191 1874 2321 2626
+1004 1222 1016 1349 1398 1937 1770 1558 1119 1530 1487 1221 2848 1328 1888 780 1993 1905 2754
+1741 2633 1271 1065 1005 1301 2320 1644 1250 1836 1178 933 2043 1111 1351 1705 859 2004 3866
+1270 1050 1109 1646 1205 2238 1598 1255 921 1359 1313 1187 2385 1147 1245 1733 1416 895 2155
+1809 1023 773 1054 920 1293 1252 908 1020 1478 1566 626 2242 2261 2050 1381 1567 1220 3191
+1491 874 1094 1117 2009 1013 1211 2129 791 1876 1500 775 2155 1638 1472 1518 1194 1255 2622
+1247 1383 1668 1289 1534 1023 1660 1645 881 751 920 776 2070 1222 883 1483 1046 1605 2967
+1054 1292 1253 1358 1023 708 1585 1074 1168 2102 1496 1600 2188 1289 1665 1346 850 979 2616
+1074 1146 1567 943 1064 816 1609 667 1278 1165 2368 1073 1746 2249 1930 1223 1065 831 1512
+1414 1105 863 1009 1120 992 1540 1261 1186 2309 1226 1224 2260 827 1867 982 1734 1235 1463
+1249 776 1463 881 1097 1354 912 1166 809 1472 2207 852 2176 1379 1302 1197 1219 909 876
+1600 1018 1226 706 839 1396 785 1245 829 1389 1965 973 828 1455 1054 826 1054 1228 1063
+1312 936 1567 1306 853 978 980 751 908 1675 1863 978 2149 651 985 1224 1983 1744 990
+1410 1329 1137 1391 1473 1035 886 1293 1387 1639 1316 1178 2723 1999 1072 1317 1516 816 941
+1043 956 1689 802 670 909 1401 936 1336 774 1559 1368 1648 1125 1393 804 2063 1450 1346
+1992 672 777 913 901 1258 960 1025 1949 1738 935 930 1778 1976 862 1084 1071 1096 1013
+1113 1086 1126 984 911 1526 1150 901 2057 873 1660 920 2085 1351 1365 756 1639 916 1260
+787 1295 1148 1580 913 1048 1210 1173 850 759 1266 1601 1045 588 1069 897 1291 1078 811
+1511 1137 1303 1000 1081 969 608 861 1146 487 847 1465 2215 1284 725 1680 778 351 846
+1620 1218 766 1495 1323 950 1219 715 765 1101 1153 896 2077 1105 1011 764 819 892 1426
+1020 475 932 1567 1168 558 1070 1162 677 766 886 864 1549 810 849 936 1274 1976 1060
+1227 736 1547 569 1205 1352 1364 581 1761 831 1431 1477 1501 1127 679 1092 817 1101 1627
+450 1095 667 1123 1571 1293 648 1128 1305 957 749 678 698 762 810 855 547 1242 682
+1122 520 462 1214 772 881 952 1265 1048 1083 983 523 1310 1373 798 952 671 2060 1274
+1316 1172 969 1327 777 845 1059 674 1438 1047 1193 1597 934 917 953 893 1069 1161 794
+603 1074 897 494 709 977 1585 1315 1603 548 1383 776 1395 649 805 1231 993 1160 440
+1689 1228 1021 1126 613 836 1239 964 2085 924 1373 908 991 961 788 830 929 1327 715
+1231 1451 965 873 730 957 1172 1097 731 1169 1007 1633 1273 941 783 741 1133 1893 992
+1709 1549 474 2003 485 1070 1063 1274 1225 706 541 1048 1052 1038 1124 1172 925 2353 700
+946 1552 830 1404 1136 1235 1283 2674 1112 820 1286 626 779 1011 1071 1222 1443 1557 1379
+530 764 1067 1138 1597 819 1713 2355 965 1094 979 952 1037 1106 978 1660 990 890 1464
+1531 1447 1047 1336 773 657 1704 1194 1082 699 769 611 398 1092 938 981 1339 1617 1056
+803 815 527 1249 1136 960 853 892 1105 747 1493 1194 950 1288 766 2298 1196 1241 1050
+853 959 492 1212 1064 1083 691 1386 1619 858 768 959 815 792 1172 1553 1190 1321 1238
+680 1109 1188 920 1202 1107 1204 1498 1561 802 1513 900 849 1500 1348 1061 957 829 686
+1168 1335 773 1032 1360 1589 1710 1540 1587 923 1225 956 941 768 796 1918 762 1507 1280
+432 1819 1262 677 1604 858 1339 975 1246 812 1255 1410 445 1014 1068 2573 1568 1438 691
+1075 1446 1268 840 1469 840 1207 1144 1966 1228 1213 1477 889 983 1131 1375 893 1099 567
+1166 1494 1292 705 961 1926 832 1324 2121 1051 787 1185 898 1243 1163 1679 1835 763 946
+968 1336 1192 911 1366 1024 1460 1816 2359 1246 1070 1481 1281 1337 1741 1218 968 1673 1457
+1636 1633 672 1217 749 572 1018 553 2006 913 1555 1530 775 600 833 1201 1822 867 861
+1622 1299 1043 1072 616 1403 1197 949 917 1172 1006 1687 1206 874 1367 1552 1209 1567 674
+2054 1016 960 1398 903 756 1209 1575 1354 2061 1105 901 681 1128 1146 1383 1417 1633 640
+1164 1245 1155 730 847 1354 944 1192 1629 1065 1164 720 763 634 1127 1511 1001 1234 1335
+1354 1375 1121 999 2332 1250 1759 1408 1243 2965 1291 899 879 1871 1421 2618 1395 1236 1221
+1422 2053 1275 919 1267 1335 2252 1426 1311 706 1382 1892 880 1031 2332 1780 1672 658 1250
+1595 1293 1641 1047 1953 1268 1242 2104 1003 1272 1147 1573 1731 840 871 1306 1743 913 909
+1460 1325 1223 1234 846 1019 1509 1608 1424 1319 1383 1739 1466 1816 1361 1420 1668 1063 1216
+1081 1221 1037 1490 1347 1473 905 914 1352 1056 839 960 910 1376 1386 1285 977 1013 1011
+2322 1687 962 979 1170 1531 887 1167 1231 1566 1037 1016 1050 2218 1122 1546 1021 1516 1627
+1095 2003 1954 1428 1013 1927 619 1226 1115 1572 821 2321 1507 2051 1497 1881 1118 1067 1088
+1504 2907 1083 2070 1196 1402 1475 1718 855 2184 881 2411 1818 1866 1105 2060 1236 1987 1353
+1648 724 1001 2758 692 1202 796 1604 1271 1323 1055 1848 667 1322 1319 1754 704 1234 1966
+1805 2095 1148 2503 1023 1362 1963 1967 1585 911 1061 1471 1599 1312 864 1992 807 1702 1410
+1369 955 1507 2910 1227 1476 997 2137 1536 1412 1101 2221 591 1304 2568 1894 1247 1500 629
+958 1084 986 2594 984 1110 918 1250 3254 1573 1592 1085 1904 1017 2734 977 982 1565 1147
+2431 1175 1001 2694 1488 789 724 1342 1509 1449 891 1690 1819 1723 1351 1703 933 1198 1072
+852 1023 1483 2355 993 1049 1828 1285 3712 934 982 1725 1599 1221 712 890 670 868 1369
+1533 925 1259 2368 1249 984 1107 2161 2370 900 1428 2515 1131 1412 1796 1122 1377 1644 1214
+743 1123 978 2175 949 1065 1212 1724 2380 1288 1512 880 1227 977 1891 897 1568 1670 2094
+1083 1088 1609 2254 1325 1739 804 2741 1898 1500 580 1200 1494 2047 1700 1269 1652 1887 1279
+1095 1604 707 1975 1356 1681 1646 1467 1409 1877 1030 1312 1549 1350 1511 695 1424 1130 1559
+1489 1868 1146 2242 1773 2670 1263 1785 1015 882 1068 669 1923 1255 1402 1636 1666 1322 714
+1267 1252 995 1080 739 2132 1017 1877 1265 777 788 1495 2048 1359 1617 1457 1104 1229 1204
+1788 1072 1240 2844 1544 3353 757 1586 1177 1648 986 1532 2419 1440 1463 870 1268 1552 1067
+1606 1040 1602 1379 2137 2960 1258 1468 753 1526 918 1181 1491 1823 1086 1474 1433 1021 1586
+1538 1452 705 1707 1128 2985 1006 1079 1129 1253 963 1077 2822 1228 1641 1414 1593 1530 1652
+1727 1060 1761 1354 1851 3181 1238 1062 1444 1759 1113 1813 2202 2426 1194 1197 1270 671 2595
+1395 1215 1958 1316 1087 4171 1193 1295 901 2050 1604 1223 1593 1881 1264 1815 1523 1501 1493
+2048 1267 1297 1722 900 2354 2093 1165 855 1435 1290 1676 1596 1359 1679 1585 1303 2016 1402
+871 1570 1446 2378 1471 1354 2108 1536 933 1335 1380 1351 2741 1336 1262 1639 1701 2526 1359
+936 1285 612 2134 1237 3495 1856 1129 2076 1091 848 1143 2569 2055 830 869 1120 2454 874
+732 1065 1159 2617 1758 2228 1407 1296 1231 1301 1365 1729 2124 1038 1981 2046 1565 2326 1957
+1910 1125 1403 1633 1810 1195 1906 1485 1570 1703 1654 1174 2551 1768 1209 2155 2013 1682 2055
+1694 1448 965 1619 1583 3125 1617 1210 1323 1352 1204 1943 2090 942 552 1637 1856 1446 1069
+1196 1302 1294 1895 1201 1756 1817 1595 932 1972 1245 1746 2038 952 1154 880 1325 1956 1493
+1515 1590 1247 1285 1561 2696 1134 1607 1533 1364 1363 2296 1974 1599 1504 2892 1327 1816 881
+2179 2003 1352 1330 1234 1963 1728 1209 746 1314 1653 1566 2326 877 1093 1555 1319 2828 823
+1612 1193 1072 1421 1273 2158 1555 1566 1820 1130 2527 1460 1741 1236 1563 1399 1765 2686 1793
+1377 1649 1106 766 1178 1530 1340 1395 830 951 1547 2553 1738 1123 1761 1213 1494 1746 1732
+1615 1727 876 1438 1997 1067 1214 1608 1284 1185 789 2346 1954 1380 1777 1171 1929 1203 1783
+1456 1796 1454 1830 1596 949 1503 1481 931 1050 1859 3363 3639 966 1284 1847 1355 2325 2042
+920 1740 887 812 1839 1475 974 1661 1189 1828 2363 2931 1474 1507 2470 1673 1139 1281 2731
+1407 1073 1274 1709 971 1543 1251 1658 1977 2219 1810 1877 1721 926 2180 1089 1838 1597 3452
+1171 2597 911 1612 2868 2414 1282 1801 1027 1327 1144 1567 1033 1401 2684 1913 2527 2801 2198
+1835 1478 1733 1242 1668 991 1383 1695 1452 1710 1305 2899 2900 1037 2024 1258 1303 1642 2010
+1142 986 1104 2464 1831 1807 1575 1968 1498 1575 1859 1377 1245 1706 1499 2224 1248 2916 2073
+2253 1515 1916 3077 1321 863 2369 2011 1361 1352 1125 1151 1709 902 1463 1405 1923 2842 800
+1736 1989 1407 2076 1058 1928 2132 2224 1498 1876 2458 1633 1210 1473 782 1867 1387 4264 1730
+1166 1775 1522 2790 1329 996 2454 2888 1342 1352 1588 1182 1678 1318 1261 1499 1519 3207 1282
+1562 2058 1223 1244 1826 1589 3341 2704 1434 1850 1615 1859 1332 1111 1092 2027 1280 3158 2106
+984 899 1867 1307 1789 2024 2583 1743 1495 1706 2062 2628 3254 1265 1186 2180 1101 2156 1337
+1692 918 780 2267 1933 1024 2882 2936 1805 1621 1140 1286 2469 1557 1394 1483 968 3255 1895
+1842 1637 1251 1611 2243 1817 2796 4006 1707 1459 1989 1849 1507 1634 1875 1707 1635 3699 1153
+1838 1927 1448 2299 1384 3135 3379 2240 1806 1384 1365 2663 2477 999 1173 1970 1564 4499 1544
+2696 975 1944 2541 2226 1346 3460 2685 1445 2509 1894 1785 2311 1561 1376 1020 1729 3515 1034
+3179 1075 1692 2077 2063 2684 1328 2309 1845 3068 1507 3845 1273 1392 961 1200 1448 1705 2439
+3027 1380 1592 2005 608 1374 2028 2791 2146 2507 2428 2840 2390 1806 1738 983 1337 2644 1614
+3106 1977 1385 1297 1751 2464 1780 3066 2504 1584 2978 2181 2405 1322 1636 2633 1062 1494 1847
+2794 1682 1684 1307 2456 2432 2402 2115 1053 1603 901 2690 2488 1678 1339 1585 2156 1682 2414
+3370 895 1623 1826 1843 2390 2955 4457 2613 2403 2048 1940 2956 2191 1414 1645 2043 1653 1775
+2304 1490 2087 1873 1957 2729 3035 2582 1626 2000 3450 2303 2958 1508 1162 1416 1299 2035 1995
+3281 2033 1624 1115 3122 3395 2229 2316 2482 2730 2021 1686 1946 1934 2692 3673 2973 2660 1195
+2492 3965 2066 1380 1601 2775 2886 3126 1805 2059 2571 2065 3462 3337 2001 2148 2672 2212 2765
+1222 3317 2191 2185 1325 3436 3080 4249 2778 2519 3062 2321 3324 2378 1144 1853 1467 1441 2939
+1736 4570 1805 1574 1256 3749 4082 3087 2254 1443 3957 1714 5675 2448 2163 2095 1905 1709 2214
+1953 2476 2385 1354 1252 2750 1560 3084 3041 3094 2681 3205 3090 2411 1957 2901 4132 3134 1968
+1224 4260 3753 1735 3308 4405 2163 2981 2550 4190 2272 3321 5511 1494 1655 2422 4234 2045 1399
+4800 4561 2566 1857 1672 2106 2798 4846 1892 2575 1698 4311 3775 4600 2604 1801 3409 1889 3108
+2787 4444 3225 1920 2312 2486 4492 3607 2820 3490 3169 1777 9413 3464 2431 3623 4466 1937 2357
+2419 1588 1582 2228 2664 2443 3539 1930 2534 4442 5375 2993 6513 1817 3761 4250 1956 2472 2890
+2495 3325 1082 1819 4227 1503 3726 3077 4526 6660 3124 3465 5044 4323 2032 3785 2715 2073 2382
+4566 3480 2373 3129 1290 3395 4626 3613 2253 6074 3649 2922 8502 2559 1653 3760 3347 2724 3331
+1082 3322 1494 3292 1951 2467 3225 1435 1143 5653 2133 3676 4262 1749 1199 2391 2868 3461 3163
+4451 4708 3420 3572 3825 2200 4143 2771 1575 6046 3174 2897 4194 2149 2756 3195 1340 2333 3321
+2946 4642 2873 2422 2670 3021 3393 1765 2309 8353 1723 2344 5121 2068 2581 2073 1544 2805 2496
+3220 4280 2315 3203 2449 2063 4857 3548 2039 4945 2276 2814 4779 3207 2504 3974 1769 2764 1388
+4992 1019 1306 3257 2376 2482 5142 2329 2242 3910 3765 3235 3961 1654 1838 3567 1927 3919 2902
+3418 3625 1930 2481 2389 4032 3270 4728 1959 4610 3291 1568 2940 1888 1531 1628 2753 2945 3545
+3615 3036 1692 2092 2410 2739 3680 2735 2350 4181 1621 3903 4314 2359 1058 2976 2616 2236 2969
+3390 3921 1991 4543 2230 3714 4367 4176 2619 2922 3059 2926 3099 1888 1796 2789 2709 2736 2594
+3611 4400 1872 2509 1755 4611 4240 3041 3626 2639 3657 4824 2530 2569 3155 3368 1673 1300 2487
+4389 3479 2893 3546 2860 3656 4143 4101 3844 3738 2556 4320 2182 1621 4152 3184 2064 2449 1522
+4227 3598 2832 5932 1785 5918 2607 3568 3296 3240 3716 4023 4415 2961 3000 2066 1639 2905 2625
+4577 2805 3258 4207 2485 4601 4696 6383 5232 2143 2926 2480 3719 2087 4034 2765 2421 2489 2783
+4931 2587 2463 3394 2988 4277 3646 3603 4583 2669 5394 3740 2728 3037 3589 3032 1875 2210 3121
+3071 1264 3767 5199 2026 2250 4101 4142 2920 3114 2021 4597 4781 1486 3741 2279 3207 2205 3301
+2929 2671 3097 6422 2433 3242 4209 4466 1807 1704 3511 3880 4246 1444 4410 4053 3529 2831 2641
+3311 2431 3794 6146 2870 1919 3319 3299 2367 3678 2597 3877 2872 2445 4306 3908 1918 1775 1424
+2766 2758 2821 4969 2871 4289 2855 4458 2378 3290 3554 2416 3009 6168 2839 2860 1631 1800 1896
+3359 3792 5004 8452 1496 1902 3757 4360 3746 1315 4238 3119 3907 5498 3427 4528 2400 4184 2689
+1898 1263 3885 6837 2565 3777 1431 2346 4507 1671 2969 2361 2707 3155 2063 2261 1727 2283 1738
+2838 2496 3467 10543 2964 3696 3727 1226 4988 1926 1883 1802 3594 7641 2059 3938 2435 1770 2375
+3838 2074 3658 4060 2472 1941 2950 2579 3528 1700 3082 2853 3789 3097 2277 3321 3005 2327 2152
+2186 3530 3091 6421 4652 3102 5628 2469 4278 1535 3803 4273 2563 5053 1903 2091 4874 2111 5075
+2684 2097 1794 5715 4515 1308 2761 1407 6214 2963 3470 4534 4180 5179 3746 1798 3128 2899 3906
+2296 3281 2527 6080 5441 4889 4199 1847 3490 3929 3855 4579 2471 4036 2144 1892 4967 833 2136
+3986 2272 2484 3371 3648 3588 2045 2000 4735 4376 3196 2741 2646 3145 1794 2364 5707 2190 1650
+1282 3840 3286 3581 3632 1690 3120 2175 3975 3031 3349 2950 2336 2077 3027 2912 6729 1474 4390
+3181 1882 3309 3821 2349 3379 2509 2262 2427 1934 3022 4062 2099 1691 1864 2788 4007 2242 2076
+2551 2343 2856 3047 2752 2631 2641 1654 4825 3826 2348 3096 2813 4117 3651 1617 4392 2273 1393
+2592 3163 2642 2537 3997 2834 2335 2499 3300 3453 2487 2881 2502 4397 4402 3567 6541 2332 3509
+1447 3498 2800 1479 4907 2656 2106 1895 2456 2902 2824 3013 2367 1877 4119 4878 4465 2342 1847
+2265 3032 3335 2143 2676 1808 2837 1918 5120 2393 2855 2866 2494 1969 3689 2702 2159 1752 1848
+3736 1146 2806 1885 3447 3196 2403 2289 3773 1583 3006 2897 2169 3213 4501 3139 2583 3868 2989
+4760 3650 2689 2276 6115 3399 2618 1780 3624 1499 3345 2361 1752 1817 4689 2768 3518 2375 2352
+3095 2638 3818 1970 3481 1986 2594 2953 4440 2683 1982 2733 1917 1591 5145 2254 3435 2531 1167
+6169 3120 4755 3160 4190 2637 2020 1689 2631 2240 3469 2528 1428 2570 3605 3732 2775 2977 2473
+2361 3458 3469 1913 2754 1726 2960 3560 3641 2486 3818 1428 2879 2546 5247 2068 4919 2724 1817
+5573 2275 4138 2618 2766 3294 2243 2677 3649 1252 5595 2126 2569 4334 3823 2579 2585 1964 2187
+4679 1631 4036 3521 3192 2116 2065 2865 2607 1438 1694 1081 3490 3215 3896 2905 2782 1118 1702
+4066 1812 4345 3393 3062 3986 2232 4598 3398 2477 3696 2170 4350 1800 2107 2225 3033 2044 3271
+2171 2126 5107 5161 2754 1452 2133 4039 2832 2865 4184 1889 2198 2155 4468 1976 2032 2755 1855
+3321 1580 3526 3245 1942 2659 2224 3134 2761 2821 5616 1824 6146 1719 2003 2660 1455 2173 714
+2618 3041 2781 3662 1335 1386 2923 5178 4246 1999 4682 1928 9679 1990 1605 2187 2010 2493 1881
+2153 2388 3450 3252 3819 1306 1962 5138 3089 4570 4633 2063 5540 2138 3028 2240 2986 3339 2176
+1841 1869 2971 4201 3239 2043 1865 4192 4807 2445 8047 1551 2598 2031 3704 1994 2145 4361 2430
+1406 3207 2473 6123 3258 5085 2179 3087 3447 2797 3230 2731 5080 2004 4984 2779 2006 4130 2005
+2562 3126 5000 3920 5015 1793 2230 1814 3507 4471 5903 3386 5192 2001 1705 2192 2962 3490 1077
+1798 2495 2465 3707 2616 2826 2209 3009 5209 4674 6391 2266 3398 2308 2586 2105 1856 4739 2213
+2059 1493 2497 4601 3560 3227 2294 4989 3511 2720 4010 2602 3442 2536 3482 1923 2902 2108 2967
+2607 2561 3116 2364 3658 1890 2425 1921 3847 3105 3000 1699 3091 2361 3061 1981 3450 2952 3381
+2302 2834 2928 4970 4026 2610 2745 3317 3513 4517 3030 2485 3897 3041 2780 2390 2911 2284 1880
+3240 2064 2204 2931 2347 2075 2156 2300 2487 2721 2666 2643 2395 2934 1858 1880 6454 3490 2698
+2029 3156 1432 3735 2412 1933 2420 3625 6436 2314 2343 1137 2709 2411 2162 1555 4347 3396 1975
+1203 3273 3921 4376 3225 2266 2510 2402 3638 2891 3599 2454 3303 3240 2808 1779 8573 2386 2053
+2689 2616 3350 3065 2526 2820 1318 3117 4840 3040 4086 1551 2528 3257 3659 2664 3137 3848 2863
+2511 3657 3845 3430 2916 2991 1695 2659 4020 2723 3920 1613 2734 2175 2570 2443 6404 5476 2668
+1785 1763 3192 3338 3381 2940 1922 2678 2611 3058 2773 1847 3155 3878 2420 1903 5808 3525 2608
+1808 3176 4864 3322 2587 2908 2740 2372 4277 3860 4554 2447 1901 3730 3790 2889 2444 3956 4004
+3419 2441 2478 2991 3314 2472 1421 2078 3743 2317 3330 1421 1714 3886 3124 1063 5179 2590 2841
+2263 2210 3587 3066 2874 3957 1729 3101 4119 1098 3362 3491 2624 6248 2683 4327 3974 3270 1908
+2139 2298 2685 2561 2939 2541 1416 2322 3519 3275 4104 3915 2308 2737 3891 3527 3338 4420 2504
+2378 2339 2573 3289 2958 3438 2204 2334 4188 1473 5392 2306 2782 4156 4679 2723 2604 7025 2429
+3339 1821 2863 2598 3790 2127 1482 2211 2660 2829 3521 3028 1521 2575 3484 5206 2957 5426 2322
+3778 1689 3354 2154 1905 1896 1943 2872 6202 3183 2119 2671 4232 2892 6120 3737 2580 4992 1798
+3261 2111 3905 3125 1792 2255 1572 3297 6231 1764 3093 3704 2352 3837 4710 3245 2503 5593 2596
+1696 1758 2108 3044 3025 1735 2381 2472 2186 2252 2184 2475 2044 1755 3732 2539 3004 3648 2590
+3523 2158 2162 3208 1766 2265 3416 2585 5117 2402 2196 3747 2930 3175 3732 3078 2705 4347 2276
+1614 1268 3168 2849 3641 2665 3730 3283 3191 2748 3309 3772 3783 3402 3237 2019 3082 5756 946
+2436 2219 2034 3388 1446 2519 3218 2674 3360 2291 1834 2167 2459 5265 2851 3275 5216 3445 2561
+2789 2890 1185 2570 1774 1970 3738 2710 4041 2053 3031 2724 4110 7701 2605 3137 1874 5550 2793
+1819 2291 2045 2621 1906 3367 3967 2267 2891 2419 2420 2554 1961 3130 6094 4161 2035 2087 1866
+1968 2795 1596 3174 3079 2595 5080 3062 5145 1431 1358 3307 3268 2764 4458 4109 3273 2252 3044
+2524 2809 1747 3473 2153 2550 4778 2010 1663 2321 1713 3197 1475 3553 1779 4203 3230 1963 1873
+2668 4070 2633 2778 2302 3382 7936 3322 1409 1868 4516 3607 2834 4184 6115 5342 5100 2697 2830
+2163 3717 3454 2770 2638 2403 4224 4077 3456 1368 2299 3698 1666 2953 3582 6021 6123 1918 2003
+2406 6010 2998 3312 3457 2644 5482 4843 1959 1780 3150 3553 2567 4976 3653 6688 3892 3441 1764
+2528 4245 3209 3537 3062 1775 4263 7044 3544 2189 3699 4570 1669 3712 5494 7330 3650 2844 1602
+3932 2178 1933 2137 3344 3223 4252 5167 3643 1629 4038 4217 3011 4568 3723 3717 4604 2908 1328
+3881 4098 1353 3143 3670 2909 4010 3130 4066 2314 3793 4119 2011 2838 1424 6776 4372 3413 2699
+5550 4044 3440 3433 2317 4502 4409 2889 3131 1801 3420 4549 3405 1366 2447 3261 4115 3030 2662
+3121 3761 1850 1963 2385 2130 2760 1923 2365 2313 2411 3309 4782 1170 4683 4179 4530 2907 2736
+3423 3333 2963 5157 2179 3317 3031 3971 2160 1615 3368 7112 3308 3130 3781 3577 3146 2234 1708
+5189 3296 2741 6972 3378 3099 2957 3576 2669 1191 4983 5014 3924 1918 4183 3328 5386 3026 2648
+5071 1781 2600 3626 3268 2413 2657 2475 3018 1663 2845 5227 4386 3680 2148 2068 5586 2477 2838
+3852 2271 1697 2194 2391 2173 2946 2662 2692 1881 3326 5807 3030 2117 2320 2608 3274 2545 1579
+2136 2272 2056 2576 1684 2337 2494 2540 2971 1692 3550 3355 2864 1740 2549 3258 3465 2105 1899
+2301 1880 2279 3658 2747 2312 2544 2309 2692 2433 2464 2517 5277 2969 3473 2891 4695 5524 4960
+1536 2077 4227 1668 1532 1572 2183 1592 1861 2767 2195 4291 3692 2633 1904 2669 2501 4125 1519
+2218 2523 2890 2253 2921 2382 2950 2921 3143 1170 2451 4154 4438 4140 2681 1142 2161 5436 2441
+1593 1417 2203 2026 2785 3959 1747 3258 1824 2814 3822 4531 4593 1615 5223 2840 3237 3554 1838
+1712 1801 2130 1739 3241 4335 1831 3682 3727 2678 2734 5662 3060 3146 2499 1926 2053 2780 1507
+1613 1880 1659 2269 1145 2057 1132 3357 2085 4834 2845 2673 3131 2120 3529 3885 2506 2818 1816
+2613 1817 4414 3582 1994 3319 1586 3483 2861 2073 1895 2644 3810 2080 1018 2620 1911 4050 1758
+1836 2078 2413 3031 1635 2960 1837 3474 2383 4149 1907 2754 5205 2427 3888 2282 2273 5796 2174
+2754 2518 2915 5172 1516 4051 2247 2844 4468 3963 2486 2889 6011 2327 4217 2379 1820 2281 2149
+2375 2369 2549 2322 4101 3061 2446 3429 2532 1534 2927 3124 3836 1636 2995 1776 2100 1885 2162
+2530 4011 2590 1921 2334 3414 2262 3125 3793 3278 2298 4444 3277 2836 3470 3034 3747 2410 2652
+2011 4013 3298 2329 1910 5950 1278 3450 3692 3848 3096 2551 4373 2064 3570 3377 2236 1518 1684
+1403 4777 2941 3007 1701 5140 2021 2383 5559 3741 1800 2753 3780 2047 4658 3887 2415 2473 2190
+2167 4001 4712 2982 4462 3734 3164 3955 2855 2426 2923 2871 4875 2188 6500 2724 2022 3273 1935
+3240 2949 2553 2984 2721 3404 2914 2711 3143 2730 2352 4352 3931 1761 4637 4305 2021 2410 3930
+3003 1782 1886 2964 2737 1803 1572 2278 3030 2765 2003 3434 1937 2802 3172 4070 2974 2200 2808
+3819 3216 3208 2770 2682 3111 2051 2172 3844 1565 1627 2348 5167 3193 4064 5219 3351 3844 2207
+3063 3458 1944 2322 3805 1815 2155 3477 2958 3001 2159 3214 5634 1018 3203 5215 2728 1979 2575
+2080 3319 5291 2934 2613 2629 1184 2379 3814 2846 2644 4478 5607 3728 3351 4807 3914 1642 2514
+3027 2481 3423 3064 2415 2261 3971 2799 6052 3772 4415 4803 4801 2076 3939 4656 4131 4716 3824
+2707 3369 2984 3253 2195 1833 3966 2243 3265 3683 2479 7803 4595 4140 3112 3396 3859 1555 6109
+3271 5219 2632 2724 2384 1589 2522 4829 4232 2408 2627 6427 3713 2970 1847 3717 4346 2720 5434
+4503 6155 3371 4417 2733 2119 4837 3387 4288 1800 1614 7605 3084 4058 2686 2525 2500 2452 6700
+2142 8855 2775 3128 3027 2495 2630 2809 2785 3591 2667 8565 2798 3821 5472 5095 6485 2144 4306
+3727 6398 1925 2710 1987 1344 4455 3112 5911 2609 3050 7739 2445 4476 3627 4483 4447 2245 3659
+2793 5947 2126 3106 3027 2570 2217 4747 2971 3076 3134 7746 2257 4710 3013 3068 4168 3581 4460
+2522 5410 4083 1373 4309 1580 4374 6618 3468 4056 2827 9491 2210 2544 5937 5832 8913 2345 4635
+3326 5032 2249 4979 4291 2681 3494 3910 1904 2808 4497 11000 3105 5227 4719 2972 6234 4051 4042
+3671 3008 3900 2736 3506 3917 3947 7544 2926 2688 2959 5768 2138 6495 4196 8111 5862 2156 5841
+1828 3864 2984 4435 3462 4404 1803 5063 5774 3208 5036 4292 4004 2935 5297 3625 11784 1628 6070
+4230 3073 3474 3337 4835 3592 2795 5754 4974 2334 2364 4249 4547 4871 6900 6317 6764 3302 4872
+6171 3836 3417 2022 4460 2735 2888 5337 3218 4157 5158 6984 2678 4831 3270 6738 9784 3529 2822
+7633 3540 3199 3639 4832 3064 2584 3232 3067 2920 4360 5551 5746 5394 5508 9327 3681 4497 6801
+7879 2730 1547 3029 4311 2431 5028 3722 5665 4759 6518 4882 3706 6006 4165 6876 4926 3168 7029
+10350 3911 3289 4185 3798 5969 4837 2675 7011 3202 8131 7575 1972 8180 5193 9034 5116 2622 10609
+9047 3043 2777 6083 3142 4230 5686 6740 5824 3367 4134 7621 4009 7783 6291 6644 6531 4042 14548
+14437 4283 6550 4526 4608 5589 4238 5704 5030 2733 5919 6145 5964 5993 7295 8082 7967 5126 10486
+10346 7698 5816 2757 3707 3320 5023 3420 6712 4371 9963 4146 5468 11435 6794 11792 4764 3974 11580
+10367 6006 6029 6419 4913 4420 5795 7055 5458 2415 6558 11382 5758 6601 7287 6810 3292 4706 11192
+7515 2640 8513 5318 6428 3136 8257 3904 8767 3647 8156 6428 10831 7621 5170 5817 2687 3788 13950
+6477 3091 7751 7113 6208 5268 5684 4646 4028 2393 6690 7490 4793 7924 6515 5779 5254 3289 9041
+12482 3948 7052 5503 3587 2983 6532 3716 3852 4020 5324 11323 6833 10127 5475 5933 7458 4582 8101
+5828 6053 9030 6256 7856 3939 8162 5602 9918 4096 11711 12275 8153 5922 10654 6313 6954 5431 6697
+10278 2591 9690 6407 4944 2734 5338 5016 6435 3957 10923 17535 8536 7233 8288 7235 5372 3819 6036
+7801 1733 5246 5564 6177 4529 7061 6313 5205 3873 8876 11839 11554 11113 6029 9860 3485 5617 7128
+6261 7638 4947 5499 3784 3571 8884 4846 4987 5566 12481 7961 8532 8847 6033 7340 6163 4842 3988
+8923 4939 8898 2683 8203 4602 7517 5310 7214 7337 7459 18564 5825 8552 7083 11539 4359 5179 6127
+5320 7038 8166 6736 4159 6032 7373 5990 6917 4333 6114 27244 5249 11147 11849 6640 5913 3055 8670
+4857 6825 8222 4914 4295 6367 8982 4050 4947 7070 4297 21940 8160 6117 5734 5187 6992 8822 6513
+8412 6509 11703 3892 4778 7119 4919 3344 8480 9784 7093 13856 7343 5861 8310 6901 3988 8666 11020
+11919 6220 8940 4299 5446 8537 6236 5928 8519 7320 16876 17025 10995 4650 10353 7051 6137 18593 9340
+6984 9245 16497 3568 6226 10854 10027 4783 12277 5685 12136 41850 7592 6450 7750 7944 6760 12933 10395
+11553 13592 7022 5629 6686 9153 3732 3539 8615 8149 12834 32679 7962 4872 13314 7117 4373 11978 10168
+13364 10840 11357 12040 6237 8282 12005 7865 7901 8609 8408 43217 11103 6623 14053 4664 4190 14537 5881
+18238 13016 6157 11323 8797 9596 7146 7374 5569 7378 7879 22221 22997 4664 13359 2970 6981 12627 9113
+21247 14168 5652 10294 10955 5826 4759 6197 8298 6475 7500 29107 12032 5612 19943 7352 3447 10382 13411
+20826 8914 7191 15356 10847 7488 13181 5805 7159 6914 5862 18374 23325 4795 21226 9282 3397 6870 9900
+53129 13655 6799 26092 9737 6026 9683 11012 6201 8369 8013 5333 16972 4280 12113 10613 4223 12307 13736
+15648 7211 2150 22564 6126 8049 9506 8706 10580 16441 7359 17260 9630 4926 12543 10242 4350 7329 13195
+15722 11103 11413 23318 5805 5290 11608 13824 10901 13702 9681 10186 12277 6357 9898 12302 3550 11489 8590
+10280 26907 5282 59114 6413 5812 31556 12662 5036 13324 9091 23266 16537 4266 3126 8233 5559 6384 8145
+8389 27990 9462 37147 7995 7672 30678 7001 12122 16130 5165 12721 7469 6047 10136 10308 7902 7656 13327
+6223 23474 10558 33604 5019 6250 26073 7294 6924 30443 7466 14774 7738 6757 6816 7205 4522 7359 17040
+6711 25641 13712 21610 5706 12778 18617 6019 5906 12877 11453 9197 13787 7667 8996 8238 7466 6454 5674
+7964 17255 16429 26295 4226 4961 17209 5256 8413 35081 11739 8527 9618 8421 6619 10786 8243 7468 8204
+3942 26580 17505 35177 5301 6591 9121 5247 6571 26321 13480 7581 15058 6886 3886 6383 5062 6662 10690
+5370 16489 19346 21488 3813 4156 11314 4726 3502 17045 11212 10248 16140 5436 4958 9557 6038 8499 11044
+3822 11514 24030 7825 7965 7224 7348 4772 5998 7467 8820 4228 10470 10823 5132 11584 5851 6938 13295
+7067 14936 15583 5638 3999 7282 7028 3705 7017 6462 7650 6244 10503 13379 3023 6897 5203 6301 13232
+5867 14086 10886 9691 3927 7456 6472 4054 6410 11852 7130 9960 6821 11310 4034 11430 8114 10588 10086
+6761 9534 6136 5904 11482 4902 8330 4969 2766 9489 9375 7700 8356 8633 4835 9537 4155 6634 11800
+8258 7890 4931 7827 6124 7599 8677 3812 4293 8896 5163 2401 6392 22396 4450 11942 5582 10120 9564
+7061 11582 5754 5562 12002 10080 6738 4474 4641 5935 3731 7240 5622 8100 5605 6685 4421 8604 6990
+6881 9127 8355 11834 11371 8141 3172 5258 4786 10220 4919 10022 6783 7137 5123 13304 9612 6324 9812
+5167 11197 2471 6312 10375 13246 7368 4423 4733 9568 6737 9134 7396 6646 4230 17611 5499 7805 7311
+6096 11287 6107 5461 6247 13464 5557 4757 5795 10901 5915 6062 4628 4237 5763 13239 10658 8753 4822
+4657 7456 6363 7346 7475 18849 5420 6986 6763 10581 9433 6050 4458 6911 12362 10613 14194 6937 4519
+5562 7930 3547 3037 6778 12711 8063 5059 5344 8261 7341 6798 4433 7175 11330 8665 15585 10017 7218
+4820 5464 3171 4000 5577 19420 13566 4737 2987 8255 10956 6676 8358 10809 11366 11477 19267 10375 3384
+7855 5431 3594 3980 10226 11562 9288 6398 3424 12915 11611 10714 9157 2475 6512 9122 17975 6860 5047
+6200 5288 4667 7889 4646 14875 9079 3717 4222 10706 6709 9612 5851 4710 9826 8740 31574 6891 6065
+3489 10020 4685 4853 2399 10750 5743 4973 6238 6025 7552 18826 10580 3866 5285 10208 16168 8208 6885
+7371 9390 5807 5606 6575 10461 4414 3930 5233 10314 7738 8229 14669 5601 7477 10917 11869 4049 7094
+6868 6696 8158 3258 5717 13831 4946 5245 8919 6012 8814 7569 7390 10706 8033 6167 8910 6080 3618
+3723 6303 9465 5431 7617 6158 8784 4375 4147 6172 10139 6864 8804 7695 5226 8062 14311 17178 6600
+6243 12778 8623 10594 10610 9263 8195 5149 4188 5518 13546 13495 7552 8114 6007 7578 8123 12818 11751
+5721 4742 4715 5788 7415 5591 6163 2584 8568 11190 14860 11316 3811 16709 5803 5463 9023 9992 6493
+6597 7130 6404 5989 9819 12022 8702 7155 4044 6333 9914 6867 4500 17758 7355 13095 8695 6523 9013
+7474 6756 4202 7161 6938 8500 9363 7325 7248 10185 12057 6558 9308 27074 8419 16970 11415 11387 7502
+8665 7422 6876 5142 8364 6658 8316 4673 4762 7559 11489 9703 6285 10347 8229 10046 6525 7776 17217
+4554 5632 4425 4160 12307 5505 8134 3167 6195 7176 17194 7873 6273 16618 6347 17976 5360 5347 12095
+7438 5831 5203 4413 8434 7118 4947 6419 4996 5507 8782 10138 5637 15602 13178 12169 5170 6611 11518
+15586 6519 4328 6239 7940 3549 5535 4618 9466 5992 9808 8686 8182 15772 8066 11117 7113 6167 11774
+12840 6079 4243 2793 4162 5621 9464 3875 5525 5791 11302 8737 8634 18421 11122 13937 6375 6972 15444
+11530 5530 4442 6126 5870 5854 11100 5471 6926 12834 13118 6709 6155 11784 7063 9460 10717 7902 9219
+11160 9145 5053 4699 3482 10523 13480 6324 6267 9671 14387 11178 5993 10011 10738 5229 8134 9795 11529
+11165 12072 6226 5344 5581 5505 13424 4841 4990 7535 8936 13698 5321 8459 7526 4976 4733 6397 16532
+17766 9833 5877 7686 3340 5845 6870 5092 6058 9163 11274 14632 12511 10772 7574 3912 4646 8274 8260
+9157 9033 6260 4959 7506 8016 6481 6770 3343 7030 11220 13948 6829 5165 6703 8436 7006 3705 5713
+8074 21030 10035 8829 5548 3183 15620 11953 3576 9184 8486 7489 8645 17851 4431 4782 4918 4013 8667
+7852 7637 16519 13620 6871 4390 10000 8375 4512 11358 6886 9387 6635 17597 3428 5007 6784 5068 6121
+7859 14642 10171 5754 7715 7103 15931 5996 4357 8163 8389 6673 5383 18318 5704 2937 3933 7566 8204
+12965 11875 14130 7512 9602 4509 12316 18765 4698 8985 10467 7750 9337 10651 3911 3375 7741 6594 6126
+8058 12016 9795 9079 10577 11133 10480 25707 7545 12176 9977 14452 4484 15555 3767 5410 2655 8712 5817
+7446 8629 9555 7512 12923 16247 20056 24838 5979 10597 5087 8132 5543 10670 7498 6874 15930 11930 8372
+11804 6943 25139 4255 14070 14090 21065 25867 6317 11517 3634 4224 4742 19207 10063 5583 15704 11612 6904
+6901 8256 23102 4742 15701 23887 14266 36396 8606 11505 6928 12329 5470 22276 8165 5578 14125 6753 7796
+17189 5617 11454 5124 9754 18379 7048 24171 4351 13351 6576 10282 5967 18232 13724 9765 8590 8126 8094
+11823 7062 8287 9970 6619 21929 11216 22657 9409 12716 9809 19363 5444 18142 12583 10528 8346 5580 4444
+8497 8224 8393 11671 5413 30223 7257 21480 11137 15628 9790 11945 6150 10460 14170 9075 25474 11757 7939
+16239 5073 6303 9733 7260 15899 2762 16170 10909 15569 6040 10733 6659 14263 7888 5740 18182 8577 6958
+14039 8507 5114 6491 6564 22165 7118 7641 15528 24536 6279 5273 8226 16145 15069 5894 14171 11095 7573
+17421 7203 8023 10461 9891 32014 4960 10400 19339 28459 5535 7306 4540 10378 19390 6549 18960 7059 6527
+15920 5240 5661 25900 8215 38197 7388 15669 31426 29095 7329 4376 9834 12346 16770 8283 16137 8648 5925
+8611 6020 7709 8012 8792 24059 6606 14555 41240 48792 7209 5373 6600 11014 13680 5751 8810 13310 5238
+16884 11448 5751 20005 12887 21115 8996 19855 43122 52370 7994 8701 9008 5928 13666 5475 9209 15392 10595
+8290 9621 8551 9192 5413 16043 7452 16341 34903 28983 9626 5633 6859 18584 13881 6241 10999 26837 8332
+6787 10923 3368 11297 9565 12630 6567 7314 39795 51982 10542 7141 8961 14179 22796 6696 7098 15417 9693
+4666 5104 5125 11354 12889 15047 7949 14182 28552 71087 8914 3848 6226 8533 14278 11060 9853 17075 15823
+9952 10703 4915 7926 20363 16050 10364 8731 24042 36196 7150 7798 6238 10213 22429 11443 7153 24501 14533
+11091 8722 6835 9128 10730 10426 12163 13063 23816 44282 10927 7920 6153 11670 23727 9029 5995 43121 17692
+10924 7900 7465 7117 11718 13835 18624 14735 11976 25907 11692 7592 9750 14678 30332 15153 13918 54705 16515
+6956 16181 8565 7947 8241 8406 14196 16331 18217 26235 16183 7242 3970 18729 28384 13364 10656 48081 13741
+11621 12325 8481 3706 10104 7576 10343 9143 19548 16685 18501 19385 5341 10999 16647 12747 20408 107839 20837
+7824 11187 7980 8222 8609 12563 13778 6008 12709 14514 45689 25394 11869 9301 24371 10935 7771 89688 19656
+10647 7141 12192 8800 7584 19037 11417 15212 15027 15218 24534 50141 14437 9033 23246 7762 10375 89689 21664
+10866 10383 7324 10457 8138 11748 12516 13017 9389 10029 44637 61952 17428 12105 16306 8743 13970 48981 22344
+8793 5837 6296 10688 6706 17760 15613 15708 8378 7301 32469 80049 22318 12658 25218 4238 10770 21163 18474
+4378 6615 7175 7376 12851 26789 11135 14989 13420 8836 25615 57146 10190 14905 24255 19319 16526 17417 28344
+5334 9382 6748 12162 6175 36931 7771 32019 10515 6256 34438 20549 18525 35565 8324 12568 16395 18410 8800
+12881 6990 8827 11403 10252 46747 6703 10901 22714 13078 44275 34191 39304 24755 14692 9499 11835 11769 10322
+10495 8877 5810 14069 13800 46122 11996 20285 15110 8618 48111 28178 41637 18697 19894 21397 22638 11733 12579
+17648 7215 4990 16143 12273 34839 13514 24605 9783 12613 26778 34277 32722 11221 11365 15408 32527 15193 11150
+23964 12644 4392 11076 8470 55461 12674 12695 11114 9814 26636 29784 31172 19168 20021 26946 52085 13990 13014
+27757 7972 6618 23552 16861 23133 30349 22339 14250 11597 28938 21745 31984 16387 20911 39237 117739 12857 8789
+23480 13821 8065 26214 16929 39596 25903 25303 12292 12019 30504 18511 28178 22445 15449 32904 122602 22684 22090
+8817 10156 5950 26158 13706 36067 19327 33897 12790 15746 18157 12384 32581 16881 20045 77596 98523 40493 23083
+16221 13255 5508 20198 7259 66060 22744 30594 13558 30313 18334 21817 15953 16370 19771 66229 69035 20627 18196
+8975 11229 4676 17541 11066 90568 8760 31653 10473 42808 16978 16699 15297 18012 21428 47437 56858 36044 14108
+13182 7098 7601 10988 11559 67669 27259 31522 16118 60230 18944 13770 5188 18856 21658 35066 29328 30046 24389
+13299 16455 10992 11891 8536 90481 32925 26765 19137 55226 29731 22608 13899 16701 31034 37868 16726 37428 43550
+7914 8523 14782 7338 8550 89880 20652 26822 12714 21978 11557 11278 6419 32168 26812 29414 22570 21425 40755
+8158 10460 26395 15224 12065 56065 24959 21750 19004 53734 18067 6376 9509 28199 44521 38733 14849 15217 39687
+9314 7953 12438 12090 5843 56203 16237 21480 23130 37467 14549 18788 22464 21341 49796 46556 9410 11227 62260
+10695 14179 13410 11294 11674 33728 9546 18743 31620 44370 23449 17819 23656 49525 42910 22764 12755 16927 61664
+11688 8521 18147 7082 6904 47780 16343 16262 62231 24837 21271 10382 25168 50653 46840 31884 10193 19624 85519
+20338 8720 19935 14199 13049 27715 13391 11429 33947 34033 24696 8014 29819 42177 82909 34097 11153 15551 75125
+26991 13555 9816 19477 14577 15592 13866 8084 39505 19884 26463 8473 21455 22961 44040 29052 17004 10334 61433
+37343 25113 19776 17282 19603 15015 12316 15738 57372 11930 19788 13053 37217 16595 62898 15843 10079 19642 61257
+27993 12918 26770 30772 20824 9674 12902 18015 69005 31141 30447 19103 88697 22294 91640 14048 9325 20941 61176
+34754 41007 50821 18618 41366 17221 9176 10783 35019 17574 40643 11721 60504 26900 99737 25478 17231 40692 64169
+36655 37235 28876 35403 47186 14316 13097 21002 50126 34623 26059 20577 43916 36523 96754 22079 15737 30308 79550
+26596 47121 37193 28029 64749 10776 14257 36769 51219 25325 26302 40957 28711 33982 145588 26570 10666 51007 84662
+27980 41935 20836 25485 54302 19060 16714 34335 102541 13304 29814 25498 23943 15454 90145 31153 12602 25538 63716
+29333 66647 30899 38360 49309 21124 14702 18568 157311 25213 33018 36615 37141 34354 62766 22160 15724 33456 83007
+50319 43702 40696 40606 37178 21367 35789 41603 79095 23749 46307 61237 23207 21396 105238 16950 12492 41223 99810
+23418 60084 63146 29958 44625 42905 23916 46685 68047 25220 44154 99626 16635 32225 88150 22402 24330 23659 127584
+40312 82531 50366 36627 36974 28170 32075 34642 52227 17095 32673 98377 8097 51629 83565 23370 15552 24474 124432
+32616 48905 20429 33744 23904 24667 39280 38174 74874 23659 40817 174856 19528 54821 108248 14628 16302 45057 193818
+79035 52738 30467 9126 32574 18983 82315 28755 130776 24187 34984 248982 12658 15253 79373 16436 32764 22732 215465
+48975 108434 22685 42567 14814 25911 85749 36651 168588 14928 61849 286965 10766 39133 69619 16906 34574 41388 162516
+66931 84093 30426 22845 64637 30190 114267 19633 111462 22951 75193 260009 18576 15002 80240 16309 32587 43767 129796
+111738 91145 28940 25731 36780 22115 115496 18363 136950 27293 43741 279975 18961 28440 29364 7073 33208 62324 98762
+168805 38437 33921 44868 81546 58206 65369 31304 146715 22656 65155 203220 14012 31891 57184 12982 53160 115008 92988
+142637 32591 41887 54999 49617 78723 57677 13680 61217 66876 65858 205064 16076 19969 49088 18812 37300 162571 108047
+150392 15521 30170 103060 69478 145349 43203 16587 44188 104469 43865 217156 18737 39959 63859 16974 31416 67790 68461
+106247 25337 29479 174356 43971 52057 48795 28631 66333 102601 51178 109942 21119 56111 35868 14166 34258 34031 95683
+154302 31200 44735 148632 62504 55475 52791 14506 43341 106430 34896 92764 16952 38168 60505 39770 47627 49088 45790
+176005 25068 57960 118177 42633 80167 41712 26804 40461 124138 63773 86400 9167 60397 96005 29162 45402 28028 51439
+186069 42292 40687 94729 37980 58945 37426 26808 42010 143087 37511 41145 20699 48070 65829 14813 43447 34392 36919
+211133 21425 93312 134394 37491 53453 20638 23180 32164 95037 47906 30290 46161 56540 83507 28506 81297 25897 20500
+171756 24574 135607 210238 39081 81389 21260 12168 33892 198964 18618 49644 74833 33236 63112 33581 32730 28768 19618
+141560 42777 158619 257640 70676 69843 24045 21411 66727 65478 20471 44976 125025 34478 85770 19159 71841 22975 36372
+39432 42841 225887 203913 42050 35514 36743 28396 76359 88666 22067 24165 173800 28847 159613 17662 82005 26817 46100
+15344 123625 238155 141025 24999 36247 48888 16521 78517 47439 18745 42300 161459 31724 216581 35824 48970 30330 23868
+65914 138725 129343 200090 19463 54393 45962 42690 105471 54873 33429 40932 112949 37833 142407 48428 133766 45789 27494
+23463 144752 120570 94211 25252 18251 80263 51881 153709 28531 24403 19445 148233 23938 141753 59233 144781 46458 55172
+33391 86286 116927 107390 30955 24432 88552 56272 183963 24052 47959 39648 120126 22022 163778 47239 205406 41434 23064
+51520 53356 51382 128701 53787 23896 44954 43697 139595 26235 32586 59092 143601 64475 126321 45610 137493 41258 56925
+22833 99896 62687 195239 41536 41800 82930 115106 98575 19341 26577 27820 139200 51478 129389 73234 153627 51664 70884
+23435 96363 54084 89902 59748 38646 53270 98489 89673 19162 39679 49610 47052 79492 138676 66108 164560 26373 41359
+22261 115396 37091 65261 54895 29410 189152 115577 94957 29985 20596 69948 67240 73261 143483 84934 123699 22533 23052
+41642 89542 30796 78520 124591 24278 146052 81119 79066 13337 29885 74059 60016 105345 86210 86091 133657 25209 9888
+98465 156048 38692 69931 98782 34690 149401 125984 94553 15136 54729 52080 51640 79066 115417 42238 204717 28972 22401
+218300 239304 26708 92789 97496 28232 125960 160960 86661 22094 91217 126354 71457 62582 67266 53832 204966 23754 25570
+204153 206467 22663 88997 44055 42613 138230 202822 141727 41785 74587 119154 81019 100873 67624 37937 117826 34117 25823
+189737 88453 29534 149000 46811 33777 95522 247876 158399 27734 80972 205181 106150 72820 45593 48263 58417 48541 19279
+154419 131118 30854 136507 60521 31676 187915 211696 190268 49485 98176 193994 126916 179818 47789 46702 37984 41653 30489
+143986 121128 42486 158868 43106 45240 138624 108074 152898 18479 115824 220366 184126 152650 118510 32275 56897 72276 34415
+90823 112051 41721 170423 69492 75436 125720 157744 150409 24127 133941 235053 131490 195728 96266 45519 56997 35687 38747
+138839 70374 60799 226834 87289 122146 176465 196501 299358 31200 164485 193538 134977 114345 71779 71388 92782 58450 20019
+63441 38225 42882 213725 111723 137751 239274 81309 230442 33119 174605 180127 125587 182504 57564 78210 85322 33575 25964
+75402 27645 64255 168001 50211 275378 215586 135070 219398 29525 161690 170868 136747 110706 74665 86761 95043 24907 76852
+55835 29326 66189 195782 58345 106573 208991 157714 212146 33144 111178 268225 98537 120715 39853 126060 105640 13451 78956
+84103 31586 92107 141661 44143 244677 228559 120297 106052 21880 105172 206355 83268 106508 89011 92549 97150 36197 47208
+116461 16892 155257 197868 41073 246556 85781 71280 80708 23779 74978 201923 85803 130900 62191 72844 130775 20331 52579
+165934 27504 126544 224537 43415 218959 64112 151852 118436 13398 107910 222947 133481 178806 132972 50770 151200 22402 30260
+218326 19468 89999 229126 38638 171183 129411 63736 55713 22307 82425 164053 94232 147356 135417 62176 155744 23228 41665
+161322 21752 126992 80352 40911 93240 90030 73853 124717 63057 78235 58764 108588 250641 158626 42304 98505 32633 63459
+163790 32570 140734 170421 30062 44869 92504 67543 57479 32985 122153 56201 110750 238201 155886 86028 87002 36132 35691
+242271 24650 160935 133383 29406 75219 172148 53707 81799 25530 180303 80657 86686 181776 102909 111430 58008 15702 26782
+247936 17764 167372 160881 29158 58689 53788 97110 74775 51740 176188 43609 135713 249325 69352 78381 27166 46888 54320
+274671 21992 62986 141558 33994 20133 75971 124252 61695 31002 210654 54819 59277 128802 61670 101288 47118 38633 26433
+222921 27838 101637 144684 50609 18728 55852 112506 80200 38529 138026 74883 75126 146413 30678 76502 89474 34896 24139
+196811 24024 99336 145314 44815 35153 47802 105604 149096 70258 101233 143355 66881 71302 37047 85309 139484 21276 30238
+270551 28225 114889 117658 74016 18752 58141 249277 176305 45057 81482 108133 34217 108366 33310 133716 115541 26233 33850
+148969 34649 165133 135122 77276 34577 47860 201823 107032 46856 97915 96871 45112 66140 36097 116633 131948 22036 89563
+92163 53674 153015 114517 120222 58418 31607 215802 87053 98017 147571 139542 43686 63383 47333 92090 149657 29727 115154
+50938 40052 233283 90048 103089 62686 52457 229605 66848 98897 103047 207396 55293 62242 42582 83817 128033 34180 62028
+64821 46769 196210 81295 185940 107447 32697 120710 33900 162315 141162 170509 90895 30178 41034 109656 143871 20003 108278
+50544 58234 105575 100813 142367 140680 25066 228365 28433 118829 237870 174279 77607 55968 66124 124840 115456 41119 81019
+14874 100711 168357 82586 99526 83755 49001 210471 50250 118576 270336 71837 103017 58265 66967 129354 106561 31502 85340
+21237 112295 112386 94995 69919 258357 72903 122218 49202 244642 199415 91198 49810 48791 63575 165165 115627 53377 90900
+27455 161567 136040 143074 75714 141657 78348 92288 47832 194965 227435 63482 88028 39424 127961 131676 233677 60357 113509
+23361 135764 100750 106024 35440 108111 58089 66102 89791 195053 156236 61647 94017 14921 163272 149532 115977 97739 90107
+38045 115978 81646 143433 54051 171712 53527 32831 39845 221932 145442 31679 67583 28973 174475 265255 165669 123783 91653
+62890 133539 72372 99854 54813 161816 25372 36704 40186 276632 149957 31990 57794 32219 220398 196838 109329 124701 71576
+60141 122639 44934 94662 51308 73426 67005 46642 28291 208150 114154 31361 115523 19561 152607 229433 63613 238516 33434
+58931 148420 60031 71696 64355 86071 106562 64491 22863 112551 90469 16135 44396 31198 98690 192553 57072 227748 41195
+139151 108449 59655 72064 77933 86401 48785 35316 27631 190702 100000 12897 34502 48383 66785 259911 69142 197692 46936
+122589 144749 90861 62771 175967 130563 70982 106147 30855 209896 13551 12154 37025 91371 24698 197669 56418 186833 45245
+217734 132458 100826 110060 174929 109777 49504 132224 47957 214636 38814 23174 73064 103930 45697 173022 49334 168391 38605
+250117 127977 148397 113565 135501 79894 95602 140525 60542 131250 26001 17031 64518 196091 49733 151062 40475 172250 47495
+251120 108014 192447 60869 131402 123224 139342 116425 123636 122046 22338 21150 112842 241904 42593 158689 37395 144503 75967
+214739 66739 160818 77303 70925 113538 230424 53496 165295 138853 29569 20434 120012 97616 64892 85282 157034 138521 99278
+203246 65685 177960 99597 52219 90497 215983 76235 118401 103869 27637 29530 79159 115981 62008 141072 105323 151884 158390
+107441 61963 123537 96551 57618 109062 185862 32888 144235 82516 46510 55373 110576 105429 24424 108931 112635 168605 115144
+116568 27225 224357 223552 40857 176681 94146 86691 178561 101980 31148 113536 151785 111899 33421 51478 168922 174752 69420
+112588 44185 180255 153673 24035 217422 193166 47967 173863 151329 60900 182530 77725 118519 47685 111440 79354 150613 83293
+165128 20545 168695 67307 62173 250368 142792 44234 107432 212148 130100 199461 53136 182582 46210 81884 81140 123975 70748
+229143 39238 164457 113715 50021 172908 123205 22900 162203 186874 98453 215734 42166 99788 92742 99248 70593 67605 68569
+209971 18043 193467 139151 41876 224422 157533 17707 60881 112796 124275 156736 40380 189826 117833 139191 75307 133916 115643
+201690 39406 201905 105770 67283 162077 70599 37832 117315 77816 175156 206458 24300 254121 113893 131224 119788 89511 172741
+187703 58413 258112 73156 150282 138520 54700 30198 161153 71569 196003 124254 16261 246727 168686 101299 75011 63128 202333
+194128 64738 157175 75829 109386 122836 82622 39294 133891 82539 231908 94019 13781 166855 166587 150880 107249 33193 202555
+215385 79864 206419 58880 204629 71073 83820 43884 115015 90076 138604 103461 29003 197002 124799 250038 66589 61816 199046
+234984 94412 181140 99223 210169 107062 86491 44115 222051 32496 168992 55353 21738 151983 202001 169295 95334 52258 179682
+232899 102499 163936 89521 176877 139676 65484 56049 190060 56212 111144 46107 21149 139390 172090 187048 87060 62551 154001
+260943 158046 151327 74102 181913 122923 99187 81749 145830 24466 96945 67899 40102 70309 53571 85028 108408 37527 181490
+159924 162696 203410 74000 86807 86987 82475 69472 169064 33863 120123 50168 40102 94589 24865 93349 146092 22814 169447
+146902 157189 150635 149353 124351 128886 84401 105047 101172 36371 141065 50847 35284 47806 45325 66710 185700 22755 230651
+58946 102716 166286 248505 79359 93253 80331 58185 168455 92939 87491 59275 35416 41595 118028 61434 216798 26578 80994
+97413 192331 111244 247795 27369 90417 101309 57963 158717 158940 86519 31801 34827 72094 39555 76875 198653 29569 77575
+91290 150423 153972 245810 55754 97215 161015 72523 113943 123262 61964 45792 34535 41518 33340 104146 167206 48044 111350
+102532 170511 210641 129395 42165 102717 247278 57281 169273 142114 172509 32721 26011 61228 73134 96890 161588 53374 72466
+96842 100005 168074 35795 33198 106781 192426 140530 76573 140760 151730 47901 24133 145077 45436 124052 177955 56145 106893
+131755 77432 202107 94916 29676 46157 194186 158172 62947 138109 174411 26352 33134 166943 30172 139822 170043 53004 82275
+171849 83758 135706 181280 40035 99255 170709 157400 80211 90367 263787 43583 38791 216696 35252 66860 140662 41064 84842
+144786 52615 216577 134766 75531 73204 263038 139340 68881 49441 180604 25892 38233 212084 58365 75434 120125 31340 51965
+127200 41284 208073 176770 82346 67187 233648 178385 50729 68351 187117 37904 46055 181224 75820 163907 119492 34339 113319
+72616 49538 287555 160677 132219 118548 225120 131834 70080 111175 93116 31585 77780 254030 31613 110127 62089 45531 149974
+62019 35882 242492 159241 184840 133721 179454 130241 37289 95479 91765 31385 59756 187301 47334 103498 135754 24867 101439
+93929 16722 136026 107407 256321 180691 143488 199697 26052 148099 65354 26644 84815 199942 36650 42817 180142 38137 168304
+96126 23147 63766 86960 212334 139663 192364 156886 46574 135503 56889 32821 173099 214894 49435 47571 84688 25442 114544
+99168 25646 78777 101755 159746 86382 162504 268246 27748 174034 72712 63439 172533 101097 47238 44755 208546 40499 79415
+229659 32117 61079 73693 97580 115904 141173 256883 33705 104349 182668 52515 105768 120112 37014 21141 256604 47607 106442
+234704 27419 97385 96853 133190 178625 198588 208437 33053 126642 176720 54973 124778 99341 18651 42665 203485 50524 74976
+220800 38471 146166 133556 106531 202362 165135 223202 26517 100596 149692 37041 100268 153370 31286 44529 133839 39039 93979
+246192 43142 178211 95298 143358 233661 234032 236278 19525 124992 154934 30898 202122 100871 43405 86700 207377 38599 65950
+208246 46942 115741 178270 178460 166489 231357 134782 30197 140205 124318 46092 144563 76436 31358 107937 205667 37027 88418
+236331 82193 121045 151405 176529 95027 173826 128705 47218 178344 211146 33515 158176 42991 49623 213300 190808 55178 139917
+123021 135666 119752 169862 155391 87903 227086 166068 45541 128272 154138 25326 256077 69180 73414 233434 194401 64646 160602
+88729 198928 55799 180174 204535 81525 155488 139543 70802 170700 107499 18278 170115 61460 189317 166719 158730 102521 124040
+111020 172418 63846 203301 169575 51623 122181 242125 56983 126833 152633 42210 91546 112701 205828 96039 169906 116910 99137
+51727 64923 37643 215561 305983 53942 91976 298854 111374 102789 132047 54341 108021 78560 134276 135818 203357 141344 126009
+43092 127846 16770 210639 181660 65612 60002 193781 125419 181666 103665 101642 58207 136598 160075 120063 151487 122082 72355
+91620 134103 36300 210309 119845 91333 60307 131006 215983 124362 189035 132092 86762 170843 53378 108964 199424 64257 49977
+47622 52433 36843 215141 102397 157983 51841 122000 228299 77965 134502 221305 63207 181828 64101 125039 98041 91270 57834
+74918 44102 46945 197333 36166 182846 91591 107212 266653 79005 128430 269812 36644 142226 136843 64086 79829 75450 58249
+57199 39602 24714 109851 129653 84693 110443 86594 266463 69243 69444 147928 56037 102384 109409 53869 103566 60424 59966
+80539 77775 39220 124134 247479 77589 199870 82277 167229 132452 127101 98903 44629 116130 171387 63425 189836 62099 108815
+120244 116807 23919 202106 173778 72719 198823 80199 168597 102864 47039 128122 57977 171352 129069 46559 167526 67706 95681
+100990 162603 38345 188287 78919 73236 100982 87650 119295 99702 98163 62355 35729 117858 147238 44465 144478 94951 105881
+154374 97548 43793 176936 121489 42717 64576 100323 68604 96042 170009 62654 83153 105857 220844 64556 86612 76359 194044
+162700 120268 64707 203018 167640 53953 61418 175753 111848 131598 144768 64413 83382 137826 209904 89140 132260 110662 193267
+140548 213080 136349 177871 136853 46323 48240 123987 106518 73767 160250 136200 92385 70239 269824 59539 199528 47246 124123
+170786 119896 124200 216840 88144 32987 47654 82156 70263 123213 144603 64758 115693 108940 196846 107602 210364 55604 135468
+195270 96841 141302 87669 100499 50898 45931 167755 85222 156367 110083 104702 163936 97787 215027 135004 246980 98365 121408
+101676 122614 188515 197832 109873 80859 33444 128528 107344 132261 78096 117881 266612 68681 215792 122008 257732 77170 123825
+81507 145523 254861 173796 43230 38833 92650 176223 79432 197514 92029 114250 191713 179208 197439 199351 223767 63124 100841
+71088 158516 203255 104045 55122 20316 116379 177616 66720 205790 67311 195727 133296 169356 175598 158697 225784 62278 40441
+41180 185366 127605 114095 34697 36164 75440 103071 124263 137439 80861 113242 77373 200310 128803 193365 179486 56310 77709
+35801 197745 70095 133067 47152 79265 88954 133258 115053 132512 63745 132509 68466 242275 163130 176645 185070 45622 83940
+36887 170182 47763 131396 77980 64533 139332 131709 94175 88426 105074 95684 56898 208409 96532 183397 135999 48999 73961
+75632 107242 30349 107779 62351 103885 100014 85543 91057 77499 102437 118398 89579 202597 44609 132740 193734 43415 58248
+68662 152768 15118 139076 83523 80624 96028 161340 74447 201707 117490 202119 132916 123921 45067 117760 149385 36564 46092
+177312 142763 24018 133350 104087 64566 131395 108141 96844 112926 138236 205074 177963 113748 76250 203394 147891 54387 48823
+242361 108688 23056 181820 127717 121175 134389 121001 82430 215149 72119 254329 106928 261746 43738 179459 228772 96034 37402
+166344 140720 20303 196439 60963 238668 98292 130023 87287 165996 159451 173749 146936 210431 32481 176553 126891 70608 64919
+56125 89328 31527 225802 36162 196081 65344 133442 55833 144900 149490 201576 99736 184863 39596 158039 209369 91841 65977
+100816 100814 19670 147200 47216 278537 60770 106157 77171 238005 223016 204637 115080 298157 39577 149697 210297 185493 68703
+66179 101644 28754 200395 29126 182944 68182 145203 52718 154420 214844 145826 155433 122740 55537 229115 134692 75091 88599
+47231 151671 52148 190232 59149 162044 29230 148493 31648 112392 127610 185273 141786 193149 143986 181180 202881 58075 75961
+28055 118299 79713 264022 66096 104779 79948 128786 54944 93563 124654 132155 191856 209663 194243 281307 235804 47928 53565
+50355 152887 92722 204200 57165 223282 65530 112769 97392 130735 120427 94215 141957 255710 181449 164739 195913 62202 43047
+50980 163946 157654 194942 42332 138938 30648 133888 191165 115003 94321 158049 100825 207160 236231 158725 240183 66158 52243
+79158 198111 229780 114400 59284 145222 55242 178778 116936 72323 86603 166549 151132 228763 255362 136268 224641 66179 47801
+66004 275497 174143 167112 55270 194795 88811 201727 148204 125099 101988 186317 84829 142633 235066 130644 246058 51559 107901
+122298 283309 118930 131611 127670 257350 80596 135985 168454 166065 74149 213770 112155 139736 146051 187965 105325 37127 153985
+69193 155531 124309 112064 110309 185435 69575 195790 76854 95464 85342 165453 76881 115090 162686 176217 149136 54879 133181
+191668 115347 113469 93065 158957 164475 45506 270336 131550 98213 103980 138088 66326 163766 207382 127734 185430 38628 139534
+101812 81038 94443 104451 150850 160004 42172 233367 95480 78761 78982 223006 58211 117218 141845 174312 111637 39181 142978
+115391 77078 80560 105031 184067 172363 62470 220111 68326 44449 92908 166062 91169 167697 69181 230346 65375 39090 146007
+155121 100300 73889 126523 82688 200770 43200 155474 67483 35968 101033 101053 87069 244970 57639 170865 73627 26084 153028
+224753 102714 116597 131059 129584 106870 71023 148038 70605 70259 189157 129014 106686 124692 33677 161791 37464 80550 124802
+204230 116950 102528 115091 129223 91625 119543 140052 151571 59459 112557 114171 91668 101287 30202 123293 39721 61585 199971
+169659 104152 111715 210950 179806 66863 243030 156050 125274 91658 133541 122807 74174 168391 24861 105129 130707 59460 183879
+222746 139124 131681 80070 206917 41607 165414 118985 122382 103805 118080 122504 125673 190920 22967 87009 88354 72530 95645
+159265 164113 105947 46627 190918 87101 111815 127130 91404 87241 139986 139132 123510 171927 21030 40356 106711 91488 42422
+139309 112479 193794 69786 196934 125556 51648 163881 103652 129143 131437 124732 179583 229082 24386 83647 63509 99957 71911
+141099 116162 248585 82030 141521 69218 49764 168246 142808 55080 171912 111137 148160 121817 21832 56578 60258 133262 61474
+80249 82344 223476 72621 151299 113013 44416 177696 144067 83626 155072 40858 185686 131531 56458 83078 54513 69803 67889
+84388 94410 231590 86368 117143 115831 68023 135357 196393 29063 174938 123026 142812 83059 39289 180740 41987 106660 54565
+47934 83956 212267 155179 100454 93570 34489 117025 107854 58852 157173 87361 138646 133719 98810 213302 58360 77007 52133
+96056 85620 185931 172421 158725 94283 95381 105709 136623 42611 170423 90234 111428 142870 137155 176922 73360 39032 67038
+134801 57887 193766 102566 135361 97293 65242 80907 78781 67103 147513 150042 134181 143435 119888 136096 72451 53974 36538
+97308 59061 204296 48184 64844 54721 98276 97874 43500 46481 102239 182810 174750 88704 201184 102624 82223 76597 33091
+62087 52512 250638 89295 56793 72692 61810 94906 55544 85370 124042 218870 168913 87401 156168 87052 139440 74443 37373
+72326 70699 197981 136613 58304 48238 150104 121120 31086 172957 171507 188962 259114 64422 132317 40918 248955 33847 69666
+51700 38601 215955 73732 31081 43025 153218 111462 27789 261591 94503 207104 197908 60033 98460 84714 252718 78108 37785
+50196 44668 198687 209328 31751 37322 198457 78902 59657 189873 111290 272264 198368 45681 142982 110632 262736 48802 31878
+67991 48922 194889 233069 46789 59349 163964 169183 83767 115490 168848 172250 257095 78150 154537 68328 223403 27241 55024
+68168 62730 251409 204750 42364 60050 199263 174750 94458 85626 123890 188583 181611 75545 144880 95828 178479 59741 73086
+131211 75820 194723 176398 46708 143743 108993 214122 107287 84759 129953 185660 162695 167093 105498 150879 201018 82147 41781
+209312 79674 242605 82192 45755 195422 225382 218161 132578 70097 64673 252403 117910 107079 113056 205862 118842 81631 84715
+216682 131101 217366 111045 61074 95401 140313 192067 197611 54931 89508 230542 157706 153881 119009 98785 110425 93169 110034
+174387 53919 160430 79700 29545 127705 106574 157586 142529 59362 64776 109805 188681 145185 71977 175188 83409 107765 135586
+167703 116063 78073 75587 66663 88782 130164 140735 196044 73307 43583 125322 178185 113349 121151 191041 93220 119445 164565
+152171 138434 76776 66434 143987 104510 135326 166719 161931 50701 61749 84627 194144 144891 138930 124497 156737 86820 187865
+155482 129865 146177 67432 103167 124718 115958 205186 194880 80173 49104 80764 125047 272489 180605 69909 88393 70376 144718
+206266 124632 87770 107037 119201 118178 149065 178543 146026 81783 46212 153752 111503 272517 116745 86268 206347 59586 223816
+225425 134970 49384 134817 124567 87850 125622 175764 91023 68578 93803 103062 81736 208932 148655 141473 176134 65901 226742
+148250 168902 84988 171655 144207 129791 107905 184148 109466 40918 161829 48609 170901 190026 69798 178164 143712 57235 255658
+97117 215809 97019 117840 120382 105891 45109 100312 143915 143252 138689 168502 153860 204193 50653 136383 166880 52289 181681
+61101 80422 104678 83871 137262 83323 106823 248355 172541 166039 71784 223139 215387 129198 66321 135710 168144 27377 175003
+57079 122178 96615 89197 137291 107941 100784 216633 147494 92883 77155 197116 167275 61304 39145 105309 178303 30770 146132
+76342 129399 170954 87797 132853 83156 118069 207912 136876 138998 93651 134521 174068 141512 55462 94733 223373 65455 189417
+68799 83332 247037 71828 152419 192178 127869 165015 159104 134878 88414 99205 148979 114117 56171 70444 150070 43758 169106
+60990 39268 239097 59367 60704 150218 169252 166991 135083 147600 120201 151063 130086 106474 66835 90202 167907 43539 172206
+73742 56531 205582 74030 122530 159505 140002 199796 65332 147673 115279 112270 52297 162519 96305 74795 191773 25196 131553
+38417 85645 163588 96711 252826 179773 123442 253636 70462 124854 77196 100704 70547 234689 168225 66636 207296 48305 175533
+69326 58660 129111 162624 270050 157788 218326 248103 40788 113032 162803 64801 125421 188011 203907 102875 202504 27551 166463
+49508 91354 97375 233585 272403 184379 206776 211238 24347 216848 126221 109011 70505 209673 138185 105600 127185 52196 170770
+70571 82398 74538 96603 189182 236594 217529 172115 18225 210888 113246 112997 121544 265813 154375 150397 150221 57414 134410
+50867 53913 146716 113701 142865 241433 108747 147024 22371 188593 148876 72655 208409 236098 148225 146407 164919 80320 158549
+120897 104134 106958 73828 135655 178976 208186 119934 23276 72865 197904 51768 169371 234629 65749 126016 108721 107635 165279
+137230 137149 141513 45829 77350 118288 198137 126554 14193 56845 206647 119070 135466 223945 67058 137744 75987 124683 151868
+147449 182847 174757 57024 87669 107239 170005 171183 19567 72983 179371 97829 127406 195296 67036 123586 54147 78284 154812
+178936 161064 115048 74250 63109 176332 191539 124999 31616 78107 163786 112386 108753 194863 39350 90256 119156 162213 159161
+233864 219762 59444 51771 60654 99899 214340 245953 19263 143907 100787 82469 75667 215373 53838 121077 160235 112893 113276
+232125 157259 93697 45612 71248 145533 210187 220525 30711 120779 83444 39479 130408 235221 44931 67497 258982 201864 174322
+150052 167375 102848 95401 87311 136450 209556 232204 49869 98865 141749 53284 93774 197719 36258 50605 161350 212773 95756
+188522 159065 46067 110316 75396 226259 130391 239947 59000 97779 100542 71602 59789 184549 71849 45403 130474 142581 67680
+227673 257205 38863 114881 109107 263294 107192 188778 119892 113622 115044 14876 146668 206012 117001 53007 99202 99727 141451
+186591 200063 52840 64194 60308 221177 210376 155636 177946 131929 108349 43551 120472 216566 206162 46028 95555 181202 192422
+181661 182028 68568 124562 62215 167622 193128 138043 193202 166106 57614 25195 119979 185858 276203 42877 78817 115028 185864
+244199 61561 63020 151748 32625 247417 147485 94766 191983 107870 50782 25851 187415 258372 178738 46867 68074 160605 104683
+266423 83088 133741 146201 70424 224620 98256 102053 186324 133796 118231 40270 178596 251231 157879 32427 32251 164247 136210
+189788 69130 181375 160842 28088 200717 162149 113249 168803 128594 103905 35487 253539 186967 157788 57729 38012 106397 142841
+247173 53269 207699 179170 32622 238094 74551 138574 143275 123868 77415 39173 179603 189659 106707 79824 69592 109828 172970
+163749 49726 187008 207481 82882 133746 56130 119622 180754 132317 111113 31790 114021 228329 171586 32541 100253 95204 207004
+156463 76662 171975 221984 78181 88175 89621 115557 115162 140125 97070 35429 92777 184221 123848 33393 125490 239732 172256
+90220 86694 156964 153152 101686 92995 98063 66635 152707 247880 53210 22539 64851 161058 225432 105868 153522 205452 127406
+164259 100885 154791 167943 201777 38874 114543 38609 80025 184817 90464 34765 58913 168523 132754 105921 155297 277465 89570
+144450 76385 133474 117005 227318 64917 77293 64947 97204 90237 70561 48272 57562 136887 42057 164395 151054 234140 89589
+152203 64798 174606 90999 260863 182499 46092 27262 149430 82023 38072 44409 60270 95138 90990 152178 121165 173094 85273
+111878 48975 155649 134082 124417 91763 66990 40475 63348 50127 62006 29186 131705 183669 62545 173197 88090 205580 88822
+95028 118261 166434 160892 194931 65613 107402 57496 94543 51846 53825 38201 101847 98903 113294 213003 82923 135003 111476
+123084 86372 255626 97745 190095 118092 106319 81565 98670 52087 61412 37460 139912 81898 98127 125018 109847 239305 97993
+95602 50375 199101 115746 97462 146121 92980 142949 123668 65743 54360 49382 162377 76102 106866 85760 100226 210151 178210
+87660 74494 261965 163392 137359 114377 109247 115215 164454 55949 75528 32601 105292 105407 97463 32473 126864 157591 172684
+74332 59377 124193 151305 98988 174828 87887 191384 136154 38452 64997 51278 81066 49760 96290 51419 139422 130585 199742
+111869 32254 125749 117969 195632 167876 111831 199921 227929 49949 42565 76413 25359 72146 95972 64141 109206 238096 139480
+179058 14392 116817 66947 115344 72177 90974 199912 231109 37969 70167 183519 55090 77791 48547 61413 153627 190697 262550
+58891 48769 77519 41758 204636 71205 122334 126866 166258 66763 91917 190527 46566 69284 75284 79203 148885 185674 220552
+113305 43490 54901 62300 255393 51825 83739 189059 296613 122060 157310 202187 126923 180899 67354 32372 174554 120405 234626
+102008 80477 107868 44374 205397 52419 71936 142011 168369 226521 128030 199966 77068 223833 135486 100126 122428 129962 251797
+90983 50875 91575 44519 205925 33114 118760 186396 181492 208621 153173 159198 99628 195957 180014 132153 257718 131598 77446
+137932 70072 86636 44521 172243 28140 49412 145885 103435 172857 152931 144225 145647 221886 252345 132692 122320 117039 91878
+216754 84848 114270 25927 165241 41931 46168 131350 108979 164569 183520 167689 148205 250903 150839 147473 154659 139296 90282
+170990 97948 64872 42706 134342 35293 85419 93837 109953 243995 149215 135443 133184 204899 184843 93223 142089 128288 50485
+195032 134457 90755 69501 146826 63002 26127 89657 198660 282934 189185 148630 235850 137377 113979 86783 122531 137553 37828
+100017 77117 99839 70336 129495 111452 52773 137303 182563 179894 156098 260091 253523 148128 79730 63938 148423 159016 70584
+58708 110222 65776 89470 68311 132572 61823 191508 139968 130545 145113 118384 209380 143419 63543 77170 92116 149080 140947
+67403 110214 129468 133843 50961 181249 77566 236015 125443 112160 131485 97333 230045 228953 51574 36388 127159 209630 110164
+30435 109046 147943 199529 103562 106680 96519 178463 187446 77803 160981 90600 195159 228464 34525 24270 177505 97457 151571
+24935 124116 130154 200371 69774 155726 188328 81632 97685 153930 134760 110055 77685 230511 38843 24473 210164 105379 174150
+52995 126365 82155 140155 104426 102077 162939 113797 68913 60588 72222 132850 101907 135090 49504 41866 166738 104376 154484
+24450 114166 88650 124042 40355 88114 140577 112995 97889 58524 111643 122150 153717 117545 83738 43984 205107 112050 146263
+22750 148253 67885 132054 36646 92800 184780 57669 28867 121030 89968 52111 85527 132752 102830 56180 174955 89816 208457
+49725 173048 74282 174873 55740 73996 203538 23894 32039 162948 77992 48668 97267 79197 123342 42508 118064 149674 277644
+39528 202481 41542 104986 148088 93225 171700 58807 48041 63809 43636 125626 45272 67548 149996 64120 203056 103891 198182
+83742 180834 33020 102975 106733 146436 173236 109309 35122 104815 45669 114423 48448 60413 192663 55206 224976 121391 179142
+106998 200099 50223 95812 143684 168355 122325 145378 63634 47975 60238 123722 49581 60038 164007 69594 150221 171487 158651
+55112 235878 56829 97977 203710 241244 100479 115321 51836 32243 34167 125128 132132 69674 54092 60261 147456 156712 142932
+95460 236724 102945 104782 257828 201756 98939 138880 45783 34837 29225 160757 95409 55317 82818 69022 151756 118641 113188
+79138 150908 110462 149475 196646 144161 122315 137185 111013 34690 68388 100668 185666 66683 64204 52704 132040 178227 172572
+69607 145367 148752 84438 162426 180240 67569 168863 171630 26434 65213 95483 150976 55451 43589 78930 243980 105949 244868
+62915 225244 183897 155270 100438 164134 148520 101072 173447 28283 52767 129102 108575 63640 34135 71850 141103 67574 214324
+51533 132503 166708 95084 103419 64530 101908 46294 139191 37927 93002 137024 144820 202444 42353 67835 218438 114696 166535
+44864 177441 207578 61763 187777 38713 89995 50166 152183 31297 88939 134695 63441 172569 57537 76807 210198 162976 235877
+54820 192571 223324 57224 212477 115109 64996 49415 91228 26967 107118 155863 63159 152249 89079 134336 224724 142721 183321
+82134 223149 206246 62562 250444 64781 66964 52165 140842 27676 105531 92896 38930 240096 147593 74312 84955 118162 204945
+115319 159059 155097 46389 188671 37973 71802 43927 104096 39323 114379 84791 110533 237101 164471 191735 79011 104889 116146
+144036 232792 286438 74898 208934 85550 44090 64681 112529 83130 107303 99766 109351 262377 87685 209268 50577 89165 128120
+222445 118109 251293 32583 170270 27115 42232 38683 141447 84422 72837 152798 152725 176655 52876 213709 53929 60789 145101
+81835 53007 247561 59366 141247 56856 73451 146183 130114 112130 77064 166585 169441 79423 42072 126340 17947 76535 139820
+111790 30430 149343 77492 125381 63846 78674 140670 99702 171758 50298 123411 120615 149178 90733 96468 83560 49039 158012
+80322 61121 212424 187255 188247 53825 58994 57905 164224 202232 87539 92118 46889 133033 104318 175584 169983 71684 99640
+140581 111185 122477 231589 217080 88904 49050 137208 133230 270336 94156 144313 59269 112607 73210 110909 148662 95224 93302
+147897 175681 185904 164098 262924 85583 109583 76529 116061 139204 83055 147057 43749 111828 74505 122989 60496 83673 62957
+88296 223137 102044 139719 180226 117270 83113 108187 95592 157080 46962 129800 69753 50932 36017 134968 67762 93317 43570
+148337 192781 62941 68249 176938 171569 112361 169382 121699 136416 65177 104492 103096 90645 39812 138560 84706 210417 35379
+147614 182335 66937 111933 227831 182998 124717 77953 193872 136803 67286 34847 118384 78483 20696 84915 65615 251852 45610
+155214 105923 59318 145580 264227 166150 54435 114562 214110 87024 103654 25012 186672 73908 50245 54178 74302 231188 35428
+133550 97324 69913 151578 216663 176818 49489 132614 152405 112305 60408 48397 251028 226745 83586 33849 125355 223743 28532
+128418 60438 83399 152834 223294 115633 83415 99160 114863 117788 62956 113305 190224 265008 70579 30929 109351 178297 51022
+61965 45942 74330 58631 194293 170541 61666 113296 103529 68312 44933 122384 207224 213867 102442 51315 114465 136732 50426
+33359 76021 167550 47674 182433 139070 70750 114592 112174 123639 121397 239240 154300 145997 110764 56419 123837 150995 103750
+29576 95614 115457 67999 168335 104873 80212 73390 111097 43026 83529 136557 138065 109770 98040 76462 55810 129836 74820
+25106 157051 65354 165462 173473 181672 148141 195895 105115 55485 100562 78675 65850 96784 81598 128380 103407 67756 65098
+19250 237913 141364 230205 172074 103167 128620 92699 113431 89426 149513 85760 118293 99629 130190 206033 76693 81498 54423
+80347 94321 127300 238737 231666 87998 149444 111654 91115 102040 162011 110626 126346 113380 103689 96019 163080 94842 75954
+58850 56166 156591 181394 152906 157418 80916 193389 125824 64189 113050 55939 64731 81632 140239 51260 68758 197163 122912
+62290 122285 107356 224660 73982 110019 67887 242305 208310 51017 118000 89973 53091 71661 82918 68633 85653 107015 95457
+93676 154224 211239 142093 83643 199332 134341 180227 197352 78682 153215 79793 48472 64573 113439 50889 176024 203585 101363
+147146 205258 168382 150995 109672 108989 129027 129837 161177 90348 111544 84954 76293 138890 82287 56900 119980 226350 101234
+193444 132791 89980 129669 173252 78217 64422 68414 214725 55329 113173 86368 79898 223491 89426 115905 168040 238793 108274
+153192 89281 78693 197196 149564 60194 48820 55283 178103 64988 63674 92620 146988 235126 96020 161433 85042 189807 153845
+132449 36701 97651 73221 71825 55123 22450 184066 110965 68000 55017 64747 161560 229833 63272 103519 133095 127008 121753
+147388 34506 47716 85274 50219 57701 29412 263360 90147 101199 90740 62924 94600 171957 61316 39365 135700 98658 98526
+152598 48410 110638 60790 48585 82928 27357 208260 63899 118694 133682 184482 70468 122176 62139 54338 235289 109415 157748
+113025 53137 88514 31285 53206 94514 25657 133197 43753 103476 107988 138477 91529 152655 27736 25956 221587 107422 121459
+87192 30418 104063 26910 42783 106266 48818 145900 56959 113336 82241 77896 54094 109479 56027 32860 121238 160611 71499
+67193 26901 129961 25593 35718 127402 59196 235188 49880 114523 116587 175574 54242 120548 43213 39520 165720 169274 112536
+61694 76444 95771 26895 32230 178784 44134 163972 79125 113663 193300 246490 31207 43538 88424 62790 117137 72417 116084
+84218 94124 61854 27881 79475 94153 38595 262306 112228 101132 205203 161264 43267 55665 137118 117844 84296 118812 185694
+112690 198579 90584 33548 119872 88418 62355 188839 103040 86486 167462 113214 84751 46402 199652 72252 158014 81682 178084
+71127 203073 102002 53510 173364 95978 91894 257613 256053 94484 159378 104984 69476 22454 100089 60544 154404 128798 137798
+118405 185522 64034 103870 148260 82669 107941 112925 229121 57610 186053 110093 78823 38292 116170 101984 194658 136910 134926
+86729 258815 113760 145787 175330 104094 153305 116212 251450 64521 244468 88938 55770 27642 75733 176807 219769 100745 222264
+67433 124123 162810 168947 147580 51668 179814 82421 227480 46905 225036 125232 115412 25381 60105 102138 173057 171836 198713
+81243 47128 116716 122172 119377 104942 105694 33405 151486 85020 220607 177947 118425 24847 36119 96835 130948 201014 251660
+108050 43188 156268 174379 113291 93163 141398 132392 172455 64838 178282 123805 102558 75746 54451 82044 159981 231669 197267
+123544 53635 144579 213477 104832 109505 209640 102656 107999 73014 155332 106903 74831 92631 64043 115934 75880 209905 176758
+95541 56612 97585 234253 91929 88397 184028 77759 81526 32370 141549 99424 113103 76880 43971 69367 65898 212280 129512
+87517 79333 37797 263056 98117 145449 190945 106146 88533 60623 178245 111092 131843 76452 39694 150022 71269 232505 203692
+128058 73929 37559 149706 50634 127023 201954 45884 115597 67597 201601 49831 88655 57073 57544 145589 51323 204190 198213
+169980 112933 35837 93690 30273 141873 188752 81107 54462 52013 176316 35355 127111 64135 41980 222692 51318 119193 134180
+178125 95910 44793 60373 90129 184862 196744 98821 40613 34833 125450 40060 91621 65857 28005 237117 48668 140461 185068
+145895 142699 29376 39378 79858 142043 179400 154384 25517 19672 178196 48579 92206 57224 28209 277399 58097 93544 157240
+145725 215963 16944 89498 45299 169060 120546 134638 36706 29627 98780 68048 61988 154653 17446 220098 106822 89900 161097
+198689 155599 22674 107565 85773 106545 111620 182794 53623 19271 100139 50011 91733 193413 26830 198718 166987 98967 156619
+179131 114127 28326 101336 193386 236989 164197 109726 93426 41601 160360 134497 148072 211992 26982 131255 187423 89950 147545
+247483 89910 59061 121871 159251 169029 238086 142725 85423 23847 172254 93885 183878 132376 20530 203909 219243 115911 99100
+135067 104262 54011 256539 214455 208541 133462 175390 44121 41761 159714 53538 84526 223189 32200 216055 241286 77580 169270
+159349 96507 26181 222874 227117 256465 104836 206421 140144 46108 141151 95810 98084 126183 41078 210513 232518 87197 94513
+108508 130824 93808 159521 154421 212838 131873 174531 204038 48984 53370 88599 55509 61463 42188 220357 198788 85610 92159
+112755 111480 118549 143448 109352 245898 79386 171508 151010 69464 101474 110826 108835 61991 36840 192738 128463 117337 38668
+139234 71822 219956 82902 111821 161708 124832 240261 107300 73336 48712 121390 87583 58168 70252 188679 144418 123353 49760
+123787 111446 223728 62853 91509 124998 98860 259724 251587 87282 90414 95613 104874 38292 78760 125987 177307 106744 59087
+140953 146610 203171 69313 73002 111354 69483 197044 181741 70371 104944 110772 124842 107308 125634 144648 218190 195040 80984
+212631 93325 190668 71661 59335 84510 60955 102363 275078 77599 130363 201093 141698 79395 225061 95924 140631 220265 51431
+117641 57777 224316 63731 95550 201125 191786 140193 241759 82565 83579 236939 119868 60828 232028 43930 105565 169544 115146
+125742 124733 91046 59154 128914 203754 125080 59583 261318 161612 58980 169661 158975 51838 140259 38349 104467 130112 136246
+128444 207137 159626 84516 194618 170005 220382 77759 199092 100196 98776 263472 220893 73519 91628 20800 72179 156925 132820
+147027 187489 241810 90172 199643 289214 230966 108113 194309 63145 150453 144540 217048 177028 63576 33526 88538 151188 110655
+227689 131398 215615 88203 111652 191167 199266 97385 162795 87564 115727 149152 167161 196348 73116 30775 62443 190099 166283
+230606 193810 115089 97302 105829 216980 226495 67938 80268 78710 213476 121672 105711 138502 38873 14819 45271 166562 200902
+177956 226564 160105 58979 39916 182727 156549 117229 119819 69491 218595 99208 106576 132769 47465 19750 64307 135448 133681
+186776 239732 156162 86144 59486 215450 192797 135309 118814 58626 254250 214044 90141 105143 60001 30775 95135 180681 178720
+131089 167699 160198 103193 34998 185017 149964 144773 128011 34314 247252 73142 97687 35466 47664 34300 124703 171420 172815
+130069 161279 131199 48096 52389 259149 135599 156376 102314 63940 83537 127261 57244 74446 73330 45571 60579 143135 231630
+267952 233581 243871 84051 31665 177827 66400 234322 82918 138469 113854 153585 117889 61775 28412 71160 129661 123571 194852
+133470 121824 223948 77071 71429 210221 94843 173310 93695 197505 89185 75655 166222 59299 86028 142069 170337 243106 166779
+138729 265290 169955 180805 151905 206983 89798 179514 115600 302390 184577 58384 192889 35865 66157 167807 148078 173086 134405
+105058 251084 96800 146770 160752 123063 73999 197393 136124 235962 246159 93917 142545 81567 67283 154508 144354 171326 145436
+127716 211019 41759 178892 157749 122886 95367 192155 123983 157381 143485 44102 244245 60181 77762 166489 216486 141105 171604
+102542 170669 61070 150832 182175 174011 51635 116340 209472 153120 218164 99340 227497 84522 184146 161440 284595 157360 111125
+70170 120526 44560 157814 225453 86455 55114 107228 231091 169697 207562 82154 125552 77113 130640 232997 256465 139193 175914
+63727 143300 38662 191455 172725 128839 45790 196163 249447 265113 151625 97540 140570 57636 115922 210471 102136 129710 147543
+114959 69579 35156 85644 96327 220734 77690 175138 188540 168673 132961 93218 187033 32997 138999 183870 90264 95920 162599
+198033 183945 74285 62547 119893 162656 46872 203271 174438 62031 163997 73796 78388 22100 99369 137023 88716 89889 164201
+132432 166911 41241 124593 129167 288362 52471 178121 114105 99470 193610 96224 95396 84187 110330 139176 132897 110023 172316
+127929 195911 72456 59527 135722 209002 48496 200984 80194 153687 132000 64544 97024 43869 141598 85760 72278 53738 165406
+155519 197530 40890 53903 144938 159870 43936 229183 95708 75679 90133 92303 112745 122676 177881 81122 119889 133885 164916
+135891 208183 65101 38569 188637 194254 59708 240944 54604 55782 115222 128001 52630 243731 211042 77378 144245 127307 170658
+128647 218756 55286 42203 212996 226132 112827 231437 183968 168114 81393 122220 97600 161956 212307 56451 114765 125178 135803
+250124 111790 53072 39461 140431 178456 142961 186602 146187 122329 44450 161675 104805 120358 231416 74127 60489 51203 164159
+277381 111616 60659 47737 109190 222020 190561 180738 179312 101102 66513 157625 88936 119153 165184 46503 66882 85104 151327
+186049 181604 49560 89128 150715 191696 181119 176294 97802 89964 35074 158438 65393 129073 130869 89608 43475 65835 142306
+116196 115066 46701 49685 187517 168983 127531 83008 117456 234268 51796 175400 116674 107431 106587 112239 33782 119555 130650
+112002 119868 38932 98618 183390 198423 193574 65117 97279 139184 73569 163377 168671 36324 146982 70201 21779 71505 134806
+61307 225993 59843 122987 162161 166602 144635 127185 86064 165349 58968 205839 210257 53266 136561 131739 32448 37337 164871
+64899 222231 62715 119018 112275 194665 132709 46341 88170 146092 47899 305965 173960 29479 246143 156927 74285 54778 111101
+47774 174636 57281 178660 168868 218053 98763 31447 130171 143734 80063 244689 163960 66193 219408 223980 118017 48353 134787
+54260 179250 108200 169008 158778 129702 169853 55340 66548 115348 53252 202542 58526 60037 198637 151822 225909 44688 123637
+41762 103987 190854 131000 92757 159005 172104 48736 136806 62698 114185 249095 64555 106657 217586 175604 228803 35580 130761
+44993 96173 232768 84352 198055 98462 86579 59909 101039 83165 125640 219369 60192 168331 253470 81158 239688 28613 89142
+47505 78983 205379 168246 158795 135425 66943 73150 85310 81170 84886 199175 56969 97669 165607 84397 188652 30101 94902
+41670 153917 103902 155856 134950 108221 86275 46139 118824 111952 43043 160980 94652 167370 130980 120232 192796 44865 175729
+76474 164631 69738 252831 192821 73390 137642 63366 161323 131408 67703 222736 69518 115425 102571 61071 123654 50622 133238
+161052 175377 81642 173875 211421 75221 130708 92523 146224 164939 77687 187158 112471 97369 52883 144596 104702 80757 204476
+153127 139019 176093 171451 222517 40368 115462 74003 254447 109656 93777 228408 123128 93206 56370 65757 69011 120206 232769
+241175 144081 158500 151153 219627 72956 85408 55217 188511 74757 119447 164053 186479 113600 48862 87506 71328 180282 164074
+217568 156882 103387 243962 149153 65625 38211 90146 168933 105705 188470 184015 288750 155059 105726 107531 96363 255427 184752
+224905 167099 129537 227639 174143 106916 44969 62787 207504 101509 167189 248338 176177 181850 89900 99003 110898 92078 151649
+211820 132386 82133 174610 101792 57440 110442 47311 102908 67146 202416 222977 132679 186889 140744 76834 158813 77373 156613
+230322 90729 78011 160959 54908 68847 89460 52554 116736 53011 178009 109823 91705 191261 121321 99852 95756 51166 174363
+182294 63282 112876 187631 168549 119278 60241 46457 191594 56592 177130 69317 171004 111273 147705 136785 98638 31783 136069
+171691 65523 95899 140932 148823 110295 94297 126585 123903 101083 187553 79798 125420 62593 160218 170155 78387 19748 106614
+88187 51090 148306 144496 146224 110615 195098 137896 142282 128250 130630 29098 145970 84946 253013 91783 104136 22691 81088
+172155 79832 137185 135107 165522 83982 146166 138847 172153 139876 96707 65935 137309 96488 250332 185216 48044 31085 58577
+147212 63264 98142 196936 172630 150513 125759 252874 158447 196688 68307 39597 118701 76409 209874 126264 34643 25713 47363
+160629 44754 146747 213075 234183 141546 113733 249720 90133 173019 70324 95429 134121 137017 261448 134792 31423 18730 126975
+147279 68581 156837 149655 196444 183216 153249 200861 49757 218024 69623 57362 159205 184723 243369 135765 26090 25408 87092
+124784 47314 244295 129558 165778 183394 110946 84387 55681 207337 52138 55751 152178 167859 203021 117259 32155 23071 134636
+176046 75379 193497 125532 151060 189689 214975 77798 54564 184047 41361 78726 130051 149157 184135 132664 35044 23229 210120
+169203 121821 200785 65800 134705 200586 221682 44658 41682 195425 45771 115673 130251 146224 140810 80370 43566 38539 194171
+168643 162754 153506 104847 160801 207651 219923 93440 43936 176107 23186 94733 73414 115918 119902 44140 45548 41162 153742
+128185 157909 181757 84226 193351 166789 183303 49443 80697 172053 65340 157886 45143 95151 127687 82698 73326 75835 44742
+147595 210424 114178 28494 220251 194967 74589 57942 32129 111735 48672 156305 109408 29630 92873 47274 68720 53284 58168
+124453 275890 56864 49555 142900 197038 184167 61898 65272 107982 59761 176051 53301 55767 137918 65901 73484 52313 41787
+103718 196898 98794 56517 136656 167594 158802 55099 104252 85842 69052 255496 68402 58412 220447 47878 157630 123119 47358
+131783 176294 72972 68686 80787 76751 131843 75513 130458 63549 110969 117975 53891 58106 196137 61428 170655 61078 42827
+80681 166070 214979 58834 59708 159598 185523 61140 144554 68631 107955 220613 56813 45304 222533 69446 215510 87594 71238
+29356 235139 204385 93223 52749 128427 130569 83439 236772 97342 80359 263484 59841 64984 177737 112747 167740 67118 131310
+120545 244902 258661 142003 97580 98785 135651 112018 120010 113949 132680 233691 107632 108462 130407 106602 108953 91683 80102
+53412 184061 200557 221298 74256 123111 139708 162510 126430 235889 136338 209915 63258 158526 146309 102062 95770 163207 153816
+67090 85610 247878 161574 58647 97277 256561 147761 179743 213122 88093 135270 101905 84634 131113 90414 64250 94030 210826
+85379 97096 253975 273965 44394 68249 286966 147981 56472 220568 82809 174079 23679 111784 94676 114041 70885 130947 180077
+104050 159239 155283 249877 103672 33413 202194 66919 66841 168851 48315 183226 43614 80205 131761 125458 94177 129744 161611
+101042 171093 108037 203861 112483 46432 174073 29850 56318 129015 78311 89149 30823 184856 155490 82348 158602 94710 127057
+97163 239178 110145 151543 105376 27389 158473 36282 51412 89957 42641 78273 34424 127227 98485 109504 150947 57963 89025
+124657 232564 87414 128521 87602 27271 54331 10827 15801 103755 40628 76183 18791 140855 109680 93337 219977 51892 23148
+113992 217654 99624 80420 73590 15243 49199 19021 27074 55623 28596 63072 14268 70771 54082 67612 110351 20332 32958
3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019 3.689349e+019
diff --git a/cesar/ce/rx/bitloading/test/data/nsr_on_sound_max.data b/cesar/ce/rx/bitloading/test/data/nsr_on_sound_max.data
index bd1e8f55bb..9818bdecca 100644
--- a/cesar/ce/rx/bitloading/test/data/nsr_on_sound_max.data
+++ b/cesar/ce/rx/bitloading/test/data/nsr_on_sound_max.data
@@ -1,1536 +1,1536 @@
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
+262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143 262143
diff --git a/cesar/ce/rx/bitloading/test/data/test_content.txt b/cesar/ce/rx/bitloading/test/data/test_content.txt
index 55b059656d..85a96c2010 100644
--- a/cesar/ce/rx/bitloading/test/data/test_content.txt
+++ b/cesar/ce/rx/bitloading/test/data/test_content.txt
@@ -1,14 +1,15 @@
----------------------------- Script file information -----------------------------
-test generated on = 09-Nov-2012 at 13:50
+test generated on = 15-Nov-2012 at 14:34
test vectors generated using:
SubWCRev: 'E:\projet\PLC\DSP_chain_oct_2012\Simu\BitLoading\testVectorGeneration.m'
Last committed at revision 19029
Updated to revision 19108
+Local modifications found
--------------------------------- bitloading test ---------------------------------
SNR = 10 dB
tonemap_initial_under_ber_Xdb_nsr_margin_X_XX_ber_margin generated for 0.76 coderate
-final tonemap code rate is 0.76
+final tonemap code rate is 0.50
------------------------------------ Pber test ------------------------------------
PB_MEAN_COEF = 6912
NB iterations = 30
diff --git a/cesar/ce/rx/bitloading/test/data/tonemap_initial_0db_nsr_margin_0_00_ber_margin.data b/cesar/ce/rx/bitloading/test/data/tonemap_initial_0db_nsr_margin_0_00_ber_margin.data
index ff358985d0..995dfa71de 100644
--- a/cesar/ce/rx/bitloading/test/data/tonemap_initial_0db_nsr_margin_0_00_ber_margin.data
+++ b/cesar/ce/rx/bitloading/test/data/tonemap_initial_0db_nsr_margin_0_00_ber_margin.data
@@ -72,165 +72,22 @@
0
0
0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-4
-4
-4
-4
-4
-4
-6
-4
-6
-6
-6
-6
-6
-6
-6
-6
-6
-6
-6
-6
-6
-6
-6
-6
-6
-6
-6
-6
-6
-6
-6
-6
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-4
-4
-4
+2
+2
+2
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
4
+3
+3
4
4
4
@@ -265,7 +122,30 @@
4
4
4
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
4
+3
4
4
4
@@ -281,26 +161,6 @@
4
4
4
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
4
4
4
@@ -396,6 +256,20 @@
3
3
3
+2
+2
+3
+2
+2
+3
+2
+3
+3
+3
+3
+3
+3
+3
3
3
3
@@ -408,22 +282,8 @@
3
3
3
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-4
-4
4
+3
4
4
4
@@ -435,13 +295,25 @@
4
4
4
+3
4
4
4
+3
4
4
+3
+3
+3
+3
+3
+3
4
+3
+3
4
+3
+3
4
4
4
@@ -474,6 +346,7 @@
4
4
4
+3
4
4
3
@@ -482,6 +355,51 @@
3
3
3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
2
2
2
@@ -493,11 +411,12 @@
2
2
2
-3
2
2
2
3
+3
+3
2
3
3
@@ -509,6 +428,71 @@
3
3
3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+2
+3
+2
+2
+2
+2
+2
+2
+2
+2
+2
+1
+2
+1
+1
+2
+1
+2
+2
+2
+2
2
2
2
@@ -536,8 +520,9 @@
2
2
1
+2
1
-1
+2
1
1
1
@@ -598,29 +583,61 @@
0
0
0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
1
1
+0
1
1
+0
1
1
1
1
-2
-1
-1
-1
-1
-1
+0
+0
+0
+0
+0
+0
+0
+0
+0
1
+0
+0
+0
1
+0
+0
1
1
1
1
1
1
-2
1
1
1
@@ -631,7 +648,6 @@
1
1
1
-2
1
1
1
@@ -644,14 +660,37 @@
2
2
2
+1
2
2
2
2
2
+1
2
+1
2
+1
+1
+1
2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
2
2
2
@@ -721,72 +760,6 @@
2
2
2
-3
-3
-2
-3
-3
-3
-3
-3
-3
-3
-3
-2
-2
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
2
2
2
@@ -819,113 +792,122 @@
2
2
2
-2
-2
-2
-2
-2
1
2
-2
-2
1
1
-2
1
1
1
1
1
-2
-2
-2
1
-2
1
1
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
0
-2
-2
-2
-2
-2
-2
-2
1
1
1
1
1
-2
1
1
1
1
1
1
-2
1
1
-2
-2
-2
-2
-2
-2
-2
-2
-2
1
-2
-2
1
1
1
-2
-2
-2
1
1
-2
1
-2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+0
+1
+1
+0
+1
+1
+1
+1
+1
+0
+1
+1
+1
+1
+1
+1
+1
+1
+1
1
1
1
@@ -941,6 +923,9 @@
1
0
1
+1
+0
+0
0
1
0
@@ -1534,3 +1519,18 @@
0
0
0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
diff --git a/cesar/ce/rx/bitloading/test/data/tonemap_initial_0db_nsr_margin_0_01_ber_margin.data b/cesar/ce/rx/bitloading/test/data/tonemap_initial_0db_nsr_margin_0_01_ber_margin.data
index 72d864b92c..8dc9ce4c7b 100644
--- a/cesar/ce/rx/bitloading/test/data/tonemap_initial_0db_nsr_margin_0_01_ber_margin.data
+++ b/cesar/ce/rx/bitloading/test/data/tonemap_initial_0db_nsr_margin_0_01_ber_margin.data
@@ -72,34 +72,30 @@
0
0
0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+2
+2
+2
+2
+2
+2
+2
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
3
4
+3
4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
+3
4
4
4
@@ -124,7 +120,24 @@
4
4
3
-4
+3
+3
+3
+3
+3
+3
+2
+2
+2
+2
+2
+3
+3
+3
+3
+3
+3
+3
3
3
3
@@ -138,34 +151,6 @@
3
3
3
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
4
4
4
@@ -213,17 +198,25 @@
4
4
4
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
4
4
4
@@ -259,6 +252,29 @@
3
3
3
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+3
+3
+3
+2
+3
+3
+3
+3
+3
+3
3
3
3
@@ -269,87 +285,12 @@
3
3
3
-4
3
-4
3
-4
-4
-4
-4
-4
-4
3
3
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
3
-4
-4
3
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
4
3
3
@@ -364,21 +305,8 @@
3
3
3
-4
3
-4
-4
3
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
3
3
3
@@ -388,51 +316,30 @@
3
3
3
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
3
3
3
3
3
+4
3
+4
3
3
3
+4
+4
3
+4
3
3
3
+4
+4
+4
3
3
+4
3
3
3
@@ -447,12 +354,12 @@
3
3
3
-4
3
+2
3
-4
-4
-4
+2
+2
+2
3
3
3
@@ -460,10 +367,8 @@
3
3
3
-4
3
3
-4
3
3
3
@@ -476,6 +381,17 @@
3
3
3
+3
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
2
2
2
@@ -504,17 +420,57 @@
2
2
2
+3
2
2
2
2
+3
+3
+3
2
+3
+3
2
2
2
2
2
+3
+3
+3
2
+3
+3
+3
+3
+3
+2
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
2
2
2
@@ -526,10 +482,44 @@
2
2
2
+1
+1
2
+1
+1
+1
+1
+1
+1
2
1
2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+1
+1
+1
+1
+1
1
1
1
@@ -541,6 +531,48 @@
1
1
1
+1
+1
+1
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
0
0
0
@@ -624,6 +656,18 @@
1
1
1
+2
+2
+1
+2
+1
+1
+1
+1
+2
+1
+1
+1
1
1
1
@@ -643,49 +687,26 @@
1
1
1
-2
1
1
1
-2
1
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
1
1
1
1
1
-2
1
1
2
+1
2
+1
2
+1
+1
+1
+1
2
2
2
@@ -727,74 +748,27 @@
2
2
2
+1
2
2
2
2
2
2
+1
2
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
+1
+1
2
2
2
+1
2
+1
2
2
2
+1
2
2
1
@@ -805,9 +779,11 @@
1
1
1
+2
1
1
1
+2
1
1
1
@@ -837,8 +813,12 @@
1
1
1
+0
1
+0
+0
1
+0
1
1
1
@@ -846,40 +826,25 @@
1
1
1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
0
0
0
0
0
0
+1
0
0
+1
0
+1
0
0
0
+1
+1
+1
+1
0
1
1
@@ -894,28 +859,50 @@
1
1
1
+0
1
+0
+0
1
1
1
1
1
1
+0
1
+0
1
+0
1
+0
1
+0
1
+0
+0
1
1
1
1
+0
1
1
1
+0
+0
+0
+0
+0
+0
+0
1
+0
+0
+0
1
1
+0
1
1
1
@@ -928,8 +915,10 @@
1
1
1
+0
1
1
+0
1
0
0
@@ -1534,3 +1523,14 @@
0
0
0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
diff --git a/cesar/ce/rx/bitloading/test/data/tonemap_initial_1db_nsr_margin_0_00_ber_margin.data b/cesar/ce/rx/bitloading/test/data/tonemap_initial_1db_nsr_margin_0_00_ber_margin.data
index 91441ac056..7eb4e0d8f4 100644
--- a/cesar/ce/rx/bitloading/test/data/tonemap_initial_1db_nsr_margin_0_00_ber_margin.data
+++ b/cesar/ce/rx/bitloading/test/data/tonemap_initial_1db_nsr_margin_0_00_ber_margin.data
@@ -72,169 +72,34 @@
0
0
0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
+2
+2
+2
+2
+2
+2
+2
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
3
-4
-4
-4
-4
3
-4
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-4
-4
-4
-4
-4
-4
4
4
+3
4
4
4
@@ -255,15 +120,40 @@
4
4
3
-4
3
3
3
-4
-4
+3
+3
+3
+2
+2
+2
+2
+2
+2
+2
+2
+2
+3
+2
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
3
3
4
+3
4
4
4
@@ -280,39 +170,6 @@
4
4
4
-3
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
4
4
4
@@ -370,6 +227,7 @@
4
4
4
+3
4
4
4
@@ -390,6 +248,10 @@
3
3
3
+3
+3
+3
+3
2
2
2
@@ -404,78 +266,126 @@
2
2
3
-3
-2
2
+3
2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
3
3
3
-4
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
3
4
4
+3
4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
3
3
3
3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+2
+2
+3
+2
+2
+2
+2
+3
+2
+2
+2
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+2
+2
+2
+2
2
2
2
@@ -519,16 +429,90 @@
2
2
2
+3
+2
2
2
2
2
2
+3
2
+3
2
2
2
+3
+3
+3
+2
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+2
+3
+3
+3
+3
+3
+3
+3
+3
+3
+2
+2
+3
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+1
+1
+1
+1
+1
+1
1
+1
+1
+1
+1
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
2
1
1
@@ -541,6 +525,54 @@
1
1
1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
0
0
0
@@ -606,6 +638,22 @@
1
1
1
+0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
1
1
1
@@ -643,52 +691,33 @@
1
1
1
-2
1
1
1
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
1
-2
1
1
1
-2
1
1
2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
2
2
2
2
2
+1
2
2
2
@@ -714,93 +743,20 @@
2
2
2
+1
2
2
2
2
+1
+1
2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
+1
2
2
1
1
-1
-1
+2
1
1
1
@@ -811,7 +767,7 @@
1
1
1
-1
+2
1
1
1
@@ -861,11 +817,13 @@
0
0
0
+1
0
0
0
0
0
+1
0
0
0
@@ -877,60 +835,102 @@
0
0
0
+1
+0
+0
+0
0
0
0
0
1
+0
+0
1
1
+0
+0
1
+0
+0
+0
1
+0
+0
1
+0
+0
+0
+0
+0
+0
+0
1
+0
1
1
+0
+0
+0
+0
+0
1
+0
+0
+0
+0
+0
+0
1
+0
+0
+0
+0
1
+0
1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
1
1
+0
1
+0
+0
1
1
1
+0
+0
1
+0
+0
+0
+0
+0
1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
0
0
0
diff --git a/cesar/ce/rx/bitloading/test/data/tonemap_initial_1db_nsr_margin_0_01_ber_margin.data b/cesar/ce/rx/bitloading/test/data/tonemap_initial_1db_nsr_margin_0_01_ber_margin.data
index ad5320fada..2c173c40fd 100644
--- a/cesar/ce/rx/bitloading/test/data/tonemap_initial_1db_nsr_margin_0_01_ber_margin.data
+++ b/cesar/ce/rx/bitloading/test/data/tonemap_initial_1db_nsr_margin_0_01_ber_margin.data
@@ -72,45 +72,38 @@
0
0
0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+3
+3
+3
+3
+3
+3
+3
+3
3
3
3
3
3
-4
-4
3
4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
+3
+3
+3
+3
+3
4
4
4
@@ -120,6 +113,7 @@
4
4
3
+4
3
3
3
@@ -132,53 +126,47 @@
3
2
2
-3
-3
-3
2
2
2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-4
-4
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+3
+3
+2
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
4
4
4
4
4
4
+3
4
+3
4
+3
4
4
4
@@ -213,17 +201,6 @@
4
4
4
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
4
4
4
@@ -237,13 +214,31 @@
4
4
4
+3
4
4
+3
+3
+3
+3
4
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
4
4
4
4
+3
+3
+3
4
3
3
@@ -263,10 +258,29 @@
2
2
2
-3
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
2
3
+2
3
+2
+2
3
3
3
@@ -280,35 +294,6 @@
3
3
3
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-3
-3
-3
-3
-3
-3
-3
-3
3
3
3
@@ -318,27 +303,15 @@
3
3
3
+2
+2
+2
+2
3
-4
3
-4
3
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
3
-4
-4
3
-4
3
3
3
@@ -357,7 +330,6 @@
3
3
3
-2
3
3
3
@@ -377,10 +349,35 @@
3
3
3
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
3
+2
+2
+2
+2
3
3
3
+2
3
3
2
@@ -408,16 +405,6 @@
2
2
2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
2
2
2
@@ -425,51 +412,13 @@
2
2
2
-3
2
-3
-3
-3
-3
-3
2
-3
-3
-3
-3
2
2
-3
2
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
2
-3
-3
-3
-3
-3
-3
-3
-3
-3
2
-3
2
2
2
@@ -485,12 +434,7 @@
2
2
2
-1
-1
-1
-1
2
-1
2
2
2
@@ -507,6 +451,56 @@
2
2
2
+3
+2
+2
+2
+2
+3
+2
+2
+2
+3
+3
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+1
+2
+1
+1
+2
2
2
2
@@ -515,6 +509,8 @@
2
2
2
+1
+1
2
1
1
@@ -635,6 +631,18 @@
0
0
0
+0
+0
+0
+0
+0
+0
+0
+0
+1
+0
+1
+1
1
1
1
@@ -656,7 +664,6 @@
1
1
1
-2
1
1
1
@@ -665,7 +672,6 @@
1
1
1
-2
1
1
1
@@ -702,20 +708,19 @@
1
1
1
-2
1
1
1
1
-2
1
-2
1
-2
-2
-2
1
2
+1
+1
+1
+1
+1
2
2
2
@@ -728,65 +733,27 @@
2
2
2
-2
-2
-2
-2
-2
-2
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
1
2
2
2
2
2
-2
-2
1
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
1
2
-2
-2
-2
-2
-2
-2
+1
+1
2
2
1
2
-2
1
1
1
1
2
-2
1
-2
1
1
1
@@ -814,20 +781,40 @@
1
1
1
-0
-0
1
1
-0
1
-0
1
1
1
-0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
1
1
0
+1
+0
+0
+0
+0
+0
+0
0
0
0
@@ -836,25 +823,12 @@
0
0
0
-1
0
0
0
0
0
0
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
0
0
0
@@ -883,10 +857,6 @@
0
0
0
-1
-1
-1
-1
0
0
0
@@ -903,23 +873,36 @@
0
0
0
-1
0
-1
-1
-1
0
-1
0
-1
0
-1
0
0
0
0
1
0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
1
0
0
@@ -1534,3 +1517,20 @@
0
0
0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
diff --git a/cesar/ce/rx/bitloading/test/data/tonemap_initial_2db_nsr_margin_0_00_ber_margin.data b/cesar/ce/rx/bitloading/test/data/tonemap_initial_2db_nsr_margin_0_00_ber_margin.data
index 9b296c8df7..8f6bf152d4 100644
--- a/cesar/ce/rx/bitloading/test/data/tonemap_initial_2db_nsr_margin_0_00_ber_margin.data
+++ b/cesar/ce/rx/bitloading/test/data/tonemap_initial_2db_nsr_margin_0_00_ber_margin.data
@@ -72,196 +72,77 @@
0
0
0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+3
+3
+3
+3
+3
+3
+3
3
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
3
-4
3
3
3
3
3
3
-2
3
3
3
3
-2
3
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
4
4
4
4
4
+3
4
4
3
-4
3
3
3
3
+3
+3
+3
+3
+3
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
2
2
2
3
3
2
+3
2
3
3
@@ -269,42 +150,22 @@
3
3
3
-4
3
-4
+3
+3
+3
+3
+3
3
4
4
4
4
4
-4
-3
-3
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-3
-3
3
+4
3
+4
3
4
4
@@ -351,6 +212,9 @@
4
4
3
+4
+3
+3
3
3
3
@@ -364,20 +228,13 @@
3
3
3
-4
3
3
-4
3
-4
-4
-4
-4
-4
-4
3
4
4
+3
4
3
3
@@ -386,6 +243,13 @@
3
3
3
+3
+3
+3
+3
+3
+2
+2
2
2
2
@@ -408,19 +272,17 @@
2
2
2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
2
2
2
+2
+3
+2
+2
+2
+2
+2
+3
3
3
3
@@ -433,12 +295,30 @@
3
3
3
+2
+3
3
3
3
3
3
3
+2
+2
+2
+2
+3
+3
+3
+3
+3
+3
+2
+3
+3
+3
+3
+3
3
3
3
@@ -447,12 +327,8 @@
3
3
3
-4
3
3
-4
-4
-4
3
3
3
@@ -463,7 +339,6 @@
3
3
3
-4
3
3
3
@@ -485,10 +360,41 @@
2
2
2
-1
-1
-1
-1
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+3
+3
+2
+2
+2
+3
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
2
1
2
@@ -518,10 +424,97 @@
2
2
2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+3
+2
+2
+2
+2
+3
+2
+2
+2
+2
+3
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
1
1
2
1
+2
+1
+1
+2
+1
+2
+2
+2
+2
+2
+1
+2
+1
+1
+1
+1
+1
+1
1
1
1
@@ -616,11 +609,29 @@
0
0
0
-1
0
0
0
-1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
0
0
0
@@ -656,17 +667,12 @@
1
1
1
-2
1
1
1
-2
-2
1
1
1
-2
-2
1
1
1
@@ -701,79 +707,25 @@
1
1
1
-2
-2
-2
1
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
1
2
2
+1
2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
+1
2
2
2
@@ -786,7 +738,6 @@
2
2
2
-2
1
1
1
@@ -796,6 +747,11 @@
1
1
1
+2
+1
+1
+1
+1
1
1
1
@@ -829,13 +785,8 @@
1
1
1
-0
1
-0
-0
1
-0
-0
1
1
1
@@ -882,50 +833,99 @@
0
0
0
-1
-1
-1
-1
-1
0
-1
0
0
0
-1
-1
0
0
0
0
0
0
-1
-1
-1
-1
-1
-1
-1
-1
0
-1
-1
-1
-1
-1
0
0
-1
-1
-1
-1
-1
0
0
-1
0
-1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
0
0
0
diff --git a/cesar/ce/rx/bitloading/test/data/tonemap_initial_2db_nsr_margin_0_01_ber_margin.data b/cesar/ce/rx/bitloading/test/data/tonemap_initial_2db_nsr_margin_0_01_ber_margin.data
index 39b61167b7..642134780f 100644
--- a/cesar/ce/rx/bitloading/test/data/tonemap_initial_2db_nsr_margin_0_01_ber_margin.data
+++ b/cesar/ce/rx/bitloading/test/data/tonemap_initial_2db_nsr_margin_0_01_ber_margin.data
@@ -72,20 +72,28 @@
0
0
0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
2
3
+2
+3
+3
3
3
3
@@ -100,22 +108,8 @@
3
3
3
-4
3
3
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
3
4
3
@@ -123,7 +117,8 @@
3
3
3
-2
+3
+3
3
3
2
@@ -138,34 +133,45 @@
2
2
2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+3
+2
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
3
3
4
@@ -196,51 +202,11 @@
4
4
4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-3
-3
-3
3
-3
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
4
+3
4
+3
4
3
3
@@ -250,61 +216,17 @@
3
3
3
-2
3
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
3
-2
3
-2
3
3
3
3
3
3
-2
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
3
3
-2
3
3
3
@@ -325,14 +247,85 @@
3
3
3
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+3
3
3
+2
+2
3
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
3
3
3
+2
3
3
+2
3
3
3
@@ -345,11 +338,13 @@
3
3
3
+2
3
3
3
3
3
+2
3
2
2
@@ -364,21 +359,7 @@
2
2
2
-3
-3
-3
-3
2
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
2
2
2
@@ -408,16 +389,38 @@
2
2
2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+2
+2
+2
+2
+2
+1
+1
+1
+1
+1
+1
+1
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
2
2
2
@@ -447,12 +450,8 @@
2
2
2
-3
2
2
-3
-3
-3
2
2
2
@@ -460,10 +459,8 @@
2
2
2
-3
2
2
-3
2
2
2
@@ -489,27 +486,25 @@
1
1
1
+0
+1
+1
+1
+1
+1
+1
+1
+1
1
1
1
1
-2
1
1
1
-2
1
2
2
-2
-2
-2
-2
-2
-2
-2
-2
-1
1
1
1
@@ -641,7 +636,17 @@
0
0
0
+0
+0
+0
+0
+0
+0
+0
+0
1
+0
+0
1
1
1
@@ -665,13 +670,21 @@
1
1
1
+0
1
1
1
1
1
+0
+0
+0
+0
1
+0
+0
1
+0
1
1
1
@@ -679,7 +692,6 @@
1
1
1
-0
1
1
1
@@ -714,39 +726,18 @@
1
1
1
+2
+1
1
1
1
1
1
1
-2
-2
-2
1
-2
-2
-2
-2
-2
-2
-2
-2
1
1
1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
1
1
1
@@ -770,7 +761,6 @@
1
1
1
-2
1
1
1
@@ -810,6 +800,16 @@
1
0
1
+1
+1
+1
+1
+0
+0
+0
+0
+0
+0
0
0
0
diff --git a/cesar/ce/rx/bitloading/test/data/tonemap_initial_3db_nsr_margin_0_00_ber_margin.data b/cesar/ce/rx/bitloading/test/data/tonemap_initial_3db_nsr_margin_0_00_ber_margin.data
index 294d40f67d..896f59842d 100644
--- a/cesar/ce/rx/bitloading/test/data/tonemap_initial_3db_nsr_margin_0_00_ber_margin.data
+++ b/cesar/ce/rx/bitloading/test/data/tonemap_initial_3db_nsr_margin_0_00_ber_margin.data
@@ -72,56 +72,51 @@
0
0
0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
2
3
+2
+3
+3
+3
+2
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
3
3
4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
+3
+3
+3
+3
+3
3
3
3
@@ -138,122 +133,7 @@
2
2
2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-3
-3
-3
-3
-3
2
-3
2
2
2
@@ -265,7 +145,9 @@
2
2
2
-3
+2
+2
+2
2
2
3
@@ -280,35 +162,10 @@
3
3
3
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-3
-3
3
3
3
3
-4
3
3
3
@@ -318,6 +175,7 @@
3
3
3
+4
3
4
4
@@ -342,7 +200,10 @@
4
4
4
+4
+4
3
+4
3
4
3
@@ -352,17 +213,20 @@
3
3
3
-2
3
-2
-2
3
-2
-2
-2
-2
-2
-2
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
3
3
3
@@ -408,16 +272,6 @@
2
2
2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
2
2
2
@@ -436,6 +290,27 @@
2
2
3
+3
+3
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
2
2
2
@@ -443,15 +318,14 @@
2
2
2
-3
-3
2
3
3
3
+2
3
3
-3
+2
3
3
3
@@ -462,10 +336,15 @@
3
3
3
-2
3
3
+2
+3
+2
+2
+2
3
+2
3
2
2
@@ -482,8 +361,38 @@
2
2
2
-1
-1
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
1
1
1
@@ -494,11 +403,7 @@
1
1
2
-1
-1
-1
2
-1
2
2
2
@@ -509,6 +414,88 @@
2
2
2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+1
+1
+1
+1
+1
+1
+1
+1
+0
+1
+0
+1
+1
+1
+1
+1
+1
+1
1
1
1
@@ -535,6 +522,26 @@
1
1
0
+1
+1
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
0
0
0
@@ -663,12 +670,25 @@
1
1
1
+0
1
+0
1
1
+0
+0
+0
+0
+0
1
+0
+0
+0
+0
+0
1
1
+0
1
1
1
@@ -719,35 +739,6 @@
1
1
1
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
1
1
1
@@ -756,21 +747,17 @@
1
1
1
-2
1
1
1
1
-2
1
1
-2
1
1
1
1
1
-2
1
1
1
@@ -811,7 +798,6 @@
1
1
0
-1
0
0
0
@@ -847,7 +833,6 @@
0
0
0
-1
0
0
0
@@ -905,7 +890,22 @@
0
0
0
-1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
0
0
0
diff --git a/cesar/ce/rx/bitloading/test/data/tonemap_initial_3db_nsr_margin_0_01_ber_margin.data b/cesar/ce/rx/bitloading/test/data/tonemap_initial_3db_nsr_margin_0_01_ber_margin.data
index ed28596283..8a521825b7 100644
--- a/cesar/ce/rx/bitloading/test/data/tonemap_initial_3db_nsr_margin_0_01_ber_margin.data
+++ b/cesar/ce/rx/bitloading/test/data/tonemap_initial_3db_nsr_margin_0_01_ber_margin.data
@@ -72,25 +72,38 @@
0
0
0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+1
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
2
2
2
2
3
+2
3
+2
3
+2
3
3
3
@@ -104,24 +117,6 @@
3
3
3
-3
-3
-3
-3
-4
-4
-4
-3
-4
-3
-3
-3
-3
-3
-3
-3
-3
-3
2
2
2
@@ -138,34 +133,45 @@
2
2
2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
3
3
3
@@ -173,21 +179,9 @@
3
3
3
-4
-4
-4
3
4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
+3
4
4
4
@@ -205,25 +199,11 @@
4
4
3
-4
3
-4
-4
3
3
3
3
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
3
3
3
@@ -237,15 +217,27 @@
3
3
3
+2
3
3
+2
3
+2
+2
+2
+2
+2
+2
+2
+2
3
3
3
3
3
3
+2
+2
3
3
2
@@ -281,26 +273,6 @@
2
2
2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
2
2
2
@@ -308,43 +280,66 @@
2
2
2
-3
2
2
2
2
2
-3
-3
-3
2
2
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
2
-3
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
2
2
2
@@ -399,7 +394,20 @@
1
1
1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
2
+1
2
2
2
@@ -408,16 +416,6 @@
2
2
2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
2
2
2
@@ -484,7 +482,15 @@
1
1
1
+0
+0
1
+0
+0
+0
+0
+0
+0
1
1
1
@@ -509,24 +515,9 @@
1
1
1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
+0
+0
+0
1
0
1
@@ -643,16 +634,68 @@
0
0
0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
1
0
0
0
+0
1
1
1
1
+0
+0
+0
1
1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
1
1
1
@@ -661,6 +704,9 @@
1
1
1
+0
+0
+0
1
1
1
@@ -675,14 +721,8 @@
1
1
1
-0
1
-0
-0
-0
1
-0
-0
1
1
1
@@ -715,6 +755,7 @@
1
1
1
+0
1
1
1
@@ -726,16 +767,27 @@
1
1
1
-2
1
1
1
1
+0
+0
1
+0
1
+0
+0
1
1
0
+1
+0
+1
+1
+0
+0
+0
0
0
0
@@ -747,65 +799,13 @@
0
0
0
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
0
-1
0
0
0
0
0
0
-1
0
0
0
diff --git a/cesar/ce/rx/bitloading/test/data/tonemap_initial_under_ber_0db_nsr_margin_0_00_ber_margin.data b/cesar/ce/rx/bitloading/test/data/tonemap_initial_under_ber_0db_nsr_margin_0_00_ber_margin.data
index ee5f370804..54acaa2e96 100644
--- a/cesar/ce/rx/bitloading/test/data/tonemap_initial_under_ber_0db_nsr_margin_0_00_ber_margin.data
+++ b/cesar/ce/rx/bitloading/test/data/tonemap_initial_under_ber_0db_nsr_margin_0_00_ber_margin.data
@@ -72,38 +72,34 @@
0
0
0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+2
+2
+2
+2
+2
+2
+2
+2
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
3
4
+3
+3
+3
+3
4
4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
+3
4
4
4
@@ -124,13 +120,30 @@
4
4
3
-4
3
3
3
3
3
3
+2
+2
+2
+2
+2
+2
+2
+2
+2
+3
+2
+3
+2
+3
+3
+3
+3
+3
3
3
3
@@ -138,70 +151,6 @@
3
3
3
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-4
4
4
4
@@ -213,17 +162,6 @@
4
4
4
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
4
4
4
@@ -250,61 +188,11 @@
4
4
4
-3
-4
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-4
-3
-4
-3
-4
-4
-4
4
4
4
-3
-3
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-3
4
4
-3
4
4
4
@@ -351,44 +239,19 @@
4
4
4
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
4
4
4
4
3
4
-4
-4
-4
-4
-4
-4
-4
-4
-4
-3
-3
-3
-3
3
3
3
3
3
2
+3
2
2
2
@@ -404,20 +267,31 @@
2
2
2
+3
2
2
+3
2
+3
+3
+3
+3
+3
2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
3
3
3
@@ -450,23 +324,51 @@
4
3
3
+3
+3
+3
4
4
+3
4
3
3
3
3
3
+4
+3
+3
+3
+3
+3
+3
+3
+3
+3
3
3
-4
3
3
-4
3
3
3
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+3
+3
3
3
3
@@ -476,6 +378,11 @@
3
3
3
+3
+3
+2
+3
+2
2
2
2
@@ -528,8 +435,91 @@
2
2
2
+2
+2
+2
+2
+2
+2
+2
+3
+2
+2
+2
+2
+3
+2
+3
+3
+3
+3
+3
+3
+3
+3
+2
+2
+2
+3
+3
+2
+2
+2
+3
+3
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+1
+1
+1
+1
+1
1
+1
+1
+1
+1
+1
+2
+2
+2
+2
+2
2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+1
+1
+1
+1
+1
+1
1
1
1
@@ -541,6 +531,48 @@
1
1
1
+1
+0
+1
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
0
0
0
@@ -606,6 +638,32 @@
1
1
1
+0
+1
+0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
1
1
1
@@ -643,50 +701,23 @@
1
1
1
-2
1
1
1
-2
1
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
1
1
1
1
1
-2
1
1
2
+1
2
2
2
+1
2
2
2
@@ -712,96 +743,20 @@
2
2
2
+1
2
2
2
2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
1
1
+2
+1
+2
1
1
1
+2
1
1
1
@@ -812,6 +767,7 @@
1
1
1
+2
1
1
1
@@ -861,11 +817,13 @@
0
0
0
+1
0
0
0
0
0
+1
0
0
0
@@ -877,60 +835,102 @@
0
0
0
+1
+0
+0
+0
0
0
0
0
1
+0
+0
+0
1
+0
+0
1
+0
+0
+0
1
+0
+0
1
+0
+0
+0
+0
+0
+0
+0
1
+0
1
1
+0
+0
+0
+0
+0
1
+0
+0
+0
+0
+0
+0
1
+0
+0
+0
+0
1
+0
1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
1
1
+0
1
+0
+0
1
1
1
+0
+0
1
+0
+0
+0
+0
+0
1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
0
0
0
diff --git a/cesar/ce/rx/bitloading/test/host-Makefile b/cesar/ce/rx/bitloading/test/host-Makefile
index c2a4dcca20..8d08b219af 100644
--- a/cesar/ce/rx/bitloading/test/host-Makefile
+++ b/cesar/ce/rx/bitloading/test/host-Makefile
@@ -12,7 +12,7 @@ HOST_PROGRAMS = test_ce_host test_ce_intervals test_ce_poly test_ce_pber\
test_ce_host_SOURCES = $(ce_rx_bl_test_sources_common) ecos_stub.c
test_ce_host_MODULES = $(ce_rx_bl_modules_common) ce/rx
-test_ce_host_CONFIG_MODULES = cp
+test_ce_host_CONFIG_MODULES = cp/sta/mgr cp
ce_rx_MODULE_SOURCES = tonemask.c
diff --git a/cesar/ce/rx/bitloading/test/intervals/Makefile b/cesar/ce/rx/bitloading/test/intervals/Makefile
index e9e8a42648..68310b18fd 100644
--- a/cesar/ce/rx/bitloading/test/intervals/Makefile
+++ b/cesar/ce/rx/bitloading/test/intervals/Makefile
@@ -9,14 +9,14 @@ test_ce_intervals_fsm_SOURCES = scenario_intervals_actions.c \
../../src/ecos_stub.c
test_ce_intervals_fsm_MODULES = lib ce/rx/bitloading/fsm ce/rx/bitloading \
ce/rx/cp/stub ce/common lib/scenario
-test_ce_intervals_CONFIG_MODULES = cp
+test_ce_intervals_CONFIG_MODULES = cp mac/common
test_ce_fsm_SOURCES = scenario_intervals_actions.c \
test_fsm.c scenario_intervals_events.c \
../../src/ecos_stub.c
test_ce_fsm_MODULES = lib ce/rx/bitloading/fsm ce/rx/bitloading \
ce/rx/cp/stub ce/common lib/scenario
-test_ce_fsm_CONFIG_MODULES = cp
+test_ce_fsm_CONFIG_MODULES = cp mac/common
ce_rx_bitloading_MODULE_SOURCES = transition.c intervals.c common.c pber.c \
ber_margin_update.c
diff --git a/cesar/ce/rx/bitloading/test/intervals/src/test_intervals_fsm.c b/cesar/ce/rx/bitloading/test/intervals/src/test_intervals_fsm.c
index 8a681246be..3d88c9d497 100644
--- a/cesar/ce/rx/bitloading/test/intervals/src/test_intervals_fsm.c
+++ b/cesar/ce/rx/bitloading/test/intervals/src/test_intervals_fsm.c
@@ -762,6 +762,8 @@ main (int argc, char **argv)
ce_rx_bl_pber_conf.min_frame_with_high_pb_err_rate =
CE_RX_BL_MIN_FRAME_WITH_HIGH_PB_ERR_RATE;
ce_rx_bl_ber_conf_init();
+ ce_rx_bl_intervals_fsm_count_ = 6;
+ ce_rx_bl_intervals_repetition_count_ = 4;
test_ce_rx_bl_fsm_INTERVAL_TRACKING (t);
test_ce_rx_bl_fsm_INTERVAL_SOUND (t);
test_ce_rx_bl_fsm_INTERVAL_SOUND_WAIT (t);
diff --git a/cesar/ce/rx/bitloading/test/sparc-Makefile b/cesar/ce/rx/bitloading/test/sparc-Makefile
index 087e5090db..f7c716108f 100644
--- a/cesar/ce/rx/bitloading/test/sparc-Makefile
+++ b/cesar/ce/rx/bitloading/test/sparc-Makefile
@@ -16,7 +16,7 @@ TARGET_PROGRAMS = test_ce_sparc
test_ce_sparc_SOURCES = $(ce_rx_bl_test_sources_common)
test_ce_sparc_MODULES = $(ce_rx_bl_modules_common) hal/arch ce/rx
-test_ce_sparc_CONFIG_MODULES = cp
+test_ce_sparc_CONFIG_MODULES = cp/sta/mgr cp
ce_rx_MODULE_SOURCES = tonemask.c
diff --git a/cesar/ce/rx/bitloading/test/src/test_bl.c b/cesar/ce/rx/bitloading/test/src/test_bl.c
index e82ae9ddd6..39eb65511d 100644
--- a/cesar/ce/rx/bitloading/test/src/test_bl.c
+++ b/cesar/ce/rx/bitloading/test/src/test_bl.c
@@ -635,7 +635,7 @@ test_suite_ce_rx_bl_initial (test_t t)
#undef TONEMAP_READ_OPEN
#undef TONEMAP_READ_CLOSE
tonemap_free (tm);
- test_fail_if (tm->fecrate != PHY_FEC_RATE_16_21);
+ test_fail_if (tm->fecrate != PHY_FEC_RATE_1_2);
test_fail_if (bit_per_tone != bit_per_tone_vect);
test_fail_if (tone_diff > TONE_TOLERATED_ERROR, "%d computed "
"tone(s) differs from test vector", tone_diff);
@@ -693,7 +693,7 @@ test_suite_ce_rx_bl_initial (test_t t)
#undef TONEMAP_READ_OPEN
#undef TONEMAP_READ_CLOSE
tonemap_free (tm);
- test_fail_if (tm->fecrate != PHY_FEC_RATE_16_21);
+ test_fail_if (tm->fecrate != PHY_FEC_RATE_1_2);
test_fail_if (bit_per_tone != bit_per_tone_vect);
test_fail_if (tone_diff > TONE_TOLERATED_ERROR, "%d computed "
"tone(s) differs from test vector", tone_diff);
@@ -855,7 +855,7 @@ test_suite_ce_rx_bl_nsr_margin (test_t t)
s64 tonemap_initial_ber_margin_quant[BER_MARGIN_VECTOR_COUNT] =
{
0ll,
- 90071992547410ll,
+ 27021597764223ll,
};
/* A few preparations for the test. */
diff --git a/cesar/ce/rx/ce_rx_param.h b/cesar/ce/rx/ce_rx_param.h
index 954eebca73..52587dde12 100644
--- a/cesar/ce/rx/ce_rx_param.h
+++ b/cesar/ce/rx/ce_rx_param.h
@@ -43,7 +43,7 @@
#define CE_RX_BL_PB_FALSE_FACTOR 1
#define CE_RX_BL_PB_TOTAL_FACTOR 4
#define CE_RX_BL_MIN_PB_PER_FRAME 2
-#define CE_RX_BL_MIN_FRAME_WITH_HIGH_PB_ERR_RATE 8
+#define CE_RX_BL_MIN_FRAME_WITH_HIGH_PB_ERR_RATE 9
/**
* Degree maximum of polynomial.
diff --git a/cesar/ce/rx/cp/test/Makefile b/cesar/ce/rx/cp/test/Makefile
index fa07d6c833..d23ffee393 100644
--- a/cesar/ce/rx/cp/test/Makefile
+++ b/cesar/ce/rx/cp/test/Makefile
@@ -19,7 +19,7 @@ INCLUDES = ce/rx/cp/test/override
common_rle_sources = test_mme.c stub.c
common_rle_modules = lib mac/common ce/rx/cp ce/common cp/msg/stub \
cp/sta/mgr cp/av/fsm/stub
-common_rle_config = cp
+common_rle_config = mac/sar cp
# Test MME with RLE.
TARGET_rle_PROGRAMS = test_mme_rle
@@ -38,7 +38,7 @@ TARGET_mbox_PROGRAMS = test_mbox
test_mbox_SOURCES = test_mbox.c stub_mbox.c
test_mbox_MODULES = lib mac/common ce/rx/cp ce/common cp/msg/stub \
cp/av/fsm/stub
-test_mbox_CONFIG_MODULES = cp
+test_mbox_CONFIG_MODULES = mac/sar cp/sta/mgr cp
# Remove sta.c to prevent multiple definition of cp_sta_get_peer.
cp_sta_mgr_MODULE_SOURCES = net.c sta_mgr.c sta_own_data.c
diff --git a/cesar/ce/rx/stub/src/rx.c b/cesar/ce/rx/stub/src/rx.c
index f52dcf3549..c61cd8e3d5 100644
--- a/cesar/ce/rx/stub/src/rx.c
+++ b/cesar/ce/rx/stub/src/rx.c
@@ -70,3 +70,10 @@ ce_rx_get_nsr (ce_rx_t *ce_rx, cp_tei_t tei, uint int_index,
{
return NULL;
}
+
+u8
+ce_rx_bl_nsr_compute_total_mean (ce_rx_bitloading_t *bl) __attribute__((weak));
+
+u8
+ce_rx_bl_nsr_compute_total_mean (ce_rx_bitloading_t *bl)
+{ return 0; }
diff --git a/cesar/ce/rx/test/Makefile b/cesar/ce/rx/test/Makefile
index ca9c515f69..03ad4e7250 100644
--- a/cesar/ce/rx/test/Makefile
+++ b/cesar/ce/rx/test/Makefile
@@ -16,6 +16,7 @@ common_MODULES = ce/rx ce/rx/cp ce/common \
mac/sar/stub cp/av/sta/mgr cp/av/fsm/stub cp/av/cco/action/stub \
cp/sta/core/stub cl/stub bsu/stub
+
# Override sources for BL (we only want our stubbed handle event for the FSM).
ce_rx_bitloading_fsm_MODULE_SOURCES =
@@ -25,7 +26,7 @@ TARGET_PROGRAMS = test_rx
# Test CE RX.
test_rx_SOURCES = test_rx.c pbproc_stub.c
test_rx_MODULES = $(common_MODULES)
-test_rx_CONFIG_MODULES = cp
+test_rx_CONFIG_MODULES = mac/pbproc mac/sar cp
# Include main Makefile.
include $(BASE)/common/make/top.mk
diff --git a/cesar/ce/tx/test/Config b/cesar/ce/tx/test/Config
new file mode 100644
index 0000000000..416dfb14d1
--- /dev/null
+++ b/cesar/ce/tx/test/Config
@@ -0,0 +1,3 @@
+CONFIG_CL_EOC_ROUTE = y
+CONFIG_CP_AV = n
+CONFIG_CP_EOC = n
diff --git a/cesar/ce/tx/test/Makefile b/cesar/ce/tx/test/Makefile
index 8e1d4d671a..20a52fc1dd 100644
--- a/cesar/ce/tx/test/Makefile
+++ b/cesar/ce/tx/test/Makefile
@@ -14,7 +14,7 @@ HOST_PROGRAMS = test_expiration test_mme test_tm
test_expiration_SOURCES = test_expiration.c mme.c cp_sta_mgr_stub.c
test_expiration_MODULES = $(common_MODULES)
-test_expiration_CONFIG_MODULES = cp
+test_expiration_CONFIG_MODULES = mac/sar cl cp
test_mme_SOURCES = test_mme.c mme.c cp_sta_mgr_stub.c
test_mme_MODULES = $(common_MODULES)
diff --git a/cesar/cl/Config b/cesar/cl/Config
index c91d7c649d..4439db01e0 100644
--- a/cesar/cl/Config
+++ b/cesar/cl/Config
@@ -1,5 +1,9 @@
+CONFIG_CL_EOC_CLASSIFY = n
CONFIG_GPIO_LED_CL_RX = n
CONFIG_GPIO_LED_CL_RX_GPIO = 0
CONFIG_GPIO_LED_CL_TX = n
CONFIG_GPIO_LED_CL_TX_GPIO = 0
-CONFIG_CL_DATA_RATE=n
+CONFIG_CL_EOC_ROUTE = n
+CONFIG_CL_DATA_RATE = n
+CONFIG_CL_MCAST = n
+CONFIG_CL_AV = y
diff --git a/cesar/cl/Module b/cesar/cl/Module
index 1623f040a3..2b5a906a19 100644
--- a/cesar/cl/Module
+++ b/cesar/cl/Module
@@ -1,7 +1,10 @@
SOURCES := cl.c cl_mactotei.c bridge_table.c data_rate.c brg_rx.c send_mme.c \
- send_data.c receive.c
+ send_data.c receive.c mcast.c
ifeq ($(CONFIG_TRACE),y)
SOURCES += trace.c
endif
+ifeq ($(CONFIG_CL_EOC_ROUTE),y)
+SOURCES += cl_eoc_mactotei.c
+endif
MODULES := cl/mbx
diff --git a/cesar/cl/cl_eoc_mactotei.h b/cesar/cl/cl_eoc_mactotei.h
new file mode 100644
index 0000000000..57bf74f8c7
--- /dev/null
+++ b/cesar/cl/cl_eoc_mactotei.h
@@ -0,0 +1,159 @@
+#ifndef CL_EOC_MACTOTEI_H_
+#define CL_EOC_MACTOTEI_H_
+
+/* Cesar project {{{
+ *
+ * Copyright (C) 2009 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cl/cl_eoc_mactotei.h
+ * \brief MAC to TEI table interface between the CL and the CP.
+ * \ingroup cl
+ *
+ * The MAC to TEI table associate a MAC address to a TEI and a timestamp. The
+ * timestamp is used to know if the entry is obsolete entry or not.
+ */
+#include "lib/list.h"
+#include "mac/common/timings.h"
+
+#define MACTOTEI_NB_ENTRIES 512
+#define MACTOTEI_HASHSIZE 256
+#define MACTOTEI_HASHFUNC(mac) ((mac) >> 40)
+#define MAC_LIMITATION 9
+
+/** Duration after which the entry is obsolete (in seconds)*/
+#define MAX_ENTRY_AGE_SEC 1800
+#define MIN_ENTRY_AGE_SEC 60
+#define DEFAULT_ENTRY_AGE_SEC 300
+
+/** Single MAC to TEI entry contained in the table. Reserved entries do not age,
+ * they are reserved for multicast
+ */
+struct cl_eoc_mactotei_entry_t
+{
+ /** Station's TEI*/
+ uint tei;
+ /** MAC address of equipment behind TEI*/
+ mac_t mac_addr;
+ /** Entry's node in unique ageing list of all MAC adresses*/
+ list_node_t l_age;
+ /** Entry's node in hashing_list. */
+ list_node_t l_hash;
+ /** Time of creation or refresh of entry. */
+ uint timestamp;
+ /** Reserved entries do not age. */
+ bool reserved;
+};
+
+typedef struct cl_eoc_mactotei_entry_t cl_eoc_mactotei_entry_t;
+
+/** Entry used by the snapshot of the mactotei table. */
+struct cl_eoc_mactotei_snapshot_entry_t
+{
+ u64 mac:48;
+ u64 tei:16;
+};
+typedef struct cl_eoc_mactotei_snapshot_entry_t \
+ cl_eoc_mactotei_snapshot_entry_t;
+
+/** Table used to keep MAC to TEI mappings */
+struct cl_eoc_mactotei_table_t
+{
+ /** Unique ageing list. */
+ list_t ageing_list;
+ /** Hashing lists, take least significant byte of MAC address. */
+ list_t hashing_list[MACTOTEI_HASHSIZE];
+ /** Limited number of entries for each STA/CCo. */
+ cl_eoc_mactotei_entry_t cl_eoc_mtt_entries[MACTOTEI_NB_ENTRIES];
+ /** Duration after which entry is obsolete */
+ uint max_duration;
+ /** Current number mac addresses on STA side */
+ uint num_of_entries;
+ /** Number of allowed mac addresses on STA side */
+ uint max_entries;
+ /** STA's local time for entries expiration */
+ uint time_count;
+ /** Snapshot of valid (MAC address, TEI) in MAC to TEI table.*/
+ cl_eoc_mactotei_snapshot_entry_t mactotei_snapshot[MACTOTEI_NB_ENTRIES];
+};
+
+typedef struct cl_eoc_mactotei_table_t cl_eoc_mactotei_table_t;
+
+BEGIN_DECLS
+
+/** Find TEI to which to route packests according to MAC address.
+ * \param ctx CL context
+ * \param mac_addr MAC address of source
+ */
+uint
+cl_eoc_mactotei_find_tei (cl_t *ctx, mac_t mac_addr);
+
+/** Initialization of EoC mactotei table.
+ * \param ctx CL context
+ */
+void
+cl_eoc_mactotei_init (cl_t *ctx);
+
+/** Put new entry in mactotei table.
+ * \param ctx CL context
+ * \param mac_addr MAC address of new entry
+ * \param tei TEI of new entry
+*/
+bool
+cl_eoc_mactotei_entry_insert (cl_t *ctx, mac_t mac_addr, uint tei);
+
+/** Remove all entries associated with given TEI from ageing and hashing lists
+ * of cl_eoc_mactotei_table.
+ * \param ctx CL context
+ * \param tei TEI of the STA whose entries should be removed from the table
+*/
+void
+cl_eoc_mactotei_entry_remove (cl_t *ctx, uint tei);
+
+/** Set time during which entry will be valid.
+ * \param ctx CL context
+ * \param max_dur_sec maximum duration of entry in seconds
+ */
+void
+cl_eoc_mactotei_set_entry_duration (cl_t * ctx, uint max_dur_sec);
+
+/**
+ * Perform some periodic action
+ */
+void
+cl_eoc_mactotei_periodic_action (cl_t *ctx);
+
+/**
+ * Create a snapshot of the MAC to TEI entries.
+ * \param ctx CL context
+ * \return Number of entries in the created snapshot.
+ */
+uint
+cl_eoc_mactotei_snapshot_create (cl_t *ctx);
+
+/**
+ * Get a MAC address from the mactotei's snapshot
+ * \param ctx CL context
+ * \param index index of the MAC address to get
+ * \return the MAC address
+ */
+mac_t
+cl_eoc_mactotei_snapshot_get_mac (cl_t *ctx, uint index);
+
+/**
+ * Get a (MAC, TEI) from the mactotei's snapshot
+ * \param ctx CL context
+ * \param index index of the (MAC, TEI) to get
+ * \param[out] mac the MAC
+ * \param[out] tei the TEI
+ */
+void
+cl_eoc_mactotei_snapshot_get_mac_tei (cl_t *ctx, uint index, mac_t *mac,
+ uint *tei);
+
+END_DECLS
+
+#endif /*CL_EOC_MACTOTEI_H_*/
diff --git a/cesar/cl/cl_mactotei.h b/cesar/cl/cl_mactotei.h
index f6e416b588..d403861b45 100644
--- a/cesar/cl/cl_mactotei.h
+++ b/cesar/cl/cl_mactotei.h
@@ -39,8 +39,10 @@ typedef struct mac_lookup_block_header_t cl_mactotei_blk_t;
*/
struct cl_mactotei_entry_t
{
+ /** A MAC address*/
mac_t mac;
- u8 tei;
+ /** A TEI */
+ uint tei;
u8 tag;
};
typedef struct cl_mactotei_entry_t cl_mactotei_entry_t;
@@ -168,6 +170,25 @@ void
cl_mactotei_cancel (cl_mactotei_blk_t *table);
/**
+ * Add a temporary entry to the bridge table (if not already existing).
+ * \param cl the CL context.
+ * \param tei the TEI.
+ * \param mac the source MAC address.
+ */
+void
+cl_mactotei_add (cl_t *ctx, uint tei, mac_t mac);
+
+/**
+ * Get TEI associated to a given MAC address of a packet
+ * \param cl the CL context.
+ * \param mac the source MAC address of a packet
+ *
+ * This function is called every time CCo has to send_sack
+ */
+uint
+cl_mactotei_get_tei (cl_t *ctx, mac_t mac);
+
+/*
* This function will return the current amount of entry in the mactotei table
* (Used by VS_GET_MACTOTEI).
* \param ctx the CL context.
diff --git a/cesar/cl/inc/context.h b/cesar/cl/inc/context.h
index afc24cd739..a2c0a6bf32 100644
--- a/cesar/cl/inc/context.h
+++ b/cesar/cl/inc/context.h
@@ -20,6 +20,10 @@
#include "cl/brg_rx.h"
#include "cl/inc/bridge_table.h"
#include "cl/inc/trace.h"
+#include "config/cl/eoc.h"
+
+#include "cl/cl_eoc_mactotei.h"
+#include "common/defs/igmp.h"
#include "cl/mbx/inc/mbx.h"
/** Define the delay at the one the data inside the cl_data_send_link_t are
@@ -45,6 +49,32 @@ struct cl_data_send_link_t
};
typedef struct cl_data_send_link_t cl_data_send_link_t;
+/** Cl statistics structure. */
+struct cl_stat_t
+{
+ /** Received data frames. */
+ uint rx_data;
+ /** Received bytes count. */
+ uint rx_data_bytes;
+ /** Received multicast frames. */
+ uint rx_data_multicast;
+ /** Received mme frames. */
+ uint rx_mme;
+ /** Transmitted data frames. */
+ uint tx_data;
+ /** Transmitted data frames dropped, not auth. */
+ uint tx_data_drop_auth;
+ /** Transmitted data frames dropped, mfs overload. */
+ uint tx_data_drop_mfs;
+ /** Transmitted bytes count. */
+ uint tx_data_bytes;
+ /** Transmitted multicast frames. */
+ uint tx_data_multicast;
+ /** Transmitted mme frames. */
+ uint tx_mme;
+};
+typedef struct cl_stat_t cl_stat_t;
+
struct cl_t
{
/** The sar context use to send the MME or data. */
@@ -62,6 +92,13 @@ struct cl_t
/** mactotei table to send data over the PLC. */
cl_mactotei_table_t *mactotei;
+#if CONFIG_CL_EOC_ROUTE
+ /** Table for routing packages in EoC, maps MAC to TEI of STA on CCo side
+ * and limits number of MAC address behind STA
+ */
+ cl_eoc_mactotei_table_t cl_eoc_mactotei_table;
+#endif
+
/** The mac config */
mac_config_t *mac_config;
@@ -89,6 +126,8 @@ struct cl_t
lib_seq_check_t seq_check_rx_ctx;
lib_seq_check_t seq_check_tx_ctx;
#endif
+ /** Cl statistics. */
+ cl_stat_t stats;
};
#endif /* CL_INC_CONTEXT_H_ */
diff --git a/cesar/cl/inc/trace.h b/cesar/cl/inc/trace.h
index 8c9cb6a07f..bbe27c0c2f 100644
--- a/cesar/cl/inc/trace.h
+++ b/cesar/cl/inc/trace.h
@@ -43,12 +43,13 @@ enum
CL_TRACE_DATA_SEND,
CL_TRACE_DATA_SEND_DROP,
CL_TRACE_DATA_SEND_DONE,
- CL_TRACE_DATA_SEND_MULTI_FAILED,
CL_TRACE_DATA_RECV,
CL_TRACE_DATA_BUFFER_ADD,
CL_TRACE_BRIDGE_ADD,
+ CL_TRACE_MULTICAST_NOT_FOUND,
CL_TRACE_SEQ_CHECK_TX,
CL_TRACE_SEQ_CHECK_RX,
+ CL_TRACE_DATA_SEND_DROP_MFS,
};
BEGIN_DECLS
diff --git a/cesar/cl/mcast.h b/cesar/cl/mcast.h
new file mode 100644
index 0000000000..72a76e0b62
--- /dev/null
+++ b/cesar/cl/mcast.h
@@ -0,0 +1,36 @@
+#ifndef cesar_cl_mcast_h
+#define cesar_cl_mcast_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2011 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cesar/cl/mcast.h
+ * \brief Multicast
+ * \ingroup cl
+ */
+#include "common/defs/igmp.h"
+
+BEGIN_DECLS
+
+/**
+ * Update the igmp groups based on the mactotei table.
+ * \param cl the CL context.
+ */
+void
+cl_update_igmp_groups (cl_t *ctx);
+
+/**
+ * Get the access to the igmp data in the cl context.
+ * \param cl the CL context.
+ * \return the pointer to the igmp data.
+ */
+igmp_groups_t *
+cl_get_igmp_groups (cl_t *cl);
+
+END_DECLS
+
+#endif /* cesar_cl_mcast_h */
diff --git a/cesar/cl/src/bridge_table.c b/cesar/cl/src/bridge_table.c
index 163919bd01..84937316d5 100644
--- a/cesar/cl/src/bridge_table.c
+++ b/cesar/cl/src/bridge_table.c
@@ -182,8 +182,11 @@ bridge_table_size (cl_t *ctx)
{
/* Check parameter. */
dbg_assert (ctx);
-
+#if !CONFIG_CL_EOC_ROUTE
return mac_lookup_entry_count (ctx->bridge_table.table);
+#else
+ return cl_eoc_mactotei_snapshot_create (ctx);
+#endif
}
mac_t
@@ -191,7 +194,10 @@ bridge_table_get_entry (cl_t *ctx, uint position)
{
/* Check parameters. */
dbg_assert (ctx);
+#if !CONFIG_CL_EOC_ROUTE
dbg_assert (position < bridge_table_size (ctx));
-
return mac_lookup_get_mac (ctx->bridge_table.table, position);
+#else
+ return cl_eoc_mactotei_snapshot_get_mac (ctx, position);
+#endif
}
diff --git a/cesar/cl/src/cl.c b/cesar/cl/src/cl.c
index f3aa688592..ba8d4d958a 100644
--- a/cesar/cl/src/cl.c
+++ b/cesar/cl/src/cl.c
@@ -15,6 +15,7 @@
#include "common/std.h"
#include "lib/seq_check.h"
+#include "lib/stats.h"
#include "hal/arch/arch.h"
#include "hal/gpio/gpio.h"
@@ -27,10 +28,39 @@
#include "cl/inc/trace.h"
#include "cl/inc/send.h"
#include "cl/inc/receive.h"
+
#include "config/cl.h"
+#include "config/cl/eoc.h"
+#include "config/mac/common.h"
+#include "config.h"
+
+#include <string.h>
static struct cl_t cl_global;
+/**
+ * Initialise CL stats.
+ * \param ctx cl context
+ */
+#if CONFIG_STATS
+static void
+cl_stats_init (cl_t *ctx)
+{
+ # define CL_STAT(s) \
+ lib_stats_set_stat_value_notype ("cl_" #s, &ctx->stats.s, \
+ LIB_STATS_ACCESS_READ_ONLY, \
+ LIB_STATS_DEBUG)
+ CL_STAT (rx_data);
+ CL_STAT (rx_data_multicast);
+ CL_STAT (rx_mme);
+ CL_STAT (tx_data);
+ CL_STAT (tx_data_drop_auth);
+ CL_STAT (tx_data_drop_mfs);
+ CL_STAT (tx_data_multicast);
+ CL_STAT (tx_mme);
+}
+#endif
+
cl_t *
cl_init (mac_store_t *mac_store, sar_t *sar, mac_config_t *mac_config,
ipmbox_t *ipmbox, bufmgr_t *bufmgr)
@@ -40,6 +70,7 @@ cl_init (mac_store_t *mac_store, sar_t *sar, mac_config_t *mac_config,
/* Check parameters. */
dbg_assert (mac_config);
+ memset (&cl_global, 0, sizeof (cl_t));
ctx = &cl_global;
/* Initialize MAC store. */
@@ -76,6 +107,11 @@ cl_init (mac_store_t *mac_store, sar_t *sar, mac_config_t *mac_config,
bridge_table_init (ctx);
ctx->brg_rx = NULL;
+#if CONFIG_CL_EOC_ROUTE
+ cl_eoc_mactotei_init (ctx);
+ ctx->groups.nb = 0;
+#endif
+
/* Initialize the data link. */
ctx->data_send_link.mfs = NULL;
@@ -87,6 +123,10 @@ cl_init (mac_store_t *mac_store, sar_t *sar, mac_config_t *mac_config,
lib_seq_check_init (
&ctx->seq_check_tx_ctx, CALLBACK (cl_lib_seq_check_tx_cb), ctx);
+#if CONFIG_STATS
+ /* Register statistics. */
+ cl_stats_init (ctx);
+#endif
/* Debug LEDs. */
GPIO_SETUP (LED_CL_RX, GPIO_DIRECTION_OUT);
GPIO_SET (LED_CL_RX, 0);
@@ -131,38 +171,6 @@ cl_data_send_link_clear (cl_t *ctx)
arch_dsr_unlock ();
}
-igmp_groups_t*
-cl_get_igmp_groups (cl_t *ctx)
-{
- dbg_assert (ctx);
-
- return &ctx->groups;
-}
-
-void
-cl_update_igmp_groups (cl_t *ctx)
-{
- dbg_assert (ctx);
- uint g;
- uint m;
- for (g = 0; g < ctx->groups.nb; g++)
- {
- uint tei = MAC_TEI_UNASSOCIATED;
- ctx->groups.nb_actual_members[g] = 0;
-
- for (m = 0; m < ctx->groups.nb_total_members[g]; m++)
- {
- tei = cl_mactotei_table_find_tei_from_mac (
- ctx, ctx->groups.member_mac[g][m]);
- if (MAC_TEI_IS_STA(tei))
- ctx->groups.member_tei[g][ctx->groups.nb_actual_members[g]++] =
- tei;
- }
- if (ctx->groups.nb_actual_members[g] == 0)
- ctx->groups.member_tei[g][0] = MAC_TEI_BCAST;
- }
-}
-
#if CONFIG_CL_DATA_RATE
void
cl_compute_datarate_on_sta_ (cl_t *ctx, mfs_t *mfs, uint length)
diff --git a/cesar/cl/src/cl_eoc_mactotei.c b/cesar/cl/src/cl_eoc_mactotei.c
new file mode 100644
index 0000000000..5d940c8b2a
--- /dev/null
+++ b/cesar/cl/src/cl_eoc_mactotei.c
@@ -0,0 +1,328 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2009 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cl/src/cl_eoc_mactotei.c
+ * \brief MAC to TEI mapping for the Convergence Layer
+ * \ingroup cl
+ *
+ */
+#include "common/std.h"
+#include "cl/inc/context.h"
+#include "cl/cl_eoc_mactotei.h"
+#include "hal/arch/arch.h"
+#include "lib/stats.h"
+
+/** Keep local time updated for entry expiration purpose.
+ * \param ctx CL context
+ */
+PRIVATE void
+cl_eoc_time_update (cl_t *ctx)
+{
+ ctx->cl_eoc_mactotei_table.time_count++;
+}
+
+static inline uint
+cl_eoc_get_time (cl_t *ctx)
+{
+ return ctx->cl_eoc_mactotei_table.time_count;
+}
+
+static inline int
+cl_eoc_is_obsolete (cl_t *ctx, cl_eoc_mactotei_entry_t *entry, uint timestamp)
+{
+ if (ctx->mac_config->sta_mac_address == entry->mac_addr)
+ return 0;
+ else
+ return lesseq_mod2p32(entry->timestamp +
+ ctx->cl_eoc_mactotei_table.max_duration, timestamp);
+}
+
+/** Initialization of EoC mactotei table.
+ * \param ctx CL context
+ */
+void
+cl_eoc_mactotei_init (cl_t *ctx)
+{
+ cl_eoc_mactotei_table_t *mtt_table = &ctx->cl_eoc_mactotei_table;
+ cl_eoc_mactotei_entry_t *entry;
+ int i;
+
+ list_init (&mtt_table->ageing_list);
+ for (i = 0; i < MACTOTEI_HASHSIZE; i++)
+ list_init (&mtt_table->hashing_list[i]);
+ for (i = 0; i < MACTOTEI_NB_ENTRIES; i++)
+ {
+ entry = &mtt_table->cl_eoc_mtt_entries[i];
+ list_init_node (&entry->l_hash);
+ list_init_node (&entry->l_age);
+ entry->timestamp = i;
+ entry->reserved = 0;
+ entry->mac_addr = 0;
+ list_push_back (&mtt_table->ageing_list,&entry->l_age);
+ }
+ mtt_table->num_of_entries = 0;
+ mtt_table->time_count = 0;
+ mtt_table->max_entries = MAC_LIMITATION;
+ cl_eoc_mactotei_set_entry_duration (ctx, DEFAULT_ENTRY_AGE_SEC);
+
+ lib_stats_set_stat_value_notype ("MAC_LIMITATION",
+ &mtt_table->max_entries,
+ LIB_STATS_ACCESS_READ_WRITE,
+ LIB_STATS_DEBUG);
+}
+
+/** Search for an entry in eoc_mactotei table with the given mac address.
+ * \param ctx CL context
+ * \param mac_addr MAC address of the entry to be found in table
+ */
+cl_eoc_mactotei_entry_t *cl_eoc_mactotei_entry_find (cl_t *ctx, mac_t mac_addr)
+{
+
+ u8 index = MACTOTEI_HASHFUNC (mac_addr);
+ cl_eoc_mactotei_entry_t *entry = NULL;
+ list_node_t *list_node = NULL;
+
+ list_node = list_begin (&ctx->cl_eoc_mactotei_table.hashing_list[index]);
+
+ while (list_node != &ctx->cl_eoc_mactotei_table.hashing_list[index].nil)
+ {
+ if (list_node)
+ entry = PARENT_OF (cl_eoc_mactotei_entry_t, l_hash, list_node);
+ if (entry && (mac_addr == entry->mac_addr))
+ return entry;
+ list_node = list_next (list_node);
+ }
+
+ return NULL;
+}
+
+/** Find TEI to which to route packets according to MAC address.
+ * \param ctx CL context
+ * \param mac_addr MAC address to be mapped to TEI
+ */
+uint
+cl_eoc_mactotei_find_tei (cl_t *ctx, mac_t mac_addr)
+{
+ cl_eoc_mactotei_entry_t *entry = NULL;
+
+ entry = cl_eoc_mactotei_entry_find (ctx, mac_addr);
+ if (entry && !cl_eoc_is_obsolete (ctx, entry, cl_eoc_get_time (ctx)))
+ {
+ entry->timestamp = cl_eoc_get_time (ctx);
+ return entry->tei;
+ }
+
+ return MAC_TEI_UNASSOCIATED;
+}
+
+/** Put new MAC address in mactotei table.
+ * \param ctx CL context
+ * \param mac_addr MAC address of the packet
+ * \param tei TEI of the packet
+*/
+bool
+cl_eoc_mactotei_entry_insert (cl_t *ctx, mac_t mac_addr, uint tei)
+{
+ cl_eoc_mactotei_entry_t *entry = NULL;
+ cl_eoc_mactotei_entry_t *entry1 = NULL;
+ uint i;
+ list_node_t *list_node = NULL;
+
+ entry = cl_eoc_mactotei_entry_find (ctx, mac_addr);
+
+ if (!entry || cl_eoc_is_obsolete (ctx, entry, cl_eoc_get_time (ctx)))
+ {
+ /* Check if limit of MAC addresses is reached */
+ if (ctx->mac_config->tei == tei)
+ {
+ if (ctx->cl_eoc_mactotei_table.num_of_entries ==
+ ctx->cl_eoc_mactotei_table.max_entries)
+ {
+ ctx->cl_eoc_mactotei_table.num_of_entries = 0;
+ /* Count number of valid entries */
+ for (i = 0; i < MACTOTEI_HASHSIZE; i++)
+ {
+ list_node = list_begin (&ctx->cl_eoc_mactotei_table.hashing_list[i]);
+ while (list_node != &ctx->cl_eoc_mactotei_table.hashing_list[i].nil)
+ {
+ if (list_node)
+ entry1 = PARENT_OF (cl_eoc_mactotei_entry_t, l_hash,
+ list_node);
+ if ((entry1->tei == tei) &&
+ !cl_eoc_is_obsolete (ctx, entry1, cl_eoc_get_time (ctx)))
+ {
+ ctx->cl_eoc_mactotei_table.num_of_entries++;
+ }
+ if (ctx->cl_eoc_mactotei_table.num_of_entries ==
+ ctx->cl_eoc_mactotei_table.max_entries)
+ return false;
+ list_node = list_next (list_node);
+ }
+ }
+ }
+ ctx->cl_eoc_mactotei_table.num_of_entries++;
+ }
+ }
+
+ u8 index = MACTOTEI_HASHFUNC (mac_addr);
+ if (!entry)
+ {
+ list_node = list_next (&ctx->cl_eoc_mactotei_table.ageing_list.nil);
+ list_remove (&ctx->cl_eoc_mactotei_table.ageing_list, list_node);
+ entry = PARENT_OF (cl_eoc_mactotei_entry_t, l_age, list_node);
+ if (entry->mac_addr)
+ {
+ u8 index1 = MACTOTEI_HASHFUNC (entry->mac_addr);
+ list_remove (&ctx->cl_eoc_mactotei_table.hashing_list[index1],
+ &entry->l_hash);
+ }
+ }
+ else
+ {
+ list_remove (&ctx->cl_eoc_mactotei_table.hashing_list[index],
+ &entry->l_hash);
+ list_remove (&ctx->cl_eoc_mactotei_table.ageing_list, &entry->l_age);
+ }
+ entry->tei = tei;
+ entry->mac_addr = mac_addr;
+ entry->reserved = 0;
+ entry->timestamp = cl_eoc_get_time (ctx);
+ list_push_back (&ctx->cl_eoc_mactotei_table.ageing_list, &entry->l_age);
+ list_push_back (&ctx->cl_eoc_mactotei_table.hashing_list[index],
+ &entry->l_hash);
+ return true;
+}
+
+/** Remove all entries associated with given TEI from ageing and hashing lists
+ * of cl_eoc_mactotei_table
+ * \param ctx CL context
+ * \param tei TEI of the STA whose entries should be removed from the table
+*/
+void
+cl_eoc_mactotei_entry_remove (cl_t *ctx, uint tei)
+{
+ cl_eoc_mactotei_entry_t *entry = NULL;
+ list_node_t *list_node = NULL;
+
+ arch_dsr_lock ();
+ list_node = list_begin (&ctx->cl_eoc_mactotei_table.ageing_list);
+ while (list_node != &ctx->cl_eoc_mactotei_table.ageing_list.nil)
+ {
+ if (list_node)
+ entry = PARENT_OF (cl_eoc_mactotei_entry_t, l_age, list_node);
+ if (entry && (tei == entry->tei))
+ {
+ u8 index = MACTOTEI_HASHFUNC (entry->mac_addr);
+ list_remove (&ctx->cl_eoc_mactotei_table.hashing_list[index],
+ &entry->l_hash);
+ entry->tei = MAC_TEI_UNASSOCIATED;
+ entry->mac_addr = 0;
+ }
+ list_node = list_next (list_node);
+ }
+ arch_dsr_unlock ();
+}
+
+/** Set time during which entry will be valid
+ * \param ctx CL context
+ * \param max_dur_sec maximum duration of entry in seconds
+ */
+void
+cl_eoc_mactotei_set_entry_duration (cl_t * ctx, uint max_dur_sec)
+{
+ if ((max_dur_sec > MIN_ENTRY_AGE_SEC) && (max_dur_sec < MAX_ENTRY_AGE_SEC))
+ ctx->cl_eoc_mactotei_table.max_duration = max_dur_sec;
+}
+
+/**
+ * Remove obsolete/expired entries from the MAC to TEI
+ * \param ctx CL context
+ */
+PRIVATE void
+cl_eoc_mactotei_remove_obsolete (cl_t *ctx)
+{
+ list_node_t *list_node;
+
+ arch_dsr_lock ();
+ list_node = list_rbegin (&ctx->cl_eoc_mactotei_table.ageing_list);
+ while (list_node != &ctx->cl_eoc_mactotei_table.ageing_list.nil)
+ {
+ cl_eoc_mactotei_entry_t *entry
+ = PARENT_OF (cl_eoc_mactotei_entry_t, l_age, list_node);
+
+ if (!entry->mac_addr)
+ break;
+
+ if (cl_eoc_is_obsolete (ctx, entry, cl_eoc_get_time (ctx)))
+ {
+ /* Entry should be removed. */
+ u8 index = MACTOTEI_HASHFUNC (entry->mac_addr);
+ list_remove (&ctx->cl_eoc_mactotei_table.hashing_list[index],
+ &entry->l_hash);
+ entry->tei = MAC_TEI_UNASSOCIATED;
+ entry->mac_addr = 0;
+ }
+ list_node = list_prev (list_node);
+ }
+ arch_dsr_unlock ();
+}
+
+uint
+cl_eoc_mactotei_snapshot_create (cl_t *ctx)
+{
+ uint valid_entries_nb = 0;
+ list_node_t *list_node;
+ cl_eoc_mactotei_snapshot_entry_t *snapshot
+ = ctx->cl_eoc_mactotei_table.mactotei_snapshot;
+
+ arch_dsr_lock ();
+ list_node = list_rbegin (&ctx->cl_eoc_mactotei_table.ageing_list);
+ while (list_node != &ctx->cl_eoc_mactotei_table.ageing_list.nil)
+ {
+ cl_eoc_mactotei_entry_t *entry
+ = PARENT_OF (cl_eoc_mactotei_entry_t, l_age, list_node);
+
+ if (!entry->mac_addr)
+ break;
+
+ if (!cl_eoc_is_obsolete (ctx, entry, cl_eoc_get_time (ctx)))
+ {
+ snapshot[valid_entries_nb].mac = entry->mac_addr;
+ snapshot[valid_entries_nb].tei = entry->tei;
+ valid_entries_nb++;
+ }
+ list_node = list_prev (list_node);
+ }
+ arch_dsr_unlock ();
+
+ return valid_entries_nb;
+}
+
+mac_t
+cl_eoc_mactotei_snapshot_get_mac (cl_t *ctx, uint index)
+{
+ return ctx->cl_eoc_mactotei_table.mactotei_snapshot[index].mac;
+}
+
+void
+cl_eoc_mactotei_snapshot_get_mac_tei (cl_t *ctx, uint index, mac_t *mac,
+ uint *tei)
+{
+ cl_eoc_mactotei_snapshot_entry_t *snapshot_entry
+ = &ctx->cl_eoc_mactotei_table.mactotei_snapshot[index];
+ *mac = snapshot_entry->mac;
+ *tei = snapshot_entry->tei;
+}
+
+void
+cl_eoc_mactotei_periodic_action (cl_t *ctx)
+{
+ dbg_assert (ctx);
+ cl_eoc_time_update (ctx);
+ cl_eoc_mactotei_remove_obsolete (ctx);
+}
diff --git a/cesar/cl/src/cl_mactotei.c b/cesar/cl/src/cl_mactotei.c
index c30c05bd29..7fab9a3b72 100644
--- a/cesar/cl/src/cl_mactotei.c
+++ b/cesar/cl/src/cl_mactotei.c
@@ -17,6 +17,8 @@
#include "cl/cl_mactotei.h"
#include "cl/inc/context.h"
+#include "config/cl/eoc.h"
+
/**
* Set a TEI and a tag in an extra information field.
* \param tei TEI to set.
diff --git a/cesar/cl/src/mcast.c b/cesar/cl/src/mcast.c
new file mode 100644
index 0000000000..923d18044f
--- /dev/null
+++ b/cesar/cl/src/mcast.c
@@ -0,0 +1,60 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2011 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cesar/cl/src/mcast.c
+ * \brief Multicast.
+ * \ingroup cl
+ */
+#include "common/std.h"
+#include "cl/cl.h"
+#include "cl/mcast.h"
+#include "config/cl/eoc/route.h"
+#include "cl/inc/context.h"
+
+igmp_groups_t*
+cl_get_igmp_groups (cl_t *ctx)
+{
+ dbg_assert (ctx);
+ return &ctx->groups;
+}
+
+void
+cl_update_igmp_groups (cl_t *ctx)
+{
+ dbg_assert (ctx);
+ uint g;
+ uint m;
+ for (g = 0; g < ctx->groups.nb; g++)
+ {
+ uint tei = MAC_TEI_UNASSOCIATED;
+ ctx->groups.nb_actual_members[g] = 0;
+
+ for (m = 0; m < ctx->groups.nb_total_members[g]; m++)
+# if CONFIG_CL_EOC_ROUTE
+ {
+ tei = cl_eoc_mactotei_find_tei (
+ ctx, ctx->groups.member_mac[g][m]);
+ if (MAC_TEI_IS_EOC_STA (tei))
+ ctx->groups.member_tei[g][ctx->groups.nb_actual_members[g]++] =
+ tei;
+ }
+ if (ctx->groups.nb_actual_members[g] == 0)
+ ctx->groups.member_tei[g][0] = MAC_TEI_UNASSOCIATED;
+#else
+ {
+ tei = cl_mactotei_table_find_tei_from_mac (
+ ctx, ctx->groups.member_mac[g][m]);
+ if (MAC_TEI_IS_STA(tei))
+ ctx->groups.member_tei[g][ctx->groups.nb_actual_members[g]++] =
+ tei;
+ }
+ if (ctx->groups.nb_actual_members[g] == 0)
+ ctx->groups.member_tei[g][0] = MAC_TEI_BCAST;
+#endif
+ }
+}
diff --git a/cesar/cl/src/receive.c b/cesar/cl/src/receive.c
index c06f175f59..3b38f10456 100644
--- a/cesar/cl/src/receive.c
+++ b/cesar/cl/src/receive.c
@@ -45,6 +45,9 @@ cl_sar_data_recv (cl_t *ctx, u8 *buffer, uint length, mfs_rx_t *mfs)
/* Check sequence number of throughput. */
lib_seq_check_packet (&ctx->seq_check_rx_ctx, buffer, length);
+ /* Increase bytes count. */
+ ctx->stats.rx_data_bytes += length;
+
mac_t smac, dmac;
bitstream_direct_read_macs (buffer, &dmac, &smac);
CL_TRACE (DATA_RECV, phy_date (), buffer, TRACE_U64 (dmac),
@@ -56,7 +59,19 @@ cl_sar_data_recv (cl_t *ctx, u8 *buffer, uint length, mfs_rx_t *mfs)
msg.buffer_addr = (u32) buffer;
ipmbox_tx_data (ctx->ipmbox, (u32 *) &msg, IPMBOX_MSG_DATA_WORDS);
+#if !CONFIG_CL_EOC_ROUTE
cl_brg_rx_add (ctx, smac, mfs->common.tei);
+#else
+ bool ok = true;
+ if (MAC_TEI_IS_EOC_CCO(ctx->mac_config->tei))
+ ok = cl_eoc_mactotei_entry_insert (ctx, smac, mfs->common.tei);
+ dbg_assert (ok);
+#endif
+
+ if (mac_is_multicast (dmac) && dmac != MAC_BROADCAST)
+ ctx->stats.rx_data_multicast++;
+ else
+ ctx->stats.rx_data++;
/* update data rate informations associated to the RX
* from the associated sta to the local sta */
@@ -72,6 +87,7 @@ cl_sar_mme_recv (cl_t *ctx, u8 *buffer, uint length, mfs_rx_t *mfs,
dbg_claim (ctx);
dbg_claim (mfs);
dbg_claim (buffer);
+ ctx->stats.rx_mme++;
(*ctx->mbx->cb) (ctx->mbx->user_data, mfs->common.tei,
buffer, length, encryption);
CL_TRACE (MME_RECV, phy_date (), length, buffer, true);
diff --git a/cesar/cl/src/send_data.c b/cesar/cl/src/send_data.c
index b2d3bcbd5c..dd6fd72b1f 100644
--- a/cesar/cl/src/send_data.c
+++ b/cesar/cl/src/send_data.c
@@ -67,7 +67,14 @@ cl_classifer_get_lid (cl_t *ctx, uint tei, uint tag,
*bcast = false;
*acs = false;
*drop = false;
+#if CONFIG_CL_EOC_CLASSIFY
+ if (MAC_TEI_IS_STA (tei))
+ lid = lid_table[tag] + MAC_LLID_MIN;
+ else
+ lid = 0;
+#else /* !CONFIG_CL_EOC_CLASSIFY */
lid = lid_table[tag];
+#endif /* !CONFIG_CL_EOC_CLASSIFY */
CL_TRACE (CLASSIFIER, phy_date (), tei, *bcast, *acs, *drop, lid);
/** TODO fill the classifier */
return lid;
@@ -81,21 +88,26 @@ cl_classifer_get_lid (cl_t *ctx, uint tei, uint tag,
* \param tag the tag for the classifier
* \param arrival_time_ntb the arrival time in NTB
* \param mcast the packet is multicast
+ * \param dmac the destination mac address
+ * \param smac the source mac address
*
* The callee is responsible to give back the buffer to the buffer manager.
+ * dmac and smac are used only in non mcast mode.
*/
static inline void
cl_data_send_sublayer (cl_t *ctx, u8 *buffer, uint length, uint tag,
- u32 arrival_time_ntb, u8 tei, bool mcast)
+ u32 arrival_time_ntb, u8 tei, bool mcast,
+ mac_t dmac, mac_t smac)
{
uint lid;
- bool bcast, acs, drop, added;
+ bool bcast, acs, drop;
mfs_tx_t *mfs;
/* Get some data from the classifier. */
lid = cl_classifer_get_lid (ctx, tei, tag, &bcast, &acs, &drop);
if (MAC_LID_IS_PLID (lid))
{
+ bool added;
/* Create the MFS if it does not exits. */
mfs = mac_store_mfs_add_tx (ctx->mac_store, bcast, false, lid,
tei, &added);
@@ -105,9 +117,14 @@ cl_data_send_sublayer (cl_t *ctx, u8 *buffer, uint length, uint tag,
else
{
/* try to get the mfs from the store. */
+#if !CONFIG_MAC_COMMON_EOC_MFS
mfs = mac_store_mfs_get_tx (ctx->mac_store, bcast, false, lid, tei);
+#else
+ mfs = mac_store_mfs_get_sta_tx_data_locked (ctx->mac_store, lid, tei);
+ if (mfs)
+ blk_addref (mfs);
+#endif
}
-
if (!drop && !acs && mfs)
{
sar_msdu_process (ctx->sar, buffer, length, mfs,
@@ -120,13 +137,12 @@ cl_data_send_sublayer (cl_t *ctx, u8 *buffer, uint length, uint tag,
mfs->common.bcast);
if (!mcast)
{
- mac_t dmac, smac;
- bitstream_direct_read_macs (buffer, &dmac, &smac);
ctx->data_send_link.mfs = mfs;
ctx->data_send_link.last_update_date_ntb = arrival_time_ntb;
ctx->data_send_link.dmac = dmac;
ctx->data_send_link.smac = smac;
ctx->data_send_link.tag = tag;
+ ctx->stats.tx_data++;
}
else
blk_release (mfs);
@@ -135,17 +151,14 @@ cl_data_send_sublayer (cl_t *ctx, u8 *buffer, uint length, uint tag,
{
if (mfs)
blk_release (mfs);
- if (mcast)
- CL_TRACE (DATA_SEND_MULTI_FAILED,
- phy_date (), ctx->mac_config->authenticated,
- buffer, length);
- else
- CL_TRACE (DATA_SEND_DROP,
- phy_date (), ctx->mac_config->authenticated,
- buffer, length);
+ ctx->stats.tx_data_drop_mfs++;
+ CL_TRACE (DATA_SEND_DROP,
+ phy_date (), ctx->mac_config->authenticated,
+ buffer, length, TRACE_U64 (dmac), TRACE_U64 (smac));
}
}
+#if CONFIG_CL_AV
/**
* Send multicast packet to a group.
* \param ctx the cl context
@@ -165,12 +178,13 @@ cl_av_data_send_multicast (cl_t *ctx, u8 *buffer, uint length, uint tag,
uint tei = ctx->groups.member_tei[group_id][i];
dbg_assert (MAC_TEI_IS_STA (tei));
cl_data_send_sublayer (ctx, buffer, length, tag, arrival_time_ntb,
- tei, true /* mcast */);
+ tei, true /* mcast */, 0, 0);
}
/* The buffer is no more used, be aware the SAR is polling the bridge
* DMA, that why it can release the buffer here. */
bufmgr_give_back (ctx->bufmgr, buffer);
}
+#endif /* !CONFIG_CL_AV */
/**
* Prepare the CL to send a Frame.
@@ -196,25 +210,47 @@ cl_data_send_prepare (cl_t *ctx, u8 *buffer, uint length, uint tag,
/* Add the source MAC address to the local bridge table if not our MAC
* address. */
dbg_claim (ctx->mac_config);
- if (ctx->mac_config->sta_mac_address != smac)
+ if (ctx->mac_config->sta_mac_address != smac && !CONFIG_CL_EOC_ROUTE)
bridge_table_add (ctx, smac);
/* Data are forbidden if not authenticated. */
if (!ctx->mac_config->authenticated)
{
CL_TRACE (DATA_SEND_DROP, phy_date (), ctx->mac_config->authenticated,
- buffer, length);
+ buffer, length, TRACE_U64 (dmac), TRACE_U64 (smac));
+ ctx->stats.tx_data_drop_auth++;
bufmgr_give_back (ctx->bufmgr, buffer);
return;
}
/* Get the TEI from the mactotei table. */
uint tei;
- uint group;
+#if CONFIG_CL_EOC_ROUTE
+ /* For STA, if tei is unassociated, or MAC limit is reached
+ * drop the packet */
+ if (MAC_TEI_IS_EOC_STA(ctx->mac_config->tei))
+ {
+ bool drop = false;
+ tei = MAC_TEI_CCO_DEF;
+ if (smac != ctx->mac_config->sta_mac_address)
+ drop = !cl_eoc_mactotei_entry_insert (ctx, smac,
+ ctx->mac_config->tei);
+ if (drop)
+ {
+ bufmgr_give_back (ctx->bufmgr, buffer);
+ return;
+ }
+ }
+ else
+ tei = cl_eoc_mactotei_find_tei (ctx, dmac);
+#else
+ uint group = 0;
tei = cl_mactotei_table_find_tei_and_tag_from_mac (ctx, dmac, &group);
+#endif
dbg_assert (tei != ctx->mac_config->tei);
- if (tei == MAC_TEI_BCAST)
+#if CONFIG_CL_AV
+ if (tei == MAC_TEI_BCAST && ctx->groups.nb)
{
if (ctx->groups.nb_actual_members[group] > 1)
{
@@ -225,17 +261,69 @@ cl_data_send_prepare (cl_t *ctx, u8 *buffer, uint length, uint tag,
else
tei = ctx->groups.member_tei[group][0];
}
+#endif /* !CONFIG_CL_AV */
+
/* If the TEI is not found the packet is send as broadcast. */
- if (tei == MAC_TEI_UNASSOCIATED)
- tei = MAC_TEI_BCAST;
cl_data_send_sublayer (ctx, buffer, length, tag, arrival_time_ntb,
- tei, false /* unicast */);
+ tei == MAC_TEI_UNASSOCIATED ? MAC_TEI_BCAST: tei,
+ false /* unicast */, dmac, smac);
/* SAR ends using the buffer it can be given back.
* BRGDMA is polled by the SAR thats why it the buffer can be given
* back to the buffer manager. */
bufmgr_give_back (ctx->bufmgr, buffer);
}
+/**
+ * Send multicast packet to a group if it exists.
+ * \param ctx the cl context
+ * \param buffer the buffer containing the data to send
+ * \param length the length of the data to send
+ * \param tag the tag to use
+ * \param arrival_time_ntb the arrival time
+ * \param dmac the destination mac address
+ * \param smac the source mac address
+ */
+void
+cl_eoc_data_send_multicast (cl_t *ctx, u8 *buffer, uint length, uint tag,
+ u32 arrival_time_ntb, mac_t dmac, mac_t smac)
+{
+ if (MAC_IS_GROUP (dmac) && dmac != MCAST_MAC_IGMP_GENERAL_QUERY)
+ {
+ uint i, group_idx = ctx->groups.nb, tei;
+ /* Get the group from the IGMP local table. */
+ for (i = 0; i < ctx->groups.nb; i++)
+ {
+ if (ctx->groups.group_mac[i] == dmac
+ && ctx->groups.nb_actual_members[i])
+ {
+ group_idx = i;
+ break;
+ }
+ }
+ if (group_idx < ctx->groups.nb)
+ {
+ for (i = 0; i < ctx->groups.nb_actual_members[group_idx]; i++)
+ {
+ tei = ctx->groups.member_tei[group_idx][i];
+ cl_data_send_sublayer (ctx, buffer, length, tag,
+ arrival_time_ntb,
+ tei, true /* multicast */, 0, 0);
+ }
+ }
+ /* If the group is found the function has already returned so at this
+ * point the packet must be dropped. */
+ CL_TRACE (MULTICAST_NOT_FOUND, TRACE_U64 (dmac));
+ bufmgr_give_back (ctx->bufmgr, buffer);
+ }
+ /* Not a group but the mac address is maybe a multicast packet outside the
+ * multicast video range (i.e Spanning tree, etc...). */
+ else
+ {
+ cl_data_send_prepare (
+ ctx, buffer, length, tag, arrival_time_ntb, dmac, smac);
+ }
+}
+
void ARCH_ILRAM_PRIO (3)
cl_data_send (cl_t *ctx, u8 *buffer, uint length, uint tag,
u32 arrival_time_ntb)
@@ -245,6 +333,8 @@ cl_data_send (cl_t *ctx, u8 *buffer, uint length, uint tag,
dbg_claim (buffer);
dbg_claim (length >= ETH_PACKET_MIN_SIZE_ALLOWED
&& length <= ETH_PACKET_MAX_SIZE);
+ /* Increase bytes count. */
+ ctx->stats.tx_data_bytes += length;
/* Check sequence number of throughput. */
lib_seq_check_packet (&ctx->seq_check_tx_ctx, buffer, length);
/* Get macs. */
@@ -263,8 +353,9 @@ cl_data_send (cl_t *ctx, u8 *buffer, uint length, uint tag,
ctx->data_send_link.mfs->common.tei,
ctx->data_send_link.mfs->common.lid,
ctx->data_send_link.mfs->common.bcast);
- sar_msdu_process (ctx->sar, buffer, length, ctx->data_send_link.mfs,
- arrival_time_ntb);
+ ctx->stats.tx_data++;
+ sar_msdu_process (ctx->sar, buffer, length,
+ ctx->data_send_link.mfs, arrival_time_ntb);
/* update data rate informations associated to the TX
* from the local sta to the associated sta */
cl_compute_datarate_on_sta (
@@ -282,7 +373,18 @@ cl_data_send (cl_t *ctx, u8 *buffer, uint length, uint tag,
blk_release (ctx->data_send_link.mfs);
ctx->data_send_link.mfs = NULL;
}
- cl_data_send_prepare (ctx, buffer, length, tag, arrival_time_ntb,
- dmac, smac);
+ if (mac_is_multicast (dmac))
+ {
+#if CONFIG_CL_MCAST
+ cl_eoc_data_send_multicast (
+ ctx, buffer, length, tag, arrival_time_ntb, dmac, smac);
+#endif
+ ctx->stats.tx_data_multicast++;
+ }
+#if CONFIG_CL_MCAST
+ else
+#endif
+ cl_data_send_prepare (
+ ctx, buffer, length, tag, arrival_time_ntb, dmac, smac);
}
}
diff --git a/cesar/cl/src/trace.c b/cesar/cl/src/trace.c
index d9386fa9f1..ef9ef32d49 100644
--- a/cesar/cl/src/trace.c
+++ b/cesar/cl/src/trace.c
@@ -46,16 +46,20 @@ cl_trace_init (cl_t *ctx)
TRACE_EVENT (CL_TRACE_MACTOTEI_FIND_TEI, "CL_MACTOTEI_FIND_TEI mac @ : %m, found %d, tei use : %x", TIMESTAMP),
TRACE_EVENT (CL_TRACE_CLASSIFIER, "CL_CLASSIFIER tei : %x, bcast %d, acs : %d, drop : %d, lid : %x", TIMESTAMP),
TRACE_EVENT (CL_TRACE_DATA_SEND, "CL_DATA_SEND buffer @ : %x, length : %d, tei : %x, lid : %x, bcast : %d", TIMESTAMP),
- TRACE_EVENT (CL_TRACE_DATA_SEND_DROP, "CL_DATA_SEND_DROP authenticated : %d, buffer @ : %x, length : %d", TIMESTAMP),
+ TRACE_EVENT (CL_TRACE_DATA_SEND_DROP, "CL_DATA_SEND_DROP"
+ "authenticated : %d, buffer @ : %x, length : %d,"
+ "dmac %m, smac : %m", TIMESTAMP),
TRACE_EVENT (CL_TRACE_DATA_SEND_DONE, "CL_DATA_SEND_DONE buffer @ : %x", TIMESTAMP),
- TRACE_EVENT (CL_TRACE_DATA_SEND_MULTI_FAILED, "Multiunicast data send failed drop : %d, acs : %d, mfs : %x, dtei : %x, group : %d", TIMESTAMP),
TRACE_EVENT (CL_TRACE_DATA_RECV, "CL_DATA_RECV buffer @ : %x, destination : %m, source : %m, length : %d", TIMESTAMP),
TRACE_EVENT (CL_TRACE_DATA_BUFFER_ADD, "CL_DATA_BUFFER_ADD buffer @ : %x", TIMESTAMP),
TRACE_EVENT (CL_TRACE_BRIDGE_ADD, "Bridging MAC %m"),
+ TRACE_EVENT (CL_TRACE_MULTICAST_NOT_FOUND, "Multicast group not found %m"),
TRACE_EVENT (CL_TRACE_SEQ_CHECK_RX, "[SeqCheck] input from PLC: "
"[%d][%d] expected=%x, actual=%x"),
TRACE_EVENT (CL_TRACE_SEQ_CHECK_TX, "[SeqCheck] input from Eth: "
"[%d][%d] expected=%x, actual=%x"),
+ TRACE_EVENT (CL_TRACE_DATA_SEND_DROP_MFS, "CL_DATA_SEND_DROP_MFS "
+ "tei : %d, lid : %d, buffer @ : %x, length : %d", TIMESTAMP),
};
dbg_assert (ctx);
trace_namespace_init (&namespace, event_ids, COUNT (event_ids));
diff --git a/cesar/cl/stub/Module b/cesar/cl/stub/Module
index 2ad195744b..20fad46b15 100644
--- a/cesar/cl/stub/Module
+++ b/cesar/cl/stub/Module
@@ -1 +1,4 @@
-SOURCES:=cl.c cl_mactotei.c bridge_table.c brg_rx.c
+SOURCES:=cl.c cl_mactotei.c bridge_table.c brg_rx.c mcast.c
+ifeq ($(CONFIG_CL_EOC_ROUTE),y)
+SOURCES += cl_eoc_mactotei.c
+endif
diff --git a/cesar/cl/stub/src/cl_eoc_mactotei.c b/cesar/cl/stub/src/cl_eoc_mactotei.c
new file mode 100644
index 0000000000..fadac7182f
--- /dev/null
+++ b/cesar/cl/stub/src/cl_eoc_mactotei.c
@@ -0,0 +1,62 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2009 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cl/src/cl_eoc_mactotei.c
+ * \brief MAC to TEI mapping for the Convergence Layer
+ * \ingroup cl
+ *
+ */
+#include "common/std.h"
+#include "cl/inc/context.h"
+#include "cl/cl_eoc_mactotei.h"
+#include "hal/arch/arch.h"
+#include "lib/stats.h"
+
+bool
+cl_eoc_mactotei_entry_insert (cl_t *ctx, mac_t mac_addr, uint tei)
+ __attribute__((weak));
+
+bool
+cl_eoc_mactotei_entry_insert (cl_t *ctx, mac_t mac_addr, uint tei)
+{
+ return true;
+}
+
+uint
+cl_eoc_mactotei_find_tei (cl_t *ctx, mac_t mac_addr) __attribute__((weak));
+
+uint
+cl_eoc_mactotei_find_tei (cl_t *ctx, mac_t mac_addr)
+{ return MAC_TEI_UNASSOCIATED; }
+
+void
+cl_eoc_mactotei_entry_remove (cl_t *ctx, uint tei) __attribute__((weak));
+
+void
+cl_eoc_mactotei_entry_remove (cl_t *ctx, uint tei)
+{
+ dbg_assert (MAC_TEI_IS_STA (tei));
+}
+
+void
+cl_eoc_mactotei_periodic_action (cl_t *ctx)
+{
+ dbg_assert (ctx);
+}
+
+uint
+cl_eoc_mactotei_snapshot_create (cl_t *ctx)
+{
+ return 0;
+}
+
+void
+cl_eoc_mactotei_snapshot_get_mac_tei (cl_t *ctx, uint index, mac_t *mac,
+ uint *tei)
+{
+}
diff --git a/cesar/cl/stub/src/mcast.c b/cesar/cl/stub/src/mcast.c
new file mode 100644
index 0000000000..a3a4e99b05
--- /dev/null
+++ b/cesar/cl/stub/src/mcast.c
@@ -0,0 +1,26 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2011 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cl/stub/src/mcast.c
+ * \brief Stub the mcast functions
+ * \ingroup cl
+ *
+ */
+#include "common/std.h"
+#include "cl/cl.h"
+#include "cl/mcast.h"
+
+igmp_groups_t*
+cl_get_igmp_groups (cl_t *ctx) __attribute__((weak));
+
+igmp_groups_t*
+cl_get_igmp_groups (cl_t *ctx)
+{
+ dbg_assert (ctx);
+ return NULL;
+};
diff --git a/cesar/cl/test/bridge_table/Makefile b/cesar/cl/test/bridge_table/Makefile
index 2a2de34cc1..53e865768c 100644
--- a/cesar/cl/test/bridge_table/Makefile
+++ b/cesar/cl/test/bridge_table/Makefile
@@ -4,6 +4,7 @@ HOST_PROGRAMS = test_bridge_table
test_bridge_table_SOURCES = test_bridge_table.c
test_bridge_table_MODULES = lib cl hal/ipmbox/stub
+test_bridge_table_CONFIG_MODULES = mac/common
# Overrides source of the cl module.
cl_MODULE_SOURCES = bridge_table.c
diff --git a/cesar/cl/test/data_rate/Makefile b/cesar/cl/test/data_rate/Makefile
index 3156b1d874..8cbb78f51e 100644
--- a/cesar/cl/test/data_rate/Makefile
+++ b/cesar/cl/test/data_rate/Makefile
@@ -7,6 +7,7 @@ INCLUDES = cl/test/data_rate/override
HOST_PROGRAMS = data_rate
data_rate_SOURCES = data_rate_test.c
data_rate_MODULES = lib cl hal/ipmbox/stub
+data_rate_CONFIG_MODULES = mac/common
# Overrides source of the cl module.
cl_MODULE_SOURCES = data_rate.c
diff --git a/cesar/cl/test/functional/host-Config b/cesar/cl/test/functional/host-Config
new file mode 100644
index 0000000000..fdbfb45e5a
--- /dev/null
+++ b/cesar/cl/test/functional/host-Config
@@ -0,0 +1,2 @@
+CONFIG_STATS = n
+CONFIG_BLK_NB = 2048
diff --git a/cesar/cl/test/functional/src/cl.c b/cesar/cl/test/functional/src/cl.c
index 636b6bb1a7..2945b6f5a2 100644
--- a/cesar/cl/test/functional/src/cl.c
+++ b/cesar/cl/test/functional/src/cl.c
@@ -64,6 +64,10 @@ cl_test_init (cl_test_t *test)
mac_ntb_init (&test->mac_config);
test->cl = cl_init (test->mac_store, (sar_t*) test, &test->mac_config,
(ipmbox_t*) test, INVALID_PTR);
+ /* Force blk initialization. */
+ pb_t *pb = blk_alloc ();
+ dbg_assert (pb);
+ blk_release (pb);
}
void
diff --git a/cesar/cl/test/utest/src/cl.c b/cesar/cl/test/utest/src/cl.c
index 031f8ea520..eafa5cd2fe 100644
--- a/cesar/cl/test/utest/src/cl.c
+++ b/cesar/cl/test/utest/src/cl.c
@@ -15,6 +15,7 @@
#include "lib/test.h"
#include "lib/blk.h"
#include "lib/trace.h"
+#include "lib/stats.h"
void
cl_test_suite_send (test_t test);
@@ -34,11 +35,13 @@ main (int argc, char **argv)
test_t test;
test_init (test, argc, argv);
trace_init ();
+ lib_stats_init();
cl_test_suite_send (test);
cl_test_suite_receive (test);
cl_test_suite_misc (test);
cl_test_brg_rx (test);
trace_uninit ();
+ lib_stats_uninit();
test_begin (test, "Memory")
{
test_fail_if (blk_check_memory() == false, "Memory not freed");
diff --git a/cesar/cl/test/utest/src/misc.c b/cesar/cl/test/utest/src/misc.c
index 0032ecaa73..ed86e7a0ad 100644
--- a/cesar/cl/test/utest/src/misc.c
+++ b/cesar/cl/test/utest/src/misc.c
@@ -14,8 +14,9 @@
#include "lib/test.h"
#include "cl/test/utest/test.h"
#include "cl/cl_mactotei.h"
-#include <stdio.h>
+#include "cl/mcast.h"
#include "cl/inc/context.h"
+#include <stdio.h>
uint
cl_classifer_get_lid (cl_t *ctx, uint tei, uint tag,
diff --git a/cesar/cl/test/utest_eoc/Config b/cesar/cl/test/utest_eoc/Config
new file mode 100644
index 0000000000..63734d7175
--- /dev/null
+++ b/cesar/cl/test/utest_eoc/Config
@@ -0,0 +1,9 @@
+CONFIG_TRACE = y
+CONFIG_MAC_COMMON_EOC_TEI = y
+CONFIG_CL_EOC_ROUTE = y
+CONFIG_MAC_COMMON_EOC_MFS = y
+CONFIG_MAC_COMMON_EOC_SCHED = y
+CONFIG_CL_EOC_CLASSIFY = y
+CONFIG_MAC_PBPROC_EOC_FC = y
+CONFIG_CL_MCAST = y
+
diff --git a/cesar/cl/test/utest_eoc/Makefile b/cesar/cl/test/utest_eoc/Makefile
new file mode 100644
index 0000000000..56ba1c605b
--- /dev/null
+++ b/cesar/cl/test/utest_eoc/Makefile
@@ -0,0 +1,17 @@
+BASE = ../../..
+
+DEFS = -DNO_PRIVATE
+HOST_PROGRAMS = test_cl test_cl_mactotei
+
+test_cl_SOURCES = cl.c test.c mcast.c hle_tools.c send.c receive.c
+test_cl_MODULES = lib cl mac/common \
+ mac/sar/stub bufmgr/stub hal/ipmbox/stub hle/tools
+test_cl_CONFIG_MODULES = mac/sar
+
+test_cl_mactotei_SOURCES = test_mactotei.c hle_tools.c
+test_cl_mactotei_MODULES = lib cl mac/common \
+ mac/sar/stub bufmgr/stub hal/ipmbox/stub
+
+hle_tools_MODULE_SOURCES =
+
+include $(BASE)/common/make/top.mk
diff --git a/cesar/cl/test/utest_eoc/src/cl.c b/cesar/cl/test/utest_eoc/src/cl.c
new file mode 100644
index 0000000000..ff315780d8
--- /dev/null
+++ b/cesar/cl/test/utest_eoc/src/cl.c
@@ -0,0 +1,50 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2011 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cl/test/utest_eoc/src/cl.c
+ * \brief « brief description »
+ * \ingroup « module »
+ *
+ * « long description »
+ */
+#include "common/std.h"
+#include "lib/test.h"
+#include "lib/blk.h"
+#include "lib/trace.h"
+#include "lib/stats.h"
+
+void
+cl_test_suite_mcast (test_t test);
+
+void
+cl_test_suite_send (test_t test);
+
+void
+cl_test_suite_receive (test_t test);
+
+int
+main (int argc, char **argv)
+{
+ test_t test;
+ test_init (test, argc, argv);
+ trace_init ();
+ lib_stats_init ();
+ cl_test_suite_send (test);
+ cl_test_suite_mcast (test);
+ cl_test_suite_receive (test);
+ lib_stats_uninit ();
+ trace_uninit ();
+ test_begin (test, "Memory")
+ {
+ test_fail_if (blk_check_memory() == false, "Memory not freed");
+ }
+ test_end;
+ trace_uninit ();
+ test_result (test);
+ return test_nb_failed (test) == 0 ? 0 : 1;
+}
diff --git a/cesar/cl/test/utest_eoc/src/hle_tools.c b/cesar/cl/test/utest_eoc/src/hle_tools.c
new file mode 100644
index 0000000000..eba7086609
--- /dev/null
+++ b/cesar/cl/test/utest_eoc/src/hle_tools.c
@@ -0,0 +1,37 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2012 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cl/test/utest_eoc/src/hle_tools.c
+ * \brief Stub hle tools.
+ * \ingroup cl
+ */
+#include "common/std.h"
+#include "hle/tools/tools.h"
+
+#include "cl/test/utest_eoc/test.h"
+#include "config/hle.h"
+
+hle_tools_t *
+hle_tools_init (ipmbox_t *ipmbox)
+{
+ static hle_tools_test_t hle_tools;
+ hle_tools.msg = NULL;
+ return (hle_tools_t *) &hle_tools;
+}
+
+void
+hle_tools_uninit (hle_tools_t *ctx)
+{
+}
+
+void
+hle_tools_msg_recv (hle_tools_t *ctx, const ipmbox_msg_mbx_t *msg)
+{
+ hle_tools_test_t *t = (hle_tools_test_t*) ctx;
+ t->msg = (ipmbox_msg_mbx_t*) msg;
+}
diff --git a/cesar/cl/test/utest_eoc/src/mcast.c b/cesar/cl/test/utest_eoc/src/mcast.c
new file mode 100644
index 0000000000..097b37c426
--- /dev/null
+++ b/cesar/cl/test/utest_eoc/src/mcast.c
@@ -0,0 +1,69 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2011 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cl/test/utest_eoc/src/mcast.c
+ * \brief Multicast test.
+ * \ingroup cl
+ */
+#include "common/std.h"
+#include "lib/test.h"
+#include "cl/test/utest_eoc/test.h"
+#include "config/cl/eoc.h"
+#include "cl/inc/context.h"
+#include "cl/mcast.h"
+
+#if (!CONFIG_CL_EOC_ROUTE)
+# error (!CONFIG_CL_EOC_ROUTE)
+#endif
+
+void
+cl_test_case_mcast_master (test_t test)
+{
+ test_case_begin (test, "Master");
+ cl_test_t ctx;
+ cl_test_init (&ctx, 0x4354);
+ mac_t mac_group = MAC_ADDRESS (0x01, 0x00, 0x5E, 0x00, 0x00, 0x01);
+ mac_t mac_member = 0xe03708b65000ll;
+ test_begin (test, "No group")
+ {
+ igmp_groups_t *igmp = cl_get_igmp_groups (ctx.cl);
+ igmp->nb = 0;
+ cl_update_igmp_groups (ctx.cl);
+ test_fail_unless (igmp->nb == 0);
+ }
+ test_end;
+ test_begin (test, "Groups")
+ {
+ bool ok = false;
+ ok = cl_eoc_mactotei_entry_insert (ctx.cl, mac_member, 3);
+ test_fail_unless (ok);
+ /* Add a group. */
+ igmp_groups_t *igmp = cl_get_igmp_groups (ctx.cl);
+ igmp->nb = 1;
+ igmp->group_mac[0] = mac_group;
+ igmp->nb_total_members[0] = 1;
+ igmp->member_mac[0][0] = mac_member;
+ /* Update the igmp group. */
+ cl_update_igmp_groups (ctx.cl);
+ test_fail_unless (igmp->nb == 1);
+ test_fail_unless (igmp->group_mac[0]);
+ test_fail_unless (igmp->nb_total_members[0] == 1);
+ test_fail_unless (igmp->nb_actual_members[0] == 1);
+ test_fail_unless (igmp->member_mac[0][0] == mac_member);
+ test_fail_unless (igmp->member_tei[0][0] == 3);
+ }
+ test_end;
+ cl_test_uninit (&ctx);
+}
+
+void
+cl_test_suite_mcast (test_t test)
+{
+ test_suite_begin (test, "Multicast");
+ cl_test_case_mcast_master (test);
+}
diff --git a/cesar/cl/test/utest_eoc/src/receive.c b/cesar/cl/test/utest_eoc/src/receive.c
new file mode 100644
index 0000000000..eb2f70e96d
--- /dev/null
+++ b/cesar/cl/test/utest_eoc/src/receive.c
@@ -0,0 +1,83 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2012 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+
+/**
+ * \file cl/test/utest_eoc/src/receive.c
+ * \brief CL RX unit tests.
+ * \ingroup cl/test/utest_eoc
+ */
+
+#include <string.h>
+#include "common/std.h"
+#include "common/defs/ethernet.h"
+#include "lib/test.h"
+#include "cl/test/utest_eoc/test.h"
+#include "cl/inc/receive.h"
+#include "cl/inc/context.h"
+
+void
+test_case__cl_sar_data_recv (test_t test)
+{
+ test_case_begin (test, "Receive DATA");
+
+ u8 buffer[ETH_PACKET_MAX_SIZE];
+ cl_test_t t;
+ uint length = 500;
+ bool added = false;
+ uint j = 0;
+ uint rx_data = 0;
+ uint rx_data_bytes = 0;
+ uint rx_data_multicast = 0;
+ mac_t sta_mac [] = {0x123456789abcull, 0x23456789abceull,
+ 0x0100005E0001ull};
+ mfs_rx_t *mfs[COUNT(sta_mac)];
+ cl_test_init (&t, 0x9999432);
+
+ test_begin (test, "From SAR")
+ {
+ for (j = 0; j < COUNT (sta_mac); j++)
+ {
+ mfs[j] = mac_store_mfs_add_rx (t.mac_store, false, false,
+ MAC_LLID_MIN + 1, j + 100, &added);
+ dbg_assert (added);
+ cl_test_prepare_buffer (&t, buffer, length, sta_mac[j], 0);
+ rx_data_bytes = t.cl->stats.rx_data_bytes;
+ rx_data = t.cl->stats.rx_data;
+ cl_sar_data_recv (t.cl, buffer, length, mfs[j]);
+ test_fail_unless (t.cl->stats.rx_data_bytes
+ == rx_data_bytes + length);
+ if (!mac_is_multicast(sta_mac[j]))
+ {
+ test_fail_unless (t.cl->stats.rx_data == rx_data + 1);
+ test_fail_unless (t.cl->stats.rx_data_multicast
+ == rx_data_multicast);
+ }
+ else
+ {
+ test_fail_unless (t.cl->stats.rx_data == rx_data);
+ test_fail_unless (t.cl->stats.rx_data_multicast
+ == rx_data_multicast + 1);
+ }
+ test_fail_unless (t.pwl_recv.buffer == buffer);
+ test_fail_unless (t.pwl_recv.length == length);
+
+ mac_store_mfs_remove (t.mac_store, PARENT_OF (mfs_t, rx, mfs[j]));
+ blk_release (mfs [j]);
+ dbg_check (mac_store_sta_remove (t.mac_store, j + 100));
+ }
+ }
+ test_end;
+ cl_test_uninit (&t);
+}
+
+void
+cl_test_suite_receive (test_t test)
+{
+ test_suite_begin (test, "CL receive");
+ test_case__cl_sar_data_recv (test);
+}
diff --git a/cesar/cl/test/utest_eoc/src/send.c b/cesar/cl/test/utest_eoc/src/send.c
new file mode 100644
index 0000000000..58af73dd68
--- /dev/null
+++ b/cesar/cl/test/utest_eoc/src/send.c
@@ -0,0 +1,261 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2012 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cl/test/utest_eoc/src/send.c
+ * \brief CL TX unit tests.
+ * \ingroup cl/test/utest_eoc
+ */
+#include <string.h>
+
+#include "common/std.h"
+#include "lib/test.h"
+
+#include "cl/test/utest_eoc/test.h"
+#include "cl/inc/send.h"
+#include "cl/inc/context.h"
+#include "lib/bitstream.h"
+
+uint
+cl_classifer_get_lid (cl_t *ctx, uint tei, uint tag,
+ bool *bcast, bool *acs,
+ bool *drop);
+
+void
+sar_msdu_process (sar_t *ctx, u8 *buffer, u16 length,
+ mfs_tx_t *mfs, u32 arrival_time_ntb)
+{
+ sar_test_t *t = (sar_test_t*) ctx;
+ dbg_assert (ctx);
+ dbg_assert (t->nb <= TEST_BUFFER_MAX_NB);
+
+ t->buffer[t->nb] = buffer;
+ t->length[t->nb] = length;
+ t->mfs[t->nb] = mfs;
+ t->nb++;
+}
+
+void
+cl_test_case__cl_data_send_prepare (test_t test)
+{
+ test_case_begin (test, "Data send");
+
+ u8 buffer [1024];
+ cl_test_t t;
+ cl_data_send_link_t expected;
+ mac_t sta_mac [] = {0x123456789abcull, 0x23456789abceull};
+ mfs_tx_t *mfs[COUNT(sta_mac)];
+ uint i, j;
+ uint start_time_ntb = 0;
+ uint tag = 0;
+ uint tx_data = 0;
+ uint tx_data_bytes = 0;
+ uint sar_nb = 0;
+ uint length = 123;
+ bool added = false;
+
+ cl_test_init (&t, 0x95490d);
+ cl_test_prepare_mactotei (&t, sta_mac, COUNT (sta_mac));
+
+ test_begin (test, "To SAR")
+ for (j = 0; j < COUNT (sta_mac); j++)
+ {
+ mfs[j] = mac_store_mfs_add_tx (t.mac_store, false, false,
+ MAC_LLID_MIN + 1, j + 100, &added);
+ dbg_assert (added);
+ t.sar.nb = 0;
+ cl_test_prepare_buffer (&t, buffer, length, sta_mac[j], 0);
+ expected.mfs = mfs[j];
+ expected.last_update_date_ntb = start_time_ntb;
+ expected.dmac = sta_mac[j];
+ for (i = start_time_ntb; i < 500000; i+= 100000)
+ {
+ if (i == MAC_MS_TO_TCK (CL_DATA_SEND_EXCEED_TIME_MS))
+ expected.last_update_date_ntb = i;
+ tx_data_bytes = t.cl->stats.tx_data_bytes;
+ tx_data = t.cl->stats.tx_data;
+ sar_nb = t.sar.nb;
+ cl_data_send (t.cl, buffer, length, tag, i);
+ test_fail_unless (t.cl->data_send_link.mfs == expected.mfs);
+ test_fail_unless (t.cl->data_send_link.last_update_date_ntb
+ == expected.last_update_date_ntb);
+ test_fail_unless (t.cl->stats.tx_data_bytes
+ == tx_data_bytes + length);
+ test_fail_unless (t.cl->stats.tx_data == tx_data + 1);
+ test_fail_unless (t.sar.nb == sar_nb + 1);
+ test_fail_unless (t.cl->data_send_link.dmac
+ == bitstream_direct_read_large (buffer, 0, 48));
+ }
+ mac_store_mfs_remove (t.mac_store, PARENT_OF (mfs_t, tx, mfs[j]));
+ blk_release (mfs [j]);
+ dbg_check (mac_store_sta_remove (t.mac_store, j + 100));
+ }
+ test_end;
+
+ cl_test_uninit (&t);
+}
+
+void
+cl_test_case__cl_data_send_mcast (test_t test)
+{
+ test_case_begin (test, "Multicast send");
+
+ u8 buffer [1024];
+ cl_test_t t;
+ mfs_tx_t *mfs_ref, *mfs_mcast[MCAST_GROUP_MAX_NB][MCAST_MEMBER_MAX_NB];
+ uint i, j;
+ uint start_time_ntb = 0;
+ uint tx_data_multicast = 0;
+ uint tx_data = 0;
+ uint tx_data_bytes = 0;
+ uint length = 123;
+ bool added = false;
+ bool bcast = false;
+ bool acs = false;
+ bool drop = false;
+
+ cl_test_init (&t, 0x95490d);
+
+ test_begin (test, "Multicast data.")
+ {
+ /** Prepare the groups and the mactotei table. */
+ for (j = 0; j < MCAST_GROUP_MAX_NB; j++)
+ {
+ t.cl->groups.group_mac[j] =
+ MAC_ADDRESS (0x01, 0x00, 0x5E, 0x00, j + 1, 0x01);
+ t.cl->groups.nb_actual_members[j] = j % (MCAST_MEMBER_MAX_NB + 1);
+ t.cl->groups.member_tei[j][0] = MAC_TEI_UNASSOCIATED;
+
+ for (i = 0; i < t.cl->groups.nb_actual_members[j]; i++)
+ {
+ t.cl->groups.member_tei[j][i]
+ = 100 + j * MCAST_MEMBER_MAX_NB + i;
+ mfs_mcast[j][i] = mac_store_mfs_add_tx (t.mac_store, false,
+ false, MAC_LLID_MIN + 1,
+ t.cl->groups.member_tei[j][i], &added);
+ dbg_assert (added);
+ }
+ cl_eoc_mactotei_entry_insert (t.cl, t.cl->groups.group_mac[j],
+ MAC_TEI_BCAST);
+ }
+ t.cl->groups.nb = MCAST_GROUP_MAX_NB;
+
+ for (j = 0; j < MCAST_GROUP_MAX_NB; j++)
+ {
+ cl_test_prepare_buffer (&t, buffer, length,
+ MAC_ADDRESS (0x01, 0x00, 0x5E, 0x00, j + 1, 0x01),
+ 0);
+
+ /** Send the multicast message */
+ t.sar.nb = 0;
+ tx_data_bytes = t.cl->stats.tx_data_bytes;
+ tx_data_multicast = t.cl->stats.tx_data_multicast;
+ tx_data = t.cl->stats.tx_data;
+
+ cl_data_send (t.cl, buffer, length, 0, start_time_ntb);
+
+ test_fail_unless (t.cl->stats.tx_data_bytes
+ == tx_data_bytes + length);
+ test_fail_unless (t.cl->stats.tx_data_multicast
+ == tx_data_multicast + 1);
+ test_fail_unless (t.cl->stats.tx_data == tx_data);
+
+ if (t.cl->groups.nb_actual_members[j] == 0)
+ {
+ test_fail_unless (t.sar.nb == 0);
+ }
+ else
+ {
+ test_fail_unless (t.sar.nb
+ == t.cl->groups.nb_actual_members[j]);
+
+ for (i = 0; i < t.cl->groups.nb_actual_members[j]; i++)
+ {
+ uint tei = 100 + j * MCAST_MEMBER_MAX_NB + i;
+ uint lid = cl_classifer_get_lid (t.cl, tei, 0, &bcast,
+ &acs, &drop);
+ mfs_ref = mac_store_mfs_get_tx (t.cl->mac_store, bcast,
+ false, lid, tei);
+
+ test_fail_unless (mfs_ref == t.sar.mfs[i]);
+ test_fail_unless (buffer == t.sar.buffer[i]);
+ test_fail_unless (mfs_ref->common.tei == tei);
+ test_fail_unless (bcast == false);
+
+ mac_store_mfs_remove (t.mac_store,
+ PARENT_OF (mfs_t, tx, mfs_ref));
+ blk_release (mfs_ref);
+ dbg_check (mac_store_sta_remove (t.mac_store, tei));
+ }
+ }
+ for (i = 0; i < t.cl->groups.nb_actual_members[j]; i++)
+ {
+ mac_store_mfs_remove (t.mac_store,
+ PARENT_OF (mfs_t, tx, mfs_mcast[j][i]));
+ blk_release (mfs_mcast[j][i]);
+ }
+ }
+ cl_mactotei_release_table (t.cl);
+ }
+ test_end;
+
+ test_begin (test, "Multicast not IGMP members")
+ {
+ /*
+ * From Wikipedia
+ * http://en.wikipedia.org/wiki/Multicast_address#Ethernet
+ *
+ * 01-00-0C-CC-CC-CC 0x0802 CDP, VTP
+ * 01-00-0C-CC-CC-CD 0x0802 Cisco Shared Spanning Tree Protocol Address
+ * 01-80-C2-00-00-00 0x0802 Spanning Tree Protocol IEEE 802.1D
+ * 01-80-C2-00-00-08 0x0802 Spanning Tree Protocol IEEE 802.1AD
+ * 01-80-C2-00-00-02 0x8809 Ethernet OAM Protocol IEEE 802.3ah
+ * 01-00-5E-xx-xx-xx 0x0800 IPv4 Multicast (RFC 1112)
+ */
+ mac_t mcast_mac_addr[] = {
+ MAC_ADDRESS (0x01, 0x00, 0x0C, 0xCC, 0xCC, 0xCC),
+ MAC_ADDRESS (0x01, 0x00, 0x0C, 0xCC, 0xCC, 0xCD),
+ MAC_ADDRESS (0x01, 0x80, 0xC2, 0x00, 0x00, 0x00),
+ MAC_ADDRESS (0x01, 0x80, 0xC2, 0x00, 0x00, 0x08),
+ MAC_ADDRESS (0x01, 0x80, 0xC2, 0x00, 0x00, 0x02),
+ MCAST_MAC_IGMP_GENERAL_QUERY,
+ };
+
+ uint i;
+ uint tag = 0;
+ for (i = 0; i < COUNT (mcast_mac_addr); i++)
+ {
+ mfs_t *mfs;
+ cl_test_prepare_buffer (&t, buffer, length, mcast_mac_addr[i],
+ tag);
+ cl_data_send (t.cl, buffer, length, tag, 0x0);
+ mfs = PARENT_OF_OR_NULL (mfs_t, tx, t.sar.mfs[0]);
+ test_fail_unless (mfs && mfs->common.bcast);
+ /* Release the MFS from:
+ * - the CL ("fast path") i.e. data_send_link,
+ * - the overridden SAR layer which contains a pointer to it,
+ * - the mac store which has initialised it.
+ */
+ t.cl->data_send_link.mfs = NULL;
+ t.sar.nb = 0;
+ t.sar.mfs[0] = NULL;
+ mac_store_mfs_remove (t.mac_store, mfs);
+ blk_release (mfs);
+ }
+ }
+ test_end;
+
+ cl_test_uninit (&t);
+}
+
+void
+cl_test_suite_send (test_t test)
+{
+ test_suite_begin (test, "CL send");
+ cl_test_case__cl_data_send_prepare (test);
+ cl_test_case__cl_data_send_mcast (test);
+}
diff --git a/cesar/cl/test/utest_eoc/src/test.c b/cesar/cl/test/utest_eoc/src/test.c
new file mode 100644
index 0000000000..57eb6ad58c
--- /dev/null
+++ b/cesar/cl/test/utest_eoc/src/test.c
@@ -0,0 +1,88 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2010 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cl/test/utest_eoc/src/test.c
+ * \brief CL environment test.
+ * \ingroup cl
+ */
+#include "common/std.h"
+#include "lib/bitstream.h"
+#include "cl/test/utest_eoc/test.h"
+#include "mac/common/ntb.h"
+#include "cl/inc/context.h"
+#include <string.h>
+
+void
+ipmbox_tx_data (ipmbox_t *ctx, u32 *first_msg, uint length)
+{
+ dbg_assert (ctx);
+ cl_test_recv_t *test_ctx = (cl_test_recv_t*) ctx;
+ test_ctx->buffer = (u8 *) first_msg[1];
+ test_ctx->length = ipmbox_msg_get_data_length (first_msg[0]);
+}
+
+static int
+cl_trace_buffer_dbg_dump_callback (void *user, const char *text,
+ uint text_size)
+{
+ return 0;
+}
+
+void
+cl_test_init (cl_test_t *ctx, u32 seed)
+{
+ dbg_assert (ctx);
+ ctx->mac_store = mac_store_init ();
+ mac_config_init (&ctx->mac_config);
+ mac_ntb_init (&ctx->mac_config);
+ ctx->mac_config.authenticated = true;
+ ctx->mac_config.tei = MAC_TEI_CCO_DEF;
+ ctx->mac_config.sta_mac_address = 0xfeffffd71300ull;
+ ctx->cl = cl_init (ctx->mac_store, (sar_t*) &ctx->sar, &ctx->mac_config,
+ (ipmbox_t *) &ctx->pwl_recv, (bufmgr_t*) &ctx->bufmgr);
+ lib_rnd_init (&ctx->rnd, seed);
+}
+
+void
+cl_test_uninit (cl_test_t *ctx)
+{
+ dbg_assert (ctx);
+ trace_bundle_dump_all ("dbg", cl_trace_buffer_dbg_dump_callback, NULL);
+ cl_uninit (ctx->cl);
+ mac_store_uninit (ctx->mac_store);
+}
+
+void
+cl_test_prepare_mactotei (cl_test_t *ctx, mac_t *dmacs, uint nb)
+{
+ uint i;
+ dbg_assert (ctx);
+ for (i = 0; i < nb; i++)
+ {
+ dbg_assert (!mac_is_multicast (dmacs[i]));
+ cl_eoc_mactotei_entry_insert (ctx->cl, dmacs[i], i + 100);
+ }
+}
+
+void
+cl_test_prepare_buffer (cl_test_t *ctx, u8 *buffer, u16 length, mac_t dmac,
+ uint tag)
+{
+ u8 data;
+ u16 i;
+ bitstream_t stream;
+ dbg_assert (ctx);
+ data = lib_rnd32 (&ctx->rnd) & 0xff;
+ bitstream_write_init (&stream, buffer, length);
+ bitstream_write_large (&stream, dmac, 48);
+ bitstream_write_large (&stream, ctx->mac_config.sta_mac_address, 48);
+ bitstream_write (&stream, tag, 16);
+ for (i = 0; i < length - 14; i++)
+ bitstream_write (&stream, data, 8);
+ bitstream_finalise (&stream);
+}
diff --git a/cesar/cl/test/utest_eoc/src/test_mactotei.c b/cesar/cl/test/utest_eoc/src/test_mactotei.c
new file mode 100644
index 0000000000..fbdcf67f13
--- /dev/null
+++ b/cesar/cl/test/utest_eoc/src/test_mactotei.c
@@ -0,0 +1,232 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2009 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cl/test/utest_eoc/src/test_mactotei.c
+ * \brief Unit test for EoC mactotei table in the CL module.
+ * \ingroup cl
+ *
+ * This suite tests functions used for creating, refreshing and finding entries
+ * of EoC mactotei table.
+ */
+#include "common/std.h"
+
+#include "lib/test.h"
+#include "lib/stats.h"
+#include "cl/inc/context.h"
+#include "cl/cl_eoc_mactotei.h"
+
+static cl_t cl;
+static mac_config_t mac_config;
+
+extern void cl_eoc_time_update (cl_t *ctx);
+extern cl_eoc_mactotei_entry_t *cl_eoc_mactotei_entry_find (cl_t *ctx,
+ mac_t mac_addr);
+extern void cl_eoc_mactotei_remove_obsolete (cl_t *ctx);
+
+void
+test_entries (test_t test)
+{
+ cl.mac_config = &mac_config;
+ list_node_t *list_node = NULL;
+ cl_eoc_mactotei_entry_t *entry;
+ uint i,tei;
+ bool ok;
+
+ lib_stats_init ();
+ test_case_begin (test, "MACtoTEI table");
+ test_begin (test, "Initialize")
+ {
+ cl_eoc_mactotei_init (&cl);
+ i = 0;
+ list_node = list_next (&cl.cl_eoc_mactotei_table.ageing_list.nil);
+ do
+ {
+ entry = PARENT_OF (cl_eoc_mactotei_entry_t, l_age, list_node);
+ test_fail_unless (entry->timestamp == i);
+ i++;
+ list_node = list_next (list_node);
+ } while (list_node != &cl.cl_eoc_mactotei_table.ageing_list.nil);
+ test_fail_unless (i == MACTOTEI_NB_ENTRIES);
+ }
+ test_end;
+
+ test_begin (test, "Fill table")
+ {
+ cl.mac_config->tei = 1;
+ ok = cl_eoc_mactotei_entry_insert (&cl, 0x0000112233445566ull, 4);
+ test_fail_if (!ok);
+ tei = cl_eoc_mactotei_find_tei (&cl, 0x0000112233445566ull);
+ test_fail_unless (tei == 4);
+ ok = cl_eoc_mactotei_entry_insert (&cl, 0x0000112233445577ull, 5);
+ test_fail_if (!ok);
+ ok = cl_eoc_mactotei_entry_insert (&cl, 0x0000112233445588ull, 10);
+ test_fail_if (!ok);
+ ok = cl_eoc_mactotei_entry_insert (&cl, 0x0000122233445513ull, 5);
+ test_fail_if (!ok);
+ ok = cl_eoc_mactotei_entry_insert (&cl, 0x0000112233445599ull, 21);
+ test_fail_if (!ok);
+ tei = cl_eoc_mactotei_find_tei (&cl, 0x0000112233445588ull);
+ test_fail_unless (tei == 10);
+ cl_eoc_mactotei_entry_remove (&cl, 5);
+ cl_eoc_mactotei_entry_remove (&cl, 21);
+ cl_eoc_mactotei_entry_remove (&cl, 35);
+ tei = cl_eoc_mactotei_find_tei (&cl, 0x0000112233445577ull);
+ test_fail_unless (tei == MAC_TEI_UNASSOCIATED);
+
+ u64 mac_addr = 0x0000112233445512ull;
+ for (i = 0; i < 5 * MACTOTEI_NB_ENTRIES; i++)
+ {
+ mac_addr -= 0x1000000;
+ ok = cl_eoc_mactotei_entry_insert (&cl, mac_addr,
+ i % MACTOTEI_NB_ENTRIES);
+ test_fail_if (!ok);
+ }
+ cl_eoc_mactotei_entry_remove (&cl, 12);
+ }
+ test_end;
+
+ test_begin (test, "Obsoleteness & refresh")
+ {
+ list_node = list_prev (&cl.cl_eoc_mactotei_table.ageing_list.nil);
+ entry = PARENT_OF (cl_eoc_mactotei_entry_t, l_age, list_node);
+
+ /* increment time to exceed max age duration */
+ for (i = 0; i < 1.1*(cl.cl_eoc_mactotei_table.max_duration); i++)
+ cl_eoc_time_update (&cl);
+
+ tei = cl_eoc_mactotei_find_tei (&cl, entry->mac_addr);
+ test_fail_if (tei != MAC_TEI_UNASSOCIATED);
+
+ ok = cl_eoc_mactotei_entry_insert (&cl, entry->mac_addr, 111);
+ tei = cl_eoc_mactotei_find_tei (&cl, entry->mac_addr);
+ test_fail_if (tei != 111);
+ ok = cl_eoc_mactotei_entry_insert (&cl, entry->mac_addr, 111);
+ test_fail_if (!ok);
+
+ for (i = 0; i < 1234; i++)
+ {
+ ok = cl_eoc_mactotei_entry_insert (&cl, entry->mac_addr, 111);
+ test_fail_if (!ok);
+ }
+ }
+ test_end;
+
+ test_begin (test, "Removal of obsolete entries")
+ {
+ cl.mac_config->tei = 3;
+ cl_eoc_mactotei_init (&cl);
+ cl_eoc_mactotei_entry_insert (&cl, 0x0000030001D713ull, 6);
+ cl_eoc_mactotei_entry_insert (&cl, 0x0000050001D713ull, 8);
+ for (i = 0; i < cl.cl_eoc_mactotei_table.max_duration; i++)
+ cl_eoc_time_update (&cl);
+ cl_eoc_mactotei_entry_insert (&cl, 0x0000060001D713ull, 9);
+ cl_eoc_mactotei_entry_insert (&cl, 0x0000070001D713ull, 10);
+
+ cl_eoc_mactotei_remove_obsolete (&cl);
+
+ /* cl_eoc_mactotei_find_tei() hides obsolete entries.
+ * So use cl_eoc_mactotei_entry_find() instead. */
+ entry = cl_eoc_mactotei_entry_find (&cl, 0x0000030001D713ull);
+ test_fail_if (entry != NULL);
+ entry = cl_eoc_mactotei_entry_find (&cl, 0x0000050001D713ull);
+ test_fail_if (entry != NULL);
+ entry = cl_eoc_mactotei_entry_find (&cl, 0x0000060001D713ull);
+ test_fail_if (entry == NULL || entry->tei != 9);
+ entry = cl_eoc_mactotei_entry_find (&cl, 0x0000070001D713ull);
+ test_fail_if (entry == NULL || entry->tei != 10);
+ }
+ test_end;
+
+ test_begin (test, "Limitation of entries")
+ {
+ cl.mac_config->tei = 5;
+ cl_eoc_mactotei_init (&cl);
+ u64 mac_addr = 0x0000112233445566ull;
+ for (i = 0; i < cl.cl_eoc_mactotei_table.max_entries; i++)
+ {
+ mac_addr += 0x123456789ull;
+ ok = cl_eoc_mactotei_entry_insert (&cl, mac_addr, 5);
+ test_fail_if (!ok);
+ }
+ /* no new addresses allowed from sta side, as source addresses */
+ ok = cl_eoc_mactotei_entry_insert (&cl, 0x0000132233445588ull, 5);
+ test_fail_if (ok);
+ /* new addresses allowed as destination addresses*/
+ ok = cl_eoc_mactotei_entry_insert (&cl, 0x0000132233445511ull, 1);
+ test_fail_unless (ok);
+ ok = cl_eoc_mactotei_entry_insert (&cl, 0x0000132233442511ull, 1);
+ test_fail_unless (ok);
+ test_fail_unless (cl.cl_eoc_mactotei_table.num_of_entries ==
+ cl.cl_eoc_mactotei_table.max_entries);
+
+ /* increment time to exceed max age duration */
+ for (i = 0; i < 1.1*(cl.cl_eoc_mactotei_table.max_duration); i++)
+ cl_eoc_time_update (&cl);
+ ok = cl_eoc_mactotei_entry_insert (&cl, 0x0000132233445588ull, 5);
+ test_fail_unless (ok);
+ test_fail_unless (cl.cl_eoc_mactotei_table.num_of_entries == 1);
+ }
+ test_end;
+
+ test_begin (test, "Bridge info")
+ {
+ uint nb_entry;
+ mac_t mac, mac_ref;
+ uint tei_ref;
+ cl_eoc_mactotei_init (&cl);
+ cl.mac_config->tei = 1;
+ ok = cl_eoc_mactotei_entry_insert (&cl, 0x0000112233445566ull, 4);
+ test_fail_if (!ok);
+ ok = cl_eoc_mactotei_entry_insert (&cl, 0x0000112233445577ull, 5);
+ test_fail_if (!ok);
+ for (i = 0; i < 0.9*(cl.cl_eoc_mactotei_table.max_duration); i++)
+ cl_eoc_time_update (&cl);
+ nb_entry = cl_eoc_mactotei_snapshot_create (&cl);
+ test_fail_unless (nb_entry == 2);
+ ok = cl_eoc_mactotei_entry_insert (&cl, 0x0000112233445512ull, 6);
+ test_fail_if (!ok);
+ nb_entry = cl_eoc_mactotei_snapshot_create (&cl);
+ test_fail_unless (nb_entry == 3);
+ for (i = 0; i < 0.3*(cl.cl_eoc_mactotei_table.max_duration); i++)
+ cl_eoc_time_update (&cl);
+ ok = cl_eoc_mactotei_entry_insert (&cl, 0x0000112233445513ull, 7);
+ test_fail_if (!ok);
+ ok = cl_eoc_mactotei_entry_insert (&cl, 0x0000112233445514ull, 8);
+ test_fail_if (!ok);
+ ok = cl_eoc_mactotei_entry_insert (&cl, 0x0000112233445515ull, 9);
+ test_fail_if (!ok);
+ nb_entry = cl_eoc_mactotei_snapshot_create (&cl);
+ test_fail_unless (nb_entry == 4);
+ mac_ref = 0x0000112233445515ull;
+ tei_ref = 9;
+ for (i = 0; i < nb_entry; i++)
+ {
+ mac = cl_eoc_mactotei_snapshot_get_mac (&cl, i);
+ test_fail_unless (mac == mac_ref - i);
+
+ uint tei = 0;
+ cl_eoc_mactotei_snapshot_get_mac_tei (&cl, i, &mac, &tei);
+ test_fail_if (mac != mac_ref - i);
+ test_fail_if (tei != tei_ref - i);
+ }
+ }
+ test_end;
+}
+
+int
+main (void)
+{
+ test_t test;
+ test_init (test, 0, NULL);
+
+ test_suite_begin (test, "Cl_EoC: MAC to Tei");
+ test_entries (test);
+
+ test_result (test);
+ return test_nb_failed (test) == 0 ? 0 : 1;
+}
diff --git a/cesar/cl/test/utest_eoc/test.h b/cesar/cl/test/utest_eoc/test.h
new file mode 100644
index 0000000000..6d4b94b78d
--- /dev/null
+++ b/cesar/cl/test/utest_eoc/test.h
@@ -0,0 +1,124 @@
+#ifndef cl_test_test_h
+#define cl_test_test_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2012 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cl/test/utest_eoc/test.h
+ * \brief CL environment test.
+ * \ingroup cl
+ */
+#include "cl/cl.h"
+#include "lib/rnd.h"
+
+#include "common/ipmbox/msg.h"
+#include "cl/mbx/mbx.h"
+
+#define TEST_BUFFER_MAX_NB 4
+
+struct sar_test_t
+{
+ /** buffer received. */
+ u8 *buffer[TEST_BUFFER_MAX_NB];
+ /** MFS used for TX. */
+ mfs_tx_t *mfs[TEST_BUFFER_MAX_NB];
+ /** Data length. */
+ uint length[TEST_BUFFER_MAX_NB];
+ /** User data. */
+ void *ud[MCAST_MEMBER_MAX_NB];
+ /** Number of calls. */
+ uint nb;
+};
+typedef struct sar_test_t sar_test_t;
+
+struct cl_test_recv_t
+{
+ /** Source TEI. */
+ uint stei;
+ /** Buffer. */
+ u8 *buffer;
+ /** length */
+ uint length;
+ /** NEK Encrypted ?*/
+ bool nek_enc;
+};
+typedef struct cl_test_recv_t cl_test_recv_t;
+
+struct hle_tools_test_t
+{
+ ipmbox_msg_mbx_t *msg;
+};
+typedef struct hle_tools_test_t hle_tools_test_t;
+
+struct cl_test_t
+{
+ /** CL context. */
+ cl_t *cl;
+ /** Mac config context. */
+ mac_config_t mac_config;
+ /** Mac store context. */
+ mac_store_t *mac_store;
+ /** Random context. */
+ lib_rnd_t rnd;
+ /** SAR test context. */
+ sar_test_t sar;
+ /** PWL receive MME or DATA. */
+ cl_test_recv_t pwl_recv;
+ /** Ipmbox context. */
+ void *ipmbox;
+ /** Buffer manager context. */
+ void *bufmgr;
+ /** Hle tools stubbed context. */
+ hle_tools_test_t *hle_tools;
+ /** Mbox context. */
+ cl_mbx_t *mbx;
+};
+typedef struct cl_test_t cl_test_t;
+
+BEGIN_DECLS
+
+/**
+ * Initialise test context.
+ * \param ctx the test context.
+ * \param seed the seed to initialise the random generator.
+ */
+void
+cl_test_init (cl_test_t *ctx, u32 seed);
+
+/**
+ * Uninitialise the CL context.
+ * \param ctx the test context.
+ */
+void
+cl_test_uninit (cl_test_t *ctx);
+
+/**
+ * Prepare the mac to tei table of the CL.
+ * \param ctx the CL context.
+ * \param dmacs destination mac tables.
+ * \param nb the number of entries.
+ *
+ * First entry corresponds to TEI 1 and so on.
+ */
+void
+cl_test_prepare_mactotei (cl_test_t *ctx, mac_t *dmacs, uint nb);
+
+/**
+ * Prepare a buffer to be sent by the Cl.
+ * \param ctx the test context.
+ * \param buffer the buffer to use.
+ * \param length the MF length.
+ * \param dmac the destination mac address.
+ * \param tag the linux priority tag for the classifier.
+ */
+void
+cl_test_prepare_buffer (cl_test_t *ctx, u8 *buffer, u16 length, mac_t dmac,
+ uint tag);
+
+END_DECLS
+
+#endif /* cl_test_test_h */
diff --git a/cesar/common/config-sets/eoc b/cesar/common/config-sets/eoc
new file mode 100644
index 0000000000..9330a57661
--- /dev/null
+++ b/cesar/common/config-sets/eoc
@@ -0,0 +1,29 @@
+CONFIG_ACLF_BP_CABLE_TCK = 2500000
+CONFIG_ATU_FACTOR = 3
+CONFIG_AV_ONLY_MODE = y
+CONFIG_BSU_BEACON_REGIONS_PRESENT = n
+CONFIG_BSU_SCHEDULE_PREPARE = y
+CONFIG_BSU_SKEW = y
+CONFIG_BSU_WAKEUP_DELAY_MS = 40
+CONFIG_BSU_WATCHDOG_REFRESH = y
+CONFIG_CL_AV = n
+CONFIG_CL_EOC_CLASSIFY = y
+CONFIG_CL_EOC_ROUTE = y
+CONFIG_COMMON_DEFS_TWICEVLAN = y
+CONFIG_CP_EOC_BEACON_SPC_CENTRAL = y
+CONFIG_CP_EOC_DBG_PRINT_LEVEL = 1
+CONFIG_CP_EOC_SCHEDULER = y
+CONFIG_CP_EOC = y
+CONFIG_CP_MSG_EOC_DRV_MME = y
+CONFIG_CP_STA_ACTION_MISC_EOC = y
+CONFIG_MAC_COMMON_EOC_MFS = y
+CONFIG_MAC_COMMON_EOC_SCHED = y
+CONFIG_MAC_COMMON_EOC_TEI = y
+CONFIG_MAC_COMMON_EOC_TONEMASK = y
+CONFIG_MAC_PBPROC_EOC_FC = y
+CONFIG_MAC_PBPROC_EOC_ILRAM = y
+CONFIG_SAR_MFS_RX_CREATE_LID = y
+CONFIG_SAR_MFS_TX_PERMANENT = y
+CONFIG_SAR_SLACK_LOW_ALLOW_MME = y
+CONFIG_SAR_USE_PB_SSN_ON_MFS_CREATE = y
+CONFIG_SAR_PB_STATS=y
diff --git a/cesar/common/config-sets/eoc-board b/cesar/common/config-sets/eoc-board
new file mode 100644
index 0000000000..7ff6b31521
--- /dev/null
+++ b/cesar/common/config-sets/eoc-board
@@ -0,0 +1,2 @@
+CONFIG_GPIO_LED_IS_CCO = y
+CONFIG_GPIO_LED_TRAFFIC = y
diff --git a/cesar/common/config-sets/eoc-master b/cesar/common/config-sets/eoc-master
new file mode 100644
index 0000000000..885f8d1bdf
--- /dev/null
+++ b/cesar/common/config-sets/eoc-master
@@ -0,0 +1,12 @@
+set eoc
+CONFIG_BEACON_SPOC_UPDATE_INTERVAL_DEFAULT_MS = 0
+CONFIG_BSU_SCHEDULER_PREPARE = y
+CONFIG_CL_MCAST = y
+CONFIG_CP_EOC_CCO_ACTION_WL_ALLOWED = y
+CONFIG_CP_EOC_IS_MASTER = y
+CONFIG_CP_EOC_MULTI_STA_FSM_DEF="cp/eoc/multi_sta_fsm/src/fsm/multi_sta.fsm"
+CONFIG_CP_EOC_MULTI_STA_WL_ALLOWED = y
+CONFIG_CP_FSM_DEF = "cp/eoc/fsm/src/fsm/cp_eoc_cco.fsm"
+CONFIG_CP_MSG_EOC_MULTI_STA_MME = y
+CONFIG_CP_STA_MGR_CCO_EOC = y
+CONFIG_SAR_DROP_OLD_SEG = y
diff --git a/cesar/common/config-sets/eoc-slave b/cesar/common/config-sets/eoc-slave
new file mode 100644
index 0000000000..0230e4d041
--- /dev/null
+++ b/cesar/common/config-sets/eoc-slave
@@ -0,0 +1,5 @@
+set eoc
+CONFIG_BEACON_SPOC_UPDATE_INTERVAL_DEFAULT_MS = 1000
+CONFIG_BSU_SKEW = y
+CONFIG_CP_EOC_STA_CON_ALLOWED = y
+CONFIG_CP_FSM_DEF = "cp/eoc/fsm/src/fsm/cp_eoc_sta.fsm"
diff --git a/cesar/common/defs/eoc.h b/cesar/common/defs/eoc.h
new file mode 100644
index 0000000000..f7edcb7c15
--- /dev/null
+++ b/cesar/common/defs/eoc.h
@@ -0,0 +1,19 @@
+#ifndef common_defs_eoc_h
+#define common_defs_eoc_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2012 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file common/defs/eoc.h
+ * \brief EoC Specific values based from HPAV.
+ * \ingroup common_defs
+ */
+
+/** Station presence timeout inside our AVLN. */
+#define EOC_STA_PRESENCE_TIMEOUT_INSIDE_AVLN_MS 60000
+
+#endif /* common_defs_eoc_h */
diff --git a/cesar/common/defs/homeplugAV.h b/cesar/common/defs/homeplugAV.h
index 545b38ebb8..91071782e6 100644
--- a/cesar/common/defs/homeplugAV.h
+++ b/cesar/common/defs/homeplugAV.h
@@ -72,7 +72,7 @@
#define HPAV_CRC32_MAGIC 0x2144df1c
/** Nek change. */
-#define HPAV_NEK_CHANGE_MS 3600000
+#define HPAV_NEK_CHANGE_MS 3600000 * 24
/** Access or in home value. */
enum hpav_access_t
diff --git a/cesar/common/defs/igmp.h b/cesar/common/defs/igmp.h
index c83d772d93..37c266aff6 100644
--- a/cesar/common/defs/igmp.h
+++ b/cesar/common/defs/igmp.h
@@ -23,6 +23,10 @@
/** Max number of sources. */
#define MCAST_SOURCE_MAX_NB 32
+/** IGMP general query MAC address */
+#define MCAST_MAC_IGMP_GENERAL_QUERY \
+ MAC_ADDRESS (0x01, 0x00, 0x5E, 0x00, 0x00, 0x01)
+
/** Keeps all data about all igmp groups. */
struct igmp_groups_t
{
diff --git a/cesar/cp/Config b/cesar/cp/Config
index 285d42d151..f6700c3e57 100644
--- a/cesar/cp/Config
+++ b/cesar/cp/Config
@@ -1,2 +1,4 @@
+CONFIG_CP_EOC_SCHEDULER = n
+CONFIG_CP_EOC_DBG_PRINT_LEVEL = 0
CONFIG_CP_AV = n
CONFIG_CP_EOC = n
diff --git a/cesar/cp/av/beacon/test/utest/Makefile b/cesar/cp/av/beacon/test/utest/Makefile
index fc60d27d61..fd0969f767 100644
--- a/cesar/cp/av/beacon/test/utest/Makefile
+++ b/cesar/cp/av/beacon/test/utest/Makefile
@@ -11,7 +11,7 @@ test_beacon_MODULES = bsu/beacon lib cp/av/beacon cp/av/sta/mgr mac/common \
cp/sta/core/stub mac/sar/stub cl/stub \
interface/stub bsu/stub cp/msg/stub mac/ca/stub \
hal/phy/spoc/stub
-test_beacon_CONFIG_MODULES = cp
+test_beacon_CONFIG_MODULES = cp bsu
test_discover_process_SOURCES = discover.c stubs.c
test_discover_process_MODULES = lib cp/av/beacon mac/common cp/av/sta/mgr \
@@ -20,7 +20,7 @@ test_discover_process_MODULES = lib cp/av/beacon mac/common cp/av/sta/mgr \
hal/timer/stub cp/sta/core/stub mac/sar/stub \
cl/stub cp/av/cco/bw interface/stub bsu/stub \
cp/msg/stub
-test_discover_process_CONFIG_MODULES = cp
+test_discover_process_CONFIG_MODULES = cp bsu
beacon_SOURCES = beacon.c stubs.c
beacon_MODULES = bsu/beacon lib cp/av/beacon cp/av/sta/mgr mac/common \
@@ -29,7 +29,7 @@ beacon_MODULES = bsu/beacon lib cp/av/beacon cp/av/sta/mgr mac/common \
cp/sta/core/stub mac/sar/stub cl/stub \
interface/stub bsu/stub cp/msg/stub hal/phy/spoc/stub \
mac/ca/stub
-beacon_CONFIG_MODULES = cp
+beacon_CONFIG_MODULES = cp bsu
mac_common_MODULE_SOURCES = config.c mfs.c store.c tonemap.c tonemask.c \
sta.c interval.c
diff --git a/cesar/cp/av/cco/action/test/utest2/Makefile b/cesar/cp/av/cco/action/test/utest2/Makefile
index 2b704c698f..1170eb4c8a 100644
--- a/cesar/cp/av/cco/action/test/utest2/Makefile
+++ b/cesar/cp/av/cco/action/test/utest2/Makefile
@@ -14,7 +14,7 @@ action_MODULES = lib cp/av/cco/action mac/common cp/av/sta/mgr \
cp/av/fsm/stub cp/av/beacon/stub cl/stub\
cp/secu cp/msg/stub bsu/stub cp/av/cco/region/stub \
cp/av/cco/bw/stub
-action_CONFIG_MODULES = cp
+action_CONFIG_MODULES = cp cl
garbage_SOURCES = garbage.c core_stub.c \
sar_stub.c pbproc_stub.c sta_action.c
@@ -22,7 +22,7 @@ garbage_MODULES = lib cp/av/cco/action mac/common cp/av/sta/mgr \
cp/av/cco/region/stub cp/av/cco/bw/stub cp/av/beacon/stub \
cp/av/beacon/stub cl/stub cp/secu cp/msg/stub bsu/stub \
cp/av/cco/region/stub cp/av/cco/bw/stub cp/av/fsm/stub
-garbage_CONFIG_MODULES = cp
+garbage_CONFIG_MODULES = cp cl
status_SOURCES = status.c pbproc_stub.c sar_stub.c sta_action.c
status_MODULES = lib cp/av/cco/action mac/common cp/av/sta/mgr \
@@ -30,7 +30,7 @@ status_MODULES = lib cp/av/cco/action mac/common cp/av/sta/mgr \
cp/av/fsm/stub cp/beacon/stub cp/sta/core/stub \
cp/msg/stub cl/stub mac/sar/stub cp/secu/stub \
cp/secu bsu/stub cp/cco/region/stub cp/cco/bw/stub
-status_CONFIG_MODULES = cp
+status_CONFIG_MODULES = cp cl
keys_SOURCES = action_gen_nek.c pbproc_stub.c sar_stub.c \
sta_action.c
@@ -39,7 +39,7 @@ keys_MODULES = lib cp/av/cco/action mac/common cp/av/sta/mgr \
cp/av/fsm/stub cp/beacon/stub cp/sta/core/stub \
cp/msg/stub cl/stub mac/sar/stub cl/stub \
bsu/stub cp/cco/region/stub cp/cco/bw/stub
-keys_CONFIG_MODULES = cp
+keys_CONFIG_MODULES = cp cl
fsm_handover_SOURCES= fsm_handover.c sta_action.c
fsm_handover_MODULES= lib cp/av/cco/action mac/common cp/secu cp/av/sta/mgr \
@@ -47,6 +47,6 @@ fsm_handover_MODULES= lib cp/av/cco/action mac/common cp/secu cp/av/sta/mgr \
cp/av/fsm/stub cp/beacon/stub cp/sta/core/stub \
cp/msg/stub cl/stub mac/sar/stub \
bsu/stub cp/cco/region/stub cp/cco/bw/stub
-fsm_handover_CONFIG_MODULES = cp
+fsm_handover_CONFIG_MODULES = cp cl
include $(BASE)/common/make/top.mk
diff --git a/cesar/cp/av/cl_interf/test/utest/Makefile b/cesar/cp/av/cl_interf/test/utest/Makefile
index 08cbffd467..86032b986d 100644
--- a/cesar/cp/av/cl_interf/test/utest/Makefile
+++ b/cesar/cp/av/cl_interf/test/utest/Makefile
@@ -10,6 +10,6 @@ test-cl-interf_MODULES = lib cp/cl_interf cp/av/sta/mgr mac/common \
cp/sta/core/stub mac/sar/stub cl/stub \
bsu/stub cp/msg/stub hle/tools hal/ipmbox/stub \
bufmgr/stub cp/sta/core/stub
-test-cl-interf_CONFIG_MODULES = cp
+test-cl-interf_CONFIG_MODULES = cp cl
include $(BASE)/common/make/top.mk
diff --git a/cesar/cp/av/fsm/test/utest/Makefile b/cesar/cp/av/fsm/test/utest/Makefile
index 904eb500fc..6fe86efa9d 100644
--- a/cesar/cp/av/fsm/test/utest/Makefile
+++ b/cesar/cp/av/fsm/test/utest/Makefile
@@ -5,7 +5,7 @@ INCLUDES = cp/av/fsm/test/utest cp/av/fsm/test/utest/override
HOST_PROGRAMS = test_fsm
test_fsm_SOURCES = test_fsm.c fsm_stub.c actions.c
test_fsm_MODULES = lib lib/scenario cp/av/fsm common/defs/mmtypes
-test_fsm_CONFIG_MODULES := cp
+test_fsm_CONFIG_MODULES := cp mac/common
cp_av_fsm_MODULE_SOURCES :=
cp_MODULE_MODULES =
diff --git a/cesar/cp/av/msg/test/utest/Makefile b/cesar/cp/av/msg/test/utest/Makefile
index b8042d653e..a9032bc734 100644
--- a/cesar/cp/av/msg/test/utest/Makefile
+++ b/cesar/cp/av/msg/test/utest/Makefile
@@ -14,65 +14,65 @@ test-msg-read-header_MODULES = lib cp/msg cp/secu mac/common cp/av/sta/mgr \
cp/av/fsm/stub cp/sta/core/stub \
cp/av/cco/action/stub mac/sar/stub cl/stub \
bsu/stub bufmgr/stub
-test-msg-read-header_CONFIG_MODULES = cp
+test-msg-read-header_CONFIG_MODULES = cp cl
test-msg-cc_SOURCES = msg_cc.c misc_stub.c
test-msg-cc_MODULES = lib cp/msg cp/secu mac/common cp/av/sta/mgr \
cp/sta/core/stub cp/av/cco/action/stub mac/sar/stub \
cl/stub bsu/stub bufmgr/stub cp/av/fsm/stub
-test-msg-cc_CONFIG_MODULES = cp
+test-msg-cc_CONFIG_MODULES = cp cl
test-msg-cm_SOURCES = msg_cm.c misc_stub.c
test-msg-cm_MODULES = lib cp/msg cp/secu mac/common cp/av/sta/mgr \
cp/av/fsm/stub \
cp/sta/core/stub cp/av/cco/action/stub mac/sar/stub \
cl/stub bsu/stub bufmgr/stub
-test-msg-cm_CONFIG_MODULES = cp
+test-msg-cm_CONFIG_MODULES = cp cl
test_frag_mme_SOURCES = mme_frag.c misc_stub.c
test_frag_mme_MODULES = lib cp/msg cp/secu mac/common cp/av/sta/mgr \
cp/av/fsm/stub cp/sta/core/stub \
cp/av/cco/action/stub \
mac/sar/stub cl/stub bsu/stub bufmgr/stub
-test_frag_mme_CONFIG_MODULES = cp
+test_frag_mme_CONFIG_MODULES = cp cl
test_drv_msg_SOURCES = msg_drv.c cp_cl_interface_stub.c misc_stub.c
test_drv_msg_MODULES = lib cp/msg cp/secu mac/common cp/av/fsm/stub \
cp/sta/core/stub cp/av/cco/action/stub mac/sar/stub \
cl/stub bsu/stub bufmgr/stub cp/av/sta/mgr
-test_drv_msg_CONFIG_MODULES = cp
+test_drv_msg_CONFIG_MODULES = cp cl
test_cc_discover_list_SOURCES = cc_discover_list.c misc_stub.c
test_cc_discover_list_MODULES = lib cp/msg cp/secu mac/common cp/av/sta/mgr \
cp/av/fsm/stub cp/sta/core/stub \
cp/av/cco/action/stub \
cl/stub bsu/stub mac/sar/stub bufmgr/stub
-test_cc_discover_list_CONFIG_MODULES = cp
+test_cc_discover_list_CONFIG_MODULES = cp cl
relay_SOURCES = relay.c misc_stub.c
relay_MODULES = lib cp/msg cp/secu mac/common cp/av/sta/mgr \
cp/av/fsm/stub cp/sta/core/stub cp/av/cco/action/stub \
cl/stub bsu/stub mac/sar/stub bufmgr/stub
-relay_CONFIG_MODULES = cp
+relay_CONFIG_MODULES = cp cl
test_vs_msg_SOURCES = msg_vs.c misc_stub.c \
mac_sar_interface_stub.c cp_cl_interface_vs_stub.c
test_vs_msg_MODULES = lib cp/msg cp/secu mac/common cp/av/sta/mgr \
cp/av/fsm/stub cp/sta/core/stub cp/av/cco/action/stub \
cl/stub bsu/stub mac/sar/stub bufmgr/stub
-test_va_msg_CONFIG_MODULES = cp
+test_va_msg_CONFIG_MODULES = cp cl
test_allowed_mme_SOURCES = test_msg_allowed_mme.c \
cp_cl_interface_stub.c misc_stub.c
test_allowed_mme_MODULES = lib cp/msg cp/sta/core/stub cp/av/sta/mgr \
cp/av/fsm/stub cp/secu mac/common mac/sar/stub \
cp/av/cco/action/stub cl/stub bsu/stub bufmgr/stub
-test_allowed_mme_CONFIG_MODULES = cp
+test_allowed_mme_CONFIG_MODULES = cp cl
msg_SOURCES = msg.c cp_cl_interface_stub.c misc_stub.c
msg_MODULES = lib cp/msg cp/av/sta/mgr cp/sta/core/stub cp/av/fsm/stub \
cp/secu mac/common mac/sar/stub cp/av/cco/action/stub cl/stub \
bsu/stub bufmgr/stub
-msg_CONFIG_MODULES = cp
+msg_CONFIG_MODULES = cp cl
include $(BASE)/common/make/top.mk
diff --git a/cesar/cp/av/msg/test/utest/src/test-msg-read-header.c b/cesar/cp/av/msg/test/utest/src/test-msg-read-header.c
index 0030854cf4..68ab142001 100644
--- a/cesar/cp/av/msg/test/utest/src/test-msg-read-header.c
+++ b/cesar/cp/av/msg/test/utest/src/test-msg-read-header.c
@@ -273,7 +273,7 @@ test_case_msg_allowed_mme_sta_unassociated_common (uint mmtype)
mme->mmtype = mmtype;
mme->length = 60;
bitstream_read_init (&mme->bitstream, mme->p_mme, mme->length);
- if (MMTYPE_IS_VS (mmtype))
+ if (MMTYPE_IS_VS (mmtype) || MMTYPE_IS_IMAC (mmtype))
bitstream_direct_write (buffer, 0, SPC_OUI, OUI_SIZE_BITS);
/* Launch the test. */
@@ -316,7 +316,7 @@ test_case_msg_allowed_mme_sta_associated_common (uint mmtype)
mme->length = 60;
mme->mmtype = mmtype;
bitstream_read_init (&mme->bitstream, mme->p_mme, mme->length);
- if (MMTYPE_IS_VS (mmtype))
+ if (MMTYPE_IS_VS (mmtype) || MMTYPE_IS_IMAC (mmtype))
bitstream_direct_write (buffer, 0, SPC_OUI, OUI_SIZE_BITS);
/* Launch the test. */
@@ -362,7 +362,7 @@ test_case_msg_allowed_mme_sta_auth_common (uint mmtype, bool enc)
mme->p_mme = buffer;
mme->length = 60;
bitstream_read_init (&mme->bitstream, mme->p_mme, mme->length);
- if (MMTYPE_IS_VS (mmtype))
+ if (MMTYPE_IS_VS (mmtype) || MMTYPE_IS_IMAC (mmtype))
bitstream_direct_write (buffer, 0, SPC_OUI, OUI_SIZE_BITS);
/* Launch the test. */
@@ -392,7 +392,7 @@ test_case_msg_allowed_mme_from_h1 (uint mmtype)
mme->mmtype = mmtype;
mme->length = 60;
bitstream_read_init (&mme->bitstream, mme->p_mme, mme->length);
- if (MMTYPE_IS_VS (mmtype))
+ if (MMTYPE_IS_VS (mmtype) || MMTYPE_IS_IMAC (mmtype))
bitstream_direct_write (buffer, 0, SPC_OUI, OUI_SIZE_BITS);
/* Launch the test. */
diff --git a/cesar/cp/av/sta/action/test/utest/src/assoc.c b/cesar/cp/av/sta/action/test/utest/src/assoc.c
index cf48859c6a..e380dbb221 100644
--- a/cesar/cp/av/sta/action/test/utest/src/assoc.c
+++ b/cesar/cp/av/sta/action/test/utest/src/assoc.c
@@ -694,36 +694,6 @@ assoc_basic_test_cases (test_t t)
SCENARIO_AVLN_OK
SCENARIO_AVLN_OK
SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
SCENARIO_ACTION (assoc__authenticated__beacon, .beacon = beacon,
.net = cco_net, .sta = cco),
SCENARIO_ACTION (assoc__authenticated__beacon, .beacon = beacon,
@@ -755,46 +725,6 @@ assoc_basic_test_cases (test_t t)
SCENARIO_AVLN_OK
SCENARIO_ACTION (assoc__authenticated__beacon, .beacon = beacon,
.net = net_same_nid, .sta = cco_net_same_nid),
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
- SCENARIO_AVLN_OK
SCENARIO_AVLN_KO
SCENARIO_END
};
diff --git a/cesar/cp/beacon/src/beacon.c b/cesar/cp/beacon/src/beacon.c
index 65dddc6afc..290810b597 100644
--- a/cesar/cp/beacon/src/beacon.c
+++ b/cesar/cp/beacon/src/beacon.c
@@ -40,6 +40,11 @@
/* Config headers. */
#include "config/beacon.h"
+#if (CONFIG_CP_EOC)
+#include "cp/eoc/cco/bw/bw.h"
+#include "config/cp/eoc/beacon.h"
+#endif
+
/** Default interval between SPOC updates. */
#define CP_BEACON_SPOC_UPDATE_INTERVAL_DEFAULT_MS \
CONFIG_BEACON_SPOC_UPDATE_INTERVAL_DEFAULT_MS
@@ -64,6 +69,10 @@ cp_beacon_timer_expires (cp_t *ctx)
/* Post an event in the FSM beacon timer expires. */
cp_fsm_post_urgent_new_event (ctx, bare, BEACON_TIMER_EXPIRES);
+#if (CONFIG_CP_EOC)
+ if (cp_sta_own_data_get_cco_status (ctx))
+ cp_beacon_cco_update_beacon_data (ctx);
+#endif
}
void
@@ -120,9 +129,13 @@ cp_beacon_fill (cp_t *ctx, bsu_beacon_t *beacon)
beacon->vf.hoip = ctx->beacon.hoip.hoip_flag;
beacon->vf.rtsbf = false;
beacon->vf.nm =
+#if CONFIG_CP_EOC
+ (CONFIG_CP_EOC_BEACON_SPC_CENTRAL) ? MAC_NM_COORDINATED :
+#endif
net == NULL ? MAC_NM_CSMA_ONLY : cp_net_get_nm (ctx, net);
beacon->vf.ccocap = CP_CCO_LEVEL;
+#if !(CONFIG_CP_EOC && CONFIG_CP_EOC_BEACON_SPC_CENTRAL)
/* regions. */
cp_cco_region_alloc_t *region;
@@ -137,6 +150,9 @@ cp_beacon_fill (cp_t *ctx, bsu_beacon_t *beacon)
beacon->bmis.region.region[nb].rt = region->type;
beacon->bmis.region.region[nb].end_time_atu = region->end_time_atu;
}
+#else
+ nb = 0;
+#endif
beacon->bmis.region.nb = nb;
/* Store the persistent schedules. */
@@ -576,6 +592,10 @@ cp_beacon_process_bmi_eks (cp_t *ctx, const bsu_beacon_t *beacon)
|| (ctx->mac_config->nek_mgr.next_nek->eks
!= beacon->bmis.eks.new_eks))
{
+ /* We don't have the new NEK. */
+#if CONFIG_CP_EOC && CONFIG_CP_EOC_BEACON_SPC_CENTRAL
+ cp_fsm_post_new_event (ctx, bare, to_leave);
+#else
/* We don't have the new NEK. We need to ask for it.
* But we don't want to ask many times. After all, this already
* is a fall-back mechanism in case we missed the CM_SET_KEY_REQ
@@ -587,6 +607,7 @@ cp_beacon_process_bmi_eks (cp_t *ctx, const bsu_beacon_t *beacon)
* NEK. */
if (ctx->beacon.eks.kccd == 0)
cp_fsm_post_new_event (ctx, bare, nek_request);
+#endif
}
}
diff --git a/cesar/cp/cco/action/inc/cco_action.h b/cesar/cp/cco/action/inc/cco_action.h
index a4a54d236a..58a781dd6a 100644
--- a/cesar/cp/cco/action/inc/cco_action.h
+++ b/cesar/cp/cco/action/inc/cco_action.h
@@ -37,6 +37,8 @@ struct cp_cco_action_t
cp_sta_core_timed_event_def_t nek_change;
/** EKS timeout. */
cp_sta_core_timed_event_def_t eks_timer;
+ /** Timer to remove unauthorized slaves */
+ cp_sta_core_timed_event_def_t leave_timer;
/** The new NEK. */
struct
{
@@ -49,9 +51,18 @@ struct cp_cco_action_t
cp_mme_peer_t eks_sta_current_peer;
/** EKS protocol run. */
cp_secu_protocol_run_t eks_prun;
-
+ /** EKS-EoC - number of retries in key change */
+ uint eks_eoc_retry;
+ /** CCo accept each station */
+ uint wl_accept_all;
+ /** Default output power for golden master*/
+ uint gm_default_output_power;
+ /** EoC last output date in ticks */
+ u32 last_date;
/** heap for the CCo selection process. */
heap_t selection_heap;
+ /** White list is received completely */
+ bool wl_complete;
/** period of nek changes in milliseconds. */
uint nek_change_period_ms;
/** TEI lease value for associated stations (in minutes). */
diff --git a/cesar/cp/cco/action/test/utest/override/mac/sar/inc/context.h b/cesar/cp/cco/action/test/utest/override/mac/sar/inc/context.h
index 46d6876df2..ab2a656f3d 100644
--- a/cesar/cp/cco/action/test/utest/override/mac/sar/inc/context.h
+++ b/cesar/cp/cco/action/test/utest/override/mac/sar/inc/context.h
@@ -1,5 +1,5 @@
-#ifndef override_mac_sar_inc_sar_context_h
-#define override_mac_sar_inc_sar_context_h
+#ifndef override_mac_sar_inc_context_h
+#define override_mac_sar_inc_context_h
/* Cesar project {{{
*
* Copyright (C) 2009 Spidcom
@@ -8,7 +8,7 @@
*
* }}} */
/**
- * \file override/mac/sar/inc/sar_context.h
+ * \file override/mac/sar/inc/context.h
* \brief « brief description »
* \ingroup « module »
*
@@ -20,4 +20,4 @@ struct sar_t
mac_store_t *mac_store;
};
-#endif /* override_mac_sar_inc_sar_context_h */
+#endif /* override_mac_sar_inc_context_h */
diff --git a/cesar/cp/cco/bw/stub/src/bw.c b/cesar/cp/cco/bw/stub/src/bw.c
index ab5d16bb01..61b030e8ec 100644
--- a/cesar/cp/cco/bw/stub/src/bw.c
+++ b/cesar/cp/cco/bw/stub/src/bw.c
@@ -14,6 +14,7 @@
#include "common/std.h"
#include "lib/set.h"
#include "cp/cco/bw/bw.h"
+#include "cp/eoc/cco/bw/service.h"
bool
cp_cco_bw_alloc_less (
@@ -136,3 +137,34 @@ cp_cco_bw_alloc_clean (cp_t *ctx, set_t *set){}
void
cp_cco_bw_allocation_list_swap (cp_t *ctx, set_t *set){}
+
+cp_eoc_cco_bw_service_t *
+cp_eoc_cco_bw_service_find (
+ cp_t *ctx, uint service_index) __attribute__ ((weak));
+
+cp_eoc_cco_bw_service_t *
+cp_eoc_cco_bw_service_find (cp_t *ctx, uint service_index)
+{ return INVALID_PTR; }
+
+cp_eoc_cco_bw_service_t *
+cp_eoc_cco_bw_service_alloc (cp_t *ctx) __attribute__((weak));
+
+cp_eoc_cco_bw_service_t *
+cp_eoc_cco_bw_service_alloc (cp_t *ctx)
+{ return INVALID_PTR; }
+
+void
+cp_eoc_cco_bw_service_add (
+ cp_t *ctx, cp_eoc_cco_bw_service_t *srv) __attribute__((weak));
+
+void
+cp_eoc_cco_bw_service_add (cp_t *ctx, cp_eoc_cco_bw_service_t *srv)
+{ }
+
+bool
+cp_eoc_cco_bw_service_remove (
+ cp_t *ctx, uint service_index) __attribute__((weak));
+
+bool
+cp_eoc_cco_bw_service_remove (cp_t *ctx, uint service_index)
+{ return true; }
diff --git a/cesar/cp/cco/bw/test/Makefile b/cesar/cp/cco/bw/test/Makefile
index 258b0961e9..6638f1534f 100644
--- a/cesar/cp/cco/bw/test/Makefile
+++ b/cesar/cp/cco/bw/test/Makefile
@@ -5,5 +5,6 @@ INCLUDES=cp/cco/bw/test/override
HOST_PROGRAMS = bw
bw_SOURCES = bw.c
bw_MODULES = lib cp/cco/bw
+bw_CONFIG_MODULES = mac/common
include $(BASE)/common/make/top.mk
diff --git a/cesar/cp/cco/region/test/Makefile b/cesar/cp/cco/region/test/Makefile
index 5e6e88a54a..f58f346342 100644
--- a/cesar/cp/cco/region/test/Makefile
+++ b/cesar/cp/cco/region/test/Makefile
@@ -5,5 +5,6 @@ INCLUDES=cp/cco/region/test/override
HOST_PROGRAMS = region
region_SOURCES = region.c
region_MODULES = lib cp/cco/region
+region_CONFIG_MODULES = mac/common
include $(BASE)/common/make/top.mk
diff --git a/cesar/cp/cl_interf/src/cl_interf.c b/cesar/cp/cl_interf/src/cl_interf.c
index 78e1a53028..82961aca58 100644
--- a/cesar/cp/cl_interf/src/cl_interf.c
+++ b/cesar/cp/cl_interf/src/cl_interf.c
@@ -13,6 +13,7 @@
*/
#include "common/std.h"
#include "common/defs/ethernet.h"
+#include "common/defs/eoc.h"
#include "lib/blk.h"
@@ -103,8 +104,16 @@ cp_cl_interf_process_mme_update_sta_expiration_ms (cp_t *ctx, mac_t mac)
if (cp_sta_own_data_get_cco_status (ctx)
&& cp_sta_get_net (sta) == cp_sta_mgr_get_our_avln (ctx))
{
- sta->expired_date_ms = cp_sta_core_get_date_ms (ctx)
- + HPAV_STA_PRESENCE_TIMEOUT_INSIDE_AVLN_MS;
+ if (CONFIG_CP_AV)
+ {
+ sta->expired_date_ms = cp_sta_core_get_date_ms (ctx)
+ + HPAV_STA_PRESENCE_TIMEOUT_INSIDE_AVLN_MS;
+ }
+ else if (CONFIG_CP_EOC)
+ {
+ sta->expired_date_ms = cp_sta_core_get_date_ms (ctx)
+ + EOC_STA_PRESENCE_TIMEOUT_INSIDE_AVLN_MS;
+ }
}
else
sta->expired_date_ms = cp_sta_core_get_date_ms (ctx)
@@ -184,7 +193,7 @@ cp_cl_interf_process_mme (cp_t *ctx)
* we can drop it.
*
* http://standards.ieee.org/develop/regauth/oui/oui.txt */
- if (mme->mmtype < VS_MIN)
+ if (mme->mmtype < VS_MIN && msg->tei != MAC_TEI_FOREIGN)
{
cp_sta_t *sta;
cp_net_t *net;
diff --git a/cesar/cp/defs.h b/cesar/cp/defs.h
index 3f02b7c123..efb792a20d 100644
--- a/cesar/cp/defs.h
+++ b/cesar/cp/defs.h
@@ -107,7 +107,7 @@
#define CP_DISCOVER_PERIOD_MAX_MS (CP_DISCOVER_PERIOD_MAX_S * 1000)
/** Maximum number of beacon loss because an AVLN failure. */
-#define CP_MAX_NO_BEACON 50
+#define CP_MAX_NO_BEACON 10
/** Max schedules beacon periods. */
#define CP_SCHED_BEACON_PERIODS_MAX 4
@@ -149,8 +149,11 @@
#define CP_HOMEPLUG_AV101 0
/** Timer offset for beacon data update. */
-#define CP_TIMER_OFFSET_CCO MAC_MS_TO_TCK(20)
-#define CP_TIMER_OFFSET_STA MAC_MS_TO_TCK(12)
+#define CP_TIMER_OFFSET_CCO MAC_MS_TO_TCK(70)
+#define CP_TIMER_OFFSET_STA MAC_MS_TO_TCK(70)
+
+#define MAX_THROUGHPUT_MBPS 140
+#define DEFAULT_STREAM_QUALITY 226
/** Attenuation offset for SPC300 */
#define CP_AGC_SPC300_ATTENUATION_OFFSET 14
@@ -158,4 +161,21 @@
/** Attenuation offset for AV boards. */
#define CP_AV_AGC_GAIN_OFFSET 6
+/** Max output level */
+#define CP_AGC_SOFT_LEVEL 121
+
+/**
+ * Compute the agc offset to apply
+ * \param output_level the station output level
+ * \return the agc offset value
+ */
+extern inline s8
+cp_agc_offset (u8 output_level)
+{
+ s8 agc_offset = 0;
+ if (output_level <= CP_AGC_SOFT_LEVEL)
+ agc_offset = ((s8) -1.5) - (CP_AGC_SOFT_LEVEL - output_level);
+ return agc_offset;
+}
+
#endif /* cp_defs_h */
diff --git a/cesar/cp/eoc/Config b/cesar/cp/eoc/Config
new file mode 100644
index 0000000000..156b2821de
--- /dev/null
+++ b/cesar/cp/eoc/Config
@@ -0,0 +1 @@
+CONFIG_CP_EOC_IS_MASTER = n
diff --git a/cesar/cp/eoc/Module b/cesar/cp/eoc/Module
new file mode 100644
index 0000000000..d77f657683
--- /dev/null
+++ b/cesar/cp/eoc/Module
@@ -0,0 +1,15 @@
+ifeq ($(CONFIG_TRACE),y)
+SOURCES += trace.c
+endif
+
+MODULES := cp cp/cco/region
+
+MODULES += cp/eoc/msg
+MODULES += cp/eoc/beacon
+MODULES += cp/eoc/cco/bw cp/eoc/cco/action
+MODULES += cp/eoc/sta/action cp/eoc/sta/mgr
+MODULES += cp/eoc/fsm
+
+ifeq ($(CONFIG_CP_EOC_IS_MASTER),y)
+ MODULES += cp/eoc/multi_sta/action cp/eoc/multi_sta_fsm
+endif
diff --git a/cesar/cp/eoc/beacon/Config b/cesar/cp/eoc/beacon/Config
new file mode 100644
index 0000000000..9693eade91
--- /dev/null
+++ b/cesar/cp/eoc/beacon/Config
@@ -0,0 +1 @@
+CONFIG_CP_EOC_BEACON_SPC_CENTRAL = n
diff --git a/cesar/cp/eoc/beacon/Module b/cesar/cp/eoc/beacon/Module
new file mode 100644
index 0000000000..603a4038c8
--- /dev/null
+++ b/cesar/cp/eoc/beacon/Module
@@ -0,0 +1,3 @@
+SOURCES:= beacon.c
+
+MODULES += cp/beacon
diff --git a/cesar/cp/eoc/beacon/beacon.h b/cesar/cp/eoc/beacon/beacon.h
new file mode 100644
index 0000000000..650ad11c6b
--- /dev/null
+++ b/cesar/cp/eoc/beacon/beacon.h
@@ -0,0 +1,18 @@
+#ifndef _cesar_cp_eoc_beacon_beacon_h
+#define _cesar_cp_eoc_beacon_beacon_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2011 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cesar/cp/eoc/beacon/beacon.h
+ * \brief Special EoC beacon functions.
+ * \ingroup cesar_cp_eoc_beacon
+ */
+#include "cp/cp.h"
+#include "cp/beacon/beacon.h"
+
+#endif /* _cesar_cp_eoc_beacon_beacon_h */
diff --git a/cesar/cp/eoc/beacon/inc/beacon.h b/cesar/cp/eoc/beacon/inc/beacon.h
new file mode 100644
index 0000000000..38ecdca26a
--- /dev/null
+++ b/cesar/cp/eoc/beacon/inc/beacon.h
@@ -0,0 +1,24 @@
+#ifndef cesar_cp_eoc_beacon_inc_beacon_h
+#define cesar_cp_eoc_beacon_inc_beacon_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2012 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cesar/cp/eoc/beacon/inc/beacon.h
+ * \brief « brief description »
+ * \ingroup cesar_cp_eoc_beacon
+ *
+ * « long description »
+ */
+
+#include "cp/beacon/inc/beacon.h"
+
+/*
+ * cp_eoc_beacon_fill_discovery_bentries declared in VARIANT.
+ */
+
+#endif /* cesar_cp_eoc_beacon_inc_beacon_h */
diff --git a/cesar/cp/eoc/beacon/src/beacon.c b/cesar/cp/eoc/beacon/src/beacon.c
new file mode 100644
index 0000000000..d4bae1dab1
--- /dev/null
+++ b/cesar/cp/eoc/beacon/src/beacon.c
@@ -0,0 +1,32 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2012 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/beacon/src/beacon.c
+ * \brief EoC Dedicated functions
+ * \ingroup cp_eoc_beacon
+ *
+ * Behavior of the CP beacon for the EoC project.
+ */
+#include "common/std.h"
+
+/* Private headers. */
+#include "cp/eoc/beacon/inc/beacon.h"
+
+/* Public headers. */
+#include "cp/eoc/beacon/beacon.h"
+#include "bsu/bsu.h"
+
+void
+cp_eoc_beacon_fill_discovery_bentries (cp_t *ctx, bsu_beacon_t *beacon)
+{
+ dbg_assert (beacon);
+
+ beacon->bmis.discover.present = false;
+
+ cp_beacon_fill_discover_info (ctx, &beacon->bmis.discover_info);
+}
diff --git a/cesar/cp/eoc/beacon/stub/Module b/cesar/cp/eoc/beacon/stub/Module
new file mode 100644
index 0000000000..c03a2df875
--- /dev/null
+++ b/cesar/cp/eoc/beacon/stub/Module
@@ -0,0 +1,3 @@
+SOURCES:= beacon.c
+
+MODULES += cp/beacon/stub
diff --git a/cesar/cp/eoc/beacon/stub/src/beacon.c b/cesar/cp/eoc/beacon/stub/src/beacon.c
new file mode 100644
index 0000000000..330c8f1cc1
--- /dev/null
+++ b/cesar/cp/eoc/beacon/stub/src/beacon.c
@@ -0,0 +1,22 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2012 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/beacon/stub/src/beacon.c
+ * \brief EoC beacon Stub functions
+ * \ingroup cp_eoc_beacon_stub
+ *
+ */
+#include "common/std.h"
+#include "cp/cp.h"
+#include "bsu/beacon/beacon.h"
+
+void
+cp_eoc_beacon_fill_discovery_bentries (cp_t *ctx, bsu_beacon_t *beacon)
+ __attribute__ ((weak));
+void
+cp_eoc_beacon_fill_discovery_bentries (cp_t *ctx, bsu_beacon_t *beacon) {}
diff --git a/cesar/cp/eoc/beacon/test/utest2/Config b/cesar/cp/eoc/beacon/test/utest2/Config
new file mode 100644
index 0000000000..c31de04e0a
--- /dev/null
+++ b/cesar/cp/eoc/beacon/test/utest2/Config
@@ -0,0 +1,8 @@
+CONFIG_CP_EOC = y
+CONFIG_ATU_FACTOR = 3
+CONFIG_CP_EOC_SCHEDULER = y
+CONFIG_MAC_COMMON_EOC_SCHED = y
+CONFIG_MAC_PBPROC_EOC_FC = y
+CONFIG_STATS = n
+CONFIG_CP_EOC_BEACON_SPC_CENTRAL = y
+CONFIG_CP_FSM_DEF = "cp/eoc/fsm/src/fsm/cp_eoc_cco.fsm"
diff --git a/cesar/cp/eoc/beacon/test/utest2/Makefile b/cesar/cp/eoc/beacon/test/utest2/Makefile
new file mode 100644
index 0000000000..3a2f6e8e73
--- /dev/null
+++ b/cesar/cp/eoc/beacon/test/utest2/Makefile
@@ -0,0 +1,20 @@
+BASE = ../../../../..
+
+INCLUDES = cp/eoc/beacon/test/utest2/override cp/eoc/beacon/test/utest2
+
+HOST_PROGRAMS = beacon_scenario
+
+beacon_scenario_SOURCES = beacon_scenario.c scenario_actions.c \
+ bsu_stub_scenario.c bsu_beacon_stub.c fsm_stub.c \
+ pbproc_stub.c phy_stub.c secu_stub.c sta_mgr_stub.c
+
+beacon_scenario_MODULES = cp/eoc/beacon cp/cco/region/stub \
+ cp/eoc/cco/bw/stub cp/eoc/cco/action/stub \
+ lib lib/scenario cp/eoc/fsm/stub interface/stub \
+ bsu/stub cp/msg/stub cp/sta/core/stub \
+ hal/timer/stub mac/sar/stub cl/stub \
+ mac/common bsu/stub
+
+beacon_scenario_CONFIG_MODULES = cp/eoc
+
+include $(BASE)/common/make/top.mk
diff --git a/cesar/cp/eoc/beacon/test/utest2/inc/scenario_defs.h b/cesar/cp/eoc/beacon/test/utest2/inc/scenario_defs.h
new file mode 100644
index 0000000000..9d4711305e
--- /dev/null
+++ b/cesar/cp/eoc/beacon/test/utest2/inc/scenario_defs.h
@@ -0,0 +1,63 @@
+#ifndef inc_scenario_defs_h
+#define inc_scenario_defs_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file inc/scenario_defs.h
+ * \brief Scenario definitions.
+ * \ingroup test
+ */
+
+#include "cp/fsm/fsm.h"
+
+/* Scenario globals. */
+#define SCENARIO_DEFS_GLOBALS \
+ cp_t *cp;
+
+#define SCENARIO_DEFS_ACTIONS \
+ nek_request, \
+ to_leave, \
+ get_and_process_beacon
+
+/* Actions without parameter. */
+#define __0(action) \
+typedef scenario_empty_t scenario_action_ ## action ## _t; \
+void \
+scenario_action_ ## action ## _cb ( \
+ scenario_globals_t *globals, scenario_params_t *params);
+
+__0 (nek_request)
+__0 (to_leave)
+__0 (get_and_process_beacon)
+
+#undef __0
+
+/* Scenario events. */
+/* Scenario events. */
+#define SCENARIO_DEFS_EVENTS \
+ cp_fsm_event_beacon_new, \
+ cp_fsm_event_bare_new
+
+/* Any event. */
+#define __p_(param) param;
+
+#define __e(event, param...) \
+typedef struct \
+{ \
+ PREPROC_FOR_EACH (__p_, ## param) \
+} scenario_event_ ## event ## _t;
+
+__e (cp_fsm_event_bare_new, cp_fsm_event_type_t type)
+__e (cp_fsm_event_beacon_new, cp_fsm_event_type_t type,
+ bsu_beacon_t *beacon, cp_net_t *net,
+ cp_sta_t *sta)
+
+#undef __p_
+#undef __e
+
+#endif /* inc_scenario_defs_h */
diff --git a/cesar/cp/eoc/beacon/test/utest2/override/cp/inc/context.h b/cesar/cp/eoc/beacon/test/utest2/override/cp/inc/context.h
new file mode 100644
index 0000000000..14f89bbc41
--- /dev/null
+++ b/cesar/cp/eoc/beacon/test/utest2/override/cp/inc/context.h
@@ -0,0 +1,56 @@
+#ifndef overide_cp_inc_context_h
+#define overide_cp_inc_context_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file overide/cp/inc/context.h
+ * \brief « brief description »
+ * \ingroup « module »
+ *
+ * « long description »
+ */
+#include "cp/cco/region/region.h"
+#include "cp/cco/region/inc/context.h"
+#include "cp/cco/bw/bw.h"
+#include "cp/cco/bw/inc/context.h"
+#include "interface/interface.h"
+#include "cp/sta/mgr/sta_mgr.h"
+#include "cp/sta/mgr/inc/sta_mgr.h"
+
+#include "cp/types.h"
+#include "cp/cco/action/inc/cco_action.h"
+#include "cp/sta/action/inc/context.h"
+#include "cp/eoc/beacon/beacon.h"
+#include "cp/eoc/beacon/inc/beacon.h"
+#include "cl/cl.h"
+#include "mac/common/config.h"
+#include "mac/common/store.h"
+#include "mac/sar/sar.h"
+#include "mac/pbproc/pbproc.h"
+#include "lib/rnd.h"
+#include "lib/trace.h"
+
+
+struct cp_t
+{
+ cp_beacon_t beacon;
+ mac_store_t *mac_store;
+ cp_cco_bw_t bw;
+ cp_cco_region_t region;
+ cp_sta_mgr_t sta_mgr;
+
+ hal_timer_t *hal_timer;
+ interface_t *interface;
+
+ mac_config_t *mac_config;
+ bsu_aclf_t *bsu_aclf;
+ pbproc_t *pbproc;
+ void *bsu;
+};
+
+#endif /* overide_cp_inc_context_h */
diff --git a/cesar/cp/eoc/beacon/test/utest2/override/cp/sta/core/defs.h b/cesar/cp/eoc/beacon/test/utest2/override/cp/sta/core/defs.h
new file mode 100644
index 0000000000..9698b44e93
--- /dev/null
+++ b/cesar/cp/eoc/beacon/test/utest2/override/cp/sta/core/defs.h
@@ -0,0 +1,57 @@
+#ifndef cp_sta_core_defs_h
+#define cp_sta_core_defs_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/sta/core/defs.h
+ * \brief Sta core defs.
+ * \ingroup cp/sta/core
+ *
+ */
+#include "cp/fsm/forward.h"
+
+/** Forward declaration. */
+typedef struct cp_sta_core_t cp_sta_core_t;
+
+/*
+ * the sta core event flags
+ * these are some flags, so take care to give a value with all bits set to 0 but one.
+ */
+enum cp_sta_core_event_flag_t
+{
+ CP_STA_CORE_EVENT_FLAG_RECV_BEACON = 0x1,
+ CP_STA_CORE_EVENT_FLAG_RECV_MME = 0x2,
+ CP_STA_CORE_EVENT_FLAG_FSM = 0x4,
+ CP_STA_CORE_EVENT_FLAG_GARBAGE = 0x8,
+ CP_STA_CORE_EVENT_FLAG_TERMINATE = 0x10
+};
+typedef enum cp_sta_core_event_flag_t cp_sta_core_event_flag_t;
+
+/** Definition of alarm info structure
+ * (applications should not use it directly but use "alias" defined just below) */
+struct cp_sta_core_timed_event_def_t
+{
+ /* eCos alarm. */
+ uint alarm;
+ /* eCos alarm handle. */
+ uint alarm_handle;
+ /* the sta core event flag to set
+ * (auto or user-specified when creating/launching timer alarm). */
+ cp_sta_core_event_flag_t event_flag;
+ /* FSM event specified when creating/launching timer alarm
+ * (set if the previous flag is CP_STA_CORE_EVENT_FLAG_FSM). */
+ cp_fsm_event_t *fsm_event;
+ /* flag indicating a periodic alarm (if set to true)
+ * or one-shot alarm (if set to false). */
+ bool cyclic_alarm;
+ /* pointer to CP context. */
+ cp_t *cp_ctx;
+};
+typedef struct cp_sta_core_timed_event_def_t cp_sta_core_timed_event_def_t;
+
+#endif /* cp_sta_core_defs_h */
diff --git a/cesar/cp/eoc/beacon/test/utest2/override/cyg/kernel/kapi.h b/cesar/cp/eoc/beacon/test/utest2/override/cyg/kernel/kapi.h
new file mode 100644
index 0000000000..019e5d3a07
--- /dev/null
+++ b/cesar/cp/eoc/beacon/test/utest2/override/cyg/kernel/kapi.h
@@ -0,0 +1,37 @@
+#ifndef override_cyg_kernel_kapi_h
+#define override_cyg_kernel_kapi_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2010 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file override/cyg/kernel/kapi.h
+ * \brief override some kernel api from <cyg/kernel/kapi.h>.
+ * \ingroup cp_msg
+ *
+ *
+ */
+
+struct cyg_resolution_t
+{
+ u32 dividend;
+ u32 divisor;
+} ;
+
+typedef struct cyg_resolution_t cyg_resolution_t;
+
+typedef u64 cyg_tick_count_t;
+
+int
+cyg_real_time_clock (void);
+
+cyg_resolution_t
+cyg_clock_get_resolution (int clock);
+
+cyg_tick_count_t
+cyg_current_time (void);
+
+#endif
diff --git a/cesar/cp/eoc/beacon/test/utest2/src/beacon.c b/cesar/cp/eoc/beacon/test/utest2/src/beacon.c
new file mode 100644
index 0000000000..62146069b0
--- /dev/null
+++ b/cesar/cp/eoc/beacon/test/utest2/src/beacon.c
@@ -0,0 +1,1389 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/beacon.c
+ * \brief Unit test for the beacon module.
+ * \ingroup cp_beacon
+ *
+ * « long description »
+ */
+#include "common/std.h"
+#include "lib/slist.h"
+#include "lib/test.h"
+#include "lib/circular_buffer.h"
+
+#include "mac/common/ntb.h"
+#include "mac/common/store.h"
+
+#include "cp/beacon/beacon.h"
+#include "cp/av/beacon/discover.h"
+
+#include "cp/cp.h"
+#include "cp/inc/context.h"
+
+#include "cl/inc/context.h"
+#include "mac/sar/inc/context.h"
+
+#define TEST_CCO_MAC 0x0013d7001001ull
+
+void
+cp_beacon_receive (cp_t *ctx, bsu_beacon_t *beacon);
+
+void
+cp_beacon_sta_compute_schedules (cp_t *ctx, bsu_beacon_t *beacon_data);
+
+struct test_beacon_t
+{
+ cp_t cp;
+ mac_config_t mac_config;
+ cl_t cl;
+ sar_t sar;
+ bsu_aclf_t aclf;
+ uint ca;
+ bool bsu_updated;
+};
+typedef struct test_beacon_t test_beacon_t;
+
+void
+test_beacon_init (test_beacon_t *ctx)
+{
+ memset (ctx, 0, sizeof (test_beacon_t));
+ lib_rnd_init (&ctx->cp.rnd, 0x1234);
+ ctx->cp.mac_config = &ctx->mac_config;
+ ctx->cp.sar = &ctx->sar;
+ ctx->cp.cl = &ctx->cl;
+ ctx->cp.bsu_aclf = &ctx->aclf;
+ ctx->cp.bsu = (bsu_t *) &ctx->bsu_updated;
+ *((bsu_aclf_frequency_t*) &ctx->aclf.frequency) = BSU_ACLF_FREQ_50HZ;
+ *((bsu_aclf_bp_t*) &ctx->aclf.beacon_period_theo_tck) =
+ BSU_ACLF_BP_50HZ_TCK;
+ ctx->aclf.beacon_period_tck = ctx->aclf.beacon_period_theo_tck;
+ ctx->cp.mac_store = mac_store_init();
+ ctx->cp.ca = (ca_t*) &ctx->ca;
+ cp_sta_mgr_init (&ctx->cp);
+ cp_cco_bw_init (&ctx->cp);
+ cp_cco_region_init (&ctx->cp);
+ cp_beacon_init (&ctx->cp);
+ ctx->cp.beacon.last_countdown_call_date_active = true;
+}
+
+void
+test_beacon_uninit (test_beacon_t *ctx)
+{
+ cp_beacon_uninit (&ctx->cp);
+ cp_cco_bw_uninit (&ctx->cp);
+ cp_cco_region_uninit (&ctx->cp);
+ cp_sta_mgr_uninit (&ctx->cp);
+ mac_store_uninit (ctx->cp.mac_store);
+}
+
+bsu_beacon_t*
+test_new_beacon (void)
+{
+ /** Create a central beacon. */
+ bsu_beacon_t *beacon = blk_alloc ();
+ dbg_assert (beacon);
+ memset (beacon, 0, sizeof (bsu_beacon_t));
+ beacon->vf.nid = 1;
+ beacon->vf.stei = 1;
+ beacon->vf.bt = BSU_BEACON_TYPE_CENTRAL;
+ beacon->vf.hm = MAC_COEXISTENCE_FULL_HYBRID_MODE;
+ beacon->vf.ncnr = false;
+ beacon->vf.npsm = false;
+ beacon->vf.numslots = 0;
+ beacon->vf.slotusage = 0;
+ beacon->vf.slotid = 0;
+ beacon->vf.aclsss = true;
+ beacon->vf.hoip = false;
+ beacon->vf.rtsbf = false;
+ beacon->vf.nm = MAC_NM_CSMA_ONLY;
+ beacon->vf.ccocap = 0;
+ beacon->bmis.change_snid.present = true;
+ beacon->bmis.change_snid.snidccd = 3;
+ beacon->bmis.change_snid.new_snid = 0xC;
+ beacon->bmis.mac_address.present = true;
+ beacon->bmis.mac_address.mac_address = TEST_CCO_MAC;
+ beacon->bmis.region.nb = 1;
+ beacon->bmis.region.region[0].end_time_atu = 3907;
+ beacon->bmis.region.region[0].rt = CP_CCO_REGION_TYPE_BEACON;
+ beacon->bmis.nps.ns = 1;
+ beacon->bmis.nps.sais[0].end_time_atu = 3907;
+ beacon->bmis.nps.sais[0].glid = 0x45;
+ beacon->bmis.nps.sais[0].stpf = false;
+ beacon->bmis.nbe = 4;
+ beacon->params.rx_parameters.snid = 0;
+ beacon->params.rx_parameters.access = HPAV_ACCESS_IN_HOME;
+ beacon->params.direction = BSU_BEACON_DIRECTION_FROM_PLC;
+ beacon->params.frequency_error_valid = false;
+ return beacon;
+}
+
+/** Uninitialise
+ * \param test the test object.
+ *
+ * The uninit procedure, shall stop the timers and release all the object
+ * referenced by the beacon module.
+ *
+ * * Stop the HAL timer
+ * * Stop the eCos timer
+ * * Release all beacon received and not processed yet.
+ * * Call the uninit function for the common sub context.
+ *
+ * Environment
+ * This test shall insert some data in the pointers and the context.
+ *
+ * 1. Add at least two beacon in the received list.
+ * 2. Add a central beacon in the central sub context.
+ * 3. Add a discover beacon in the discover sub context.
+ * 4. Add a proxy beacon in the discover sub context.
+ *
+ * Result
+ * At the end the beacon module shall not have any referenced on any object.
+ */
+void
+test_case_beacon_uninit (test_t test)
+{
+ test_case_begin (test, "Beacon uninit");
+ test_begin (test, "remove beacons received")
+ {
+ test_beacon_t ctx;
+ test_beacon_init (&ctx);
+ bsu_beacon_t *b;
+ uint i;
+ for (i = 0; i < 2; i++)
+ {
+ b = blk_alloc ();
+ b->next = NULL;
+ b->params.direction = BSU_BEACON_DIRECTION_FROM_PLC;
+ cp_beacon_receive (&ctx.cp, b);
+ }
+ test_beacon_uninit (&ctx);
+ test_fail_unless (slist_empty (ctx.cp.beacon.list., bare));
+ }
+ test_end;
+}
+
+void
+test_case_beacon__deactivate (test_t test)
+{
+ test_case_begin (test, "Deactivate");
+ test_begin (test, "Deactivate beacon module")
+ {
+ test_beacon_t ctx;
+ uint nb_beacons = 2;
+ test_beacon_init (&ctx);
+ /* Still configuring the test... */
+ ctx.cp.beacon.leon_timer.status = true;
+ /* Allocate some beacons. */
+ uint i;
+ for (i = 0; i < nb_beacons; i++)
+ {
+ bsu_beacon_t *beacon = blk_alloc ();
+ beacon->next = NULL;
+ slist_push_back (ctx.cp.beacon.list., beacon, bare);
+ }
+ /* test. */
+ cp_beacon_deactivate (&ctx.cp);
+ test_fail_unless (slist_empty (ctx.cp.beacon.list., bare));
+ test_beacon_uninit (&ctx);
+ test_fail_if (blk_check_memory () != true, "Memory leaks");
+ }
+ test_end;
+}
+
+static
+void
+test_beacon_variant_field (test_t test, bsu_beacon_t *beacon, cp_nid_t nid,
+ mac_coexistence_mode_t hm, u8 slot_usage, u8 slot_id, bool hoipflag)
+{
+ test_begin (test, "variant field: Constant values")
+ {
+ test_fail_unless (beacon->vf.ncnr ==
+ CP_BEACON_NON_COORDINATED_NETWORK);
+ test_fail_unless (beacon->vf.npsm == CP_BEACON_NPSM_NOT_ACTIVE);
+ test_fail_unless (beacon->vf.numslots == 1);
+ test_fail_unless (beacon->vf.aclsss == 0);
+ test_fail_unless (beacon->vf.rtsbf == false);
+ test_fail_unless (beacon->vf.nm == MAC_NM_CSMA_ONLY);
+ test_fail_unless (beacon->vf.ccocap == CP_CCO_LEVEL);
+ }
+ test_end;
+
+ test_begin (test, "Variant field: variant fields")
+ {
+ test_fail_unless (beacon->vf.nid == nid);
+ test_fail_unless (beacon->vf.hm == hm);
+ test_fail_unless (beacon->vf.slotusage == slot_usage);
+ test_fail_unless (beacon->vf.slotid == slot_id);
+ test_fail_unless (beacon->vf.hoip == hoipflag);
+ }
+ test_end;
+}
+
+static
+void
+test_beacon_discover_info (test_t test, bsu_beacon_t *beacon, bool updated,
+ bool cco_status, bool pco_status, u8 nb_sta, u8 nb_net, bool authenticated)
+{
+ test_begin (test, "Beacon entries : discover info")
+ {
+ u32 info_data;
+ bitstream_t bitstream;
+
+ bitstream_write_init (&bitstream, &info_data, 4);
+ bitstream_write (&bitstream, (int)updated, 1);
+ bitstream_write (&bitstream, CP_CCO_LEVEL, 2);
+ bitstream_write (&bitstream, CP_PCO_CAP, 1);
+ bitstream_write (&bitstream, CP_BACKUP_CCO_CAP, 1);
+ bitstream_write (&bitstream, cco_status, 1);
+ bitstream_write (&bitstream, pco_status, 1);
+ bitstream_write (&bitstream, false, 1);
+ bitstream_write (&bitstream, nb_sta, 8);
+ bitstream_write (&bitstream, nb_net, 8);
+ bitstream_write (&bitstream, authenticated, 1);
+ bitstream_write (&bitstream, false, 1);
+ bitstream_write (&bitstream, 0, 6);
+ bitstream_finalise (&bitstream);
+
+ /* discover info data are always present */
+ test_fail_unless (beacon->bmis.discover_info.present == true);
+ test_fail_unless (beacon->bmis.discover_info.info_data == info_data);
+ }
+ test_end;
+}
+static
+void
+test_beacon_bentries (test_t test, bsu_beacon_t *beacon,
+ bool disc_flag, cp_tei_t disc_tei,
+ uint hoip_cd, cp_tei_t hoip_tei,
+ uint kc_cd, enum bsu_beacon_eks_kbc_t kbc, u8 eks,
+ mac_coexistence_mode_t new_hm,
+ uint snid_cd, cp_snid_t new_snid)
+{
+ test_begin (test, "Beacon entries")
+ {
+ /* Discover. */
+ test_fail_unless (beacon->bmis.discover.present == disc_flag);
+ if (disc_flag)
+ test_fail_unless (beacon->bmis.discover.tei == disc_tei);
+ /* Handover in progress. */
+ if (beacon->bmis.handover.present)
+ {
+ test_fail_unless (beacon->bmis.handover.hcd == hoip_cd);
+ test_fail_unless (beacon->bmis.handover.tei == hoip_tei);
+ }
+ /* eks. */
+ if (beacon->bmis.eks.present)
+ {
+ test_fail_unless (beacon->bmis.eks.kccd == kc_cd);
+ test_fail_unless (beacon->bmis.eks.kbc == kbc);
+ test_fail_unless (beacon->bmis.eks.new_eks == eks);
+ }
+ /* Change hm. */
+ if (beacon->bmis.change_hm.present)
+ {
+ test_fail_unless (beacon->bmis.change_hm.hmccd ==
+ CP_BEACON_COUNTDOWN_HM);
+ test_fail_unless (beacon->bmis.change_hm.newhm == new_hm);
+ }
+ /* Change snid. */
+ if (beacon->bmis.change_snid.present)
+ {
+ test_fail_unless (beacon->bmis.change_snid.snidccd == snid_cd);
+ test_fail_unless (beacon->bmis.change_snid.new_snid == new_snid);
+ }
+ /* others. */
+ test_fail_unless (beacon->bmis.bpsto.present == true);
+ test_fail_unless (beacon->bmis.mac_address.present == true);
+ test_fail_unless (beacon->bmis.relocation.present == false);
+ test_fail_unless (beacon->bmis.aclsc.present == false);
+ test_fail_unless (beacon->bmis.cns.present == false);
+ }
+ test_end;
+}
+
+void
+test_suite_beacon__beacon_generation (test_t test)
+{
+ test_beacon_t ctx;
+ bsu_beacon_t beacon;
+ test_beacon_init (&ctx);
+
+ /* Data set one */
+ const cp_nid_t nid_1 = 0x001456789ABCDEF0ull;
+ const cp_tei_t tei_1 = 42;
+ const cp_snid_t snid_1 = 0xFE;
+ const u8 slot_id_1 = 1;
+ enum cp_beacon_hoip_e hoip_flag_1 = CP_BEACON_HOIP_FALSE;
+ const bool cco_flag_1 = true;
+ const bool pco_flag_1 = false;
+ const bool authen_1 = true;
+ const mac_coexistence_mode_t hm_1 = MAC_COEXISTENCE_AV_ONLY_MODE;
+ const uint kc_cd = 0xAB;
+ const enum bsu_beacon_eks_kbc_t kbc = BSU_BEACON_EKS_KBC_NEK;
+ const u8 eks = 0x12;
+ const uint hoip_cd = 0xCD;
+ const cp_tei_t hoip_tei = 44;
+ const mac_coexistence_mode_t new_hm = MAC_COEXISTENCE_FULL_HYBRID_MODE;
+ const u8 snid_cd = 0xA;
+ const cp_snid_t new_snid = 0xF;
+
+ cp_net_t *net_1 = cp_sta_mgr_add_avln (&ctx.cp, snid_1, nid_1);
+ cp_sta_own_data_set_tei (&ctx.cp, tei_1);
+ cp_net_set_slot_id_and_usage (&ctx.cp, net_1, slot_id_1, 0);
+ cp_sta_mgr_set_our_avln (&ctx.cp, net_1);
+ cp_av_beacon_handover_hoipflag (&ctx.cp, hoip_flag_1);
+ cp_sta_own_data_set_cco_status (&ctx.cp, cco_flag_1);
+ cp_sta_own_data_set_pco_status (&ctx.cp, pco_flag_1);
+ cp_sta_own_data_set_authenticated_status (&ctx.cp, authen_1);
+ ctx.cp.beacon.discover.discover_interval_bp = 10;
+ ((cp_sta_own_data_t *)&ctx.cp.sta_mgr.sta_own_data)->hybrid_mode = hm_1;
+
+ cp_beacon_change_hm (&ctx.cp, new_hm);
+ ctx.cp.beacon.eks.kccd = kc_cd;
+ ctx.cp.beacon.eks.kbc = kbc;
+ ctx.cp.beacon.eks.new_eks = eks;
+ ctx.cp.beacon.hoip.hoipcd = hoip_cd;
+ ctx.cp.beacon.hoip.cco = hoip_tei;
+ ctx.cp.beacon.snids.snidcd = snid_cd;
+ ctx.cp.beacon.snids.snid = new_snid;
+ ctx.cp.beacon.discover.countdown_bp = 0; // so that the flag is true
+
+ /* Regions. */
+ cp_cco_region_alloc_t *region;
+ uint end_time_atu = 3907;
+
+ region = cp_cco_region_alloc_init (&ctx.cp);
+ region->type = CP_BEACON_REGION_TYPE_SHARED_CSMA;
+ region->end_time_atu = end_time_atu;
+ cp_cco_region_alloc_add (&ctx.cp, &ctx.cp.region.region_list, region);
+ slab_release (region);
+
+ /* Fill the beacon data share memory */
+ cp_beacon_fill (&ctx.cp, &beacon);
+
+ test_suite_begin (test, "Beacon generation");
+ test_case_begin (test, "fill share memory");
+
+ /* Check the variant fields */
+ test_beacon_variant_field (test, &beacon, nid_1, hm_1, (1 << slot_id_1),
+ slot_id_1, hoip_flag_1);
+ /* Check the discover info field */
+ test_beacon_discover_info (test, &beacon, true, cco_flag_1, pco_flag_1,
+ 0, 0, authen_1);
+ /* Check most bentry fields */
+ test_beacon_bentries (test, &beacon,
+ true, tei_1,
+ hoip_cd, hoip_tei,
+ kc_cd, kbc, eks,
+ new_hm,
+ snid_cd, new_snid);
+ /* Check regions bentries */
+ test_begin (test, "Region")
+ {
+ test_fail_unless (beacon.bmis.region.nb == 1);
+ test_fail_unless (beacon.bmis.region.region[0].rt ==
+ CP_BEACON_REGION_TYPE_SHARED_CSMA);
+ test_fail_unless (beacon.bmis.region.region[0].end_time_atu ==
+ end_time_atu);
+ }
+ test_end;
+ /* Check schedule bentries */
+ test_begin (test, "schedule")
+ {
+ test_fail_unless (beacon.bmis.ps.nb == 0);
+ test_fail_unless (beacon.bmis.nps.ns == 0);
+ }
+ test_end;
+
+ /* Change values */
+
+ /* Data set two */
+ const cp_nid_t nid_2 = 0x001567890ABCDEF0ull;
+ const cp_tei_t tei_2 = 43;
+ const cp_snid_t snid_2 = 0xEF;
+ const u8 slot_id_2 = 2;
+ enum cp_beacon_hoip_e hoip_flag_2 = CP_BEACON_HOIP_TRUE;
+ const bool cco_flag_2 = false;
+ const bool pco_flag_2 = true;
+ const bool authen_2 = false;
+ const mac_coexistence_mode_t hm_2 = MAC_COEXISTENCE_NB - 1;
+
+ cp_net_t *net_2 = cp_sta_mgr_add_avln (&ctx.cp, snid_2, nid_2);
+ cp_sta_own_data_set_tei (&ctx.cp, tei_2);
+ cp_net_set_slot_id_and_usage (&ctx.cp, net_2, slot_id_2, 0);
+ cp_sta_mgr_set_our_avln (&ctx.cp, net_2);
+ cp_av_beacon_handover_hoipflag (&ctx.cp, hoip_flag_2);
+ cp_sta_own_data_set_cco_status (&ctx.cp, cco_flag_2);
+ cp_sta_own_data_set_pco_status (&ctx.cp, pco_flag_2);
+ cp_sta_own_data_set_authenticated_status (&ctx.cp, authen_2);
+ ((cp_sta_own_data_t *)&ctx.cp.sta_mgr.sta_own_data)->hybrid_mode = hm_2;
+
+ ctx.cp.beacon.eks.kccd = 0;
+ ctx.cp.beacon.hoip.hoipcd = 0;
+ ctx.cp.beacon.snids.snidcd = 0;
+ ctx.cp.beacon.hm.hmcd = 0;
+
+ /* Regions. */
+ region = cp_cco_region_alloc_init (&ctx.cp);
+ region->type = CP_BEACON_REGION_TYPE_BEACON;
+ region->end_time_atu = end_time_atu - 10;
+ cp_cco_region_alloc_add (&ctx.cp, &ctx.cp.region.region_list, region);
+ slab_release (region);
+
+ region = cp_cco_region_alloc_init (&ctx.cp);
+ region->type = CP_BEACON_REGION_TYPE_STAYOUT;
+ region->end_time_atu = end_time_atu + 10;
+ cp_cco_region_alloc_add (&ctx.cp, &ctx.cp.region.region_list, region);
+ slab_release (region);
+
+ /* Schedules. */
+ uint nb, ns;
+ int i;
+ cp_cco_bw_alloc_t *sched;
+
+ for (i = 1, nb = 0; i < 8; i += 6, nb++)
+ {
+ for (ns=0; ns < 2; ns++)
+ {
+ sched = cp_cco_bw_alloc_init (&ctx.cp);
+ sched->persistence = CP_CCO_BW_ALLOC_PERSISTENCE_PERSISTENT;
+ sched->pscd = i;
+ sched->cscd = i;
+ sched->stpf = false;
+ sched->glid = 0x55 + nb;
+ sched->end_time_atu = end_time_atu + nb * 10 + ns * 5;
+ sched->start_time_atu = end_time_atu + nb * 10 + ns * 5 -4;
+ cp_cco_bw_alloc_add (&ctx.cp, &ctx.cp.bw.alloc_list, sched);
+ slab_release (sched);
+ }
+ }
+
+ for (ns = 0; ns < BSU_BEACON_BMIS_SCHEDULES_SAI_MAX; ns++)
+ {
+ sched = cp_cco_bw_alloc_init (&ctx.cp);
+ sched->persistence = CP_CCO_BW_ALLOC_PERSISTENCE_NOT_PERSISTENT;
+ sched->pscd = ns;
+ sched->cscd = ns;
+ sched->stpf = false;
+ sched->glid = 0x45 + ns;
+ sched->start_time_atu = end_time_atu - 10 * (ns + 1) -9;
+ sched->end_time_atu = end_time_atu - 10 * (ns + 1);
+ cp_cco_bw_alloc_add (&ctx.cp, &ctx.cp.bw.alloc_list, sched);
+ slab_release (sched);
+ }
+
+ /* Fill the beacon data share memory */
+ cp_beacon_fill (&ctx.cp, &beacon);
+
+ test_suite_begin (test, "Beacon generation 2");
+ test_case_begin (test, "fill share memory 2");
+
+ /* Check the variant fields */
+ test_beacon_variant_field (test, &beacon, nid_2, hm_2,
+ (1 << slot_id_2) + (1 << slot_id_1),
+ slot_id_2, hoip_flag_2);
+ /* Check the discover info field */
+ test_beacon_discover_info (test, &beacon, true, cco_flag_2, pco_flag_2,
+ 0, 1, authen_2);
+ /* Check most bentry fields */
+ test_beacon_bentries (test, &beacon,
+ false, tei_2, 0, 0, 0, 0, 0, 0, 0, 0);
+
+ /* Check regions bentries */
+ test_begin (test, "Region 2")
+ {
+ test_fail_unless (beacon.bmis.region.nb == 3);
+ test_fail_unless (beacon.bmis.region.region[0].rt ==
+ CP_BEACON_REGION_TYPE_BEACON);
+ test_fail_unless (beacon.bmis.region.region[0].end_time_atu ==
+ end_time_atu - 10);
+ test_fail_unless (beacon.bmis.region.region[1].rt ==
+ CP_BEACON_REGION_TYPE_SHARED_CSMA);
+ test_fail_unless (beacon.bmis.region.region[1].end_time_atu ==
+ end_time_atu);
+ test_fail_unless (beacon.bmis.region.region[2].rt ==
+ CP_BEACON_REGION_TYPE_STAYOUT);
+ test_fail_unless (beacon.bmis.region.region[2].end_time_atu ==
+ end_time_atu + 10);
+ }
+ test_end;
+
+ /* Check schedule bentries */
+ test_begin (test, "schedule 2")
+ {
+ for (i = 1, nb = 0; i < 8; i += 6, nb++)
+ {
+ test_fail_unless (beacon.bmis.ps.ps[nb].pscd == i);
+ test_fail_unless (beacon.bmis.ps.ps[nb].cscd == i);
+ test_fail_unless (beacon.bmis.ps.ps[nb].ns == 2);
+
+ for (ns = 0; ns < 2; ns++)
+ {
+ test_fail_unless (beacon.bmis.ps.ps[nb].sais[ns].stpf ==
+ false);
+ test_fail_unless (beacon.bmis.ps.ps[nb].sais[ns].glid ==
+ 0x55 + nb);
+ test_fail_unless (
+ beacon.bmis.ps.ps[nb].sais[ns].start_time_atu ==
+ end_time_atu + nb * 10 + ns * 5 - 4);
+ test_fail_unless (
+ beacon.bmis.ps.ps[nb].sais[ns].end_time_atu ==
+ end_time_atu + nb * 10 + ns * 5);
+ }
+ }
+ test_fail_unless (beacon.bmis.ps.nb == nb);
+
+ for (i = BSU_BEACON_BMIS_SCHEDULES_SAI_MAX - 1, ns = 0; i >= 0;
+ i--, ns++)
+ {
+ test_fail_unless (beacon.bmis.nps.sais[ns].stpf ==
+ false);
+ test_fail_unless (beacon.bmis.nps.sais[ns].glid ==
+ 0x45 + i);
+ test_fail_unless (
+ beacon.bmis.nps.sais[ns].start_time_atu ==
+ end_time_atu - (i + 1) * 10 - 9);
+ test_fail_unless (
+ beacon.bmis.nps.sais[ns].end_time_atu ==
+ end_time_atu - (i + 1) * 10);
+ }
+ test_fail_unless (beacon.bmis.nps.ns == ns);
+ }
+ test_end;
+ test_beacon_uninit (&ctx);
+}
+
+void
+test_case_beacon_snid_change_cco (test_t test)
+{
+ uint snid;
+ cp_net_t *net;
+ test_beacon_t ctx;
+
+ test_case_begin (test, "CCo");
+ test_beacon_init (&ctx);
+
+ net = cp_sta_mgr_add_avln (&ctx.cp, 0xA, 1);
+ cp_sta_own_data_set_snid (&ctx.cp, 0xA);
+ cp_sta_own_data_set_tei (&ctx.cp, 1);
+ cp_sta_mgr_set_our_avln (&ctx.cp, net);
+ cp_sta_own_data_set_cco_status (&ctx.cp, true);
+ cp_sta_own_data_set_mac_address (&ctx.cp, 0x123456789ABCull);
+
+
+ test_begin (test, "Change SNID")
+ {
+ /* Process the test. */
+ test_fail_unless (ctx.cp.beacon.snids.snid == 0);
+ test_fail_unless (ctx.cp.beacon.snids.snidcd == 0);
+
+ snid = 1;
+ cp_beacon_change_snid (&ctx.cp, snid);
+
+ test_fail_unless (ctx.cp.beacon.snids.snid == snid);
+ test_fail_unless (ctx.cp.beacon.snids.snidcd == CP_BEACON_COUNTDOWN_SNID);
+ }
+ test_end;
+
+ test_begin (test, "Change SNID, check bentry in Central beacon")
+ {
+ cp_cco_region_alloc_t *region;
+ cp_cco_bw_alloc_t *alloc;
+ set_t set_schedules;
+ set_t set_regions;
+ bsu_beacon_t beacon;
+
+ set_init (&set_schedules, cp_cco_bw_alloc_less);
+ set_init (&set_regions, cp_cco_region_alloc_less);
+ cp_cco_region_init (&ctx.cp);
+ cp_cco_bw_init (&ctx.cp);
+
+ /* Regions. */
+ region = cp_cco_region_alloc_init (&ctx.cp);
+ region->type = CP_BEACON_REGION_TYPE_SHARED_CSMA;
+ region->end_time_atu = 3907;
+ cp_cco_region_alloc_add (&ctx.cp, &ctx.cp.region.region_list, region);
+ slab_release (region);
+
+ /* Schedules. */
+ alloc = cp_cco_bw_alloc_init (&ctx.cp);
+ alloc->pscd = 7;
+ alloc->cscd = 7;
+ alloc->stpf = false;
+ alloc->glid = 0x45;
+ alloc->end_time_atu = 3907;
+ alloc->persistence = CP_CCO_BW_ALLOC_PERSISTENCE_PERSISTENT;
+ cp_cco_bw_alloc_add (&ctx.cp, &ctx.cp.bw.alloc_list, alloc);
+ slab_release (alloc);
+
+ cp_beacon_fill (&ctx.cp, &beacon);
+
+ test_fail_unless (beacon.bmis.change_snid.present == true);
+ test_fail_unless (beacon.bmis.change_snid.snidccd == ctx.cp.beacon.snids.snidcd);
+ test_fail_unless (beacon.bmis.change_snid.new_snid == ctx.cp.beacon.snids.snid);
+
+ cp_cco_bw_alloc_clean (&ctx.cp, &set_schedules);
+ cp_cco_region_alloc_clean (&ctx.cp, &set_regions);
+
+ cp_beacon_sta_compute_schedules (&ctx.cp, &beacon);
+ alloc = cp_cco_bw_alloc_get_first (&ctx.cp, &ctx.cp.bw.alloc_list);
+ test_fail_unless (alloc->persistence ==
+ CP_CCO_BW_ALLOC_PERSISTENCE_PERSISTENT);
+ alloc = cp_cco_bw_alloc_get_next (&ctx.cp, &ctx.cp.bw.alloc_list, alloc);
+ test_fail_unless (!alloc);
+ cp_cco_region_alloc_clean (&ctx.cp, &set_regions);
+ cp_cco_bw_alloc_clean (&ctx.cp, &set_schedules);
+ cp_cco_bw_uninit (&ctx.cp);
+ cp_cco_region_uninit (&ctx.cp);
+ }
+ test_end;
+
+ /* Uninit all the data. */
+ test_beacon_uninit (&ctx);
+}
+
+
+void
+test_case_beacon_snid_change_sta (test_t test)
+{
+ test_case_begin (test, "Station");
+ u32 last_countdown_call_date = phy_date () - BSU_ACLF_BP_60HZ_TCK - 100;
+ test_begin (test, "Beacon reception")
+ {
+ bsu_beacon_t *beacon;
+ cp_net_t *net;
+ cp_sta_own_data_t *own;
+ test_beacon_t ctx;
+ test_beacon_init (&ctx);
+ /** Init the context. */
+ ctx.cp.bsu_aclf->beacon_period_tck = BSU_ACLF_BP_60HZ_TCK;
+ ctx.cp.beacon.last_countdown_call_date_active = true;
+ ctx.cp.beacon.last_countdown_call_date = last_countdown_call_date;
+ /* Configure station own data. */
+ net = cp_sta_mgr_add_avln (&ctx.cp, 0, 1);
+ cp_sta_own_data_set_tei (&ctx.cp, 2);
+ cp_sta_own_data_set_mac_address (&ctx.cp, 0x23456789abcull);
+ cp_sta_mgr_set_our_avln (&ctx.cp, net);
+ own = cp_sta_mgr_get_sta_own_data (&ctx.cp);
+ own->nid_track = 1;
+ own->tei_track = 1;
+ own->cco_mac_addr_track = TEST_CCO_MAC;
+ /** Check snid default values. */
+ test_fail_unless (ctx.cp.beacon.snids.snid == 0);
+ test_fail_unless (ctx.cp.beacon.snids.snidcd == 0);
+ test_fail_unless (cp_net_get_snid (&ctx.cp, net) == 0x0);
+ test_fail_unless (cp_sta_own_data_get_snid (&ctx.cp) == 0x0);
+ /** Create a central beacon. */
+ beacon = test_new_beacon ();
+ beacon->bmis.change_snid.present = true;
+ beacon->bmis.change_snid.new_snid = 0xC;
+ beacon->bmis.change_snid.snidccd = 3;
+ cp_beacon_receive (&ctx.cp, beacon);
+ ctx.cp.beacon.last_countdown_call_date = last_countdown_call_date;
+ cp_beacon_get_and_process_beacon (&ctx.cp);
+ /** Check snid values are taken. */
+ test_fail_unless (ctx.cp.beacon.snids.snid == 0xC);
+ test_fail_unless (ctx.cp.beacon.snids.snidcd == 3);
+ test_fail_unless (cp_net_get_snid (&ctx.cp, net) == 0x0);
+ test_fail_unless (cp_sta_own_data_get_snid (&ctx.cp) == 0x0);
+ /** Create the next beacon (countdown decreased). */
+ beacon = test_new_beacon ();
+ beacon->bmis.change_snid.snidccd = 2;
+ /** launch the test. */
+ cp_beacon_receive (&ctx.cp, beacon);
+ ctx.cp.beacon.last_countdown_call_date = last_countdown_call_date;
+ cp_beacon_get_and_process_beacon (&ctx.cp);
+ /** Check countdown. */
+ test_fail_unless (ctx.cp.beacon.snids.snid == 0xC);
+ test_fail_unless (ctx.cp.beacon.snids.snidcd == 2);
+ test_fail_unless (cp_net_get_snid (&ctx.cp, net) == 0x0);
+ test_fail_unless (cp_sta_own_data_get_snid (&ctx.cp) == 0x0);
+ /** Create the next beacon (countdown decreased). */
+ beacon = test_new_beacon ();
+ beacon->bmis.change_snid.snidccd = 1;
+ /** launch the test. */
+ cp_beacon_receive (&ctx.cp, beacon);
+ ctx.cp.beacon.last_countdown_call_date = last_countdown_call_date;
+ cp_beacon_get_and_process_beacon (&ctx.cp);
+ /** Check countdown. */
+ test_fail_unless (ctx.cp.beacon.snids.snid == 0xC);
+ test_fail_unless (ctx.cp.beacon.snids.snidcd == 1);
+ test_fail_unless (cp_net_get_snid (&ctx.cp, net) == 0x0);
+ test_fail_unless (cp_sta_own_data_get_snid (&ctx.cp) == 0x0);
+ /* Create the beacon. */
+ beacon = test_new_beacon ();
+ beacon->bmis.change_snid.present = false;
+ beacon->bmis.nbe--;
+ beacon->params.rx_parameters.snid = 0xC;
+ /* launch the test. */
+ cp_beacon_receive (&ctx.cp, beacon);
+ ctx.cp.beacon.last_countdown_call_date = last_countdown_call_date;
+ cp_beacon_get_and_process_beacon (&ctx.cp);
+ /** Check new snid is 0xC. */
+ test_fail_unless (ctx.cp.beacon.snids.snid == 0xC);
+ test_fail_unless (ctx.cp.beacon.snids.snidcd == 0);
+ test_fail_unless (cp_net_get_snid (&ctx.cp, net) == 0xC);
+ test_fail_unless (cp_sta_own_data_get_snid (&ctx.cp) == 0xC);
+
+ dbg_check (mac_store_sta_remove (ctx.cp.mac_store, 1));
+ test_beacon_uninit (&ctx);
+ }
+ test_end;
+
+ test_begin (test, "Beacon missed")
+ {
+ test_beacon_t ctx;
+ cp_net_t *net;
+ cp_cco_region_alloc_t *region;
+ cp_cco_bw_alloc_t *alloc;
+ test_beacon_init (&ctx);
+ /* Regions. */
+ region = cp_cco_region_alloc_init (&ctx.cp);
+ region->type = CP_BEACON_REGION_TYPE_SHARED_CSMA;
+ region->end_time_atu = 3907;
+ cp_cco_region_alloc_add (&ctx.cp, &ctx.cp.region.region_list, region);
+ slab_release (region);
+
+ /* Schedules. */
+ alloc = cp_cco_bw_alloc_init (&ctx.cp);
+ alloc->stpf = false;
+ alloc->glid = 0x45;
+ alloc->end_time_atu = 3907;
+ alloc->persistence = CP_CCO_BW_ALLOC_PERSISTENCE_NOT_PERSISTENT;
+ cp_cco_bw_alloc_add (&ctx.cp, &ctx.cp.bw.alloc_list, alloc);
+ slab_release (alloc);
+
+ /* Configure station own data. */
+ net = cp_sta_mgr_add_avln (&ctx.cp, 1, 1);
+ cp_sta_own_data_set_tei (&ctx.cp, 2);
+ cp_sta_own_data_set_mac_address (&ctx.cp, 0x23456789abcull);
+ cp_sta_mgr_set_our_avln (&ctx.cp, net);
+
+ /* Configure the test. */
+ ctx.cp.beacon.snids.snidcd = 2;
+ ctx.cp.beacon.snids.snid = 0xc;
+
+ ctx.cp.beacon.last_countdown_call_date = last_countdown_call_date;
+ cp_beacon_beacon_not_received (&ctx.cp);
+
+ test_fail_unless (ctx.cp.beacon.snids.snidcd == 1);
+ test_fail_unless (ctx.cp.beacon.snids.snid == 0xc);
+
+ ctx.cp.beacon.last_countdown_call_date = last_countdown_call_date;
+ cp_beacon_beacon_not_received (&ctx.cp);
+
+ test_fail_unless (ctx.cp.beacon.snids.snidcd == 0);
+ test_fail_unless (ctx.cp.beacon.snids.snid == 0xc);
+ test_fail_unless (cp_net_get_snid (&ctx.cp, net) == 0xC);
+ test_fail_unless (cp_sta_own_data_get_snid (&ctx.cp) == 0xC);
+
+ test_beacon_uninit (&ctx);
+ }
+ test_end;
+}
+
+void
+test_suite_beacon_snid_change (test_t test)
+{
+ test_suite_begin (test, "Change SNID");
+
+ test_case_beacon_snid_change_cco (test);
+ test_case_beacon_snid_change_sta (test);
+}
+
+void
+test_case_beacon_hm_change_sta (test_t test)
+{
+ test_case_begin (test, "Station");
+ u32 last_countdown_call_date = phy_date () - BSU_ACLF_BP_60HZ_TCK - 100;
+ test_begin (test, "Beacon reception")
+ {
+ test_beacon_t ctx;
+ bsu_beacon_t *beacon;
+ cp_net_t *net;
+ cp_sta_own_data_t *own;
+ /** Init the context. */
+ test_beacon_init (&ctx);
+ ctx.cp.bsu_aclf->beacon_period_tck = BSU_ACLF_BP_60HZ_TCK;
+ /** Configure station own data. */
+ own = cp_sta_mgr_get_sta_own_data (&ctx.cp);
+ net = cp_sta_mgr_add_avln (&ctx.cp, 0, 1);
+ cp_sta_own_data_set_tei (&ctx.cp, 2);
+ cp_sta_own_data_set_mac_address (&ctx.cp, 0x23456789abcull);
+ cp_sta_mgr_set_our_avln (&ctx.cp, net);
+ own = cp_sta_mgr_get_sta_own_data (&ctx.cp);
+ own->nid_track = 1;
+ own->tei_track = 1;
+ own->cco_mac_addr_track = TEST_CCO_MAC;
+ own->hybrid_mode = 0;
+ /** Create a central beacon. */
+ beacon = test_new_beacon ();
+ beacon->bmis.change_hm.present = true;
+ beacon->bmis.change_hm.newhm = 1;
+ beacon->bmis.change_hm.hmccd = 3;
+ beacon->bmis.nbe = 4;
+ /** Check default values. */
+ test_fail_unless (ctx.cp.beacon.hm.hm == 0);
+ test_fail_unless (ctx.cp.beacon.hm.hmcd == 0);
+ test_fail_unless (own->hybrid_mode == 0);
+ /* launch the test. */
+ cp_beacon_receive (&ctx.cp, beacon);
+ ctx.cp.beacon.last_countdown_call_date = last_countdown_call_date;
+ cp_beacon_get_and_process_beacon (&ctx.cp);
+ /** Check values are taken. */
+ test_fail_unless (ctx.cp.beacon.hm.hm == 0x1);
+ test_fail_unless (ctx.cp.beacon.hm.hmcd == 3);
+ test_fail_unless (own->hybrid_mode == 0);
+ /** Create the new beacon. */
+ beacon = test_new_beacon ();
+ beacon->bmis.change_hm.hmccd = 2;
+ /** launch the test. */
+ cp_beacon_receive (&ctx.cp, beacon);
+ ctx.cp.beacon.last_countdown_call_date = last_countdown_call_date;
+ cp_beacon_get_and_process_beacon (&ctx.cp);
+ /** Check values are taken. */
+ test_fail_unless (ctx.cp.beacon.hm.hm == 0x1);
+ test_fail_unless (ctx.cp.beacon.hm.hmcd == 2);
+ test_fail_unless (own->hybrid_mode == 0);
+ /** Create the new beacon. */
+ beacon = test_new_beacon ();
+ beacon->bmis.change_hm.hmccd = 1;
+ /* launch the test. */
+ cp_beacon_receive (&ctx.cp, beacon);
+ ctx.cp.beacon.last_countdown_call_date = last_countdown_call_date;
+ cp_beacon_get_and_process_beacon (&ctx.cp);
+ test_fail_unless (ctx.cp.beacon.hm.hm == 0x1);
+ test_fail_unless (ctx.cp.beacon.hm.hmcd == 1);
+ test_fail_unless (own->hybrid_mode == 0);
+ /* Create the beacon. */
+ beacon = test_new_beacon ();
+ beacon->bmis.change_hm.present = false;
+ beacon->bmis.nbe = 3;
+ /* launch the test. */
+ cp_beacon_receive (&ctx.cp, beacon);
+ ctx.cp.beacon.last_countdown_call_date = last_countdown_call_date;
+ cp_beacon_get_and_process_beacon (&ctx.cp);
+ test_fail_unless (ctx.cp.beacon.hm.hm == 0x1);
+ test_fail_unless (ctx.cp.beacon.hm.hmcd == 0);
+ test_fail_unless (own->hybrid_mode == 0x1);
+ dbg_check (mac_store_sta_remove (ctx.cp.mac_store, 1));
+ test_beacon_uninit (&ctx);
+ }
+ test_end;
+
+ test_begin (test, "Beacon missed")
+ {
+ test_beacon_t ctx;
+ cp_net_t *net;
+ cp_cco_region_alloc_t *region;
+ cp_cco_bw_alloc_t *alloc;
+ cp_sta_own_data_t *own;
+ test_beacon_init (&ctx);
+ /* Regions. */
+ region = cp_cco_region_alloc_init (&ctx.cp);
+ region->type = CP_BEACON_REGION_TYPE_SHARED_CSMA;
+ region->end_time_atu = 3907;
+ cp_cco_region_alloc_add (&ctx.cp, &ctx.cp.region.region_list, region);
+ slab_release (region);
+
+ /* Schedules. */
+ alloc = cp_cco_bw_alloc_init (&ctx.cp);
+ alloc->stpf = false;
+ alloc->glid = 0x45;
+ alloc->end_time_atu = 3907;
+ alloc->persistence = CP_CCO_BW_ALLOC_PERSISTENCE_NOT_PERSISTENT;
+ cp_cco_bw_alloc_add (&ctx.cp, &ctx.cp.bw.alloc_list, alloc);
+ slab_release (alloc);
+
+ /* Configure station own data. */
+ own = cp_sta_mgr_get_sta_own_data (&ctx.cp);
+ net = cp_sta_mgr_add_avln (&ctx.cp, 0, 1);
+ cp_sta_own_data_set_tei (&ctx.cp, 2);
+ cp_sta_own_data_set_mac_address (&ctx.cp, 0x23456789abcull);
+ cp_sta_mgr_set_our_avln (&ctx.cp, net);
+
+ /* Configure the test. */
+ ctx.cp.beacon.hm.hmcd = 2;
+ ctx.cp.beacon.hm.hm = 0x1;
+
+ ctx.cp.beacon.last_countdown_call_date = last_countdown_call_date;
+ cp_beacon_beacon_not_received (&ctx.cp);
+
+ test_fail_unless (ctx.cp.beacon.hm.hmcd == 1);
+ test_fail_unless (ctx.cp.beacon.hm.hm == 0x1);
+
+ ctx.cp.beacon.last_countdown_call_date = last_countdown_call_date;
+ cp_beacon_beacon_not_received (&ctx.cp);
+
+ test_fail_unless (ctx.cp.beacon.hm.hmcd == 0);
+ test_fail_unless (ctx.cp.beacon.hm.hm == 0x1);
+ test_fail_unless (own->hybrid_mode == 0x1);
+
+ test_beacon_uninit (&ctx);
+ }
+ test_end;
+}
+
+void
+test_suite_beacon_hm_change (test_t test)
+{
+ test_suite_begin (test, "Hybrid mode change");
+
+ test_case_beacon_hm_change_sta (test);
+}
+
+void
+test_case_beacon_eks_change_cco (test_t test)
+{
+ cp_key_t nek;
+ cp_net_t *net;
+ test_beacon_t ctx;
+ test_case_begin (test, "CCo");
+
+ /** Configure the context. */
+ test_beacon_init (&ctx);
+
+ /** Configure our station. */
+ net = cp_sta_mgr_add_avln (&ctx.cp, 0xA, 1);
+ cp_sta_own_data_set_tei (&ctx.cp, 1);
+ cp_sta_mgr_set_our_avln (&ctx.cp, net);
+ cp_sta_own_data_set_cco_status (&ctx.cp, true);
+ cp_sta_own_data_set_mac_address (&ctx.cp, 0x123456789ABCull);
+
+ test_begin (test, "Change EKS")
+ {
+ uint i;
+ /** Check default values. */
+ test_fail_unless (ctx.cp.beacon.eks.kccd == 0);
+ test_fail_unless (ctx.cp.beacon.eks.kbc == BSU_BEACON_EKS_KBC_NEK);
+ test_fail_unless (ctx.cp.beacon.eks.new_eks == 0);
+
+ /** Change nek. */
+ for (i = 0; i < COUNT (nek.key); i++)
+ nek.key[i] = i;
+ cp_beacon_change_nek (&ctx.cp, MAC_EKS_MIN, nek, false /* not now*/);
+
+ /** Check new values. */
+ test_fail_unless (ctx.cp.beacon.eks.new_eks == MAC_EKS_MIN);
+ test_fail_unless (ctx.cp.beacon.eks.kbc == BSU_BEACON_EKS_KBC_NEK);
+ test_fail_unless (ctx.cp.beacon.eks.kccd == CP_BEACON_COUNTDOWN_EKS);
+ }
+ test_end;
+
+ /* Uninit all the data. */
+ test_beacon_uninit (&ctx);
+}
+
+void
+test_case_beacon_eks_change_sta (test_t test)
+{
+ test_case_begin (test, "Station");
+ u32 last_countdown_call_date = phy_date () - BSU_ACLF_BP_60HZ_TCK - 100;
+ test_begin (test, "Beacon reception")
+ {
+ bsu_beacon_t *beacon;
+ cp_net_t *net;
+ cp_sta_own_data_t *own;
+ test_beacon_t ctx;
+ /** Init the context. */
+ test_beacon_init (&ctx);
+ /** Configure station own data. */
+ own = cp_sta_mgr_get_sta_own_data (&ctx.cp);
+ net = cp_sta_mgr_add_avln (&ctx.cp, 0, 1);
+ cp_sta_own_data_set_tei (&ctx.cp, 2);
+ cp_sta_own_data_set_mac_address (&ctx.cp, 0x23456789abcull);
+ cp_sta_mgr_set_our_avln (&ctx.cp, net);
+ own = cp_sta_mgr_get_sta_own_data (&ctx.cp);
+ own->nid_track = 1;
+ own->tei_track = 1;
+ own->cco_mac_addr_track = TEST_CCO_MAC;
+ /** Create a central beacon. */
+ beacon = test_new_beacon ();
+ beacon->bmis.eks.present = true;
+ beacon->bmis.eks.kccd = 2;
+ beacon->bmis.eks.kbc = BSU_BEACON_EKS_KBC_NEK;
+ beacon->bmis.eks.new_eks = MAC_EKS_MIN + 1;
+ mac_eks_t ref_eks_current = MAC_EKS_MIN + 2;
+ mac_eks_t ref_eks_next = MAC_EKS_MIN + 3;
+ ctx.mac_config.nek[bsu_nek_index_current (INVALID_PTR)].eks =
+ ref_eks_current;
+ ctx.mac_config.nek[bsu_nek_index_next (INVALID_PTR)].eks = ref_eks_next;
+ /** Check default values. */
+ test_fail_unless (ctx.cp.beacon.eks.kccd == 0);
+ test_fail_unless (ctx.cp.beacon.eks.kbc == BSU_BEACON_EKS_KBC_NEK);
+ test_fail_unless (ctx.cp.beacon.eks.new_eks == MAC_EKS_MIN);
+ /* launch the test. */
+ cp_beacon_receive (&ctx.cp, beacon);
+ ctx.cp.beacon.last_countdown_call_date = last_countdown_call_date;
+ cp_beacon_get_and_process_beacon (&ctx.cp);
+ test_fail_unless (ctx.cp.beacon.eks.kccd == 2);
+ test_fail_unless (ctx.cp.beacon.eks.kbc == BSU_BEACON_EKS_KBC_NEK);
+ test_fail_unless (ctx.cp.beacon.eks.new_eks == MAC_EKS_MIN + 1);
+ test_fail_unless (
+ ctx.mac_config.nek[bsu_nek_index_current (INVALID_PTR)].eks ==
+ ref_eks_current);
+ test_fail_unless (ctx.mac_config.nek[bsu_nek_index_next (INVALID_PTR)].eks ==
+ ref_eks_next);
+ /* Create the beacon. */
+ beacon = test_new_beacon ();
+ beacon->bmis.eks.kccd = 1;
+ /* launch the test. */
+ cp_beacon_receive (&ctx.cp, beacon);
+ ctx.cp.beacon.last_countdown_call_date = last_countdown_call_date;
+ cp_beacon_get_and_process_beacon (&ctx.cp);
+ test_fail_unless (ctx.cp.beacon.eks.kccd == 1);
+ test_fail_unless (ctx.cp.beacon.eks.kbc == BSU_BEACON_EKS_KBC_NEK);
+ test_fail_unless (ctx.cp.beacon.eks.new_eks == MAC_EKS_MIN + 1);
+ test_fail_unless (
+ ctx.mac_config.nek[bsu_nek_index_current (INVALID_PTR)].eks ==
+ ref_eks_current);
+ test_fail_unless (ctx.mac_config.nek[bsu_nek_index_next (INVALID_PTR)].eks ==
+ ref_eks_next);
+ /* Create the beacon. */
+ beacon = test_new_beacon ();
+ beacon->bmis.eks.present = false;
+ beacon->bmis.nbe--;
+ /* launch the test. */
+ cp_beacon_receive (&ctx.cp, beacon);
+ ctx.cp.beacon.last_countdown_call_date = last_countdown_call_date;
+ cp_beacon_get_and_process_beacon (&ctx.cp);
+ test_fail_unless (ctx.cp.beacon.eks.kccd == 0);
+ test_fail_unless (ctx.cp.beacon.eks.kbc == BSU_BEACON_EKS_KBC_NB);
+ test_fail_unless (ctx.cp.beacon.eks.new_eks == MAC_EKS_MIN + 1);
+ test_fail_unless (
+ ctx.mac_config.nek[bsu_nek_index_current (INVALID_PTR)].eks ==
+ ref_eks_current);
+ test_fail_unless (ctx.mac_config.nek[bsu_nek_index_next (INVALID_PTR)].eks ==
+ MAC_EKS_CLEAR);
+ dbg_check (mac_store_sta_remove (ctx.cp.mac_store, 1));
+ test_beacon_uninit (&ctx);
+ }
+ test_end;
+
+ test_begin (test, "Beacon missed")
+ {
+ cp_net_t *net;
+ cp_cco_region_alloc_t *region;
+ cp_cco_bw_alloc_t *alloc;
+ test_beacon_t ctx;
+ test_beacon_init (&ctx);
+ /* Regions. */
+ region = cp_cco_region_alloc_init (&ctx.cp);
+ region->type = CP_BEACON_REGION_TYPE_SHARED_CSMA;
+ region->end_time_atu = 3907;
+ cp_cco_region_alloc_add (&ctx.cp, &ctx.cp.region.region_list, region);
+ slab_release (region);
+
+ /* Schedules. */
+ alloc = cp_cco_bw_alloc_init (&ctx.cp);
+ alloc->stpf = false;
+ alloc->glid = 0x45;
+ alloc->end_time_atu = 3907;
+ alloc->persistence = CP_CCO_BW_ALLOC_PERSISTENCE_NOT_PERSISTENT;
+ cp_cco_bw_alloc_add (&ctx.cp, &ctx.cp.bw.alloc_list, alloc);
+ slab_release (alloc);
+
+ /* Configure station own data. */
+ net = cp_sta_mgr_add_avln (&ctx.cp, 0, 1);
+ cp_sta_own_data_set_tei (&ctx.cp, 2);
+ cp_sta_own_data_set_mac_address (&ctx.cp, 0x23456789abcull);
+ cp_sta_mgr_set_our_avln (&ctx.cp, net);
+
+ /* Configure the test. */
+ ctx.cp.beacon.eks.kccd = 2;
+ ctx.cp.beacon.eks.kbc = BSU_BEACON_EKS_KBC_NEK;
+ ctx.cp.beacon.eks.new_eks = MAC_EKS_MIN + 1;
+
+ ctx.cp.beacon.last_countdown_call_date = last_countdown_call_date;
+ cp_beacon_beacon_not_received (&ctx.cp);
+
+ test_fail_unless (ctx.cp.beacon.eks.kccd == 1);
+ test_fail_unless (ctx.cp.beacon.eks.kbc == BSU_BEACON_EKS_KBC_NEK);
+ test_fail_unless (ctx.cp.beacon.eks.new_eks == MAC_EKS_MIN + 1);
+
+ ctx.cp.beacon.last_countdown_call_date = last_countdown_call_date;
+ cp_beacon_beacon_not_received (&ctx.cp);
+
+ test_fail_unless (ctx.cp.beacon.eks.kccd == 0);
+ test_fail_unless (ctx.cp.beacon.eks.kbc == BSU_BEACON_EKS_KBC_NB);
+ test_fail_unless (ctx.cp.beacon.eks.new_eks == MAC_EKS_MIN + 1);
+
+ test_beacon_uninit (&ctx);
+ }
+ test_end;
+}
+
+void
+test_suite_beacon_eks_change (test_t test)
+{
+ test_suite_begin (test, "Encryption key change");
+
+ test_case_beacon_eks_change_cco (test);
+ test_case_beacon_eks_change_sta (test);
+}
+
+void
+test_suite_beacon_mac_address_bentry (test_t test)
+{
+ test_suite_begin (test, "Central beacon");
+ test_case_begin (test, "Mac address bentry missing");
+ test_begin (test, "Beacon reception")
+ {
+ bsu_beacon_t *beacon;
+ cp_net_t *net;
+ cp_sta_own_data_t *own;
+ test_beacon_t ctx;
+ /** Init the context. */
+ test_beacon_init (&ctx);
+ ctx.cp.beacon.last_countdown_call_date_active = false;
+ /** Configure station own data. */
+ own = cp_sta_mgr_get_sta_own_data (&ctx.cp);
+ net = cp_sta_mgr_add_avln (&ctx.cp, 0, 1);
+ cp_sta_own_data_set_tei (&ctx.cp, 2);
+ cp_sta_own_data_set_mac_address (&ctx.cp, 0x23456789abcull);
+ cp_sta_mgr_set_our_avln (&ctx.cp, net);
+ own->nid_track = 1;
+ own->tei_track = 1;
+ own->cco_mac_addr_track = MAC_ZERO;
+ /** Create a central beacon. */
+ beacon = test_new_beacon ();
+ beacon->bmis.mac_address.present = false;
+ /* launch the test. */
+ cp_beacon_receive (&ctx.cp, beacon);
+ cp_beacon_get_and_process_beacon (&ctx.cp);
+ cp_sta_t *cco = cp_net_get_cco (&ctx.cp, net);
+ test_fail_unless (cco);
+ test_fail_unless (cp_sta_get_mac_address (cco) == MAC_BROADCAST);
+ test_fail_unless (cp_sta_get_cco_status (cco) == true);
+ slab_release (cco);
+ /* Mac address in the central beacon is present, but our track on the
+ * mac address is still MAC_ZERO. */
+ beacon = test_new_beacon ();
+ beacon->bmis.mac_address.present = true;
+ beacon->bmis.mac_address.mac_address =
+ MAC_ADDRESS (0x01, 0x23, 0x45, 0x67, 0x8a, 0xbc);
+ cp_beacon_receive (&ctx.cp, beacon);
+ cp_beacon_get_and_process_beacon (&ctx.cp);
+ cco = cp_net_get_cco (&ctx.cp, net);
+ test_fail_unless (cco);
+ /* The beacon is not processed. */
+ test_fail_unless (cp_sta_get_mac_address (cco)
+ != beacon->bmis.mac_address.mac_address);
+ test_fail_unless (cp_sta_get_cco_status (cco) == true);
+ slab_release (cco);
+ /* MAC address tracked is different from our CCo. */
+ beacon = test_new_beacon ();
+ beacon->bmis.mac_address.present = true;
+ beacon->bmis.mac_address.mac_address =
+ MAC_ADDRESS (0x00, 0x13, 0xd7, 0x00, 0x00, 0x01);
+ cp_beacon_receive (&ctx.cp, beacon);
+ cp_beacon_get_and_process_beacon (&ctx.cp);
+ cco = cp_net_get_cco (&ctx.cp, net);
+ test_fail_unless (cco);
+ test_fail_unless (cp_sta_get_mac_address (cco)
+ != beacon->bmis.mac_address.mac_address);
+ test_fail_unless (cp_sta_get_cco_status (cco) == true);
+ slab_release (cco);
+ /* Set the track mac address. */
+ own->cco_mac_addr_track =
+ MAC_ADDRESS (0x00, 0x13, 0xd7, 0x00, 0x00, 0x01);
+ /* This beacon should be processed as our CCo's central beacon. */
+ beacon = test_new_beacon ();
+ beacon->bmis.mac_address.present = true;
+ beacon->bmis.mac_address.mac_address =
+ MAC_ADDRESS (0x00, 0x13, 0xd7, 0x00, 0x00, 0x01);
+ cp_beacon_receive (&ctx.cp, beacon);
+ cp_beacon_get_and_process_beacon (&ctx.cp);
+ cco = cp_net_get_cco (&ctx.cp, net);
+ test_fail_unless (cco);
+ test_fail_unless (cp_sta_get_mac_address (cco)
+ == beacon->bmis.mac_address.mac_address);
+ test_fail_unless (cp_sta_get_cco_status (cco) == true);
+ slab_release (cco);
+ /* This one should no be processed as our CCo's central beacon. It
+ * comes from another one. */
+ beacon = test_new_beacon ();
+ beacon->bmis.mac_address.present = true;
+ beacon->bmis.mac_address.mac_address =
+ MAC_ADDRESS (0x01, 0x23, 0x45, 0x67, 0x8a, 0xbc);
+ cp_beacon_receive (&ctx.cp, beacon);
+ cp_beacon_get_and_process_beacon (&ctx.cp);
+ cco = cp_net_get_cco (&ctx.cp, net);
+ test_fail_unless (cco);
+ test_fail_unless (cp_sta_get_mac_address (cco) ==
+ MAC_ADDRESS (0x00, 0x13, 0xd7, 0x00, 0x00, 0x01));
+ test_fail_unless (cp_sta_get_cco_status (cco) == true);
+ slab_release (cco);
+ dbg_check (mac_store_sta_remove (ctx.cp.mac_store, 1));
+ test_beacon_uninit (&ctx);
+ }
+ test_end;
+}
+
+void
+test_suite_beacon_no_net (test_t t)
+{
+ test_suite_begin (t, "No net for beacon processing");
+ test_case_begin (t, "Beacon process");
+ u32 last_countdown_call_date = phy_date () - BSU_ACLF_BP_60HZ_TCK - 100;
+ test_begin (t, "let's go")
+ {
+ test_beacon_t ctx;
+ test_beacon_init (&ctx);
+ bsu_beacon_t *beacon = blk_alloc ();
+ cp_beacon_fill (&ctx.cp, beacon);
+ uint i;
+ for (i = 0; i < HPAV_AVLNS_NB_MAX; i++)
+ cp_sta_mgr_add_avln (&ctx.cp, i + 1, i);
+ test_fail_unless (!cp_sta_mgr_add_avln (&ctx.cp, 15, 30));
+ beacon->params.rx_parameters.snid = 0xf;
+ beacon->vf.nid = 0x1234;
+ beacon->params.direction = BSU_BEACON_DIRECTION_FROM_PLC;
+ cp_beacon_receive (&ctx.cp, beacon);
+ ctx.cp.beacon.last_countdown_call_date = last_countdown_call_date;
+ cp_beacon_get_and_process_beacon (&ctx.cp);
+ test_fail_unless (!cp_sta_mgr_get_avln (&ctx.cp, 15, 30));
+ test_beacon_uninit (&ctx);
+ }
+ test_end;
+}
+
+void
+test_suite_beacon_spoc_update (test_t test)
+{
+ test_beacon_t ctx;
+ u32 last_countdown_call_date = phy_date () - BSU_ACLF_BP_60HZ_TCK - 100;
+ test_beacon_init (&ctx);
+ test_suite_begin (test, "SPOC update");
+ test_case_begin (test, "Frequency error invalid and valid");
+ test_begin (test, "SPOC only updated if F.E. is valid")
+ {
+ cp_sta_own_data_t *own = cp_sta_mgr_get_sta_own_data (&ctx.cp);
+ ctx.cp.beacon.spoc_update_interval_ms = 1;
+ bsu_beacon_t *beacon = test_new_beacon ();
+ cp_sta_mgr_add_avln (&ctx.cp, beacon->params.rx_parameters.snid,
+ beacon->vf.nid);
+ ctx.cp.beacon.spoc_update_date = phy_date () - 1;
+ cp_sta_own_data_set_nid (&ctx.cp, beacon->vf.nid);
+ own->nid_track = beacon->vf.nid;
+ own->tei_track = beacon->vf.stei;
+ own->cco_mac_addr_track = TEST_CCO_MAC;
+ beacon->params.rx_parameters.snid =
+ cp_sta_own_data_get_snid (&ctx.cp);
+ /* Process a received beacon with a frequency error invalid. */
+ cp_beacon_receive (&ctx.cp, beacon);
+ ctx.cp.beacon.last_countdown_call_date = last_countdown_call_date;
+ cp_beacon_get_and_process_beacon (&ctx.cp);
+ test_fail_unless (!ctx.cp.beacon.spoc_updated);
+ /* This received beacon has a valid frequency error, SPOC should be
+ * updated. */
+ beacon = test_new_beacon ();
+ beacon->params.frequency_error_valid = true;
+ beacon->params.rx_parameters.snid =
+ cp_sta_own_data_get_snid (&ctx.cp);
+ ctx.cp.beacon.spoc_update_date = phy_date () - 1;
+ cp_beacon_receive (&ctx.cp, beacon);
+ ctx.cp.beacon.last_countdown_call_date = last_countdown_call_date;
+ cp_beacon_get_and_process_beacon (&ctx.cp);
+ test_fail_unless (ctx.cp.beacon.spoc_updated);
+ /* This received beacon has a invalid frequency error. SPOC updated
+ * flag stay at true. */
+ beacon = test_new_beacon ();
+ beacon->params.frequency_error_valid = false;
+ ctx.cp.beacon.spoc_update_date = phy_date () - 1;
+ cp_beacon_receive (&ctx.cp, beacon);
+ ctx.cp.beacon.last_countdown_call_date = last_countdown_call_date;
+ cp_beacon_get_and_process_beacon (&ctx.cp);
+ test_fail_unless (ctx.cp.beacon.spoc_updated);
+ }
+ test_end;
+ test_beacon_uninit (&ctx);
+}
+
+void
+test_suite_beacon_hoip_ended (test_t t)
+{
+ test_suite_begin (t, "Handover ended, avoid to send the last beacon");
+ test_case_begin (t, "Handover in progress");
+ test_beacon_t ctx;
+ test_beacon_init (&ctx);
+ test_begin (t, "Handover not ended")
+ {
+ ctx.bsu_updated = false;
+ ctx.cp.beacon.hoip.hoipcd = 2;
+ cp_beacon_cco_update_beacon_data (&ctx.cp);
+ test_fail_unless (ctx.bsu_updated);
+ }
+ test_end;
+ test_begin (t, "Handover Ended")
+ {
+ ctx.bsu_updated = false;
+ ctx.cp.beacon.hoip.hoipcd = 1;
+ cp_beacon_cco_update_beacon_data (&ctx.cp);
+ test_fail_unless (!ctx.bsu_updated);
+ }
+ test_end;
+ test_beacon_uninit (&ctx);
+}
+
+
+void
+test_suite_beacon_update_tracking (test_t t)
+{
+ test_suite_begin (t, "Update tracking");
+ test_case_begin (t, "Update tracking");
+ test_begin (t, "update tracking")
+ {
+ test_beacon_t ctx;
+ test_beacon_init (&ctx);
+ u8 tei = MAC_TEI_STA_MAX;
+ mac_t mac = MAC_ADDRESS (0x00, 0x13, 0xd7, 0x78, 0x79, 0x80);
+ cp_net_t *net = cp_sta_mgr_add_avln (&ctx.cp, 1, 1);
+ cp_sta_t *sta = cp_sta_mgr_sta_add (&ctx.cp, net, tei, mac);
+ cp_sta_own_data_t *own = cp_sta_mgr_get_sta_own_data (&ctx.cp);
+ test_fail_unless (own->tei_track != tei);
+ test_fail_unless (own->cco_mac_addr_track != mac);
+ cp_beacon_update_tracking (&ctx.cp, sta);
+ test_fail_unless (own->tei_track == tei);
+ test_fail_unless (own->cco_mac_addr_track == mac);
+ slab_release (sta);
+ test_beacon_uninit (&ctx);
+ }
+ test_end;
+}
+
+int
+main (void)
+{
+ test_t test;
+ test_init (test, 0, NULL);
+
+ test_case_beacon_uninit (test);
+ test_case_beacon__deactivate (test);
+ test_suite_beacon__beacon_generation (test);
+ test_suite_beacon_snid_change (test);
+ test_suite_beacon_hm_change (test);
+ test_suite_beacon_eks_change (test);
+ test_suite_beacon_mac_address_bentry (test);
+ test_suite_beacon_no_net (test);
+ test_suite_beacon_spoc_update (test);
+ test_suite_beacon_hoip_ended (test);
+ test_suite_beacon_update_tracking (test);
+
+ test_case_begin (test, "Memory allocation");
+ test_begin (test, "memory leaks")
+ {
+ test_fail_if (blk_check_memory () != true, "Memory leaks");
+ }
+ test_end;
+
+ test_result (test);
+ HAL_PLATFORM_EXIT (test_nb_failed (test) == 0 ? 0 : 1);
+ return test_nb_failed (test) == 0 ? 0 : 1;
+}
diff --git a/cesar/cp/eoc/beacon/test/utest2/src/beacon_scenario.c b/cesar/cp/eoc/beacon/test/utest2/src/beacon_scenario.c
new file mode 100644
index 0000000000..d6b668e8b9
--- /dev/null
+++ b/cesar/cp/eoc/beacon/test/utest2/src/beacon_scenario.c
@@ -0,0 +1,245 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/beacon_scenario.c
+ * \brief Unit test for the beacon module.
+ * \ingroup cp_beacon
+ *
+ * « long description »
+ */
+
+#include "common/std.h"
+#include "lib/slist.h"
+#include "lib/scenario/scenario.h"
+#include "lib/test.h"
+#include "cp/inc/context.h"
+#include "config.h"
+
+bsu_beacon_t beacon_data;
+extern bool cco_status;
+extern cp_net_t our_avln;
+
+void
+cp_beacon_receive (void *ul, bsu_beacon_t *beacon);
+
+void
+beacon_same_nid_test_case (test_t test)
+{
+ cp_t cp;
+ bsu_beacon_t *beacon;
+ scenario_globals_t globals = { .cp = &cp, };
+
+ /** Init the context. */
+ memset (&cp, 0, sizeof (cp_t));
+ mac_config_t mac_config;
+ memset (&mac_config, 0, sizeof (mac_config_t));
+ cp.mac_config = &mac_config;
+ cp_sta_mgr_init (&cp);
+ /* This device is cco */
+ cco_status = true;
+
+ test_case_begin (test, "get_and_process_beacon");
+
+ beacon = (bsu_beacon_t *) blk_alloc ();
+ memset (beacon, 0, sizeof (bsu_beacon_t));
+ beacon->vf.stei = 1;
+ beacon->vf.nid = 1;
+ beacon->params.rx_parameters.snid = 2;
+ /* the beacon is sent by an other cco than our */
+ beacon->bmis.mac_address.present = true;
+ beacon->bmis.mac_address.mac_address =
+ MAC_ADDRESS(0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC);
+ beacon->params.direction = BSU_BEACON_DIRECTION_FROM_PLC;
+ cp_beacon_receive (&cp, beacon);
+
+ test_begin (test, "cco receives beacon with same nid")
+ {
+ scenario_entry_t entries[] =
+ {
+ SCENARIO_ACTION (get_and_process_beacon),
+ SCENARIO_EVENT (cp_fsm_event_beacon_new,
+ .type = CP_FSM_EVENT_TYPE_BEACON_WITH_SAME_NID,
+ beacon, &our_avln, NULL),
+ SCENARIO_END
+ };
+ scenario_run (test, entries, &globals);
+ }
+ test_end;
+
+ beacon = (bsu_beacon_t *) blk_alloc ();
+ beacon->vf.stei = 4;
+ beacon->vf.nid = 1;
+ beacon->params.rx_parameters.snid = 1;
+ /* the beacon is sent by an other cco than our */
+ beacon->bmis.mac_address.present = true;
+ beacon->bmis.mac_address.mac_address =
+ MAC_ADDRESS(0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC);
+ beacon->params.direction = BSU_BEACON_DIRECTION_FROM_PLC;
+ cp_beacon_receive (&cp, beacon);
+ cco_status = false;
+
+ test_begin (test, "sta receives beacon")
+ {
+ scenario_entry_t entries[] =
+ {
+ SCENARIO_ACTION (get_and_process_beacon),
+ SCENARIO_END
+ };
+ scenario_run (test, entries, &globals);
+ }
+ test_end;
+}
+
+void
+beacon_nek_request_test_case_eoc (test_t test)
+{
+ cp_t cp;
+ bsu_beacon_t *beacon;
+ scenario_globals_t globals = { .cp = &cp, };
+
+ /** Init the context. */
+ memset (&cp, 0, sizeof (cp_t));
+ mac_config_t mac_config;
+ memset (&mac_config, 0, sizeof (mac_config_t));
+ cp.mac_config = &mac_config;
+ bsu_aclf_t aclf;
+ memset (&aclf, 0, sizeof (bsu_aclf_t));
+ cp.bsu_aclf = &aclf;
+ *((bsu_aclf_bp_t*) &cp.bsu_aclf->beacon_period_theo_tck) =
+ BSU_ACLF_BP_50HZ_TCK;
+ cp_sta_mgr_init (&cp);
+
+ mac_eks_t ref_eks_current = MAC_EKS_MIN + 2;
+ mac_eks_t ref_eks_next = MAC_EKS_MIN + 3;
+
+ mac_config.nek_mgr.store[0].eks = ref_eks_current;
+ mac_config.nek_mgr.store[1].eks = ref_eks_next;
+ mac_config.nek_mgr.next_nek = &mac_config.nek_mgr.store[1];
+
+ test_case_begin (test, "get_and_process_beacon");
+
+ /** Test with eks from the beacon different than the local next eks
+ * we check a to_leave event is sent. */
+ beacon = (bsu_beacon_t *) blk_alloc ();
+ beacon->bmis.eks.present = true;
+ beacon->bmis.eks.kbc = BSU_BEACON_EKS_KBC_NEK;
+ beacon->bmis.eks.new_eks = ref_eks_next + 1;
+ beacon->vf.stei = 1;
+ beacon->vf.nid = 1;
+ beacon->params.rx_parameters.snid = 1;
+ beacon->bmis.mac_address.present = false;
+ beacon->params.direction = BSU_BEACON_DIRECTION_FROM_PLC;
+ cp_beacon_receive (&cp, beacon);
+
+ test_begin (test, "different eks")
+ {
+ scenario_entry_t entries[] =
+ {
+ SCENARIO_ACTION (get_and_process_beacon),
+ SCENARIO_EVENT (cp_fsm_event_bare_new,
+ .type = CP_FSM_EVENT_TYPE_to_leave),
+ SCENARIO_END
+ };
+ scenario_run (test, entries, &globals);
+ }
+ test_end;
+
+ /** Test with matching eks
+ * we check that no event is sent. */
+ beacon = (bsu_beacon_t *) blk_alloc ();
+ beacon->bmis.eks.present = true;
+ beacon->bmis.eks.kbc = BSU_BEACON_EKS_KBC_NEK;
+ beacon->bmis.eks.new_eks = ref_eks_next;
+ beacon->vf.stei = 1;
+ beacon->vf.nid = 1;
+ beacon->params.rx_parameters.snid = 1;
+ beacon->bmis.mac_address.present = false;
+ beacon->params.direction = BSU_BEACON_DIRECTION_FROM_PLC;
+ cp_beacon_receive (&cp, beacon);
+
+ test_begin (test, "same eks")
+ {
+ scenario_entry_t entries[] =
+ {
+ SCENARIO_ACTION (get_and_process_beacon),
+ SCENARIO_END
+ };
+ scenario_run (test, entries, &globals);
+ }
+ test_end;
+
+ /** Test with everything ok, but the local next eks is invalid
+ * we check that a to_leave event is sent. */
+ mac_config.nek_mgr.next_nek = NULL;
+
+ beacon = (bsu_beacon_t *) blk_alloc ();
+ beacon->bmis.eks.present = true;
+ beacon->bmis.eks.kbc = BSU_BEACON_EKS_KBC_NEK;
+ beacon->bmis.eks.kccd = 1;
+ beacon->bmis.eks.new_eks = ref_eks_next;
+ beacon->vf.stei = 1;
+ beacon->vf.nid = 1;
+ beacon->params.rx_parameters.snid = 1;
+ beacon->bmis.mac_address.present = false;
+ beacon->params.direction = BSU_BEACON_DIRECTION_FROM_PLC;
+ cp_beacon_receive (&cp, beacon);
+ test_begin (test, "next eks is invalid")
+ {
+ scenario_entry_t entries[] =
+ {
+ SCENARIO_ACTION (get_and_process_beacon),
+ SCENARIO_EVENT (cp_fsm_event_bare_new,
+ .type = CP_FSM_EVENT_TYPE_to_leave),
+ SCENARIO_END
+ };
+ scenario_run (test, entries, &globals);
+ }
+ test_end;
+ /** Test the countdown elapsed and no nek was received. */
+ beacon = (bsu_beacon_t *) blk_alloc ();
+ beacon->vf.stei = 1;
+ beacon->vf.nid = 1;
+ beacon->bmis.eks.present = false;
+ beacon->params.rx_parameters.snid = 1;
+ beacon->bmis.mac_address.present = false;
+
+ beacon->params.direction = BSU_BEACON_DIRECTION_FROM_PLC;
+ cp_beacon_receive (&cp, beacon);
+ test_begin (test, "next eks is invalid")
+ {
+ scenario_entry_t entries[] =
+ {
+ SCENARIO_ACTION (get_and_process_beacon),
+ SCENARIO_EVENT (cp_fsm_event_bare_new,
+ .type =CP_FSM_EVENT_TYPE_to_leave),
+ SCENARIO_END
+ };
+ scenario_run (test, entries, &globals);
+ }
+ test_end;
+}
+
+int
+main (int argc, char **argv)
+{
+ test_t t;
+ test_init (t, argc, argv);
+
+ beacon_same_nid_test_case (t);
+ /* Use appropriate test. */
+ beacon_nek_request_test_case_eoc (t);
+ test_result (t);
+ return test_nb_failed (t) == 0 ? 0 : 1;
+}
+
+mac_t
+cp_sta_get_mac_address (cp_sta_t *ctx)
+{
+ dbg_assert (ctx);
+ return MAC_ADDRESS (0x00, 0x13, 0xd7, 0x11, 0x12, 0x13);
+}
diff --git a/cesar/cp/eoc/beacon/test/utest2/src/bsu_beacon_stub.c b/cesar/cp/eoc/beacon/test/utest2/src/bsu_beacon_stub.c
new file mode 100644
index 0000000000..20123664fd
--- /dev/null
+++ b/cesar/cp/eoc/beacon/test/utest2/src/bsu_beacon_stub.c
@@ -0,0 +1,69 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2010 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file bsu/beacon/stub/src/beacon.c
+ * \brief BSU bsu_beacon STUB functions.
+ * \ingroup bsu
+ *
+ * Functions to read and write bsu_beacons.
+ */
+#include "common/std.h"
+#include "common/defs/homeplugAV.h"
+#include "lib/bitstream.h"
+#include "bsu/beacon/beacon.h"
+#include "cp/defs.h"
+
+
+pb_beacon_t pbbeacon;
+extern bsu_beacon_t beacon_data;
+
+pb_beacon_t*
+bsu_beacon_write (bsu_beacon_t *beacon, bsu_beacon_type_t type,
+ mac_config_t *mac_config, pbproc_tx_beacon_params_t *params)
+{
+ return &pbbeacon;
+}
+
+
+/**
+ * Read the beacon entry header and length.
+ * \param stream the bitstream context.
+ * \param header the pointer to store the header.
+ * \param length the pointer to store the length.
+ * \return true on success, false otherwise.
+ */
+bool
+bsu_beacon_read_bmi_header (bitstream_t *bitstream, uint *header,
+ uint *length)
+{
+ *header = bitstream_read (bitstream, 8);
+ *length = bitstream_read (bitstream, 8);
+ if (BSU_BEACON_ENTRY_IS_BENTRY (*header))
+ return true;
+ return false;
+}
+
+bool
+bsu_beacon_read (pb_beacon_t *pbbeacon, bsu_beacon_t *beacon)
+{
+ beacon->vf.nid = 1;
+ beacon->vf.stei = 1;
+ beacon->vf.bt = BSU_BEACON_TYPE_CENTRAL;
+ beacon->bmis.mac_address.mac_address =
+ MAC_ADDRESS(0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC);
+ beacon->bmis.eks.present = beacon_data.bmis.eks.present;
+ beacon->bmis.eks.kbc = beacon_data.bmis.eks.kbc;
+ beacon->bmis.eks.new_eks = beacon_data.bmis.eks.new_eks;
+
+ return true;
+}
+
+void
+bsu_beacon_countdown (bsu_beacon_t *beacon)
+{
+}
diff --git a/cesar/cp/eoc/beacon/test/utest2/src/bsu_stub.c b/cesar/cp/eoc/beacon/test/utest2/src/bsu_stub.c
new file mode 100644
index 0000000000..1b2fd6fc3f
--- /dev/null
+++ b/cesar/cp/eoc/beacon/test/utest2/src/bsu_stub.c
@@ -0,0 +1,61 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2010 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/bsu_stub.c
+ */
+#include "common/std.h"
+#include "bsu/beacon/beacon.h"
+#include "bsu/aclf/aclf.h"
+#include "bsu/bsu.h"
+
+void
+bsu_aclf_beacon_period_start_date (bsu_aclf_t *ctx, u32 *bpsd, uint nb)
+{
+ uint i;
+
+ bpsd[0] = BSU_ACLF_BP_50HZ_TCK;
+
+ for (i = 1; i < nb; i++)
+ bpsd[i] = bpsd[i - 1] + BSU_ACLF_BP_50HZ_TCK;
+}
+
+u32
+bsu_aclf_beacon_period_start_date_next (bsu_aclf_t *ctx)
+{
+ return BSU_ACLF_BP_50HZ_TCK;
+}
+
+u32
+bsu_aclf_beacon_period_tck (bsu_aclf_t *ctx)
+{
+ return BSU_ACLF_BP_50HZ_TCK;
+}
+
+u32
+bsu_aclf_beacon_period_atu (bsu_aclf_t *ctx)
+{
+ return MAC_TCK_TO_ATU (ctx->beacon_period_tck);
+}
+
+
+void
+bsu_update (bsu_t *ctx, bsu_beacon_t *beacon, bsu_update_sta_type_t sta)
+{
+ bool *updated = (bool*) ctx;
+ *updated = true;
+}
+
+void
+bsu_update_discover_info (bsu_t *ctx, bsu_beacon_bmi_discover_info_t *discover)
+{
+}
+
+void
+bsu_update_nid_snid (bsu_t *ctx, u64 nid, u8 snid)
+{
+}
diff --git a/cesar/cp/eoc/beacon/test/utest2/src/bsu_stub_scenario.c b/cesar/cp/eoc/beacon/test/utest2/src/bsu_stub_scenario.c
new file mode 100644
index 0000000000..05689be7a6
--- /dev/null
+++ b/cesar/cp/eoc/beacon/test/utest2/src/bsu_stub_scenario.c
@@ -0,0 +1,55 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2010 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/bsu_stub.c
+ */
+#include "common/std.h"
+#include "bsu/beacon/beacon.h"
+#include "bsu/aclf/aclf.h"
+#include "bsu/bsu.h"
+
+void
+bsu_aclf_beacon_period_start_date (bsu_aclf_t *ctx, u32 *bpsd, uint nb)
+{
+ uint i;
+
+ bpsd[0] = BSU_ACLF_BP_50HZ_TCK;
+
+ for (i = 1; i < nb; i++)
+ bpsd[i] = bpsd[i - 1] + BSU_ACLF_BP_50HZ_TCK;
+}
+
+u32
+bsu_aclf_beacon_period_start_date_next (bsu_aclf_t *ctx)
+{
+ return BSU_ACLF_BP_50HZ_TCK;
+}
+
+u32
+bsu_aclf_beacon_period_tck (bsu_aclf_t *ctx)
+{
+ return BSU_ACLF_BP_60HZ_TCK;
+}
+
+u32
+bsu_aclf_beacon_period_atu (bsu_aclf_t *ctx)
+{
+ return MAC_TCK_TO_ATU (BSU_ACLF_BP_60HZ_TCK);
+}
+
+void
+bsu_update_discover_info (
+ bsu_t *ctx, bsu_beacon_bmi_discover_info_t *discover)
+{
+}
+
+void
+bsu_update_nid_snid (bsu_t *ctx, u64 nid, u8 snid)
+{
+}
+
diff --git a/cesar/cp/eoc/beacon/test/utest2/src/ca_stub.c b/cesar/cp/eoc/beacon/test/utest2/src/ca_stub.c
new file mode 100644
index 0000000000..aef5b49ce7
--- /dev/null
+++ b/cesar/cp/eoc/beacon/test/utest2/src/ca_stub.c
@@ -0,0 +1,65 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/beacon/test/central_beacon/src/ca_stub.c
+ * \brief « brief description »
+ * \ingroup « module »
+ *
+ * « long description »
+ */
+#include "common/std.h"
+#include "mac/ca/ca.h"
+
+static ca_schedule_t _casched[8];
+
+ca_schedule_t *
+ca_alloc_get_schedule (ca_t *ctx, uint index)
+{
+ if (index < 8)
+ {
+ return &_casched[index];
+ }
+
+ return NULL;
+}
+
+void
+ca_alloc_update_beacon_periods (ca_t *ctx,
+ ca_beacon_period_t *beacon_periods,
+ uint beacon_periods_nb) __attribute__ ((weak));
+
+void
+ca_alloc_update_beacon_periods (ca_t *ctx,
+ ca_beacon_period_t *beacon_periods,
+ uint beacon_periods_nb)
+{
+}
+
+
+void
+ca_mfs_remove (ca_t *ctx, mfs_tx_t *mfs)
+{
+}
+
+void
+ca_mfs_add (ca_t *ctx, mfs_tx_t *mfs)
+{
+ dbg_assert (ctx);
+ dbg_assert (mfs);
+}
+
+
+void
+ca_mfs_update_common (ca_t *ctx, mfs_tx_t *mfs, bool locked)
+{
+}
+
+void
+ca_mfs_hold_common (ca_t *ctx, mfs_tx_t *mfs, bool locked)
+{
+}
diff --git a/cesar/cp/eoc/beacon/test/utest2/src/fsm_stub.c b/cesar/cp/eoc/beacon/test/utest2/src/fsm_stub.c
new file mode 100644
index 0000000000..78ed2c857c
--- /dev/null
+++ b/cesar/cp/eoc/beacon/test/utest2/src/fsm_stub.c
@@ -0,0 +1,58 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/fsm_stub.c
+ * \brief FSM stub.
+ * \ingroup test
+ */
+#include "common/std.h"
+#include "cp/fsm/fsm.h"
+
+#include "lib/scenario/scenario.h"
+
+cp_fsm_event_t *
+cp_fsm_event_bare_new (cp_t *ctx, cp_fsm_event_type_t type)
+{
+ dbg_assert (ctx);
+ switch (type)
+ {
+ case CP_FSM_EVENT_TYPE_cco__snid_conflict:
+ case CP_FSM_EVENT_TYPE_net_list_empty:
+ case CP_FSM_EVENT_TYPE_sta_status_changed:
+ /* Ignore. */
+ return INVALID_PTR;
+ default:
+ ;
+ }
+ scenario_event (cp_fsm_event_bare_new, param);
+ test_fail_unless (type == param->type);
+ return INVALID_PTR;
+}
+
+cp_fsm_event_t *
+cp_fsm_event_beacon_new (
+ cp_t *ctx, cp_fsm_event_type_t type, bsu_beacon_t *beacon,
+ cp_net_t *net, cp_sta_t *sta)
+{
+ dbg_assert (ctx);
+ switch (type)
+ {
+ case CP_FSM_EVENT_TYPE_BEACON:
+ /* Ignore. */
+ return INVALID_PTR;
+ default:
+ ;
+ }
+ scenario_event (cp_fsm_event_beacon_new, param);
+ test_fail_unless (type == param->type);
+ test_fail_unless (beacon == param->beacon);
+ test_fail_unless (net == param->net);
+ test_fail_unless (sta == param->sta);
+ return INVALID_PTR;
+}
+
diff --git a/cesar/cp/eoc/beacon/test/utest2/src/pbproc_stub.c b/cesar/cp/eoc/beacon/test/utest2/src/pbproc_stub.c
new file mode 100644
index 0000000000..645e0a85db
--- /dev/null
+++ b/cesar/cp/eoc/beacon/test/utest2/src/pbproc_stub.c
@@ -0,0 +1,27 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2013 Mstar Semiconductor
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/pbproc_stub.c
+ * \brief pbproc stub
+ * \ingroup cp_eoc_beacon_test_utest2
+ *
+ */
+
+#include "common/std.h"
+#include "hal/phy/spoc/spoc.h"
+#include "mac/pbproc/pbproc.h"
+
+void
+pbproc_spoc_update (pbproc_t *pbproc, bool sync, s32 rho_q30)
+{
+}
+
+void
+pbproc_spoc_reset (pbproc_t *pbproc)
+{
+}
diff --git a/cesar/cp/eoc/beacon/test/utest2/src/phy_stub.c b/cesar/cp/eoc/beacon/test/utest2/src/phy_stub.c
new file mode 100644
index 0000000000..97baa8d937
--- /dev/null
+++ b/cesar/cp/eoc/beacon/test/utest2/src/phy_stub.c
@@ -0,0 +1,29 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/phy_stub.c
+ * \brief « brief description »
+ * \ingroup « module »
+ *
+ * « long description »
+ */
+#include "common/std.h"
+#include "hal/phy/phy.h"
+#include "bsu/aclf/aclf.h"
+
+u32
+phy_clock_get_zero_cross_captured_date (phy_t *phy)
+{
+ return 0;
+}
+
+u32
+phy_date ()
+{
+ return BSU_ACLF_BP_60HZ_TCK+1;
+}
diff --git a/cesar/cp/eoc/beacon/test/utest2/src/scenario_actions.c b/cesar/cp/eoc/beacon/test/utest2/src/scenario_actions.c
new file mode 100644
index 0000000000..1e71f46112
--- /dev/null
+++ b/cesar/cp/eoc/beacon/test/utest2/src/scenario_actions.c
@@ -0,0 +1,25 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/scenario_actions.c
+ * \brief Scenario actions.
+ * \ingroup test
+ */
+#include "common/std.h"
+#include "cp/beacon/beacon.h"
+#include "lib/scenario/scenario.h"
+
+#define __0(ACTION) \
+void \
+scenario_action_ ## ACTION ## _cb (scenario_globals_t *globals, \
+ scenario_params_t *params) \
+{ \
+ cp_beacon_ ## ACTION (globals->cp); \
+}
+
+__0 (get_and_process_beacon)
diff --git a/cesar/cp/eoc/beacon/test/utest2/src/secu_stub.c b/cesar/cp/eoc/beacon/test/utest2/src/secu_stub.c
new file mode 100644
index 0000000000..89f0605a3e
--- /dev/null
+++ b/cesar/cp/eoc/beacon/test/utest2/src/secu_stub.c
@@ -0,0 +1,25 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2009 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/secu_stub.c
+ * \brief cp/secu stub.
+ * \ingroup test
+ */
+#include "common/std.h"
+
+#include "cp/secu/secu.h"
+
+void
+cp_secu_pbb_dec_gen (cp_key_t enc, cp_key_t *dec)
+{
+ dec->key[0] = 0xdeaddead;
+ dec->key[1] = 0xdeaddead;
+ dec->key[2] = 0xdeaddead;
+ dec->key[3] = 0xdeaddead;
+}
+
diff --git a/cesar/cp/eoc/beacon/test/utest2/src/sta_mgr_stub.c b/cesar/cp/eoc/beacon/test/utest2/src/sta_mgr_stub.c
new file mode 100644
index 0000000000..6554aa77af
--- /dev/null
+++ b/cesar/cp/eoc/beacon/test/utest2/src/sta_mgr_stub.c
@@ -0,0 +1,217 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/beacon/test/src/sta_mgr_stub.c
+ * \brief « brief description »
+ * \ingroup « module »
+ *
+ * « long description »
+ */
+#include "common/std.h"
+#include "cp/sta/mgr/sta_own_data.h"
+#include "cp/sta/mgr/net.h"
+#include "cp/sta/mgr/inc/net.h"
+#include "cp/sta/mgr/inc/sta.h"
+#include "cp/sta/mgr/inc/sta_mgr.h"
+#include "cp/sta/mgr/sta_mgr.h"
+#include "cp/inc/context.h"
+
+cp_sta_own_data_t own_data;
+cp_net_t our_avln;
+bool cco_status;
+
+
+void
+cp_sta_mgr_init (cp_t *ctx)
+{
+ dbg_assert (ctx);
+
+ own_data.nid_track = 1;
+ own_data.tei_track = 1;
+ own_data.cco_mac_addr_track = MAC_ZERO;
+ cco_status = false;
+
+ memset (&ctx->sta_mgr, 0, sizeof (cp_sta_mgr_t));
+
+
+ // Initialise the slab cache.
+ slab_cache_init (&ctx->sta_mgr.sta_slab_cache,
+ "Station cache",
+ sizeof (cp_sta_private_t),
+ (slab_object_destructor_t) NULL);
+}
+
+
+cp_sta_own_data_t *
+cp_sta_mgr_get_sta_own_data (cp_t *ctx)
+{
+ return &own_data;
+}
+
+bool
+cp_sta_own_data_get_cco_status (cp_t *ctx)
+{
+ return cco_status;
+}
+
+bool
+cp_sta_own_data_get_pco_status (cp_t *ctx)
+{
+ return false;
+}
+
+u8
+cp_sta_mgr_get_num_discovered_stas (cp_t *ctx)
+{
+ return 0;
+}
+
+u8
+cp_sta_mgr_get_num_discovered_net (cp_t *ctx)
+{
+ return 0;
+}
+
+bool
+cp_sta_own_data_get_authenticated_status (cp_t *ctx)
+{
+ return true;
+}
+
+cp_tei_t
+cp_sta_own_data_get_tei (cp_t *ctx)
+{
+ return 2;
+}
+
+cp_net_t *
+cp_sta_mgr_get_our_avln (cp_t *ctx)
+{
+ return &our_avln;
+}
+
+cp_nid_t
+cp_sta_own_data_get_nid (cp_t *ctx)
+{
+ return 1;
+}
+
+u8
+cp_sta_mgr_get_slot_usage (cp_t *ctx)
+{
+ return 1;
+}
+
+u8
+cp_net_get_slot_id (cp_t *ctx, cp_net_t *net)
+{
+ return 0;
+}
+
+mac_network_mode_t
+cp_net_get_nm (cp_t *ctx, cp_net_t *net)
+{
+ return MAC_NM_UNCOORDINATED;
+}
+
+cp_sta_t *
+cp_sta_mgr_sta_add (cp_t *ctx, cp_net_t *net, cp_tei_t tei, mac_t mac_address)
+{
+ cp_sta_private_t *sta;
+
+ sta = (cp_sta_private_t *) slab_alloc (&ctx->sta_mgr.sta_slab_cache);
+ memset (sta, 0, sizeof (cp_sta_private_t));
+
+ // Add a reference on the station.
+ slab_addref (sta);
+
+ return &sta->public_data;
+}
+
+void
+cp_net_set_cco (cp_t *ctx, cp_net_t *net, cp_tei_t tei){}
+
+void
+cp_net_set_pco (cp_t *ctx, cp_net_t *net, cp_tei_t tei){}
+
+void
+cp_sta_set_authenticated_ (
+ cp_t *ctx, cp_sta_t *sta, bool auth __FL){}
+
+void
+cp_sta_own_data_set_snid (cp_t *ctx, cp_snid_t snid){}
+
+cp_sta_t *
+cp_sta_mgr_sta_get_assoc (cp_t *ctx, cp_net_t *net, cp_tei_t tei)
+{
+ return NULL;
+}
+
+cp_net_t *
+cp_sta_mgr_add_avln (cp_t *ctx, cp_snid_t snid, cp_nid_t nid)
+{
+ return &our_avln;
+}
+
+void
+cp_net_set_access (cp_t *ctx, cp_net_t *net, hpav_access_t access){}
+
+void
+cp_net_set_slot_id_and_usage (cp_t *ctx, cp_net_t *net,
+ u8 slot_id, u8 slot_usage){}
+
+cp_snid_t
+cp_sta_own_data_get_snid (cp_t *ctx)
+{
+ return 1;
+}
+
+u8
+cp_net_get_num_stas (cp_t *ctx, cp_net_t *net)
+{
+ dbg_assert (net);
+ return net->num_stas;
+}
+
+cp_sta_t *
+cp_net_sta_get_first (cp_t *ctx, cp_net_t *net, cp_net_sta_status_t assoc)
+{
+ return NULL;
+}
+
+cp_tei_t
+cp_sta_get_tei (cp_sta_t *ctx)
+{
+ return 0;
+}
+
+cp_sta_t *
+cp_net_sta_get_next (cp_t *ctx, cp_net_t *net, cp_sta_t *prev_sta)
+{
+ return NULL;
+}
+
+mac_t
+cp_sta_own_data_get_mac_address (cp_t *ctx)
+{
+ return MAC_ADDRESS(0x12, 0x34, 0x56, 0x78, 0x9A, 0xBD);
+}
+
+cp_sta_t *
+cp_sta_mgr_sta_get_from_mac (cp_t *ctx, mac_t mac_addr)
+{
+ return NULL;
+}
+
+cp_snid_t
+cp_net_get_snid (cp_t *ctx, cp_net_t *net)
+{
+ dbg_assert (net);
+
+ return net->snid;
+}
diff --git a/cesar/cp/eoc/beacon/test/utest2/src/stubs.c b/cesar/cp/eoc/beacon/test/utest2/src/stubs.c
new file mode 100644
index 0000000000..4a4aa3c161
--- /dev/null
+++ b/cesar/cp/eoc/beacon/test/utest2/src/stubs.c
@@ -0,0 +1,91 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2011 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/av/beacon/test/utest/src/stubs.c
+ * \brief Stubs functions.
+ * \ingroup cp_av_beacon
+ */
+#include "common/std.h"
+#include "cp/secu/secu.h"
+#include "bsu/beacon/beacon.h"
+#include "bsu/aclf/aclf.h"
+#include "bsu/bsu.h"
+#include "hal/phy/spoc/spoc.h"
+#include "mac/pbproc/pbproc.h"
+#include "mac/ca/ca.h"
+
+static ca_schedule_t _casched[8];
+
+ca_schedule_t *
+ca_alloc_get_schedule (ca_t *ctx, uint index)
+{
+ if (index < 8)
+ {
+ return &_casched[index];
+ }
+
+ return NULL;
+}
+
+void
+cp_secu_pbb_dec_gen (cp_key_t enc, cp_key_t *dec)
+{
+ dec->key[0] = 0xdeaddead;
+ dec->key[1] = 0xdeaddead;
+ dec->key[2] = 0xdeaddead;
+ dec->key[3] = 0xdeaddead;
+}
+
+void
+bsu_aclf_beacon_period_start_date (bsu_aclf_t *ctx, u32 *bpsd, uint nb)
+{
+ uint i;
+
+ bpsd[0] = BSU_ACLF_BP_50HZ_TCK;
+
+ for (i = 1; i < nb; i++)
+ bpsd[i] = bpsd[i - 1] + BSU_ACLF_BP_50HZ_TCK;
+}
+
+u32
+bsu_aclf_beacon_period_start_date_next (bsu_aclf_t *ctx)
+{
+ return BSU_ACLF_BP_50HZ_TCK;
+}
+
+u32
+bsu_aclf_beacon_period_tck (bsu_aclf_t *ctx)
+{
+ return BSU_ACLF_BP_50HZ_TCK;
+}
+
+u32
+bsu_aclf_beacon_period_atu (bsu_aclf_t *ctx)
+{
+ return MAC_TCK_TO_ATU (ctx->beacon_period_tck);
+}
+
+
+void
+bsu_update (bsu_t *ctx, bsu_beacon_t *beacon, bsu_update_sta_type_t sta)
+{
+ bool *updated = (bool*) ctx;
+ *updated = true;
+}
+
+u32
+phy_clock_get_zero_cross_captured_date (phy_t *phy)
+{
+ return 0;
+}
+
+u32
+phy_date ()
+{
+ return BSU_ACLF_BP_60HZ_TCK+1;
+}
diff --git a/cesar/cp/eoc/cco/action/Config b/cesar/cp/eoc/cco/action/Config
new file mode 100644
index 0000000000..d30b6a611b
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/Config
@@ -0,0 +1,2 @@
+CONFIG_CP_EOC_CCO_ACTION_WL_ALLOWED = n
+CONFIG_CP_EOC_CCO_ACTION_CON_ALLOWED = n
diff --git a/cesar/cp/eoc/cco/action/Module b/cesar/cp/eoc/cco/action/Module
new file mode 100644
index 0000000000..18a6edd1cc
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/Module
@@ -0,0 +1,7 @@
+SOURCES := cco_action.c drv.c
+
+ifeq ($(CONFIG_CP_EOC_IS_MASTER),y)
+ SOURCES += cco_action_master.c vs_eoc_master.c
+endif
+
+MODULES := cp/cco/action
diff --git a/cesar/cp/eoc/cco/action/cco_action.h b/cesar/cp/eoc/cco/action/cco_action.h
new file mode 100644
index 0000000000..327d202ee3
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/cco_action.h
@@ -0,0 +1,92 @@
+#ifndef cesar_cp_eoc_cco_action_cco_action_h
+#define cesar_cp_eoc_cco_action_cco_action_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2009 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cesar/cp/eoc/cco/action/cco_action.h
+ * \brief EoC CCo action Public functions.
+ * \ingroup cesar_cp_eoc_cco_action
+ *
+ */
+#include "cp/cp.h"
+#include "config/cp/eoc.h"
+
+#if CONFIG_CP_EOC_IS_MASTER
+#include "cco_action_master.h"
+#include "vs_eoc_master.h"
+#endif
+#include "drv.h"
+
+BEGIN_DECLS
+
+/**
+ * handle POWER_ON => CCO
+ * \param ctx the module context.
+ *
+ */
+void
+cp_eoc_cco_action__power_on_no_beacons (cp_t *ctx);
+
+/**
+ * Start CCO side FSM.
+ * \param ctx the module context.
+ *
+ */
+void
+cp_eoc_cco_action_poweron__idle__to_poweron (cp_t *ctx);
+
+/**
+ * handle POWER_ON => BCCO
+ * \param ctx the module context.
+ *
+ */
+void
+cp_eoc_cco_action__power_on_rx_beacon (cp_t *ctx);
+
+/**
+ * handle CCO => STOPPING
+ * \param ctx the module context.
+ *
+ */
+void
+cp_eoc_cco_action__cco_drv_mac_stop (cp_t *ctx);
+
+/**
+ * handle BCCO => STOPPING
+ * \param ctx the module context.
+ *
+ */
+void
+cp_eoc_cco_action__bcco_drv_mac_stop (cp_t *ctx);
+
+/**
+ * handle BCCO => CCO
+ * \param ctx the module context.
+ *
+ */
+void
+cp_eoc_cco_action__bcco_no_beacons (cp_t *ctx);
+
+/**
+ * Generate and send a eoc central beacon.
+ * \param ctx the module context.
+ *
+ */
+void
+cp_eoc_cco_action_send_central_beacon (cp_t *ctx);
+
+/**
+ * EoC scheduler. Should be called in each beacon period.
+ * \param user_data cp context.
+ */
+void
+cp_eoc_scheduler_prepare (void * user_data);
+
+END_DECLS
+
+#endif /* cesar_cp_eoc_cco_action_cco_action_h */
diff --git a/cesar/cp/eoc/cco/action/cco_action_master.h b/cesar/cp/eoc/cco/action/cco_action_master.h
new file mode 100644
index 0000000000..76e312fb2f
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/cco_action_master.h
@@ -0,0 +1,67 @@
+#ifndef cesar_cp_eoc_cco_action_cco_action_master_h
+#define cesar_cp_eoc_cco_action_cco_action_master_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2012 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cesar/cp/eoc/cco/action/cco_action_master.h
+ * \brief « brief description »
+ * \ingroup cesar_cp_eoc_cco_action
+ *
+ * « long description »
+ */
+#include "cp/cp.h"
+#include "cp/mme.h"
+
+/**
+ * Examine the received mme and create apropriate multi_sta_fsm event.
+ * \param ctx the module context.
+ */
+void
+cp_eoc_cco_action_event_dispatch (cp_t *ctx, cp_mme_rx_t *mme);
+
+/**
+ * TODO
+ */
+void
+cp_eoc_cco_action_vs__cco__cc_leave_ind (
+ cp_t *ctx, cp_mme_peer_t *peer);
+
+/**
+ * TODO
+ */
+void
+cp_eoc_cco_action_nek_change_start_timeout (cp_t *ctx);
+
+/**
+ * Manage new neck distribution
+ * \param ctx the CP context
+ * \param mme CM_SET_KEY.CNF MME received from the station
+ */
+void
+cp_eoc_cco_action__set_key_cnf (cp_t *ctx, cp_mme_rx_t *mme);
+
+/**
+ * TODO
+ */
+void
+cp_eoc_cco_action_nek_change_timeout (cp_t *ctx);
+
+/**
+ * Provide stations with new NEK
+ * \param ctx the CP context
+ */
+void
+cp_eoc_cco_action_nek_provide (cp_t *ctx);
+
+/**
+ * TODO
+ */
+void
+cp_eoc_cco_action__cco__leave_remove_timeout (cp_t *ctx);
+
+#endif /* cesar_cp_eoc_cco_action_cco_action_master_h */
diff --git a/cesar/cp/eoc/cco/action/doc/Makefile b/cesar/cp/eoc/cco/action/doc/Makefile
new file mode 100644
index 0000000000..309aae3dda
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/doc/Makefile
@@ -0,0 +1,48 @@
+PAGES = simple slave_states
+GRAPHS = simple slave_states
+
+DOTFLAGS =
+CONVERTFLAGS = -border 1 -bordercolor '\#d7d7d7'
+
+TOOLS_DIR = ../../../../../common/tools
+DOC_DIR = ../../../../../common/doc
+SDL2DOT = $(TOOLS_DIR)/sdl2dot
+SDLPS = $(TOOLS_DIR)/sdl.ps
+#EXTRACT_DOC = $(DOC_DIR)/extractdoc
+DOX2RST = $(DOC_DIR)/dox2rst
+
+#all: png rst
+all: png
+
+png: $(GRAPHS:%=%.png)
+ps: $(GRAPHS:%=%.ps)
+
+%.png: %.ps
+ convert $(CONVERTFLAGS) $< $@
+
+%.ps: %.dot Makefile
+ dot $(DOTFLAGS) -Tps -l $(SDLPS) -o $@ $<
+
+%.dot: %.sdl
+ $(SDL2DOT) $< > $@
+
+rst: top.rst
+html: png top.html
+odt: top.odt
+
+top.rst: $(PAGES:%=%.rst)
+ cat $^ > $@
+
+%.rst: ../%.h
+ $(EXTRACT_DOC) $< | $(DOX2RST) -s 50 > $@
+
+%.html: %.rst
+ rst2html $< $@
+
+%.odt: %.rst
+ rst2odt.py $< $@
+
+clean:
+ rm -f $(GRAPHS:%=%.ps) $(GRAPHS:%=%.png)
+ rm -f $(PAGES:%=%.rst) $(PAGES:%=%.html)
+ rm -f top.rst top.html top.odt
diff --git a/cesar/cp/eoc/cco/action/doc/cp_eoc_cco_action.odt b/cesar/cp/eoc/cco/action/doc/cp_eoc_cco_action.odt
new file mode 100644
index 0000000000..56d5615ce8
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/doc/cp_eoc_cco_action.odt
Binary files differ
diff --git a/cesar/cp/eoc/cco/action/doc/simple.sdl b/cesar/cp/eoc/cco/action/doc/simple.sdl
new file mode 100644
index 0000000000..9d80030d79
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/doc/simple.sdl
@@ -0,0 +1,12 @@
+((start)) -> (POWER_ON)
+
+POWER_ON:
+(POWER_ON) -no beacons -> (CCO)
+(POWER_ON) -rx beacon -> (BCCO)
+
+CCO:
+(CCO) -DRV_MAC_STOP -> (STOPPING)
+
+BCCO:
+(BCCO) -DRV_MAC_STOP -> (STOPPING)
+(BCCO) -no beacons -> (CCO)
diff --git a/cesar/cp/eoc/cco/action/doc/slave_states.sdl b/cesar/cp/eoc/cco/action/doc/slave_states.sdl
new file mode 100644
index 0000000000..91f23c5d6a
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/doc/slave_states.sdl
@@ -0,0 +1,26 @@
+((start)) -> (disconnected)
+
+disconnected:
+(disconnected) -CC_ASSOC.REQ -> <:STA in WL?> -y -> (associated)
+ <:STA in WL?> -n -> (unassociated)
+
+unassociated:
+(unassociated) -CC_ASSOC.REQ -> <:STA in WL?> -y -> (associated)
+ <:STA in WL?> -n -> (unassociated)
+(unassociated) -timeout_assoc -> (disconnected)
+
+associated:
+(associated) -CC_GET_KEY.REQ -> <:all keys granted?> -y -> (authenticated)
+ <:all keys granted?> -n -> (associated)
+(associated) -timeout_auth -> (disconnected)
+(associated) -cc_leave -> (disconnected)
+
+authenticated:
+(authenticated) -CC_SLEEP_ENTER.REQ -> (sleep_authenticated)
+(authenticated) -cc_leave -> (disconnected)
+(authenticated) -bad connection -> (disconnected)
+
+sleep_authenticated:
+(sleep_authenticated) -CC_SLEEP_EXIT.IND -> (authenticated)
+(sleep_authenticated) -bad connection -> (disconnected)
+
diff --git a/cesar/cp/eoc/cco/action/drv.h b/cesar/cp/eoc/cco/action/drv.h
new file mode 100644
index 0000000000..41dc04c9ee
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/drv.h
@@ -0,0 +1,34 @@
+#ifndef cp_eoc_cco_action_drv_h
+#define cp_eoc_cco_action_drv_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2009 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/cco/action/drv.h
+ * \brief Driver messages
+ * \ingroup cp_eoc_cco_action
+ *
+ * Entering and exiting sleep states
+ * ==========================
+ *
+ * This part relates to entering and exiting STA sleep states
+ *
+ * \image html
+ *
+ */
+#include "cp/cp.h"
+#include "cp/mme.h"
+
+BEGIN_DECLS
+
+void
+cp_eoc_cco_action_drv__drv_mcast_set_list_req (
+ cp_t *ctx, cp_mme_rx_t *mme);
+
+END_DECLS
+
+#endif /* cp_eoc_sta_action_drv_h */
diff --git a/cesar/cp/eoc/cco/action/inc/cco_action.h b/cesar/cp/eoc/cco/action/inc/cco_action.h
new file mode 100644
index 0000000000..abce669ef1
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/inc/cco_action.h
@@ -0,0 +1,38 @@
+#ifndef cesar_cp_eoc_cco_inc_cco_action_h
+#define cesar_cp_eoc_cco_inc_cco_action_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cesar/cp/eoc/cco/inc/cco_action.h
+ * \brief EoC CCo private functions.
+ * \ingroup cesar_cp_eoc_cco_action
+ *
+ */
+
+#include "cp/cco/action/inc/cco_action.h"
+
+/** Maximum number of released TEIs printed on console for each GC call. */
+#define CCO_STA_CON 4
+#define CP_EOC_CCO_EKS_RETRY 3
+#define CP_EOC_STA_ASSOCIATED_TIMEOUT_MS 5*1000
+
+/* Timeout value for the EKS exchange MME. */
+#define CP_CCO_ACTION_EKS_TIMEOUT_MS 3000
+
+BEGIN_DECLS
+
+/**
+ * TODO
+ */
+void
+cp_eoc_cco_action__change_nek (cp_t *ctx);
+
+
+END_DECLS
+
+#endif /* cesar_cp_eoc_cco_inc_cco_action_h */
diff --git a/cesar/cp/eoc/cco/action/src/cco_action.c b/cesar/cp/eoc/cco/action/src/cco_action.c
new file mode 100644
index 0000000000..4b2bc189fc
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/src/cco_action.c
@@ -0,0 +1,286 @@
+/* Cesar EOC project {{{
+ *
+ * Copyright (C) 2009 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/cco/action/src/cco_action.c
+ * \brief CCo Action functions.
+ * \ingroup cp_eoc_cco_action
+ *
+ */
+#include "common/std.h"
+
+/* Private headers. */
+#include "cp/inc/context.h"
+#include "cp/eoc/inc/dbg_print.h"
+#include "cp/sta/mgr/inc/sta.h"
+#include "cp/sta/mgr/inc/net.h"
+#include "mac/pbproc/inc/context.h"
+#include "cp/eoc/cco/action/inc/cco_action.h"
+
+/* Public headers. */
+#include "mac/common/defs.h"
+#include "cp/beacon/beacon.h"
+#include "cp/eoc/cco/bw/bw.h"
+#include "cp/eoc/cco/action/cco_action.h"
+#include "cp/eoc/sta/mgr/sta_mgr.h"
+#include "cp/eoc/sta/action/drv.h"
+#include "cp/sta/mgr/sta_mgr.h"
+#include "cp/sta/mgr/sta.h"
+#if CONFIG_CP_EOC_IS_MASTER
+#include "cp/eoc/multi_sta/action/multi_sta_action.h"
+#endif
+
+/* Config headers. */
+#include "config/cp/eoc/cco/action.h"
+
+#if CONFIG_CP_EOC_CCO_ACTION_CON_ALLOWED
+
+#include "mac/sar/inc/context.h"
+
+#define CONFIG_CP_EOC_CCO_CON_TIMEOUT_TCK MAC_MS_TO_TCK (950)
+#define SUB_STAT_ATTR(a, b, c) ((a).c - (b).c)
+#define SUB_STAT(c) SUB_STAT_ATTR (ctx->sar->stats, sar_offset, c)
+
+static int mem = 0, auth_time = 0;
+static sar_stats_t sar_offset;
+#endif
+
+
+void
+cp_eoc_cco_action__change_nek (cp_t *ctx)
+{
+ /* Program the timer to periodically change the NEK. */
+ cp_fsm_event_t * event = cp_fsm_event_bare_new (
+ ctx, CP_FSM_EVENT_TYPE_cco__nek_change);
+ cp_sta_core_gen_timed_event (ctx, &ctx->cco_action.nek_change,
+ event, HPAV_NEK_CHANGE_MS);
+}
+
+void
+cp_eoc_cco_action__power_on_no_beacons (cp_t *ctx)
+{
+ cp_tei_t tei;
+ cp_net_t *net;
+ cp_nid_t nid;
+ cp_snid_t snid;
+ cp_sta_own_data_t *own;
+ dbg_assert (ctx);
+ ctx->cco_action.last_date = phy_date ();
+ tei = MAC_TEI_CCO_MIN;
+ cp_sta_own_data_set_tei (ctx, tei);
+ cp_sta_own_data_set_authenticated_status (ctx, true);
+
+ cp_eoc_sta_action_drv__drv_sta_get_status_ind (ctx);
+
+ /* Set our AVLN. */
+ snid = cp_sta_own_data_get_snid (ctx);
+ nid = cp_sta_own_data_get_nid (ctx);
+
+ net = cp_sta_mgr_add_avln (ctx, snid, nid);
+ cp_sta_mgr_set_our_avln (ctx, net);
+
+ /* Set the CCo status in the station own data. */
+ own = cp_sta_mgr_get_sta_own_data (ctx);
+ own->nid_track = cp_sta_own_data_get_nid (ctx);
+ cp_sta_own_data_set_cco_status (ctx, true);
+ /* Set the NEK. */
+ cp_cco_action_gen_nek (ctx);
+ cp_beacon_change_nek (ctx, ctx->cco_action.new_nek.eks,
+ ctx->cco_action.new_nek.nek_enc, true /* now. */);
+ /* Start timer for periodic NEK exchange */
+ cp_eoc_cco_action__change_nek (ctx);
+ /* set wl status. In maximus accept all stations */
+#if MODULE_INCLUDED (hal_phy_maximus)
+ ctx->cco_action.wl_accept_all = 1;
+ ctx->cco_action.gm_default_output_power = 0;
+ cp_key_t key = cp_secu_generate_keys (ctx, (u8 *) MASTER_GOLDEN_DPW,
+ strlen (MASTER_GOLDEN_DPW), CP_SECU_SALT_KEY_DAK);
+ cp_sta_own_data_set_dak (ctx, key);
+#endif
+}
+
+void
+cp_eoc_cco_action_poweron__idle__to_poweron (cp_t *ctx)
+{
+ /* simulated call to setup cp status */
+ cp_eoc_cco_action__power_on_no_beacons (ctx);
+ cp_eoc_cco_bw_bp_allocations (ctx);
+ cp_beacon_poweron_init (ctx);
+ bsu_init_scheduler_prepare (ctx->bsu, cp_eoc_scheduler_prepare, ctx);
+ bsu_power_on (ctx->bsu, cp_sta_own_data_get_snid (ctx));
+ bsu_activate (ctx->bsu, true);
+ cp_beacon_cco_update_beacon_data (ctx);
+ sar_activate (ctx->sar, true);
+ pbproc_activate (ctx->pbproc, true);
+ ctx->sta_action.assoc.peer = CP_MME_PEER (MAC_BROADCAST,
+ MAC_TEI_UNASSOCIATED);
+ cp_fsm_post_new_event (ctx, bare, BEACON_NOT_RECEIVED);
+}
+
+void
+cp_eoc_cco_action__power_on_rx_beacon (cp_t *ctx)
+{
+}
+
+void
+cp_eoc_cco_action__cco_drv_mac_stop (cp_t *ctx)
+{
+}
+
+void
+cp_eoc_cco_action__bcco_drv_mac_stop (cp_t *ctx)
+{
+}
+
+void
+cp_eoc_cco_action__bcco_no_beacons (cp_t *ctx)
+{
+}
+
+/**
+ * bw scheduler
+ * \param user_data cp * context provided to BSU.
+ * call in DSR context on timer to assure that scheduling will be called
+ * in each beacon period.
+*/
+void
+cp_eoc_scheduler_prepare (void * user_data)
+{
+ /* only Master compilation */
+#if CONFIG_CP_EOC_IS_MASTER
+ cp_t * ctx = (cp_t *)user_data;
+ dbg_assert (ctx);
+ cp_eoc_cco_bw_scheduler (ctx);
+#endif
+}
+
+void
+cp_eoc_cco_action_send_central_beacon (cp_t *ctx)
+{
+ dbg_assert (ctx);
+ arch_dsr_lock ();
+ cp_eoc_cco_bw_bp_allocations (ctx);
+ arch_dsr_unlock ();
+#if CONFIG_CP_EOC_CCO_ACTION_CON_ALLOWED
+ if (++mem >= 10)
+ {
+ auth_time++;
+ mem = 0;
+ }
+ if (less_mod2p32 (ctx->cco_action.last_date, phy_date ()))
+ {
+ char temp[128];
+ sprintf (temp, "cco=%d blk=%d sar[%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d]"
+ " pb[%d,%d]\n",
+ auth_time, blk_free_nb (),
+ SUB_STAT (rx_jobs_nb),
+ ctx->sar->stats.rx_jobs_waiting_nb,
+ SUB_STAT (rx_pb_count),
+ SUB_STAT (pb_data_before_ssn_min),
+ SUB_STAT (pb_data_duplicated),
+ SUB_STAT (pb_mme_before_ssn_min),
+ SUB_STAT (pb_mme_duplicated),
+ SUB_STAT (rx_pb_crc_error_count),
+ SUB_STAT (mfs_tx_data_pb_expired_nb),
+ SUB_STAT (mfs_rx_data_pb_expired_nb),
+ SUB_STAT (mfs_tx_mme_pb_expired_nb),
+ SUB_STAT (mfs_rx_mme_pb_expired_nb),
+ ctx->pbproc->stats.tx_data_cancel,
+ ctx->pbproc->stats.tx_data_wack_noack);
+ int pos = 0, len = strlen (temp), len1;
+ while (pos < len)
+ {
+ char * temp1 = temp + pos, tmpa[32];
+ len1 = MIN (len, pos + 10);
+ strncpy (tmpa, temp1, len1 - pos);
+ tmpa[len1 - pos] = '\0';
+ printf (tmpa);
+ pos = len1;
+ }
+ sar_offset = ctx->sar->stats;
+ ctx->cco_action.last_date = phy_date ()
+ + CONFIG_CP_EOC_CCO_CON_TIMEOUT_TCK;
+ }
+#endif
+}
+
+void
+cp_eoc_cco_action_init (cp_t *ctx)
+{
+ dbg_assert (ctx);
+
+ memset (&ctx->cco_action, 0, sizeof (cp_cco_action_t));
+
+ ctx->cco_action.new_nek.eks = MAC_EKS_MAX; /* Initialized to MAC_EKS_MAX in
+ order to have MAC_EKS_MIN as the EKS of the first generated NEK. */
+}
+
+void
+cp_eoc_cco_action_uninit (cp_t *ctx)
+{
+ dbg_assert (ctx);
+}
+
+void
+cp_eoc_cco_action_garbage (cp_t *ctx)
+{
+ int i, released_sta_nb = 0, released_sta_tei[CCO_STA_CON];
+ dbg_assert (ctx);
+ cp_net_t *net = cp_sta_mgr_get_our_avln (ctx);
+
+ /* Check if associated sta got disconnected */
+ for (i = MAC_TEI_STA_MIN_EOC; i < MAC_TEI_STA_MAX; i++)
+ {
+ cp_sta_t * station = cp_sta_mgr_sta_get_assoc (ctx, net, i);
+ if (!station)
+ continue;
+ sta_t *sta = mac_store_sta_get (ctx->mac_store, i);
+ /* cp sta is assoc but no mac store sta? Really wrong. */
+ dbg_assert (sta);
+ /* station is declared dead by lower layers? */
+ if(!sta->tdma_poll && sta->authenticated)
+ station->authenticated_to_unassociated = true;
+ /* release station, no answers + to long in assoc. state */
+ if ((!sta->tdma_poll && sta->authenticated)
+ || (!sta->authenticated
+ && (station->associated_date_ms
+ + CP_EOC_STA_ASSOCIATED_TIMEOUT_MS
+ < cp_sta_core_get_date_ms (ctx))))
+ {
+#if CONFIG_CP_EOC_IS_MASTER
+ /* only Master compilation */
+ cp_eoc_multi_sta_action_put_sta_unassociated (ctx, station);
+#endif
+ /* Start release procedure */
+ cp_sta_mgr_release_station (ctx, i);
+
+ if (sta->authenticated)
+ {
+ if (released_sta_nb < CCO_STA_CON)
+ released_sta_tei[released_sta_nb] = i;
+ released_sta_nb ++;
+ DBG_PRINT_2 ("sta: rel, tei=%d", i);
+ }
+ else
+ DBG_PRINT ("sta: auth fail, tei=%d", i);
+ }
+ slab_release (station);
+ blk_release (sta);
+ }
+ /* Check if unassociated sta is still in the network */
+ cp_net_garbage_station_list (ctx, cp_sta_mgr_get_our_avln (ctx),
+ cp_sta_core_get_date_ms (ctx),
+ CP_NET_STA_UNASSOC);
+
+ if (released_sta_nb)
+ {
+ DBG_PRINTC ("rel: %d; TEI:", released_sta_nb);
+ for (i = 0; ((i < released_sta_nb) && (i < CCO_STA_CON)); i++)
+ DBG_PRINTC (" %d", released_sta_tei[i]);
+ DBG_PRINTC (released_sta_nb > CCO_STA_CON ? " ...\n" : "\n");
+ }
+}
diff --git a/cesar/cp/eoc/cco/action/src/cco_action_master.c b/cesar/cp/eoc/cco/action/src/cco_action_master.c
new file mode 100644
index 0000000000..cf568dbe22
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/src/cco_action_master.c
@@ -0,0 +1,524 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2012 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/cco/action/src/cco_action_master.c
+ * \brief EoC CCo Action functions.
+ * \ingroup cp_eoc_cco_action
+ *
+ * « long description »
+ */
+#include "common/std.h"
+#include "common/defs/eoc.h"
+
+/* Private headers. */
+#include "cp/inc/context.h"
+#include "cp/eoc/cco/action/inc/cco_action.h"
+#include "cp/eoc/multi_sta_fsm/inc/events.h"
+#include "cp/eoc/inc/dbg_print.h"
+
+/* Public headers. */
+#include "cp/eoc/cco/action/cco_action_master.h"
+#include "cp/eoc/multi_sta/action/multi_sta_action.h"
+#include "cp/eoc/multi_sta_fsm/fsm.h"
+#include "cp/eoc/sta/mgr/sta_mgr.h"
+
+
+/**
+ * Last transaction ends try next STA.
+ * \param ctx the module context.
+ * \return The next station to start a transaction with.
+ */
+static cp_sta_t *
+cp_cco_action_nek_next_sta (cp_t *ctx)
+{
+ cp_sta_t *sta;
+ cp_sta_t *sta_next = NULL;
+ cp_net_t *net;
+ dbg_assert (ctx);
+
+ ctx->cco_action.eks_eoc_retry = 0;
+ net = cp_sta_mgr_get_our_avln (ctx);
+ sta = cp_sta_mgr_sta_get_from_mac (
+ ctx, ctx->cco_action.eks_sta_current_peer.mac);
+ while (sta)
+ {
+ sta_next = cp_net_sta_get_next (ctx, net, sta);
+ if (sta_next &&
+ cp_eoc_sta_mgr_sta_is_assoc (ctx, net, cp_sta_get_tei (sta_next)))
+ {
+ cp_sta_get_peer (sta_next, &ctx->cco_action.eks_sta_current_peer);
+ return sta_next;
+ }
+ sta = sta_next;
+ }
+
+ return NULL;
+}
+
+/**
+ * Request the station for the NEK change.
+ * \param ctx the module context.
+ * \param sta the station to start the NEK exchange.
+ */
+static void
+cp_eoc_cco_action_nek_change_start (cp_t *ctx, cp_sta_t *sta)
+{
+ cp_msg_cm_set_key_req_t data;
+
+ dbg_assert (ctx);
+ dbg_assert (sta);
+
+ /* Get the station peer to send the MME. */
+ cp_sta_get_peer (sta, &ctx->cco_action.eks_sta_current_peer);
+ /* Check status */
+ if (cp_sta_get_authenticated (ctx, sta))
+ {
+ /* Initialise the protocol run. */
+ cp_secu_protocol_run_new (&ctx->cco_action.eks_prun, 1,
+ &ctx->rnd);
+
+ /* Fill the data structure with key type == NONCE_ONLY. */
+ memset (&data, 0, sizeof (cp_msg_cm_set_key_req_t));
+ data.key_type = CP_MSG_KEY_NONCE_ONLY;
+ data.cco_cap = CP_CCO_LEVEL;
+ data.nid = cp_sta_own_data_get_nid (ctx);
+
+ /* Send the MME. */
+ cp_msg_cm_set_key_req_send (ctx,
+ &ctx->cco_action.eks_sta_current_peer,
+ CP_MME_PEKS_DAK,
+ &ctx->cco_action.eks_prun,
+ &data);
+ }
+ cp_eoc_cco_action_nek_change_start_timeout (ctx);
+}
+
+void
+cp_eoc_cco_action_event_dispatch (cp_t *ctx, cp_mme_rx_t *mme)
+{
+ dbg_assert_ptr (ctx);
+ dbg_assert_ptr (mme);
+ cp_eoc_multi_sta_fsm_event_mme_t e;
+ cp_eoc_multi_sta_fsm_event_type_t type;
+
+ cp_net_t *net;
+ cp_sta_t *sta = NULL;
+ sta_t *mac_sta = NULL;
+ cp_tei_t tei = MAC_TEI_UNASSOCIATED;
+ net = cp_sta_mgr_get_our_avln (ctx);
+ /* On ASSOC.REQ fsm has to be initialized */
+ if (mme->mmtype == CC_ASSOC_REQ)
+ {
+ sta = cp_sta_mgr_sta_get_from_mac (ctx, mme->peer.mac);
+
+#if CONFIG_CP_EOC_CCO_ACTION_WL_ALLOWED
+ /* Accept all stations, no matter of white list */
+ if (ctx->cco_action.wl_accept_all)
+ {
+ DBG_PRINT ("sta: allowed");
+ if (sta)
+ {
+ slab_release (sta);
+ cp_sta_mgr_sta_remove (ctx, sta);
+ }
+ tei = cp_eoc_multi_sta_action_compute_tei (ctx);
+ sta = cp_sta_mgr_sta_add (ctx, net, tei, mme->peer.mac);
+ dbg_assert (sta);
+ cp_eoc_multi_sta_fsm_init (ctx, sta);
+ sta->multi_sta.allowed = true;
+ sta->multi_sta.dak = cp_sta_own_data_get_dak (ctx);
+ sta->multi_sta.output_level =
+ ctx->cco_action.gm_default_output_power;
+ sta->multi_sta.to_leave = false;
+ sta->expired_date_ms = cp_sta_core_get_date_ms (ctx)
+ + EOC_STA_PRESENCE_TIMEOUT_INSIDE_AVLN_MS;
+ }
+ if (!sta)
+ {
+ DBG_PRINT_2("sta: not_in_wl");
+ sta = cp_sta_mgr_sta_add (ctx, net, MAC_TEI_UNASSOCIATED,
+ mme->peer.mac);
+ cp_eoc_multi_sta_fsm_init (ctx, sta);
+ sta->multi_sta.allowed = false;
+ sta->multi_sta.to_leave = false;
+ sta->expired_date_ms = cp_sta_core_get_date_ms (ctx)
+ + EOC_STA_PRESENCE_TIMEOUT_INSIDE_AVLN_MS;
+ dbg_assert (sta);
+ }
+ else if (sta->multi_sta.to_leave == false)
+ {
+ if (sta->multi_sta.allowed == true)
+ {
+ tei = cp_sta_get_tei (sta);
+ DBG_PRINT_2 ("sta: allowed, tei=%d", tei);
+ sta = cp_sta_mgr_sta_add (ctx, net, tei ,mme->peer.mac);
+ sta->expired_date_ms = cp_sta_core_get_date_ms (ctx)
+ + EOC_STA_PRESENCE_TIMEOUT_INSIDE_AVLN_MS;
+ sta->multi_sta.allowed = true;
+ }
+ else
+ {
+ tei = cp_sta_get_tei (sta);
+ DBG_PRINT_2 ("sta: not_allowed, tei=%d", tei);
+ if (tei)
+ {
+ sta = cp_sta_mgr_sta_add (ctx, net,
+ MAC_TEI_UNASSOCIATED,
+ mme->peer.mac);
+ dbg_assert (sta);
+ sta->expired_date_ms = cp_sta_core_get_date_ms (ctx)
+ + EOC_STA_PRESENCE_TIMEOUT_INSIDE_AVLN_MS;
+ sta->multi_sta.allowed = false;
+ }
+ }
+ }
+
+ if ((tei) && (sta->multi_sta.allowed == true)
+ && (sta->multi_sta.to_leave == false))
+ {
+ mac_sta = mac_store_sta_get (ctx->mac_store, tei);
+ mac_sta->tdma_poll = true;
+ mac_sta->empty_poll = 0;
+ mac_sta->bp_before_poll = 0;
+ ca_sta_update (ctx->ca, mac_sta);
+ blk_release (mac_sta);
+ mfs_tx_t *mfs;
+ bool added;
+
+ cp_sta_set_authenticated (ctx, sta, false);
+ mfs = mac_store_mfs_add_tx (ctx->mac_store, false, true,
+ MAC_LID_NONE, tei, &added);
+ if (added)
+ sar_mfs_add (ctx->sar, (mfs_t *)mfs);
+ if (mfs)
+ blk_release (mfs);
+
+ uint i;
+ for (i = 0; i < MAC_CAP_NB; i++)
+ {
+ mfs = mac_store_mfs_add_tx (ctx->mac_store, false, false,
+ MAC_LLID_MIN + i, tei, &added);
+ if (added)
+ sar_mfs_add (ctx->sar, (mfs_t *)mfs);
+ if (mfs)
+ {
+ mfs->cap = i;
+ blk_release (mfs);
+ }
+ }
+ }
+#else
+ if (sta)
+ {
+ slab_release (sta);
+ tei = cp_sta_get_tei (sta);
+ cp_sta_mgr_sta_remove_from_mac (ctx, mme->peer.mac);
+ }
+ if (tei == MAC_TEI_UNASSOCIATED)
+ tei = cp_eoc_multi_sta_action_compute_tei (ctx);
+ if (tei != MAC_TEI_UNASSOCIATED)
+ sta = cp_sta_mgr_sta_add (ctx, net, tei, mme->peer.mac);
+ dbg_assert (sta);
+ cp_eoc_multi_sta_fsm_init (ctx, sta);
+ cp_sta_set_assoc_confirmed (ctx, sta, false);
+ cp_sta_set_authenticated (ctx, sta, false);
+ mac_sta = mac_store_sta_get (ctx->mac_store, tei);
+ mac_sta->tdma_poll = true;
+ mac_sta->empty_poll = 0;
+ mac_sta->bp_before_poll = 0;
+ ca_sta_update (ctx->ca, mac_sta);
+
+ blk_release (mac_sta);
+
+ bool added;
+ mfs_tx_t *mfs;
+
+ mfs = mac_store_mfs_add_tx (ctx->mac_store, false, true,
+ MAC_LID_NONE, tei, &added);
+ if (added)
+ sar_mfs_add (ctx->sar, (mfs_t *)mfs);
+ if (mfs)
+ blk_release (mfs);
+
+ uint i;
+ for (i = 0; i < MAC_CAP_NB; i++)
+ {
+ mfs = mac_store_mfs_add_tx (ctx->mac_store, false, false,
+ MAC_LLID_MIN + i, tei, &added);
+ if (added)
+ sar_mfs_add (ctx->sar, (mfs_t *)mfs);
+ if (mfs)
+ {
+ mfs->cap = i;
+ blk_release (mfs);
+ }
+ }
+#endif /* CONFIG_CP_EOC_CCO_ACTION_WL_ALLOWED */
+ }
+ else
+ {
+ /* The station already exists get the TEI. */
+ sta = cp_sta_mgr_sta_get_from_mac (ctx, mme->peer.mac);
+ dbg_assert (sta);
+ }
+
+ switch (mme->mmtype)
+ {
+ case CC_ASSOC_REQ:
+ type = CP_EOC_MULTI_STA_FSM_EVENT_TYPE_CC_ASSOC_REQ;
+ break;
+ case CM_GET_KEY_REQ:
+ type = CP_EOC_MULTI_STA_FSM_EVENT_TYPE_CC_GET_KEY_REQ;
+ break;
+ default:
+ dbg_assert (0);
+ break;
+ }
+ if (sta->multi_sta.to_leave == false)
+ {
+ e.event.type = type;
+ e.event.handler = cp_eoc_multi_sta_fsm_event_handler;
+ e.mme = mme;
+ cp_eoc_multi_sta_fsm_handled_event (ctx, sta, &(e.event));
+ }
+ slab_release (sta);
+}
+
+void
+cp_eoc_cco_action_vs__cco__cc_leave_ind (cp_t *ctx, cp_mme_peer_t *peer)
+{
+ dbg_assert (ctx);
+ dbg_assert (peer);
+
+ cp_eoc_multi_sta_fsm_event_mme_t e;
+ cp_eoc_multi_sta_fsm_event_type_t type;
+ cp_sta_t *sta;
+ cp_net_t *net;
+ cp_tei_t tei;
+
+ type = CP_EOC_MULTI_STA_FSM_EVENT_TYPE_cc_leave;
+ net = cp_sta_mgr_get_our_avln (ctx);
+ tei = peer->tei;
+
+ sta = cp_sta_mgr_sta_get_assoc (ctx, net, tei);
+ if (sta)
+ {
+ cp_sta_own_data_t *own = cp_sta_mgr_get_sta_own_data (ctx);
+ e.event.type = type;
+ e.event.handler = cp_eoc_multi_sta_fsm_event_handler;
+
+ cp_msg_cc_leave_ind_send (ctx, peer,
+ CP_MSG_CC_LEAVE_IND_REASON_USER_REQUEST,
+ cp_net_get_nid(ctx, net));
+
+ DBG_PRINT ("sta: CC_LEAVE sent, tei=%d", tei);
+ cp_eoc_multi_sta_fsm_handled_event (ctx, sta, &(e.event));
+ own->num_leave ++;
+
+ slab_release(sta);
+ }
+}
+
+void
+cp_eoc_cco_action_nek_change_start_timeout (cp_t *ctx)
+{
+ cp_fsm_event_t *event;
+ /* Start the timeout timer. */
+ event = cp_fsm_event_bare_new (ctx, CP_FSM_EVENT_TYPE_nek_timeout);
+ cp_sta_core_gen_timed_event (ctx, &ctx->cco_action.eks_timer,
+ event, CP_CCO_ACTION_EKS_TIMEOUT_MS);
+}
+
+void
+cp_eoc_cco_action__set_key_cnf (cp_t *ctx, cp_mme_rx_t *mme)
+{
+ cp_msg_cm_set_key_cnf_t data;
+ cp_sta_t *sta;
+ cp_net_t *net;
+ dbg_assert (ctx);
+ dbg_assert (mme);
+
+ /* Ignore delayed replies */
+ if (mme->peer.tei != ctx->cco_action.eks_sta_current_peer.tei)
+ return;
+
+ net = cp_sta_mgr_get_our_avln (ctx);
+ sta = cp_sta_mgr_sta_get_assoc (ctx, net,
+ ctx->cco_action.eks_sta_current_peer.tei);
+
+ if (sta && cp_sta_get_authenticated (ctx, sta))
+ slab_release (sta);
+ else
+ {
+ if (sta)
+ slab_release (sta);
+ return;
+ }
+
+ /* Stop the time out timer. */
+ cp_sta_core_stop_timed_or_cyclic_event (ctx, &ctx->cco_action.eks_timer);
+
+ if (cp_msg_cm_set_key_cnf_receive (ctx, mme, &data)
+ && (mme->prun.pid == 1))
+ {
+ if (cp_secu_protocol_check (&ctx->cco_action.eks_prun, &mme->prun,
+ CP_SECU_PROTOCOL_RUN_CHECK_RESULT_NEXT)
+ && (mme->prun.pmn == 2))
+ {
+ uint i;
+ cp_msg_cm_set_key_req_t data_req;
+ data_req.key_type = CP_MSG_KEY_NEK;
+ data_req.cco_cap = CP_CCO_LEVEL;
+ data_req.nid = cp_sta_own_data_get_nid (ctx);
+ data_req.new_eks = ctx->cco_action.new_nek.eks;
+ for (i = 0; i < COUNT (ctx->cco_action.new_nek.nek_enc.key); i++)
+ data_req.new_key.key[i]
+ = ctx->cco_action.new_nek.nek_enc.key[i];
+
+ /* Prepare the EKS NEK exchange. */
+ ctx->cco_action.eks_prun = mme->prun;
+ cp_secu_protocol_next (&ctx->cco_action.eks_prun, &ctx->rnd,
+ false /* not last*/);
+
+ cp_msg_cm_set_key_req_send (
+ ctx, &ctx->cco_action.eks_sta_current_peer,
+ CP_MME_PEKS_DAK, &ctx->cco_action.eks_prun, &data_req);
+ }
+ /* Key successfully exchanged with current tei, go to next tei. */
+ else if (cp_secu_protocol_check (
+ &ctx->cco_action.eks_prun, &mme->prun,
+ CP_SECU_PROTOCOL_RUN_CHECK_RESULT_LAST)
+ && (mme->prun.pmn == 0xff))
+ {
+ if ((sta = cp_cco_action_nek_next_sta (ctx)))
+ {
+ cp_eoc_cco_action_nek_change_start (ctx, sta);
+ slab_release (sta);
+ }
+ else
+ {
+ cp_beacon_change_nek (ctx, ctx->cco_action.new_nek.eks,
+ ctx->cco_action.new_nek.nek_enc, false);
+ /* Set the EKS_current to the new one. */
+ ctx->cco_action.eks_sta_current_peer.tei =
+ MAC_TEI_UNASSOCIATED;
+ DBG_PRINT("key_exc: e[%d]", ctx->cco_action.new_nek.eks);
+ }
+ return;
+ }
+ }
+ /* Irregular events, errors or delayed message from current tei are
+ * ignored. */
+ cp_eoc_cco_action_nek_change_start_timeout (ctx);
+}
+
+void
+cp_eoc_cco_action_nek_change_timeout (cp_t *ctx)
+{
+ cp_sta_t *sta;
+ cp_net_t *net;
+ dbg_assert (ctx);
+ uint tei = ctx->cco_action.eks_sta_current_peer.tei;
+ uint retry_count = ctx->cco_action.eks_eoc_retry;
+ /* Stop the time out timer. */
+ cp_sta_core_stop_timed_or_cyclic_event (ctx, &ctx->cco_action.eks_timer);
+ ctx->cco_action.eks_eoc_retry ++;
+ /* exec is over. Timeout is late. Simply return. */
+ if (ctx->cco_action.eks_sta_current_peer.tei == MAC_TEI_UNASSOCIATED)
+ {
+ cp_fsm_branch (ctx, CCO, nek_timeout, yes);
+ return;
+ }
+ net = cp_sta_mgr_get_our_avln (ctx);
+ sta = cp_sta_mgr_sta_get_assoc (
+ ctx, net, ctx->cco_action.eks_sta_current_peer.tei);
+ if (sta && (ctx->cco_action.eks_eoc_retry < CP_EOC_CCO_EKS_RETRY))
+ {
+ cp_eoc_cco_action_nek_change_start (ctx, sta);
+ slab_release (sta);
+ cp_fsm_branch (ctx, CCO, nek_timeout, yes);
+ }
+ else
+ {
+ if (sta)
+ {
+ sta_t *mac_sta = mac_store_sta_get (
+ ctx->mac_store, ctx->cco_action.eks_sta_current_peer.tei);
+ dbg_assert (mac_sta);
+ mac_sta->tdma_poll = false;
+ ca_sta_update (ctx->ca, mac_sta);
+ blk_release (mac_sta);
+ slab_release (sta);
+ }
+ if ((sta = cp_cco_action_nek_next_sta (ctx)))
+ {
+ cp_eoc_cco_action_nek_change_start (ctx, sta);
+ slab_release (sta);
+ cp_fsm_branch (ctx, CCO, nek_timeout, yes);
+ }
+ else
+ {
+ ctx->cco_action.eks_sta_current_peer.tei = MAC_TEI_UNASSOCIATED;
+ cp_fsm_branch (ctx, CCO, nek_timeout, no);
+ }
+ }
+ DBG_PRINT ("mme_to[%d, %d]", tei, retry_count);
+}
+
+void
+cp_eoc_cco_action_nek_provide (cp_t *ctx)
+{
+ cp_net_t *net;
+ cp_sta_t *sta;
+ dbg_assert (ctx);
+
+ cp_sta_core_stop_timed_or_cyclic_event (ctx, &ctx->cco_action.nek_change);
+
+ if (ctx->cco_action.eks_sta_current_peer.tei == MAC_TEI_UNASSOCIATED)
+ {
+ cp_cco_action_gen_nek (ctx);
+
+ net = cp_sta_mgr_get_our_avln (ctx);
+ sta = cp_net_sta_get_first (ctx, net, CP_NET_STA_ASSOC);
+
+ ctx->cco_action.eks_eoc_retry = 0;
+ if (sta)
+ {
+ cp_eoc_cco_action_nek_change_start (ctx, sta);
+ slab_release (sta);
+ }
+ DBG_PRINT("key_exc: s[%d]", ctx->cco_action.new_nek.eks);
+ }
+ else
+ DBG_PRINT("key_exc: wrk");
+ cp_eoc_cco_action__change_nek (ctx);
+}
+
+void
+cp_eoc_cco_action__cco__leave_remove_timeout (cp_t *ctx)
+{
+ dbg_assert(ctx);
+ cp_sta_t *sta;
+ cp_sta_t *sta_next;
+ cp_net_t *net;
+
+ /* Stop the time out timer. */
+ cp_sta_core_stop_timed_or_cyclic_event (
+ ctx, &ctx->cco_action.leave_timer);
+
+ net = cp_sta_mgr_get_our_avln (ctx);
+
+ sta = cp_net_sta_get_first (ctx, net, CP_NET_STA_ASSOC);
+ while (sta)
+ {
+ sta_next = cp_net_sta_get_next (ctx, net, sta);
+ if(sta->multi_sta.to_leave == true)
+ cp_sta_mgr_sta_remove (ctx, sta);
+ sta = sta_next;
+ }
+}
diff --git a/cesar/cp/eoc/cco/action/src/drv.c b/cesar/cp/eoc/cco/action/src/drv.c
new file mode 100644
index 0000000000..0684c63441
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/src/drv.c
@@ -0,0 +1,49 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2011 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/cco/action/src/drv.c
+ * \brief DRV functions.
+ * \ingroup cp_eoc_cco_action
+ */
+
+#include "common/std.h"
+
+/* Private headers. */
+#include "cp/inc/context.h"
+#include "cp/msg/inc/msg_drv.h"
+
+/* Public headers. */
+#include "cp/eoc/cco/action/drv.h"
+#include "hal/arch/arch.h"
+#include "cl/mcast.h"
+
+void
+cp_eoc_cco_action_drv__drv_mcast_set_list_req (
+ cp_t *ctx, cp_mme_rx_t *mme)
+{
+ /* Check parameters. */
+ dbg_assert (ctx);
+ dbg_assert (mme);
+
+ cp_msg_drv_result_t result = CP_MSG_DRV_RESULT_FAILURE;
+ igmp_groups_t *igmp_groups = NULL;
+ /* Lock DSR to avoid the CL to use corrupted entries. */
+ arch_dsr_lock ();
+ igmp_groups = cl_get_igmp_groups (ctx->cl);
+ if (cp_msg_drv_mcast_set_list_req_receive (
+ ctx, mme, &igmp_groups->nb, igmp_groups->group_mac,
+ igmp_groups->nb_total_members, igmp_groups->member_mac))
+ result = CP_MSG_DRV_RESULT_SUCCESS;
+ else
+ igmp_groups->nb = 0;
+ cl_update_igmp_groups (ctx->cl);
+ arch_dsr_unlock ();
+ cp_msg_drv_any_cnf_send (ctx, &mme->peer,
+ DRV_MCAST_SET_LIST_CNF,
+ result);
+}
diff --git a/cesar/cp/eoc/cco/action/src/vs_eoc_master.c b/cesar/cp/eoc/cco/action/src/vs_eoc_master.c
new file mode 100644
index 0000000000..76a949dae9
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/src/vs_eoc_master.c
@@ -0,0 +1,821 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2012 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/cco/action/src/vs_eoc_master.c
+ * \brief EoC master action, VS EoC MMEs req receive/cnf send
+ * functions
+ * \ingroup cp_eoc_cco_action
+ *
+ * « long description »
+ */
+#include "common/std.h"
+
+/* Private headers. */
+#include "cp/inc/context.h"
+#include "cp/eoc/msg/inc/msg_vs.h"
+#include "cp/eoc/inc/dbg_print.h"
+#include "mac/pbproc/inc/context.h"
+#include "ce/rx/bitloading/inc/nsr.h"
+#include "cp/eoc/msg/inc/msg_vs.h"
+
+/* Public headers. */
+#include "cp/eoc/cco/action/cco_action.h"
+#include "cp/eoc/cco/bw/service.h"
+#include "cp/eoc/sta/mgr/sta_mgr.h"
+
+/* Config headers. */
+#include "config/cp/eoc/cco.h"
+
+#include "cp/sta/action/misc.h"
+
+/* ff:ff:ff:d7:13:00 */
+const mac_t MASTER_GOLDEN_MAC = 0xFFFFFFD71300ull;
+
+void
+cp_eoc_cco_action_vs__stopped__vs_cco_set_wl_req (
+ cp_t *ctx, cp_mme_rx_t *mme)
+{
+#if CONFIG_CP_EOC_CCO_ACTION_WL_ALLOWED
+ uint i;
+ cp_net_t *net;
+ uint numStas = 0;
+ cp_tei_t stas_teis[MAC_TEI_STA_NB];
+ mac_t stas_macs[MAC_TEI_STA_NB];
+ u8 stas_authorizations[MAC_TEI_STA_NB];
+ u8 stas_output_levels[MAC_TEI_STA_NB];
+ u32 stas_start_times[MAC_TEI_STA_NB];
+ u32 stas_end_times[MAC_TEI_STA_NB];
+ cp_key_t stas_daks[MAC_TEI_STA_NB];
+ cp_dpw_t stas_dpws[MAC_TEI_STA_NB];
+ u8 stas_actions[MAC_TEI_STA_NB];
+
+ ctx->cco_action.wl_complete = false;
+ net = cp_sta_mgr_get_our_avln (ctx);
+ bool ok = cp_msg_vs_eoc_cco_set_wl_req_receive (
+ ctx, mme, &numStas, stas_teis, stas_macs, stas_authorizations,
+ stas_output_levels, stas_start_times, stas_end_times, stas_daks,
+ stas_dpws, stas_actions);
+
+ if (ok)
+ {
+ ctx->cco_action.wl_accept_all = 0;
+ /* Check for golden master special parameters. */
+ if (numStas == 1)
+ {
+ cp_key_t key = cp_secu_generate_keys (
+ ctx, (u8*) MASTER_GOLDEN_DPW,
+ strlen (MASTER_GOLDEN_DPW), CP_SECU_SALT_KEY_DAK);
+ if (MASTER_GOLDEN_MAC == stas_macs[0]
+ && !memcmp (&key, stas_daks, sizeof (key)))
+ {
+ cp_sta_own_data_set_dak (ctx, key);
+ ctx->cco_action.wl_accept_all = 1;
+ ctx->cco_action.gm_default_output_power =
+ stas_output_levels[0];
+ }
+ }
+ for (i = 0; i < numStas && !ctx->cco_action.wl_accept_all; i++)
+ {
+ cp_sta_t *sta;
+ sta = cp_sta_mgr_sta_get_from_mac(ctx, stas_macs[i]);
+
+ if (stas_actions[i] == 1)
+ {
+ if (sta)
+ {
+ if (cp_eoc_sta_mgr_sta_is_assoc (ctx, net, stas_teis[i]))
+ {
+ cp_mme_peer_t peer = CP_MME_PEER (stas_macs[i],
+ stas_teis[i]);
+ sta->sta_in_wl = false;
+ cp_eoc_cco_action_vs__cco__cc_leave_ind (ctx, &peer);
+ sta->multi_sta.to_leave = true;
+ }
+ else
+ {
+ sta->sta_in_wl = false;
+ cp_sta_mgr_sta_remove (ctx, sta);
+ }
+ slab_release (sta);
+ }
+ }
+ else if (sta)
+ {
+ sta->sta_in_wl = true;
+ sta->multi_sta.allowed = stas_authorizations[i];
+ sta->multi_sta.output_level = stas_output_levels[i];
+
+ if (cp_eoc_sta_mgr_sta_is_assoc (ctx, net, stas_teis[i]))
+ {
+ cp_mme_peer_t peer = CP_MME_PEER (stas_macs[i],
+ stas_teis[i]);
+
+ if ((sta->multi_sta.allowed == true) &&
+ (sta->multi_sta.dak.key[0] == stas_daks[i].key[0]) &&
+ (sta->multi_sta.dak.key[1] == stas_daks[i].key[1]) &&
+ (sta->multi_sta.dak.key[2] == stas_daks[i].key[2]) &&
+ (sta->multi_sta.dak.key[3] == stas_daks[i].key[3]))
+ {
+ cp_eoc_cco_action_vs__cco__vs_set_out_lev_ind (ctx,
+ &peer);
+ }
+ else
+ {
+ sta->sta_in_wl = false;
+ cp_eoc_cco_action_vs__cco__cc_leave_ind (ctx, &peer);
+ sta->multi_sta.to_leave = true;
+ }
+ }
+ sta->multi_sta.dak = stas_daks[i];
+ sta->multi_sta.start_time = stas_start_times[i];
+ sta->multi_sta.end_time = stas_end_times[i];
+ sta->multi_sta.action = stas_actions[i];
+ sta->multi_sta.to_leave = false;
+ ((cp_sta_private_t *)sta)->tei = stas_teis[i];
+ ((cp_sta_private_t *)sta)->mac_address = stas_macs[i];
+ ((cp_sta_private_t *)sta)->net = net;
+ ((cp_sta_private_t *)sta)->dpw = stas_dpws[i];
+ slab_release (sta);
+ }
+ else
+ {
+ if (MAC_TEI_IS_STA (stas_teis[i]))
+ {
+ cp_sta_private_t *station;
+
+ station = (cp_sta_private_t *)
+ cp_sta_init (&ctx->sta_mgr.sta_slab_cache);
+
+ station->tei = stas_teis[i];
+ station->mac_address = stas_macs[i];
+ station->net = net;
+ if (stas_macs[i] != MAC_BROADCAST)
+ cp_eoc_sta_mgr_sta_insert_into_stas_list(ctx, station);
+
+ station->public_data.sta_in_wl = true;
+ station->public_data.multi_sta.allowed =
+ stas_authorizations[i];
+ station->public_data.multi_sta.output_level =
+ stas_output_levels[i];
+ station->public_data.multi_sta.start_time =
+ stas_start_times[i];
+ station->public_data.multi_sta.end_time =
+ stas_end_times[i];
+ station->public_data.multi_sta.dak = stas_daks[i];
+ station->public_data.multi_sta.action = stas_actions[i];
+ station->public_data.multi_sta.to_leave = false;
+ station->public_data.multi_sta.ports.port[0].index_of_service =
+ SERVICE_NOT_LIMITED;
+ station->dpw = stas_dpws[i];
+ }
+ }
+ }
+ }
+ /* Prevent double timer invocation in case of more than one
+ * VS_EOC_CCO_SET_WL_REQ message. */
+ cp_sta_core_stop_timed_or_cyclic_event (
+ ctx, &ctx->cco_action.leave_timer);
+
+ cp_fsm_event_t *event = cp_fsm_event_bare_new (
+ ctx, CP_FSM_EVENT_TYPE_leave_remove_delay);
+
+ cp_sta_core_gen_timed_event (ctx, &ctx->cco_action.leave_timer,
+ event, LEAVE_REMOVE_WAIT_TIMEOUT_MS);
+
+ cp_msg_vs_eoc_cco_set_wl_cnf_send (
+ ctx, &mme->peer, VS_EOC_CCO_SET_WL_CNF,
+ ok ? CP_MSG_VS_EOC_CCO_SET_WL_REQ_RESULT_SUCCESS
+ : CP_MSG_VS_EOC_CCO_SET_WL_REQ_RESULT_FAILURE);
+ /* If wl MME contains exactly WL_MME_MAX_ENTRY_COUNT entries,
+ an aditional wl MME always follows it. */
+ ctx->cco_action.wl_complete = (numStas != WL_MME_MAX_ENTRY_COUNT);
+ DBG_PRINT ("wl: ent_rcvd");
+#endif /* CONFIG_CP_EOC_CCO_ACTION_WL_ALLOWED */
+}
+
+void
+cp_eoc_cco_action_vs__cco__vs_set_out_lev_ind (
+ cp_t *ctx, cp_mme_peer_t *peer)
+{
+ dbg_assert (ctx);
+ dbg_assert (peer);
+
+ cp_sta_t *sta;
+ cp_net_t *net;
+ cp_tei_t tei;
+ uint output_level = 0;
+ bool ok;
+
+ net = cp_sta_mgr_get_our_avln (ctx);
+ tei = peer->tei;
+
+ sta = cp_sta_mgr_sta_get_assoc (ctx, net, tei);
+ if (sta)
+ {
+ output_level = sta->multi_sta.output_level;
+ ok = true;
+ slab_release (sta);
+ }
+ else
+ ok = false;
+
+ if (ok)
+ cp_msg_vs_eoc_cco_set_out_lev_ind_send (ctx, peer, output_level);
+}
+
+void
+cp_eoc_cco_action_vs_eoc__cco__vs_eoc_set_ports_req (
+ cp_t *ctx, cp_mme_rx_t *mme)
+{
+ dbg_assert (ctx);
+ dbg_assert (mme);
+
+ uint i = 0;
+ uint j = 0;
+ uint numStas = 0;
+ cp_msg_vs_eoc_set_ports_req_result_t result =
+ CP_MSG_VS_EOC_SET_PORTS_REQ_RESULT_SUCCESS;
+ mac_t stas_macs[MAC_TEI_STA_NB];
+ u8 stas_port_ed[MAC_TEI_STA_NB][PORT_NB];
+ u8 stas_port_service[MAC_TEI_STA_NB][PORT_NB];
+
+ bool ok = cp_msg_vs_eoc_set_ports_req_receive (
+ ctx, mme, &numStas, stas_macs, stas_port_ed, stas_port_service);
+
+ if (ok)
+ {
+ for (i = 0; i < numStas; i++)
+ {
+ cp_sta_t *sta = cp_sta_mgr_sta_get_from_mac (ctx, stas_macs[i]);
+ if(sta)
+ {
+ for (j = 0; j < PORT_NB; j++)
+ {
+ sta->multi_sta.ports.port[j].enabled = stas_port_ed[i][j];
+ sta->multi_sta.ports.port[j].index_of_service =
+ stas_port_service[i][j];
+ }
+ slab_release (sta);
+ }
+ else
+ result = CP_MSG_VS_EOC_SET_PORTS_REQ_RESULT_FAILURE;
+ }
+ }
+ else
+ result = CP_MSG_VS_EOC_SET_PORTS_REQ_RESULT_FAILURE;
+ cp_msg_vs_eoc_set_ports_cnf_send (
+ ctx, &mme->peer, VS_EOC_SET_PORTS_CNF, result);
+
+}
+
+void
+cp_eoc_cco_action_vs_eoc__cco__vs_eoc_get_topo_req (
+ cp_t *ctx, cp_mme_rx_t *mme)
+{
+ dbg_assert_ptr (ctx);
+ dbg_assert_ptr (mme);
+
+ cp_net_t *net = NULL;
+
+ /* Sent data. */
+ cp_msg_vs_eoc_get_topo_cnf_result_t result;
+ u8 sta_nb = 0;
+ u8 assoc_sta_nb = 0;
+ u8 unassoc_sta_nb = 0;
+
+ cp_sta_t *sta = NULL;
+
+ /* Call Receive MME. */
+ bool ok = true;
+
+ /* Fill data for sending. */
+ if (ok)
+ {
+ net = cp_sta_mgr_get_our_avln (ctx);
+ dbg_assert_ptr (net);
+ sta_nb = net->num_stas;
+ assoc_sta_nb = net->num_associated_stas;
+ unassoc_sta_nb = sta_nb - assoc_sta_nb;
+
+ result = CP_MSG_VS_EOC_GET_TOPO_CNF_RESULT_SUCCESS;
+ }
+ else
+ {
+ result = CP_MSG_VS_EOC_GET_TOPO_CNF_RESULT_FAILURE;
+ }
+
+ /* Call Send MME. */
+ cp_mme_tx_t *reply = cp_msg_vs_eoc_get_topo_cnf_send_begin (
+ ctx, &mme->peer, result, sta_nb);
+
+ if ((result == CP_MSG_VS_EOC_GET_TOPO_CNF_RESULT_SUCCESS) && net)
+ {
+ /* Go through associated stations. */
+ for (sta = cp_net_sta_get_first (ctx, net, CP_NET_STA_ASSOC);
+ sta;
+ sta = cp_net_sta_get_next (ctx, net, sta))
+ {
+ sta_t *station = mac_store_sta_get (
+ ctx->mac_store, cp_sta_get_tei (sta));
+ s8 agc_offset = cp_agc_offset (sta->multi_sta.output_level);
+ if (station && station->authenticated)
+ {
+ if (sta->authenticated_to_unassociated)
+ {
+ cp_msg_vs_eoc_get_topo_cnf_send_sta (
+ ctx, reply, cp_sta_get_mac_address (sta),
+ 3 /* re-authenticated between
+ two successive get_topo calls. */,
+ station->agc_gain + agc_offset);
+ }
+ else
+ {
+ cp_msg_vs_eoc_get_topo_cnf_send_sta (
+ ctx, reply, cp_sta_get_mac_address (sta),
+ 2 /* authenticated*/,
+ station->agc_gain + agc_offset);
+ }
+ }
+ else
+ {
+ cp_msg_vs_eoc_get_topo_cnf_send_sta (
+ ctx, reply, cp_sta_get_mac_address (sta),
+ 1 /* associated*/,
+ station->agc_gain + agc_offset);
+
+ }
+
+ blk_release (station);
+ sta->authenticated_to_unassociated = false;
+ }
+ /* Go through unassociated stations. */
+ for (sta = cp_net_sta_get_first (ctx, net, CP_NET_STA_UNASSOC);
+ sta;
+ sta = cp_net_sta_get_next (ctx, net, sta))
+ {
+ cp_msg_vs_eoc_get_topo_cnf_send_sta (
+ ctx, reply, cp_sta_get_mac_address (sta),
+ 0 /* unassociated */,
+ 0);
+ }
+ }
+ cp_msg_vs_eoc_get_topo_cnf_send_end (ctx, reply);
+}
+
+void
+cp_eoc_cco_action_vs__stopped__vs_cco_get_wl_req (
+ cp_t *ctx, cp_mme_rx_t *mme)
+{
+#if CONFIG_CP_EOC_CCO_ACTION_WL_ALLOWED
+ uint numStas = 0;
+ bool ok;
+ u8 first_wl_index_nb;
+ cp_tei_t stas_teis[MAC_TEI_STA_NB];
+ mac_t stas_macs[MAC_TEI_STA_NB];
+ u8 stas_authorizations[MAC_TEI_STA_NB];
+ u8 stas_output_levels[MAC_TEI_STA_NB];
+ u32 stas_start_times[MAC_TEI_STA_NB];
+ u32 stas_end_times[MAC_TEI_STA_NB];
+ cp_key_t stas_daks[MAC_TEI_STA_NB];
+ cp_dpw_t stas_dpws[MAC_TEI_STA_NB];
+ u8 stas_actions[MAC_TEI_STA_NB];
+
+ ok = cp_msg_vs_eoc_cco_get_wl_req_receive (ctx, mme, &first_wl_index_nb);
+
+ if (ok)
+ {
+ cp_eoc_sta_mgr_get_wl (
+ ctx, &numStas, stas_teis, stas_macs, stas_authorizations,
+ stas_output_levels, stas_start_times, stas_end_times, stas_daks,
+ stas_dpws, stas_actions);
+ }
+
+ cp_msg_vs_eoc_cco_get_wl_cnf_send (
+ ctx, ok ? CP_MSG_VS_EOC_CCO_GET_WL_REQ_RESULT_SUCCESS :
+ CP_MSG_VS_EOC_CCO_GET_WL_REQ_RESULT_FAILURE,
+ &mme->peer, numStas, stas_teis, stas_macs, stas_authorizations,
+ stas_output_levels, stas_start_times,
+ stas_end_times, stas_daks, stas_dpws, stas_actions,
+ first_wl_index_nb);
+#endif /* CONFIG_CP_EOC_CCO_ACTION_WL_ALLOWED */
+}
+
+void
+cp_eoc_cco_action_vs_eoc__cco__vs_eoc_cco_get_ports_req (
+ cp_t *ctx, cp_mme_rx_t *mme)
+{
+ dbg_assert (ctx);
+ dbg_assert (mme);
+
+ uint numStas = 0;
+ bool ok;
+ u8 first_mac_index_nb;
+ mac_t stas_macs[MAC_TEI_STA_NB];
+ bool stas_port_ed[MAC_TEI_STA_NB][PORT_NB];
+ u8 stas_port_service[MAC_TEI_STA_NB][PORT_NB];
+
+ ok = cp_msg_vs_eoc_cco_get_ports_req_receive (ctx, mme,
+ &first_mac_index_nb);
+
+ if (ok)
+ {
+ cp_eoc_sta_mgr_get_ports (ctx, &numStas, stas_macs, stas_port_ed,
+ stas_port_service);
+ }
+
+ cp_msg_vs_eoc_cco_get_ports_cnf_send (
+ ctx, &mme->peer, ok ? CP_MSG_VS_EOC_CCO_GET_PORTS_REQ_RESULT_SUCCESS :
+ CP_MSG_VS_EOC_CCO_GET_PORTS_REQ_RESULT_FAILURE,
+ numStas, stas_macs, stas_port_ed, stas_port_service,
+ first_mac_index_nb);
+}
+
+void
+cp_eoc_cco_action_vs_eoc__cco__vs_eoc_cco_set_services_req (
+ cp_t *ctx, cp_mme_rx_t *mme)
+{
+ dbg_assert (ctx);
+ dbg_assert (mme);
+
+ uint i, j;
+ cp_msg_vs_eoc_cco_set_services_req_result_t result =
+ CP_MSG_VS_EOC_CCO_SET_SERVICES_REQ_RESULT_SUCCESS;
+
+ u8 command;
+ u8 services_number;
+ u8 service_indexes[MAX_NUMBER_OF_SERVICES];
+ u8 classifier_rules[MAX_NUMBER_OF_SERVICES];
+ u16 classifier_values[MAX_NUMBER_OF_SERVICES];
+ u8 acses[MAX_NUMBER_OF_SERVICES];
+ u8 parameters_numbers[MAX_NUMBER_OF_SERVICES];
+ u16 parameters_lists[MAX_NUMBER_OF_SERVICES][SERVICE_PARAMETERS_NB];
+
+ bool ok = cp_msg_vs_eoc_cco_set_services_req_receive (
+ ctx, mme, &command, &services_number, service_indexes,
+ classifier_rules, classifier_values, acses, parameters_numbers,
+ parameters_lists);
+
+ if (ok)
+ {
+ /* Add services. */
+ if (command == 0)
+ {
+ for (i = 0; i < services_number; i++)
+ {
+ u16 parameters_list_tmp[SERVICE_PARAMETERS_NB];
+ cp_eoc_cco_bw_service_t *srv = NULL;
+ bool service_exists = true;
+ srv = cp_eoc_cco_bw_service_find (ctx, service_indexes[i]);
+ if (!srv)
+ {
+ srv = cp_eoc_cco_bw_service_alloc (ctx);
+ service_exists = false;
+ }
+ srv->service_index = service_indexes[i];
+ srv->classsif_rule = classifier_rules[i];
+ srv->classif_value = classifier_values[i];
+ srv->acs = acses[i];
+
+ for (j = 0; j < parameters_numbers[i]; j++)
+ {
+ parameters_list_tmp[j] = parameters_lists[i][j];
+ }
+
+ for (j = parameters_numbers[i];
+ j < SERVICE_PARAMETERS_NB; j++)
+ {
+ parameters_list_tmp[j] = 0x00;
+ }
+
+ srv->latency = parameters_list_tmp[0];
+ srv->jitter = parameters_list_tmp[1];
+ srv->dload_pir = parameters_list_tmp[2];
+ srv->uload_pir = parameters_list_tmp[3];
+ srv->dload_cir = parameters_list_tmp[4];
+ srv->uload_cir = parameters_list_tmp[5];
+ srv->qos_prio = parameters_list_tmp[6];
+
+ if (!service_exists)
+ {
+ cp_eoc_cco_bw_service_add (ctx, srv);
+ }
+ }
+ }
+ /* Remove services. */
+ else if (command == 1)
+ {
+ for(i = 0; i < services_number; i++)
+ {
+ bool ok2 = cp_eoc_cco_bw_service_remove (
+ ctx, service_indexes[i]);
+ if(!ok2)
+ {
+ result = CP_MSG_VS_EOC_CCO_SET_SERVICES_REQ_RESULT_FAILURE;
+ }
+ }
+ }
+ /* Remove all services. */
+ else if (command == 2)
+ {
+ cp_eoc_cco_bw_service_t *service = NULL;
+ list_node_t *list_node;
+
+ while (!list_empty (&ctx->schedule.services.service_list))
+ {
+ list_node
+ = list_pop_back (&ctx->schedule.services.service_list);
+ service = PARENT_OF (cp_eoc_cco_bw_service_t, service_node,
+ list_node);
+ slab_release (service);
+ ctx->schedule.services.service_nb --;
+ }
+ }
+ /* Invalid command code. */
+ else
+ {
+ result = CP_MSG_VS_EOC_CCO_SET_SERVICES_REQ_RESULT_FAILURE;
+ }
+ }
+ else
+ {
+ result = CP_MSG_VS_EOC_CCO_SET_SERVICES_REQ_RESULT_FAILURE;
+ }
+ cp_msg_vs_eoc_cco_set_services_cnf_send (ctx, &mme->peer,
+ VS_EOC_CCO_SET_SERVICES_CNF,
+ result);
+}
+
+void
+cp_eoc_cco_action_vs_eoc__cco__vs_eoc_cco_get_services_req (
+ cp_t *ctx, cp_mme_rx_t *mme)
+{
+ dbg_assert (ctx);
+ dbg_assert (mme);
+
+ u8 i = 0;
+ bool ok;
+ cp_msg_vs_eoc_cco_get_services_req_result_t result =
+ CP_MSG_VS_EOC_CCO_GET_SERVICES_REQ_RESULT_SUCCESS;
+ u8 first_service_index_nb;
+ u8 services_number = 0;
+ u8 service_indexes[MAX_NUMBER_OF_SERVICES];
+ u8 classifier_rules[MAX_NUMBER_OF_SERVICES];
+ u16 classifier_values[MAX_NUMBER_OF_SERVICES];
+ u8 acses[MAX_NUMBER_OF_SERVICES];
+ u8 parameters_numbers[MAX_NUMBER_OF_SERVICES];
+ u16 parameters_lists[MAX_NUMBER_OF_SERVICES][SERVICE_PARAMETERS_NB];
+
+ ok = cp_msg_vs_eoc_cco_get_services_req_receive (
+ ctx, mme, &first_service_index_nb);
+ if (ok)
+ {
+ services_number = ctx->schedule.services.service_nb;
+
+ list_node_t *list_node;
+ list_node = list_begin (
+ &ctx->schedule.services.service_list);
+
+ cp_eoc_cco_bw_service_t *srv = NULL;
+ for (i = 0; i < services_number; i++)
+ {
+ srv = PARENT_OF (cp_eoc_cco_bw_service_t, service_node,
+ list_node);
+ if (srv)
+ {
+ service_indexes[i] = srv->service_index;
+ classifier_rules[i] = srv->classsif_rule;
+ classifier_values[i] = srv->classif_value;
+ acses[i] = srv->acs;
+ parameters_lists[i][0] = srv->latency;
+ parameters_lists[i][1] = srv->jitter;
+ parameters_lists[i][2] = srv->dload_pir;
+ parameters_lists[i][3] = srv->uload_pir;
+ parameters_lists[i][4] = srv->dload_cir;
+ parameters_lists[i][5] = srv->uload_cir;
+ parameters_lists[i][6] = srv->qos_prio;
+ parameters_numbers[i] = SERVICE_PARAMETERS_NB;
+ }
+ else
+ {
+ result = CP_MSG_VS_EOC_CCO_GET_SERVICES_REQ_RESULT_FAILURE;
+ }
+ list_node = list_next (list_node);
+ }
+ }
+ else
+ {
+ result = CP_MSG_VS_EOC_CCO_GET_SERVICES_REQ_RESULT_FAILURE;
+ }
+
+ cp_msg_vs_eoc_cco_get_services_cnf_send (
+ ctx, &mme->peer, result, services_number, service_indexes,
+ classifier_rules, classifier_values, acses, parameters_numbers,
+ parameters_lists, first_service_index_nb);
+}
+
+void
+cp_eoc_cco_action_vs_eoc__cco__vs_eoc_get_info_req (
+ cp_t *ctx, cp_mme_rx_t *mme)
+{
+ dbg_assert (ctx);
+ dbg_assert (mme);
+
+ sta_t *sta;
+
+ bool ok;
+ cp_msg_vs_eoc_get_info_req_result_t status =
+ CP_MSG_VS_EOC_GET_INFO_REQ_RESULT_SUCCESS;
+ u8 internal_eoc_index;
+ u8 control;
+ u16 tei = 0;
+ s8 attenuation = 0;
+ int attenuation_sum = 0;
+ int attenuation_sum_cnt = 0;
+ cp_net_t *net = NULL;
+ u8 assoc_sta_nb = 0;
+
+ set_node_t *current_node = NULL;
+ set_node_t *next_node = NULL;
+ cp_sta_t *current_sta = NULL;
+ u8 snr_sum = 0;
+ u8 snr = 0;
+ u8 snr_sum_cnt = 0;
+ u16 phy_uplink_speed = 0;
+ u16 phy_downlink_speed = 0;
+
+ u16 phy_uplink_speed_sum = 0;
+ u16 phy_downlink_speed_sum = 0;
+ u16 phy_uplink_speed_sum_cnt = 0;
+ u16 phy_downlink_speed_sum_cnt = 0;
+
+ u8 output_power = 0;
+ u32 tx_success_counter = 0;
+ u32 tx_crc_error_counter = 0;
+ u32 tx_other_error_counter = 0;
+ u32 rx_success_counter = 0;
+ u32 rx_crc_error_counter = 0;
+ u32 rx_other_error_counter = 0;
+
+
+ ok = cp_msg_vs_eoc_cco_get_info_req_receive (ctx, mme,
+ &internal_eoc_index,
+ &control);
+ if (ok)
+ {
+ tei = ctx->sta_mgr.sta_own_data.tei;
+ net = cp_sta_mgr_get_our_avln (ctx);
+ dbg_assert_ptr (net);
+ assoc_sta_nb = net->num_associated_stas;
+ if (!set_empty (&net->associated_stas))
+ {
+ next_node = set_begin (&net->associated_stas);
+ while (assoc_sta_nb)
+ {
+ dbg_assert_ptr (next_node);
+
+ current_node = next_node;
+ current_sta = PARENT_OF (cp_sta_t, node_net, current_node);
+ dbg_assert_ptr (current_sta);
+
+ sta = mac_store_sta_get (ctx->mac_store,
+ cp_sta_get_tei (current_sta));
+ if (sta->authenticated)
+ {
+ snr_sum += ce_rx_bl_nsr_compute_total_mean (
+ &sta->ce_rx_bt);
+ snr_sum_cnt ++;
+
+ attenuation_sum += sta->agc_gain
+ + cp_agc_offset (current_sta->multi_sta.output_level);
+ attenuation_sum_cnt ++;
+
+ phy_uplink_speed_sum += cp_sta_action_get_average_ble (
+ ctx, cp_sta_get_tei (current_sta), true, false);
+ phy_uplink_speed_sum_cnt ++;
+
+ phy_downlink_speed_sum += cp_sta_action_get_average_ble (
+ ctx, cp_sta_get_tei (current_sta), false, false);
+ phy_downlink_speed_sum_cnt ++;
+ }
+
+ next_node = set_next (&net->associated_stas, current_node);
+ assoc_sta_nb--;
+ }
+ snr = (snr_sum / snr_sum_cnt);
+ attenuation = (attenuation_sum / attenuation_sum_cnt);
+ phy_uplink_speed =
+ (phy_uplink_speed_sum / phy_uplink_speed_sum_cnt)
+ * MAX_THROUGHPUT_MBPS / DEFAULT_STREAM_QUALITY;
+ phy_downlink_speed =
+ (phy_downlink_speed_sum / phy_downlink_speed_sum_cnt)
+ * MAX_THROUGHPUT_MBPS / DEFAULT_STREAM_QUALITY;
+ }
+ else
+ {
+ snr = 0;
+
+ attenuation = 0;
+ phy_uplink_speed = 0;
+ phy_downlink_speed = 0;
+
+ }
+
+ /* N.A. */
+ output_power = 0;
+
+ if (control == 1)
+ {
+ ctx->pbproc->stats.tx_data = 0;
+ ctx->pbproc->stats.tx_data_cancel = 0;
+ ctx->pbproc->stats.tx_data_wack_noack = 0;
+ ctx->pbproc->stats.rx_data = 0;
+ ctx->pbproc->stats.rx_data_error = 0;
+ ctx->pbproc->stats.rx_crc_error = 0;
+ }
+ tx_success_counter = ctx->pbproc->stats.tx_data
+ - ctx->pbproc->stats.tx_data_cancel
+ - ctx->pbproc->stats.tx_data_wack_noack;
+ /* N.A. */
+ tx_crc_error_counter = 0;
+ tx_other_error_counter = ctx->pbproc->stats.tx_data_cancel
+ + ctx->pbproc->stats.tx_data_wack_noack;
+ rx_success_counter = ctx->pbproc->stats.rx_data
+ - ctx->pbproc->stats.rx_data_error;
+ rx_crc_error_counter = ctx->pbproc->stats.rx_crc_error;
+ rx_other_error_counter = ctx->pbproc->stats.rx_data_error;
+ }
+ else
+ {
+ status = CP_MSG_VS_EOC_GET_INFO_REQ_RESULT_FAILURE;
+ }
+
+ cp_msg_vs_eoc_cco_get_info_cnf_send (
+ ctx, &mme->peer, status, tei, attenuation, snr, phy_uplink_speed,
+ phy_downlink_speed, output_power,
+ tx_success_counter, tx_crc_error_counter, tx_other_error_counter,
+ rx_success_counter, rx_crc_error_counter, rx_other_error_counter);
+}
+
+void
+cp_eoc_cco_action_vs_eoc__cco__vs_eoc_diagnostic_info_req (
+ cp_t *ctx, cp_mme_rx_t *mme)
+{
+ dbg_assert (ctx);
+ dbg_assert (mme);
+
+ bool ok;
+ cp_msg_vs_eoc_diagnostic_info_req_result_t status =
+ CP_MSG_VS_EOC_DIAGNOSTIC_INFO_REQ_RESULT_SUCCESS;
+ u8 internal_eoc_index;
+ u8 control;
+ u8 assoc_stat = 0;
+ u64 nid = 0;
+ u8 num_slots = 0;
+ mac_t he_mac_address = 0;
+ u16 est_avg_phy_rate = 0;
+ u8 num_good_assoc_auth = 0;
+ u16 num_bad_could_not_assoc = 0;
+ u32 num_bad_assoc_failure = 0;
+ u32 num_bad_could_not_auth = 0;
+ u32 num_leave = 0;
+
+ ok = cp_msg_vs_eoc_cco_diagnostic_info_req_receive (
+ ctx, mme, &internal_eoc_index, &control);
+ if (ok)
+ {
+ /* N.A */
+ cp_sta_own_data_t *own = cp_sta_mgr_get_sta_own_data (ctx);
+ assoc_stat = 2;
+ nid = cp_sta_own_data_get_nid (ctx);
+ num_slots = 1;
+ he_mac_address = cp_sta_own_data_get_mac_address (ctx);
+ est_avg_phy_rate = 0;
+ if (control == 1)
+ {
+ own->num_good_assoc_auth = 0;
+ own->num_bad_could_not_assoc = 0;
+ own->num_bad_assoc_failure = 0;
+ own->num_bad_could_not_auth = 0;
+ own->num_leave = 0;
+ }
+ num_good_assoc_auth = own->num_good_assoc_auth;
+ num_bad_could_not_assoc = own->num_bad_could_not_assoc;
+ num_bad_assoc_failure = own->num_bad_assoc_failure;
+ num_bad_could_not_auth = own->num_bad_could_not_auth;
+ num_leave = own->num_leave;
+ }
+ else
+ {
+ status = CP_MSG_VS_EOC_DIAGNOSTIC_INFO_REQ_RESULT_FAILURE;
+ }
+
+ cp_msg_vs_eoc_cco_diagnostict_info_cnf_send (
+ ctx, &mme->peer, status, assoc_stat, nid, num_slots, he_mac_address,
+ est_avg_phy_rate, num_good_assoc_auth, num_bad_could_not_assoc,
+ num_bad_assoc_failure, num_bad_could_not_auth, num_leave);
+}
diff --git a/cesar/cp/eoc/cco/action/stub/Module b/cesar/cp/eoc/cco/action/stub/Module
new file mode 100644
index 0000000000..8373bc43f5
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/stub/Module
@@ -0,0 +1,7 @@
+SOURCES := cco_action.c drv.c
+
+ifeq ($(CONFIG_CP_EOC_IS_MASTER),y)
+ SOURCES += cco_action_master.c vs_eoc_master.c
+endif
+
+MODULES := cp/cco/action/stub
diff --git a/cesar/cp/eoc/cco/action/stub/src/cco_action.c b/cesar/cp/eoc/cco/action/stub/src/cco_action.c
new file mode 100644
index 0000000000..a08c7b5751
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/stub/src/cco_action.c
@@ -0,0 +1,75 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2009 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/cco/action/stub/src/cco_action.c
+ * \brief CCo functions stub.
+ * \ingroup cp_eoc_cco_action_stub
+ *
+ * Stub functions for the unit test of the other modules.
+ */
+#include "common/std.h"
+#include "cp/cp.h"
+
+void
+cp_eoc_cco_action__power_on_no_beacons (cp_t *ctx) __attribute__((weak));
+void
+cp_eoc_cco_action__power_on_no_beacons (cp_t *ctx)
+{}
+
+void
+cp_eoc_cco_action_poweron__idle__to_poweron (cp_t *ctx)
+ __attribute__((weak));
+void
+cp_eoc_cco_action_poweron__idle__to_poweron (cp_t *ctx)
+{}
+
+void
+cp_eoc_cco_action__power_on_rx_beacon (cp_t *ctx) __attribute__((weak));
+void
+cp_eoc_cco_action__power_on_rx_beacon (cp_t *ctx)
+{}
+
+void
+cp_eoc_cco_action__cco_drv_mac_stop (cp_t *ctx) __attribute__((weak));
+void
+cp_eoc_cco_action__cco_drv_mac_stop (cp_t *ctx)
+{}
+
+void
+cp_eoc_cco_action__bcco_drv_mac_stop (cp_t *ctx) __attribute__((weak));
+void
+cp_eoc_cco_action__bcco_drv_mac_stop (cp_t *ctx)
+{}
+
+void
+cp_eoc_cco_action__bcco_no_beacons (cp_t *ctx) __attribute__((weak));
+void
+cp_eoc_cco_action__bcco_no_beacons (cp_t *ctx)
+{}
+
+void
+cp_eoc_cco_action_send_central_beacon (cp_t *ctx) __attribute__((weak));
+void
+cp_eoc_cco_action_send_central_beacon (cp_t *ctx)
+{}
+
+void
+cp_eoc_scheduler_prepare (void * user_data) __attribute__((weak));
+void
+cp_eoc_scheduler_prepare (void * user_data)
+{}
+
+void
+cp_eoc_cco_action_init (cp_t *ctx) __attribute__((weak));
+void
+cp_eoc_cco_action_init (cp_t *ctx) {}
+
+void
+cp_eoc_cco_action_uninit (cp_t *ctx) __attribute__((weak));
+void
+cp_eoc_cco_action_uninit (cp_t *ctx) {}
diff --git a/cesar/cp/eoc/cco/action/stub/src/cco_action_master.c b/cesar/cp/eoc/cco/action/stub/src/cco_action_master.c
new file mode 100644
index 0000000000..d839ab60a3
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/stub/src/cco_action_master.c
@@ -0,0 +1,68 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2012 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/cco/action/stub/src/cco_action_master.c
+ * \brief CCo functions stub.
+ * \ingroup cp_eoc_cco_action_stub
+ *
+ * Stub functions for the unit test of the other modules.
+ */
+#include "common/std.h"
+#include "cp/cp.h"
+#include "cp/mme.h"
+
+void
+cp_eoc_cco_action_event_dispatch (cp_t *ctx, cp_mme_rx_t *mme)
+ __attribute__((weak));
+void
+cp_eoc_cco_action_event_dispatch (cp_t *ctx, cp_mme_rx_t *mme)
+{}
+
+void
+cp_eoc_cco_action_vs__cco__cc_leave_ind (
+ cp_t *ctx, cp_mme_peer_t *peer)
+ __attribute__((weak));
+void
+cp_eoc_cco_action_vs__cco__cc_leave_ind (
+ cp_t *ctx, cp_mme_peer_t *peer)
+{}
+
+void
+cp_eoc_cco_action_nek_change_start_timeout (cp_t *ctx)
+ __attribute__((weak));
+void
+cp_eoc_cco_action_nek_change_start_timeout (cp_t *ctx)
+{}
+
+void
+cp_eoc_cco_action__set_key_cnf (cp_t *ctx, cp_mme_rx_t *mme)
+ __attribute__((weak));
+void
+cp_eoc_cco_action__set_key_cnf (cp_t *ctx, cp_mme_rx_t *mme)
+{}
+
+void
+cp_eoc_cco_action_nek_change_timeout (cp_t *ctx)
+ __attribute__((weak));
+void
+cp_eoc_cco_action_nek_change_timeout (cp_t *ctx)
+{}
+
+void
+cp_eoc_cco_action_nek_provide (cp_t *ctx)
+ __attribute__((weak));
+void
+cp_eoc_cco_action_nek_provide (cp_t *ctx)
+{}
+
+void
+cp_eoc_cco_action__cco__leave_remove_timeout (cp_t *ctx)
+ __attribute__((weak));
+void
+cp_eoc_cco_action__cco__leave_remove_timeout (cp_t *ctx)
+{}
diff --git a/cesar/cp/eoc/cco/action/stub/src/drv.c b/cesar/cp/eoc/cco/action/stub/src/drv.c
new file mode 100644
index 0000000000..38f47676e8
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/stub/src/drv.c
@@ -0,0 +1,24 @@
+/* Cesar-EoC project {{{
+ *
+ * Copyright (C) 2011 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/cco/action/stub/src/drv.c
+ * \brief DRV functions stub.
+ * \ingroup cp_eoc_cco_action_stub
+ */
+#include "common/std.h"
+#include "cp/cp.h"
+#include "cp/mme.h"
+
+void
+cp_eoc_cco_action_drv__drv_mcast_set_list_req (
+ cp_t *ctx, cp_mme_rx_t *mme) __attribute__((weak));
+
+void
+cp_eoc_cco_action_drv__drv_mcast_set_list_req (
+ cp_t *ctx, cp_mme_rx_t *mme)
+{}
diff --git a/cesar/cp/eoc/cco/action/stub/src/vs_eoc_master.c b/cesar/cp/eoc/cco/action/stub/src/vs_eoc_master.c
new file mode 100644
index 0000000000..d51accde5c
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/stub/src/vs_eoc_master.c
@@ -0,0 +1,96 @@
+/* Cesar-EoC project {{{
+ *
+ * Copyright (C) 2009 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/cco/stub/vs_eoc.c
+ * \brief CCo action, Vendor Specific EoC MME stub.
+ * \ingroup cp_eoc_cco_action_stub
+ */
+#include "common/std.h"
+#include "cp/cp.h"
+#include "cp/mme.h"
+
+void
+cp_eoc_cco_action_vs__stopped__vs_cco_set_wl_req (
+ cp_t *ctx, cp_mme_rx_t *mme) __attribute__ ((weak));
+void
+cp_eoc_cco_action_vs__stopped__vs_cco_set_wl_req (
+ cp_t *ctx, cp_mme_rx_t *mme)
+{}
+
+void
+cp_eoc_cco_action_vs__cco__vs_set_out_lev_ind (
+ cp_t *ctx, cp_mme_peer_t *peer) __attribute__ ((weak));
+void
+cp_eoc_cco_action_vs__cco__vs_set_out_lev_ind (
+ cp_t *ctx, cp_mme_peer_t *peer)
+{}
+
+void
+cp_eoc_cco_action_vs_eoc__cco__vs_eoc_set_ports_req (
+ cp_t *ctx, cp_mme_rx_t *mme) __attribute__ ((weak));
+void
+cp_eoc_cco_action_vs_eoc__cco__vs_eoc_set_ports_req (
+ cp_t *ctx, cp_mme_rx_t *mme)
+{}
+
+void
+cp_eoc_cco_action_vs_eoc__cco__vs_eoc_get_topo_req (
+ cp_t *ctx, cp_mme_rx_t *mme) __attribute__ ((weak));
+void
+cp_eoc_cco_action_vs_eoc__cco__vs_eoc_get_topo_req (
+ cp_t *ctx, cp_mme_rx_t *mme)
+{}
+
+void
+cp_eoc_cco_action_vs__stopped__vs_cco_get_wl_req (
+ cp_t *ctx, cp_mme_rx_t *mme) __attribute__ ((weak));
+void
+cp_eoc_cco_action_vs__stopped__vs_cco_get_wl_req (
+ cp_t *ctx, cp_mme_rx_t *mme)
+{}
+
+void
+cp_eoc_cco_action_vs_eoc__cco__vs_eoc_cco_get_ports_req (
+ cp_t *ctx, cp_mme_rx_t *mme) __attribute__ ((weak));
+void
+cp_eoc_cco_action_vs_eoc__cco__vs_eoc_cco_get_ports_req (
+ cp_t *ctx, cp_mme_rx_t *mme)
+{}
+
+void
+cp_eoc_cco_action_vs_eoc__cco__vs_eoc_cco_set_services_req (
+ cp_t *ctx, cp_mme_rx_t *mme) __attribute__ ((weak));
+void
+cp_eoc_cco_action_vs_eoc__cco__vs_eoc_cco_set_services_req (
+ cp_t *ctx, cp_mme_rx_t *mme)
+{}
+
+void
+cp_eoc_cco_action_vs_eoc__cco__vs_eoc_cco_get_services_req (
+ cp_t *ctx, cp_mme_rx_t *mme) __attribute__ ((weak));
+void
+cp_eoc_cco_action_vs_eoc__cco__vs_eoc_cco_get_services_req (
+ cp_t *ctx, cp_mme_rx_t *mme)
+{}
+
+void
+cp_eoc_cco_action_vs_eoc__cco__vs_eoc_get_info_req (
+ cp_t *ctx, cp_mme_rx_t *mme) __attribute__ ((weak));
+void
+cp_eoc_cco_action_vs_eoc__cco__vs_eoc_get_info_req (
+ cp_t *ctx, cp_mme_rx_t *mme)
+{}
+
+void
+cp_eoc_cco_action_vs_eoc__cco__vs_eoc_diagnostic_info_req (
+ cp_t *ctx, cp_mme_rx_t *mme) __attribute__ ((weak));
+void
+cp_eoc_cco_action_vs_eoc__cco__vs_eoc_diagnostic_info_req (
+ cp_t *ctx, cp_mme_rx_t *mme)
+{}
+
diff --git a/cesar/cp/eoc/cco/action/test/utest/Config b/cesar/cp/eoc/cco/action/test/utest/Config
new file mode 100644
index 0000000000..baaf313f89
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/test/utest/Config
@@ -0,0 +1,14 @@
+CONFIG_CP_EOC = y
+CONFIG_DEBUG_FATAL_CATCH = y
+CONFIG_CP_EOC_MULTI_STA_FSM_DEF = "cp/eoc/multi_sta_fsm/src/fsm/multi_sta.fsm"
+CONFIG_CP_EOC_IS_MASTER = y
+CONFIG_MAC_PBPROC_EOC_FC = y
+CONFIG_CP_FSM_DEF = "cp/eoc/fsm/src/fsm/cp_eoc_cco.fsm"
+CONFIG_CP_EOC_SCHEDULER = y
+CONFIG_MAC_COMMON_EOC_SCHED = y
+CONFIG_CL_EOC_ROUTE = y
+CONFIG_CP_EOC_CCO_ACTION_CON_ALLOWED = n
+CONFIG_CP_EOC_CCO_ACTION_WL_ALLOWED = y
+CONFIG_CP_STA_MGR_CCO_EOC = y
+CONFIG_MAC_COMMON_EOC_TEI = y
+CONFIG_CP_EOC_DBG_PRINT_LEVEL = 2
diff --git a/cesar/cp/eoc/cco/action/test/utest/Makefile b/cesar/cp/eoc/cco/action/test/utest/Makefile
new file mode 100644
index 0000000000..971241d654
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/test/utest/Makefile
@@ -0,0 +1,21 @@
+BASE = ../../../../../..
+
+DEFS = -DSTA_CORE_UNIT_TEST=1
+
+INCLUDES = cp/eoc/cco/action/test/utest/override
+
+HOST_PROGRAMS = test_actions
+
+test_actions_SOURCES = test_actions.c stub.c
+test_actions_MODULES = lib mac/common \
+ cp/eoc/multi_sta_fsm cp/eoc/multi_sta/action \
+ cp/eoc/sta/mgr cp/eoc/msg cp/eoc/cco/action \
+ cp/eoc/cco/bw cp/secu \
+ cp/eoc/fsm/stub cp/eoc/beacon/stub mac/sar/stub bsu/stub \
+ cp/sta/core/stub cl/stub cp/eoc/sta/action/stub bufmgr/stub \
+ mac/pbproc/stub mac/ca/stub
+test_actions_CONFIG_MODULES = cp/eoc cl
+
+cp_MODULE_SOURCES = $(if $(filter y,$(CONFIG_TRACE)),trace.c,)
+
+include $(BASE)/common/make/top.mk
diff --git a/cesar/cp/eoc/cco/action/test/utest/inc/scenario_defs.h b/cesar/cp/eoc/cco/action/test/utest/inc/scenario_defs.h
new file mode 100644
index 0000000000..3efcca7681
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/test/utest/inc/scenario_defs.h
@@ -0,0 +1,138 @@
+#ifndef inc_scenario_defs_h
+#define inc_scenario_defs_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file inc/scenario_defs.h
+ * \brief Scenario definitions.
+ * \ingroup test
+ */
+
+#include "cp/types.h"
+#include "cp/mme.h"
+//#include "cp/fsm/fsm.h"
+#include "cp/eoc/multi_sta_fsm/fsm.h"
+
+/* Scenario globals. */
+#define SCENARIO_DEFS_GLOBALS \
+ cp_t *cp;
+
+/* Scenario actions. */
+#define SCENARIO_DEFS_ACTIONS \
+ post_and_process, \
+ post, \
+ trigger, \
+ post_urgent, \
+ process, \
+ process_urgent
+
+typedef struct
+{
+ cp_eoc_multi_sta_fsm_event_type_t type;
+ cp_sta_t *sta;
+} scenario_action_param_t;
+
+typedef scenario_action_param_t scenario_action_post_and_process_t;
+typedef scenario_action_param_t scenario_action_post_t;
+typedef scenario_action_param_t scenario_action_trigger_t;
+typedef scenario_action_param_t scenario_action_post_urgent_t;
+typedef scenario_action_param_t scenario_action_process_t;
+typedef scenario_empty_t scenario_action_process_urgent_t;
+
+void
+scenario_action_post_and_process_cb (scenario_globals_t *globals,
+ scenario_params_t *params);
+
+void
+scenario_action_post_cb (scenario_globals_t *globals,
+ scenario_params_t *params);
+
+void
+scenario_action_trigger_cb (scenario_globals_t *globals,
+ scenario_params_t *params);
+
+void
+scenario_action_post_urgent_cb (scenario_globals_t *globals,
+ scenario_params_t *params);
+
+void
+scenario_action_process_cb (scenario_globals_t *globals,
+ scenario_params_t *params);
+
+void
+scenario_action_process_urgent_cb (scenario_globals_t *globals,
+ scenario_params_t *params);
+
+/* Scenario events. */
+
+#define SCENARIO_DEFS_EVENTS \
+ cp_eoc_multi_sta_fsm_handled_event,\
+ cp_eoc_multi_sta_fsm__unassociated__timeout_assoc,\
+ cp_eoc_multi_sta_fsm__associated__CC_GET_KEY_REQ,\
+ cp_eoc_multi_sta_fsm__associated__timeout_auth,\
+ cp_eoc_multi_sta_fsm__associated__cc_leave,\
+ cp_eoc_multi_sta_fsm__authenticated__cc_leave,\
+ cp_eoc_multi_sta_fsm__authenticated__CC_SLEEP_ENTER_REQ,\
+ cp_eoc_multi_sta_fsm__authenticated__lost_connection,\
+ cp_eoc_multi_sta_fsm__sleep_authenticated__lost_connection,\
+ cp_eoc_multi_sta_fsm__sleep_authenticated__CC_SLEEP_EXIT_IND,\
+ cp_eoc_multi_sta_fsm__disconnected__CC_ASSOC_REQ,\
+ cp_eoc_multi_sta_fsm__unassociated__CC_ASSOC_REQ
+
+
+typedef struct
+{
+ //cp_fsm_branch_t branch;
+ cp_eoc_multi_sta_fsm_branch_t branch;
+ cp_sta_t *sta;
+} scenario_event_transition_with_branch_t;
+
+
+typedef scenario_event_transition_with_branch_t
+scenario_event_cp_eoc_multi_sta_fsm__disconnected__CC_ASSOC_REQ_t;
+
+typedef scenario_event_transition_with_branch_t
+scenario_event_cp_eoc_multi_sta_fsm__associated__CC_GET_KEY_REQ_t;
+
+typedef scenario_empty_t
+scenario_event_cp_eoc_multi_sta_fsm_handled_event_t;
+
+typedef scenario_empty_t
+scenario_event_cp_eoc_multi_sta_fsm__unassociated__timeout_assoc_t;
+
+// typedef scenario_empty_t
+// scenario_event_cp_eoc_multi_sta_fsm__associated__CC_GET_KEY_REQ_t;
+
+typedef scenario_empty_t
+scenario_event_cp_eoc_multi_sta_fsm__unassociated__CC_ASSOC_REQ_t;
+
+typedef scenario_empty_t
+scenario_event_cp_eoc_multi_sta_fsm__associated__timeout_auth_t;
+
+typedef scenario_empty_t
+scenario_event_cp_eoc_multi_sta_fsm__associated__cc_leave_t;
+
+typedef scenario_empty_t
+scenario_event_cp_eoc_multi_sta_fsm__authenticated__cc_leave_t;
+
+typedef scenario_empty_t
+scenario_event_cp_eoc_multi_sta_fsm__authenticated__CC_SLEEP_ENTER_REQ_t;
+
+typedef scenario_empty_t
+scenario_event_cp_eoc_multi_sta_fsm__authenticated__lost_connection_t;
+
+typedef scenario_empty_t
+scenario_event_cp_eoc_multi_sta_fsm__sleep_authenticated__lost_connection_t;
+
+typedef scenario_empty_t
+scenario_event_cp_eoc_multi_sta_fsm__sleep_authenticated__CC_SLEEP_EXIT_IND_t;
+
+
+
+
+#endif /* inc_scenario_defs_h */
diff --git a/cesar/cp/eoc/cco/action/test/utest/override/cp/inc/context.h b/cesar/cp/eoc/cco/action/test/utest/override/cp/inc/context.h
new file mode 100644
index 0000000000..b43ccc39ba
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/test/utest/override/cp/inc/context.h
@@ -0,0 +1,98 @@
+#ifndef override_cp_inc_context_h
+#define override_cp_inc_context_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file override/cp/inc/context.h
+ * \brief Control plane context override.
+ * \ingroup test
+ */
+
+#include "cp/eoc/beacon/beacon.h"
+#include "cp/eoc/beacon/inc/beacon.h"
+#include "cp/fsm/fsm.h"
+#include "cp/fsm/inc/context.h"
+#include "cp/inc/trace.h"
+#include "cp/sta/mgr/sta_mgr.h"
+#include "cp/sta/mgr/inc/sta_mgr.h"
+#include "mac/common/config.h"
+#include "mac/common/store.h"
+#include "mac/sar/sar.h"
+#include "cl/cl.h"
+#include "cp/msg/inc/context.h"
+#include "lib/rnd.h"
+#include "interface/interface.h"
+#include "cp/sta/core/defs.h"
+#include "cp/sta/action/inc/context.h"
+#include "cp/eoc/cco/action/inc/cco_action.h"
+#include "cp/cco/action/inc/cco_action.h"
+#include "cp/cco/bw/bw.h"
+#include "cp/cco/bw/inc/context.h"
+#include "cp/eoc/cco/bw/inc/bw.h"
+#include "cp/cl_interf/cl_interf.h"
+#include "cp/cl_interf/inc/context.h"
+#include "cp/cp.h"
+#include "cp/types.h"
+#include "mac/pbproc/inc/context.h"
+#include "cp/eoc/cco/bw/inc/bw.h"
+#include "cp/cco/bw/bw.h"
+#include "cp/cco/bw/inc/context.h"
+#include "bufmgr/bufmgr.h"
+
+struct cp_t
+{
+#if CONFIG_TRACE
+ /** Trace context. */
+ trace_buffer_t trace;
+#endif /* CONFIG_TRACE */
+
+ /** FSM context. */
+ cp_fsm_t fsm;
+ /** STA core flag. */
+ bool sta_core_flag;
+ /** STA core urgent flag. */
+ bool sta_core_urgent_flag;
+ /** CCo Action. */
+ cp_cco_action_t cco_action;
+ /** STA action*/
+ cp_sta_action_t sta_action;
+ /** station manager context*/
+ cp_sta_mgr_t sta_mgr;
+ /** MAC config contest*/
+ mac_config_t *mac_config;
+ /** Mac store /dataplane */
+ mac_store_t *mac_store;
+ /** Convergence Layer context */
+ cl_t *cl;
+ /** Segmentation and reassembly context */
+ sar_t *sar;
+ /** messages context. */
+ cp_msg_t msg;
+ pbproc_t *pbproc;
+ /** EoC scheduling context */
+ cp_eoc_cco_bw_sched_t schedule;
+ /** Bandwidth Manager context. */
+ cp_cco_bw_t bw;
+ /** Channel access context. */
+ ca_t *ca;
+ /** Context of the bsu. */
+ bsu_t *bsu;
+
+ cp_beacon_t beacon;
+ lib_rnd_t rnd;
+ interface_t *interface;
+ cp_cl_interf_t cl_interf;
+
+ /** Context of the aclf. */
+ bsu_aclf_t *bsu_aclf;
+
+ /* Buffer manager. */
+ bufmgr_t *bufmgr;
+};
+
+#endif /* override_cp_inc_context_h */
diff --git a/cesar/cp/eoc/cco/action/test/utest/override/cp/sta/core/core.h b/cesar/cp/eoc/cco/action/test/utest/override/cp/sta/core/core.h
new file mode 100644
index 0000000000..ab53723c91
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/test/utest/override/cp/sta/core/core.h
@@ -0,0 +1,49 @@
+#ifndef override_cp_sta_core_core_h
+#define override_cp_sta_core_core_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file override/cp/sta/core/core.h
+ * \brief STA Core override.
+ * \ingroup test
+ */
+
+#include "cp/inc/context.h"
+
+BEGIN_DECLS
+
+void
+cp_sta_core_signal_fsm_event (cp_t *ctx);
+
+void
+cp_sta_core_signal_fsm_urgent_event (cp_t *ctx);
+
+u32
+cp_sta_core_get_date_ms (cp_t *ctx);
+
+void
+cp_sta_core_checkpoint (cp_t *ctx);
+
+void
+cp_sta_core_signal_recv_mme_event(cp_t *cp_ctx);
+
+void
+cp_sta_core_gen_timed_event(cp_t *cp_ctx,
+ cp_sta_core_timed_event_def_t *sta_core_timed_event,
+ cp_fsm_event_t *fsm_event,
+ uint event_delay_ms);
+
+void
+cp_sta_core_stop_timed_or_cyclic_event(cp_t *cp_ctx,
+ cp_sta_core_timed_event_def_t *sta_core_timed_event);
+
+u32
+cp_sta_core_tck_per_rtc (cp_t *ctx);
+END_DECLS
+
+#endif /* override_cp_sta_core_core_h */
diff --git a/cesar/cp/eoc/cco/action/test/utest/override/cp/sta/core/defs.h b/cesar/cp/eoc/cco/action/test/utest/override/cp/sta/core/defs.h
new file mode 100644
index 0000000000..71be233993
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/test/utest/override/cp/sta/core/defs.h
@@ -0,0 +1,57 @@
+#ifndef cp_sta_core_defs_h
+#define cp_sta_core_defs_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2009 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/sta/core/defs.h
+ * \brief Sta core defs.
+ * \ingroup cp/sta/core
+ *
+ */
+#include "cp/fsm/forward.h"
+
+/** Forward declaration. */
+typedef struct cp_sta_core_t cp_sta_core_t;
+
+/*
+ * the sta core event flags
+ * these are some flags, so take care to give a value with all bits set to 0 but one.
+ */
+enum cp_sta_core_event_flag_t
+{
+ CP_STA_CORE_EVENT_FLAG_RECV_BEACON = 0x1,
+ CP_STA_CORE_EVENT_FLAG_RECV_MME = 0x2,
+ CP_STA_CORE_EVENT_FLAG_FSM = 0x4,
+ CP_STA_CORE_EVENT_FLAG_GARBAGE = 0x8,
+ CP_STA_CORE_EVENT_FLAG_TERMINATE = 0x10
+};
+typedef enum cp_sta_core_event_flag_t cp_sta_core_event_flag_t;
+
+/** Definition of alarm info structure
+ * (applications should not use it directly but use "alias" defined just below) */
+struct cp_sta_core_timed_event_def_t
+{
+ /* eCos alarm. */
+ uint alarm;
+ /* eCos alarm handle. */
+ uint alarm_handle;
+ /* the sta core event flag to set
+ * (auto or user-specified when creating/launching timer alarm). */
+ cp_sta_core_event_flag_t event_flag;
+ /* FSM event specified when creating/launching timer alarm
+ * (set if the previous flag is CP_STA_CORE_EVENT_FLAG_FSM). */
+ cp_fsm_event_t *fsm_event;
+ /* flag indicating a periodic alarm (if set to true)
+ * or one-shot alarm (if set to false). */
+ bool cyclic_alarm;
+ /* pointer to CP context. */
+ cp_t *cp_ctx;
+};
+typedef struct cp_sta_core_timed_event_def_t cp_sta_core_timed_event_def_t;
+
+#endif /* cp_sta_core_defs_h */
diff --git a/cesar/cp/eoc/cco/action/test/utest/override/cyg/kernel/kapi.h b/cesar/cp/eoc/cco/action/test/utest/override/cyg/kernel/kapi.h
new file mode 100644
index 0000000000..019e5d3a07
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/test/utest/override/cyg/kernel/kapi.h
@@ -0,0 +1,37 @@
+#ifndef override_cyg_kernel_kapi_h
+#define override_cyg_kernel_kapi_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2010 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file override/cyg/kernel/kapi.h
+ * \brief override some kernel api from <cyg/kernel/kapi.h>.
+ * \ingroup cp_msg
+ *
+ *
+ */
+
+struct cyg_resolution_t
+{
+ u32 dividend;
+ u32 divisor;
+} ;
+
+typedef struct cyg_resolution_t cyg_resolution_t;
+
+typedef u64 cyg_tick_count_t;
+
+int
+cyg_real_time_clock (void);
+
+cyg_resolution_t
+cyg_clock_get_resolution (int clock);
+
+cyg_tick_count_t
+cyg_current_time (void);
+
+#endif
diff --git a/cesar/cp/eoc/cco/action/test/utest/override/mac/sar/inc/context.h b/cesar/cp/eoc/cco/action/test/utest/override/mac/sar/inc/context.h
new file mode 100644
index 0000000000..b74c7a57e3
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/test/utest/override/mac/sar/inc/context.h
@@ -0,0 +1,23 @@
+#ifndef overide_mac_sar_inc_context_h
+#define overide_mac_sar_inc_context_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2009 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file overide/mac/sar/inc/context.h
+ * \brief « brief description »
+ * \ingroup « module »
+ *
+ * « long description »
+ */
+
+struct sar_t
+{
+ mac_store_t *mac_store;
+};
+
+#endif /* overide_mac_sar_inc_context_h */
diff --git a/cesar/cp/eoc/cco/action/test/utest/src/stub.c b/cesar/cp/eoc/cco/action/test/utest/src/stub.c
new file mode 100644
index 0000000000..c91260eecb
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/test/utest/src/stub.c
@@ -0,0 +1,56 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2009 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file eoc/sta/action/test/utest/src/msg_stub.c
+ * \brief cp/sta/mgr/sta_mgr stub
+ * \ingroup test
+ *
+ */
+#include "common/std.h"
+#include "cp/cp.h"
+#include "cp/mme.h"
+#include "cp/inc/context.h"
+#include "cp/msg/inc/cc_assoc.h"
+#include <cyg/kernel/kapi.h>
+
+
+#define BSU_ACLF_BP_CABLE_TCK 2500000
+#define TCK_PER_RTC 250000
+
+u32
+cp_sta_core_tck_per_rtc (cp_t *ctx)
+{
+
+ return TCK_PER_RTC;
+}
+
+u32
+bsu_aclf_beacon_period_tck (bsu_aclf_t *ctx)
+{
+ return BSU_ACLF_BP_CABLE_TCK;
+}
+
+cyg_tick_count_t
+cyg_current_time (void)
+{
+ /* For tests purpose we can simulate 1000 beacon periods */
+ return (u32)((BSU_ACLF_BP_CABLE_TCK * 1000ull) / TCK_PER_RTC);
+}
+
+u8
+ce_rx_bl_nsr_compute_total_mean (ce_rx_bitloading_t *bl)
+{
+ return 1;
+}
+
+u8
+cp_sta_action_get_average_ble (cp_t *ctx, cp_tei_t tei, bool tx,
+ bool fc_format)
+{
+ return 0;
+}
diff --git a/cesar/cp/eoc/cco/action/test/utest/src/test_actions.c b/cesar/cp/eoc/cco/action/test/utest/src/test_actions.c
new file mode 100644
index 0000000000..3545b61b47
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/test/utest/src/test_actions.c
@@ -0,0 +1,471 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/test_actions.c
+ * \brief Test eoc cco action module.
+ * \ingroup test
+ */
+#include "common/std.h"
+#include "lib/test.h"
+#include "cp/cp.h"
+#include "cp/mme.h"
+#include "cp/inc/context.h"
+#include "cl/inc/context.h"
+#include "cp/eoc/msg/msg.h"
+#include "cp/eoc/msg/inc/vs_eoc_get_topo.h"
+#include "mac/sar/inc/context.h"
+#include "common/defs/spidcom.h"
+#include "cp/eoc/msg/inc/msg_vs.h"
+#include "cp/eoc/cco/action/vs_eoc_master.h"
+
+void
+cp_eoc_cco_action__power_on_no_beacons (cp_t *ctx);
+
+/** Override MFS store context. */
+struct mac_store_t
+{
+};
+
+static cp_t cp;
+static mac_config_t mac_config;
+static mac_store_t mac_store;
+static cl_t cl;
+static sar_t sar;
+
+struct mme_header_t
+{
+ mac_t oda;
+ mac_t osa;
+ uint vlan;
+ uint mtype;
+ uint mmv;
+ mmtype_t mmtype;
+ uint fmi_inf;
+ uint fmi_mi;
+ uint fmi_ssn;
+};
+typedef struct mme_header_t mme_header_t;
+
+static u8 buffer[2048];
+
+mac_t own_mac_addr = 0x123456789ABCull;
+mac_t my_mac_addr = 0x112233445566ull;
+cp_nid_t nid = 0x1234567;
+test_t test;
+cp_mme_peer_t peer;
+cp_net_t *net;
+
+static void
+test_write_header (bool vlan_present, mme_header_t *pheader,
+ bitstream_t *pstream)
+{
+ bitstream_init (pstream, buffer, ETH_PACKET_MAX_NOVLAN_SIZE,
+ BITSTREAM_WRITE);
+
+ bitstream_write_large (pstream, pheader->oda, 48);
+ bitstream_write_large (pstream, pheader->osa, 48);
+ bitstream_write (pstream, HPAV_MTYPE_MME, 16);
+ bitstream_write (pstream, HPAV_MMV, 8);
+ bitstream_write (pstream, pheader->mmtype, 16);
+ bitstream_write (pstream, pheader->fmi_inf, 4);
+ bitstream_write (pstream, pheader->fmi_mi, 4);
+ bitstream_write (pstream, pheader->fmi_ssn, 8);
+ if (pheader->mmtype >= VS_MIN && pheader->mmtype <= VS_MAX)
+ bitstream_write (pstream, SPC_OUI, 24);
+}
+
+static void
+test_read_header (bool vlan_present, mme_header_t *pheader,
+ mme_header_t *pexpected, bitstream_t *pstream)
+{
+ bitstream_init (pstream, buffer, ETH_PACKET_MAX_NOVLAN_SIZE,
+ BITSTREAM_READ);
+
+ pheader->oda = bitstream_read_large (pstream, 48);
+ pheader->osa = bitstream_read_large (pstream, 48);
+ if (vlan_present)
+ pheader->vlan = bitstream_read (pstream, 32);
+ pheader->mtype = bitstream_read (pstream, 16);
+ pheader->mtype = pheader->mtype;
+ pheader->mmv = bitstream_read (pstream, 8);
+ pheader->mmtype = bitstream_read (pstream, 16);
+ pheader->fmi_inf = bitstream_read (pstream, 4);
+ pheader->fmi_mi = bitstream_read (pstream, 4);
+ pheader->fmi_ssn = bitstream_read (pstream, 8);
+ if (MMTYPE_IS_VS (pheader->mmtype) || MMTYPE_IS_IMAC (pheader->mmtype))
+ bitstream_read (pstream, 24);
+
+ test_begin (test, "Header")
+ {
+ test_fail_if (pheader->oda != pexpected->oda);
+ test_fail_if (pheader->osa != pexpected->osa);
+ test_fail_if (pheader->mtype != HPAV_MTYPE_MME);
+ test_fail_if (pheader->mmv != HPAV_MMV);
+ test_fail_if (pheader->mmtype != pexpected->mmtype);
+ test_fail_if (pheader->fmi_inf != pexpected->fmi_inf);
+ test_fail_if (pheader->fmi_mi != pexpected->fmi_mi);
+ test_fail_if (pheader->fmi_ssn != pexpected->fmi_ssn);
+ }
+ test_end;
+}
+
+void
+test_case_vs_eoc_get_topo (test_t test)
+{
+ test_case_begin (test, "VS_EOC_GET_TOPO");
+
+ test_begin (test, "VS_EOC_GET_TOPO.REQ Receive")
+ {
+ bitstream_t stream;
+ mme_header_t header;
+ mme_header_t expected;
+ uint fmi;
+ u64 data;
+ cp_t *ctx = &cp;
+
+ cp_mme_rx_t *rx_mme;
+ bool res;
+ /* init msg */
+ cp_msg_init (ctx);
+
+
+ /* add my sta to avln */
+ cp_sta_t *my_sta;
+ cp_tei_t my_tei = 5;
+ my_sta = cp_sta_mgr_sta_add (ctx, net, my_tei, my_mac_addr);
+ sta_t *sta = mac_store_sta_get (ctx->mac_store, my_tei);
+ s8 sta_attenuation_db;
+
+ my_sta->multi_sta.output_level = 90;
+ /* AGC gain value depends on the output level of the emitter */
+ sta->agc_gain = 42;
+ /*********************************/
+ /* Good values. */
+ /*********************************/
+ u8 result = CP_MSG_VS_EOC_GET_TOPO_CNF_RESULT_SUCCESS;
+ u8 sta_nb = 1;
+
+ /* Build MME Header */
+ header.oda = own_mac_addr;
+ header.osa = peer.mac;
+ header.mmtype = VS_EOC_GET_TOPO_REQ;
+ header.fmi_inf = 0;
+ header.fmi_mi = 0;
+ header.fmi_ssn = 0;
+
+ test_write_header (false, &header, &stream);
+
+ /*********************************/
+ /* Receive MME (empty data) */
+ /*********************************/
+ bitstream_finalise (&stream);
+
+ /* Receive MME */
+ rx_mme = cp_msg_mme_read_header (&cp, buffer,
+ ETH_PACKET_MAX_NOVLAN_SIZE,
+ peer.tei, &fmi);
+ test_fail_unless (rx_mme != NULL);
+ test_fail_unless (rx_mme->mmtype == VS_EOC_GET_TOPO_REQ);
+ data = cp_msg_mme_read_error (ctx, rx_mme);
+ test_fail_unless (data == true);
+
+ cp_eoc_cco_action_vs_eoc__cco__vs_eoc_get_topo_req (ctx, rx_mme);
+
+ /* Expected header */
+ expected.oda = peer.mac;
+ expected.osa = own_mac_addr;
+ expected.mmtype = VS_EOC_GET_TOPO_CNF;
+ expected.fmi_inf = 0;
+ expected.fmi_mi = 0;
+ expected.fmi_ssn = 0;
+
+ /* Read MME for Data comparison. */
+ test_read_header (false, &header, &expected, &stream);
+
+ bitstream_access (&stream, &data, 8);
+ test_fail_if (data != result, "Wrong Result");
+
+ bitstream_access (&stream, &data, 8);
+ test_fail_if (data != sta_nb, "Wrong station number");
+
+ bitstream_access (&stream, &data, 48);
+ test_fail_unless (data == my_mac_addr);
+ bitstream_access (&stream, &data, 8);
+ test_fail_unless (data == 1);
+ bitstream_access (&stream, &sta_attenuation_db, 8);
+ test_fail_unless (sta_attenuation_db == 10);
+
+ /* End TEST VS_EOC_GET_TOPO.REQ Receive */
+ slab_release (rx_mme);
+ blk_release (sta);
+ res = mac_store_sta_remove (cp.mac_store, my_tei);
+ test_fail_unless (res == true);
+ slab_release (my_sta);
+
+ /* remove my sta from avln */
+ cp_sta_mgr_sta_remove_from_mac (ctx, my_mac_addr);
+
+ /* uninit msg */
+ cp_msg_uninit (ctx);
+ }
+ test_end;
+}
+
+void
+test_case_vs_eoc_cco_get_wl (test_t test)
+{
+ test_case_begin (test, "VS_EOC_CCO_GET_WL");
+
+ test_begin (test, "VS_EOC_CCO_GET_WL.REQ Receive")
+ {
+ uint i;
+ uint j;
+ bitstream_t stream;
+ mme_header_t header;
+ mme_header_t expected;
+ uint fmi;
+ u64 data;
+ cp_t *ctx = &cp;
+ cp_mme_rx_t *rx_mme;
+ bool res;
+ uint total_wl_index_nb = 4;
+ uint first_wl_index_nb = 0;
+ uint wl_index_nb = 4;
+
+ /* init msg */
+ cp_msg_init (ctx);
+
+ /* add my sta to avln */
+ cp_sta_t *my_stas[5];
+ cp_tei_t my_teis[5];
+ mac_t my_macs[5];
+
+ for (i=0; i < 5; i++)
+ {
+ my_teis[i] = i;
+ my_macs[i] = 0x112233445500ull + i;
+ my_stas[i] = cp_sta_mgr_sta_add (ctx, net, my_teis[i], my_macs[i]);
+ my_stas[i]->multi_sta.allowed = 1;
+ my_stas[i]->multi_sta.output_level = 2;
+ my_stas[i]->multi_sta.start_time = 55;
+ my_stas[i]->multi_sta.end_time = 77;
+ my_stas[i]->multi_sta.dak.key[0] = 0x11223344;
+ my_stas[i]->multi_sta.dak.key[1] = 0x55667788;
+ my_stas[i]->multi_sta.dak.key[2] = 0x99001122;
+ my_stas[i]->multi_sta.dak.key[3] = 0x33445566;
+ strcpy (((cp_sta_private_t *)my_stas[i])->dpw.dpw,
+ "SPiDCOM - SPC300");
+ my_stas[i]->multi_sta.action = 1;
+ }
+ /*********************************/
+ /* Good values. */
+ /*********************************/
+ u8 result = CP_MSG_VS_EOC_CCO_GET_WL_REQ_RESULT_SUCCESS;
+ u8 sta_nb = 4;
+
+ /* Build MME Header */
+ header.oda = own_mac_addr;
+ header.osa = peer.mac;
+ header.mmtype = VS_EOC_CCO_GET_WL_REQ;
+ header.fmi_inf = 0;
+ header.fmi_mi = 0;
+ header.fmi_ssn = 0;
+
+ test_write_header (false, &header, &stream);
+
+ /*********************************/
+ /* Receive MME (empty data) */
+ /*********************************/
+ bitstream_finalise (&stream);
+
+ /* Receive MME */
+ rx_mme = cp_msg_mme_read_header (&cp, buffer,
+ ETH_PACKET_MAX_NOVLAN_SIZE,
+ peer.tei, &fmi);
+ test_fail_unless (rx_mme != NULL);
+ test_fail_unless (rx_mme->mmtype == VS_EOC_CCO_GET_WL_REQ);
+ data = cp_msg_mme_read_error (ctx, rx_mme);
+ test_fail_unless (data == true);
+
+ cp_eoc_cco_action_vs__stopped__vs_cco_get_wl_req (ctx, rx_mme);
+
+ /* Expected header */
+ expected.oda = peer.mac;
+ expected.osa = own_mac_addr;
+ expected.mmtype = VS_EOC_CCO_GET_WL_CNF;
+ expected.fmi_inf = 0;
+ expected.fmi_mi = 0;
+ expected.fmi_ssn = 0;
+
+ /* Read MME for Data comparison. */
+ test_read_header (false, &header, &expected, &stream);
+
+ bitstream_access (&stream, &data, 8);
+ test_fail_if (data != result, "Wrong Result");
+
+ bitstream_access (&stream, &data, 8);
+ test_fail_if (data != total_wl_index_nb, "Wrong total_wl_index_nb");
+
+ bitstream_access (&stream, &data, 8);
+ test_fail_if (data != first_wl_index_nb, "Wrong first_wl_index_nb");
+
+ bitstream_access (&stream, &data, 8);
+ test_fail_if (data != wl_index_nb, "Wrong wl_index_nb");
+
+ for(i = 0; i < sta_nb; i++)
+ {
+ bitstream_access (&stream, &data, 48);
+ test_fail_if ((data != my_macs[i+1]), "Wrong mac address");
+ bitstream_access (&stream, &data, 8);
+ test_fail_if (data != my_teis[i+1], "Wrong tei");
+ test_fail_if (data == 0, "Tei = 0");
+ bitstream_access (&stream, &data, 8);
+ test_fail_if (data != my_stas[i+1]->multi_sta.allowed,
+ "Wrong authorization");
+ bitstream_access (&stream, &data, 8);
+ test_fail_if (data != my_stas[i]->multi_sta.output_level,
+ "Wrong output level");
+ bitstream_access (&stream, &data, 32);
+ test_fail_if (data != my_stas[i]->multi_sta.start_time,
+ "Wrong start time");
+ bitstream_access (&stream, &data, 32);
+ test_fail_if (data != my_stas[i]->multi_sta.end_time,
+ "Wrong end time");
+ for (j=0; j<4; j++)
+ {
+ bitstream_access (&stream, &data, 32);
+ test_fail_if (data != my_stas[i]->multi_sta.dak.key[j],
+ "Wrong sta dak");
+ }
+ for (j=0; j<CP_DPW_MAX_SIZE; j++)
+ {
+ bitstream_access (&stream, &data, 8);
+ test_fail_if (data != (u64)((cp_sta_private_t *)my_stas[i])->dpw.dpw[j],
+ "Wrong sta dak");
+ }
+ bitstream_access (&stream, &data, 8);
+ test_fail_if (data != my_stas[i]->multi_sta.action,
+ "Wrong action");
+ }
+
+ /* End TEST VS_EOC_CCO_GET_WL.REQ Receive */
+
+ slab_release (rx_mme);
+
+ for (i = 0; i < 4; i++)
+ {
+ res = mac_store_sta_remove (cp.mac_store, my_teis[i+1]);
+ test_fail_unless (res == true);
+ }
+
+ /* remove my sta from avln */
+ for (i = 0; i < 5; i++)
+ {
+ slab_release (my_stas[i]);
+ cp_sta_mgr_sta_remove_from_mac (ctx, my_macs[i]);
+ }
+ /* uninit msg */
+ cp_msg_uninit (ctx);
+ }
+ test_end;
+}
+
+int
+main (void)
+{
+ test_t test;
+ test_init (test, 0, NULL);
+
+ /* configure cp */
+ cp.mac_config = &mac_config;
+ cp.mac_store = &mac_store;
+ cp.cl = &cl;
+ cp.sar=&sar;
+
+ lib_stats_init();
+
+ /* init sta manager */
+ cp_eoc_sta_mgr_init (&cp);
+
+ /* add avln */
+ cp_snid_t snid = 4;
+ net = cp_sta_mgr_add_avln (&cp, snid, nid);
+
+ /* set avln */
+ cp_sta_mgr_set_our_avln (&cp, net);
+
+ /* set sta own data */
+ cp_tei_t own_tei = 4;
+ cp_sta_own_data_set_nid (&cp, nid);
+ cp_sta_own_data_set_mac_address (&cp, own_mac_addr);
+ cp_sta_own_data_set_tei (&cp, own_tei);
+ cp_sta_own_data_set_cco_status (&cp, true);
+
+ /* configure peer */
+ peer.mac = 0x23456789ABCDull;
+ peer.eth_type = HPAV_MTYPE_MME;
+ peer.vlan_tci = 0x0;
+ peer.tei = MAC_TEI_FOREIGN;
+
+ /* 1. test VS_EOC_GET_TOPO */
+ test_case_vs_eoc_get_topo (test);
+
+ /* 2. test VS_EOC_CCO_GET_WL */
+ test_case_vs_eoc_cco_get_wl (test);
+
+ /* 3. test power on */
+ test_begin (test, "Compile");
+ {
+ cp_eoc_cco_action__power_on_no_beacons (&cp);
+ }
+ test_end;
+
+ /* remove avln */
+ cp_sta_mgr_remove_avln (&cp, snid, nid);
+
+ /* uninit sta own data */
+ cp_sta_own_data_uninit (&cp);
+
+ /* uninit sta manager */
+ cp_sta_mgr_uninit (&cp);
+
+ /* uninit net */
+ cp_net_uninit (&cp, net);
+
+ lib_stats_uninit();
+
+ /* 4. check memory usage */
+ test_begin (test, "Memory verification")
+ {
+ test_fail_if (blk_check_memory() == false, "Memory not freed");
+ }
+ test_end;
+
+ /* 5. check test result */
+ test_result (test);
+ return test_nb_failed (test) == 0 ? 0 : 1;
+}
+
+u8 *
+cp_cl_interf_get_buffer_tx (cp_t *ctx)
+{
+ dbg_assert (ctx);
+ return buffer;
+}
+
+/**
+ * Send a MME over the PWL or the HLE.
+ * \param ctx the module context.
+ * \param mme The MME to send.
+ *
+ */
+void
+cp_cl_interf_mme_send (cp_t *ctx, cp_mme_tx_t * mme)
+{
+ mme->p_mme = NULL;
+}
diff --git a/cesar/cp/eoc/cco/action/test/utest_eoc/Makefile b/cesar/cp/eoc/cco/action/test/utest_eoc/Makefile
new file mode 100644
index 0000000000..b238673cdd
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/test/utest_eoc/Makefile
@@ -0,0 +1,12 @@
+all: fsm actions
+
+fsm: fsm-Makefile
+ make -f fsm-Makefile
+
+actions: actions-Makefile
+ make -f actions-Makefile
+
+clean: fsm-Makefile actions-Makefile
+ make -f fsm-Makefile clean
+ make -f actions-Makefile clean
+ rmdir obj
diff --git a/cesar/cp/eoc/cco/action/test/utest_eoc/actions-Config b/cesar/cp/eoc/cco/action/test/utest_eoc/actions-Config
new file mode 100644
index 0000000000..c052411539
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/test/utest_eoc/actions-Config
@@ -0,0 +1,23 @@
+CONFIG_CP_EOC = y
+CONFIG_DEBUG_FATAL_CATCH = y
+CONFIG_CP_EOC_IS_MASTER = y
+CONFIG_CP_FSM_DEF = "cp/eoc/fsm/src/fsm/cp_eoc_cco.fsm"
+CONFIG_CP_EOC_MULTI_STA_FSM_DEF="cp/eoc/multi_sta_fsm/src/fsm/multi_sta.fsm"
+CONFIG_CP_MSG_EOC_MULTI_STA_MME = y
+CONFIG_ATU_FACTOR = 3
+CONFIG_MAC_COMMON_EOC_SCHED = y
+
+CONFIG_CP_MSG_EOC_DRV_MME = y
+CONFIG_MAC_COMMON_EOC_MFS = y
+CONFIG_MAC_COMMON_EOC_TONEMASK = y
+CONFIG_MAC_PBPROC_EOC_FC = y
+CONFIG_TRACE_ON_FATAL = y
+CONFIG_TRACE = n
+CONFIG_STATS = y
+CONFIG_CP_STA_MGR_CCO_EOC = y
+CONFIG_CP_EOC_CCO_ACTION_WL_ALLOWED = y
+CONFIG_CP_EOC_MULTI_STA_WL_ALLOWED = y
+CONFIG_CL_EOC_ROUTE = y
+CONFIG_CP_EOC_DBG_PRINT_LEVEL = 1
+CONFIG_MAC_COMMON_EOC_TEI = y
+
diff --git a/cesar/cp/eoc/cco/action/test/utest_eoc/actions-Makefile b/cesar/cp/eoc/cco/action/test/utest_eoc/actions-Makefile
new file mode 100644
index 0000000000..a98efadbb3
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/test/utest_eoc/actions-Makefile
@@ -0,0 +1,29 @@
+BASE = ../../../../../..
+
+VARIANT = actions
+
+DEFS = -DSTA_CORE_UNIT_TEST=1
+
+
+INCLUDES = cp/eoc/cco/action/test/utest_eoc \
+ cp/eoc/cco/action/test/utest_eoc/override
+
+HOST_PROGRAMS = test_actions
+
+test_actions_SOURCES = test_actions.c actions.c msg_vs.c core_stub.c\
+ dataplane_stub.c cp_stub.c ce_rx_stub.c fsm_event_stub.c \
+ hal_phy_stub.c cyg_stub.c cl_interf_stub.c cp_msg_stub.c
+
+test_actions_MODULES = lib lib/scenario mac/common cp/eoc/msg/stub \
+ cp/eoc/sta/mgr cp/eoc/sta/action cp/sta/core/stub \
+ cp/eoc/multi_sta_fsm cp/eoc/multi_sta/action \
+ cp/eoc/cco/action cp/eoc/cco/bw cp/msg \
+ cp/eoc/beacon/stub cp/eoc/fsm/stub \
+ cl/stub cp/secu interface/stub ce/rx/stub ce/tx/stub \
+ mac/sar/stub mac/pbproc/stub mac/ca/stub bsu/stub bufmgr/stub
+
+cp_msg_MODULE_SOURCES = msg_drv.c
+test_actions_CONFIG_MODULES = cp/eoc cl mac/sar
+test_actions_LDLIBS = -lm
+
+include $(BASE)/common/make/top.mk
diff --git a/cesar/cp/eoc/cco/action/test/utest_eoc/fsm-Config b/cesar/cp/eoc/cco/action/test/utest_eoc/fsm-Config
new file mode 100644
index 0000000000..474d63c1b6
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/test/utest_eoc/fsm-Config
@@ -0,0 +1,8 @@
+CONFIG_CP_EOC = y
+CONFIG_DEBUG_FATAL_CATCH = y
+CONFIG_CP_EOC_IS_MASTER = y
+CONFIG_CP_FSM_DEF = "cp/eoc/fsm/src/fsm/cp_eoc_cco.fsm"
+CONFIG_CP_EOC_MULTI_STA_FSM_DEF="cp/eoc/multi_sta_fsm/src/fsm/multi_sta.fsm"
+CONFIG_CP_MSG_EOC_MULTI_STA_MME = y
+CONFIG_ATU_FACTOR = 3
+CONFIG_MAC_COMMON_EOC_SCHED = y
diff --git a/cesar/cp/eoc/cco/action/test/utest_eoc/fsm-Makefile b/cesar/cp/eoc/cco/action/test/utest_eoc/fsm-Makefile
new file mode 100644
index 0000000000..200dfae1c8
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/test/utest_eoc/fsm-Makefile
@@ -0,0 +1,19 @@
+BASE = ../../../../../..
+
+VARIANT = fsm
+
+INCLUDES = cp/eoc/cco/action/test/utest_eoc \
+ cp/eoc/cco/action/test/utest_eoc/override
+
+HOST_PROGRAMS = test_fsm
+
+test_fsm_SOURCES = test_fsm.c actions.c scenario_event_stub.c
+test_fsm_MODULES = lib lib/scenario cp/eoc/fsm ce/tx/stub \
+ mac/sar/stub cp/eoc/sta/action/stub cp/eoc/beacon/stub \
+ cp/eoc/cco/action/stub
+
+test_fsm_CONFIG_MODULES = mac/common cl mac/sar cp/eoc
+
+cp_MODULE_SOURCES = $(if $(filter y,$(CONFIG_TRACE)),trace.c)
+
+include $(BASE)/common/make/top.mk
diff --git a/cesar/cp/eoc/cco/action/test/utest_eoc/inc/scenario_defs.h b/cesar/cp/eoc/cco/action/test/utest_eoc/inc/scenario_defs.h
new file mode 100644
index 0000000000..94bfa6c180
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/test/utest_eoc/inc/scenario_defs.h
@@ -0,0 +1,351 @@
+#ifndef inc_scenario_defs_h
+#define inc_scenario_defs_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file inc/scenario_defs.h
+ * \brief Scenario definitions.
+ * \ingroup test
+ */
+
+#include "cp/msg/msg.h"
+#include "cp/sta/mgr/sta.h"
+#include "cp/sta/mgr/net.h"
+#include "cp/fsm/fsm.h"
+
+#include "cp/mme.h"
+#include "cl/cl_mactotei.h"
+#include "mac/common/tonemap.h"
+#include "cp/eoc/cco/bw/service.h"
+#include "cp/eoc/msg/inc/msg_vs.h"
+
+/* Scenario globals. */
+#define SCENARIO_DEFS_GLOBALS \
+ cp_t *cp;\
+ u16 prn; \
+ u32 my_nonce; \
+ u32 your_nonce; \
+ cp_mme_tx_t *mme;
+
+/* Scenario actions. */
+#define SCENARIO_DEFS_ACTIONS \
+ post_and_process, \
+ post, \
+ trigger, \
+ post_urgent, \
+ process, \
+ process_urgent,\
+ vs__started__vs_get_tonemap_req,\
+ vs_eoc__cco__vs_eoc_cco_get_ports_req,\
+ vs_eoc__cco__vs_eoc_cco_get_services_req,\
+ vs__started__vs_get_attenuation_list_req
+
+/* Actions with MME and parameters. */
+#define __m(action, param...) \
+typedef struct \
+{ \
+ cp_mme_peer_t peer; \
+ PREPROC_FOR_EACH (__m_, param) \
+} scenario_action_ ## action ## _t; \
+void \
+scenario_action_ ## action ## _cb ( \
+ scenario_globals_t *globals, scenario_params_t *params);
+#define __m_(param) param;
+
+
+__m (vs__started__vs_get_tonemap_req)
+__m (vs_eoc__cco__vs_eoc_cco_get_ports_req)
+__m (vs_eoc__cco__vs_eoc_cco_get_services_req)
+__m (vs__started__vs_get_attenuation_list_req)
+
+#undef __m_
+#undef __m
+
+typedef struct
+{
+ cp_fsm_event_type_t type;
+ cp_mme_rx_t *mme;
+ bsu_beacon_t *beacon;
+ cp_net_t *net;
+ cp_sta_t *sta;
+} scenario_action_event_param_t;
+
+typedef scenario_action_event_param_t scenario_action_post_and_process_t;
+typedef scenario_action_event_param_t scenario_action_post_t;
+typedef scenario_action_event_param_t scenario_action_trigger_t;
+typedef scenario_action_event_param_t scenario_action_post_urgent_t;
+typedef scenario_empty_t scenario_action_process_t;
+typedef scenario_empty_t scenario_action_process_urgent_t;
+
+void
+scenario_action_post_and_process_cb (scenario_globals_t *globals,
+ scenario_params_t *params);
+
+void
+scenario_action_post_cb (scenario_globals_t *globals,
+ scenario_params_t *params);
+
+void
+scenario_action_trigger_cb (scenario_globals_t *globals,
+ scenario_params_t *params);
+
+void
+scenario_action_post_urgent_cb (scenario_globals_t *globals,
+ scenario_params_t *params);
+
+void
+scenario_action_process_cb (scenario_globals_t *globals,
+ scenario_params_t *params);
+
+void
+scenario_action_process_urgent_cb (scenario_globals_t *globals,
+ scenario_params_t *params);
+
+/* Scenario events. */
+
+#define SCENARIO_DEFS_EVENTS \
+ cp_fsm__STOPPED__drv_sta_set_mac_addr_req, \
+ cp_fsm__STOPPED__drv_sta_set_cco_pref_req, \
+ cp_fsm__STOPPED__drv_sta_set_was_cco_req, \
+ cp_fsm__STOPPED__drv_sta_set_dpw_req, \
+ cp_fsm__STOPPED__drv_sta_set_nid_req, \
+ cp_fsm__STOPPED__drv_sta_set_tonemask_req, \
+ cp_fsm__STOPPED__drv_sta_set_key_req, \
+ cp_fsm__STOPPED__drv_sta_set_dak_req, \
+ cp_fsm__STOPPED__drv_sta_mac_start_req, \
+ cp_fsm__STOPPED__drv_sta_set_npw_req, \
+ cp_fsm__STOPPED__drv_sta_set_sl_req,\
+ cp_fsm__STOPPED__drv_sta_set_m_sta_hfid_req,\
+ cp_fsm__STOPPED__drv_sta_set_u_sta_hfid_req,\
+ cp_fsm__STOPPED__drv_sta_set_avln_hfid_req,\
+ cp_fsm__STARTED__poweron__idle__to_poweron, \
+ cp_fsm__STARTED__drv_sta_mac_stop_req,\
+ cp_fsm__POWER_ON__beacon_not_received, \
+ cp_fsm__POWER_ON__power_on_rx_beacon, \
+ cp_fsm__POWER_ON__power_on_no_beacons, \
+ cp_fsm__CCO__cco_drv_mac_stop, \
+ cp_fsm__CCO__send_central_beacon, \
+ cp_fsm__CCO__event_dispatch, \
+ cp_fsm__CCO__vs_eoc__cco__vs_eoc_get_topo_req, \
+ cp_fsm__CCO__vs_eoc__cco__vs_eoc_get_wl_req, \
+ cp_fsm__CCO__vs_eoc__cco__vs_eoc_set_wl_req, \
+ cp_fsm__CCO__vs_eoc__cco__vs_eoc_set_ports_req, \
+ cp_fsm__CCO__vs_eoc__cco__vs_eoc_get_ports_req, \
+ cp_fsm__CCO__vs_eoc__cco__vs_eoc_set_services_req, \
+ cp_fsm__CCO__vs_eoc__cco__vs_eoc_get_services_req, \
+ cp_fsm__CCO__vs_eoc__cco__vs_eoc_get_info_req, \
+ cp_fsm__CCO__vs_eoc__cco__vs_eoc_diagnostic_info_req, \
+ cp_fsm__CCO__vs_eoc__cco__vs_eoc_get_real_time_statistics_req, \
+ cp_msg_drv_sta_set_key_req_receive, \
+ cp_msg_drv_any_cnf_send, \
+ cp_msg_drv_sta_set_dak_req_receive, \
+ cp_msg_drv_sta_status_req_receive, \
+ cp_msg_drv_sta_status_cnf_send, \
+ cp_msg_drv_sta_status_ind_send, \
+ cp_msg_cc_relay_req_receive, \
+ cp_msg_cc_relay_ind_send, \
+ cp_msg_drv_sta_set_avln_hfid_ind_send, \
+ cp_msg_drv_sta_set_u_sta_hfid_ind_send, \
+ cp_msg_cm_nw_stats_cnf_send_begin, \
+ cp_msg_cm_nw_stats_cnf_send, \
+ cp_msg_cm_nw_stats_cnf_send_end, \
+ cp_msg_cm_link_stats_req_receive, \
+ cp_msg_cm_link_stats_cnf_send, \
+ cp_msg_cm_link_stats_cnf_send_begin, \
+ cp_msg_cm_link_stats_cnf_send_end, \
+ cp_msg_vs_get_attenuation_list_req_receive, \
+ cp_msg_vs_get_attenuation_list_cnf_send_begin, \
+ cp_msg_vs_get_attenuation_list_cnf_send_entry, \
+ cp_msg_vs_get_attenuation_list_cnf_send_end, \
+ cp_msg_vs_get_snr_req_receive, \
+ cp_msg_vs_get_snr_cnf_send, \
+ cp_msg_vs_get_ce_stats_cnf_send, \
+ cp_msg_imac_get_discover_list_req_receive, \
+ cp_msg_imac_get_discover_list_cnf_send_begin, \
+ cp_msg_imac_get_discover_list_cnf_send, \
+ cp_msg_imac_get_discover_list_cnf_send_end, \
+ cp_msg_vs_get_tonemap_req_receive, \
+ cp_msg_vs_get_tonemap_cnf_send, \
+ cp_msg_vs_eoc_cco_get_ports_req_receive, \
+ cp_msg_vs_eoc_cco_get_ports_cnf_send, \
+ cp_msg_vs_eoc_cco_get_services_req_receive, \
+ cp_msg_vs_eoc_cco_get_services_cnf_send, \
+ cp_fsm__CCO__bridge_first_com,\
+ cp_fsm__CCO__nek_provide,\
+ cp_fsm__CCO__set_key_cnf,\
+ cp_fsm__CCO__nek_change_timeout,\
+ cp_fsm__CCO__vs_eoc__cco__leave_remove_timeout, \
+ cp_fsm__CCO__drv_sta_get_key_req, \
+ cp_fsm__BCCO__bcco_drv_mac_stop, \
+ cp_fsm__BCCO__bcco_no_beacons,\
+ cp_fsm__STOPPING__poweron__many__to_idle,\
+ cp_fsm__STOPPING__stopped
+
+/* MME send event. */
+#define __ms(event, param...) \
+typedef struct \
+{ \
+ cp_mme_peer_t peer; \
+ PREPROC_FOR_EACH (__p_, ## param) \
+} scenario_event_ ## event ## _t;
+
+/* MME send event complex. */
+#define __msc(event, param...) \
+typedef struct \
+{ \
+ PREPROC_FOR_EACH (__p_, ## param) \
+} scenario_event_ ## event ## _t;
+
+/* MME receive event. */
+#define __mr(event, param...) \
+typedef struct \
+{ \
+ bool ok; \
+ PREPROC_FOR_EACH (__p_, ## param) \
+} scenario_event_ ## event ## _t;
+
+#define __p_(param) param;
+
+/* MME send event for CC_RELAY.IND. */
+#define __msr(event, param...) \
+ typedef struct \
+{ \
+ mac_t mac_fa; \
+ cp_tei_t ftei; \
+ PREPROC_FOR_EACH (__p_, ## param) \
+} scenario_event_ ## event ## _t;
+
+__mr (cp_msg_drv_sta_set_key_req_receive,
+ cp_key_t nmk, cp_msg_drv_sta_set_key_type_t type,
+ cp_nid_t nid, cp_security_level_t sl)
+__ms (cp_msg_drv_any_cnf_send, mmtype_t mmtype, cp_msg_drv_result_t result)
+__mr (cp_msg_drv_sta_set_dak_req_receive, cp_key_t dak)
+__mr (cp_msg_drv_sta_status_req_receive)
+__ms (cp_msg_drv_sta_status_cnf_send, const cp_msg_drv_sta_status_cnf_t data)
+__ms (cp_msg_drv_sta_status_ind_send, const cp_msg_drv_sta_status_t data)
+__mr (cp_msg_cc_relay_req_receive, uint length, uint mmtype)
+__msr (cp_msg_cc_relay_ind_send, mac_t osa, cp_tei_t stei, uint length)
+__ms (cp_msg_drv_sta_set_avln_hfid_ind_send, char *avln_hfid)
+__ms (cp_msg_drv_sta_set_u_sta_hfid_ind_send, char *u_sta_hfid)
+__ms (cp_msg_cm_nw_stats_cnf_send_begin, uint num_stats)
+__msc (cp_msg_cm_nw_stats_cnf_send, mac_t mac, uint phy_dr_tx, uint phy_dr_rx)
+__msc (cp_msg_cm_nw_stats_cnf_send_end)
+__mr (cp_msg_cm_link_stats_req_receive, cp_msg_cm_link_stats_req_t data)
+__msc (cp_msg_cm_link_stats_cnf_send, mfs_t *mfs,
+ cp_msg_cm_link_stats_tlflag_t transmit)
+__ms (cp_msg_cm_link_stats_cnf_send_begin, u8 req_id, u8 res_type)
+__msc (cp_msg_cm_link_stats_cnf_send_end)
+__mr (cp_msg_vs_get_snr_req_receive, mac_t mac_addr,
+ cp_msg_vs_get_snr_req_int_t tm_int_i, u8 int_id, u8 carrier_gr)
+__ms (cp_msg_vs_get_snr_cnf_send, const cp_msg_vs_get_snr_cnf_t data)
+__mr (cp_msg_vs_get_attenuation_list_req_receive)
+__ms (cp_msg_vs_get_attenuation_list_cnf_send_begin, uint nb)
+__msc (cp_msg_vs_get_attenuation_list_cnf_send_entry,
+ mac_t mac, cp_tei_t tei,
+ vs_get_attenuation_list_att_status_t status, s8 attenuation_db)
+__msc (cp_msg_vs_get_attenuation_list_cnf_send_end)
+
+__ms (cp_msg_vs_get_ce_stats_cnf_send, u8 version, u8 result, sta_t *sta,
+ tonemask_info_t *ti)
+__mr (cp_msg_imac_get_discover_list_req_receive)
+__ms (cp_msg_imac_get_discover_list_cnf_send_begin,
+ cp_msg_imac_get_discover_list_cnf_result_t result, u8 version,
+ u8 num_stations)
+__msc (cp_msg_imac_get_discover_list_cnf_send,
+ const cp_msg_imac_discover_list_sta_info_t *data)
+__msc (cp_msg_imac_get_discover_list_cnf_send_end)
+
+__mr (cp_msg_vs_get_tonemap_req_receive,
+ mac_t mac_addr, cp_msg_vs_get_tonemap_tmi_t tmi,
+ u8 int_id, cp_msg_vs_get_tonemap_req_dir_t dir)
+__ms (cp_msg_vs_get_tonemap_cnf_send,
+ cp_msg_vs_get_tonemap_cnf_result_t result,
+ uint beacon_delta, u8 int_id,
+ tonemaps_t *tms, cp_msg_vs_get_tonemap_tmi_t tmi)
+
+__mr (cp_msg_vs_eoc_cco_get_ports_req_receive,
+ u8 first_mac_index_nb)
+
+__ms (cp_msg_vs_eoc_cco_get_ports_cnf_send,
+ cp_msg_vs_eoc_cco_get_ports_req_result_t result,
+ uint numStas, mac_t* stas_macs, bool (*stas_port_ed)[PORT_NB],
+ u8 (*stas_port_service)[PORT_NB], u8 first_mac_index_nb)
+
+__mr (cp_msg_vs_eoc_cco_get_services_req_receive,
+ u8 first_service_index_nb)
+
+__ms (cp_msg_vs_eoc_cco_get_services_cnf_send,
+ cp_msg_vs_eoc_cco_get_services_req_result_t result,
+ u8 services_number, u8* service_indexes, u8* classifier_rules,
+ u16* classifier_values, u8* acses, u8* parameters_numbers,
+ u16 (*parameters_lists)[SERVICE_PARAMETERS_NB],
+ u8 first_service_index_nb)
+
+#undef __ms
+#undef __msc
+#undef __mr
+#undef __msr
+typedef struct
+{
+ cp_fsm_branch_t branch;
+} scenario_event_transition_with_branch_t;
+
+/* Any event. */
+#define __e(event, param...) \
+typedef struct \
+{ \
+ PREPROC_FOR_EACH (__p_, ## param) \
+} scenario_event_ ## event ## _t;
+
+__e (cp_fsm__STOPPED__drv_sta_set_mac_addr_req)
+__e (cp_fsm__STOPPED__drv_sta_set_cco_pref_req)
+__e (cp_fsm__STOPPED__drv_sta_set_was_cco_req)
+__e (cp_fsm__STOPPED__drv_sta_set_dpw_req)
+__e (cp_fsm__STOPPED__drv_sta_set_nid_req)
+__e (cp_fsm__STOPPED__drv_sta_set_tonemask_req)
+__e (cp_fsm__STOPPED__drv_sta_set_key_req)
+__e (cp_fsm__STOPPED__drv_sta_set_dak_req)
+__e (cp_fsm__STOPPED__drv_sta_mac_start_req)
+__e (cp_fsm__STARTED__poweron__idle__to_poweron)
+__e (cp_fsm__STARTED__drv_sta_mac_stop_req)
+__e (cp_fsm__POWER_ON__beacon_not_received)
+__e (cp_fsm__POWER_ON__power_on_rx_beacon)
+__e (cp_fsm__POWER_ON__power_on_no_beacons)
+__e (cp_fsm__CCO__cco_drv_mac_stop)
+__e (cp_fsm__CCO__bridge_first_com)
+__e (cp_fsm__CCO__event_dispatch)
+__e (cp_fsm__CCO__send_central_beacon)
+__e (cp_fsm__CCO__vs_eoc__cco__vs_eoc_get_topo_req)
+__e (cp_fsm__CCO__vs_eoc__cco__vs_eoc_get_wl_req)
+__e (cp_fsm__CCO__vs_eoc__cco__vs_eoc_set_wl_req)
+__e (cp_fsm__CCO__vs_eoc__cco__vs_eoc_set_ports_req)
+__e (cp_fsm__CCO__vs_eoc__cco__vs_eoc_get_ports_req)
+__e (cp_fsm__CCO__vs_eoc__cco__vs_eoc_set_services_req)
+__e (cp_fsm__CCO__vs_eoc__cco__vs_eoc_get_services_req)
+__e (cp_fsm__CCO__vs_eoc__cco__vs_eoc_get_info_req)
+__e (cp_fsm__CCO__vs_eoc__cco__vs_eoc_diagnostic_info_req)
+__e (cp_fsm__CCO__vs_eoc__cco__vs_eoc_get_real_time_statistics_req)
+__e (cp_fsm__CCO__nek_provide)
+__e (cp_fsm__CCO__set_key_cnf)
+__e (cp_fsm__CCO__nek_change_timeout, cp_fsm_branch_t branch)
+__e (cp_fsm__CCO__vs_eoc__cco__leave_remove_timeout)
+__e (cp_fsm__CCO__drv_sta_get_key_req)
+__e (cp_fsm__BCCO__bcco_no_beacons)
+__e (cp_fsm__BCCO__bcco_drv_mac_stop)
+__e (cp_fsm__STOPPING__poweron__many__to_idle)
+__e (cp_fsm__STOPPING__stopped)
+__e (cp_fsm__STOPPED__drv_sta_set_npw_req)
+__e (cp_fsm__STOPPED__drv_sta_set_sl_req)
+__e (cp_fsm__STOPPED__drv_sta_set_m_sta_hfid_req)
+__e (cp_fsm__STOPPED__drv_sta_set_u_sta_hfid_req)
+__e (cp_fsm__STOPPED__drv_sta_set_avln_hfid_req)
+
+#undef __e
+#undef __p_
+
+#endif /* inc_scenario_defs_h */
diff --git a/cesar/cp/eoc/cco/action/test/utest_eoc/inc/test_cco_action.h b/cesar/cp/eoc/cco/action/test/utest_eoc/inc/test_cco_action.h
new file mode 100644
index 0000000000..c6c25bf850
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/test/utest_eoc/inc/test_cco_action.h
@@ -0,0 +1,56 @@
+#ifndef inc_test_sta_action_h
+#define inc_test_sta_action_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file inc/test_cco_action.h
+ * \brief Test sta/action.
+ * \ingroup test
+ */
+#include "cp/inc/context.h"
+
+/** Contexts used in tests. */
+struct test_sta_action_t
+{
+ cp_t cp;
+ mac_config_t mac_config;
+};
+typedef struct test_sta_action_t test_sta_action_t;
+
+/**
+ * Initialise test contexts.
+ * \param ctx test context
+ */
+void
+test_sta_action_init (test_sta_action_t *ctx);
+
+/**
+ * Uninitialise test contexts.
+ * \param ctx test context
+ */
+void
+test_sta_action_uninit (test_sta_action_t *ctx);
+
+/**
+ * Reset test contexts.
+ * \param ctx test context
+ */
+void
+test_sta_action_reset (test_sta_action_t *ctx);
+
+/**
+ * Create our AVLN as if the STA was associated.
+ * \param ctx test context
+ * \param nid our NID
+ * \param snid our SNID
+ */
+void
+test_sta_action_create_our_net (test_sta_action_t *ctx, cp_nid_t nid,
+ cp_snid_t snid);
+
+#endif /* inc_test_sta_action_h */
diff --git a/cesar/cp/eoc/cco/action/test/utest_eoc/override/cp/inc/context.h b/cesar/cp/eoc/cco/action/test/utest_eoc/override/cp/inc/context.h
new file mode 100644
index 0000000000..933c8fbb36
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/test/utest_eoc/override/cp/inc/context.h
@@ -0,0 +1,120 @@
+#ifndef override_cp_inc_context_h
+#define override_cp_inc_context_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file override/cp/inc/context.h
+ * \brief Control plane context override.
+ * \ingroup test
+ */
+
+#include "cp/fsm/fsm.h"
+#include "cp/fsm/inc/context.h"
+#include "cp/inc/trace.h"
+#include "mac/common/config.h"
+#include "cp/msg/inc/context.h"
+#include "lib/rnd.h"
+#include "interface/forward.h"
+#include "cp/sta/mgr/inc/sta_mgr.h"
+#include "cp/sta/mgr/sta_mgr.h"
+#include "cl/cl.h"
+#include "cl/inc/context.h"
+#include "cp/cco/bw/bw.h"
+#include "cp/eoc/cco/bw/inc/bw.h"
+#include "cp/cco/bw/inc/context.h"
+#include "cp/eoc/cco/action/inc/cco_action.h"
+#include "cp/eoc/cco/action/cco_action.h"
+#include "cp/eoc/beacon/beacon.h"
+#include "cp/eoc/beacon/inc/beacon.h"
+#include "cp/cl_interf/inc/context.h"
+#include "cp/cl_interf/cl_interf.h"
+#include "cp/cco/region/region.h"
+#include "cp/cco/region/inc/context.h"
+#include "cp/sta/core/defs.h"
+#include "cp/sta/action/action.h"
+#include "cp/sta/action/inc/context.h"
+#include "hal/phy/phy.h"
+#include "hal/timer/timer.h"
+#include "config/cp/eoc.h"
+#include "bsu/beacon/beacon.h"
+#include "bsu/aclf/aclf.h"
+#include "mac/pbproc/inc/context.h"
+#include "bsu/inc/context.h"
+#include "cp/eoc/inc/dbg_print.h"
+#include "bufmgr/bufmgr.h"
+
+#include "cp/eoc/sta/action/vs.h"
+#include "cp/eoc/sta/action/inc/vs.h"
+
+struct cp_t
+{
+#if CONFIG_TRACE
+ /** Trace context. */
+ trace_buffer_t trace;
+ /** Verbose trace context. */
+ trace_buffer_t trace_verbose;
+#endif /* CONFIG_TRACE */
+
+ /** FSM context. */
+ cp_fsm_t fsm;
+ /** STA core flag. */
+ bool sta_core_flag;
+ /** STA core urgent flag. */
+ bool sta_core_urgent_flag;
+
+ cp_msg_t msg;
+
+ lib_rnd_t rnd;
+
+ interface_t *interface;
+
+ cp_sta_mgr_t sta_mgr;
+
+ cl_t *cl;
+
+ mac_store_t *mac_store;
+
+ sar_t *sar;
+
+ mac_config_t *mac_config;
+
+ cp_cco_bw_t bw;
+
+ cp_eoc_cco_bw_sched_t schedule;
+
+ ca_t *ca;
+
+ cp_beacon_t beacon;
+
+ hal_timer_t *hal_timer;
+
+ cp_cl_interf_t cl_interf;
+
+ cp_cco_region_t region;
+
+ phy_t *phy;
+
+ pbproc_t *pbproc;
+
+ cp_sta_action_t sta_action;
+
+ cp_cco_action_t cco_action;
+
+ /** CE RX context. */
+ ce_rx_t *ce_rx;
+
+ bsu_aclf_t *bsu_aclf;
+
+ /** BSU context. */
+ bsu_t *bsu;
+
+ /* Buffer manager context. */
+ bufmgr_t *bufmgr;
+};
+
+#endif /* override_cp_inc_context_h */
diff --git a/cesar/cp/eoc/cco/action/test/utest_eoc/override/cp/sta/core/core.h b/cesar/cp/eoc/cco/action/test/utest_eoc/override/cp/sta/core/core.h
new file mode 100644
index 0000000000..3239854677
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/test/utest_eoc/override/cp/sta/core/core.h
@@ -0,0 +1,56 @@
+#ifndef override_cp_sta_core_core_h
+#define override_cp_sta_core_core_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file override/cp/sta/core/core.h
+ * \brief STA Core override.
+ * \ingroup test
+ */
+#include "cp/inc/context.h"
+#include "defs.h"
+
+BEGIN_DECLS
+
+void
+cp_sta_core_signal_fsm_event (cp_t *ctx);
+
+void
+cp_sta_core_signal_fsm_urgent_event (cp_t *ctx);
+
+void
+cp_sta_core_checkpoint (cp_t *ctx);
+
+void
+cp_sta_core_signal_recv_mme_event(cp_t *ctx);
+
+void
+cp_sta_core_gen_timed_event(cp_t *cp_ctx,
+ cp_sta_core_timed_event_def_t *sta_core_timed_event,
+ cp_fsm_event_t *fsm_event,
+ uint event_delay_ms);
+
+void
+cp_sta_core_gen_cyclic_event(cp_t *cp_ctx,
+ cp_sta_core_timed_event_def_t *sta_core_cyclic_event,
+ cp_fsm_event_t *fsm_event,
+ uint event_period_ms);
+
+void
+cp_sta_core_stop_timed_or_cyclic_event(cp_t *cp_ctx,
+ cp_sta_core_timed_event_def_t *sta_core_timed_event);
+
+u32
+cp_sta_core_get_date_ms (cp_t *ctx);
+
+int
+cp_sta_core_ms_to_cyg_tick (cp_t *ctx, const uint ms);
+
+END_DECLS
+
+#endif /* override_cp_sta_core_core_h */
diff --git a/cesar/cp/eoc/cco/action/test/utest_eoc/override/cp/sta/core/defs.h b/cesar/cp/eoc/cco/action/test/utest_eoc/override/cp/sta/core/defs.h
new file mode 100644
index 0000000000..9698b44e93
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/test/utest_eoc/override/cp/sta/core/defs.h
@@ -0,0 +1,57 @@
+#ifndef cp_sta_core_defs_h
+#define cp_sta_core_defs_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/sta/core/defs.h
+ * \brief Sta core defs.
+ * \ingroup cp/sta/core
+ *
+ */
+#include "cp/fsm/forward.h"
+
+/** Forward declaration. */
+typedef struct cp_sta_core_t cp_sta_core_t;
+
+/*
+ * the sta core event flags
+ * these are some flags, so take care to give a value with all bits set to 0 but one.
+ */
+enum cp_sta_core_event_flag_t
+{
+ CP_STA_CORE_EVENT_FLAG_RECV_BEACON = 0x1,
+ CP_STA_CORE_EVENT_FLAG_RECV_MME = 0x2,
+ CP_STA_CORE_EVENT_FLAG_FSM = 0x4,
+ CP_STA_CORE_EVENT_FLAG_GARBAGE = 0x8,
+ CP_STA_CORE_EVENT_FLAG_TERMINATE = 0x10
+};
+typedef enum cp_sta_core_event_flag_t cp_sta_core_event_flag_t;
+
+/** Definition of alarm info structure
+ * (applications should not use it directly but use "alias" defined just below) */
+struct cp_sta_core_timed_event_def_t
+{
+ /* eCos alarm. */
+ uint alarm;
+ /* eCos alarm handle. */
+ uint alarm_handle;
+ /* the sta core event flag to set
+ * (auto or user-specified when creating/launching timer alarm). */
+ cp_sta_core_event_flag_t event_flag;
+ /* FSM event specified when creating/launching timer alarm
+ * (set if the previous flag is CP_STA_CORE_EVENT_FLAG_FSM). */
+ cp_fsm_event_t *fsm_event;
+ /* flag indicating a periodic alarm (if set to true)
+ * or one-shot alarm (if set to false). */
+ bool cyclic_alarm;
+ /* pointer to CP context. */
+ cp_t *cp_ctx;
+};
+typedef struct cp_sta_core_timed_event_def_t cp_sta_core_timed_event_def_t;
+
+#endif /* cp_sta_core_defs_h */
diff --git a/cesar/cp/eoc/cco/action/test/utest_eoc/override/cyg/kernel/kapi.h b/cesar/cp/eoc/cco/action/test/utest_eoc/override/cyg/kernel/kapi.h
new file mode 100644
index 0000000000..019e5d3a07
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/test/utest_eoc/override/cyg/kernel/kapi.h
@@ -0,0 +1,37 @@
+#ifndef override_cyg_kernel_kapi_h
+#define override_cyg_kernel_kapi_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2010 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file override/cyg/kernel/kapi.h
+ * \brief override some kernel api from <cyg/kernel/kapi.h>.
+ * \ingroup cp_msg
+ *
+ *
+ */
+
+struct cyg_resolution_t
+{
+ u32 dividend;
+ u32 divisor;
+} ;
+
+typedef struct cyg_resolution_t cyg_resolution_t;
+
+typedef u64 cyg_tick_count_t;
+
+int
+cyg_real_time_clock (void);
+
+cyg_resolution_t
+cyg_clock_get_resolution (int clock);
+
+cyg_tick_count_t
+cyg_current_time (void);
+
+#endif
diff --git a/cesar/cp/eoc/cco/action/test/utest_eoc/src/actions.c b/cesar/cp/eoc/cco/action/test/utest_eoc/src/actions.c
new file mode 100644
index 0000000000..6ebdcb4ed7
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/test/utest_eoc/src/actions.c
@@ -0,0 +1,116 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/actions.c
+ * \brief Scenario actions.
+ * \ingroup test
+ */
+#include "common/std.h"
+#include "lib/scenario/scenario.h"
+#include "cp/inc/context.h"
+#include "cp/eoc/cco/action/cco_action.h"
+
+cp_fsm_event_t *
+scenario_action_make_event (cp_t *cp, scenario_action_event_param_t *ep)
+{
+ cp_fsm_event_t *event;
+ if (ep->mme)
+ event = cp_fsm_event_mme_new (cp, ep->type, ep->mme);
+ else if (ep->beacon)
+ event = cp_fsm_event_beacon_new (cp, ep->type, ep->beacon, ep->net,
+ ep->sta);
+ else if (ep->sta)
+ event = cp_fsm_event_sta_new (cp, ep->type, ep->net, ep->sta);
+ else
+ event = cp_fsm_event_bare_new (cp, ep->type);
+ return event;
+}
+
+void
+scenario_action_post_and_process_cb (scenario_globals_t *globals,
+ scenario_params_t *params)
+{
+ test_within (scenario.t);
+ scenario_action_post_and_process_t *p = &params->action_post_and_process;
+ cp_fsm_post (globals->cp, scenario_action_make_event (globals->cp, p));
+ test_fail_unless (globals->cp->sta_core_flag);
+ globals->cp->sta_core_flag = false;
+ cp_fsm_process (globals->cp);
+}
+
+void
+scenario_action_post_cb (scenario_globals_t *globals,
+ scenario_params_t *params)
+{
+ test_within (scenario.t);
+ scenario_action_post_t *p = &params->action_post;
+ cp_fsm_post (globals->cp, scenario_action_make_event (globals->cp, p));
+ test_fail_unless (globals->cp->sta_core_flag);
+}
+
+void
+scenario_action_trigger_cb (scenario_globals_t *globals,
+ scenario_params_t *params)
+{
+ test_within (scenario.t);
+ scenario_action_trigger_t *p = &params->action_trigger;
+ cp_fsm_trigger (globals->cp, scenario_action_make_event (globals->cp, p));
+ test_fail_unless (globals->cp->sta_core_flag);
+}
+
+void
+scenario_action_post_urgent_cb (scenario_globals_t *globals,
+ scenario_params_t *params)
+{
+ test_within (scenario.t);
+ scenario_action_post_urgent_t *p = &params->action_post_urgent;
+ cp_fsm_post_urgent (globals->cp,
+ scenario_action_make_event (globals->cp, p));
+ test_fail_unless (globals->cp->sta_core_urgent_flag);
+}
+
+void
+scenario_action_process_cb (scenario_globals_t *globals,
+ scenario_params_t *params)
+{
+ test_within (scenario.t);
+ test_fail_unless (globals->cp->sta_core_flag);
+ globals->cp->sta_core_flag = false;
+ cp_fsm_process (globals->cp);
+}
+
+void
+scenario_action_process_urgent_cb (scenario_globals_t *globals,
+ scenario_params_t *params)
+{
+ test_within (scenario.t);
+ test_fail_unless (globals->cp->sta_core_urgent_flag);
+ globals->cp->sta_core_urgent_flag = false;
+ cp_fsm_process_urgent (globals->cp);
+}
+
+
+#define __m(FOLDER, ACTION) \
+void \
+scenario_action_ ## ACTION ## _cb (scenario_globals_t *globals, \
+ scenario_params_t *params) \
+{ \
+ cp_mme_rx_t mme; \
+ unsigned char buffer[1024];\
+ memset (&mme, 0, sizeof (cp_mme_rx_t)); \
+ mme.peer = params->action_ ## ACTION.peer; \
+ mme.peks = CP_MME_PEKS_SPC_NOT_EMBEDDED; \
+ bitstream_init (&mme.bitstream, buffer, sizeof(buffer), BITSTREAM_READ);\
+ cp_ ## FOLDER ## ACTION (globals->cp, &mme); \
+}
+
+__m (sta_action_, vs__started__vs_get_tonemap_req)
+__m (eoc_cco_action_, vs_eoc__cco__vs_eoc_cco_get_ports_req)
+__m (eoc_cco_action_, vs_eoc__cco__vs_eoc_cco_get_services_req)
+
+#undef __m
diff --git a/cesar/cp/eoc/cco/action/test/utest_eoc/src/ce_rx_stub.c b/cesar/cp/eoc/cco/action/test/utest_eoc/src/ce_rx_stub.c
new file mode 100644
index 0000000000..d57d3ae2cd
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/test/utest_eoc/src/ce_rx_stub.c
@@ -0,0 +1,31 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/ce_stub.c
+ * \brief CE stub.
+ * \ingroup test
+ */
+#include "common/std.h"
+#include "lib/blk.h"
+#include "ce/rx/rx.h"
+
+blk_t* nsr_block;
+
+blk_t *
+ce_rx_get_nsr (ce_rx_t *ce_rx, cp_tei_t tei, uint int_index,
+ uint int_version, u16* tm_ber)
+{
+ return nsr_block;
+}
+
+u8
+ce_rx_bl_nsr_compute_total_mean (ce_rx_bitloading_t *bl)
+{
+ return 1;
+}
+
diff --git a/cesar/cp/eoc/cco/action/test/utest_eoc/src/cl_interf_stub.c b/cesar/cp/eoc/cco/action/test/utest_eoc/src/cl_interf_stub.c
new file mode 100644
index 0000000000..910786a8a5
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/test/utest_eoc/src/cl_interf_stub.c
@@ -0,0 +1,44 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2012 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/cco/action/test/utest3/src/cl_interf_stub.c
+ * \brief « brief description »
+ * \ingroup cp_eoc_cco_action_test_utest3
+ *
+ * « long description »
+ */
+#include "common/std.h"
+#include "cp/cp.h"
+#include "cp/mme.h"
+
+static u8 buffer[2048];
+
+u8 *
+cp_cl_interf_get_buffer_tx (cp_t *ctx)
+{
+ dbg_assert (ctx);
+ return buffer;
+}
+
+/**
+ * Send a MME over the PWL or the HLE.
+ * \param ctx the module context.
+ * \param mme The MME to send.
+ *
+ */
+void
+cp_cl_interf_mme_send (cp_t *ctx, cp_mme_tx_t * mme)
+{
+ mme->p_mme = NULL;
+}
+
+void
+cp_cl_interf_init (cp_t *ctx)
+{
+ dbg_assert (ctx);
+}
diff --git a/cesar/cp/eoc/cco/action/test/utest_eoc/src/core_stub.c b/cesar/cp/eoc/cco/action/test/utest_eoc/src/core_stub.c
new file mode 100644
index 0000000000..980e81f77a
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/test/utest_eoc/src/core_stub.c
@@ -0,0 +1,42 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/core_stub.c
+ * \brief STA core stub.
+ * \ingroup test
+ */
+#include "common/std.h"
+#include "cp/sta/core/core.h"
+
+void
+cp_sta_core_gen_timed_event (
+ cp_t *cp_ctx, cp_sta_core_timed_event_def_t *sta_core_timed_event,
+ cp_fsm_event_t *fsm_event, uint event_delay_ms)
+{
+ dbg_assert (cp_ctx);
+ dbg_assert (sta_core_timed_event);
+ dbg_assert (fsm_event);
+
+ slab_release (fsm_event);
+}
+
+void
+cp_sta_core_stop_timed_or_cyclic_event(
+ cp_t *cp_ctx, cp_sta_core_timed_event_def_t *sta_core_timed_event)
+{
+ dbg_assert (cp_ctx);
+ dbg_assert (sta_core_timed_event);
+}
+
+u32
+cp_sta_core_get_date_ms (cp_t *ctx)
+{
+ static uint time=0;
+ time+=2000;
+ return time;
+}
diff --git a/cesar/cp/eoc/cco/action/test/utest_eoc/src/cp_msg_stub.c b/cesar/cp/eoc/cco/action/test/utest_eoc/src/cp_msg_stub.c
new file mode 100644
index 0000000000..94a3270610
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/test/utest_eoc/src/cp_msg_stub.c
@@ -0,0 +1,438 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+
+#include "common/std.h"
+
+#include "lib/scenario/scenario.h"
+
+#include "cp/inc/context.h"
+#include "hal/phy/defs.h"
+
+#include <string.h>
+
+#define __ptr_(TYPE) PASTE_EXPAND (__ptr__, TYPE)
+#define __ptr__assign *
+#define __ptr__string
+#define __ptr__string_or_null
+#define __ptr__tonemask
+#define __ptr__hash_key
+
+/* Code for MME transmission. */
+#define __ms(EVENT, PARAMS...) \
+void \
+EVENT (cp_t *ctx, cp_mme_peer_t *peer \
+ PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __ms_pdecl_, ## PARAMS)) \
+{ \
+ dbg_assert (ctx); \
+ dbg_assert (peer); \
+ scenario_event (EVENT, param); \
+ __ms_test_peer \
+ PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __ms_test_, ## PARAMS) \
+}
+
+/* Code for MME transmission complex with a begin. */
+#define __mscb(EVENT, PARAMS...) \
+cp_mme_tx_t * \
+EVENT (cp_t *ctx, cp_mme_peer_t *peer \
+ PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __ms_pdecl_, ## PARAMS)) \
+{ \
+ dbg_assert (ctx); \
+ dbg_assert (peer); \
+ scenario_event (EVENT, param, global); \
+ PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __ms_test_, ## PARAMS) \
+ return global->mme; \
+}
+
+/* Code for MME transmission complex (with or without an end). */
+#define __msc(EVENT, PARAMS...) \
+void \
+EVENT (cp_t *ctx, cp_mme_tx_t *mme \
+ PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __ms_pdecl_, ## PARAMS)) \
+{ \
+ dbg_assert (ctx); \
+ dbg_assert (mme); \
+ scenario_event (EVENT, param); \
+ test_fail_unless (param); \
+ PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __ms_test_, ## PARAMS) \
+}
+
+#define __ms_pdecl_(TYPE, PARAM, KIND) , TYPE PARAM
+#define __ms_test_(TYPE, PARAM, KIND) \
+ PASTE_EXPAND (__ms_test__, KIND) (PARAM)
+#define __ms_test__assign(PARAM) \
+ test_fail_unless (PARAM == param->PARAM);
+#define __ms_test__string(PARAM) \
+ test_fail_unless (strcmp (PARAM, param->PARAM) == 0);
+#define __ms_test_peer \
+ test_fail_unless (peer->mac == param->peer.mac); \
+ test_fail_unless (peer->eth_type == param->peer.eth_type); \
+ test_fail_unless (peer->vlan_tci == param->peer.vlan_tci); \
+ test_fail_unless (peer->tei == param->peer.tei); \
+
+/* Code for MME transmission with a data structure. */
+#define __msd(EVENT, DATA, PARAMS...) \
+void \
+EVENT (cp_t *ctx, cp_mme_peer_t *peer, const DATA *data) \
+{ \
+ dbg_assert (ctx); \
+ dbg_assert (peer); \
+ dbg_assert (data); \
+ scenario_event (EVENT, param); \
+ __ms_test_peer \
+ PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __msd_test_, ## PARAMS) \
+}
+
+#define __msd_test_(TYPE, PARAM, KIND) \
+ PASTE_EXPAND (__msd_test__, KIND) (PARAM)
+#define __msd_test__assign(PARAM) \
+ test_fail_unless (data->PARAM == param->PARAM);
+#define __msd_test__string(PARAM) \
+ test_fail_unless (strcmp (data->PARAM, param->PARAM) == 0);
+#define __msd_test__hash_key(PARAM) \
+ test_fail_unless (!param->PARAM || memcmp (data->PARAM, param->PARAM, \
+ CP_HASH_KEY_SIZE) == 0);
+#define __msd_test__key(PARAM) \
+ test_fail_unless (memcmp (&data->PARAM, &param->PARAM, \
+ sizeof (cp_key_t)) == 0);
+
+/* Code for MME transmission with a data structure with encryption
+ * information. */
+#define __msk(EVENT, DATA, PARAMS...) \
+void \
+EVENT (cp_t *ctx, cp_mme_peer_t *peer, cp_mme_peks_t peks, \
+ const cp_secu_protocol_run_t *prun, const DATA *data) \
+{ \
+ dbg_assert (ctx); \
+ dbg_assert (peer); \
+ dbg_assert (data); \
+ scenario_event (EVENT, param, global); \
+ __ms_test_peer \
+ test_fail_unless (peks == param->peks); \
+ test_fail_unless (prun->pid == param->pid); \
+ test_fail_unless (prun->pmn == param->pmn); \
+ global->prn = prun->prn; \
+ global->my_nonce = prun->my_nonce; \
+ PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __msd_test_, ## PARAMS) \
+}
+
+/* Code for MME transmission for CC_RELAY.IND. */
+#define __msr(EVENT, PARAMS...) \
+void \
+EVENT (cp_t *ctx, cp_mme_rx_t *mme \
+ PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __ms_pdecl_, ## PARAMS)) \
+{ \
+ dbg_assert (ctx); \
+ dbg_assert (mme); \
+ scenario_event (EVENT, param); \
+ test_fail_unless (mme->relay.mac_fa == param->mac_fa); \
+ test_fail_unless (mme->relay.ftei == param->ftei); \
+ PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __ms_test_, ## PARAMS) \
+}
+
+
+/* Code for MME reception. */
+#define __mr(EVENT, PARAMS...) \
+bool \
+EVENT (cp_t *ctx, cp_mme_rx_t *mme \
+ PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __mr_pdecl_, ## PARAMS)) \
+{ \
+ dbg_assert (ctx); \
+ dbg_assert (mme); \
+ PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __mr_assert_, ## PARAMS) \
+ scenario_event (EVENT, param); \
+ if (param->ok) \
+ { \
+ PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __mr_copy_, ## PARAMS) \
+ return true; \
+ } \
+ else \
+ return false; \
+}
+
+#define __mr_pdecl_(TYPE, PARAM, KIND) , TYPE __ptr_ (KIND) PARAM
+#define __mr_assert_(TYPE, PARAM, KIND) dbg_assert_ptr (PARAM);
+#define __mr_copy_(TYPE, PARAM, KIND) PASTE_EXPAND (__mr_copy__, KIND) (PARAM)
+
+#define __mr_copy__assign(PARAM) *PARAM = param->PARAM;
+#define __mr_copy__string(PARAM) strcpy (PARAM, param->PARAM);
+#define __mr_copy__string_or_null(PARAM) \
+ if (param->PARAM) strcpy (PARAM, param->PARAM);
+#define __mr_copy__tonemask(PARAM) \
+ memcpy (PARAM, param->PARAM, PHY_TONEMASK_SIZE);
+
+/* Code for MME reception with a data structure. */
+#define __mrd(EVENT, DATA, PARAMS...) \
+bool \
+EVENT (cp_t *ctx, cp_mme_rx_t *mme, DATA *data) \
+{ \
+ dbg_assert (ctx); \
+ dbg_assert (mme); \
+ dbg_assert (data); \
+ scenario_event (EVENT, param); \
+ if (param->ok) \
+ { \
+ PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __mrd_copy_, PARAMS) \
+ return true; \
+ } \
+ else \
+ return false; \
+}
+
+#define __mrd_copy_(TYPE, PARAM, KIND) \
+ PASTE_EXPAND (__mrd_copy__, KIND) (PARAM)
+
+#define __mrd_copy__assign(PARAM) data->PARAM = param->PARAM;
+#define __mrd_copy__string(PARAM) strcpy (data->PARAM, param->PARAM);
+#define __mrd_copy__tonemask(PARAM) \
+ memcpy (data->PARAM, param->PARAM, PHY_TONEMASK_SIZE);
+#define __mrd_copy__hash_key(PARAM) \
+ if (param->PARAM) memcpy (data->PARAM, param->PARAM, CP_HASH_KEY_SIZE);
+#define __mrd_copy__assign_deref(PARAM) \
+ if (param->PARAM) data->PARAM = *param->PARAM;
+
+/* Code for MME reception with a data structure with encryption
+ * information. */
+#define __mrk(EVENT, DATA, PARAMS...) \
+bool \
+EVENT (cp_t *ctx, cp_mme_rx_t *mme, DATA *data) \
+{ \
+ dbg_assert (ctx); \
+ dbg_assert (mme); \
+ dbg_assert (data); \
+ scenario_event (EVENT, param, g); \
+ if (param->ok) \
+ { \
+ mme->peks = param->peks; \
+ if (param->new_prn) g->prn = lib_rnd32 (&ctx->rnd) & 0xffff; \
+ if (param->new_my_nonce) g->my_nonce = lib_rnd32 (&ctx->rnd); \
+ if (param->new_your_nonce) g->your_nonce = lib_rnd32 (&ctx->rnd); \
+ mme->prun.pid = param->pid; \
+ mme->prun.pmn = param->pmn; \
+ mme->prun.prn = g->prn; \
+ mme->prun.my_nonce = g->my_nonce; \
+ mme->prun.your_nonce = g->your_nonce; \
+ PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __mrd_copy_, PARAMS) \
+ return true; \
+ } \
+ else \
+ return false; \
+}
+
+/* Code for MME reception for CC_RELAY.REQ. */
+#define __mrr(EVENT, PARAMS...) \
+bool \
+EVENT (cp_t *ctx, cp_mme_rx_t *mme \
+ PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __mr_pdecl_, ## PARAMS)) \
+{ \
+ dbg_assert (ctx); \
+ dbg_assert (mme); \
+ PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __mr_assert_, ## PARAMS) \
+ scenario_event (EVENT, param); \
+ if (param->ok) \
+ { \
+ mme->relay.mac_fa = param->mac_fa; \
+ mme->relay.ftei = param->ftei; \
+ PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __mr_copy_, ## PARAMS) \
+ return true; \
+ } \
+ else \
+ return false; \
+}
+
+__mr (cp_msg_cc_relay_req_receive,
+ (uint, length, assign),
+ (uint, mmtype, assign))
+__msr (cp_msg_cc_relay_ind_send,
+ (mac_t, osa, assign),
+ (cp_tei_t, stei, assign),
+ (uint, length, assign))
+
+__mr (cp_msg_cm_link_stats_req_receive,
+ (cp_msg_cm_link_stats_req_t, data, assign))
+__msc (cp_msg_cm_link_stats_cnf_send,
+ (mfs_t *, mfs, assign),
+ (cp_msg_cm_link_stats_tlflag_t, transmit, assign))
+__mscb (cp_msg_cm_link_stats_cnf_send_begin,
+ (u8, req_id, assign),
+ (u8, res_type, assign))
+__msc (cp_msg_cm_link_stats_cnf_send_end)
+__mr (cp_msg_vs_get_snr_req_receive,
+ (mac_t, mac_addr, assign),
+ (cp_msg_vs_get_snr_req_int_t, tm_int_i, assign),
+ (u8, int_id, assign),
+ (u8, carrier_gr, assign))
+__msd (cp_msg_vs_get_snr_cnf_send, cp_msg_vs_get_snr_cnf_t)
+__ms (cp_msg_vs_get_ce_stats_cnf_send,
+ (u8, version, assign),
+ (u8, result, assign),
+ (sta_t *, sta, assign),
+ (tonemask_info_t *, ti, assign))
+__mr (cp_msg_imac_get_discover_list_req_receive)
+__mscb (cp_msg_imac_get_discover_list_cnf_send_begin,
+ (cp_msg_imac_get_discover_list_cnf_result_t, result, assign),
+ (u8, version, assign),
+ (u8, num_stations, assign))
+__msc (cp_msg_imac_get_discover_list_cnf_send,
+ (const cp_msg_imac_discover_list_sta_info_t *, data, assign))
+__msc (cp_msg_imac_get_discover_list_cnf_send_end)
+__mr (cp_msg_vs_get_tonemap_req_receive,
+ (mac_t, mac_addr, assign),
+ (cp_msg_vs_get_tonemap_tmi_t, tmi, assign),
+ (u8, int_id, assign),
+ (cp_msg_vs_get_tonemap_req_dir_t, dir, assign))
+__ms (cp_msg_vs_get_tonemap_cnf_send,
+ (cp_msg_vs_get_tonemap_cnf_result_t, result, assign),
+ (uint, beacon_delta, assign),
+ (u8, int_id, assign),
+ (tonemaps_t *, tms, assign),
+ (cp_msg_vs_get_tonemap_tmi_t, tmi, assign))
+__mr (cp_msg_vs_get_attenuation_list_req_receive)
+__mscb (cp_msg_vs_get_attenuation_list_cnf_send_begin,
+ (uint, nb, assign))
+__msc (cp_msg_vs_get_attenuation_list_cnf_send_entry,
+ (mac_t, mac, assign),
+ (cp_tei_t, tei, assign),
+ (vs_get_attenuation_list_att_status_t, status, assign),
+ (s8, attenuation_db, assign))
+__msc (cp_msg_vs_get_attenuation_list_cnf_send_end)
+
+
+cp_mme_tx_t *
+cp_msg_mme_init_not_frag (cp_t *ctx, cp_mme_peer_t *peer, mmtype_t mmtype)
+{
+ static cp_mme_tx_t my_mme;
+ cp_mme_tx_t *mme = &my_mme;
+
+ u64 data;
+ static u8 buffer[2048];
+ bitstream_t bitstream;
+
+ if ((mmtype == VS_EOC_GET_TOPO_CNF) || (mmtype == VS_EOC_CCO_GET_WL_CNF) \
+ || (mmtype == VS_EOC_CCO_SET_OUT_LEV_IND)
+ || (mmtype == VS_EOC_CCO_GET_PORTS_CNF))
+ {
+ bitstream_init (&my_mme.bitstream, buffer, sizeof(buffer),
+ BITSTREAM_WRITE);
+
+ bitstream_init (&bitstream, buffer, sizeof(buffer), BITSTREAM_READ);
+ //ODA
+ data = 0x2;
+ bitstream_access (&my_mme.bitstream, &data, 48);
+ // OSA.
+ data = 0x1;
+ bitstream_access (&my_mme.bitstream, &data, 48);
+ // Mtype
+ data = HPAV_MTYPE_MME;
+ bitstream_access (&my_mme.bitstream, &data, 16);
+ // MMV.
+ data = HPAV_MMV1;
+ bitstream_access (&my_mme.bitstream, &data, 8);
+ // MMtype.
+ data = CM_GET_KEY_REQ;
+ bitstream_access (&my_mme.bitstream, &data, 16);
+ // FMI
+ data = 0;
+ bitstream_access (&my_mme.bitstream, &data, 16);
+
+ bitstream_finalise (&my_mme.bitstream);
+
+ mme->length = 19;
+ mme->p_mme = buffer;
+ mme->peer.mac = 2;
+ mme->bitstream.data = bitstream.data;
+ mme->bitstream.data_bits = bitstream.data_bits;
+ }
+ else
+ {
+ bitstream_init (&my_mme.bitstream, buffer, sizeof(buffer),
+ BITSTREAM_READ);
+
+ bitstream_init (&bitstream, buffer, sizeof(buffer), BITSTREAM_WRITE);
+ //ODA
+ data = 0x2;
+ bitstream_access (&bitstream, &data, 48);
+ // OSA.
+ data = 0x1;
+ bitstream_access (&bitstream, &data, 48);
+ // Mtype
+ data = HPAV_MTYPE_MME;
+ bitstream_access (&bitstream, &data, 16);
+ // MMV.
+ data = HPAV_MMV1;
+ bitstream_access (&bitstream, &data, 8);
+ // MMtype.
+ data = CM_GET_KEY_REQ;
+ bitstream_access (&bitstream, &data, 16);
+ // FMI
+ data = 0;
+ bitstream_access (&bitstream, &data, 16);
+
+ bitstream_finalise (&bitstream);
+
+ mme->length = 19;
+ mme->p_mme = buffer;
+ mme->peer.mac = 2;
+ mme->bitstream.data = bitstream.data;
+ mme->bitstream.data_bits = bitstream.data_bits;
+ }
+
+ return mme;
+}
+
+/**
+ * Receive a CM_GET_KEY.REQ.
+ * \param ctx control plane context
+ * \param mme MME handle
+ * \param data received MME data
+ * \return true on success
+ *
+ * Encryption and protocol run information is available in the MME handle.
+ */
+bool
+cp_msg_cm_get_key_req_receive (cp_t *ctx, cp_mme_rx_t *mme,
+ cp_msg_cm_get_key_req_t *data)
+{
+
+ uint offset;
+ u64 unused;
+ dbg_assert (ctx);
+ dbg_assert (mme);
+ dbg_assert (mme->p_mme);
+ dbg_assert (mme->length < ETH_PACKET_MAX_SIZE);
+ dbg_assert (data);
+
+ /* Read the MME. */
+ bitstream_init (&mme->bitstream, mme->p_mme, mme->length, BITSTREAM_READ);
+ bitstream_access (&mme->bitstream, &mme->peer.mac, 48);
+ bitstream_access (&mme->bitstream, &unused, 48);
+ bitstream_access (&mme->bitstream, &mme->peer.eth_type, 16);
+ if (ETH_IS_VLANTAG (mme->peer.eth_type))
+ {
+ bitstream_access (&mme->bitstream, &mme->peer.vlan_tci, 16);
+ bitstream_access (&mme->bitstream, &unused, 16);
+ }
+ else
+ {
+ mme->peer.vlan_tci = 0;
+ }
+
+ bitstream_access (&mme->bitstream, &unused, 8);
+ bitstream_access (&mme->bitstream, &unused, 16);
+ bitstream_access (&mme->bitstream, &unused, 16);
+
+ /* Read the data in the MME. */
+ bitstream_access (&mme->bitstream, &data->relayed, 8);
+ bitstream_access (&mme->bitstream, &data->key_type, 8);
+ bitstream_access (&mme->bitstream, &data->nid, 56);
+
+ offset = 37 + ETH_GET_VLANTAG_SIZE (mme->peer.eth_type);
+
+ memcpy (mme->p_mme + offset, &data->hash_key, mme->length - offset);
+
+ return true;
+}
diff --git a/cesar/cp/eoc/cco/action/test/utest_eoc/src/cp_stub.c b/cesar/cp/eoc/cco/action/test/utest_eoc/src/cp_stub.c
new file mode 100644
index 0000000000..5114e52c33
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/test/utest_eoc/src/cp_stub.c
@@ -0,0 +1,51 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2009 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file eoc/sta/action/test/utest/src/cp_stub.c
+ * \brief cp/cp.c stub
+ * \ingroup test
+ *
+ */
+#include "common/std.h"
+#include "cp/cp.h"
+#include "cp/mme.h"
+#include "cp/inc/context.h"
+#include "cp/msg/inc/cc_assoc.h"
+#include "cp/sta/mgr/inc/sta.h"
+#include "cp/eoc/sta/mgr/sta_mgr.h"
+
+/**
+ * Compute the NID and the NMK from the network password.
+ * \param ctx the CP context.
+ * \param npw the network password.
+ * \param sl the security level of the station.
+ *
+ * This function will generate the NID and the NMK from the NPW and store it
+ * in the station own data.
+ */
+void
+cp_compute_nmk_and_nid_from_npw (cp_t *ctx, const char *npw,
+ cp_security_level_t sl)
+{
+ u64 nid;
+ cp_key_t nmk;
+ uint length;
+
+ dbg_assert (ctx);
+ dbg_assert (npw);
+
+ length = strlen (npw);
+
+ nmk = cp_secu_npw2nmk (ctx, (const u8*) npw, length);
+ nid = cp_secu_nmk2nid (ctx, nmk, sl);
+
+ /* Store the nid and the nmk to the station own data. */
+ cp_sta_own_data_set_nid (ctx, nid);
+ cp_sta_own_data_set_nmk (ctx, nmk,
+ CP_MSG_DRV_STA_SET_KEY_TYPE_CHANGE_NID);
+}
diff --git a/cesar/cp/eoc/cco/action/test/utest_eoc/src/cyg_stub.c b/cesar/cp/eoc/cco/action/test/utest_eoc/src/cyg_stub.c
new file mode 100644
index 0000000000..f9f9784e0e
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/test/utest_eoc/src/cyg_stub.c
@@ -0,0 +1,40 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2012 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/cyg_stub.c
+ * \brief « brief description »
+ * \ingroup « module »
+ *
+ * « long description »
+ */
+#include "common/std.h"
+#include "cp/cp.h"
+#include "bsu/aclf/aclf.h"
+#include <cyg/kernel/kapi.h>
+
+#define BSU_ACLF_BP_CABLE_TCK 2500000
+#define TCK_PER_RTC 250000
+
+u32
+cp_sta_core_tck_per_rtc (cp_t *ctx)
+{
+ return TCK_PER_RTC;
+}
+
+u32
+bsu_aclf_beacon_period_tck (bsu_aclf_t *ctx)
+{
+ return BSU_ACLF_BP_CABLE_TCK;
+}
+
+cyg_tick_count_t
+cyg_current_time (void)
+{
+ /* For tests purpose we can simulate 1000 beacon periods */
+ return (u32)((BSU_ACLF_BP_CABLE_TCK * 1000ull) / TCK_PER_RTC);
+}
diff --git a/cesar/cp/eoc/cco/action/test/utest_eoc/src/dataplane_stub.c b/cesar/cp/eoc/cco/action/test/utest_eoc/src/dataplane_stub.c
new file mode 100644
index 0000000000..4d9be7745b
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/test/utest_eoc/src/dataplane_stub.c
@@ -0,0 +1,38 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/dataplane_stub.c
+ * \brief Data plane layers stub.
+ * \ingroup test
+ */
+#include "common/std.h"
+
+#include "lib/scenario/scenario.h"
+
+#include "cl/cl_mactotei.h"
+#include "mac/pbproc/pbproc.h"
+#include "cp/inc/context.h"
+#include "mac/sar/inc/context.h"
+
+void
+sar_sta_remove (sar_t *ctx, u8 tei)
+{
+// cp_t *cp = (void *) ctx;
+// dbg_check (mac_store_sta_remove (cp->mac_store, tei));
+// dbg_assert (ctx);
+
+ if (MAC_TEI_IS_STA (tei))
+ {
+ bool ok;
+ ok = mac_store_sta_remove (ctx->mac_store, tei);
+
+ dbg_assert (ok);
+ }
+}
+
+
diff --git a/cesar/cp/eoc/cco/action/test/utest_eoc/src/fsm_event_stub.c b/cesar/cp/eoc/cco/action/test/utest_eoc/src/fsm_event_stub.c
new file mode 100644
index 0000000000..6355a7ba5d
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/test/utest_eoc/src/fsm_event_stub.c
@@ -0,0 +1,78 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file events_stub.c
+ * \brief FSM events stub
+ * \ingroup cp_fsm
+ */
+#include "common/std.h"
+#include "cp/inc/context.h"
+
+#include "cp/fsm/inc/events.h"
+#include "cp/fsm/fsm.h"
+
+typedef void (*cp_fsm_event_bare_transition_t) (cp_t *ctx);
+
+void
+cp_fsm_event_bare_handler (cp_t *ctx, cp_fsm_event_t *event,
+ cp_fsm_transition_t transition)
+{
+ dbg_assert (ctx);
+ dbg_assert_ptr (event);
+ dbg_assert (transition);
+ cp_fsm_event_bare_transition_t t = transition;
+ /* Call transition. */
+ t (ctx);
+}
+
+cp_fsm_event_t *
+cp_fsm_event_bare_new (cp_t *ctx, cp_fsm_event_type_t type)
+{
+ dbg_assert (ctx);
+ dbg_assert (type < CP_FSM_EVENT_TYPE_NB);
+ cp_fsm_event_t *e;
+ e = slab_alloc (&ctx->fsm.event_bare_cache);
+ e->next = NULL;
+ e->type = type;
+ e->handler = cp_fsm_event_bare_handler;
+ return e;
+}
+
+cp_fsm_event_t *
+cp_fsm_event_mme_new (cp_t *ctx, cp_fsm_event_type_t type, cp_mme_rx_t *mme)
+{
+ return NULL;
+}
+
+cp_fsm_event_t *
+cp_fsm_event_beacon_new (cp_t *ctx, cp_fsm_event_type_t type,
+ bsu_beacon_t *beacon, cp_net_t *net,
+ cp_sta_t *sta)
+{
+ return NULL;
+}
+
+cp_fsm_event_t *
+cp_fsm_event_sta_new (cp_t *ctx, cp_fsm_event_type_t type,
+ cp_net_t *net, cp_sta_t *sta)
+{
+ return NULL;
+}
+
+void
+cp_fsm_event_init (cp_t *ctx)
+{
+}
+
+void
+cp_fsm_post (cp_t *ctx, cp_fsm_event_t *event)
+{
+ dbg_assert (ctx);
+ dbg_assert (event);
+ slab_release (event);
+} \ No newline at end of file
diff --git a/cesar/cp/eoc/cco/action/test/utest_eoc/src/hal_phy_stub.c b/cesar/cp/eoc/cco/action/test/utest_eoc/src/hal_phy_stub.c
new file mode 100644
index 0000000000..5e8eb8cc99
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/test/utest_eoc/src/hal_phy_stub.c
@@ -0,0 +1,26 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2012 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/hal_phy_stub.c
+ * \brief « brief description »
+ * \ingroup « module »
+ *
+ * « long description »
+ */
+#include "common/std.h"
+#include "hal/phy/forward.h"
+
+void
+phy_tx_scale_adapt_exp_set (phy_t *ctx, u8 exp)
+{
+}
+
+void
+phy_tx_scale_adapt_set (phy_t *ctx, u16 value)
+{
+}
diff --git a/cesar/cp/eoc/cco/action/test/utest_eoc/src/msg_vs.c b/cesar/cp/eoc/cco/action/test/utest_eoc/src/msg_vs.c
new file mode 100644
index 0000000000..d0cdcf00da
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/test/utest_eoc/src/msg_vs.c
@@ -0,0 +1,686 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2009 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/msg/src/msg_vs_eoc.c
+ * \brief VS EoC family MME.
+ * \ingroup cp_msg
+ */
+#include "common/std.h"
+#include "common/defs/homeplugAV.h"
+#include "common/defs/ethernet.h"
+#include "lib/scenario/scenario.h"
+
+#include "cp/cp.h"
+#include "cp/mme.h"
+#include "cp/msg/msg.h"
+#include "common/defs/spidcom.h"
+
+#include "cp/sta/mgr/net.h"
+#include "cp/sta/mgr/sta_mgr.h"
+
+
+#include "cp/eoc/msg/inc/msg_vs.h"
+#include "cp/msg/inc/msg.h"
+#include "cp/eoc/sta/action/inc/vs.h"
+
+#include <stdio.h>
+
+#define WL_MME_MAX_ENTRY_COUNT 15
+
+/* Code for MME reception. */
+#define __ptr_(TYPE) PASTE_EXPAND (__ptr__, TYPE)
+#define __ptr__assign *
+#define __ms_test_(TYPE, PARAM, KIND) \
+PASTE_EXPAND (__ms_test__, KIND) (PARAM)
+#define __ms_test__assign(PARAM) \
+test_fail_unless (PARAM == param->PARAM);
+#define __ms_test_multi_sta_(TYPE, PARAM, KIND, NUM) \
+PASTE_EXPAND (__ms_test_multi_sta__, KIND) (NUM, PARAM)
+#define __ms_test_services_(TYPE, PARAM, KIND, NUM1, NUM2) \
+PASTE_EXPAND (__ms_test_services__, KIND) (NUM1, NUM2, PARAM)
+#define __ms_test_multi_sta__assign(NUM, PARAM) \
+test_fail_unless (PARAM == param->PARAM);
+#define __ms_test_services__assign(NUM1, NUM2, PARAM) \
+{ \
+test_fail_unless (PARAM == param->PARAM); \
+}
+#define __ms_test_multi_sta__array(NUM, PARAM) \
+{ \
+uint i = 0; \
+for (i = 0; i < NUM; i++) \
+{ \
+test_fail_unless(PARAM[i] == param->PARAM[i]); \
+} \
+}
+#define __ms_test_services__array(NUM1, NUM2, PARAM) \
+{ \
+uint i = 0; \
+for (i = 0; i < NUM1; i++) \
+{ \
+test_fail_unless(PARAM[i] == param->PARAM[i]); \
+} \
+}
+#define __ms_test_services__two_dim_array(NUM1, NUM2, PARAM) \
+{ \
+uint i = 0; \
+uint j = 0; \
+for (i = 0; i < NUM1; i++) \
+{ \
+for(j = 0; j < NUM2; j++)\
+{ \
+test_fail_unless(PARAM[i][j] == param->PARAM[i][j]); \
+} \
+} \
+}
+#define __ms_pdecl_(TYPE, PARAM, KIND) , TYPE PARAM
+#define __ms_pdecl_multi_sta_(TYPE, PARAM, KIND, NUM) , TYPE PARAM
+#define __ms_pdecl_services_(TYPE, PARAM, KIND, NUM1, NUM2) \
+PASTE_EXPAND (__ms_pdecl_services__, KIND) (TYPE, NUM1, NUM2, PARAM)
+#define __ms_pdecl_ports_(TYPE, PARAM, KIND, NUM1, NUM2) \
+PASTE_EXPAND (__ms_pdecl_ports__, KIND) (TYPE, NUM1, NUM2, PARAM)
+#define __ms_pdecl_services__assign(TYPE, NUM1, NUM2, PARAM) , TYPE PARAM
+#define __ms_pdecl_services__array(TYPE, NUM1, NUM2, PARAM) , TYPE PARAM
+#define __ms_pdecl_services__two_dim_array(TYPE, NUM1, NUM2, PARAM) , \
+ TYPE (*PARAM)[SERVICE_PARAMETERS_NB]
+#define __ms_pdecl_ports__assign(TYPE, NUM1, NUM2, PARAM) , TYPE PARAM
+#define __ms_pdecl_ports__array(TYPE, NUM1, NUM2, PARAM) , TYPE PARAM
+#define __ms_pdecl_ports__two_dim_array(TYPE, NUM1, NUM2, PARAM) , \
+ TYPE (*PARAM)[PORT_NB]
+#define __ms_test_peer \
+test_fail_unless (peer->mac == param->peer.mac); \
+test_fail_unless (peer->eth_type == param->peer.eth_type); \
+test_fail_unless (peer->vlan_tci == param->peer.vlan_tci); \
+test_fail_unless (peer->tei == param->peer.tei); \
+
+#define __mr_pdecl_(TYPE, PARAM, KIND) , TYPE __ptr_ (KIND) PARAM
+
+#define __mr_assert_(TYPE, PARAM, KIND) dbg_assert_ptr (PARAM);
+#define __mr_copy_(TYPE, PARAM, KIND) PASTE_EXPAND (__mr_copy__, KIND) (PARAM)
+
+#define __mr_copy__assign(PARAM) *PARAM = param->PARAM;
+
+
+/* Code for MME reception. */
+#define __mr(EVENT, PARAMS...) \
+bool \
+EVENT (cp_t *ctx, cp_mme_rx_t *mme \
+PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __mr_pdecl_, ## PARAMS)) \
+{ \
+dbg_assert (ctx); \
+dbg_assert (mme); \
+PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __mr_assert_, ## PARAMS) \
+scenario_event (EVENT, param); \
+if (param->ok) \
+{ \
+PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __mr_copy_, ## PARAMS) \
+return true; \
+} \
+else \
+ return false; \
+ }
+
+/* Code for MME transmission. */
+#define __ms(EVENT, PARAMS...) \
+void \
+EVENT (cp_t *ctx, cp_mme_peer_t *peer \
+PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __ms_pdecl_, ## PARAMS)) \
+{ \
+dbg_assert (ctx); \
+dbg_assert (peer); \
+scenario_event (EVENT, param); \
+__ms_test_peer \
+PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __ms_test_, ## PARAMS) \
+}
+
+#define __ms_multi_sta(EVENT, PARAMS...) \
+void \
+EVENT (cp_t *ctx, cp_mme_peer_t *peer \
+PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __ms_pdecl_multi_sta_, ## PARAMS)) \
+{ \
+dbg_assert (ctx); \
+dbg_assert (peer); \
+scenario_event (EVENT, param); \
+__ms_test_peer \
+PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __ms_test_multi_sta_, ## PARAMS) \
+}
+
+#define __ms_services(EVENT, PARAMS...) \
+void \
+EVENT (cp_t *ctx, cp_mme_peer_t *peer \
+PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __ms_pdecl_services_, ## PARAMS)) \
+{ \
+dbg_assert (ctx); \
+dbg_assert (peer); \
+scenario_event (EVENT, param); \
+__ms_test_peer \
+PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __ms_test_services_, ## PARAMS) \
+}
+
+#define __ms_ports(EVENT, PARAMS...) \
+void \
+EVENT (cp_t *ctx, cp_mme_peer_t *peer \
+PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __ms_pdecl_ports_, ## PARAMS)) \
+{ \
+dbg_assert (ctx); \
+dbg_assert (peer); \
+scenario_event (EVENT, param); \
+__ms_test_peer \
+if(!param->result) \
+{ \
+PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __ms_test_services_, ## PARAMS) \
+} \
+}
+
+
+__mr (cp_msg_vs_eoc_cco_get_ports_req_receive,
+ (u8, first_mac_index_nb, assign))
+
+__ms_ports (cp_msg_vs_eoc_cco_get_ports_cnf_send,
+ (cp_msg_vs_eoc_cco_get_ports_req_result_t, result, assign, 0, 0),
+ (uint, numStas, assign, 0, 0),
+ (mac_t*, stas_macs, array, numStas, 0),
+ (bool, stas_port_ed, two_dim_array, numStas, PORT_NB),
+ (u8, stas_port_service, two_dim_array, numStas, PORT_NB),
+ (u8, first_mac_index_nb, assign, 0, 0))
+
+__ms_services (cp_msg_vs_eoc_cco_get_services_cnf_send,
+ (cp_msg_vs_eoc_cco_get_services_req_result_t, result, assign, 0,
+ 0),
+ (u8, services_number, assign, 0, 0),
+ (u8*, service_indexes, array, services_number, 0),
+ (u8*, classifier_rules, array, services_number, 0),
+ (u16*, classifier_values, array, services_number, 0),
+ (u8*, acses, array, services_number, 0),
+ (u8*, parameters_numbers, array, services_number, 0),
+ (u16, parameters_lists, two_dim_array, services_number, 7),
+ (u8, first_service_index_nb, assign, 0, 0))
+
+__mr (cp_msg_vs_eoc_cco_get_services_req_receive,
+ (u8, first_service_index_nb, assign))
+
+/**
+ * Start sending of a VS_EOC_GET_TOPO.CNF.
+ * \param ctx the control plane context.
+ * \param peer the peer info.
+ * \param result the result.
+ * \param sta_nb the number of stations connected to CCo.
+ * \return the message context.
+ */
+cp_mme_tx_t *
+cp_msg_vs_eoc_get_topo_cnf_send_begin (cp_t *ctx, cp_mme_peer_t *peer,
+ cp_msg_vs_eoc_get_topo_cnf_result_t
+ result, u8 sta_nb)
+{
+ cp_mme_tx_t * mme;
+
+ dbg_assert (ctx);
+ dbg_assert (peer);
+ dbg_assert (result < CP_MSG_VS_EOC_GET_TOPO_CNF_RESULT_NB);
+
+ mme = cp_msg_mme_init_not_frag (ctx, peer, VS_EOC_GET_TOPO_CNF);
+ dbg_assert (mme);
+
+ bitstream_write (&mme->bitstream, result, 8);
+ bitstream_write (&mme->bitstream, sta_nb, 8);
+
+ return mme;
+}
+
+/**
+ * Fill the MME with the station parameters.
+ * \param ctx the module context.
+ * \param mme the MME message.
+ * \param mac_addr the mac address of the station.
+ * \param auth_status the authorization status of the station.
+ * \param up_att the upstream attenuation.
+ */
+void
+cp_msg_vs_eoc_get_topo_cnf_send_sta (cp_t *ctx, cp_mme_tx_t *mme,
+ mac_t mac_addr, u8 auth_status,
+ s8 up_att)
+{
+ dbg_assert (ctx);
+ dbg_assert (mme);
+ dbg_assert (auth_status <= 3);
+
+ bitstream_write_large (&mme->bitstream, mac_addr, 48);
+ bitstream_write (&mme->bitstream, auth_status, 8);
+ /* Cast up_att to u8 because bitstream only process words, so the s8
+ * will be promoted to int (i.e. 32bits) and bitstream verifies that only
+ * 8 bits are set. */
+ bitstream_write (&mme->bitstream, (u8) up_att, 8);
+}
+
+/**
+ * End sending of a VS_EOC_GET_TOPO.CNF.
+ * \param ctx the control plane context.
+ * \param mme the MME to send.
+ */
+void
+cp_msg_vs_eoc_get_topo_cnf_send_end (cp_t *ctx, cp_mme_tx_t *mme)
+{
+ dbg_assert (ctx);
+ dbg_assert (mme);
+
+ bitstream_write_finalise (&mme->bitstream);
+
+ cp_msg_mme_send (ctx, mme);
+}
+
+bool
+cp_msg_vs_eoc_cco_set_wl_req_receive (
+ cp_t *ctx, cp_mme_rx_t *mme, uint *numStas, cp_tei_t *stas_teis,
+ mac_t *stas_macs, u8 *stas_authorizations, u8 *stas_output_levels,
+ u32 *stas_start_times, u32 *stas_end_times, cp_key_t *stas_daks,
+ cp_dpw_t *stas_dpws, u8 *stas_actions)
+{
+ dbg_assert (ctx);
+ dbg_assert (mme);
+ dbg_assert (numStas);
+ dbg_assert (stas_teis);
+ dbg_assert (stas_macs);
+ dbg_assert (stas_authorizations);
+ dbg_assert (stas_output_levels);
+ dbg_assert (stas_start_times);
+ dbg_assert (stas_end_times);
+ dbg_assert (stas_daks);
+ dbg_assert (stas_dpws);
+ dbg_assert (stas_actions);
+
+ /* Number of stations in the current MME */
+ uint number_of_stations;
+ uint i, j;
+
+ if (cp_msg_mme_read_error (ctx, mme))
+ {
+ number_of_stations = bitstream_read (&mme->bitstream, 8);
+ *numStas = number_of_stations;
+
+ for (i=0; i<number_of_stations; i++)
+ {
+ bitstream_access (&mme->bitstream, &stas_macs[i], 48);
+ bitstream_access (&mme->bitstream, &stas_teis[i], 8);
+ bitstream_access (&mme->bitstream, &stas_authorizations[i], 8);
+ bitstream_access (&mme->bitstream, &stas_output_levels[i], 8);
+ bitstream_access (&mme->bitstream, &stas_start_times[i], 32);
+ bitstream_access (&mme->bitstream, &stas_end_times[i], 32);
+ for (j=0; j<4; j++)
+ bitstream_access (&mme->bitstream, &stas_daks[i].key[j], 32);
+ bitstream_access_buf (&mme->bitstream, (u8 *) stas_dpws[i].dpw,
+ CP_DPW_MAX_SIZE);
+ stas_dpws[i].dpw[CP_DPW_MAX_SIZE] = '\0';
+ bitstream_access (&mme->bitstream, &stas_actions[i], 8);
+ }
+
+ return true;
+ }
+
+ return false;
+}
+
+void
+cp_msg_vs_eoc_cco_set_wl_cnf_send (
+ cp_t *ctx, cp_mme_peer_t *peer, mmtype_t mmtype,
+ cp_msg_vs_eoc_cco_set_wl_req_result_t result)
+{
+ cp_mme_tx_t *msg;
+
+ dbg_assert (peer);
+ dbg_assert (mmtype);
+
+ msg = cp_msg_mme_init_not_frag (ctx, peer, mmtype);
+ dbg_check (msg);
+
+ bitstream_access (&msg->bitstream, &result, 8);
+
+ cp_msg_mme_send (ctx, msg);
+}
+
+
+bool
+cp_msg_vs_eoc_cco_get_wl_req_receive (cp_t *ctx, cp_mme_rx_t *mme,
+ u8 *first_wl_index_nb)
+{
+ dbg_assert (ctx);
+ dbg_assert (mme);
+
+ if (cp_msg_mme_read_error (ctx, mme))
+ {
+ *first_wl_index_nb = bitstream_read(&mme->bitstream, 8);
+ return true;
+ }
+ return false;
+}
+
+void
+cp_msg_vs_eoc_cco_get_wl_cnf_send (cp_t *ctx,
+ cp_msg_vs_eoc_cco_get_wl_req_result_t result, cp_mme_peer_t *peer,
+ uint numStas, cp_tei_t *stas_teis, mac_t *stas_macs,
+ u8 *stas_authorizations, u8 *stas_output_levels, u32 *stas_start_times,
+ u32 *stas_end_times, cp_key_t *stas_daks, cp_dpw_t *stas_dpws,
+ u8 *stas_actions, u8 first_wl_index_nb)
+{
+ cp_mme_tx_t *tx;
+ u8 i, j;
+ u8 total_wl_index_nb;
+ u8 wl_index_nb;
+ dbg_assert (ctx);
+ dbg_assert (stas_teis);
+ dbg_assert (stas_macs);
+ dbg_assert (stas_authorizations);
+ dbg_assert (stas_output_levels);
+ dbg_assert (stas_start_times);
+ dbg_assert (stas_end_times);
+ dbg_assert (stas_daks);
+ dbg_assert (stas_dpws);
+ dbg_assert (stas_actions);
+
+ /* One MME can contain maximum of WL_MME_MAX_ENTRY_COUNT WL entries. */
+ total_wl_index_nb = numStas;
+
+ if (first_wl_index_nb > total_wl_index_nb)
+ wl_index_nb = 0;
+ else
+ wl_index_nb = MIN (total_wl_index_nb - first_wl_index_nb,
+ WL_MME_MAX_ENTRY_COUNT);
+
+ tx = cp_msg_mme_init_not_frag (ctx, peer, VS_EOC_CCO_GET_WL_CNF);
+ dbg_assert (tx);
+ bitstream_write (&tx->bitstream, result, 8);
+ bitstream_write (&tx->bitstream, total_wl_index_nb, 8);
+ bitstream_write (&tx->bitstream, first_wl_index_nb, 8);
+ bitstream_write (&tx->bitstream, wl_index_nb, 8);
+ for (i = first_wl_index_nb; i < first_wl_index_nb + wl_index_nb; i++)
+ {
+ bitstream_write_large(&tx->bitstream, stas_macs[i], 48);
+ bitstream_write(&tx->bitstream, stas_teis[i], 8);
+ bitstream_write(&tx->bitstream, stas_authorizations[i], 8);
+ bitstream_write(&tx->bitstream, stas_output_levels[i], 8);
+ bitstream_write(&tx->bitstream, stas_start_times[i], 32);
+ bitstream_write(&tx->bitstream, stas_end_times[i], 32);
+ for (j=0; j<4; j++)
+ bitstream_write(&tx->bitstream, stas_daks[i].key[j], 32);
+ bitstream_write_buf(&tx->bitstream, (u8 *) stas_dpws[i].dpw,
+ CP_DPW_MAX_SIZE);
+ bitstream_write(&tx->bitstream, stas_actions[i], 8);
+ }
+
+ cp_msg_mme_send (ctx, tx);
+}
+
+void
+cp_msg_vs_eoc_cco_set_out_lev_ind_send(cp_t *ctx, cp_mme_peer_t *peer,
+ uint output_level)
+{
+ dbg_assert(ctx);
+
+ cp_mme_tx_t *tx;
+
+ tx = cp_msg_mme_init_not_frag (ctx, peer, VS_EOC_CCO_SET_OUT_LEV_IND);
+ dbg_assert(tx);
+
+ bitstream_write(&tx->bitstream, output_level, 8);
+ bitstream_write_finalise(&tx->bitstream);
+ cp_msg_mme_send (ctx, tx);
+}
+
+bool
+cp_msg_eoc_sta_vs_set_out_lev_ind_receive(cp_t *ctx, cp_mme_rx_t *mme,
+ uint *output_level)
+{
+ dbg_assert (ctx);
+ dbg_assert (mme);
+
+ if (cp_msg_mme_read_error (ctx, mme))
+ {
+ *output_level = bitstream_read(&mme->bitstream, 8);
+ return true;
+ }
+ return false;
+}
+
+
+bool cp_msg_vs_eoc_set_ports_req_receive(cp_t *ctx, cp_mme_rx_t *mme,
+ uint *numStas, mac_t *stas_macs, u8 stas_ports_ed[][PORT_NB],
+ u8 stas_ports_service[][PORT_NB])
+{
+ dbg_assert(ctx);
+ dbg_assert(mme);
+ dbg_assert(numStas);
+ dbg_assert(stas_macs);
+ dbg_assert(stas_ports_ed);
+ dbg_assert(stas_ports_service);
+
+ uint number_of_stations;
+ uint i,j;
+
+ if(cp_msg_mme_read_error(ctx,mme))
+ {
+ number_of_stations = bitstream_read (&mme->bitstream, 8);
+ *numStas = number_of_stations;
+
+ for(i = 0; i < number_of_stations; i++)
+ {
+ bitstream_access(&mme->bitstream, &stas_macs[i], 48);
+ for(j = 0; j < PORT_NB; j++)
+ {
+ bitstream_access(&mme->bitstream, &stas_ports_ed[i][j], 8);
+ bitstream_access(&mme->bitstream, &stas_ports_service[i][j], 8);
+ }
+ }
+ return true;
+ }
+ return false;
+}
+
+void
+cp_msg_vs_eoc_set_ports_cnf_send (cp_t *ctx, cp_mme_peer_t *peer,
+ mmtype_t mmtype, cp_msg_vs_eoc_set_ports_req_result_t result)
+{
+ cp_mme_tx_t *msg;
+
+ dbg_assert (peer);
+ dbg_assert (mmtype);
+
+ msg = cp_msg_mme_init_not_frag (ctx, peer, mmtype);
+ dbg_check (msg);
+
+ bitstream_access (&msg->bitstream, &result, 8);
+
+ cp_msg_mme_send (ctx, msg);
+}
+
+bool
+cp_msg_vs_eoc_cco_set_services_req_receive (
+ cp_t *ctx, cp_mme_rx_t *mme, u8 *command, u8 *services_number,
+ u8 *service_indexes, u8 *classifier_rules, u16 *classifier_values,
+ u8 *acses, u8 *parameters_numbers,
+ u16 parameters_lists[][SERVICE_PARAMETERS_NB])
+{
+ dbg_assert(ctx);
+ dbg_assert(mme);
+ dbg_assert(command);
+ dbg_assert(services_number);
+ dbg_assert(service_indexes);
+ dbg_assert(classifier_rules);
+ dbg_assert(classifier_values);
+ dbg_assert(acses);
+ dbg_assert(parameters_numbers);
+ dbg_assert(parameters_lists);
+
+ u8 number_of_services;
+ u8 i,j;
+ u8 parameters_number_tmp;
+
+ if(cp_msg_mme_read_error(ctx,mme))
+ {
+ *command = bitstream_read(&mme->bitstream, 8);
+ number_of_services = bitstream_read (&mme->bitstream, 8);
+ *services_number = number_of_services;
+
+ for(i = 0; i < number_of_services; i++)
+ {
+ bitstream_access(&mme->bitstream, &service_indexes[i], 8);
+ bitstream_access(&mme->bitstream, &classifier_rules[i], 8);
+ bitstream_access(&mme->bitstream, &classifier_values[i], 16);
+ bitstream_access(&mme->bitstream, &acses[i], 8);
+ bitstream_access(&mme->bitstream, &parameters_numbers[i], 8);
+ parameters_number_tmp = parameters_numbers[i];
+ for(j = 0; j < parameters_number_tmp; j++)
+ {
+ bitstream_access(&mme->bitstream, &parameters_lists[i][j], 16);
+ }
+ }
+ return true;
+ }
+ return false;
+}
+
+void
+cp_msg_vs_eoc_cco_set_services_cnf_send (cp_t *ctx, cp_mme_peer_t *peer,
+ mmtype_t mmtype, cp_msg_vs_eoc_cco_set_services_req_result_t result)
+{
+ cp_mme_tx_t *msg;
+
+ dbg_assert (peer);
+ dbg_assert (mmtype);
+
+ msg = cp_msg_mme_init_not_frag (ctx, peer, mmtype);
+ dbg_check (msg);
+
+ bitstream_access (&msg->bitstream, &result, 8);
+
+ cp_msg_mme_send (ctx, msg);
+}
+
+bool
+cp_msg_vs_eoc_cco_get_info_req_receive (cp_t *ctx, cp_mme_rx_t *mme,
+ u8 *internal_eoc_index, u8 *control)
+{
+ dbg_assert (ctx);
+ dbg_assert (mme);
+
+ if (cp_msg_mme_read_error (ctx, mme))
+ {
+ *internal_eoc_index = bitstream_read(&mme->bitstream, 8);
+ *control = bitstream_read(&mme->bitstream, 8);
+ return true;
+ }
+ return false;
+}
+
+void
+cp_msg_vs_eoc_cco_get_info_cnf_send(cp_t *ctx, cp_mme_peer_t *peer,
+ cp_msg_vs_eoc_get_info_req_result_t status, u16 tei, s8 attenuation,
+ u8 snr, u16 phy_uplink_speed, u16 phy_downlink_speed, u8 output_power,
+ u32 tx_success_counter, u32 tx_crc_error_counter,
+ u32 tx_other_error_counter, u32 rx_success_counter,
+ u32 rx_crc_error_counter, u32 rx_other_error_counter)
+{
+ dbg_assert(ctx);
+ dbg_assert(peer);
+
+ FILE *fp;
+
+ if((fp = fopen("get_info.txt", "w")) != NULL)
+ {
+ fprintf(fp, "%u,%u,%d,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u", status,
+ tei, attenuation, snr, phy_uplink_speed, phy_downlink_speed,
+ output_power, tx_success_counter, tx_crc_error_counter,
+ tx_other_error_counter, rx_success_counter,
+ rx_crc_error_counter, rx_other_error_counter);
+ }
+ else
+ printf("DBG:cp_msg_mme_send_stub_get_info, \
+ Error opening get_info.txt\n");
+ fclose(fp);
+}
+
+
+bool
+cp_msg_vs_eoc_cco_diagnostic_info_req_receive (cp_t *ctx, cp_mme_rx_t *mme,
+ u8 *internal_eoc_index, u8 *control)
+{
+ dbg_assert (ctx);
+ dbg_assert (mme);
+
+ if (cp_msg_mme_read_error (ctx, mme))
+ {
+ *internal_eoc_index = bitstream_read(&mme->bitstream, 8);
+ *control = bitstream_read(&mme->bitstream, 8);
+ return true;
+ }
+ return false;
+}
+
+void
+cp_msg_vs_eoc_cco_diagnostict_info_cnf_send(cp_t *ctx, cp_mme_peer_t *peer,
+ cp_msg_vs_eoc_diagnostic_info_req_result_t status, u8 assoc_stat, u64 nid,
+ u8 num_slots, mac_t he_mac_address, u16 est_avg_phy_rate,
+ u8 num_good_assoc_auth, u16 num_bad_could_not_assoc,
+ u32 num_bad_assoc_failure, u32 num_bad_could_not_auth, u32 num_leave)
+{
+ dbg_assert(ctx);
+ dbg_assert(peer);
+
+ FILE *fp;
+
+ if((fp = fopen("get_info.txt", "w")) != NULL)
+ {
+ fprintf(fp,"%u,%u,%llu,%u,%llu,%u,%u,%u,%u,%u,%u", status, assoc_stat,
+ nid, num_slots, he_mac_address, est_avg_phy_rate,
+ num_good_assoc_auth, num_bad_could_not_assoc,
+ num_bad_assoc_failure, num_bad_could_not_auth, num_leave);
+ }
+ else
+ printf("DBG:cp_msg_mme_send_stub_get_info, \
+ Error opening get_info.txt\n");
+ fclose(fp);
+}
+
+
+bool
+cp_msg_vs_eoc_cco_get_real_time_stats_req_receive (cp_t *ctx, cp_mme_rx_t *mme,
+ u8 *control)
+{
+ dbg_assert (ctx);
+ dbg_assert (mme);
+
+ return true;
+}
+
+void
+cp_msg_vs_eoc_cco_get_real_time_stats_cnf_send (cp_t *ctx, cp_mme_peer_t *peer,
+ cp_msg_vs_eoc_get_real_time_statistics_req_result_t status,
+ real_time_stats_t *rt_stats)
+{
+ dbg_assert(ctx);
+ dbg_assert(peer);
+
+ FILE *fp;
+
+ if((fp = fopen("get_info.txt", "w")) != NULL)
+ {
+ fprintf(fp, "%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u", status,
+ rt_stats->nb_unicast_packets_rx,
+ rt_stats->nb_unicast_packets_tx, rt_stats->total_nb_bytes_rx,
+ rt_stats->total_nb_bytes_tx, rt_stats->nb_broadcast_packets_rx,
+ rt_stats->nb_broadcast_packets_tx,
+ rt_stats->nb_multicast_packets_rx,
+ rt_stats->nb_multicast_packets_tx, rt_stats->nb_packets_rx_crc,
+ rt_stats->nb_packets_rx_short, rt_stats->nb_packets_tx_short,
+ rt_stats->nb_packets_tx_dropped,
+ rt_stats->nb_packets_rx_discarded,
+ rt_stats->avg_pre_fec_bit_error_rate);
+ }
+ else
+ printf("DBG:cp_msg_mme_send_stub_get_real_time_stats, \
+ Error opening get_info.txt\n");
+ fclose(fp);
+}
+
diff --git a/cesar/cp/eoc/cco/action/test/utest_eoc/src/scenario_event_stub.c b/cesar/cp/eoc/cco/action/test/utest_eoc/src/scenario_event_stub.c
new file mode 100644
index 0000000000..2969227196
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/test/utest_eoc/src/scenario_event_stub.c
@@ -0,0 +1,241 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/fsm_stub.c
+ * \brief Override FSM tables.
+ * \ingroup test
+ */
+#include "common/std.h"
+
+#include "lib/scenario/scenario.h"
+
+#include "cp/fsm/fsm.h"
+#include "cp/fsm/inc/tables.h"
+
+void
+cp_sta_action_drv__started__drv_sta_mac_stop_req (cp_t *ctx, cp_mme_rx_t *mme)
+{
+ scenario_event (cp_fsm__STARTED__drv_sta_mac_stop_req);
+}
+
+void
+cp_sta_action_drv__stopped__drv_sta_set_mac_addr_req (cp_t *ctx, cp_mme_rx_t *mme)
+{
+ scenario_event (cp_fsm__STOPPED__drv_sta_set_mac_addr_req);
+}
+
+void
+cp_sta_action_drv__stopped__drv_sta_set_cco_pref_req (cp_t *ctx, cp_mme_rx_t *mme)
+{
+ scenario_event (cp_fsm__STOPPED__drv_sta_set_cco_pref_req);
+}
+
+void
+cp_sta_action_drv__stopped__drv_sta_set_was_cco_req (cp_t *ctx, cp_mme_rx_t *mme)
+{
+ scenario_event (cp_fsm__STOPPED__drv_sta_set_was_cco_req);
+}
+
+void
+cp_sta_action_drv__stopped__drv_sta_set_dpw_req (cp_t *ctx, cp_mme_rx_t *mme)
+{
+ scenario_event (cp_fsm__STOPPED__drv_sta_set_dpw_req);
+}
+
+void
+cp_sta_action_drv__stopped__drv_sta_set_nid_req (cp_t *ctx, cp_mme_rx_t *mme)
+{
+ scenario_event (cp_fsm__STOPPED__drv_sta_set_nid_req);
+}
+
+void
+cp_sta_action_drv__stopped__drv_sta_set_tonemask_req (cp_t *ctx, cp_mme_rx_t *mme)
+{
+ scenario_event (cp_fsm__STOPPED__drv_sta_set_tonemask_req);
+}
+
+void
+cp_sta_action_drv__stopped__drv_sta_set_key_req (cp_t *ctx, cp_mme_rx_t *mme)
+{
+ scenario_event (cp_fsm__STOPPED__drv_sta_set_key_req);
+}
+
+void
+cp_sta_action_drv__stopped__drv_sta_set_dak_req (cp_t *ctx, cp_mme_rx_t *mme)
+{
+ scenario_event (cp_fsm__STOPPED__drv_sta_set_dak_req);
+}
+
+void
+cp_sta_action_drv__stopped__drv_sta_mac_start_req (cp_t *ctx, cp_mme_rx_t *mme)
+{
+ scenario_event (cp_fsm__STOPPED__drv_sta_mac_start_req);
+}
+
+void
+cp_sta_action_drv__stopped__drv_sta_set_npw_req(cp_t *ctx, cp_mme_rx_t *mme)
+{
+ scenario_event (cp_fsm__STOPPED__drv_sta_set_npw_req);
+}
+
+void
+cp_sta_action_drv__stopped__drv_sta_set_sl_req(cp_t *ctx, cp_mme_rx_t *mme)
+{
+ scenario_event (cp_fsm__STOPPED__drv_sta_set_sl_req);
+}
+
+void
+cp_sta_action_drv__stopped__drv_sta_set_m_sta_hfid_req(cp_t *ctx, cp_mme_rx_t *mme)
+{
+ scenario_event (cp_fsm__STOPPED__drv_sta_set_m_sta_hfid_req);
+}
+
+void
+cp_sta_action_drv__stopped__drv_sta_set_u_sta_hfid_req(cp_t *ctx, cp_mme_rx_t *mme)
+{
+ scenario_event (cp_fsm__STOPPED__drv_sta_set_u_sta_hfid_req);
+}
+
+void
+cp_sta_action_drv__stopped__drv_sta_set_avln_hfid_req(cp_t *ctx, cp_mme_rx_t *mme)
+{
+ scenario_event (cp_fsm__STOPPED__drv_sta_set_avln_hfid_req);
+}
+
+void
+cp_sta_action_drv__stopping__stopped (cp_t *ctx)
+{
+ scenario_event (cp_fsm__STOPPING__stopped);
+}
+
+void
+cp_sta_action_poweron__many__to_idle (cp_t *ctx)
+{
+ scenario_event (cp_fsm__STOPPING__poweron__many__to_idle);
+}
+
+void
+cp_eoc_cco_action_poweron__idle__to_poweron (cp_t *ctx)
+{
+ scenario_event (cp_fsm__STARTED__poweron__idle__to_poweron);
+}
+
+void
+cp_sta_action_bridge_first_com (cp_t *ctx, cp_net_t *net, cp_sta_t *sta)
+{
+ scenario_event (cp_fsm__CCO__bridge_first_com);
+}
+
+void
+cp_eoc_cco_action__power_on_rx_beacon (cp_t *ctx)
+{
+ scenario_event (cp_fsm__POWER_ON__power_on_rx_beacon);
+}
+
+void
+cp_eoc_cco_action__power_on_no_beacons (cp_t *ctx)
+{
+ scenario_event (cp_fsm__POWER_ON__power_on_no_beacons);
+}
+
+void
+cp_eoc_cco_action__cco_drv_mac_stop (cp_t *ctx)
+{
+ scenario_event (cp_fsm__CCO__cco_drv_mac_stop);
+}
+
+void
+cp_eoc_cco_action__bcco_no_beacons (cp_t *ctx)
+{
+ scenario_event (cp_fsm__BCCO__bcco_no_beacons);
+}
+
+void
+cp_eoc_cco_action__bcco_drv_mac_stop (cp_t *ctx)
+{
+ scenario_event (cp_fsm__BCCO__bcco_drv_mac_stop);
+}
+
+void
+cp_eoc_cco_action_send_central_beacon (cp_t *ctx)
+{
+ scenario_event (cp_fsm__CCO__send_central_beacon);
+}
+
+void
+cp_eoc_cco_action_nek_provide (cp_t *ctx)
+{
+ scenario_event (cp_fsm__CCO__nek_provide);
+}
+
+void
+cp_eoc_cco_action__set_key_cnf (cp_t *ctx, cp_mme_rx_t *mme)
+{
+ scenario_event (cp_fsm__CCO__set_key_cnf);
+}
+
+void
+cp_eoc_cco_action_nek_change_timeout (cp_t *ctx)
+{
+ scenario_event (cp_fsm__CCO__nek_change_timeout, param);
+ cp_fsm_branch_ (ctx, param->branch);
+}
+
+void
+cp_beacon_beacon_not_received (cp_t *ctx)
+{
+ scenario_event (cp_fsm__POWER_ON__beacon_not_received);
+}
+
+void
+cp_eoc_cco_action_vs_eoc__cco__vs_eoc_get_topo_req (cp_t *ctx, cp_mme_rx_t *mme)
+{
+ scenario_event (cp_fsm__CCO__vs_eoc__cco__vs_eoc_get_topo_req);
+}
+
+void
+cp_eoc_cco_action_event_dispatch (cp_t *ctx, cp_mme_rx_t *mme)
+{
+ scenario_event (cp_fsm__CCO__event_dispatch);
+}
+
+void
+cp_sta_action_drv__drv_sta_get_key_req (cp_t *ctx, cp_mme_rx_t *mme)
+{
+ scenario_event (cp_fsm__CCO__drv_sta_get_key_req);
+}
+
+void
+cp_eoc_cco_action_vs__stopped__vs_cco_set_wl_req (cp_t *ctx, cp_mme_rx_t *mme)
+{
+ scenario_event (cp_fsm__CCO__vs_eoc__cco__vs_eoc_set_wl_req);
+}
+
+void
+cp_eoc_cco_action_vs__stopped__vs_cco_get_wl_req (cp_t *ctx, cp_mme_rx_t *mme)
+{
+ scenario_event (cp_fsm__CCO__vs_eoc__cco__vs_eoc_get_wl_req);
+}
+
+void
+cp_eoc_cco_action_vs_eoc__cco__vs_eoc_set_ports_req(cp_t *ctx, cp_mme_rx_t *mme)
+{
+ scenario_event (cp_fsm__CCO__vs_eoc__cco__vs_eoc_set_ports_req);
+}
+
+void
+cp_eoc_cco_action_vs_eoc__cco__vs_eoc_cco_get_ports_req(cp_t *ctx, cp_mme_rx_t *mme)
+{
+ scenario_event (cp_fsm__CCO__vs_eoc__cco__vs_eoc_get_ports_req);
+}
+
+void
+cp_eoc_cco_action__cco__leave_remove_timeout (cp_t *ctx)
+{
+ scenario_event (cp_fsm__CCO__vs_eoc__cco__leave_remove_timeout);
+}
diff --git a/cesar/cp/eoc/cco/action/test/utest_eoc/src/test_actions.c b/cesar/cp/eoc/cco/action/test/utest_eoc/src/test_actions.c
new file mode 100644
index 0000000000..c0ac860fb2
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/test/utest_eoc/src/test_actions.c
@@ -0,0 +1,4016 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/test_actions.c
+ * \brief Test CCo actions.
+ * \ingroup test
+ */
+
+#include "stdio.h"
+#include "common/std.h"
+#include "lib/blk.h"
+#include "lib/test.h"
+#include "lib/scenario/scenario.h"
+#include "cp/eoc/multi_sta_fsm/fsm.h"
+#include "cp/inc/context.h"
+#include "cp/sta/core/core.h"
+#include "cp/eoc/multi_sta/action/multi_sta_action.h"
+#include "cp/msg/msg.h"
+#include "lib/test.h"
+#include "lib/utils.h"
+#include "lib/swap.h"
+#include "lib/slab.h"
+#include "cp/sta/mgr/sta_mgr.h"
+#include "cp/sta/mgr/inc/sta.h"
+#include "cp/eoc/sta/mgr/sta_mgr.h"
+#include "cp/eoc/cco/action/cco_action.h"
+#include "inc/test_cco_action.h"
+#include "mac/sar/inc/context.h"
+#include "mac/common/defs.h"
+#include "cp/eoc/cco/bw/service.h"
+
+#define SET_STATIONS(number_of_stations) \
+ uint i = 0; \
+ uint j = 0; \
+ cp_tei_t starting_tei = 2; \
+ mac_t starting_mac = 0x0000111111111111ull; \
+ u8 starting_index_of_service = 0; \
+ mac_t stas_macs[MAC_TEI_STA_NB]; \
+ cp_tei_t stas_teis[MAC_TEI_STA_NB]; \
+ bool stas_ports_ed[MAC_TEI_STA_NB][PORT_NB]; \
+ u8 stas_ports_service[MAC_TEI_STA_NB][PORT_NB]; \
+ cp_sta_t* stations[MAC_TEI_STA_NB]; \
+ for (i = 0; i < number_of_stations; i++) \
+ { \
+ stas_macs[i] = starting_mac + i; \
+ stas_teis[i] = starting_tei + i; \
+ for(j = 0; j < PORT_NB; j++)\
+ { \
+ stas_ports_ed[i][j] = j % 2 ? true : false; \
+ stas_ports_service[i][j] = starting_index_of_service + j; \
+ stations[i] = cp_sta_mgr_sta_add (cp, net, stas_teis[i],\
+ stas_macs[i]); \
+ stations[i]->multi_sta.ports.port[j].enabled = \
+ stas_ports_ed[i][j]; \
+ stations[i]->multi_sta.ports.port[j].index_of_service = \
+ stas_ports_service[i][j]; \
+ slab_release (stations[i]);\
+ } \
+ }
+
+#define SET_UNASSOC_STATIONS(number_of_stations, number_of_unassoc_stations) \
+ for(i = number_of_stations; \
+ i < (number_of_stations + number_of_unassoc_stations); i++)\
+ {\
+ stas_macs[i] = starting_mac + i; \
+ stas_teis[i] = MAC_TEI_UNASSOCIATED; \
+ for (j = 0; j < PORT_NB; j++)\
+ { \
+ stas_ports_ed[i][j] = j % 2 ? true : false; \
+ stas_ports_service[i][j] = starting_index_of_service + j; \
+ stations[i] = cp_sta_mgr_sta_add (cp, net, stas_teis[i], \
+ stas_macs[i]); \
+ dbg_assert (stations[i]);\
+ stations[i]->multi_sta.ports.port[j].enabled = \
+ stas_ports_ed[i][j]; \
+ stations[i]->multi_sta.ports.port[j].index_of_service = \
+ stas_ports_service[i][j]; \
+ slab_release (stations[i]);\
+ } \
+ }
+
+void
+test_sta_action_init (test_sta_action_t *ctx)
+{
+#if CONFIG_TRACE
+ static trace_namespace_t namespace;
+ trace_buffer_add (&ctx->cp.trace, "cp", 8, 1, false, &namespace);
+#endif
+ ctx->cp.mac_config = &ctx->mac_config;
+ ctx->cp.mac_store = mac_store_init ();
+ ctx->cp.pbproc = NULL;
+ ctx->cp.cl = INVALID_PTR;
+ cp_eoc_sta_mgr_init (&ctx->cp);
+ lib_rnd_init (&ctx->cp.rnd, 1234);
+}
+
+void
+test_sta_action_uninit (test_sta_action_t *ctx)
+{
+ cp_sta_mgr_uninit (&ctx->cp);
+ mac_store_uninit (ctx->cp.mac_store);
+#if CONFIG_TRACE
+ trace_buffer_remove (&ctx->cp.trace);
+#endif
+}
+
+void
+test_sta_action_create_our_net (test_sta_action_t *ctx, cp_nid_t nid,
+ cp_snid_t snid)
+{
+ cp_t *cp = &ctx->cp;
+ cp_sta_own_data_set_nid (cp, nid);
+ cp_sta_own_data_set_snid (cp, snid);
+ cp_net_t *our_net = cp_sta_mgr_add_avln (cp, snid, nid);
+ cp_sta_mgr_set_our_avln (cp, our_net);
+}
+
+void
+cp_eoc_cco_action_test_release_mac_store (cp_t *ctx)
+{
+ uint tei, i;
+ for (tei = MAC_TEI_STA_MIN_EOC; tei < MAC_TEI_STA_MAX; tei++)
+ {
+ mfs_t *mfs;
+ for (i = 0; i < MAC_CAP_NB; i++)
+ {
+ mfs = mac_store_mfs_get (ctx->mac_store, true, false, false,
+ MAC_LLID_MIN + i, tei);
+ if (mfs)
+ {
+ mac_store_mfs_remove (ctx->mac_store, mfs);
+ blk_release (mfs);
+ }
+ }
+ mfs = mac_store_mfs_get (ctx->mac_store, true, false, true,
+ MAC_LID_NONE, tei);
+ if (mfs)
+ {
+ mac_store_mfs_remove (ctx->mac_store, mfs);
+ blk_release (mfs);
+ }
+ }
+}
+
+void
+test_case_DRV_and_VS_MMEs (test_t test)
+{
+ test_case_begin (test, "test_case_DRV_and_VS_MMEs");
+
+ test_begin (test, "cp_eoc_multi_sta_action_compute_tei")
+ {
+ cp_t ctx;
+ cp_tei_t tei;
+
+ for (tei = MAC_TEI_STA_MIN_EOC; tei <= MAC_TEI_STA_MAX; tei++)
+ {
+ test_fail_unless (cp_eoc_multi_sta_action_compute_tei (&ctx) == tei);
+ }
+
+ test_fail_unless (cp_eoc_multi_sta_action_compute_tei (&ctx) ==
+ MAC_TEI_UNASSOCIATED);
+
+ test_fail_unless (cp_eoc_multi_sta_action_compute_tei (&ctx) ==
+ MAC_TEI_UNASSOCIATED);
+ }
+ test_end;
+
+ test_begin (test, "Receiving and processing DRV_STA_SET_MAC_ADDR_REQ")
+ {
+ cp_t ctx;
+ mac_config_t mac_config;
+ cp_mme_rx_t my_mme;
+ cp_mme_rx_t *mme = &my_mme;
+ cp_net_t *net;
+ uint cl;
+ bitstream_t bitstream;
+ u64 data;
+ u8 buffer[1024];
+ sar_t sar;
+
+ ctx.mac_config = &mac_config;
+ cp_msg_init (&ctx);
+ cp_cl_interf_init (&ctx);
+ lib_rnd_init (&ctx.rnd, 1234);
+ cp_eoc_sta_mgr_init (&ctx);
+ ctx.sar=&sar;
+ ctx.mac_store = mac_store_init ();
+ ctx.sta_mgr.sta_own_data.security_level = CP_SECURITY_LEVEL_HS;
+ ctx.cl = (cl_t *) &cl;
+
+ net = cp_sta_mgr_add_avln (&ctx, 1, 1);
+ cp_sta_mgr_set_our_avln (&ctx, net);
+
+ mme->mmtype = DRV_STA_SET_MAC_ADDR_REQ;
+ cp_secu_protocol_run_new (&mme->prun, 0, &ctx.rnd);
+ bitstream_init (&my_mme.bitstream, buffer, sizeof(buffer),
+ BITSTREAM_READ);
+
+ bitstream_init (&bitstream, buffer, sizeof(buffer), BITSTREAM_WRITE);
+
+ data = 0x3;
+ bitstream_access (&bitstream, &data, 48);
+ bitstream_finalise (&bitstream);
+ mme->length = 6;
+ mme->peer.mac = 0x3;
+
+ cp_sta_action_drv__stopped__drv_sta_set_mac_addr_req (&ctx, mme);
+
+ test_fail_unless (ctx.sta_mgr.sta_own_data.mac_addr == mme->peer.mac);
+
+ test_fail_unless (ctx.mac_config->sta_mac_address == mme->peer.mac);
+ }
+ test_end;
+
+ test_begin (test, "Receiving and processing DRV_STA_SET_CCO_PREF_REQ")
+ {
+ cp_t ctx;
+ mac_config_t mac_config;
+ cp_mme_rx_t my_mme;
+ cp_mme_rx_t *mme = &my_mme;
+ bitstream_t bitstream;
+ u8 cco_pref;
+ u8 buffer[1024];
+
+ ctx.mac_config = &mac_config;
+ cp_msg_init (&ctx);
+ cp_cl_interf_init (&ctx);
+ lib_rnd_init (&ctx.rnd, 1234);
+
+ mme->mmtype = DRV_STA_SET_CCO_PREF_REQ;
+ cp_secu_protocol_run_new (&mme->prun, 0, &ctx.rnd);
+ bitstream_init (&my_mme.bitstream, buffer, sizeof(buffer),
+ BITSTREAM_READ);
+
+ /* Build the MME. */
+ bitstream_init (&bitstream, buffer, sizeof(buffer), BITSTREAM_WRITE);
+
+ /* 0x01 means that the staion is prefered as CCO
+ 0x00 means that the station is not prefered as CCO. */
+ cco_pref = 0x1;
+ bitstream_access (&bitstream, &cco_pref, 8);
+ bitstream_finalise (&bitstream);
+ mme->length = 1;
+
+ cp_sta_action_drv__stopped__drv_sta_set_cco_pref_req (&ctx, mme);
+
+ cp_sta_own_data_t *own = cp_sta_mgr_get_sta_own_data (&ctx);
+
+ test_fail_unless (own->cco_prefered == cco_pref);
+ }
+ test_end;
+
+ test_begin (test, "Receiving and processing DRV_STA_SET_WAS_CCO_REQ")
+ {
+ cp_t ctx;
+ mac_config_t mac_config;
+ cp_mme_rx_t my_mme;
+ cp_mme_rx_t *mme = &my_mme;
+ bitstream_t bitstream;
+ u8 was_cco;
+ u8 buffer[1024];
+
+ ctx.mac_config = &mac_config;
+ cp_msg_init (&ctx);
+ cp_cl_interf_init (&ctx);
+ lib_rnd_init (&ctx.rnd, 1234);
+
+ mme->mmtype = DRV_STA_SET_WAS_CCO_REQ;
+ cp_secu_protocol_run_new (&mme->prun, 0, &ctx.rnd);
+ bitstream_init (&my_mme.bitstream, buffer, sizeof(buffer),
+ BITSTREAM_READ);
+
+ /* Build the MME. */
+ bitstream_init (&bitstream, buffer, sizeof(buffer), BITSTREAM_WRITE);
+
+ /* 0x01 means that the staion was a CCO prviously */
+ /* 0x00 means that the station was not a CCO previously */
+ was_cco = 0x1;
+
+ bitstream_access (&bitstream, &was_cco, 8);
+
+ bitstream_finalise (&bitstream);
+
+ mme->length = 1;
+
+ cp_sta_action_drv__stopped__drv_sta_set_was_cco_req (&ctx, mme);
+
+ test_fail_unless (ctx.sta_mgr.sta_own_data.was_cco == was_cco);
+ }
+ test_end;
+
+ test_begin (test, "Receiving and processing DRV_STA_SET_SL_REQ")
+ {
+ cp_t ctx;
+ mac_config_t mac_config;
+ cp_mme_rx_t my_mme;
+ cp_mme_rx_t *mme = &my_mme;
+ bitstream_t bitstream;
+ cp_security_level_t sl;
+ u8 buffer[1024];
+
+ ctx.mac_config = &mac_config;
+ cp_msg_init (&ctx);
+ cp_cl_interf_init (&ctx);
+ lib_rnd_init (&ctx.rnd, 1234);
+
+ mme->mmtype = DRV_STA_SET_SL_REQ;
+ cp_secu_protocol_run_new (&mme->prun, 0, &ctx.rnd);
+ bitstream_init (&my_mme.bitstream, buffer, sizeof(buffer),
+ BITSTREAM_READ);
+
+ strcpy (ctx.sta_mgr.sta_own_data.npw, "SPC-300_EoC_200MBps");
+
+ /* Build the MME. */
+ bitstream_init (&bitstream, buffer, sizeof(buffer), BITSTREAM_WRITE);
+
+ /* Possible security level values: CP_SECURITY_LEVEL_SC,
+ * CP_SECURITY_LEVEL_HS */
+ sl = CP_SECURITY_LEVEL_HS;
+
+ bitstream_access (&bitstream, &sl, 8);
+
+ bitstream_finalise (&bitstream);
+
+ mme->length = 1;
+
+ cp_sta_action_drv__stopped__drv_sta_set_sl_req (&ctx, mme);
+
+ test_fail_unless (ctx.sta_mgr.sta_own_data.security_level == sl);
+ }
+ test_end;
+
+ test_begin (test, "Receiving and processing DRV_STA_SET_M_STA_HFID_REQ")
+ {
+ cp_t ctx;
+ mac_config_t mac_config;
+ cp_mme_rx_t my_mme;
+ cp_mme_rx_t *mme = &my_mme;
+ uint i;
+ bitstream_t bitstream;
+ u8 buffer[1024];
+ char m_sta_hfid[CP_HFID_SIZE + 1];
+
+ /* sample manufacturer human friendly identifier:
+ * Spidcom_SPC_300_EoC_m_HFID_123. */
+ memset (m_sta_hfid, 0, sizeof (m_sta_hfid));
+ strcpy (m_sta_hfid, "Spidcom_SPC_300_EoC_m_HFID_123");
+
+ ctx.mac_config = &mac_config;
+ cp_msg_init (&ctx);
+ cp_cl_interf_init (&ctx);
+ lib_rnd_init (&ctx.rnd, 1234);
+
+ mme->mmtype = DRV_STA_SET_M_STA_HFID_REQ;
+ cp_secu_protocol_run_new (&mme->prun, 0, &ctx.rnd);
+ bitstream_init (&my_mme.bitstream, buffer, sizeof(buffer),
+ BITSTREAM_READ);
+
+ /* Build the MME. */
+ bitstream_init (&bitstream, buffer, sizeof(buffer), BITSTREAM_WRITE);
+
+ for(i = 0; i < CP_HFID_SIZE; i++)
+ bitstream_access (&bitstream, &m_sta_hfid[i], 8);
+
+ bitstream_finalise (&bitstream);
+
+ cp_sta_action_drv__stopped__drv_sta_set_m_sta_hfid_req (&ctx, mme);
+
+ cp_sta_own_data_t *own = cp_sta_mgr_get_sta_own_data (&ctx);
+
+ test_fail_unless (!(strcmp(own->hfid_manufacturer, m_sta_hfid)));
+ }
+ test_end;
+
+ test_begin (test, "Receiving and processing DRV_STA_SET_U_STA_HFID_REQ")
+ {
+ cp_t ctx;
+ mac_config_t mac_config;
+ cp_mme_rx_t my_mme;
+ cp_mme_rx_t *mme = &my_mme;
+ uint i;
+ bitstream_t bitstream;
+ u8 buffer[1024];
+ char u_sta_hfid[CP_HFID_SIZE + 1];
+
+ /* sample user human friendly identifier:
+ * Spidcom_SPC_300_EoC_u_HFID_123. */
+ memset (u_sta_hfid, 0, sizeof(u_sta_hfid));
+ strcpy (u_sta_hfid, "Spidcom_SPC_300_EoC_u_HFID_123");
+
+ ctx.mac_config = &mac_config;
+ cp_msg_init (&ctx);
+ cp_cl_interf_init (&ctx);
+ lib_rnd_init (&ctx.rnd, 1234);
+
+ mme->mmtype = DRV_STA_SET_M_STA_HFID_REQ;
+ cp_secu_protocol_run_new (&mme->prun, 0, &ctx.rnd);
+ bitstream_init (&my_mme.bitstream, buffer, sizeof(buffer),
+ BITSTREAM_READ);
+
+ /* Build the MME. */
+ bitstream_init (&bitstream, buffer, sizeof(buffer), BITSTREAM_WRITE);
+
+ for(i = 0; i < CP_HFID_SIZE; i++)
+ bitstream_access (&bitstream, &u_sta_hfid[i], 8);
+
+ bitstream_finalise (&bitstream);
+
+ cp_sta_action_drv__stopped__drv_sta_set_u_sta_hfid_req (&ctx, mme);
+
+ cp_sta_own_data_t *own = cp_sta_mgr_get_sta_own_data (&ctx);
+
+ test_fail_unless (!(strcmp(own->hfid_user, u_sta_hfid)));
+ }
+ test_end;
+
+ test_begin (test, "Receiving and processing DRV_STA_SET_AVLN_HFID_REQ")
+ {
+ cp_t ctx;
+ mac_config_t mac_config;
+ cp_mme_rx_t my_mme;
+ cp_mme_rx_t *mme = &my_mme;
+ uint i;
+ bitstream_t bitstream;
+ u8 buffer[1024];
+ char avln_hfid[CP_HFID_SIZE + 1];
+
+ /* sample avln human friendly identifier:
+ * Spidcom_SPC_300_EoC_avln_HFID_123. */
+ memset (avln_hfid, 0, sizeof (avln_hfid));
+ strcpy (avln_hfid, "Spidcom_SPC_300_EoC_avln_HFID_123");
+
+ ctx.mac_config = &mac_config;
+ cp_msg_init (&ctx);
+ cp_cl_interf_init (&ctx);
+ lib_rnd_init (&ctx.rnd, 1234);
+
+ mme->mmtype = DRV_STA_SET_M_STA_HFID_REQ;
+ cp_secu_protocol_run_new (&mme->prun, 0, &ctx.rnd);
+ bitstream_init (&my_mme.bitstream, buffer, sizeof(buffer),
+ BITSTREAM_READ);
+
+ /* Build the MME. */
+ bitstream_init (&bitstream, buffer, sizeof(buffer), BITSTREAM_WRITE);
+
+ for(i = 0; i < CP_HFID_SIZE; i++)
+ bitstream_access (&bitstream, &avln_hfid[i], 8);
+ bitstream_finalise (&bitstream);
+
+ cp_sta_action_drv__stopped__drv_sta_set_avln_hfid_req (&ctx, mme);
+
+ cp_sta_own_data_t *own = cp_sta_mgr_get_sta_own_data (&ctx);
+
+ test_fail_unless (!(strcmp(own->hfid_avln, avln_hfid)));
+ }
+ test_end;
+
+ test_begin (test, "Receiving and processing DRV_STA_SET_KEY_REQ change NID")
+ {
+ cp_t ctx;
+ mac_config_t mac_config;
+ cp_mme_rx_t my_mme;
+ cp_mme_rx_t *mme = &my_mme;
+ uint i;
+ uint cl;
+ bitstream_t bitstream;
+ u8 buffer[1024];
+ cp_nid_t nid;
+ cp_net_t *net;
+ cp_key_t nmk;
+ enum cp_msg_drv_sta_set_key_type_t type;
+ cp_security_level_t sl;
+
+ /* sample network id: 0x11223344556677 */
+ nid = 0x11223344556677ull;
+
+ /* Possible security level values:
+ * CP_SECURITY_LEVEL_SC, CP_SECURITY_LEVEL_HS. */
+ sl = CP_SECURITY_LEVEL_HS;
+
+ /* Possible type values:
+ * CP_MSG_DRV_STA_SET_KEY_TYPE_CHANGE_NID,
+ * CP_MSG_DRV_STA_SET_KEY_TYPE_CHANGE_SECURITY_LEVEL,
+ * CP_MSG_DRV_STA_SET_KEY_TYPE_NB */
+ type = CP_MSG_DRV_STA_SET_KEY_TYPE_CHANGE_NID;
+
+ /* sample network membership key: */
+ nmk.key[0] = 0x11111111;
+ nmk.key[1] = 0x22222222;
+ nmk.key[2] = 0x33333333;
+ nmk.key[3] = 0x44444444;
+
+ ctx.mac_config = &mac_config;
+ cp_msg_init (&ctx);
+ ctx.cl = (cl_t *) &cl;
+ cp_cl_interf_init (&ctx);
+ lib_rnd_init (&ctx.rnd, 1234);
+ cp_eoc_sta_mgr_init (&ctx);
+
+ /* set our avln */
+ net = cp_sta_mgr_add_avln (&ctx, 1, 1);
+ cp_sta_mgr_set_our_avln (&ctx, net);
+ cp_sta_own_data_set_security_level (&ctx, sl);
+
+ mme->mmtype = DRV_STA_SET_KEY_REQ;
+ cp_secu_protocol_run_new (&mme->prun, 0, &ctx.rnd);
+
+ bitstream_init (&my_mme.bitstream, buffer, sizeof(buffer),
+ BITSTREAM_READ);
+
+ /* Build the MME. */
+ bitstream_init (&bitstream, buffer, sizeof(buffer), BITSTREAM_WRITE);
+
+ for (i = 0; i < COUNT (nmk.key); i++)
+ bitstream_access (&bitstream, &nmk.key[i], 32);
+
+ bitstream_access (&bitstream, &type, 8);
+ bitstream_access (&bitstream, &nid, 56);
+ bitstream_access (&bitstream, &sl, 8);
+
+ bitstream_finalise (&bitstream);
+
+ mme->length = 25;
+
+ cp_sta_action_drv__stopped__drv_sta_set_key_req (&ctx, mme);
+
+ for (i = 0; i < COUNT (nmk.key); i++)
+ test_fail_unless (ctx.sta_mgr.sta_own_data.nmk.key[i] == nmk.key[i]);
+
+ test_fail_unless (ctx.sta_mgr.sta_own_data.nid ==
+ (((cp_nid_t) sl << 52) | nid));
+
+ test_fail_unless (ctx.sta_mgr.our_avln->nid ==
+ (((cp_nid_t) sl << 52) | nid));
+
+ /* When NID is changed, SL should stay the same */
+ test_fail_unless (ctx.sta_mgr.sta_own_data.security_level == sl);
+ }
+ test_end
+
+ test_begin (test, "Receiving and processing DRV_STA_SET_KEY_REQ change sl")
+ {
+ cp_t ctx;
+ mac_config_t mac_config;
+ cp_mme_rx_t my_mme;
+ cp_mme_rx_t *mme = &my_mme;
+ uint i;
+ uint cl;
+ bitstream_t bitstream;
+ u8 buffer[1024];
+ cp_nid_t nid;
+ cp_net_t *net;
+ cp_key_t nmk;
+ enum cp_msg_drv_sta_set_key_type_t type;
+ cp_security_level_t sl;
+
+ /* sample network id: 0x11223344556677 */
+ nid = 0x11223344556677ull;
+
+ /* Possible security level values:
+ * CP_SECURITY_LEVEL_SC, CP_SECURITY_LEVEL_HS */
+ sl = CP_SECURITY_LEVEL_SC;
+
+ /* Possible type values:
+ * CP_MSG_DRV_STA_SET_KEY_TYPE_CHANGE_NID,
+ * CP_MSG_DRV_STA_SET_KEY_TYPE_CHANGE_SECURITY_LEVEL,
+ * CP_MSG_DRV_STA_SET_KEY_TYPE_NB */
+ type = CP_MSG_DRV_STA_SET_KEY_TYPE_CHANGE_SECURITY_LEVEL;
+
+ /* sample network membership key: */
+ nmk.key[0] = 0x11111111;
+ nmk.key[1] = 0x22222222;
+ nmk.key[2] = 0x33333333;
+ nmk.key[3] = 0x44444444;
+
+ ctx.mac_config = &mac_config;
+ cp_msg_init (&ctx);
+ ctx.cl = (cl_t *) &cl;
+ cp_cl_interf_init (&ctx);
+ lib_rnd_init (&ctx.rnd, 1234);
+ cp_eoc_sta_mgr_init (&ctx);
+
+ /* set our avln */
+ net = cp_sta_mgr_add_avln (&ctx, 1, 1);
+ cp_sta_mgr_set_our_avln (&ctx, net);
+ cp_sta_own_data_set_security_level (&ctx, sl);
+
+ mme->mmtype = DRV_STA_SET_KEY_REQ;
+ cp_secu_protocol_run_new (&mme->prun, 0, &ctx.rnd);
+ bitstream_init (&my_mme.bitstream, buffer, sizeof(buffer),
+ BITSTREAM_READ);
+
+ /* Build the MME. */
+ bitstream_init (&bitstream, buffer, sizeof(buffer), BITSTREAM_WRITE);
+
+ for (i = 0; i < COUNT (nmk.key); i++)
+ bitstream_access (&bitstream, &nmk.key[i], 32);
+
+ bitstream_access (&bitstream, &type, 8);
+ bitstream_access (&bitstream, &nid, 56);
+ bitstream_access (&bitstream, &sl, 8);
+ bitstream_finalise (&bitstream);
+
+ mme->length = 25;
+
+ cp_sta_action_drv__stopped__drv_sta_set_key_req (&ctx, mme);
+
+ for (i = 0; i < COUNT (nmk.key); i++)
+ test_fail_unless (ctx.sta_mgr.sta_own_data.nmk.key[i] == nmk.key[i]);
+
+ test_fail_unless (ctx.sta_mgr.sta_own_data.security_level == sl);
+ /* STA that changes Security Level shall discard the previous NMK. */
+ test_fail_unless (ctx.sta_mgr.sta_own_data.nid !=
+ (((cp_nid_t) sl << 52) | nid));
+ test_fail_unless (ctx.sta_mgr.our_avln->nid !=
+ (((cp_nid_t) sl << 52) | nid));
+ }
+ test_end
+
+ test_begin (test, "Receiving and processing DRV_STA_SET_DAK_REQ")
+ {
+ cp_t ctx;
+ mac_config_t mac_config;
+ cp_mme_rx_t my_mme;
+ cp_mme_rx_t *mme = &my_mme;
+ uint i;
+ bitstream_t bitstream;
+ cp_key_t dak;
+ u8 buffer[1024];
+
+ /* sample device access key: */
+ dak.key[0] = 0x11111111;
+ dak.key[1] = 0x22222222;
+ dak.key[2] = 0x33333333;
+ dak.key[3] = 0x44444444;
+
+ ctx.mac_config = &mac_config;
+ cp_msg_init (&ctx);
+ cp_cl_interf_init (&ctx);
+ lib_rnd_init (&ctx.rnd, 1234);
+
+ mme->mmtype = DRV_STA_SET_DAK_REQ;
+ cp_secu_protocol_run_new (&mme->prun, 0, &ctx.rnd);
+
+ bitstream_init (&my_mme.bitstream, buffer, sizeof(buffer),
+ BITSTREAM_READ);
+
+ /* Build the MME. */
+ bitstream_init (&bitstream, buffer, sizeof(buffer), BITSTREAM_WRITE);
+
+ for (i = 0; i < COUNT (dak.key); i++)
+ bitstream_access (&bitstream, &dak.key[i], 32);
+
+ bitstream_finalise (&bitstream);
+
+ mme->length = 16;
+
+ cp_sta_action_drv__stopped__drv_sta_set_dak_req (&ctx, mme);
+
+ for (i = 0; i < COUNT (dak.key); i++)
+ {
+ test_fail_unless (ctx.sta_mgr.sta_own_data.dak.key[i] == dak.key[i]);
+ }
+ }
+ test_end;
+
+ test_begin (test, "Receiving and processing DRV_STA_SET_TONEMASK_REQ")
+ {
+ cp_t ctx;
+ mac_config_t mac_config;
+ cp_mme_rx_t my_mme;
+ cp_mme_rx_t *mme = &my_mme;
+ uint i;
+ bitstream_t bitstream;
+ tonemask_info_t ti;
+ u8 buffer[2048];
+ u32 ff32, ff10;
+
+ ctx.mac_config = &mac_config;
+ mac_config_init (ctx.mac_config);
+ cp_msg_init (&ctx);
+ cp_cl_interf_init (&ctx);
+ lib_rnd_init (&ctx.rnd, 1234);
+
+ ff32 = 0xffffffff;
+ ff10 = 0x3ff;
+
+ mme->mmtype = DRV_STA_SET_TONEMASK_REQ;
+ cp_secu_protocol_run_new (&mme->prun, 0, &ctx.rnd);
+
+ bitstream_init (&my_mme.bitstream, buffer, sizeof(buffer),
+ BITSTREAM_READ);
+
+ /* Build the MME. */
+ bitstream_init (&bitstream, buffer, sizeof(buffer), BITSTREAM_WRITE);
+
+ ti.carrier_nb = tonemask_default (ti.tonemask);
+ tonemask_update(&ti);
+
+ /* ti.tonemask[2] = 0x3FFFFFFC by default,
+ * MSB coresponds to carrier 169 (0-enable,
+ * 1-disable), by default it is enabled (MSB = 0). */
+
+ /* disable carrier number 169
+ * (set MSB to 1, i.e. ti.tonemask[2] = 0xBFFFFFFC. */
+ ti.tonemask[2] = 0xBFFFFFFC;
+ tonemask_update(&ti);
+
+ for (i = 0; i < PHY_CARRIER_OFFSET / 32; i++)
+ bitstream_access (&bitstream, &ff32, 32);
+
+ bitstream_access (&bitstream, &ff10, 10);
+
+ for (i = 0; i < PHY_TONEMASK_WORDS; i++)
+ bitstream_access (&bitstream, &ti.tonemask[i], 32);
+
+ for (i = 0; i <= (PHY_ALL_CARRIER_NB - PHY_TONEMASK_WORDS * 32
+ - PHY_CARRIER_OFFSET) / 32; i++)
+ bitstream_access (&bitstream, &ff32, 32);
+
+ bitstream_finalise (&bitstream);
+
+ mme->length = PHY_TONEMASK_WORDS * 32 + PHY_CARRIER_OFFSET + \
+ (PHY_ALL_CARRIER_NB - PHY_TONEMASK_WORDS * 32 -
+ PHY_CARRIER_OFFSET) ;
+
+ cp_sta_action_drv__stopped__drv_sta_set_tonemask_req (&ctx, mme);
+
+ test_fail_unless (ctx.mac_config->tonemask_info.carrier_nb ==
+ ti.carrier_nb);
+
+ for (i = 0; i < PHY_TONEMASK_WORDS; i++)
+ test_fail_unless (ctx.mac_config->tonemask_info.tonemask[i] ==
+ ti.tonemask[i]);
+ }
+ test_end;
+
+ test_begin (test, "Receiving and processing VS_EOC_CCO_SET_WL_REQ new")
+ {
+ cp_t ctx;
+ mac_config_t mac_config;
+ sar_t sar;
+ uint cl;
+ cp_mme_rx_t my_mme;
+ cp_mme_rx_t *mme = &my_mme;
+ cp_net_t *net;
+
+ ctx.cl = (cl_t *) &cl;
+ ctx.mac_store = mac_store_init ();
+ sar.mac_store = ctx.mac_store;
+ ctx.sar = &sar;
+ ctx.mac_config = &mac_config;
+ cp_eoc_sta_mgr_init (&ctx);
+ cp_beacon_init (&ctx);
+ lib_rnd_init (&ctx.rnd, 1234);
+
+ net = cp_sta_mgr_add_avln (&ctx, 1, 1);
+ cp_sta_mgr_set_our_avln (&ctx, net);
+ memset (&ctx.beacon, 0, sizeof (cp_beacon_t));
+
+ bitstream_t bitstream;
+ uint numStas;
+ cp_tei_t stas_teis[3];
+ mac_t stas_macs[3];
+ u8 stas_authorizations[3];
+ u8 stas_output_levels[3];
+ u32 stas_start_times[3];
+ u32 stas_end_times[3];
+ cp_key_t stas_daks[3];
+ u8 stas_actions[3];
+ cp_dpw_t stas_dpws[3];
+ memset (stas_dpws, 0, 3 * sizeof (cp_dpw_t));
+ u8 buffer[1024];
+
+ uint i,j;
+
+ cp_msg_init (&ctx);
+ cp_cl_interf_init (&ctx);
+
+ /* First case is to set authorizations for
+ * stations which are not registered until now. */
+ mme->mmtype = VS_EOC_CCO_SET_WL_REQ;
+ cp_secu_protocol_run_new (&mme->prun, 0, &ctx.rnd);
+ bitstream_init (&my_mme.bitstream, buffer, sizeof(buffer),
+ BITSTREAM_READ);
+
+ /* Build the MME. */
+ bitstream_init (&bitstream, buffer, sizeof(buffer), BITSTREAM_WRITE);
+
+ numStas = 3;
+ stas_macs[0] = 0x111111111111ull;
+ stas_macs[1] = 0x222222222222ull;
+ stas_macs[2] = 0x333333333333ull;
+ stas_teis[0] = 20;
+ stas_teis[1] = 21;
+ stas_teis[2] = 22;
+ stas_authorizations[0] = true;
+ stas_authorizations[1] = false;
+ stas_authorizations[2] = true;
+ stas_output_levels[0] = 0x78;
+ stas_output_levels[1] = 0x79;
+ stas_output_levels[2] = 0x7A;
+ stas_start_times[0] = 0x10000000;
+ stas_start_times[1] = 0x20000000;
+ stas_start_times[2] = 0x30000000;
+ stas_end_times[0] = 0x40000000;
+ stas_end_times[1] = 0x50000000;
+ stas_end_times[2] = 0x60000000;
+ stas_daks[0].key[0] = 0x11110000;
+ stas_daks[0].key[1] = 0x00001101;
+ stas_daks[0].key[2] = 0x01010101;
+ stas_daks[0].key[3] = 0x11111111;
+ stas_daks[1].key[0] = 0x22220000;
+ stas_daks[1].key[1] = 0x22001101;
+ stas_daks[1].key[2] = 0x02020202;
+ stas_daks[1].key[3] = 0x11112222;
+ stas_daks[2].key[0] = 0x33333333;
+ stas_daks[2].key[1] = 0x33001101;
+ stas_daks[2].key[2] = 0x01033301;
+ stas_daks[2].key[3] = 0x03030303;
+ strcpy (stas_dpws[0].dpw, "SPiDCOM - SPC300 - 1");
+ strcpy (stas_dpws[1].dpw, "SPiDCOM - SPC300 - 2");
+ strcpy (stas_dpws[2].dpw, "SPiDCOM - SPC300 - 3");
+ stas_actions[0] = 0x00;
+ stas_actions[1] = 0x00;
+ stas_actions[2] = 0x00;
+ bitstream_access (&bitstream, &numStas, 8);
+ for(i = 0; i < numStas; i++)
+ {
+ bitstream_access (&bitstream, &stas_macs[i], 48);
+ bitstream_access (&bitstream, &stas_teis[i], 8);
+ bitstream_access (&bitstream, &stas_authorizations[i], 8);
+ bitstream_access (&bitstream, &stas_output_levels[i], 8);
+ bitstream_access (&bitstream, &stas_start_times[i], 32);
+ bitstream_access (&bitstream, &stas_end_times[i], 32);
+ for (j = 0; j < 4; j++)
+ bitstream_access (&bitstream, &stas_daks[i].key[j], 32);
+ bitstream_write_buf(&bitstream, (u8 *) stas_dpws[i].dpw,
+ CP_DPW_MAX_SIZE);
+ bitstream_access (&bitstream, &stas_actions[i], 8);
+ }
+
+ bitstream_finalise (&bitstream);
+
+ slab_cache_init (&ctx.fsm.event_bare_cache, "event_bare",
+ sizeof (cp_fsm_event_t), NULL);
+ cp_eoc_cco_action_vs__stopped__vs_cco_set_wl_req (&ctx, mme);
+
+ for(i = 0; i < numStas; i++)
+ {
+ cp_sta_t *sta = cp_sta_mgr_sta_get_from_mac(&ctx, stas_macs[i]);
+ dbg_assert (sta);
+ cp_tei_t tei = cp_sta_get_tei(sta);
+
+ test_fail_unless(tei == stas_teis[i]);
+ test_fail_unless(sta->multi_sta.allowed == stas_authorizations[i]);
+ test_fail_unless(sta->multi_sta.output_level ==
+ stas_output_levels[i]);
+ test_fail_unless(sta->multi_sta.start_time == stas_start_times[i]);
+ test_fail_unless(sta->multi_sta.end_time == stas_end_times[i]);
+ for (j = 0; j < 4; j++)
+ test_fail_unless(sta->multi_sta.dak.key[j] ==
+ stas_daks[i].key[j]);
+ for (j = 0; j < CP_DPW_MAX_SIZE; j++)
+ test_fail_unless(((cp_sta_private_t *)sta)->dpw.dpw[j]
+ == stas_dpws[i].dpw[j]);
+ test_fail_unless(sta->multi_sta.action == stas_actions[i]);
+ test_fail_unless (ctx.cco_action.wl_complete == 1);
+ slab_release (sta);
+ }
+ /* Remove the stations. It is only in sta_mgr list. */
+ for(i = 0; i < numStas; i++)
+ {
+ cp_sta_t *sta = cp_sta_mgr_sta_get_from_mac(&ctx, stas_macs[i]);
+ slab_release (sta);
+ slab_release (sta);
+ }
+ }
+ test_end;
+
+ test_begin (test, "Receiving and processing VS_EOC_CCO_SET_WL_REQ"
+ " change existing")
+ {
+ cp_t ctx;
+ mac_config_t mac_config;
+ sar_t sar;
+ uint cl;
+
+ cp_mme_rx_t my_mme;
+ cp_mme_rx_t *mme = &my_mme;
+
+ cp_net_t *net;
+
+ ctx.cl = (cl_t *) &cl;
+ ctx.mac_store = mac_store_init ();
+
+ sar.mac_store = ctx.mac_store;
+ ctx.sar = &sar;
+ ctx.mac_config = &mac_config;
+ cp_eoc_sta_mgr_init (&ctx);
+ cp_beacon_init (&ctx);
+ lib_rnd_init (&ctx.rnd, 1234);
+
+ net = cp_sta_mgr_add_avln (&ctx, 1, 1);
+ cp_sta_mgr_set_our_avln (&ctx, net);
+ memset (&ctx.beacon, 0, sizeof (cp_beacon_t));
+
+ bitstream_t bitstream;
+ uint numStas;
+ cp_tei_t stas_teis[3];
+ mac_t stas_macs[3];
+ u8 stas_authorizations[3];
+ u8 stas_output_levels[3];
+ u32 stas_start_times[3];
+ u32 stas_end_times[3];
+ cp_key_t stas_daks[3];
+ cp_dpw_t stas_dpws[3];
+ memset (stas_dpws, 0, 3 * sizeof (cp_dpw_t));
+ u8 stas_actions[3];
+ u8 buffer[1024];
+
+ uint i,j;
+
+ cp_msg_init (&ctx);
+ cp_cl_interf_init (&ctx);
+
+ /* Second case is to change authorizations
+ * for stations which are registered before. */
+ mme->mmtype = VS_EOC_CCO_SET_WL_REQ;
+ cp_secu_protocol_run_new (&mme->prun, 0, &ctx.rnd);
+ bitstream_init (&my_mme.bitstream, buffer, sizeof(buffer),
+ BITSTREAM_READ);
+
+ /* Build the MME. */
+ bitstream_init (&bitstream, buffer, sizeof(buffer), BITSTREAM_WRITE);
+
+ numStas = 3;
+ stas_macs[0] = 0x111111111111ull;
+ stas_macs[1] = 0x222222222222ull;
+ stas_macs[2] = 0x333333333333ull;
+ stas_teis[0] = 201;
+ stas_teis[1] = 202;
+ stas_teis[2] = 203;
+ stas_authorizations[0] = false;
+ stas_authorizations[1] = true;
+ stas_authorizations[2] = false;
+ stas_output_levels[0] = 0x01;
+ stas_output_levels[1] = 0x02;
+ stas_output_levels[2] = 0x03;
+ stas_start_times[0] = 0x10000000;
+ stas_start_times[1] = 0x20000000;
+ stas_start_times[2] = 0x30000000;
+ stas_end_times[0] = 0x40000000;
+ stas_end_times[1] = 0x50000000;
+ stas_end_times[2] = 0x60000000;
+ stas_daks[0].key[0] = 0x11110000;
+ stas_daks[0].key[1] = 0x00001101;
+ stas_daks[0].key[2] = 0x01010101;
+ stas_daks[0].key[3] = 0x11111111;
+ stas_daks[1].key[0] = 0x22220000;
+ stas_daks[1].key[1] = 0x22001101;
+ stas_daks[1].key[2] = 0x02020202;
+ stas_daks[1].key[3] = 0x11112222;
+ stas_daks[2].key[0] = 0x33333333;
+ stas_daks[2].key[1] = 0x33001101;
+ stas_daks[2].key[2] = 0x01033301;
+ stas_daks[2].key[3] = 0x03030303;
+ strcpy (stas_dpws[0].dpw, "SPiDCOM - SPC300 - 1");
+ strcpy (stas_dpws[1].dpw, "SPiDCOM - SPC300 - 2");
+ strcpy (stas_dpws[2].dpw, "SPiDCOM - SPC300 - 3");
+ stas_actions[0] = 0x00;
+ stas_actions[1] = 0x00;
+ stas_actions[2] = 0x00;
+
+ bitstream_access (&bitstream, &numStas, 8);
+ for(i = 0; i < numStas; i++)
+ {
+ bitstream_access (&bitstream, &stas_macs[i], 48);
+ bitstream_access (&bitstream, &stas_teis[i], 8);
+ bitstream_access (&bitstream, &stas_authorizations[i], 8);
+ bitstream_access (&bitstream, &stas_output_levels[i], 8);
+ bitstream_access (&bitstream, &stas_start_times[i], 32);
+ bitstream_access (&bitstream, &stas_end_times[i], 32);
+ for (j = 0; j < 4; j++)
+ bitstream_access (&bitstream, &stas_daks[i].key[j], 32);
+ bitstream_write_buf(&bitstream, (u8 *) stas_dpws[i].dpw,
+ CP_DPW_MAX_SIZE);
+ bitstream_access (&bitstream, &stas_actions[i], 8);
+ }
+
+ bitstream_finalise (&bitstream);
+
+ slab_cache_init (&ctx.fsm.event_bare_cache, "event_bare",
+ sizeof (cp_fsm_event_t), NULL);
+ cp_eoc_cco_action_vs__stopped__vs_cco_set_wl_req (&ctx, mme);
+
+ /* Now, change authorizations for previously added stations */
+ bitstream_init (&my_mme.bitstream, buffer, sizeof(buffer),
+ BITSTREAM_READ);
+
+ /* Build the MME. */
+ bitstream_init (&bitstream, buffer, sizeof(buffer), BITSTREAM_WRITE);
+
+ numStas = 3;
+ stas_macs[0] = 0x111111111111ull;
+ stas_macs[1] = 0x222222222222ull;
+ stas_macs[2] = 0x333333333333ull;
+ stas_teis[0] = 201;
+ stas_teis[1] = 202;
+ stas_teis[2] = 203;
+ stas_authorizations[0] = true;
+ stas_authorizations[1] = false;
+ stas_authorizations[2] = true;
+ stas_output_levels[0] = 0x01;
+ stas_output_levels[1] = 0x02;
+ stas_output_levels[2] = 0x03;
+ stas_start_times[0] = 0x10000000;
+ stas_start_times[1] = 0x20000000;
+ stas_start_times[2] = 0x30000000;
+ stas_end_times[0] = 0x40000000;
+ stas_end_times[1] = 0x50000000;
+ stas_end_times[2] = 0x60000000;
+ stas_daks[0].key[0] = 0x11110000;
+ stas_daks[0].key[1] = 0x00001101;
+ stas_daks[0].key[2] = 0x01010101;
+ stas_daks[0].key[3] = 0x11111111;
+ stas_daks[1].key[0] = 0x22220000;
+ stas_daks[1].key[1] = 0x22001101;
+ stas_daks[1].key[2] = 0x02020202;
+ stas_daks[1].key[3] = 0x11112222;
+ stas_daks[2].key[0] = 0x33333333;
+ stas_daks[2].key[1] = 0x33001101;
+ stas_daks[2].key[2] = 0x01033301;
+ stas_daks[2].key[3] = 0x03030303;
+ strcpy (stas_dpws[0].dpw, "SPiDCOM - SPC300 - 1");
+ strcpy (stas_dpws[1].dpw, "SPiDCOM - SPC300 - 2");
+ strcpy (stas_dpws[2].dpw, "SPiDCOM - SPC300 - 3");
+
+ stas_actions[0] = 0x00;
+ stas_actions[1] = 0x00;
+ stas_actions[2] = 0x00;
+
+ bitstream_access (&bitstream, &numStas, 8);
+ for(i = 0; i < numStas; i++)
+ {
+ bitstream_access (&bitstream, &stas_macs[i], 48);
+ bitstream_access (&bitstream, &stas_teis[i], 8);
+ bitstream_access (&bitstream, &stas_authorizations[i], 8);
+ bitstream_access (&bitstream, &stas_output_levels[i], 8);
+ bitstream_access (&bitstream, &stas_start_times[i], 32);
+ bitstream_access (&bitstream, &stas_end_times[i], 32);
+ for (j = 0; j < 4; j++)
+ bitstream_access (&bitstream, &stas_daks[i].key[j], 32);
+ bitstream_write_buf(&bitstream, (u8 *) stas_dpws[i].dpw,
+ CP_DPW_MAX_SIZE);
+ bitstream_access (&bitstream, &stas_actions[i], 8);
+ }
+
+ bitstream_finalise (&bitstream);
+
+ cp_eoc_cco_action_vs__stopped__vs_cco_set_wl_req (&ctx, mme);
+
+ for(i = 0; i < numStas; i++)
+ {
+ cp_sta_t *sta = cp_sta_mgr_sta_get_from_mac(&ctx, stas_macs[i]);
+ cp_tei_t tei = cp_sta_get_tei(sta);
+
+ test_fail_unless(tei == stas_teis[i]);
+ test_fail_unless(sta->multi_sta.allowed == stas_authorizations[i]);
+ test_fail_unless(sta->multi_sta.output_level ==
+ stas_output_levels[i]);
+ test_fail_unless(sta->multi_sta.start_time == stas_start_times[i]);
+ test_fail_unless(sta->multi_sta.end_time == stas_end_times[i]);
+ for (j = 0; j < 4; j++)
+ test_fail_unless(sta->multi_sta.dak.key[j] ==
+ stas_daks[i].key[j]);
+ for (j = 0; j < CP_DPW_MAX_SIZE; j++)
+ test_fail_unless(((cp_sta_private_t *)sta)->dpw.dpw[j]
+ == stas_dpws[i].dpw[j]);
+ test_fail_unless(sta->multi_sta.action == stas_actions[i]);
+ test_fail_unless (ctx.cco_action.wl_complete == 1);
+ slab_release (sta);
+ }
+ /* Remove the stations. It is only in sta_mgr list. */
+ for(i = 0; i < numStas; i++)
+ {
+ cp_sta_t *sta = cp_sta_mgr_sta_get_from_mac(&ctx, stas_macs[i]);
+ slab_release (sta);
+ slab_release (sta);
+ }
+ }
+ test_end;
+
+ test_begin (test, "Receiving and processing VS_EOC_CCO_SET_WL_REQ "
+ "unassociated stas")
+ {
+ cp_t ctx;
+ mac_config_t mac_config;
+ sar_t sar;
+ uint cl;
+
+ cp_mme_rx_t my_mme;
+ cp_mme_rx_t *mme = &my_mme;
+
+ cp_net_t *net;
+
+ ctx.cl = (cl_t *) &cl;
+ ctx.mac_store = mac_store_init ();
+
+ sar.mac_store = ctx.mac_store;
+ ctx.sar = &sar;
+ ctx.mac_config = &mac_config;
+ cp_eoc_sta_mgr_init (&ctx);
+ cp_beacon_init (&ctx);
+ lib_rnd_init (&ctx.rnd, 1234);
+
+ net = cp_sta_mgr_add_avln (&ctx, 1, 1);
+ cp_sta_mgr_set_our_avln (&ctx, net);
+ memset (&ctx.beacon, 0, sizeof (cp_beacon_t));
+
+ bitstream_t bitstream;
+ uint numStas;
+ cp_tei_t stas_teis[3];
+ mac_t stas_macs[3];
+ u8 stas_authorizations[3];
+ u8 stas_output_levels[3];
+ u32 stas_start_times[3];
+ u32 stas_end_times[3];
+ cp_key_t stas_daks[3];
+ cp_dpw_t stas_dpws[3];
+ memset (stas_dpws, 0, 3 * sizeof (cp_dpw_t));
+ u8 stas_actions[3];
+ u8 buffer[1024];
+
+ uint i,j;
+
+ cp_msg_init (&ctx);
+ cp_cl_interf_init (&ctx);
+
+ /* Third case is to set authorizations for stations which
+ * have tried to associate before. Such stations are registerd,
+ * do not have teis assigned and are not allowed in the white list
+ * (their authorizations "allowed" fields are set to "false" by
+ * default) */
+
+ mme->mmtype = VS_EOC_CCO_SET_WL_REQ;
+ cp_secu_protocol_run_new (&mme->prun, 0, &ctx.rnd);
+ bitstream_init (&my_mme.bitstream, buffer, sizeof(buffer),
+ BITSTREAM_READ);
+
+ /* Build the MME. */
+ bitstream_init (&bitstream, buffer, sizeof(buffer), BITSTREAM_WRITE);
+
+ numStas = 3;
+ stas_macs[0] = 0x444444444444ull;
+ stas_macs[1] = 0x555555555555ull;
+ stas_macs[2] = 0x666666666666ull;
+ stas_teis[0] = 204;
+ stas_teis[1] = 205;
+ stas_teis[2] = 206;
+ stas_authorizations[0] = false;
+ stas_authorizations[1] = true;
+ stas_authorizations[2] = false;
+ stas_output_levels[0] = 0x01;
+ stas_output_levels[1] = 0x02;
+ stas_output_levels[2] = 0x03;
+ stas_start_times[0] = 0x10000000;
+ stas_start_times[1] = 0x20000000;
+ stas_start_times[2] = 0x30000000;
+ stas_end_times[0] = 0x40000000;
+ stas_end_times[1] = 0x50000000;
+ stas_end_times[2] = 0x60000000;
+ stas_daks[0].key[0] = 0x11110000;
+ stas_daks[0].key[1] = 0x00001101;
+ stas_daks[0].key[2] = 0x01010101;
+ stas_daks[0].key[3] = 0x11111111;
+ stas_daks[1].key[0] = 0x22220000;
+ stas_daks[1].key[1] = 0x22001101;
+ stas_daks[1].key[2] = 0x02020202;
+ stas_daks[1].key[3] = 0x11112222;
+ stas_daks[2].key[0] = 0x33333333;
+ stas_daks[2].key[1] = 0x33001101;
+ stas_daks[2].key[2] = 0x01033301;
+ stas_daks[2].key[3] = 0x03030303;
+ strcpy (stas_dpws[0].dpw, "SPiDCOM - SPC300 - 1");
+ strcpy (stas_dpws[1].dpw, "SPiDCOM - SPC300 - 2");
+ strcpy (stas_dpws[2].dpw, "SPiDCOM - SPC300 - 3");
+ stas_actions[0] = 0x00;
+ stas_actions[1] = 0x00;
+ stas_actions[2] = 0x00;
+
+ cp_sta_t *sta = cp_sta_mgr_sta_add (&ctx, net, MAC_TEI_UNASSOCIATED,
+ stas_macs[0]);
+ dbg_assert (sta);
+ slab_release (sta);
+ sta = cp_sta_mgr_sta_add (&ctx, net, MAC_TEI_UNASSOCIATED,
+ stas_macs[1]);
+ dbg_assert (sta);
+ slab_release (sta);
+ sta = cp_sta_mgr_sta_add (&ctx, net, MAC_TEI_UNASSOCIATED,
+ stas_macs[2]);
+ dbg_assert (sta);
+ slab_release (sta);
+ bitstream_access (&bitstream, &numStas, 8);
+ for(i = 0; i < numStas; i++)
+ {
+ bitstream_access (&bitstream, &stas_macs[i], 48);
+ bitstream_access (&bitstream, &stas_teis[i], 8);
+ bitstream_access (&bitstream, &stas_authorizations[i], 8);
+ bitstream_access (&bitstream, &stas_output_levels[i], 8);
+ bitstream_access (&bitstream, &stas_start_times[i], 32);
+ bitstream_access (&bitstream, &stas_end_times[i], 32);
+ for (j = 0; j < 4; j++)
+ {
+ bitstream_access (&bitstream, &stas_daks[i].key[j], 32);
+ }
+ bitstream_write_buf(&bitstream, (u8 *) stas_dpws[i].dpw,
+ CP_DPW_MAX_SIZE);
+ bitstream_access (&bitstream, &stas_actions[i], 8);
+ }
+
+ bitstream_finalise (&bitstream);
+
+ slab_cache_init (&ctx.fsm.event_bare_cache, "event_bare",
+ sizeof (cp_fsm_event_t), NULL);
+ cp_eoc_cco_action_vs__stopped__vs_cco_set_wl_req (&ctx, mme);
+
+ for(i = 0; i < numStas; i++)
+ {
+ sta = cp_sta_mgr_sta_get_from_mac(&ctx, stas_macs[i]);
+ cp_tei_t tei = cp_sta_get_tei(sta);
+
+ test_fail_unless(tei == stas_teis[i]);
+ test_fail_unless(sta->multi_sta.allowed == stas_authorizations[i]);
+ test_fail_unless(sta->multi_sta.output_level ==
+ stas_output_levels[i]);
+ test_fail_unless(sta->multi_sta.start_time == stas_start_times[i]);
+ test_fail_unless(sta->multi_sta.end_time == stas_end_times[i]);
+ for (j = 0; j < 4; j++)
+ test_fail_unless(sta->multi_sta.dak.key[j] ==
+ stas_daks[i].key[j]);
+ for (j = 0; j < CP_DPW_MAX_SIZE; j++)
+ test_fail_unless(((cp_sta_private_t *)sta)->dpw.dpw[j]
+ == stas_dpws[i].dpw[j]);
+ test_fail_unless(sta->multi_sta.action == stas_actions[i]);
+ test_fail_unless (ctx.cco_action.wl_complete == 1);
+ slab_release (sta);
+ }
+ /* Remove the stations. It is only in sta_mgr list. */
+ for(i = 0; i < numStas; i++)
+ {
+ cp_sta_t *sta = cp_sta_mgr_sta_get_from_mac(&ctx, stas_macs[i]);
+ slab_release (sta);
+ slab_release (sta);
+ }
+ }
+ test_end;
+
+ test_begin (test, "Receiving and processing VS_EOC_CCO_SET_WL_REQ"
+ " add new stations and change authorisation")
+ {
+ cp_t ctx;
+ mac_config_t mac_config;
+ sar_t sar;
+ uint cl;
+ cp_mme_rx_t my_mme;
+ cp_mme_rx_t *mme = &my_mme;
+ cp_net_t *net;
+
+ ctx.cl = (cl_t *) &cl;
+ ctx.mac_store = mac_store_init ();
+ sar.mac_store = ctx.mac_store;
+ ctx.sar = &sar;
+ ctx.mac_config = &mac_config;
+ cp_eoc_sta_mgr_init (&ctx);
+ cp_beacon_init (&ctx);
+ lib_rnd_init (&ctx.rnd, 1234);
+
+ net = cp_sta_mgr_add_avln (&ctx, 1, 1);
+ cp_sta_mgr_set_our_avln (&ctx, net);
+ memset (&ctx.beacon, 0, sizeof (cp_beacon_t));
+
+ bitstream_t bitstream;
+ uint numStas;
+ cp_tei_t stas_teis[2];
+ mac_t stas_macs[2];
+ u8 stas_authorizations[2];
+ u8 stas_output_levels[2];
+ u32 stas_start_times[2];
+ u32 stas_end_times[2];
+ cp_key_t stas_daks[2];
+ cp_dpw_t stas_dpws[2];
+ memset (stas_dpws, 0, 2 * sizeof (cp_dpw_t));
+ u8 stas_actions[2];
+ u8 buffer[1024];
+
+ uint i,j;
+
+ cp_msg_init (&ctx);
+ cp_cl_interf_init (&ctx);
+
+ /* First case is to set authorizations for stations which are not
+ registered until now */
+ mme->mmtype = VS_EOC_CCO_SET_WL_REQ;
+ cp_secu_protocol_run_new (&mme->prun, 0, &ctx.rnd);
+ bitstream_init (&my_mme.bitstream, buffer, sizeof(buffer),
+ BITSTREAM_READ);
+
+ /* Build the MME. */
+ bitstream_init (&bitstream, buffer, sizeof(buffer), BITSTREAM_WRITE);
+
+ numStas = 2;
+ stas_macs[0] = 0x777777777777ull;
+ stas_macs[1] = 0x888888888888ull;
+ stas_teis[0] = 207;
+ stas_teis[1] = 208;
+ stas_authorizations[0] = true;
+ stas_authorizations[1] = false;
+ stas_output_levels[0] = 0x78;
+ stas_output_levels[1] = 0x79;
+ stas_start_times[0] = 0x10000000;
+ stas_start_times[1] = 0x20000000;
+ stas_end_times[0] = 0x40000000;
+ stas_end_times[1] = 0x50000000;
+ stas_daks[0].key[0] = 0x11110000;
+ stas_daks[0].key[1] = 0x00001101;
+ stas_daks[0].key[2] = 0x01010101;
+ stas_daks[0].key[3] = 0x11111111;
+ stas_daks[1].key[0] = 0x22220000;
+ stas_daks[1].key[1] = 0x22001101;
+ stas_daks[1].key[2] = 0x02020202;
+ stas_daks[1].key[3] = 0x11112222;
+ strcpy (stas_dpws[0].dpw, "SPiDCOM - SPC300 - 1");
+ strcpy (stas_dpws[1].dpw, "SPiDCOM - SPC300 - 2");
+ stas_actions[0] = 0x00;
+ stas_actions[1] = 0x00;
+
+ bitstream_access (&bitstream, &numStas, 8);
+ for(i = 0; i < numStas; i++)
+ {
+ bitstream_access (&bitstream, &stas_macs[i], 48);
+ bitstream_access (&bitstream, &stas_teis[i], 8);
+ bitstream_access (&bitstream, &stas_authorizations[i], 8);
+ bitstream_access (&bitstream, &stas_output_levels[i], 8);
+ bitstream_access (&bitstream, &stas_start_times[i], 32);
+ bitstream_access (&bitstream, &stas_end_times[i], 32);
+ for (j = 0; j < 4; j++)
+ {
+ bitstream_access (&bitstream, &stas_daks[i].key[j], 32);
+ }
+ bitstream_write_buf(&bitstream, (u8 *) stas_dpws[i].dpw,
+ CP_DPW_MAX_SIZE);
+ bitstream_access (&bitstream, &stas_actions[i], 8);
+ }
+
+ bitstream_finalise (&bitstream);
+
+ slab_cache_init (&ctx.fsm.event_bare_cache, "event_bare",
+ sizeof (cp_fsm_event_t), NULL);
+ cp_eoc_cco_action_vs__stopped__vs_cco_set_wl_req (&ctx, mme);
+
+ for(i = 0; i < numStas; i++)
+ {
+ cp_sta_t *sta = cp_sta_mgr_sta_get_from_mac(&ctx, stas_macs[i]);
+ dbg_assert (sta);
+ cp_tei_t tei = cp_sta_get_tei(sta);
+
+ test_fail_unless(tei == stas_teis[i]);
+ test_fail_unless(sta->multi_sta.allowed == stas_authorizations[i]);
+ test_fail_unless(sta->multi_sta.output_level ==
+ stas_output_levels[i]);
+ test_fail_unless(sta->multi_sta.start_time == stas_start_times[i]);
+ test_fail_unless(sta->multi_sta.end_time == stas_end_times[i]);
+ for (j = 0; j < 4; j++)
+ test_fail_unless(sta->multi_sta.dak.key[j] ==
+ stas_daks[i].key[j]);
+ for (j = 0; j < CP_DPW_MAX_SIZE; j++)
+ test_fail_unless(((cp_sta_private_t *)sta)->dpw.dpw[j]
+ == stas_dpws[i].dpw[j]);
+ test_fail_unless(sta->multi_sta.action == stas_actions[i]);
+ test_fail_unless (ctx.cco_action.wl_complete == 1);
+ slab_release (sta);
+ }
+
+ /*station 207 sends assoc_req, and is successfully associated*/
+ uint req_type = CP_MSG_CC_ASSOC_REQ_TYPE_NEW;
+ u64 nid = 1;
+ uint cco_cap = 2;
+ uint pco_cap = true;
+ uint num_stas;
+ uint num_associated_stas;
+
+ mme->peer.mac = 0x777777777777ull;
+ mme->peer.tei = 207;
+ mme->mmtype = CC_ASSOC_REQ;
+
+ bitstream_init (&bitstream, buffer + 19, 10, BITSTREAM_WRITE);
+ bitstream_access (&bitstream, &req_type, 8);
+ bitstream_access (&bitstream, &nid, 56);
+ bitstream_access (&bitstream, &cco_cap, 8);
+ bitstream_access (&bitstream, &pco_cap, 8);
+ bitstream_finalise (&bitstream);
+
+ /* Initialise the MME Rx object. */
+ mme->p_mme = buffer;
+ mme->length = 60;
+ bitstream_init (&mme->bitstream, buffer + 19, 60, BITSTREAM_READ);
+ num_stas = net->num_stas;
+ num_associated_stas = net->num_associated_stas;
+
+ cp_eoc_cco_action_event_dispatch (&ctx, mme);
+
+ cp_sta_t *sta = cp_sta_mgr_sta_get_from_mac(&ctx, mme->peer.mac);
+
+ test_fail_unless(sta);
+ test_fail_unless (sta->fsm.state ==
+ CP_EOC_MULTI_STA_FSM_STATE_associated);
+ test_fail_unless (net->num_stas == num_stas + 1);
+ test_fail_unless (net->num_associated_stas == num_associated_stas + 1);
+ slab_release (sta);
+ slab_release (sta);
+ /*station 208 sends assoc_req, it is not associated, this must increase
+ number of stations in the network*/
+ mme->peer.mac = 0x888888888888ull;
+ mme->peer.tei = 208;
+ mme->mmtype = CC_ASSOC_REQ;
+
+ bitstream_init (&bitstream, buffer + 19, 10, BITSTREAM_WRITE);
+ bitstream_access (&bitstream, &req_type, 8);
+ bitstream_access (&bitstream, &nid, 56);
+ bitstream_access (&bitstream, &cco_cap, 8);
+ bitstream_access (&bitstream, &pco_cap, 8);
+ bitstream_finalise (&bitstream);
+
+ /* Initialise the MME Rx object. */
+ mme->p_mme = buffer;
+ mme->length = 60;
+ bitstream_init (&mme->bitstream, buffer + 19, 60, BITSTREAM_READ);
+ num_stas = net->num_stas;
+ num_associated_stas = net->num_associated_stas;
+
+ cp_eoc_cco_action_event_dispatch (&ctx, mme);
+
+ sta = cp_sta_mgr_sta_get_from_mac(&ctx, mme->peer.mac);
+
+ test_fail_unless(sta);
+ test_fail_unless (sta->fsm.state ==
+ CP_EOC_MULTI_STA_FSM_STATE_unassociated);
+ test_fail_unless (net->num_stas == num_stas + 1);
+ test_fail_unless (net->num_associated_stas == num_associated_stas);
+ slab_release (sta);
+ slab_release (sta);
+
+ /*set station 207 authorisation to false*/
+ mme->mmtype = VS_EOC_CCO_SET_WL_REQ;
+ cp_secu_protocol_run_new (&mme->prun, 0, &ctx.rnd);
+ bitstream_init (&my_mme.bitstream, buffer, sizeof(buffer),
+ BITSTREAM_READ);
+
+ /* Build the MME. */
+ bitstream_init (&bitstream, buffer, sizeof(buffer), BITSTREAM_WRITE);
+
+ numStas = 1;
+ stas_macs[0] = 0x777777777777ull;
+ stas_teis[0] = 207;
+ stas_authorizations[0] = false;
+ stas_output_levels[0] = 0x78;
+ stas_start_times[0] = 0x10000000;
+ stas_end_times[0] = 0x40000000;
+ stas_daks[0].key[0] = 0x11110000;
+ stas_daks[0].key[1] = 0x00001101;
+ stas_daks[0].key[2] = 0x01010101;
+ stas_daks[0].key[3] = 0x11111111;
+ stas_actions[0] = 0x00;
+
+ bitstream_access (&bitstream, &numStas, 8);
+
+ bitstream_access (&bitstream, &stas_macs[0], 48);
+ bitstream_access (&bitstream, &stas_teis[0], 8);
+ bitstream_access (&bitstream, &stas_authorizations[0], 8);
+ bitstream_access (&bitstream, &stas_output_levels[0], 8);
+ bitstream_access (&bitstream, &stas_start_times[0], 32);
+ bitstream_access (&bitstream, &stas_end_times[0], 32);
+ for (j = 0; j < 4; j++)
+ bitstream_access (&bitstream, &stas_daks[0].key[j], 32);
+ bitstream_access (&bitstream, &stas_actions[0], 8);
+
+ bitstream_finalise (&bitstream);
+
+ slab_cache_init (&ctx.fsm.event_bare_cache, "event_bare",
+ sizeof (cp_fsm_event_t), NULL);
+ cp_eoc_cco_action_vs__stopped__vs_cco_set_wl_req (&ctx, mme);
+
+ sta = cp_sta_mgr_sta_get_from_mac(&ctx, stas_macs[0]);
+ cp_tei_t tei = cp_sta_get_tei(sta);
+
+ test_fail_unless(tei == stas_teis[0]);
+ test_fail_unless(sta->multi_sta.allowed == stas_authorizations[0]);
+ test_fail_unless(sta->multi_sta.output_level == stas_output_levels[0]);
+ test_fail_unless(sta->multi_sta.start_time == stas_start_times[0]);
+ test_fail_unless(sta->multi_sta.end_time == stas_end_times[0]);
+ for (j = 0; j < 4; j++)
+ {
+ test_fail_unless(sta->multi_sta.dak.key[j] == stas_daks[0].key[j]);
+ }
+ test_fail_unless(sta->multi_sta.action == stas_actions[0]);
+ test_fail_unless (ctx.cco_action.wl_complete == 1);
+ slab_release (sta);
+ /* now station 207 sends assoc_req before it is actually removed by
+ * cp_cco_action_garbage, this must not change number of stations in
+ * network. */
+
+ mme->peer.mac = 0x777777777777ull;
+ mme->peer.tei = 207;
+ mme->mmtype = CC_ASSOC_REQ;
+
+ bitstream_init (&bitstream, buffer + 19, 10, BITSTREAM_WRITE);
+ bitstream_access (&bitstream, &req_type, 8);
+ bitstream_access (&bitstream, &nid, 56);
+ bitstream_access (&bitstream, &cco_cap, 8);
+ bitstream_access (&bitstream, &pco_cap, 8);
+ bitstream_finalise (&bitstream);
+
+ /* Initialise the MME Rx object. */
+ mme->p_mme = buffer;
+ mme->length = 60;
+ bitstream_init (&mme->bitstream, buffer + 19, 60, BITSTREAM_READ);
+ num_stas = net->num_stas;
+ num_associated_stas = net->num_associated_stas;
+
+ cp_eoc_cco_action_event_dispatch (&ctx, mme);
+
+ sta = cp_sta_mgr_sta_get_from_mac(&ctx, mme->peer.mac);
+
+ test_fail_unless(sta);
+ test_fail_unless (sta->fsm.state ==
+ CP_EOC_MULTI_STA_FSM_STATE_unassociated);
+ test_fail_unless (net->num_stas == num_stas);
+ test_fail_unless (net->num_associated_stas == num_associated_stas);
+ slab_release (sta);
+ slab_release (sta);
+ /* The cp_cco_action_garbage removes station 207 and changes
+ * the number of associated stations in the network. */
+ num_stas = net->num_stas;
+ num_associated_stas = net->num_associated_stas;
+ ctx.sta_mgr.sta_own_data.is_cco = true;
+ cp_cco_action_garbage (&ctx);
+ test_fail_unless (net->num_stas == num_stas);
+ test_fail_unless (net->num_associated_stas == num_associated_stas - 1);
+
+ /* now station 207 sends assoc_req after it is actually removed,
+ * this must not change number of stations. */
+ mme->peer.mac = 0x777777777777ull;
+ mme->peer.tei = 207;
+ mme->mmtype = CC_ASSOC_REQ;
+
+ bitstream_init (&bitstream, buffer + 19, 10, BITSTREAM_WRITE);
+ bitstream_access (&bitstream, &req_type, 8);
+ bitstream_access (&bitstream, &nid, 56);
+ bitstream_access (&bitstream, &cco_cap, 8);
+ bitstream_access (&bitstream, &pco_cap, 8);
+ bitstream_finalise (&bitstream);
+
+ /* Initialise the MME Rx object. */
+ mme->p_mme = buffer;
+ mme->length = 60;
+ bitstream_init (&mme->bitstream, buffer + 19, 60, BITSTREAM_READ);
+ num_stas = net->num_stas;
+ num_associated_stas = net->num_associated_stas;
+
+ cp_eoc_cco_action_event_dispatch (&ctx, mme);
+
+ sta = cp_sta_mgr_sta_get_from_mac(&ctx, mme->peer.mac);
+
+ test_fail_unless(sta);
+ test_fail_unless (sta->fsm.state ==
+ CP_EOC_MULTI_STA_FSM_STATE_unassociated);
+ test_fail_unless (net->num_stas == num_stas);
+ test_fail_unless (net->num_associated_stas == num_associated_stas);
+ slab_release (sta);
+ slab_release (sta);
+ /* Remove all mfs. */
+ cp_eoc_cco_action_test_release_mac_store (&ctx);
+ /* Release and remove stations. */
+ for (sta = cp_net_sta_get_first (&ctx, net, CP_NET_STA_UNASSOC); sta;)
+ {
+ cp_sta_t *sta1 = sta;
+ sta = cp_net_sta_get_next_status (&ctx, net, sta,
+ CP_NET_STA_UNASSOC);
+ uint tei = cp_sta_get_tei (sta1);
+ if (tei)
+ {
+ sta_t *station = mac_store_sta_get (ctx.mac_store, tei);
+ if (station)
+ {
+ blk_release (station);
+ sar_sta_remove (ctx.sar, tei);
+ }
+ }
+ slab_release (sta1);
+ }
+ }
+ test_end;
+
+ test_begin (test, "Receiving and processing VS_EOC_CCO_GET_WL_REQ")
+ {
+ cp_t ctx;
+ mac_config_t mac_config;
+ sar_t sar;
+ uint cl;
+
+ cp_mme_rx_t my_mme;
+ cp_mme_rx_t *mme = &my_mme;
+
+ cp_net_t *net;
+ cp_sta_t *sta;
+ ctx.cl = (cl_t *) &cl;
+ ctx.mac_store = mac_store_init ();
+
+ sar.mac_store = ctx.mac_store;
+ ctx.sar = &sar;
+ ctx.mac_config = &mac_config;
+ cp_eoc_sta_mgr_init (&ctx);
+ cp_beacon_init (&ctx);
+ lib_rnd_init (&ctx.rnd, 1234);
+
+ net = cp_sta_mgr_add_avln (&ctx, 1, 1);
+ cp_sta_mgr_set_our_avln (&ctx, net);
+ memset (&ctx.beacon, 0, sizeof (cp_beacon_t));
+
+ bitstream_t bitstream;
+ uint numStas;
+ cp_tei_t stas_teis[3];
+ mac_t stas_macs[3];
+ u8 stas_authorizations[3];
+ u8 stas_output_levels[3];
+ u32 stas_start_times[3];
+ u32 stas_end_times[3];
+ u64 stas_daks[3];
+ u8 stas_actions[3];
+ u8 buffer[1024];
+
+ uint i;
+
+ cp_msg_init (&ctx);
+ cp_cl_interf_init (&ctx);
+
+ mme->mmtype = VS_EOC_CCO_GET_WL_REQ;
+ cp_secu_protocol_run_new (&mme->prun, 0, &ctx.rnd);
+ bitstream_init (&my_mme.bitstream, buffer, sizeof(buffer),
+ BITSTREAM_READ);
+
+ /* Build the MME. */
+ bitstream_init (&bitstream, buffer, sizeof(buffer), BITSTREAM_WRITE);
+
+ numStas = 3;
+ stas_macs[0] = 0x444444444444ull;
+ stas_macs[1] = 0x555555555555ull;
+ stas_macs[2] = 0x666666666666ull;
+ stas_teis[0] = 204;
+ stas_teis[1] = 205;
+ stas_teis[2] = 206;
+ stas_authorizations[0] = false;
+ stas_authorizations[1] = true;
+ stas_authorizations[2] = false;
+ stas_output_levels[0] = 0x01;
+ stas_output_levels[1] = 0x02;
+ stas_output_levels[2] = 0x03;
+ stas_start_times[0] = 0x10000000;
+ stas_start_times[1] = 0x20000000;
+ stas_start_times[2] = 0x30000000;
+ stas_end_times[0] = 0x40000000;
+ stas_end_times[1] = 0x50000000;
+ stas_end_times[2] = 0x60000000;
+ stas_daks[0] = 0x1111000000001111ull;
+ stas_daks[1] = 0x2222000000002222ull;
+ stas_daks[2] = 0x3333000000003333ull;
+ stas_actions[0] = 0x00;
+ stas_actions[1] = 0x00;
+ stas_actions[2] = 0x00;
+
+ for(i = 0; i < numStas; i++)
+ {
+ sta = cp_sta_mgr_sta_add (&ctx, net, MAC_TEI_UNASSOCIATED,
+ stas_macs[i]);
+ dbg_assert (sta);
+ slab_release (sta);
+ }
+ bitstream_access (&bitstream, &numStas, 8);
+ for(i = 0; i < numStas; i++)
+ {
+ bitstream_access (&bitstream, &stas_macs[i], 48);
+ bitstream_access (&bitstream, &stas_teis[i], 8);
+ bitstream_access (&bitstream, &stas_authorizations[i], 8);
+ bitstream_access (&bitstream, &stas_output_levels[i], 8);
+ bitstream_access (&bitstream, &stas_start_times[i], 32);
+ bitstream_access (&bitstream, &stas_end_times[i], 32);
+ bitstream_access (&bitstream, &stas_daks[i], 64);
+ bitstream_access (&bitstream, &stas_actions[i], 8);
+ }
+
+ bitstream_finalise (&bitstream);
+
+ cp_eoc_cco_action_vs__stopped__vs_cco_get_wl_req (&ctx, mme);
+ /* Release the stations. */
+ for (sta = cp_net_sta_get_first (&ctx, net, CP_NET_STA_UNASSOC); sta;)
+ {
+ cp_sta_t *sta1 = sta;
+ sta = cp_net_sta_get_next_status (&ctx, net, sta,
+ CP_NET_STA_UNASSOC);
+ slab_release (sta1);
+ }
+ }
+ test_end;
+
+ test_begin (test, "Receiving and processing VS_EOC_GET_TOPO_REQ new")
+ {
+ cp_t ctx;
+ mac_config_t mac_config;
+ sar_t sar;
+ uint cl;
+ cp_mme_rx_t my_mme;
+ cp_mme_rx_t *mme = &my_mme;
+ cp_net_t *net;
+
+ ctx.cl = (cl_t *) &cl;
+ ctx.mac_store = mac_store_init ();
+ sar.mac_store = ctx.mac_store;
+ ctx.sar = &sar;
+ ctx.mac_config = &mac_config;
+ cp_eoc_sta_mgr_init (&ctx);
+ cp_beacon_init (&ctx);
+ lib_rnd_init (&ctx.rnd, 1234);
+
+ net = cp_sta_mgr_add_avln (&ctx, 1, 1);
+ cp_sta_mgr_set_our_avln (&ctx, net);
+ memset (&ctx.beacon, 0, sizeof (cp_beacon_t));
+
+ bitstream_t bitstream;
+ u8 buffer[1024];
+
+ cp_msg_init (&ctx);
+ cp_cl_interf_init (&ctx);
+
+ /* First case is to set authorizations for stations
+ * which are not registered until now. */
+ mme->mmtype = VS_EOC_GET_TOPO_REQ;
+ cp_secu_protocol_run_new (&mme->prun, 0, &ctx.rnd);
+ bitstream_init (&my_mme.bitstream, buffer, sizeof(buffer),
+ BITSTREAM_READ);
+
+ /* Build the MME. */
+ bitstream_init (&bitstream, buffer, sizeof(buffer), BITSTREAM_WRITE);
+
+ bitstream_finalise (&bitstream);
+
+ cp_eoc_cco_action_vs_eoc__cco__vs_eoc_get_topo_req (&ctx, mme);
+ }
+ test_end;
+
+
+ test_begin (test, "Receiving and processing VS_EOC_SET_PORTS_REQ")
+ {
+ cp_t ctx;
+ mac_config_t mac_config;
+ sar_t sar;
+ uint cl;
+ cp_mme_rx_t my_mme;
+ cp_mme_rx_t *mme = &my_mme;
+ cp_net_t *net;
+
+ ctx.cl = (cl_t *) &cl;
+ ctx.mac_store = mac_store_init ();
+ sar.mac_store = ctx.mac_store;
+ ctx.sar = &sar;
+ ctx.mac_config = &mac_config;
+ cp_eoc_sta_mgr_init (&ctx);
+ cp_beacon_init (&ctx);
+ lib_rnd_init (&ctx.rnd, 1234);
+
+ net = cp_sta_mgr_add_avln (&ctx, 1, 1);
+ cp_sta_mgr_set_our_avln (&ctx, net);
+ memset (&ctx.beacon, 0, sizeof (cp_beacon_t));
+
+ bitstream_t bitstream;
+ uint numStas;
+ mac_t stas_macs[3];
+ cp_tei_t stas_teis[3];
+ bool stas_ports_ed[3][PORT_NB];
+ u8 stas_ports_service[3][PORT_NB];
+ u8 buffer[1024];
+ uint i, j;
+
+ cp_msg_init (&ctx);
+ cp_cl_interf_init (&ctx);
+
+ mme->mmtype = VS_EOC_SET_PORTS_REQ;
+ cp_secu_protocol_run_new (&mme->prun, 0, &ctx.rnd);
+ bitstream_init (&my_mme.bitstream, buffer, sizeof(buffer),
+ BITSTREAM_READ);
+
+ /* Build the MME. */
+ bitstream_init (&bitstream, buffer, sizeof(buffer), BITSTREAM_WRITE);
+
+ numStas = 3;
+ stas_macs[0] = 0x111111111111ull;
+ stas_macs[1] = 0x222222222222ull;
+ stas_macs[2] = 0x333333333333ull;
+ stas_teis[0] = 0x1E;
+ stas_teis[1] = 0x1F;
+ stas_teis[2] = 0x20;
+ stas_ports_ed[0][0] = true;
+ stas_ports_ed[0][1] = false;
+ stas_ports_ed[0][2] = true;
+ stas_ports_ed[0][3] = false;
+ stas_ports_ed[0][4] = true;
+ stas_ports_service[0][0] = 0x01;
+ stas_ports_service[0][1] = 0x02;
+ stas_ports_service[0][2] = 0x03;
+ stas_ports_service[0][3] = 0x0D;
+ stas_ports_service[0][4] = 0x0E;
+ stas_ports_ed[1][0] = false;
+ stas_ports_ed[1][1] = false;
+ stas_ports_ed[1][2] = false;
+ stas_ports_ed[1][3] = false;
+ stas_ports_ed[1][4] = false;
+ stas_ports_service[1][0] = 0x04;
+ stas_ports_service[1][1] = 0x05;
+ stas_ports_service[1][2] = 0x06;
+ stas_ports_service[1][3] = 0x0E;
+ stas_ports_service[1][4] = 0x0F;
+ stas_ports_ed[2][0] = true;
+ stas_ports_ed[2][1] = true;
+ stas_ports_ed[2][2] = true;
+ stas_ports_ed[2][3] = true;
+ stas_ports_ed[2][4] = true;
+ stas_ports_service[2][0] = 0x07;
+ stas_ports_service[2][1] = 0x08;
+ stas_ports_service[2][2] = 0x09;
+ stas_ports_service[2][3] = 0x0F;
+ stas_ports_service[2][4] = 0x0E;
+
+ for(i = 0; i < numStas; i++)
+ {
+ cp_sta_t * sta = cp_sta_mgr_sta_add (&ctx, net, stas_teis[i],
+ stas_macs[i]);
+ dbg_assert (sta);
+ slab_release (sta);
+ }
+
+ bitstream_access (&bitstream, &numStas, 8);
+ for(i = 0; i < numStas; i++)
+ {
+ bitstream_access (&bitstream, &stas_macs[i], 48);
+ for(j = 0; j < PORT_NB; j++)
+ {
+ bitstream_access (&bitstream, &stas_ports_ed[i][j], 8);
+ bitstream_access (&bitstream, &stas_ports_service[i][j], 8);
+ }
+ }
+
+ bitstream_finalise (&bitstream);
+
+ cp_eoc_cco_action_vs_eoc__cco__vs_eoc_set_ports_req (&ctx, mme);
+
+ for(i = 0; i < numStas; i++)
+ {
+ cp_sta_t *sta = cp_sta_mgr_sta_get_from_mac(&ctx, stas_macs[i]);
+ cp_tei_t tei = cp_sta_get_tei(sta);
+
+ test_fail_unless(tei == stas_teis[i]);
+ for(j = 0; j < PORT_NB; j++)
+ {
+ test_fail_unless(sta->multi_sta.ports.port[j].enabled ==
+ stas_ports_ed[i][j]);
+ test_fail_unless(
+ sta->multi_sta.ports.port[j].index_of_service ==
+ stas_ports_service[i][j]);
+ }
+ slab_release (sta);
+ }
+ for(i = 0; i < numStas; i++)
+ {
+ cp_sta_t *sta = cp_sta_mgr_sta_get_from_mac(&ctx, stas_macs[i]);
+ dbg_assert (sta);
+ cp_sta_mgr_sta_remove (&ctx, sta);
+ slab_release (sta);
+ }
+ }
+ test_end;
+
+
+ test_begin (test, "Receiving and processing VS_EOC_GET_PORTS_REQ")
+ {
+
+ uint test_fail_nb_temp;
+ uint numStas = 10;
+ uint numStasUnassoc = 5;
+ test_sta_action_t ctx;
+
+ cp_t *cp = &ctx.cp;
+
+ u8 first_mac_index_number = 2;
+
+ const cp_nid_t our_nid = 0x111111111111ull;
+
+ cp_tei_t tei = 10;
+
+
+ /* init globals */
+ scenario_globals_t globals = {
+ .cp = &ctx.cp,
+ };
+
+ cp_mme_peer_t peer = CP_MME_PEER (0x112233445577ull, 5);
+ cp_mme_tx_t mme_to_send;
+ globals.mme = &mme_to_send;
+
+ test_sta_action_init (&ctx);
+
+ sar_t sar;
+ sar.mac_store = globals.cp->mac_store;
+ globals.cp->sar = &sar;
+
+ /* Create our net/AVLN. */
+ test_sta_action_create_our_net (&ctx, our_nid, tei);
+ cp_net_t *net = cp_sta_mgr_get_our_avln (cp);
+
+ test_fail_nb_temp = test->fail_nb;
+ SET_STATIONS(numStas);
+ SET_UNASSOC_STATIONS(numStas, numStasUnassoc);
+
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (vs_eoc__cco__vs_eoc_cco_get_ports_req, .peer = peer),
+ SCENARIO_EVENT (cp_msg_vs_eoc_cco_get_ports_req_receive, .ok = true,
+ .first_mac_index_nb = first_mac_index_number),
+ SCENARIO_EVENT (cp_msg_vs_eoc_cco_get_ports_cnf_send, .peer = peer,
+ .result = CP_MSG_VS_EOC_CCO_GET_PORTS_REQ_RESULT_SUCCESS,
+ .numStas = numStas,
+ .stas_macs = stas_macs,
+ .stas_port_ed = stas_ports_ed,
+ .stas_port_service = stas_ports_service,
+ .first_mac_index_nb = first_mac_index_number),
+ SCENARIO_END
+ };
+ scenario_run (test, entries, &globals);
+
+ if(test_fail_nb_temp == test->fail_nb)
+ {
+ DBG_PRINT ("\"vs_eoc__cco__vs_eoc_cco_get_ports_req\" "
+ "successfully tested");
+ }
+ else
+ {
+ DBG_PRINT ("\"vs_eoc__cco__vs_eoc_cco_get_ports_req\" test failed");
+ test_fail_nb_temp = test->fail_nb;
+ }
+
+ cp_sta_t *sta;
+ /* Release the stations. First unassociated. */
+ for (sta = cp_net_sta_get_first (cp, net, CP_NET_STA_UNASSOC); sta;)
+ {
+ cp_sta_t *sta1 = sta;
+ sta = cp_net_sta_get_next_status (cp, net, sta,
+ CP_NET_STA_UNASSOC);
+ cp_sta_mgr_sta_remove (cp, sta1);
+ }
+ /* Associated. */
+ for (sta = cp_net_sta_get_first (cp, net, CP_NET_STA_ASSOC); sta;)
+ {
+ cp_sta_t *sta1 = sta;
+ sta = cp_net_sta_get_next_status (cp, net, sta,
+ CP_NET_STA_ASSOC);
+ cp_sta_mgr_sta_remove (cp, sta1);
+ }
+ test_sta_action_uninit (&ctx);
+ }
+ test_end;
+
+
+ test_begin (test, "Receiving and processing VS_EOC_GET_PORTS_REQ, "
+ "data from stations not correct")
+ {
+
+ uint test_fail_nb_temp;
+ uint numStas = 0;
+ test_sta_action_t ctx;
+ cp_t *cp = &ctx.cp;
+
+ u8 first_mac_index_number = 2;
+
+ const cp_nid_t our_nid = 0x111111111111ull;
+ cp_net_t *net;
+ net = cp_sta_mgr_add_avln (cp, 1, our_nid);
+
+ /* init globals */
+ scenario_globals_t globals = {
+ .cp = &ctx.cp,
+ };
+
+ cp_mme_peer_t peer = CP_MME_PEER (0x112233445577ull, 5);
+ cp_mme_tx_t mme_to_send;
+ globals.mme = &mme_to_send;
+
+ test_sta_action_init (&ctx);
+
+ sar_t sar;
+ sar.mac_store = globals.cp->mac_store;
+ globals.cp->sar = &sar;
+
+ test_fail_nb_temp = test->fail_nb;
+ SET_STATIONS(numStas);
+
+
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (vs_eoc__cco__vs_eoc_cco_get_ports_req, .peer = peer),
+ SCENARIO_EVENT (cp_msg_vs_eoc_cco_get_ports_req_receive, .ok = false,
+ .first_mac_index_nb = first_mac_index_number),
+ SCENARIO_EVENT (cp_msg_vs_eoc_cco_get_ports_cnf_send, .peer = peer,
+ .result = CP_MSG_VS_EOC_CCO_GET_PORTS_REQ_RESULT_FAILURE,
+ .numStas = numStas,
+ .stas_macs = stas_macs,
+ .stas_port_ed = stas_ports_ed,
+ .stas_port_service = stas_ports_service,
+ .first_mac_index_nb = first_mac_index_number),
+ SCENARIO_END
+ };
+ scenario_run (test, entries, &globals);
+
+ if(test_fail_nb_temp == test->fail_nb)
+ {
+ DBG_PRINT ("\"vs_eoc__cco__vs_eoc_cco_get_ports_req, data from "
+ "stations not correct\" successfully tested");
+ }
+ else
+ {
+ DBG_PRINT ("\"vs_eoc__cco__vs_eoc_cco_get_ports_req, "
+ "data from stations not correct\" test failed");
+ test_fail_nb_temp = test->fail_nb;
+ }
+
+ test_sta_action_uninit (&ctx);
+ }
+ test_end;
+
+ test_begin (test, "Receiving and processing VS_EOC_CCO_SET_SERVICES_REQ")
+ {
+ u8 i, j;
+ cp_t ctx;
+ cp_eoc_cco_services_init (&ctx);
+ mac_config_t mac_config;
+ cp_mme_rx_t my_mme;
+ cp_mme_rx_t *mme = &my_mme;
+ sar_t sar;
+ uint cl;
+ ctx.cl = (cl_t *) &cl;
+
+ u8 command;
+ u8 services_number;
+ u8 service_indexes[MAX_NUMBER_OF_SERVICES];
+ u8 classifier_rules[MAX_NUMBER_OF_SERVICES];
+ u16 classifier_values[MAX_NUMBER_OF_SERVICES];
+ u8 acses[MAX_NUMBER_OF_SERVICES];
+ u8 parameters_numbers[MAX_NUMBER_OF_SERVICES];
+ u16 parameters_lists[MAX_NUMBER_OF_SERVICES][SERVICE_PARAMETERS_NB];
+
+ u8 command2;
+ u8 services_number2;
+ u8 service_indexes2[MAX_NUMBER_OF_SERVICES];
+ u8 classifier_rules2[MAX_NUMBER_OF_SERVICES];
+ u16 classifier_values2[MAX_NUMBER_OF_SERVICES];
+ u8 acses2[MAX_NUMBER_OF_SERVICES];
+ u8 parameters_numbers2[MAX_NUMBER_OF_SERVICES];
+ u16 parameters_lists2[MAX_NUMBER_OF_SERVICES][SERVICE_PARAMETERS_NB];
+
+ u8 command3;
+ u8 services_number3;
+ u8 service_indexes3[MAX_NUMBER_OF_SERVICES];
+ u8 classifier_rules3[MAX_NUMBER_OF_SERVICES];
+ u16 classifier_values3[MAX_NUMBER_OF_SERVICES];
+ u8 acses3[MAX_NUMBER_OF_SERVICES];
+ u8 parameters_numbers3[MAX_NUMBER_OF_SERVICES];
+ u16 parameters_lists3[MAX_NUMBER_OF_SERVICES][SERVICE_PARAMETERS_NB];
+
+ u8 buffer[1024];
+
+ ctx.mac_store = mac_store_init ();
+ sar.mac_store = ctx.mac_store;
+ ctx.sar = &sar;
+ ctx.mac_config = &mac_config;
+ cp_eoc_sta_mgr_init (&ctx);
+ cp_beacon_init (&ctx);
+ lib_rnd_init (&ctx.rnd, 1234);
+
+ memset (&ctx.beacon, 0, sizeof (cp_beacon_t));
+
+ bitstream_t bitstream;
+
+ cp_msg_init (&ctx);
+ cp_cl_interf_init (&ctx);
+ cp_eoc_cco_services_init (&ctx);
+
+ mme->mmtype = VS_EOC_CCO_SET_SERVICES_REQ;
+ cp_secu_protocol_run_new (&mme->prun, 0, &ctx.rnd);
+ bitstream_init (&my_mme.bitstream, buffer, sizeof(buffer),
+ BITSTREAM_READ);
+
+ /* Build the MME. */
+ bitstream_init (&bitstream, buffer, sizeof(buffer), BITSTREAM_WRITE);
+
+ /* set services */
+ command = 0x00;
+ services_number = 3;
+ service_indexes[0] = 5;
+ service_indexes[1] = 67;
+ service_indexes[2] = 12;
+ classifier_rules[0] = 0;
+ classifier_rules[1] = 2;
+ classifier_rules[2] = 3;
+ classifier_values[0] = 45;
+ classifier_values[1] = 111;
+ classifier_values[2] = 89;
+ acses[0] = 0;
+ acses[1] = 1;
+ acses[2] = 1;
+ parameters_numbers[0] = 7;
+ parameters_numbers[1] = 7;
+ parameters_numbers[2] = 7;
+ parameters_lists[0][0] = 256;
+ parameters_lists[0][1] = 128;
+ parameters_lists[0][2] = 64;
+ parameters_lists[0][3] = 32;
+ parameters_lists[0][4] = 100;
+ parameters_lists[0][5] = 10;
+ parameters_lists[0][6] = 32;
+ parameters_lists[1][0] = 512;
+ parameters_lists[1][1] = 256;
+ parameters_lists[1][2] = 64;
+ parameters_lists[1][3] = 16;
+ parameters_lists[1][4] = 16;
+ parameters_lists[1][5] = 16;
+ parameters_lists[1][6] = 16;
+ parameters_lists[2][0] = 256;
+ parameters_lists[2][1] = 32;
+ parameters_lists[2][2] = 64;
+ parameters_lists[2][3] = 32;
+ parameters_lists[2][4] = 256;
+ parameters_lists[2][5] = 16;
+ parameters_lists[2][6] = 32;
+
+ bitstream_access (&bitstream, &command, 8);
+ bitstream_access (&bitstream, &services_number, 8);
+ for(i = 0; i < services_number; i++)
+ {
+ bitstream_access (&bitstream, &service_indexes[i], 8);
+ bitstream_access (&bitstream, &classifier_rules[i], 8);
+ bitstream_access (&bitstream, &classifier_values[i], 16);
+ bitstream_access (&bitstream, &acses[i], 8);
+ bitstream_access (&bitstream, &parameters_numbers[i], 8);
+ for(j = 0; j < parameters_numbers[i]; j++)
+ bitstream_access (&bitstream, &parameters_lists[i][j], 16);
+ }
+
+ bitstream_finalise (&bitstream);
+
+ cp_eoc_cco_action_vs_eoc__cco__vs_eoc_cco_set_services_req (&ctx, mme);
+
+ test_fail_unless (ctx.schedule.services.service_nb == services_number);
+
+ for(i = 0; i < services_number; i++)
+ {
+ cp_eoc_cco_bw_service_t *srv;
+ srv = cp_eoc_cco_bw_service_find (&ctx, service_indexes[i]);
+ test_fail_if (!srv);
+
+ test_fail_if (srv->latency != parameters_lists[i][0]);
+ test_fail_if (srv->jitter != parameters_lists[i][1]);
+ test_fail_if (srv->dload_pir != parameters_lists[i][2]);
+ test_fail_if (srv->uload_pir != parameters_lists[i][3]);
+ test_fail_if (srv->dload_cir != parameters_lists[i][4]);
+ test_fail_if (srv->uload_cir != parameters_lists[i][5]);
+ test_fail_if (srv->qos_prio != parameters_lists[i][6]);
+
+ }
+
+ /* remove services */
+ bitstream_init (&my_mme.bitstream, buffer, sizeof(buffer),
+ BITSTREAM_READ);
+
+ /* Build the MME. */
+ bitstream_init (&bitstream, buffer, sizeof(buffer), BITSTREAM_WRITE);
+
+ command2 = 0x01;
+ services_number2 = 1;
+ service_indexes2[0] = 5;
+ classifier_rules2[0] = 0;
+ classifier_values2[0] = 45;
+ acses2[0] = 0;
+ parameters_numbers2[0] = 7;
+ parameters_lists2[0][0] = 256;
+ parameters_lists2[0][1] = 32;
+ parameters_lists2[0][2] = 64;
+ parameters_lists2[0][3] = 16;
+ parameters_lists2[0][4] = 128;
+ parameters_lists2[0][5] = 32;
+ parameters_lists2[0][6] = 512;
+
+
+ bitstream_access (&bitstream, &command2, 8);
+ bitstream_access (&bitstream, &services_number2, 8);
+ for(i = 0; i < services_number2; i++)
+ {
+ bitstream_access (&bitstream, &service_indexes2[i], 8);
+ bitstream_access (&bitstream, &classifier_rules2[i], 8);
+ bitstream_access (&bitstream, &classifier_values2[i], 16);
+ bitstream_access (&bitstream, &acses2[i], 8);
+ bitstream_access (&bitstream, &parameters_numbers2[i], 8);
+ for(j = 0; j < parameters_numbers2[i]; j++)
+ bitstream_access (&bitstream, &parameters_lists2[i][j], 16);
+ }
+
+ bitstream_finalise (&bitstream);
+
+ cp_eoc_cco_action_vs_eoc__cco__vs_eoc_cco_set_services_req (&ctx, mme);
+
+ test_fail_unless (ctx.schedule.services.service_nb ==
+ services_number - services_number2);
+
+ for(i = 0; i < services_number2; i++)
+ {
+ cp_eoc_cco_bw_service_t *srv;
+ srv = cp_eoc_cco_bw_service_find (&ctx, service_indexes2[i]);
+ test_fail_if (srv);
+ }
+
+ /* remove all services */
+ bitstream_init (&my_mme.bitstream, buffer, sizeof(buffer),
+ BITSTREAM_READ);
+
+ /* Build the MME. */
+ bitstream_init (&bitstream, buffer, sizeof(buffer), BITSTREAM_WRITE);
+
+ command3 = 0x02;
+ services_number3 = 1;
+ service_indexes3[0] = 5;
+ classifier_rules3[0] = 0;
+ classifier_values3[0] = 45;
+ acses3[0] = 0;
+ parameters_numbers3[0] = 7;
+ parameters_lists3[0][0] = 256;
+ parameters_lists3[0][1] = 32;
+ parameters_lists3[0][2] = 512;
+ parameters_lists3[0][3] = 32;
+ parameters_lists3[0][4] = 128;
+ parameters_lists3[0][5] = 16;
+ parameters_lists3[0][6] = 32;
+
+ bitstream_access (&bitstream, &command3, 8);
+ bitstream_access (&bitstream, &services_number3, 8);
+ for(i = 0; i < services_number3; i++)
+ {
+ bitstream_access (&bitstream, &service_indexes3[i], 8);
+ bitstream_access (&bitstream, &classifier_rules3[i], 8);
+ bitstream_access (&bitstream, &classifier_values3[i], 16);
+ bitstream_access (&bitstream, &acses3[i], 8);
+ bitstream_access (&bitstream, &parameters_numbers3[i], 8);
+ for(j = 0; j < parameters_numbers3[i]; j++)
+ bitstream_access (&bitstream, &parameters_lists3[i][j], 16);
+ }
+
+ bitstream_finalise (&bitstream);
+ cp_eoc_cco_action_vs_eoc__cco__vs_eoc_cco_set_services_req (&ctx, mme);
+ test_fail_unless (ctx.schedule.services.service_nb == 0);
+ cp_eoc_cco_services_uninit (&ctx);
+ }
+ test_end;
+
+
+ test_begin (test, "Receiving and processing VS_EOC_GET_SERVICES_REQ")
+ {
+
+ uint test_fail_nb_temp;
+ test_sta_action_t ctx;
+ cp_t *cp = &ctx.cp;
+
+ u8 i = 0;
+ u8 j = 0;
+ const cp_nid_t our_nid = 0x111111111111ull;
+ cp_sta_mgr_add_avln (cp, 1, our_nid);
+
+ /* init globals */
+ scenario_globals_t globals = {
+ .cp = &ctx.cp,
+ };
+
+ cp_mme_peer_t peer = CP_MME_PEER (0x112233445577ull, 5);
+ cp_mme_tx_t mme_to_send;
+ globals.mme = &mme_to_send;
+
+ test_sta_action_init (&ctx);
+ cp_eoc_cco_services_init (cp);
+
+ sar_t sar;
+ sar.mac_store = globals.cp->mac_store;
+ globals.cp->sar = &sar;
+
+ test_fail_nb_temp = test->fail_nb;
+
+ u8 first_service_index_number;
+ u8 services_number;
+ u8 service_indexes[MAX_NUMBER_OF_SERVICES];
+ u8 classifier_rules[MAX_NUMBER_OF_SERVICES];
+ u16 classifier_values[MAX_NUMBER_OF_SERVICES];
+ u8 acses[MAX_NUMBER_OF_SERVICES];
+ u8 parameters_numbers[MAX_NUMBER_OF_SERVICES];
+ u16 parameters_lists[MAX_NUMBER_OF_SERVICES][SERVICE_PARAMETERS_NB];
+
+ first_service_index_number = 0;
+ services_number = 3;
+ service_indexes[0] = 0;
+ service_indexes[1] = 1;
+ service_indexes[2] = 2;
+ classifier_rules[0] = 0;
+ classifier_rules[1] = 2;
+ classifier_rules[2] = 3;
+ classifier_values[0] = 45;
+ classifier_values[1] = 111;
+ classifier_values[2] = 89;
+ acses[0] = 0;
+ acses[1] = 1;
+ acses[2] = 1;
+ parameters_numbers[0] = 7;
+ parameters_numbers[1] = 7;
+ parameters_numbers[2] = 7;
+ parameters_lists[0][0] = 32;
+ parameters_lists[0][1] = 16;
+ parameters_lists[0][2] = 64;
+ parameters_lists[0][3] = 32;
+ parameters_lists[0][4] = 100;
+ parameters_lists[0][5] = 10;
+ parameters_lists[0][6] = 10;
+ parameters_lists[1][0] = 512;
+ parameters_lists[1][1] = 256;
+ parameters_lists[1][2] = 64;
+ parameters_lists[1][3] = 64;
+ parameters_lists[1][4] = 64;
+ parameters_lists[1][5] = 64;
+ parameters_lists[1][6] = 64;
+ parameters_lists[2][0] = 256;
+ parameters_lists[2][1] = 32;
+ parameters_lists[2][2] = 32;
+ parameters_lists[2][3] = 32;
+ parameters_lists[2][4] = 32;
+ parameters_lists[2][5] = 32;
+ parameters_lists[2][6] = 32;
+
+ for(i = 0; i < services_number; i++)
+ {
+ u16 parameters_list_tmp[SERVICE_PARAMETERS_NB];
+ cp_eoc_cco_bw_service_t *srv = NULL;
+
+ srv = cp_eoc_cco_bw_service_alloc (cp);
+ srv->service_index = service_indexes[i];
+ srv->classsif_rule = classifier_rules[i];
+ srv->classif_value = classifier_values[i];
+ srv->acs = acses[i];
+
+ for(j = 0; j < parameters_numbers[i]; j++)
+ parameters_list_tmp[j] = parameters_lists[i][j];
+
+ for(j = parameters_numbers[i]; j < SERVICE_PARAMETERS_NB; j++)
+ parameters_list_tmp[j] = 0x00;
+
+ srv->latency = parameters_list_tmp[0];
+ srv->jitter = parameters_list_tmp[1];
+ srv->dload_pir = parameters_list_tmp[2];
+ srv->uload_pir = parameters_list_tmp[3];
+ srv->dload_cir = parameters_list_tmp[4];
+ srv->uload_cir = parameters_list_tmp[5];
+ srv->qos_prio = parameters_list_tmp[6];
+
+
+ cp_eoc_cco_bw_service_add (cp, srv);
+ }
+
+
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (vs_eoc__cco__vs_eoc_cco_get_services_req, .peer = peer),
+ SCENARIO_EVENT (cp_msg_vs_eoc_cco_get_services_req_receive, .ok = true,
+ .first_service_index_nb = first_service_index_number),
+ SCENARIO_EVENT (cp_msg_vs_eoc_cco_get_services_cnf_send, .peer = peer,
+ .result = CP_MSG_VS_EOC_CCO_GET_SERVICES_REQ_RESULT_SUCCESS,
+ .services_number = services_number,
+ .service_indexes = service_indexes,
+ .classifier_rules = classifier_rules,
+ .classifier_values = classifier_values,
+ .acses = acses,
+ .parameters_numbers = parameters_numbers,
+ .parameters_lists = parameters_lists,
+ .first_service_index_nb = first_service_index_number),
+ SCENARIO_END
+ };
+ scenario_run (test, entries, &globals);
+
+ if(test_fail_nb_temp == test->fail_nb)
+ {
+ DBG_PRINT ("\"vs_eoc__cco__vs_eoc_cco_get_services_req\" "
+ "successfully tested");
+ }
+ else
+ {
+ DBG_PRINT ("\"vs_eoc__cco__vs_eoc_cco_get_services_req\" "
+ "test failed");
+ test_fail_nb_temp = test->fail_nb;
+ }
+
+ cp_eoc_cco_services_uninit (cp);
+ test_sta_action_uninit (&ctx);
+ }
+ test_end;
+
+
+ test_begin (test, "Receiving and processing VS_EOC_GET_INFO_REQ")
+ {
+
+ cp_t ctx;
+ mac_config_t mac_config;
+ cp_mme_rx_t my_mme;
+ cp_mme_rx_t *mme = &my_mme;
+ cp_net_t *net;
+ sar_t sar;
+ cl_t cl;
+ pbproc_t pbproc;
+ memset (&pbproc.stats, 0, sizeof (pbproc.stats));
+
+ u8 buffer[1024];
+
+ ctx.mac_store = mac_store_init ();
+ sar.mac_store = ctx.mac_store;
+ ctx.sar = &sar;
+ ctx.cl = &cl;
+ ctx.mac_config = &mac_config;
+ ctx.pbproc = &pbproc;
+ cp_eoc_sta_mgr_init (&ctx);
+ cp_beacon_init (&ctx);
+ lib_rnd_init (&ctx.rnd, 1234);
+
+ memset (&ctx.beacon, 0, sizeof (cp_beacon_t));
+ memset (ctx.cl, 0, sizeof (cl_t));
+ memset (ctx.sar, 0, sizeof (sar_t));
+
+ bitstream_t bitstream;
+
+ cp_msg_init (&ctx);
+ cp_cl_interf_init (&ctx);
+
+ mme->mmtype = VS_EOC_GET_INFO_REQ;
+ cp_secu_protocol_run_new (&mme->prun, 0, &ctx.rnd);
+
+ u8 control = 1;
+ u8 internal_eoc_index = 1;
+
+ /* set our avln */
+ net = cp_sta_mgr_add_avln (&ctx, 1, 1);
+ cp_sta_mgr_set_our_avln (&ctx, net);
+
+ cp_msg_vs_eoc_get_info_req_result_t status =
+ CP_MSG_VS_EOC_GET_INFO_REQ_RESULT_SUCCESS;
+ uint tei = ctx.sta_mgr.sta_own_data.tei = 1;
+ uint attenuation = 0; /* N.A. */
+ uint snr = 0;
+ uint phy_uplink_speed =
+ cp_sta_action_get_average_ble (&ctx, tei, true, false);
+ uint phy_downlink_speed =
+ cp_sta_action_get_average_ble (&ctx, tei, false, false);
+ uint output_power = 0; /* N.A. */
+ uint tx_success_counter = ctx.pbproc->stats.tx_data -
+ ctx.pbproc->stats.tx_data_cancel -
+ ctx.pbproc->stats.tx_data_wack_noack;
+ uint tx_crc_error_counter = 0; /* N.A. */
+ uint tx_other_error_counter = ctx.pbproc->stats.tx_data_cancel +
+ ctx.pbproc->stats.tx_data_wack_noack;
+ uint rx_success_counter = ctx.pbproc->stats.rx_data -
+ ctx.pbproc->stats.rx_data_error;
+ uint rx_crc_error_counter =ctx.pbproc->stats.rx_crc_error;
+ uint rx_other_error_counter = ctx.pbproc->stats.rx_data_error;
+
+ uint status_read = 0;
+ uint tei_read = 0;
+ uint attenuation_read = 0;
+ uint snr_read = 0;
+ uint phy_uplink_speed_read = 0;
+ uint phy_downlink_speed_read = 0;
+ uint output_power_read = 0;
+ uint tx_success_counter_read = 0;
+ uint tx_crc_error_counter_read = 0;
+ uint tx_other_error_counter_read = 0;
+ uint rx_success_counter_read = 0;
+ uint rx_crc_error_counter_read = 0;
+ uint rx_other_error_counter_read = 0;
+
+ /* Write the statistics values down into the Cesar structures */
+
+ bitstream_init (&my_mme.bitstream, buffer, sizeof(buffer),
+ BITSTREAM_READ);
+
+ /* Build the MME. */
+ bitstream_init (&bitstream, buffer, sizeof(buffer), BITSTREAM_WRITE);
+
+ bitstream_access (&bitstream, &control, 8);
+ bitstream_access (&bitstream, &internal_eoc_index, 8);
+
+ bitstream_finalise (&bitstream);
+
+ cp_eoc_cco_action_vs_eoc__cco__vs_eoc_get_info_req(&ctx, mme);
+
+ FILE *fp;
+ if((fp = fopen("get_info.txt", "r")) != NULL)
+ {
+
+ fscanf(fp,"%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u", &status_read,
+ &tei_read, &attenuation_read, &snr_read,
+ &phy_uplink_speed_read, &phy_downlink_speed_read,
+ &output_power_read, &tx_success_counter_read,
+ &tx_crc_error_counter_read, &tx_other_error_counter_read,
+ &rx_success_counter_read, &rx_crc_error_counter_read,
+ &rx_other_error_counter_read);
+ }
+ else
+ DBG_PRINT ("test, Receiving and processing VS_EOC_GET_INFO_REQ, "
+ "Error opening get_info.txt");
+
+ fclose(fp);
+ remove("get_info.txt");
+
+ test_fail_unless(status_read == status);
+ test_fail_unless(tei_read == tei);
+ test_fail_unless(attenuation_read == attenuation);
+ test_fail_unless(snr_read == snr);
+ test_fail_unless(phy_uplink_speed_read == phy_uplink_speed);
+ test_fail_unless(phy_downlink_speed_read == phy_downlink_speed);
+ test_fail_unless(output_power_read == output_power);
+ test_fail_unless(tx_success_counter_read == tx_success_counter);
+ test_fail_unless(tx_crc_error_counter_read == tx_crc_error_counter);
+ test_fail_unless(tx_other_error_counter_read == tx_other_error_counter);
+ test_fail_unless(rx_success_counter_read == rx_success_counter);
+ test_fail_unless(rx_crc_error_counter_read == rx_crc_error_counter);
+ test_fail_unless(rx_other_error_counter_read == rx_other_error_counter);
+ }
+ test_end;
+
+ test_begin (test, "Receiving and processing VS_EOC_DIAGNOSTIC_INFO_REQ")
+ {
+
+ cp_t ctx;
+ mac_config_t mac_config;
+ cp_mme_rx_t my_mme;
+ cp_mme_rx_t *mme = &my_mme;
+ sar_t sar;
+ cl_t cl;
+
+ u8 buffer[1024];
+
+ ctx.mac_store = mac_store_init ();
+ sar.mac_store = ctx.mac_store;
+ ctx.sar = &sar;
+ ctx.cl = &cl;
+ ctx.mac_config = &mac_config;
+ cp_eoc_sta_mgr_init (&ctx);
+ cp_beacon_init (&ctx);
+ lib_rnd_init (&ctx.rnd, 1234);
+
+ memset (&ctx.beacon, 0, sizeof (cp_beacon_t));
+ memset (ctx.cl, 0, sizeof (cl_t));
+ memset (ctx.sar, 0, sizeof (sar_t));
+
+ bitstream_t bitstream;
+
+ cp_msg_init (&ctx);
+ cp_cl_interf_init (&ctx);
+
+ mme->mmtype = VS_EOC_DIAGNOSTIC_INFO_REQ;
+ cp_secu_protocol_run_new (&mme->prun, 0, &ctx.rnd);
+
+ u8 control = 1;
+ u8 internal_eoc_index = 1;
+
+ const cp_nid_t our_nid = 0x111111111111ull;
+ cp_net_t *net;
+ net = cp_sta_mgr_add_avln (&ctx, 1, our_nid);
+ cp_sta_mgr_set_our_avln (&ctx, net);
+
+ cp_msg_vs_eoc_diagnostic_info_req_result_t status =
+ CP_MSG_VS_EOC_DIAGNOSTIC_INFO_REQ_RESULT_SUCCESS;
+ uint assoc_stat = 2; /* N.A */
+ unsigned long long int nid = ctx.sta_mgr.our_avln->nid;
+ uint num_slots = 1;
+ unsigned long long int he_mac_address = ctx.sta_mgr.sta_own_data.mac_addr;
+ uint est_avg_phy_rate = 0;
+ uint num_good_assoc_auth = ctx.sta_mgr.sta_own_data.public.num_good_assoc_auth;
+ uint num_bad_could_not_assoc =
+ ctx.sta_mgr.sta_own_data.public.num_bad_could_not_assoc;
+ uint num_bad_assoc_failure =
+ ctx.sta_mgr.sta_own_data.public.num_bad_assoc_failure;
+ uint num_bad_could_not_auth =
+ ctx.sta_mgr.sta_own_data.public.num_bad_could_not_auth;
+ uint num_leave = ctx.sta_mgr.sta_own_data.public.num_leave;
+
+ uint status_read = 0;
+ uint assoc_stat_read = 30;
+ unsigned long long int nid_read = 0;
+ uint num_slots_read = 30;
+ unsigned long long int he_mac_address_read = 0;
+ uint est_avg_phy_rate_read = 0;
+ uint num_good_assoc_auth_read = 0;
+ uint num_bad_could_not_assoc_read = 0;
+ uint num_bad_assoc_failure_read = 0;
+ uint num_bad_could_not_auth_read = 0;
+ uint num_leave_read = 0;
+
+ /* Write the statistics values down into the Cesar structures. */
+
+ bitstream_init (&my_mme.bitstream, buffer, sizeof(buffer),
+ BITSTREAM_READ);
+
+ /* Build the MME. */
+ bitstream_init (&bitstream, buffer, sizeof(buffer), BITSTREAM_WRITE);
+
+ bitstream_access (&bitstream, &control, 8);
+ bitstream_access (&bitstream, &internal_eoc_index, 8);
+
+ bitstream_finalise (&bitstream);
+
+ cp_eoc_cco_action_vs_eoc__cco__vs_eoc_diagnostic_info_req(&ctx, mme);
+
+ FILE *fp;
+ if((fp = fopen("get_info.txt", "r")) != NULL)
+ {
+ fscanf(fp,"%u,%u,%llu,%u,%llu,%u,%u,%u,%u,%u,%u", &status_read,
+ &assoc_stat_read, &nid_read, &num_slots_read,
+ &he_mac_address_read, &est_avg_phy_rate_read,
+ &num_good_assoc_auth_read, &num_bad_could_not_assoc_read,
+ &num_bad_assoc_failure_read, &num_bad_could_not_auth_read,
+ &num_leave_read);
+ }
+ else
+ DBG_PRINT ("test, Receiving and processing VS_EOC_GET_INFO_REQ, "
+ "Error opening get_info.txt");
+
+ fclose(fp);
+ remove("get_info.txt");
+
+ test_fail_unless(status_read == status);
+ test_fail_unless(assoc_stat_read == assoc_stat);
+ test_fail_unless(nid_read == nid);
+ test_fail_unless(num_slots_read == num_slots);
+ test_fail_unless(he_mac_address_read == he_mac_address);
+ test_fail_unless(est_avg_phy_rate_read == est_avg_phy_rate);
+ test_fail_unless(num_good_assoc_auth_read == num_good_assoc_auth);
+ test_fail_unless(num_bad_could_not_assoc_read ==
+ num_bad_could_not_assoc);
+ test_fail_unless(num_bad_assoc_failure_read == num_bad_assoc_failure);
+ test_fail_unless(num_bad_could_not_auth_read == num_bad_could_not_auth);
+ test_fail_unless(num_leave_read == num_leave);
+ }
+ test_end;
+
+ test_begin (test, "Receiving and processing "
+ "VS_EOC_GET_REAL_TIME_STATISTICS_REQ")
+ {
+
+ cp_t ctx;
+ mac_config_t mac_config;
+ cp_mme_rx_t my_mme;
+ cp_mme_rx_t *mme = &my_mme;
+ sar_t sar;
+ cl_t cl;
+ pbproc_t pbproc;
+
+ u8 buffer[1024];
+
+ ctx.mac_store = mac_store_init ();
+ sar.mac_store = ctx.mac_store;
+ ctx.sar = &sar;
+ ctx.cl = &cl;
+ ctx.mac_config = &mac_config;
+ ctx.pbproc = &pbproc;
+
+ cp_eoc_sta_mgr_init (&ctx);
+ cp_beacon_init (&ctx);
+ lib_rnd_init (&ctx.rnd, 1234);
+
+ memset (&ctx.beacon, 0, sizeof (cp_beacon_t));
+ memset (ctx.cl, 0, sizeof (cl_t));
+ memset (ctx.sar, 0, sizeof (sar_t));
+ memset (ctx.pbproc, 0, sizeof (pbproc_t));
+
+ bitstream_t bitstream;
+
+ cp_msg_init (&ctx);
+ cp_cl_interf_init (&ctx);
+
+ mme->mmtype = VS_EOC_GET_INFO_REQ;
+ cp_secu_protocol_run_new (&mme->prun, 0, &ctx.rnd);
+
+ u8 clear = 0;
+
+ /* Dummy values for the statistics */
+ cp_msg_vs_eoc_get_real_time_statistics_req_result_t status =
+ CP_MSG_VS_EOC_GET_REAL_TIME_STATISTICS_REQ_RESULT_SUCCESS;
+
+ real_time_stats_t rt_stats;
+
+ rt_stats.nb_unicast_packets_rx = 100;
+ rt_stats.nb_unicast_packets_tx = 200;
+ rt_stats.total_nb_bytes_rx = 300;
+ rt_stats.total_nb_bytes_tx = 400;
+ rt_stats.nb_broadcast_packets_rx = 500;
+ rt_stats.nb_broadcast_packets_tx =600;
+ rt_stats.nb_multicast_packets_rx = 700;
+ rt_stats.nb_multicast_packets_tx = 900;
+ rt_stats.nb_packets_rx_crc = 10;
+ rt_stats.nb_packets_rx_short = 20;
+ rt_stats.nb_packets_tx_short = 30;
+ rt_stats.nb_packets_tx_dropped = 40;
+ rt_stats.nb_packets_rx_discarded = 50;
+ rt_stats.avg_pre_fec_bit_error_rate = 0;
+
+#define RT_STATS(a,b) b = rt_stats.a
+
+ RT_STATS (nb_unicast_packets_rx,
+ ctx.pbproc->stats.rx_data);
+ RT_STATS (nb_unicast_packets_tx,
+ ctx.pbproc->stats.tx_data_wack);
+ RT_STATS (total_nb_bytes_rx,
+ ctx.cl->stats.rx_data_bytes);
+ RT_STATS (total_nb_bytes_tx,
+ ctx.cl->stats.tx_data_bytes);
+ RT_STATS (nb_broadcast_packets_rx,
+ ctx.pbproc->stats.rx_data_woack);
+ RT_STATS (nb_broadcast_packets_tx,
+ ctx.pbproc->stats.tx_data_woack);
+ RT_STATS (nb_multicast_packets_rx,
+ ctx.cl->stats.rx_data_multicast);
+ RT_STATS (nb_multicast_packets_tx,
+ ctx.cl->stats.tx_data_multicast);
+ RT_STATS (nb_packets_rx_short,
+ ctx.pbproc->stats.rx_data_empty);
+ RT_STATS (nb_packets_tx_short,
+ ctx.pbproc->stats.tx_data_empty);
+ RT_STATS (nb_packets_tx_dropped,
+ ctx.pbproc->stats.tx_data_cancel);
+ RT_STATS (nb_packets_rx_discarded,
+ ctx.pbproc->stats.rx_data_error);
+ RT_STATS (nb_packets_rx_crc,
+ ctx.sar->stats.rx_pb_crc_error_count);
+
+ uint status_read = 0;
+
+ real_time_stats_t rt_stats_read;
+
+ /* Write the statistics values down into the Cesar structures */
+
+ bitstream_init (&my_mme.bitstream, buffer, sizeof(buffer),
+ BITSTREAM_READ);
+
+ /* Build the MME. */
+ bitstream_init (&bitstream, buffer, sizeof(buffer), BITSTREAM_WRITE);
+ bitstream_access (&bitstream, &clear, 8);
+ bitstream_finalise (&bitstream);
+
+ cp_eoc_sta_action_vs__vs_eoc_get_real_time_statistics_req (&ctx, mme);
+
+ FILE *fp;
+ if((fp = fopen("get_info.txt", "r")) != NULL)
+ {
+
+ fscanf(fp,"%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u",
+ &status_read, &rt_stats_read.nb_unicast_packets_rx,
+ &rt_stats_read.nb_unicast_packets_tx,
+ & rt_stats_read.total_nb_bytes_rx,
+ &rt_stats_read.total_nb_bytes_tx,
+ &rt_stats_read.nb_broadcast_packets_rx,
+ &rt_stats_read.nb_broadcast_packets_tx,
+ &rt_stats_read.nb_multicast_packets_rx,
+ &rt_stats_read.nb_multicast_packets_tx,
+ &rt_stats_read.nb_packets_rx_crc,
+ &rt_stats_read.nb_packets_rx_short,
+ &rt_stats_read.nb_packets_tx_short,
+ &rt_stats_read.nb_packets_tx_dropped,
+ &rt_stats_read.nb_packets_rx_discarded,
+ &rt_stats_read.avg_pre_fec_bit_error_rate);
+ }
+ else
+ {
+ DBG_PRINT ("test, Receiving and processing \
+ VS_EOC_GET_REAL_TIME_STATISTICS_REQ, \
+ Error opening get_info.txt");
+ }
+
+ fclose(fp);
+ remove("get_info.txt");
+
+ test_fail_unless(status_read == status);
+ test_fail_unless(rt_stats_read.nb_unicast_packets_rx ==
+ rt_stats.nb_unicast_packets_rx);
+ test_fail_unless(rt_stats_read.nb_unicast_packets_tx ==
+ rt_stats.nb_unicast_packets_tx);
+ test_fail_unless(rt_stats_read.total_nb_bytes_rx ==
+ rt_stats.total_nb_bytes_rx);
+ test_fail_unless(rt_stats_read.total_nb_bytes_tx ==
+ rt_stats.total_nb_bytes_tx);
+ test_fail_unless(rt_stats_read.nb_broadcast_packets_rx ==
+ rt_stats.nb_broadcast_packets_rx);
+ test_fail_unless(rt_stats_read.nb_broadcast_packets_tx ==
+ rt_stats.nb_broadcast_packets_tx);
+ test_fail_unless(rt_stats_read.nb_multicast_packets_rx ==
+ rt_stats.nb_multicast_packets_rx);
+ test_fail_unless(rt_stats_read.nb_multicast_packets_tx ==
+ rt_stats.nb_multicast_packets_tx);
+ test_fail_unless(rt_stats_read.nb_packets_rx_crc ==
+ rt_stats.nb_packets_rx_crc);
+ test_fail_unless(rt_stats_read.nb_packets_rx_short ==
+ rt_stats.nb_packets_rx_short);
+ test_fail_unless(rt_stats_read.nb_packets_tx_short ==
+ rt_stats.nb_packets_tx_short);
+ test_fail_unless(rt_stats_read.nb_packets_tx_dropped ==
+ rt_stats.nb_packets_tx_dropped);
+ test_fail_unless(rt_stats_read.nb_packets_rx_discarded ==
+ rt_stats.nb_packets_rx_discarded);
+ test_fail_unless(rt_stats_read.avg_pre_fec_bit_error_rate ==
+ rt_stats.avg_pre_fec_bit_error_rate);
+
+ DBG_PRINT ("test, Receiving and processing "
+ "VS_EOC_GET_REAL_TIME_STATISTICS PASSED");
+ }
+ test_end;
+
+
+ test_begin (test, "Receiving and processing CM_NW_STATS_REQ new")
+ {
+ cp_t ctx;
+ mac_config_t mac_config;
+ cl_t cl;
+ sar_t sar;
+ cp_mme_rx_t my_mme;
+ cp_mme_rx_t *mme = &my_mme;
+ cp_net_t *net;
+ cp_sta_t *cp_sta_1;
+ cp_sta_t *cp_sta_2;
+ cp_sta_t *cp_sta_3;
+ bitstream_t bitstream;
+ uint numStas;
+ cp_tei_t stas_teis[3];
+ mac_t stas_macs[3];
+ u8 buffer[1024];
+
+ ctx.cl = &cl;
+ ctx.sar = &sar;
+ ctx.mac_store = mac_store_init ();
+ ctx.mac_config = &mac_config;
+ sar.mac_store = ctx.mac_store;
+ cp_eoc_sta_mgr_init (&ctx);
+ cp_beacon_init (&ctx);
+ lib_rnd_init (&ctx.rnd, 1234);
+ cp_msg_init (&ctx);
+ cp_cl_interf_init (&ctx);
+
+ numStas = 3;
+ stas_macs[0] = 0x111111111111ull;
+ stas_macs[1] = 0x222222222222ull;
+ stas_macs[2] = 0x333333333333ull;
+ stas_teis[0] = 20;
+ stas_teis[1] = 21;
+ stas_teis[2] = 22;
+
+ net = cp_sta_mgr_add_avln (&ctx, 1, 1);
+ cp_sta_1 = cp_sta_mgr_sta_add (&ctx, net, stas_teis[0], stas_macs[0]);
+ dbg_assert (cp_sta_1);
+ slab_release (cp_sta_1);
+ cp_sta_2 = cp_sta_mgr_sta_add (&ctx, net, stas_teis[1], stas_macs[1]);
+ dbg_assert (cp_sta_2);
+ slab_release (cp_sta_2);
+ cp_sta_3 = cp_sta_mgr_sta_add (&ctx, net, stas_teis[2], stas_macs[2]);
+ dbg_assert (cp_sta_3);
+ slab_release (cp_sta_3);
+
+ cp_sta_own_data_set_tei (&ctx, 1);
+ cp_sta_mgr_set_our_avln (&ctx, net);
+
+ cp_sta_set_authenticated (&ctx, cp_sta_1, true);
+ cp_sta_set_authenticated (&ctx, cp_sta_2, false);
+ cp_sta_set_authenticated (&ctx, cp_sta_3, true);
+
+ /* First case is to set authorizations for stations
+ * which are not registered until now. */
+ mme->mmtype = CM_NW_STATS_REQ;
+ cp_secu_protocol_run_new (&mme->prun, 0, &ctx.rnd);
+ bitstream_init (&my_mme.bitstream, buffer, sizeof(buffer),
+ BITSTREAM_READ);
+
+ /* Build the MME. */
+ bitstream_init (&bitstream, buffer, sizeof(buffer), BITSTREAM_WRITE);
+
+ bitstream_access (&bitstream, &numStas, 8);
+
+ bitstream_finalise (&bitstream);
+
+ cp_sta_action_process_cm_nw_stats_req (&ctx, mme);
+ /* Remove the stations from network. */
+ cp_sta_mgr_sta_remove (&ctx, cp_sta_1);
+ cp_sta_mgr_sta_remove (&ctx, cp_sta_2);
+ cp_sta_mgr_sta_remove (&ctx, cp_sta_3);
+ }
+ test_end;
+
+ test_begin (test, "Receiving and processing VS_EOC_CCO_SET_OUT_LEV")
+ {
+ cp_t ctx;
+ mac_config_t mac_config;
+ cl_t cl;
+ sar_t sar;
+ cp_mme_peer_t my_mme;
+ cp_mme_peer_t *mme = &my_mme;
+ cp_net_t *net;
+ cp_sta_t *sta;
+
+ ctx.cl = &cl;
+ ctx.sar = &sar;
+ ctx.mac_store = mac_store_init ();
+ ctx.mac_config = &mac_config;
+ sar.mac_store = ctx.mac_store;
+ cp_eoc_sta_mgr_init (&ctx);
+
+ mme->mac = 2;
+ mme->tei = 5;
+
+ net = cp_sta_mgr_add_avln (&ctx, 1, 1);
+ sta = cp_sta_mgr_sta_add (&ctx, net, mme->tei, mme->mac);
+ dbg_assert (sta);
+ slab_release (sta);
+ cp_sta_mgr_set_our_avln (&ctx, net);
+
+ sta->multi_sta.output_level = 30;
+
+ cp_eoc_cco_action_vs__cco__vs_set_out_lev_ind (&ctx, mme);
+ cp_sta_mgr_sta_remove (&ctx, sta);
+ }
+ test_end;
+}
+
+void
+test_case_sta_assoc_and_auth_procedure_action (test_t test)
+{
+ cp_t ctx;
+ cp_net_t *net;
+ cp_tei_t tei = 200;
+ sar_t sar;
+ uint cl;
+ mac_config_t mac_config;
+ cp_mme_rx_t my_mme;
+ cp_mme_rx_t *mme = &my_mme;
+ cp_sta_t *sta;
+ u8 buffer[1024];
+ uint req_type = CP_MSG_CC_ASSOC_REQ_TYPE_NEW;
+ u64 nid = 1;
+ uint cco_cap = 2;
+ uint pco_cap = true;
+
+ memset (&ctx, 0, sizeof (cp_t));
+ cp_msg_init (&ctx);
+ cp_trace_init (&ctx);
+ ctx.cl = (cl_t *) &cl;
+ ctx.mac_store = mac_store_init ();
+ sar.mac_store = ctx.mac_store;
+ ctx.sar = &sar;
+ ctx.mac_config = &mac_config;
+ ctx.cco_action.wl_accept_all = 0;
+ cp_eoc_sta_mgr_init (&ctx);
+ cp_beacon_init (&ctx);
+ lib_rnd_init (&ctx.rnd, 1234);
+ memset (&ctx.beacon, 0, sizeof (cp_beacon_t));
+
+ net = cp_sta_mgr_add_avln (&ctx, 1, 1);
+ cp_sta_mgr_set_our_avln (&ctx, net);
+ mme->peer.mac = 2;
+ mme->peer.tei = 0;
+ mme->mmtype = CC_ASSOC_REQ;
+
+ test_case_begin (test, "Receiving CC_ASSOC.REQ and CM_GET_KEY.REQ\n");
+
+ test_begin (test, "Receiving a CC_ASSOC.REQ and transfering to multi_sta,"
+ " sta not in the wl\n")
+ {
+ bitstream_t bitstream;
+
+ /* Write the request. */
+ bitstream_init (&bitstream, buffer + 19, 10, BITSTREAM_WRITE);
+ bitstream_access (&bitstream, &req_type, 8);
+ bitstream_access (&bitstream, &nid, 56);
+ bitstream_access (&bitstream, &cco_cap, 8);
+ bitstream_access (&bitstream, &pco_cap, 8);
+ bitstream_finalise (&bitstream);
+
+ /* Initialise the MME Rx object. */
+ mme->p_mme = buffer;
+ mme->length = 60;
+ bitstream_init (&mme->bitstream, buffer + 19, 60, BITSTREAM_READ);
+
+ cp_eoc_cco_action_event_dispatch (&ctx, mme);
+
+ sta = cp_sta_mgr_sta_get_from_mac(&ctx, mme->peer.mac);
+
+ test_fail_unless(sta);
+
+ test_fail_unless (sta->fsm.state ==
+ CP_EOC_MULTI_STA_FSM_STATE_unassociated);
+
+ if(sta->fsm.state == CP_EOC_MULTI_STA_FSM_STATE_unassociated)
+ DBG_PRINT ("success: station state is unassociated "
+ "(sta not in the wl)");
+ slab_release (sta);
+ }
+ test_end;
+
+ test_begin (test, "Receiving a CC_ASSOC.REQ and transfering to multi_sta, "
+ "mac address registered but no tei assigned")
+ {
+ bitstream_t bitstream;
+
+ /* Write the request. */
+ bitstream_init (&bitstream, buffer + 19, 10, BITSTREAM_WRITE);
+ bitstream_access (&bitstream, &req_type, 8);
+ bitstream_access (&bitstream, &nid, 56);
+ bitstream_access (&bitstream, &cco_cap, 8);
+ bitstream_access (&bitstream, &pco_cap, 8);
+ bitstream_finalise (&bitstream);
+
+ /* Initialise the MME Rx object. */
+ mme->p_mme = buffer;
+ mme->length = 60;
+ bitstream_init (&mme->bitstream, buffer + 19, 60, BITSTREAM_READ);
+
+ cp_eoc_cco_action_event_dispatch (&ctx, mme);
+
+ sta = cp_sta_mgr_sta_get_from_mac(&ctx, mme->peer.mac);
+
+ test_fail_unless(sta);
+
+ test_fail_unless (sta->fsm.state ==
+ CP_EOC_MULTI_STA_FSM_STATE_unassociated);
+
+ if(sta->fsm.state == CP_EOC_MULTI_STA_FSM_STATE_unassociated)
+ {
+ DBG_PRINT ("success: station state is unassociated "
+ "(mac address registered but no tei assigned)");
+ }
+ slab_release (sta);
+ }
+ test_end;
+
+ cp_sta_mgr_sta_remove(&ctx, sta);
+ sta = cp_sta_mgr_sta_add (&ctx, net, tei, mme->peer.mac);
+ sta->multi_sta.allowed = false;
+ slab_release (sta);
+
+ test_begin (test, "Receiving a CC_ASSOC.REQ and transfering to multi_sta, "
+ "sta in the wl, not allowed")
+ {
+
+ bitstream_t bitstream;
+
+ /* Write the request. */
+ bitstream_init (&bitstream, buffer + 19, 10, BITSTREAM_WRITE);
+ bitstream_access (&bitstream, &req_type, 8);
+ bitstream_access (&bitstream, &nid, 56);
+ bitstream_access (&bitstream, &cco_cap, 8);
+ bitstream_access (&bitstream, &pco_cap, 8);
+ bitstream_finalise (&bitstream);
+
+ /* Initialise the MME Rx object. */
+ mme->p_mme = buffer;
+ mme->length = 60;
+ bitstream_init (&mme->bitstream, buffer + 19, 60, BITSTREAM_READ);
+ cp_eoc_cco_action_event_dispatch (&ctx, mme);
+ sta = cp_sta_mgr_sta_get_from_mac (&ctx, mme->peer.mac);
+
+ test_fail_unless(sta);
+
+ test_fail_unless (sta->fsm.state ==
+ CP_EOC_MULTI_STA_FSM_STATE_unassociated);
+
+ if(sta->fsm.state == CP_EOC_MULTI_STA_FSM_STATE_unassociated)
+ {
+ DBG_PRINT ("success: station state is unassociated "
+ "(sta in the wl, not allowed )");
+ }
+ slab_release (sta);
+ slab_release (sta);
+ }
+ test_end;
+
+ cp_sta_mgr_sta_remove(&ctx, sta);
+ sta = cp_sta_mgr_sta_add (&ctx, net, tei, mme->peer.mac);
+ sta->multi_sta.allowed = true;
+ slab_release (sta);
+
+ test_begin (test, "Receiving a CC_ASSOC.REQ and transfering to multi_sta, "
+ "sta in the wl")
+ {
+ bitstream_t bitstream;
+
+ /* Write the request. */
+ bitstream_init (&bitstream, buffer + 19, 10, BITSTREAM_WRITE);
+ bitstream_access (&bitstream, &req_type, 8);
+ bitstream_access (&bitstream, &nid, 56);
+ bitstream_access (&bitstream, &cco_cap, 8);
+ bitstream_access (&bitstream, &pco_cap, 8);
+ bitstream_finalise (&bitstream);
+
+ /* Initialise the MME Rx object. */
+ mme->p_mme = buffer;
+ mme->length = 60;
+ bitstream_init (&mme->bitstream, buffer + 19, 60, BITSTREAM_READ);
+
+ cp_eoc_cco_action_event_dispatch (&ctx, mme);
+
+ sta = cp_sta_mgr_sta_get_from_mac(&ctx, mme->peer.mac);
+
+ test_fail_unless(sta);
+
+ test_fail_unless (sta->fsm.state ==
+ CP_EOC_MULTI_STA_FSM_STATE_associated);
+
+ if(sta->fsm.state == CP_EOC_MULTI_STA_FSM_STATE_associated)
+ {
+ DBG_PRINT ("success: station state is associated (sta in the wl)");
+ }
+ slab_release (sta);
+ slab_release (sta);
+ }
+ test_end;
+
+ test_begin (test, "Receiving a CM_GET_KEY.REQ and transfering to multi_sta")
+ {
+ bitstream_t bitstream;
+ u64 data;
+ u8 buffer[1024];
+ mme->mmtype = CM_GET_KEY_REQ;
+ cp_secu_protocol_run_new (&mme->prun, 0, &ctx.rnd);
+
+ /* Build the MME. */
+ bitstream_init (&bitstream, buffer, sizeof(buffer), BITSTREAM_WRITE);
+ /* ODA. */
+ data = 0x2;
+ bitstream_access (&bitstream, &data, 48);
+ /* OSA. */
+ data = 0x1;
+ bitstream_access (&bitstream, &data, 48);
+ /* Mtype */
+ data = HPAV_MTYPE_MME;
+ bitstream_access (&bitstream, &data, 16);
+ /* MMV. */
+ data = HPAV_MMV1;
+ bitstream_access (&bitstream, &data, 8);
+ /* MMtype. */
+ data = CM_GET_KEY_REQ;
+ bitstream_access (&bitstream, &data, 16);
+ /* FMI */
+ data = 0;
+ bitstream_access (&bitstream, &data, 16);
+ /* Request type. */
+ data = 0;
+ bitstream_access (&bitstream, &data, 8);
+ /* Request key type. */
+ data = CP_MSG_KEY_NEK;
+ bitstream_access (&bitstream, &data, 8);
+ /* NID. */
+ data = cp_net_get_nid (&ctx, net);
+ bitstream_access (&bitstream, &data, 56);
+ /* Nonce. */
+ data = 0xc;
+ bitstream_access (&bitstream, &data, 32);
+ /* PID. */
+ data = 0;
+ bitstream_access (&bitstream, &data, 32);
+ /* Key. */
+ data = 0xA;
+ bitstream_access (&bitstream, &data, 8);
+ bitstream_finalise (&bitstream);
+
+ mme->length = 37;
+ mme->p_mme = buffer;
+ mme->peer.tei = cp_sta_get_tei(sta);
+ mme->peer.mac = 2;
+ mme->bitstream.data = bitstream.data;
+ mme->bitstream.data_bits = bitstream.data_bits;
+
+ cp_eoc_cco_action_event_dispatch (&ctx, mme);
+
+ /* Receiving CP_MSG_KEY_TEK: */
+ /* Build the MME. */
+ bitstream_init (&bitstream, buffer, sizeof(buffer), BITSTREAM_WRITE);
+ /* ODA. */
+ data = 0x2;
+ bitstream_access (&bitstream, &data, 48);
+ /* OSA. */
+ data = 0x1;
+ bitstream_access (&bitstream, &data, 48);
+ /* Mtype */
+ data = HPAV_MTYPE_MME;
+ bitstream_access (&bitstream, &data, 16);
+ /* MMV. */
+ data = HPAV_MMV1;
+ bitstream_access (&bitstream, &data, 8);
+ /* MMtype. */
+ data = CM_GET_KEY_REQ;
+ bitstream_access (&bitstream, &data, 16);
+ /* FMI */
+ data = 0;
+ bitstream_access (&bitstream, &data, 16);
+ /* Request type. */
+ data = 0;
+ bitstream_access (&bitstream, &data, 8);
+ /* Request key type. */
+ data = CP_MSG_KEY_TEK;
+ bitstream_access (&bitstream, &data, 8);
+ /* NID. */
+ data = cp_net_get_nid (&ctx, net);
+ bitstream_access (&bitstream, &data, 56);
+ /* Nonce. */
+ data = 0xc;
+ bitstream_access (&bitstream, &data, 32);
+ /* PID. */
+ data = 0;
+ bitstream_access (&bitstream, &data, 32);
+ /* Key. */
+ data = 0xA;
+ bitstream_access (&bitstream, &data, 8);
+ bitstream_finalise (&bitstream);
+
+ mme->prun.pmn=1;
+
+ cp_eoc_cco_action_event_dispatch (&ctx, mme);
+
+ sta = cp_sta_mgr_sta_get_from_mac(&ctx, mme->peer.mac);
+
+ test_fail_unless(sta);
+
+ test_fail_unless (sta->fsm.state ==
+ CP_EOC_MULTI_STA_FSM_STATE_authenticated);
+
+ if(sta->fsm.state == CP_EOC_MULTI_STA_FSM_STATE_authenticated)
+ DBG_PRINT ("station state is authenticated");
+ slab_release (sta);
+ }
+ test_end;
+ cp_eoc_cco_action_test_release_mac_store (&ctx);
+ cp_sta_mgr_sta_remove(&ctx, sta);
+ cp_sta_mgr_uninit(&ctx);
+ mac_store_uninit (ctx.mac_store);
+#if CONFIG_TRACE
+ trace_buffer_dbg_dump (&ctx.trace);
+#endif /* CONFIG_TRACE */
+ cp_trace_uninit (&ctx);
+}
+
+void
+test_case_garbage_collector (test_t test)
+{
+ test_begin (test, "cp_cco_action_garbage")
+ {
+ cp_t ctx;
+ cp_net_t *net;
+ sar_t sar;
+ uint cl;
+ mac_config_t mac_config;
+ cp_sta_t *sta;
+ cp_tei_t tei;
+ mac_t mac;
+
+ ctx.cl = (cl_t *) &cl;
+ ctx.mac_store = mac_store_init ();
+ sar.mac_store = ctx.mac_store;
+ ctx.sar = &sar;
+ ctx.mac_config = &mac_config;
+ cp_eoc_sta_mgr_init (&ctx);
+ tei = 5;
+ mac = 0x004444444444ull;
+
+ net = cp_sta_mgr_add_avln (&ctx, 1, 1);
+ cp_sta_mgr_set_our_avln (&ctx, net);
+ cp_sta_own_data_set_tei (&ctx, 1);
+ cp_sta_own_data_set_cco_status (&ctx, true);
+
+ sta = cp_sta_mgr_sta_add (&ctx, net, tei, mac);
+ slab_release (sta);
+
+ /* The station should still exist as it has not expired. */
+ cp_cco_action_garbage(&ctx);
+
+ sta = cp_sta_mgr_sta_get_from_mac (&ctx, mac);
+ test_fail_unless(sta);
+
+ /* The station has expired so it should be removed. */
+ sta->expired_date_ms = 0;
+ slab_release(sta);
+
+ cp_cco_action_garbage(&ctx);
+
+ sta = cp_sta_mgr_sta_get_from_mac (&ctx, mac);
+ test_fail_unless(!sta);
+
+ mac_store_uninit (ctx.mac_store);
+ }
+ test_end
+
+ test_begin (test, "cp_cco_action_garbage")
+ {
+ cp_t ctx;
+ cp_tei_t tei;
+ u8 row;
+
+ tei = 5;
+ row = tei / CP_CCO_ACTION_TEI_FLAGS_ROW_SIZE_BITS;
+
+ memset (ctx.cco_action.tei_flags, 0,
+ sizeof (uint) * CP_CCO_ACTION_TEI_FLAGS_ROW);
+
+ cp_cco_action_tei_release (&ctx, tei);
+
+ test_fail_unless(ctx.cco_action.tei_flags[row] == 0);
+ }
+ test_end
+}
+
+void
+test_case_cco_action (test_t test)
+{
+ test_begin (test, "cp_eoc_cco_action_nek_provide")
+ {
+ cp_t ctx;
+ cp_net_t *net;
+ sar_t sar;
+ uint cl;
+ mac_config_t mac_config;
+ cp_sta_t *sta;
+ cp_tei_t tei;
+ mac_t mac;
+ cp_key_t nek_old;
+
+ ctx.cl = (cl_t *) &cl;
+ ctx.mac_store = mac_store_init ();
+ sar.mac_store = ctx.mac_store;
+ ctx.sar = &sar;
+ ctx.mac_config = &mac_config;
+ cp_eoc_sta_mgr_init (&ctx);
+ cp_cco_action_init (&ctx);
+ tei = 5;
+ mac = 0x004444444444ull;
+ nek_old.key[0] = ctx.cco_action.new_nek.nek_enc.key[0];
+ nek_old.key[1] = ctx.cco_action.new_nek.nek_enc.key[1];
+ nek_old.key[2] = ctx.cco_action.new_nek.nek_enc.key[2];
+ nek_old.key[3] = ctx.cco_action.new_nek.nek_enc.key[3];
+
+
+ lib_rnd_init (&ctx.rnd, 0x4242);
+ net = cp_sta_mgr_add_avln (&ctx, 1, 1);
+ cp_sta_mgr_set_our_avln (&ctx, net);
+
+ sta = cp_sta_mgr_sta_add (&ctx, net, tei, mac);
+
+ slab_cache_init (&ctx.fsm.event_bare_cache, "event_bare",
+ sizeof (cp_fsm_event_t),
+ NULL);
+
+ cp_eoc_cco_action_nek_provide(&ctx);
+
+ test_fail_unless(nek_old.key[0]
+ != ctx.cco_action.new_nek.nek_enc.key[0]);
+ test_fail_unless(nek_old.key[1]
+ != ctx.cco_action.new_nek.nek_enc.key[1]);
+ test_fail_unless(nek_old.key[2]
+ != ctx.cco_action.new_nek.nek_enc.key[2]);
+ test_fail_unless(nek_old.key[3]
+ != ctx.cco_action.new_nek.nek_enc.key[3]);
+
+ slab_release(sta);
+ cp_sta_mgr_sta_remove(&ctx, sta);
+ }
+ test_end
+
+ test_begin (test, "cp_eoc_cco_action__set_key_cnf")
+ {
+ cp_t ctx;
+ sar_t sar;
+ mac_config_t mac_config;
+ uint cl;
+ cp_net_t *net;
+ bitstream_t bitstream;
+ u8 result, cco_cap;
+ cp_nid_t nid;
+ cp_snid_t snid;
+ cp_tei_t tei;
+ u8 buffer[1024];
+
+
+ cp_mme_rx_t my_mme;
+ cp_mme_rx_t *mme = &my_mme;
+ ctx.mac_store = mac_store_init ();
+ ctx.mac_config = &mac_config;
+ sar.mac_store = ctx.mac_store;
+ ctx.sar = &sar;
+ cp_msg_init (&ctx);
+ ctx.cl = (cl_t *) &cl;
+ cp_cl_interf_init (&ctx);
+ cp_eoc_sta_mgr_init (&ctx);
+ lib_rnd_init (&ctx.rnd, 1234);
+ ctx.cco_action.eks_sta_current_peer.tei = 5;
+ mme->prun.my_nonce = ctx.cco_action.eks_prun.my_nonce =
+ lib_rnd32 (&ctx.rnd);
+ mme->prun.your_nonce = ctx.cco_action.eks_prun.your_nonce =
+ lib_rnd32 (&ctx.rnd);
+
+ snid=0;
+ result = 0;
+ mme->prun.prn = ctx.cco_action.eks_prun.prn = 1;
+ nid = 0x11223344556677ull;
+ cco_cap = 1;
+ mme->prun.pid = ctx.cco_action.eks_prun.pid = 1;
+ ctx.cco_action.eks_prun.pmn = 1;
+ mme->prun.pmn = ctx.cco_action.eks_prun.pmn + 1;
+ mme->peks = CP_MME_PEKS_DAK;
+
+ mme->peer.tei = tei = ctx.sta_action.assoc.peer.tei = 5;
+ mme->peer.mac = ctx.sta_action.assoc.peer.mac = 0x2;
+
+ /* set our avln */
+ net = cp_sta_mgr_add_avln (&ctx, snid, nid);
+ cp_sta_mgr_set_our_avln (&ctx, net);
+
+ cp_sta_t *sta = cp_sta_mgr_sta_add (&ctx, net, mme->peer.tei,
+ mme->peer.mac);
+ mme->mmtype = CM_SET_KEY_CNF;
+ bitstream_init (&my_mme.bitstream, buffer, sizeof(buffer),
+ BITSTREAM_READ);
+ /* Build the MME. */
+ bitstream_init (&bitstream, buffer, sizeof(buffer), BITSTREAM_WRITE);
+ bitstream_access (&bitstream, &result, 8);
+ bitstream_access (&bitstream, &mme->prun.my_nonce, 32);
+ bitstream_access (&bitstream, &mme->prun.your_nonce, 32);
+ bitstream_access (&bitstream, &mme->prun.pid, 8);
+ bitstream_access (&bitstream, &mme->prun.prn, 16);
+ bitstream_access (&bitstream, &mme->prun.pmn, 8);
+ bitstream_access (&bitstream, &cco_cap, 8);
+
+ bitstream_finalise (&bitstream);
+
+ mme->length = 14;
+
+ cp_fsm_event_t event;
+ ctx.fsm.handled_event = &event;
+ ctx.fsm.active_states[0] = CP_FSM_STATE_CCO;
+ ctx.fsm.handled_event->type = CP_FSM_EVENT_TYPE_CM_SET_KEY_CNF;
+
+ cp_eoc_cco_action__set_key_cnf (&ctx, mme);
+
+ test_fail_unless(ctx.fsm.active_states[0] == CP_FSM_STATE_CCO);
+ test_fail_unless(ctx.cco_action.eks_prun.pid == mme->prun.pid);
+ test_fail_unless(ctx.cco_action.eks_prun.pmn == (mme->prun.pmn - 1));
+ test_fail_unless(ctx.cco_action.eks_prun.prn == mme->prun.prn);
+ test_fail_unless(ctx.cco_action.eks_prun.my_nonce ==
+ mme->prun.my_nonce);
+ test_fail_unless(ctx.cco_action.eks_prun.your_nonce ==
+ mme->prun.your_nonce);
+ slab_release (sta);
+ cp_sta_mgr_sta_remove(&ctx, sta);
+ }
+ test_end
+
+ test_begin (test, "cp_eoc_cco_action__set_key_cnf")
+ {
+ cp_t ctx;
+ mac_config_t mac_config;
+ uint cl;
+ cp_net_t *net;
+ cp_nid_t nid;
+ cp_snid_t snid;
+ cp_tei_t tei1;
+ mac_t mac1;
+ sar_t sar;
+
+ ctx.mac_store = mac_store_init ();
+ ctx.mac_config = &mac_config;
+ sar.mac_store = ctx.mac_store;
+ cp_msg_init (&ctx);
+ ctx.cl = (cl_t *) &cl;
+ ctx.sar = &sar;
+ cp_cl_interf_init (&ctx);
+ cp_eoc_sta_mgr_init (&ctx);
+ lib_rnd_init (&ctx.rnd, 1234);
+
+ nid = 0x11223344556677ull;
+ mac1 = 3;
+ tei1 = 20;
+ snid=0;
+
+ ctx.cco_action.eks_sta_current_peer.tei = 5;
+ ctx.cco_action.eks_sta_current_peer.mac = 0x2;
+ ctx.cco_action.eks_eoc_retry = 0;
+ ctx.fsm.handling_urgent_event = false;
+ ctx.fsm.handled_active_state = 0;
+ ctx.fsm.head = 0;
+
+ /* set our avln */
+ net = cp_sta_mgr_add_avln (&ctx, snid, nid);
+ cp_sta_mgr_set_our_avln (&ctx, net);
+
+ cp_sta_t *sta1 = cp_sta_mgr_sta_add (
+ &ctx, net, ctx.cco_action.eks_sta_current_peer.tei,
+ ctx.cco_action.eks_sta_current_peer.mac);
+ cp_sta_t *sta2 = cp_sta_mgr_sta_add (&ctx, net, tei1, mac1);
+
+ cp_fsm_event_t event;
+ ctx.fsm.handled_event = &event;
+
+ slab_cache_init (&ctx.fsm.event_bare_cache, "event_bare",
+ sizeof (cp_fsm_event_t),
+ NULL);
+
+ ctx.fsm.active_states[0] = CP_FSM_STATE_CCO;
+ ctx.fsm.handled_event->type = CP_FSM_EVENT_TYPE_nek_timeout;
+
+ cp_eoc_cco_action_nek_change_timeout (&ctx);
+
+ test_fail_unless (ctx.fsm.active_states[0] == CP_FSM_STATE_CCO);
+ slab_release (sta1);
+ slab_release (sta2);
+ cp_sta_mgr_sta_remove(&ctx, sta1);
+ cp_sta_mgr_sta_remove(&ctx, sta2);
+ }
+ test_end
+
+ test_begin (test, "cp_eoc_cco_action__power_on_no_beacons")
+ {
+
+ cp_t ctx;
+
+ sar_t sar;
+ uint cl;
+ mac_config_t mac_config;
+
+ ctx.cl = (cl_t *) &cl;
+ ctx.mac_store = mac_store_init ();
+ sar.mac_store = ctx.mac_store;
+ ctx.sar = &sar;
+ ctx.mac_config = &mac_config;
+ cp_eoc_sta_mgr_init (&ctx);
+
+ slab_cache_init (&ctx.fsm.event_bare_cache, "event_bare",
+ sizeof (cp_fsm_event_t),
+ NULL);
+
+ cp_eoc_cco_action__power_on_no_beacons (&ctx);
+
+ cp_sta_own_data_t *own = cp_sta_mgr_get_sta_own_data (&ctx);
+
+ test_fail_unless(cp_sta_own_data_get_tei(&ctx) == MAC_TEI_CCO_MIN);
+ test_fail_unless(cp_sta_own_data_get_authenticated_status(&ctx) == true);
+ test_fail_unless(cp_sta_mgr_get_our_avln(&ctx) != NULL);
+ test_fail_unless(own->nid_track == cp_sta_own_data_get_nid (&ctx));
+ test_fail_unless(cp_sta_own_data_get_cco_status(&ctx) == true);
+ }
+ test_end
+
+ test_begin (test, "cp_eoc_cco_action_poweron__idle__to_poweron")
+ {
+ cp_t ctx;
+ cp_trace_init (&ctx);
+ cp_cco_bw_init (&ctx);
+
+ slab_cache_init (&ctx.fsm.event_bare_cache, "event_bare",
+ sizeof (cp_fsm_event_t),
+ NULL);
+
+ cp_eoc_cco_action_poweron__idle__to_poweron (&ctx);
+
+
+ test_fail_unless(ctx.sta_action.assoc.peer.mac == MAC_BROADCAST);
+ test_fail_unless(ctx.sta_action.assoc.peer.eth_type == HPAV_MTYPE_MME);
+ test_fail_unless(ctx.sta_action.assoc.peer.vlan_tci == 0);
+ test_fail_unless(ctx.sta_action.assoc.peer.tei == MAC_TEI_UNASSOCIATED);
+ cp_cco_bw_uninit (&ctx);
+ cp_trace_uninit (&ctx);
+ }
+ test_end
+
+ test_begin (test, "cp_eoc_cco_action_vs__cco__cc_leave_ind")
+ {
+ cp_t ctx;
+ cp_mme_peer_t my_mme;
+ cp_mme_peer_t *mme = &my_mme;
+ cp_net_t *net;
+ cp_sta_t *sta;
+
+ cp_eoc_sta_mgr_init (&ctx);
+
+ mme->mac = 2;
+ mme->tei = 5;
+
+ net = cp_sta_mgr_add_avln (&ctx, 1, 1);
+ sta = cp_sta_mgr_sta_add (&ctx, net, mme->tei, mme->mac);
+ cp_sta_mgr_set_our_avln (&ctx, net);
+
+ cp_eoc_cco_action_vs__cco__cc_leave_ind (&ctx, mme);
+
+ test_fail_unless (sta->fsm.state ==
+ CP_EOC_MULTI_STA_FSM_STATE_disconnected);
+ slab_release (sta);
+ cp_sta_mgr_sta_remove(&ctx, sta);
+ }
+ test_end
+
+ test_begin (test, "cp_eoc_cco_action__cco__leave_remove_timeout")
+ {
+ cp_t ctx;
+ cp_net_t *net;
+ sar_t sar;
+ uint cl;
+ cp_sta_t *sta, *sta1;
+ mac_t mac, mac1;
+ cp_tei_t tei, tei1;
+ mac_config_t mac_config;
+
+ ctx.cl = (cl_t *) &cl;
+ ctx.mac_store = mac_store_init ();
+ sar.mac_store = ctx.mac_store;
+ ctx.sar = &sar;
+ ctx.mac_config = &mac_config;
+ cp_eoc_sta_mgr_init (&ctx);
+
+ mac = 2;
+ tei = 5;
+ mac1 = 3;
+ tei1 = 6;
+
+ net = cp_sta_mgr_add_avln (&ctx, 1, 1);
+ cp_sta_mgr_set_our_avln (&ctx, net);
+
+ sta = cp_sta_mgr_sta_add (&ctx, net, tei, mac);
+ sta1 = cp_sta_mgr_sta_add (&ctx, net, tei1, mac1);
+
+ sta->multi_sta.to_leave = true;
+ slab_release (sta);
+ test_fail_unless (net->num_stas == 2);
+ test_fail_unless (net->num_associated_stas == 2);
+ test_fail_unless (net->num_visible_stas == 2);
+
+ cp_eoc_cco_action__cco__leave_remove_timeout (&ctx);
+ sta = cp_sta_mgr_sta_get_from_mac(&ctx, mac);
+ test_fail_if (sta);
+ test_fail_unless (net->num_stas == 1);
+ test_fail_unless (net->num_associated_stas == 1);
+ test_fail_unless (net->num_visible_stas == 1);
+ sta1->multi_sta.to_leave = true;
+ slab_release (sta1);
+ cp_eoc_cco_action__cco__leave_remove_timeout (&ctx);
+ sta1 = cp_sta_mgr_sta_get_from_mac (&ctx, mac1);
+ test_fail_if (sta1);
+ }
+ test_end
+}
+
+void
+set_insert_set_remove_test_case(test_t t)
+{
+ cp_t ctx;
+ cp_trace_init (&ctx);
+ cp_net_t *net;
+ sar_t sar;
+ uint cl;
+ mac_config_t mac_config;
+
+ ctx.cl = (cl_t *) &cl;
+ ctx.mac_store = mac_store_init ();
+
+ sar.mac_store = ctx.mac_store;
+ ctx.sar = &sar;
+ ctx.mac_config = &mac_config;
+ cp_eoc_sta_mgr_init (&ctx);
+
+ lib_rnd_init (&ctx.rnd, 1234);
+
+ net = cp_sta_mgr_add_avln (&ctx, 1, 1);
+ cp_sta_mgr_set_our_avln (&ctx, net);
+
+ test_begin (t, "set_insert")
+ {
+ int i;
+ cp_tei_t tei;
+ mac_t mac;
+ cp_sta_t *sta = NULL;
+ for (i = 0; i < 13; i++)
+ {
+ tei = i + 3;
+ mac = i + 0x0000010000D00000ull;
+ sta = cp_sta_mgr_sta_get_from_mac (&ctx, mac);
+ if(!sta)
+ {
+ sta = cp_sta_mgr_sta_add (&ctx, net, tei, mac);
+ sta->multi_sta.allowed = true;
+ }
+ test_fail_unless (sta != NULL);
+ slab_release (sta);
+ }
+ }
+ test_end;
+
+ test_begin (t, "set_remove")
+ {
+ int i;
+ mac_t mac;
+ cp_sta_t *sta = NULL;
+ for (i = 0; i < 13; i++)
+ {
+ mac = i + 0x0000010000D00000ull;
+ sta = cp_sta_mgr_sta_get_from_mac (&ctx, mac);
+ test_fail_unless (sta != NULL);
+ cp_sta_mgr_sta_remove (&ctx, sta);
+ slab_release (sta);
+ }
+ test_fail_unless (net->num_stas == 0);
+ test_fail_unless (net->num_associated_stas == 0);
+ }
+ test_end;
+
+ cp_sta_mgr_uninit (&ctx);
+ mac_store_uninit (ctx.mac_store);
+#if CONFIG_TRACE
+ trace_buffer_dbg_dump (&ctx.trace);
+#endif /* CONFIG_TRACE */
+ cp_trace_uninit (&ctx);
+}
+
+void
+vs_get_tonemap_test_case (test_t t)
+{
+ /* init test context */
+ uint test_fail_nb_temp;
+ test_sta_action_t ctx;
+ cp_t *cp = &ctx.cp;
+ const cp_tei_t tei_1 = 10;
+ const mac_t mac_1 = 0x111111111111ull;
+ const cp_nid_t our_nid = 0x111111111111ull;
+
+ memset (cp, 0, sizeof (cp_t));
+
+ /* init globals */
+ scenario_globals_t globals = {
+ .cp = &ctx.cp,
+ };
+
+ cp_mme_peer_t peer = CP_MME_PEER (0x112233445577ull, 5);
+ cp_mme_tx_t mme_to_send;
+ globals.mme = &mme_to_send;
+
+ test_sta_action_init (&ctx);
+
+ sar_t sar;
+ memset (&sar, 0, sizeof (sar_t));
+ sar.mac_store = globals.cp->mac_store;
+ globals.cp->sar = &sar;
+
+ test_case_begin (t, "get tonemap");
+ test_fail_nb_temp = t->fail_nb;
+
+ test_begin (t, "get_tonemap_req_receive return false")
+ {
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (vs__started__vs_get_tonemap_req, .peer = peer),
+ SCENARIO_EVENT (cp_msg_vs_get_tonemap_req_receive, .ok = false,
+ .mac_addr = mac_1, .tmi = 0, .int_id = 0, .dir = 0),
+ SCENARIO_END
+ };
+ scenario_run (t, entries, &globals);
+ } test_end;
+
+ if(test_fail_nb_temp == t->fail_nb)
+ {
+ DBG_PRINT ("\"get_tonemap_req_receive return false\" "
+ "successfully tested");
+ }
+ else
+ {
+ DBG_PRINT ("\"get_tonemap_req_receive return false\" test failed");
+ test_fail_nb_temp = t->fail_nb;
+ }
+
+ test_begin (t, "invalid mac address")
+ {
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (vs__started__vs_get_tonemap_req, .peer = peer),
+ SCENARIO_EVENT (cp_msg_vs_get_tonemap_req_receive, .ok = true,
+ .mac_addr = mac_1, .tmi = 0x00, .int_id = 0,
+ .dir = CP_MSG_VS_GET_TONEMAP_REQ_DIRECTION_RX),
+ SCENARIO_EVENT (cp_msg_vs_get_tonemap_cnf_send,
+ .peer = peer,
+ .result = CP_MSG_VS_GET_TONEMAP_CNF_RESULT_FAILURE,
+ .beacon_delta = 0, .int_id = 0, .tms = 0, .tmi = 0),
+ SCENARIO_END
+ };
+ scenario_run (t, entries, &globals);
+ } test_end;
+
+ if(test_fail_nb_temp == t->fail_nb)
+ {
+ DBG_PRINT ("\"invalid mac address\" successfully tested");
+ }
+ else
+ {
+ DBG_PRINT ("\"invalid mac address\" test failed");
+ test_fail_nb_temp = t->fail_nb;
+ }
+
+ /* Create our net/AVLN. */
+ test_sta_action_create_our_net (&ctx, our_nid, tei_1);
+ cp_net_t *my_net = cp_sta_mgr_get_our_avln (cp);
+ cp_sta_t *sta_1 = cp_sta_mgr_sta_add (cp, my_net, tei_1, mac_1);
+ sta_t* station = mac_store_sta_get (cp->mac_store, tei_1);
+ station->authenticated = true;
+
+ test_begin (t, "only get intervals and tonemaps")
+ {
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (vs__started__vs_get_tonemap_req, .peer = peer),
+ SCENARIO_EVENT (cp_msg_vs_get_tonemap_req_receive, .ok = true,
+ .mac_addr = mac_1,
+ .tmi = CP_MSG_VS_GET_TONEMAP_TMI_AND_INT_ONLY,
+ .int_id = 0,
+ .dir = CP_MSG_VS_GET_TONEMAP_REQ_DIRECTION_TX),
+ SCENARIO_EVENT (cp_msg_vs_get_tonemap_cnf_send,
+ .peer = peer,
+ .result = CP_MSG_VS_GET_TONEMAP_CNF_RESULT_SUCCESS,
+ .beacon_delta = 0,
+ .int_id = station->tx_tonemaps->intervals->version,
+ .tms = station->tx_tonemaps,
+ .tmi = CP_MSG_VS_GET_TONEMAP_TMI_AND_INT_ONLY),
+ SCENARIO_END
+ };
+ scenario_run (t, entries, &globals);
+ } test_end;
+
+ if(test_fail_nb_temp == t->fail_nb)
+ {
+ DBG_PRINT ("\"only get intervals and tonemaps\" successfully tested");
+ }
+ else
+ {
+ DBG_PRINT ("\"only get intervals and tonemaps\" test failed");
+ test_fail_nb_temp = t->fail_nb;
+ }
+
+ test_begin (t, "tonemap doesn't exist")
+ {
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (vs__started__vs_get_tonemap_req, .peer = peer),
+ SCENARIO_EVENT (cp_msg_vs_get_tonemap_req_receive, .ok = true,
+ .mac_addr = mac_1,
+ .tmi = 4,
+ .int_id = station->tx_tonemaps->intervals->version,
+ .dir = CP_MSG_VS_GET_TONEMAP_REQ_DIRECTION_TX),
+ SCENARIO_EVENT (cp_msg_vs_get_tonemap_cnf_send,
+ .peer = peer,
+ .result = CP_MSG_VS_GET_TONEMAP_CNF_RESULT_FAILURE,
+ .beacon_delta = 0,
+ .int_id = station->tx_tonemaps->intervals->version,
+ .tms = 0,
+ .tmi = 0),
+ SCENARIO_END
+ };
+ scenario_run (t, entries, &globals);
+ } test_end;
+
+ if(test_fail_nb_temp == t->fail_nb)
+ {
+ DBG_PRINT ("\"tonemap doesn't exist\" successfully tested");
+ }
+ else
+ {
+ DBG_PRINT ("\"tonemap doesn't exist\" test failed");
+ test_fail_nb_temp = t->fail_nb;
+ }
+
+ station->tx_tonemaps->tm[4] = tonemap_alloc ();
+ station->rx_tonemaps->tm[4] = tonemap_alloc ();
+ station->tx_tonemaps->intervals->version = 23;
+ station->rx_tonemaps->intervals->version = 15;
+
+ test_begin (t, "correct tonemap")
+ {
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (vs__started__vs_get_tonemap_req, .peer = peer),
+ SCENARIO_EVENT (cp_msg_vs_get_tonemap_req_receive, .ok = true,
+ .mac_addr = mac_1,
+ .tmi = 4,
+ .int_id = station->tx_tonemaps->intervals->version,
+ .dir = CP_MSG_VS_GET_TONEMAP_REQ_DIRECTION_TX),
+ SCENARIO_EVENT (cp_msg_vs_get_tonemap_cnf_send,
+ .peer = peer,
+ .result = CP_MSG_VS_GET_TONEMAP_CNF_RESULT_SUCCESS,
+ .beacon_delta = 0,
+ .int_id = station->tx_tonemaps->intervals->version,
+ .tms = station->tx_tonemaps,
+ .tmi = 4),
+ SCENARIO_END
+ };
+ scenario_run (t, entries, &globals);
+ } test_end;
+
+ if(test_fail_nb_temp == t->fail_nb)
+ {
+ DBG_PRINT ("\"correct tonemap\" successfully tested");
+ }
+ else
+ {
+ DBG_PRINT ("\"correct tonemap\" test failed");
+ test_fail_nb_temp = t->fail_nb;
+ }
+
+ /* In this test we try to get the tonemap tx with the tmi version of
+ * the rx, which is invalid.
+ */
+ test_begin (t, "wrong interval list index")
+ {
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (vs__started__vs_get_tonemap_req, .peer = peer),
+ SCENARIO_EVENT (cp_msg_vs_get_tonemap_req_receive, .ok = true,
+ .mac_addr = mac_1,
+ .tmi = 4,
+ .int_id = station->rx_tonemaps->intervals->version,
+ .dir = CP_MSG_VS_GET_TONEMAP_REQ_DIRECTION_TX),
+ SCENARIO_EVENT (cp_msg_vs_get_tonemap_cnf_send,
+ .peer = peer,
+ .result =
+ CP_MSG_VS_GET_TONEMAP_CNF_RESULT_BAD_TMP_INT_LIST_ID,
+ .beacon_delta = 0,
+ .int_id = station->tx_tonemaps->intervals->version,
+ .tms = station->tx_tonemaps,
+ .tmi = 4),
+ SCENARIO_END
+ };
+ scenario_run (t, entries, &globals);
+ } test_end;
+
+ if(test_fail_nb_temp == t->fail_nb)
+ {
+ DBG_PRINT ("\"wrong interval list index\" successfully tested");
+ }
+ else
+ {
+ DBG_PRINT ("\"wrong interval list index\" test failed");
+ test_fail_nb_temp = t->fail_nb;
+ }
+
+ /* Cleanup. */
+ blk_release (station);
+ slab_release (sta_1);
+
+ test_sta_action_uninit (&ctx);
+}
+
+
+void
+test_action_test_suite (test_t t)
+{
+ test_suite_begin (t, "cco_action");
+ test_case_sta_assoc_and_auth_procedure_action (t);
+ test_case_garbage_collector (t);
+ test_case_cco_action (t);
+ test_case_DRV_and_VS_MMEs (t);
+}
+
+
+void
+vs_test_suite (test_t t)
+{
+ test_suite_begin (t, "vs");
+ vs_get_tonemap_test_case (t);
+}
+
+int
+main (int argc, char **argv)
+{
+ lib_stats_init();
+ test_t t;
+ trace_init ();
+ test_init (t, argc, argv);
+ vs_test_suite (t);
+ test_action_test_suite (t);
+ set_insert_set_remove_test_case(t);
+ trace_uninit ();
+ lib_stats_uninit();
+ test_case_begin (t, "Memory allocation");
+ test_begin (t, "memory leaks")
+ {
+ test_fail_if (blk_check_memory () != true, "Memory leaks");
+ }
+ test_end;
+ test_result (t);
+ return test_nb_failed (t) == 0 ? 0 : 1;
+}
diff --git a/cesar/cp/eoc/cco/action/test/utest_eoc/src/test_fsm.c b/cesar/cp/eoc/cco/action/test/utest_eoc/src/test_fsm.c
new file mode 100644
index 0000000000..bb556d83ef
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/test/utest_eoc/src/test_fsm.c
@@ -0,0 +1,429 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2009 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/test_fsm.c
+ * \brief Test FSM module.
+ * \ingroup test
+ */
+#include "common/std.h"
+
+#include "lib/scenario/scenario.h"
+#include "lib/blk.h"
+#include "lib/test.h"
+
+#include "cp/fsm/fsm.h"
+#include "cp/inc/context.h"
+#include "cp/sta/core/core.h"
+
+void
+test_fsm_basic_test_case (test_t t)
+{
+ test_case_begin (t, "basic");
+ cp_t cp;
+ cp.sta_core_urgent_flag = false;
+ cp_trace_init (&cp);
+
+ test_begin (t, "CCO")
+ {
+ cp_fsm_init (&cp);
+ cp.sta_core_flag = false;
+ scenario_entry_t entries[] = {
+ /* STOPPED */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_DRV_STA_MAC_START_REQ),
+ SCENARIO_EVENT (cp_fsm__STOPPED__drv_sta_mac_start_req),
+ /* STARTED */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_to_poweron),
+ SCENARIO_EVENT (cp_fsm__STARTED__poweron__idle__to_poweron),
+ /* POWER_ON */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_BEACON_NOT_RECEIVED),
+ SCENARIO_EVENT (cp_fsm__CCO__send_central_beacon),
+ /* CCO, DRV_STA_GET_KEY_REQ */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_DRV_STA_GET_KEY_REQ),
+ SCENARIO_EVENT (cp_fsm__CCO__drv_sta_get_key_req),
+ /* CCO, VS_EOC_GET_TOPO_REQ */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_VS_EOC_GET_TOPO_REQ),
+ SCENARIO_EVENT (cp_fsm__CCO__vs_eoc__cco__vs_eoc_get_topo_req),
+ /* CCO, VS_EOC_CCO_SET_WL_REQ */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_VS_EOC_CCO_SET_WL_REQ),
+ SCENARIO_EVENT (cp_fsm__CCO__vs_eoc__cco__vs_eoc_set_wl_req),
+ /* CCO, VS_EOC_CCO_GET_WL_REQ */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_VS_EOC_CCO_GET_WL_REQ),
+ SCENARIO_EVENT (cp_fsm__CCO__vs_eoc__cco__vs_eoc_get_wl_req),
+ /* CCO, NEK change */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_cco__nek_change),
+ SCENARIO_EVENT (cp_fsm__CCO__nek_provide),
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_CM_SET_KEY_CNF),
+ SCENARIO_EVENT (cp_fsm__CCO__set_key_cnf),
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_nek_timeout),
+ SCENARIO_EVENT (cp_fsm__CCO__nek_change_timeout,
+ .branch = CP_FSM_BRANCH (CCO, nek_timeout, yes)),
+ /* CCO*/
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_DRV_STA_MAC_STOP_REQ),
+ SCENARIO_EVENT (cp_fsm__STARTED__drv_sta_mac_stop_req),
+ /* STOPPING */
+ SCENARIO_END
+ };
+ scenario_globals_t globals = {
+ .cp = &cp,
+ };
+ scenario_run (t, entries, &globals);
+ test_fail_unless (cp.fsm.active_states[0] == CP_FSM_STATE_STOPPING);
+ cp_fsm_uninit (&cp);
+ } test_end;
+
+ test_begin (t, "CCO -> Multi_sta")
+ {
+ cp_fsm_init (&cp);
+ cp.sta_core_flag = false;
+ scenario_entry_t entries[] = {
+ /* STOPPED */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_DRV_STA_MAC_START_REQ),
+ SCENARIO_EVENT (cp_fsm__STOPPED__drv_sta_mac_start_req),
+ /* STARTED */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_to_poweron),
+ SCENARIO_EVENT (cp_fsm__STARTED__poweron__idle__to_poweron),
+ /* POWER_ON */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_BEACON_NOT_RECEIVED),
+ SCENARIO_EVENT (cp_fsm__CCO__send_central_beacon),
+ /* CCO*/
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_MULTI_STA_MME),
+ SCENARIO_EVENT (cp_fsm__CCO__event_dispatch),
+ /* CCO */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_DRV_STA_MAC_STOP_REQ),
+ SCENARIO_EVENT (cp_fsm__STARTED__drv_sta_mac_stop_req),
+ /* STOPPING */
+ SCENARIO_END
+ };
+ scenario_globals_t globals = {
+ .cp = &cp,
+ };
+ scenario_run (t, entries, &globals);
+ test_fail_unless (cp.fsm.active_states[0] == CP_FSM_STATE_STOPPING);
+ cp_fsm_uninit (&cp);
+ } test_end;
+
+ test_begin (t, "BCCO")
+ {
+ cp_fsm_init (&cp);
+ cp.sta_core_flag = false;
+ scenario_entry_t entries[] = {
+ /* STOPPED */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_DRV_STA_MAC_START_REQ),
+ SCENARIO_EVENT (cp_fsm__STOPPED__drv_sta_mac_start_req),
+ /* STARTED */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_to_poweron),
+ SCENARIO_EVENT (cp_fsm__STARTED__poweron__idle__to_poweron),
+ /* POWER_ON */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_rx_beacon),
+ SCENARIO_EVENT (cp_fsm__POWER_ON__power_on_rx_beacon),
+ /* BCCO*/
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_DRV_STA_MAC_STOP_REQ),
+ SCENARIO_EVENT (cp_fsm__BCCO__bcco_drv_mac_stop),
+ /* STOPPING */
+ SCENARIO_END
+ };
+ scenario_globals_t globals = {
+ .cp = &cp,
+ };
+ scenario_run (t, entries, &globals);
+ test_fail_unless (cp.fsm.active_states[0] == CP_FSM_STATE_STOPPING);
+ cp_fsm_uninit (&cp);
+ } test_end;
+
+ test_begin (t, "BCCO -> CCO")
+ {
+ cp_fsm_init (&cp);
+ cp.sta_core_flag = false;
+ scenario_entry_t entries[] = {
+ /* STOPPED */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_DRV_STA_MAC_START_REQ),
+ SCENARIO_EVENT (cp_fsm__STOPPED__drv_sta_mac_start_req),
+ /* STARTED */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_to_poweron),
+ SCENARIO_EVENT (cp_fsm__STARTED__poweron__idle__to_poweron),
+ /* POWER_ON */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_rx_beacon),
+ SCENARIO_EVENT (cp_fsm__POWER_ON__power_on_rx_beacon),
+ /* BCCO*/
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_BEACON_NOT_RECEIVED),
+ SCENARIO_EVENT (cp_fsm__BCCO__bcco_no_beacons),
+ /* CCO */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_DRV_STA_MAC_STOP_REQ),
+ SCENARIO_EVENT (cp_fsm__STARTED__drv_sta_mac_stop_req),
+ /* STOPPING */
+ SCENARIO_END
+ };
+ scenario_globals_t globals = {
+ .cp = &cp,
+ };
+ scenario_run (t, entries, &globals);
+ test_fail_unless (cp.fsm.active_states[0] == CP_FSM_STATE_STOPPING);
+ cp_fsm_uninit (&cp);
+ } test_end;
+
+#if CONFIG_TRACE
+ trace_buffer_dbg_dump (&cp.trace);
+#endif /* CONFIG_TRACE */
+ cp_trace_uninit (&cp);
+}
+
+void
+test_vs_eoc_test_case (test_t t)
+{
+ test_case_begin (t, "vs eoc");
+ cp_t cp;
+ cp.sta_core_urgent_flag = false;
+ cp_trace_init (&cp);
+
+ test_begin (t, "VS_EOC_GET_TOPO")
+ {
+ cp_fsm_init (&cp);
+ cp.sta_core_flag = false;
+ scenario_entry_t entries[] = {
+ /* STOPPED */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_DRV_STA_MAC_START_REQ),
+ SCENARIO_EVENT (cp_fsm__STOPPED__drv_sta_mac_start_req),
+ /* STARTED */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_to_poweron),
+ SCENARIO_EVENT (cp_fsm__STARTED__poweron__idle__to_poweron),
+ /* POWER_ON */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_BEACON_NOT_RECEIVED),
+ SCENARIO_EVENT (cp_fsm__CCO__send_central_beacon),
+ /* CCO */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_VS_EOC_GET_TOPO_REQ),
+ SCENARIO_EVENT (cp_fsm__CCO__vs_eoc__cco__vs_eoc_get_topo_req),
+ /* CCO */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_DRV_STA_MAC_STOP_REQ),
+ SCENARIO_EVENT (cp_fsm__STARTED__drv_sta_mac_stop_req),
+ /* STOPPING */
+ SCENARIO_END
+ };
+ scenario_globals_t globals = {
+ .cp = &cp,
+ };
+ scenario_run (t, entries, &globals);
+ test_fail_unless (cp.fsm.active_states[0] == CP_FSM_STATE_STOPPING);
+ cp_fsm_uninit (&cp);
+ } test_end;
+
+ test_begin (t, "VS_EOC_CCO_GET_WL")
+ {
+ cp_fsm_init (&cp);
+ cp.sta_core_flag = false;
+ scenario_entry_t entries[] = {
+ /* STOPPED */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_DRV_STA_MAC_START_REQ),
+ SCENARIO_EVENT (cp_fsm__STOPPED__drv_sta_mac_start_req),
+ /* STARTED */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_to_poweron),
+ SCENARIO_EVENT (cp_fsm__STARTED__poweron__idle__to_poweron),
+ /* POWER_ON */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_BEACON_NOT_RECEIVED),
+ SCENARIO_EVENT (cp_fsm__CCO__send_central_beacon),
+ /* CCO */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_VS_EOC_CCO_GET_WL_REQ),
+ SCENARIO_EVENT (cp_fsm__CCO__vs_eoc__cco__vs_eoc_get_wl_req),
+ /* CCO */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_DRV_STA_MAC_STOP_REQ),
+ SCENARIO_EVENT (cp_fsm__STARTED__drv_sta_mac_stop_req),
+ /* STOPPING */
+ SCENARIO_END
+ };
+ scenario_globals_t globals = {
+ .cp = &cp,
+ };
+ scenario_run (t, entries, &globals);
+ test_fail_unless (cp.fsm.active_states[0] == CP_FSM_STATE_STOPPING);
+ cp_fsm_uninit (&cp);
+ } test_end;
+
+ test_begin (t, "VS_EOC_CCO_SET_WL")
+ {
+ cp_fsm_init (&cp);
+ cp.sta_core_flag = false;
+ scenario_entry_t entries[] = {
+ /* STOPPED */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_DRV_STA_MAC_START_REQ),
+ SCENARIO_EVENT (cp_fsm__STOPPED__drv_sta_mac_start_req),
+ /* STARTED */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_to_poweron),
+ SCENARIO_EVENT (cp_fsm__STARTED__poweron__idle__to_poweron),
+ /* POWER_ON */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_BEACON_NOT_RECEIVED),
+ SCENARIO_EVENT (cp_fsm__CCO__send_central_beacon),
+ /* CCO */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_VS_EOC_CCO_SET_WL_REQ),
+ SCENARIO_EVENT (cp_fsm__CCO__vs_eoc__cco__vs_eoc_set_wl_req),
+ /* CCO */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_DRV_STA_MAC_STOP_REQ),
+ SCENARIO_EVENT (cp_fsm__STARTED__drv_sta_mac_stop_req),
+ /* STOPPING */
+ SCENARIO_END
+ };
+ scenario_globals_t globals = {
+ .cp = &cp,
+ };
+ scenario_run (t, entries, &globals);
+ test_fail_unless (cp.fsm.active_states[0] == CP_FSM_STATE_STOPPING);
+ cp_fsm_uninit (&cp);
+ } test_end;
+
+ test_begin (t, "VS_EOC_SEND_CENTRAL_BEACON")
+ {
+ cp_fsm_init (&cp);
+ cp.sta_core_flag = false;
+ scenario_entry_t entries[] = {
+ /* STOPPED */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_DRV_STA_MAC_START_REQ),
+ SCENARIO_EVENT (cp_fsm__STOPPED__drv_sta_mac_start_req),
+ /* STARTED */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_to_poweron),
+ SCENARIO_EVENT (cp_fsm__STARTED__poweron__idle__to_poweron),
+ /* POWER_ON */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_BEACON_NOT_RECEIVED),
+ SCENARIO_EVENT (cp_fsm__CCO__send_central_beacon),
+ /* CCO */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_BEACON_TIMER_EXPIRES),
+ SCENARIO_EVENT (cp_fsm__CCO__send_central_beacon),
+ SCENARIO_END
+ };
+ scenario_globals_t globals = {
+ .cp = &cp,
+ };
+ scenario_run (t, entries, &globals);
+ test_fail_unless (cp.fsm.active_states[0] == CP_FSM_STATE_CCO);
+ cp_fsm_uninit (&cp);
+ } test_end;
+
+ test_begin (t, "leave_remove_timeout")
+ {
+ cp_fsm_init (&cp);
+ cp.sta_core_flag = false;
+ scenario_entry_t entries[] = {
+ /* STOPPED */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_DRV_STA_MAC_START_REQ),
+ SCENARIO_EVENT (cp_fsm__STOPPED__drv_sta_mac_start_req),
+ /* STARTED */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_to_poweron),
+ SCENARIO_EVENT (cp_fsm__STARTED__poweron__idle__to_poweron),
+ /* POWER_ON */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_BEACON_NOT_RECEIVED),
+ SCENARIO_EVENT (cp_fsm__CCO__send_central_beacon),
+ /* CCO */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_leave_remove_delay),
+ SCENARIO_EVENT (cp_fsm__CCO__vs_eoc__cco__leave_remove_timeout),
+ /* CCO */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_DRV_STA_MAC_STOP_REQ),
+ SCENARIO_EVENT (cp_fsm__STARTED__drv_sta_mac_stop_req),
+ /* STOPPING */
+ SCENARIO_END
+ };
+ scenario_globals_t globals = {
+ .cp = &cp,
+ };
+ scenario_run (t, entries, &globals);
+ test_fail_unless (cp.fsm.active_states[0] == CP_FSM_STATE_STOPPING);
+ cp_fsm_uninit (&cp);
+ } test_end;
+
+
+
+#if CONFIG_TRACE
+ trace_buffer_dbg_dump (&cp.trace);
+#endif /* CONFIG_TRACE */
+ cp_trace_uninit (&cp);
+}
+
+void
+test_fsm_test_suite (test_t t)
+{
+ test_suite_begin (t, "cco fsm");
+ test_fsm_basic_test_case (t);
+ test_vs_eoc_test_case (t);
+}
+
+void
+cp_sta_core_signal_fsm_event (cp_t *ctx)
+{
+ dbg_assert (ctx);
+ ctx->sta_core_flag = true;
+}
+
+void
+cp_sta_core_signal_fsm_urgent_event (cp_t *ctx)
+{
+ dbg_assert (ctx);
+ ctx->sta_core_urgent_flag = true;
+}
+
+int
+main (int argc, char **argv)
+{
+ test_t t;
+ trace_init ();
+ test_init (t, argc, argv);
+ test_fsm_test_suite (t);
+ trace_uninit ();
+ test_case_begin (t, "Memory allocation");
+ test_begin (t, "memory leaks")
+ {
+ test_fail_if (blk_check_memory () != true, "Memory leaks");
+ }
+ test_end;
+ test_result (t);
+ return test_nb_failed (t) == 0 ? 0 : 1;
+}
diff --git a/cesar/cp/eoc/cco/action/test/utest_mcast/Config b/cesar/cp/eoc/cco/action/test/utest_mcast/Config
new file mode 100644
index 0000000000..4660a4c5b7
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/test/utest_mcast/Config
@@ -0,0 +1,19 @@
+CONFIG_CP_EOC = y
+CONFIG_TRACE = n
+CONFIG_MAC_COMMON_EOC_SCHED = y
+CONFIG_CP_EOC_SCHEDULER = y
+CONFIG_CP_EOC_MULTI_STA_FSM_DEF="cp/eoc/multi_sta_fsm/src/fsm/multi_sta.fsm"
+CONFIG_CP_EOC_IS_MASTER = y
+CONFIG_CP_STA_MGR_CCO_EOC = y
+CONFIG_CP_FSM_DEF = "cp/eoc/fsm/src/fsm/cp_eoc_cco.fsm"
+CONFIG_CP_MSG_EOC_MULTI_STA_MME = y
+CONFIG_CL_EOC_CLASSIFY = y
+CONFIG_CP_EOC_BEACON_SPC_CENTRAL = y
+CONFIG_CL_EOC_ROUTE = y
+CONFIG_CP_MSG_EOC_DRV_MME = y
+CONFIG_CP_EOC_CCO_ACTION_WL_ALLOWED = y
+CONFIG_CP_STA_ACTION_MISC_EOC = y
+CONFIG_CP_EOC_DBG_PRINT_LEVEL = 1
+CONFIG_AV_ONLY_MODE = y
+CONFIG_CP_EOC_CCO_ACTION_CON_ALLOWED = n
+CONFIG_MAC_COMMON_EOC_TEI = y
diff --git a/cesar/cp/eoc/cco/action/test/utest_mcast/Makefile b/cesar/cp/eoc/cco/action/test/utest_mcast/Makefile
new file mode 100644
index 0000000000..8fc6f16a77
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/test/utest_mcast/Makefile
@@ -0,0 +1,18 @@
+BASE = ../../../../../..
+
+INCLUDES = cp/eoc/cco/action/test/utest_mcast/override \
+ cp/eoc/cco/action/test/utest_mcast
+
+HOST_PROGRAMS = test_cco_action
+test_cco_action_SOURCES = test_cco_action.c test_mcast_suite.c \
+ scenario_actions.c fsm_stub.c msg_stub.c cl_mcast.c
+test_cco_action_MODULES = lib lib/scenario cp/eoc/fsm/stub mac/common \
+ cp/eoc/cco/action cp/eoc/cco/bw/stub cl/stub \
+ cp/eoc/sta/mgr cp/eoc/sta/action/stub cp/sta/core/stub \
+ cp/eoc/multi_sta_fsm cp/eoc/multi_sta/action/stub \
+ cp/eoc/beacon/stub cp/eoc/msg/stub bsu/stub cp/secu/stub \
+ mac/sar/stub mac/pbproc/stub mac/ca/stub ce/rx/stub \
+ hal/ipmbox/stub bufmgr/stub
+test_cco_action_CONFIG_MODULES = cp/eoc cl mac/sar
+
+include $(BASE)/common/make/top.mk
diff --git a/cesar/cp/eoc/cco/action/test/utest_mcast/inc/scenario_defs.h b/cesar/cp/eoc/cco/action/test/utest_mcast/inc/scenario_defs.h
new file mode 100644
index 0000000000..1806228271
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/test/utest_mcast/inc/scenario_defs.h
@@ -0,0 +1,160 @@
+#ifndef inc_scenario_defs_h
+#define inc_scenario_defs_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file inc/scenario_defs.h
+ * \brief Scenario definitions.
+ * \ingroup test
+ */
+#include "cp/fsm/fsm.h"
+
+/* Scenario globals. */
+#define SCENARIO_DEFS_GLOBALS \
+ cp_t *cp; \
+ u16 prn; \
+ u32 my_nonce; \
+ u32 your_nonce; \
+ cp_mme_tx_t *mme;
+
+/* Scenario actions. */
+#define SCENARIO_DEFS_ACTIONS \
+ drv__drv_mcast_set_list_req
+
+/* Actions without parameter. */
+#define __0(action) \
+typedef scenario_empty_t scenario_action_ ## action ## _t; \
+void \
+scenario_action_ ## action ## _cb ( \
+ scenario_globals_t *globals, scenario_params_t *params);
+
+/* Actions with parameters. */
+#define __n(action, param...) \
+typedef struct \
+{ \
+ PREPROC_FOR_EACH (__n_, param) \
+} scenario_action_ ## action ## _t; \
+void \
+scenario_action_ ## action ## _cb ( \
+ scenario_globals_t *globals, scenario_params_t *params);
+#define __n_(param) param;
+
+/* Actions with MME and parameters. */
+#define __m(action, param...) \
+typedef struct \
+{ \
+ cp_mme_peer_t peer; \
+ PREPROC_FOR_EACH (__m_, param) \
+} scenario_action_ ## action ## _t; \
+void \
+scenario_action_ ## action ## _cb ( \
+ scenario_globals_t *globals, scenario_params_t *params);
+#define __m_(param) param;
+
+__m (drv__drv_mcast_set_list_req)
+
+#undef __0
+#undef __n
+#undef __n_
+#undef __m
+#undef __m_
+
+/* Scenario events. */
+#define SCENARIO_DEFS_EVENTS \
+ cp_fsm_event_bare_new, \
+ cp_fsm_event_mme_new, \
+ cp_fsm_branch, \
+ cp_msg_drv_mcast_set_list_req_receive
+
+/* MME send event. */
+#define __ms(event, param...) \
+typedef struct \
+{ \
+ cp_mme_peer_t peer; \
+ PREPROC_FOR_EACH (__p_, ## param) \
+} scenario_event_ ## event ## _t;
+
+/* MME send event complex. */
+#define __msc(event, param...) \
+typedef struct \
+{ \
+ PREPROC_FOR_EACH (__p_, ## param) \
+} scenario_event_ ## event ## _t;
+
+/* MME send event with encryption information. */
+#define __msk(event, param...) \
+typedef struct \
+{ \
+ cp_mme_peer_t peer; \
+ cp_mme_peks_t peks; \
+ u8 pid; \
+ u8 pmn; \
+ PREPROC_FOR_EACH (__p_, ## param) \
+} scenario_event_ ## event ## _t;
+
+/* MME send event for CC_RELAY.IND. */
+#define __msr(event, param...) \
+typedef struct \
+{ \
+ mac_t mac_fa; \
+ cp_tei_t ftei; \
+ PREPROC_FOR_EACH (__p_, ## param) \
+} scenario_event_ ## event ## _t;
+
+/* MME receive event. */
+#define __mr(event, param...) \
+typedef struct \
+{ \
+ bool ok; \
+ PREPROC_FOR_EACH (__p_, ## param) \
+} scenario_event_ ## event ## _t;
+
+/* MME receive event with encryption information. */
+#define __mrk(event, param...) \
+typedef struct \
+{ \
+ bool ok; \
+ cp_mme_peks_t peks; \
+ u8 pid; \
+ u8 pmn; \
+ bool new_prn; \
+ bool new_my_nonce; \
+ bool new_your_nonce; \
+ PREPROC_FOR_EACH (__p_, ## param) \
+} scenario_event_ ## event ## _t;
+
+#define __p_(param) param;
+
+__mr (cp_msg_drv_mcast_set_list_req_receive,
+ int nb_groups,
+ mac_t* groups, uint* nb_members,
+ mac_t* members)
+
+#undef __ms
+#undef __msk
+#undef __msr
+#undef __mr
+#undef __mrk
+#undef __msc
+
+/* Any event. */
+#define __e(event, param...) \
+typedef struct \
+{ \
+ PREPROC_FOR_EACH (__p_, ## param) \
+} scenario_event_ ## event ## _t;
+
+__e (cp_fsm_event_bare_new, cp_fsm_event_type_t type)
+__e (cp_fsm_event_mme_new, cp_fsm_event_type_t type)
+__e (cp_fsm_branch, cp_fsm_branch_t branch)
+
+#undef __e
+
+#undef __p_
+
+#endif /* inc_scenario_defs_h */
diff --git a/cesar/cp/eoc/cco/action/test/utest_mcast/inc/test_cco_action.h b/cesar/cp/eoc/cco/action/test/utest_mcast/inc/test_cco_action.h
new file mode 100644
index 0000000000..06213c752d
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/test/utest_mcast/inc/test_cco_action.h
@@ -0,0 +1,46 @@
+#ifndef inc_test_cco_action_h
+#define inc_test_cco_action_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file inc/test_cco_action.h
+ * \brief Test cco/action.
+ * \ingroup test
+ */
+#include "cp/inc/context.h"
+
+/** Contexts used in tests. */
+struct test_cco_action_t
+{
+ cp_t cp;
+ mac_config_t mac_config;
+};
+typedef struct test_cco_action_t test_cco_action_t;
+
+/**
+ * Initialise test contexts.
+ * \param ctx test context
+ */
+void
+test_cco_action_init (test_cco_action_t *ctx);
+
+/**
+ * Uninitialise test contexts.
+ * \param ctx test context
+ */
+void
+test_cco_action_uninit (test_cco_action_t *ctx);
+
+/**
+ * Reset test contexts.
+ * \param ctx test context
+ */
+void
+test_cco_action_reset (test_cco_action_t *ctx);
+
+#endif /* inc_test_cco_action_h */
diff --git a/cesar/cp/eoc/cco/action/test/utest_mcast/override/cp/inc/context.h b/cesar/cp/eoc/cco/action/test/utest_mcast/override/cp/inc/context.h
new file mode 100644
index 0000000000..af86ef23f3
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/test/utest_mcast/override/cp/inc/context.h
@@ -0,0 +1,90 @@
+#ifndef override_cp_inc_context_h
+#define override_cp_inc_context_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file override/cp/inc/context.h
+ * \brief Control plane context override.
+ * \ingroup test
+ */
+#include "cp/types.h"
+#include "cp/eoc/cco/action/inc/cco_action.h"
+#include "cp/cco/action/inc/cco_action.h"
+#include "cp/sta/action/inc/context.h"
+#include "cp/eoc/beacon/inc/beacon.h"
+#include "cp/eoc/beacon/beacon.h"
+#include "cp/sta/mgr/sta_mgr.h"
+#include "cp/sta/mgr/inc/sta_mgr.h"
+#include "cp/cco/region/inc/context.h"
+#include "cp/cco/bw/bw.h"
+#include "cp/cco/bw/inc/context.h"
+#include "cl/cl.h"
+#include "mac/common/config.h"
+#include "mac/common/store.h"
+#include "mac/sar/sar.h"
+#include "mac/pbproc/pbproc.h"
+#include "lib/rnd.h"
+#include "lib/trace.h"
+#include "cp/eoc/cco/bw/inc/bw.h"
+#include "cp/inc/trace.h"
+#include "cp/fsm/fsm.h"
+#include "cp/fsm/inc/context.h"
+
+enum cp_handover_reason_t
+{
+ CP_HANDOVER_REASON_CCO_SELECTION,
+ CP_HANDOVER_REASON_CCO_LEAVING,
+ CP_HANDOVER_REASON_USER_APPOINT,
+ CP_HANDOVER_REASON_NB,
+};
+
+enum cp_handover_soft_hard_t
+{
+ CP_HANDOVER_SOFT_HARD_SOFT,
+ CP_HANDOVER_SOFT_HARD_HARD,
+ CP_HANDOVER_NB,
+};
+
+struct cp_handover_t
+{
+ /** Handover timeout. */
+ cp_sta_core_timed_event_def_t handover_timeout;
+
+ /** handover reason. */
+ enum cp_handover_reason_t reason;
+
+ /** Handover soft hard */
+ enum cp_handover_soft_hard_t soft_hard;
+};
+
+struct cp_t
+{
+ cp_fsm_t fsm;
+ cp_cco_action_t cco_action;
+ cp_sta_action_t sta_action;
+ cp_sta_mgr_t sta_mgr;
+ cp_beacon_t beacon;
+ lib_rnd_t rnd;
+ cl_t *cl;
+ mac_config_t *mac_config;
+ mac_store_t *mac_store;
+ sar_t *sar;
+ ca_t *ca;
+ pbproc_t *pbproc;
+ struct cp_handover_t handover;
+ struct cp_cco_region_t region;
+ struct cp_cco_bw_t bw;
+ bsu_t *bsu;
+ cp_eoc_cco_bw_sched_t schedule;
+
+#if CONFIG_TRACE
+ trace_buffer_t trace;
+#endif
+};
+
+#endif /* override_cp_inc_context_h */
diff --git a/cesar/cp/eoc/cco/action/test/utest_mcast/override/cp/sta/core/defs.h b/cesar/cp/eoc/cco/action/test/utest_mcast/override/cp/sta/core/defs.h
new file mode 100644
index 0000000000..9698b44e93
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/test/utest_mcast/override/cp/sta/core/defs.h
@@ -0,0 +1,57 @@
+#ifndef cp_sta_core_defs_h
+#define cp_sta_core_defs_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/sta/core/defs.h
+ * \brief Sta core defs.
+ * \ingroup cp/sta/core
+ *
+ */
+#include "cp/fsm/forward.h"
+
+/** Forward declaration. */
+typedef struct cp_sta_core_t cp_sta_core_t;
+
+/*
+ * the sta core event flags
+ * these are some flags, so take care to give a value with all bits set to 0 but one.
+ */
+enum cp_sta_core_event_flag_t
+{
+ CP_STA_CORE_EVENT_FLAG_RECV_BEACON = 0x1,
+ CP_STA_CORE_EVENT_FLAG_RECV_MME = 0x2,
+ CP_STA_CORE_EVENT_FLAG_FSM = 0x4,
+ CP_STA_CORE_EVENT_FLAG_GARBAGE = 0x8,
+ CP_STA_CORE_EVENT_FLAG_TERMINATE = 0x10
+};
+typedef enum cp_sta_core_event_flag_t cp_sta_core_event_flag_t;
+
+/** Definition of alarm info structure
+ * (applications should not use it directly but use "alias" defined just below) */
+struct cp_sta_core_timed_event_def_t
+{
+ /* eCos alarm. */
+ uint alarm;
+ /* eCos alarm handle. */
+ uint alarm_handle;
+ /* the sta core event flag to set
+ * (auto or user-specified when creating/launching timer alarm). */
+ cp_sta_core_event_flag_t event_flag;
+ /* FSM event specified when creating/launching timer alarm
+ * (set if the previous flag is CP_STA_CORE_EVENT_FLAG_FSM). */
+ cp_fsm_event_t *fsm_event;
+ /* flag indicating a periodic alarm (if set to true)
+ * or one-shot alarm (if set to false). */
+ bool cyclic_alarm;
+ /* pointer to CP context. */
+ cp_t *cp_ctx;
+};
+typedef struct cp_sta_core_timed_event_def_t cp_sta_core_timed_event_def_t;
+
+#endif /* cp_sta_core_defs_h */
diff --git a/cesar/cp/eoc/cco/action/test/utest_mcast/override/cyg/kernel/kapi.h b/cesar/cp/eoc/cco/action/test/utest_mcast/override/cyg/kernel/kapi.h
new file mode 100644
index 0000000000..019e5d3a07
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/test/utest_mcast/override/cyg/kernel/kapi.h
@@ -0,0 +1,37 @@
+#ifndef override_cyg_kernel_kapi_h
+#define override_cyg_kernel_kapi_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2010 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file override/cyg/kernel/kapi.h
+ * \brief override some kernel api from <cyg/kernel/kapi.h>.
+ * \ingroup cp_msg
+ *
+ *
+ */
+
+struct cyg_resolution_t
+{
+ u32 dividend;
+ u32 divisor;
+} ;
+
+typedef struct cyg_resolution_t cyg_resolution_t;
+
+typedef u64 cyg_tick_count_t;
+
+int
+cyg_real_time_clock (void);
+
+cyg_resolution_t
+cyg_clock_get_resolution (int clock);
+
+cyg_tick_count_t
+cyg_current_time (void);
+
+#endif
diff --git a/cesar/cp/eoc/cco/action/test/utest_mcast/override/mac/sar/inc/context.h b/cesar/cp/eoc/cco/action/test/utest_mcast/override/mac/sar/inc/context.h
new file mode 100644
index 0000000000..3cf70530df
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/test/utest_mcast/override/mac/sar/inc/context.h
@@ -0,0 +1,24 @@
+#ifndef override_mac_sar_inc_context_h
+#define override_mac_sar_inc_context_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2009 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file override/mac/sar/inc/context.h
+ * \brief « brief description »
+ * \ingroup « module »
+ *
+ * « long description »
+ */
+#include "mac/common/store.h"
+
+struct sar_t
+{
+ mac_store_t *mac_store;
+};
+
+#endif /* override_mac_sar_inc_context_h */
diff --git a/cesar/cp/eoc/cco/action/test/utest_mcast/src/cl_mcast.c b/cesar/cp/eoc/cco/action/test/utest_mcast/src/cl_mcast.c
new file mode 100644
index 0000000000..6eb9f07fd2
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/test/utest_mcast/src/cl_mcast.c
@@ -0,0 +1,60 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2011 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/cco/action/test/scenario/src/cl_mcast.c
+ * \brief Multicast.
+ * \ingroup cp_eoc_cco_action_test_scenario
+ */
+#include "common/std.h"
+#include "cl/cl.h"
+#include "cl/mcast.h"
+#include "config/cl/eoc/route.h"
+#include "cl/inc/context.h"
+
+igmp_groups_t*
+cl_get_igmp_groups (cl_t *ctx)
+{
+ dbg_assert (ctx);
+ return &ctx->groups;
+}
+
+void
+cl_update_igmp_groups (cl_t *ctx)
+{
+ dbg_assert (ctx);
+ uint g;
+ uint m;
+ for (g = 0; g < ctx->groups.nb; g++)
+ {
+ uint tei = MAC_TEI_UNASSOCIATED;
+ ctx->groups.nb_actual_members[g] = 0;
+
+ for (m = 0; m < ctx->groups.nb_total_members[g]; m++)
+# if CONFIG_CL_EOC_ROUTE
+ {
+ tei = cl_eoc_mactotei_find_tei (
+ ctx, ctx->groups.member_mac[g][m]);
+ if (MAC_TEI_IS_EOC_STA (tei))
+ ctx->groups.member_tei[g][ctx->groups.nb_actual_members[g]++] =
+ tei;
+ }
+ if (ctx->groups.nb_actual_members[g] == 0)
+ ctx->groups.member_tei[g][0] = MAC_TEI_UNASSOCIATED;
+#else
+ {
+ tei = cl_mactotei_table_find_tei_from_mac (
+ ctx, ctx->groups.member_mac[g][m]);
+ if (MAC_TEI_IS_STA(tei))
+ ctx->groups.member_tei[g][ctx->groups.nb_actual_members[g]++] =
+ tei;
+ }
+ if (ctx->groups.nb_actual_members[g] == 0)
+ ctx->groups.member_tei[g][0] = MAC_TEI_BCAST;
+#endif
+ }
+}
diff --git a/cesar/cp/eoc/cco/action/test/utest_mcast/src/fsm_stub.c b/cesar/cp/eoc/cco/action/test/utest_mcast/src/fsm_stub.c
new file mode 100644
index 0000000000..993bffaaaa
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/test/utest_mcast/src/fsm_stub.c
@@ -0,0 +1,55 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/fsm_stub.c
+ * \brief FSM stub.
+ * \ingroup test
+ */
+#include "common/std.h"
+#include "cp/fsm/fsm.h"
+
+#include "lib/scenario/scenario.h"
+
+cp_fsm_event_t *
+cp_fsm_event_bare_new (cp_t *ctx, cp_fsm_event_type_t type)
+{
+ dbg_assert (ctx);
+ switch (type)
+ {
+ case CP_FSM_EVENT_TYPE_net_list_empty:
+ /* Ignore. */
+ return INVALID_PTR;
+ case CP_FSM_EVENT_TYPE_sta_status_changed:
+ if (!scenario.current ||
+ (scenario.current->params.event_cp_fsm_event_bare_new.type != type))
+ return INVALID_PTR;
+
+ default:
+ ;
+ }
+ scenario_event (cp_fsm_event_bare_new, param);
+ test_fail_unless (type == param->type);
+ return INVALID_PTR;
+}
+
+cp_fsm_event_t *
+cp_fsm_event_mme_new (cp_t *ctx, cp_fsm_event_type_t type, cp_mme_rx_t *mme)
+{
+ dbg_assert (ctx);
+ scenario_event (cp_fsm_event_mme_new, param);
+ test_fail_unless (type == param->type);
+ return INVALID_PTR;
+}
+
+void
+cp_fsm_branch_ (cp_t *ctx, cp_fsm_branch_t branch)
+{
+ dbg_assert (ctx);
+ scenario_event (cp_fsm_branch, param);
+ test_fail_unless (branch == param->branch);
+}
diff --git a/cesar/cp/eoc/cco/action/test/utest_mcast/src/msg_stub.c b/cesar/cp/eoc/cco/action/test/utest_mcast/src/msg_stub.c
new file mode 100644
index 0000000000..c9beef391b
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/test/utest_mcast/src/msg_stub.c
@@ -0,0 +1,289 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2011 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/msg_stub.c
+ * \brief cp_msg_stub functions.
+ * \ingroup cp_msg
+ */
+#include "common/std.h"
+#include "lib/scenario/scenario.h"
+#include "cp/inc/context.h"
+#include "cp/msg/msg.h"
+
+#define __ptr_(TYPE) PASTE_EXPAND (__ptr__, TYPE)
+#define __ptr__assign *
+#define __ptr__string
+#define __ptr__array
+#define __ptr__string_or_null
+#define __ptr__tonemask
+#define __ptr__hash_key
+
+#define __dim_(TYPE, DIM...) PASTE_EXPAND (__dim__, TYPE) (DIM)
+#define __dim__assign()
+#define __dim__string()
+#define __dim__array(DIM) DIM
+#define __dim__string_or_null()
+#define __dim__tonemask()
+#define __dim__hash_key()
+
+/* Code for MME transmission. */
+#define __ms(EVENT, PARAMS...) \
+void \
+EVENT (cp_t *ctx, cp_mme_peer_t *peer \
+ PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __ms_pdecl_, ## PARAMS)) \
+{ \
+ dbg_assert (ctx); \
+ dbg_assert (peer); \
+ scenario_event (EVENT, param); \
+ __ms_test_peer \
+ PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __ms_test_, ## PARAMS) \
+}
+
+/* Code for MME transmission complex with a begin. */
+#define __mscb(EVENT, PARAMS...) \
+cp_mme_tx_t * \
+EVENT (cp_t *ctx, cp_mme_peer_t *peer \
+ PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __ms_pdecl_, ## PARAMS)) \
+{ \
+ dbg_assert (ctx); \
+ dbg_assert (peer); \
+ scenario_event (EVENT, param, global); \
+ PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __ms_test_, ## PARAMS) \
+ return global->mme; \
+}
+
+/* Code for MME transmission complex (with or without an end). */
+#define __msc(EVENT, PARAMS...) \
+void \
+EVENT (cp_t *ctx, cp_mme_tx_t *mme \
+ PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __ms_pdecl_, ## PARAMS)) \
+{ \
+ dbg_assert (ctx); \
+ dbg_assert (mme); \
+ scenario_event (EVENT, param); \
+ test_fail_unless (param); \
+ PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __ms_test_, ## PARAMS) \
+}
+
+#define __msdc(EVENT, DATA, PARAMS...) \
+void \
+EVENT (cp_t *ctx, cp_mme_tx_t *mme, const DATA *data) \
+{ \
+ dbg_assert (ctx); \
+ dbg_assert (mme); \
+ dbg_assert (data); \
+ scenario_event (EVENT, param); \
+ PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __msd_test_, ## PARAMS) \
+}
+
+#define __ms_pdecl_(TYPE, PARAM, KIND) , TYPE PARAM
+#define __ms_test_(TYPE, PARAM, KIND) \
+ PASTE_EXPAND (__ms_test__, KIND) (PARAM)
+#define __ms_test__assign(PARAM) \
+ test_fail_unless (PARAM == param->PARAM);
+#define __ms_test__ignore_pointer(PARAM)
+#define __ms_test__string(PARAM) \
+ test_fail_unless (strcmp (PARAM, param->PARAM) == 0);
+#define __ms_test_peer \
+ test_fail_unless (peer->mac == param->peer.mac); \
+ test_fail_unless (peer->eth_type == param->peer.eth_type); \
+ test_fail_unless (peer->vlan_tci == param->peer.vlan_tci); \
+ test_fail_unless (peer->tei == param->peer.tei); \
+
+/* Code for MME transmission with a data structure. */
+#define __msd(EVENT, DATA, PARAMS...) \
+void \
+EVENT (cp_t *ctx, cp_mme_peer_t *peer, const DATA *data) \
+{ \
+ dbg_assert (ctx); \
+ dbg_assert (peer); \
+ dbg_assert (data); \
+ scenario_event (EVENT, param); \
+ __ms_test_peer \
+ PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __msd_test_, ## PARAMS) \
+}
+
+#define __msd_test_(TYPE, PARAM, KIND) \
+ PASTE_EXPAND (__msd_test__, KIND) (PARAM)
+#define __msd_test__assign(PARAM) \
+ test_fail_unless (data->PARAM == param->PARAM);
+#define __msd_test__string(PARAM) \
+ test_fail_unless (strcmp (data->PARAM, param->PARAM) == 0);
+#define __msd_test__hash_key(PARAM) \
+ test_fail_unless (!param->PARAM || memcmp (data->PARAM, param->PARAM, \
+ CP_HASH_KEY_SIZE) == 0);
+#define __msd_test__key(PARAM) \
+ test_fail_unless (memcmp (&data->PARAM, &param->PARAM, \
+ sizeof (cp_key_t)) == 0);
+#define __ms_test__key(PARAM) \
+ test_fail_unless (memcmp (&PARAM, &param->PARAM, \
+ sizeof (cp_key_t)) == 0);
+#define __msd_test__sub_assign(PARAM) \
+ __msd_test__sub_assign_ PARAM
+#define __msd_test__sub_assign_(PARAM, SUBNAME) \
+ test_fail_unless (data->SUBNAME.PARAM == param->PARAM);
+#define __msd_test__ignore_pointer(PARAM) ;
+
+#define __msd_test__array(PARAM) \
+ __msd_test__array_ PARAM
+#define __msd_test__array_(PARAM, SIZE) \
+ test_fail_unless (memcmp (data->PARAM, param->PARAM, SIZE) == 0);
+
+/* Code for MME transmission with a data structure with encryption
+ * information. */
+#define __msk(EVENT, DATA, PARAMS...) \
+void \
+EVENT (cp_t *ctx, cp_mme_peer_t *peer, cp_mme_peks_t peks, \
+ const cp_secu_protocol_run_t *prun, const DATA *data) \
+{ \
+ dbg_assert (ctx); \
+ dbg_assert (peer); \
+ dbg_assert (data); \
+ scenario_event (EVENT, param, global); \
+ __ms_test_peer \
+ test_fail_unless (peks == param->peks); \
+ test_fail_unless (prun->pid == param->pid); \
+ test_fail_unless (prun->pmn == param->pmn); \
+ global->prn = prun->prn; \
+ global->my_nonce = prun->my_nonce; \
+ PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __msd_test_, ## PARAMS) \
+}
+
+/* Code for MME transmission for CC_RELAY.IND. */
+#define __msr(EVENT, PARAMS...) \
+void \
+EVENT (cp_t *ctx, cp_mme_rx_t *mme \
+ PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __ms_pdecl_, ## PARAMS)) \
+{ \
+ dbg_assert (ctx); \
+ dbg_assert (mme); \
+ scenario_event (EVENT, param); \
+ test_fail_unless (mme->relay.mac_fa == param->mac_fa); \
+ test_fail_unless (mme->relay.ftei == param->ftei); \
+ PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __ms_test_, ## PARAMS) \
+}
+
+
+/* Code for MME reception. */
+#define __mr(EVENT, PARAMS...) \
+bool \
+EVENT (cp_t *ctx, cp_mme_rx_t *mme \
+ PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __mr_pdecl_, ## PARAMS)) \
+{ \
+ dbg_assert (ctx); \
+ dbg_assert (mme); \
+ PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __mr_assert_, ## PARAMS) \
+ scenario_event (EVENT, param); \
+ if (param->ok) \
+ { \
+ PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __mr_copy_, ## PARAMS) \
+ return true; \
+ } \
+ else \
+ return false; \
+}
+
+#define __mr_pdecl_(TYPE, PARAM, KIND, DIM...) \
+ , TYPE __ptr_ (KIND) PARAM __dim_ (KIND, ## DIM)
+#define __mr_assert_(TYPE, PARAM, KIND, DIM...) dbg_assert_ptr (PARAM);
+#define __mr_copy_(TYPE, PARAM, KIND, DIM...) \
+ PASTE_EXPAND (__mr_copy__, KIND) (PARAM, TYPE, ## DIM)
+
+#define __mr_copy__assign(PARAM, TYPE) *PARAM = param->PARAM;
+#define __mr_copy__string(PARAM, TYPE) strcpy (PARAM, param->PARAM);
+#define __mr_copy__string_or_null(PARAM, TYPE) \
+ if (param->PARAM) strcpy (PARAM, param->PARAM);
+#define __mr_copy__tonemask(PARAM, TYPE) \
+ memcpy (PARAM, param->PARAM, PHY_TONEMASK_SIZE);
+#define __mr_copy__array(PARAM, TYPE, DIM) \
+ memcpy (PARAM, param->PARAM, sizeof(TYPE DIM));
+
+/* Code for MME reception with a data structure. */
+#define __mrd(EVENT, DATA, PARAMS...) \
+bool \
+EVENT (cp_t *ctx, cp_mme_rx_t *mme, DATA *data) \
+{ \
+ dbg_assert (ctx); \
+ dbg_assert (mme); \
+ dbg_assert (data); \
+ scenario_event (EVENT, param); \
+ if (param->ok) \
+ { \
+ PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __mrd_copy_, PARAMS) \
+ return true; \
+ } \
+ else \
+ return false; \
+}
+
+#define __mrd_copy_(TYPE, PARAM, KIND) \
+ PASTE_EXPAND (__mrd_copy__, KIND) (PARAM)
+
+#define __mrd_copy__assign(PARAM) data->PARAM = param->PARAM;
+#define __mrd_copy__string(PARAM) strcpy (data->PARAM, param->PARAM);
+#define __mrd_copy__tonemask(PARAM) \
+ memcpy (data->PARAM, param->PARAM, PHY_TONEMASK_SIZE);
+#define __mrd_copy__hash_key(PARAM) \
+ if (param->PARAM) memcpy (data->PARAM, param->PARAM, CP_HASH_KEY_SIZE);
+#define __mrd_copy__assign_deref(PARAM) \
+ if (param->PARAM) data->PARAM = *param->PARAM;
+
+/* Code for MME reception with a data structure with encryption
+ * information. */
+#define __mrk(EVENT, DATA, PARAMS...) \
+bool \
+EVENT (cp_t *ctx, cp_mme_rx_t *mme, DATA *data) \
+{ \
+ dbg_assert (ctx); \
+ dbg_assert (mme); \
+ dbg_assert (data); \
+ scenario_event (EVENT, param, g); \
+ if (param->ok) \
+ { \
+ mme->peks = param->peks; \
+ if (param->new_prn) g->prn = lib_rnd32 (&ctx->rnd) & 0xffff; \
+ if (param->new_my_nonce) g->my_nonce = lib_rnd32 (&ctx->rnd); \
+ if (param->new_your_nonce) g->your_nonce = lib_rnd32 (&ctx->rnd); \
+ mme->prun.pid = param->pid; \
+ mme->prun.pmn = param->pmn; \
+ mme->prun.prn = g->prn; \
+ mme->prun.my_nonce = g->my_nonce; \
+ mme->prun.your_nonce = g->your_nonce; \
+ PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __mrd_copy_, PARAMS) \
+ return true; \
+ } \
+ else \
+ return false; \
+}
+
+/* Code for MME reception for CC_RELAY.REQ. */
+#define __mrr(EVENT, PARAMS...) \
+bool \
+EVENT (cp_t *ctx, cp_mme_rx_t *mme \
+ PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __mr_pdecl_, ## PARAMS)) \
+{ \
+ dbg_assert (ctx); \
+ dbg_assert (mme); \
+ PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __mr_assert_, ## PARAMS) \
+ scenario_event (EVENT, param); \
+ if (param->ok) \
+ { \
+ mme->relay.mac_fa = param->mac_fa; \
+ mme->relay.ftei = param->ftei; \
+ PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __mr_copy_, ## PARAMS) \
+ return true; \
+ } \
+ else \
+ return false; \
+}
+
+__mr (cp_msg_drv_mcast_set_list_req_receive,
+ (uint, nb_groups, assign),
+ (mac_t, groups, array, [MCAST_GROUP_MAX_NB]),
+ (uint, nb_members, array, [MCAST_GROUP_MAX_NB]),
+ (mac_t, members, array, [MCAST_GROUP_MAX_NB][MCAST_MEMBER_MAX_NB]))
diff --git a/cesar/cp/eoc/cco/action/test/utest_mcast/src/scenario_actions.c b/cesar/cp/eoc/cco/action/test/utest_mcast/src/scenario_actions.c
new file mode 100644
index 0000000000..edcd638f3b
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/test/utest_mcast/src/scenario_actions.c
@@ -0,0 +1,72 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/scenario_actions.c
+ * \brief Scenario actions.
+ * \ingroup test
+ */
+#include "common/std.h"
+#include "cp/eoc/cco/action/cco_action.h"
+#include "lib/scenario/scenario.h"
+
+#define __m(ACTION) \
+void \
+scenario_action_ ## ACTION ## _cb (scenario_globals_t *globals, \
+ scenario_params_t *params) \
+{ \
+ static cp_mme_rx_t mme; \
+ mme.peer = params->action_ ## ACTION.peer; \
+ cp_eoc_cco_action_ ## ACTION (globals->cp, &mme); \
+}
+
+#define __mp(ACTION) \
+void \
+scenario_action_ ## ACTION ## _cb (scenario_globals_t *globals, \
+ scenario_params_t *params) \
+{ \
+ ccotic cp_mme_rx_t mme; \
+ mme.peer = params->action_ ## ACTION.peer; \
+ mme.prun.pid = params->action_ ## ACTION.pid; \
+ cp_eoc_cco_action_ ## ACTION (globals->cp, &mme); \
+}
+
+#define __me(ACTION) \
+void \
+scenario_action_ ## ACTION ## _cb (scenario_globals_t *globals, \
+ scenario_params_t *params) \
+{ \
+ ccotic cp_mme_rx_t mme; \
+ mme.peer = params->action_ ## ACTION.peer; \
+ mme.encrypt = params->action_ ## ACTION.encrypt; \
+ cp_eoc_cco_action_ ## ACTION (globals->cp, &mme); \
+}
+
+#define __0(ACTION) \
+void \
+scenario_action_ ## ACTION ## _cb (scenario_globals_t *globals, \
+ scenario_params_t *params) \
+{ \
+ cp_eoc_cco_action_ ## ACTION (globals->cp); \
+}
+
+#define __n(ACTION, PARAMS...) \
+void \
+scenario_action_ ## ACTION ## _cb (scenario_globals_t *globals, \
+ scenario_params_t *params) \
+{ \
+ scenario_action_ ## ACTION ## _t *p = &params->action_ ## ACTION; \
+ cp_eoc_cco_action_ ## ACTION (globals->cp \
+ PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, \
+ __n_args, ## PARAMS) \
+ ); \
+}
+
+#define __n_args(TYPE, PARAM) \
+ , p->PARAM
+
+__m (drv__drv_mcast_set_list_req)
diff --git a/cesar/cp/eoc/cco/action/test/utest_mcast/src/test_cco_action.c b/cesar/cp/eoc/cco/action/test/utest_mcast/src/test_cco_action.c
new file mode 100644
index 0000000000..8659c74c13
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/test/utest_mcast/src/test_cco_action.c
@@ -0,0 +1,75 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/test_sta_action.c
+ * \brief Test sta/action.
+ * \ingroup test
+ */
+#include "common/std.h"
+#include "lib/test.h"
+#include "cp/eoc/multi_sta_fsm/forward.h"
+#include "cl/inc/context.h"
+#include "mac/sar/inc/context.h"
+#include "inc/test_cco_action.h"
+
+void
+test_suite_mcast (test_t test);
+
+void
+test_cco_action_init (test_cco_action_t *ctx)
+{
+ static sar_t sar;
+ static cl_t cl;
+ memset (&cl, 0, sizeof (cl_t));
+
+ lib_rnd_init (&ctx->cp.rnd, 1234);
+ ctx->cp.mac_config = &ctx->mac_config;
+ ctx->cp.mac_store = mac_store_init ();
+ ctx->cp.sar = &sar;
+ ctx->cp.cl = &cl;
+ sar.mac_store = ctx->cp.mac_store;
+ ctx->cp.pbproc = NULL;
+ cp_eoc_sta_mgr_init (&ctx->cp);
+}
+
+void
+test_cco_action_uninit (test_cco_action_t *ctx)
+{
+ cp_sta_mgr_uninit (&ctx->cp);
+ mac_store_uninit (ctx->cp.mac_store);
+}
+
+void
+test_cco_action_reset (test_cco_action_t *ctx)
+{
+ cp_sta_mgr_uninit (&ctx->cp);
+ mac_store_uninit (ctx->cp.mac_store);
+ ctx->cp.mac_store = mac_store_init ();
+ cp_eoc_sta_mgr_init (&ctx->cp);
+}
+
+int
+main (int argc, char **argv)
+{
+ test_t t;
+ test_init (t, argc, argv);
+ trace_init ();
+ lib_stats_init ();
+ test_suite_mcast (t);
+ lib_stats_uninit ();
+ trace_uninit ();
+ test_case_begin (t, "Memory allocation");
+ test_begin (t, "memory leaks")
+ {
+ test_fail_if (blk_check_memory () != true, "Memory leaks");
+ }
+ test_end;
+ test_result (t);
+ return test_nb_failed (t) == 0 ? 0 : 1;
+}
+
diff --git a/cesar/cp/eoc/cco/action/test/utest_mcast/src/test_mcast_suite.c b/cesar/cp/eoc/cco/action/test/utest_mcast/src/test_mcast_suite.c
new file mode 100644
index 0000000000..2352da0115
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/test/utest_mcast/src/test_mcast_suite.c
@@ -0,0 +1,97 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2011 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/mcast.c
+ * \brief Multicast test.
+ * \ingroup cp_eoc
+ */
+#include "common/std.h"
+#include "lib/test.h"
+#include "lib/scenario/scenario.h"
+#include "inc/test_cco_action.h"
+#include "cl/mcast.h"
+
+void
+test_suite_mcast (test_t test)
+{
+ test_cco_action_t ctx;
+ test_cco_action_init (&ctx);
+ cp_cco_action_init (&ctx.cp);
+ scenario_globals_t globals = {
+ .cp = &ctx.cp,
+ };
+
+ test_suite_begin (test, "Multicast");
+ test_case_begin (test, "No groups");
+ test_begin (test, "MME received with errors")
+ {
+ igmp_groups_t *igmp = cl_get_igmp_groups (ctx.cp.cl);
+ igmp->nb = 10;
+ scenario_entry_t entry [] = {
+ SCENARIO_ACTION (drv__drv_mcast_set_list_req,
+ .peer = CP_MME_PEER (3, 3)),
+ SCENARIO_EVENT (cp_msg_drv_mcast_set_list_req_receive,
+ .ok = false),
+ SCENARIO_END
+ };
+ scenario_run (test, entry, &globals);
+ test_fail_unless (igmp->nb == 0);
+ }
+ test_end;
+ test_begin (test, "Test all groups cases")
+ {
+ igmp_groups_t *igmp = cl_get_igmp_groups (ctx.cp.cl);
+ igmp->nb = 0;
+ uint nb_groups;
+ mac_t groups[MCAST_GROUP_MAX_NB];
+ uint nb_members[MCAST_GROUP_MAX_NB];
+ mac_t members[MCAST_GROUP_MAX_NB][MCAST_MEMBER_MAX_NB];
+
+ mac_t gmac = 0xAA0000000000ll;
+ mac_t mmac = 0xFF0000000000ll;
+ for (nb_groups = 0; nb_groups < MCAST_GROUP_MAX_NB; nb_groups++)
+ {
+ groups[nb_groups] = gmac + nb_groups;
+ for (nb_members[nb_groups] = 0;
+ nb_members[nb_groups] < MCAST_MEMBER_MAX_NB;
+ nb_members[nb_groups]++)
+ {
+ members[nb_groups][nb_members[nb_groups]] =
+ mmac | (nb_groups << 8) | nb_members[nb_groups];
+
+ scenario_entry_t entry [] = {
+ SCENARIO_ACTION (drv__drv_mcast_set_list_req,
+ .peer = CP_MME_PEER (3, 3)),
+ SCENARIO_EVENT (cp_msg_drv_mcast_set_list_req_receive,
+ .ok = true,
+ .nb_groups = nb_groups,
+ .groups = groups,
+ .nb_members = nb_members,
+ .members = (mac_t*)members),
+ SCENARIO_END
+ };
+ scenario_run (test, entry, &globals);
+ /* Verify. */
+ test_fail_unless (igmp->nb == nb_groups);
+ uint i, j;
+ for (i = 0; i < igmp->nb; i++)
+ {
+ test_fail_unless (igmp->group_mac[i] == gmac + i);
+ test_fail_unless (igmp->nb_total_members[i] == nb_members[i]);
+ for (j = 0; j < nb_members[i]; j++)
+ {
+ test_fail_unless (igmp->member_mac[i][j] ==
+ (mmac | (i << 8) | j));
+ }
+ }
+ }
+ }
+ }
+ test_end;
+ test_cco_action_uninit (&ctx);
+}
diff --git a/cesar/cp/eoc/cco/action/vs_eoc_master.h b/cesar/cp/eoc/cco/action/vs_eoc_master.h
new file mode 100644
index 0000000000..48205a40db
--- /dev/null
+++ b/cesar/cp/eoc/cco/action/vs_eoc_master.h
@@ -0,0 +1,100 @@
+#ifndef cp_eoc_cco_action_vs_eoc_master_h
+#define cp_eoc_cco_action_vs_eoc_master_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2012 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/cco/action/vs_eoc_master.h
+ * \brief « brief description »
+ * \ingroup cp_eoc_cco_action
+ *
+ * « long description »
+ */
+#include "cp/cp.h"
+#include "cp/mme.h"
+
+/* After sending a CC_LEAVE mme to a sta,
+ * wait 100ms before removing the sta from lists. */
+#define LEAVE_REMOVE_WAIT_TIMEOUT_MS 300
+
+BEGIN_DECLS
+
+/**
+ * TODO
+ */
+void
+cp_eoc_cco_action_vs__stopped__vs_cco_set_wl_req (
+ cp_t *ctx, cp_mme_rx_t *mme);
+
+/**
+ * TODO
+ */
+void
+cp_eoc_cco_action_vs__cco__vs_set_out_lev_ind (
+ cp_t *ctx, cp_mme_peer_t *peer);
+
+/**
+ * TODO
+ */
+void
+cp_eoc_cco_action_vs_eoc__cco__vs_eoc_set_ports_req (
+ cp_t *ctx, cp_mme_rx_t *mme);
+
+/**
+ * Handle CCO => VS_EOC_GET_TOPO.REQ.
+ * \param ctx control plane context
+ * \param mme received MME handle
+ */
+void
+cp_eoc_cco_action_vs_eoc__cco__vs_eoc_get_topo_req (
+ cp_t *ctx, cp_mme_rx_t *mme);
+
+/**
+ * TODO
+ */
+void
+cp_eoc_cco_action_vs__stopped__vs_cco_get_wl_req (
+ cp_t *ctx, cp_mme_rx_t *mme);
+
+/**
+ * TODO
+ */
+void
+cp_eoc_cco_action_vs_eoc__cco__vs_eoc_cco_get_ports_req (
+ cp_t *ctx, cp_mme_rx_t *mme);
+
+/**
+ * TODO
+ */
+void
+cp_eoc_cco_action_vs_eoc__cco__vs_eoc_cco_set_services_req (
+ cp_t *ctx, cp_mme_rx_t *mme);
+
+/**
+ * TODO
+ */
+void
+cp_eoc_cco_action_vs_eoc__cco__vs_eoc_cco_get_services_req (
+ cp_t *ctx, cp_mme_rx_t *mme);
+
+/**
+ * TODO
+ */
+void
+cp_eoc_cco_action_vs_eoc__cco__vs_eoc_get_info_req (
+ cp_t *ctx, cp_mme_rx_t *mme);
+
+/**
+ * TODO
+ */
+void
+cp_eoc_cco_action_vs_eoc__cco__vs_eoc_diagnostic_info_req (
+ cp_t *ctx, cp_mme_rx_t *mme);
+
+END_DECLS
+
+#endif /* cp_eoc_cco_action_vs_eoc_master_h */
diff --git a/cesar/cp/eoc/cco/bw/Module b/cesar/cp/eoc/cco/bw/Module
new file mode 100644
index 0000000000..5e4eb8410c
--- /dev/null
+++ b/cesar/cp/eoc/cco/bw/Module
@@ -0,0 +1,3 @@
+SOURCES := bw.c service.c
+
+MODULES := cp/cco/bw
diff --git a/cesar/cp/eoc/cco/bw/bw.h b/cesar/cp/eoc/cco/bw/bw.h
new file mode 100644
index 0000000000..451a8b8a7c
--- /dev/null
+++ b/cesar/cp/eoc/cco/bw/bw.h
@@ -0,0 +1,66 @@
+#ifndef cp_eoc_cco_bw_bw_h
+#define cp_eoc_cco_bw_bw_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2009 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/cco/bw/bw.h
+ * \brief Beacon Period allocation management
+ * \ingroup cp_eoc_cco_bw
+*/
+#include "cp/cp.h"
+#include "lib/list.h"
+
+BEGIN_DECLS
+
+/**
+ * Adjust scheduling parameters according to number of carriers
+ * \param ctx the module context
+ * \param num_of_carriers actual number of carriers
+ * Info: number of carriers should not be less than 250, otherwise
+ * behavior of PBProc/CA could be problematic.
+ */
+void
+cp_eoc_cco_bw_allocations_adjust (cp_t *ctx, bool adjust);
+
+/**
+ * Create schedule bentry to be transmitted in EOC beacon
+ * \param ctx the CP module context
+ */
+void
+cp_eoc_cco_bw_bp_allocations (cp_t *ctx);
+
+/** Create allocations at CCo startup or for station that has missed some
+ * beacons
+ * \param ctx module context
+ */
+void
+cp_eoc_cco_bw_sta_allocations (cp_t *ctx);
+
+/**
+ * Initialise scheduler context
+ * \param ctx the CP module context
+ */
+void
+cp_eoc_cco_bw_sched_init (cp_t * ctx);
+
+/**
+ * Uninitialize scheduler context
+ * \param ctx the CP context
+ */
+void
+cp_eoc_cco_bw_sched_uninit (cp_t * ctx);
+
+/** Scheduler function for making scheduling allocations to be used by CA
+ * \param ctx Control Plane context
+ */
+void
+cp_eoc_cco_bw_scheduler (cp_t *ctx);
+
+END_DECLS
+
+#endif /* cp_eoc_cco_bw_bw_h */
diff --git a/cesar/cp/eoc/cco/bw/doc/bandwidth_scheduler.odt b/cesar/cp/eoc/cco/bw/doc/bandwidth_scheduler.odt
new file mode 100644
index 0000000000..eff6099934
--- /dev/null
+++ b/cesar/cp/eoc/cco/bw/doc/bandwidth_scheduler.odt
Binary files differ
diff --git a/cesar/cp/eoc/cco/bw/doc/beacon_period.odt b/cesar/cp/eoc/cco/bw/doc/beacon_period.odt
new file mode 100644
index 0000000000..558d5b43d7
--- /dev/null
+++ b/cesar/cp/eoc/cco/bw/doc/beacon_period.odt
Binary files differ
diff --git a/cesar/cp/eoc/cco/bw/inc/bw.h b/cesar/cp/eoc/cco/bw/inc/bw.h
new file mode 100644
index 0000000000..4298f7a032
--- /dev/null
+++ b/cesar/cp/eoc/cco/bw/inc/bw.h
@@ -0,0 +1,35 @@
+#ifndef cp_eoc_cco_bw_inc_bw_h
+#define cp_eoc_cco_bw_inc_bw_h
+/* Cesar project {{{
+ *
+ * Cppyright (C) 2009 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+#include "cp/eoc/cco/bw/inc/service.h"
+#include "cp/eoc/cco/bw/service.h"
+
+/** Minimal duration of CSMA period in EoC (ticks). Should not be less than 3ms*/
+#define MIN_CSMA_EOC_TCK MAX ((3 * BSU_ACLF_BP_CABLE_TCK / 100), \
+ MAC_US_TO_TCK (4300))
+/** Duration of allocation beacon */
+#define MIN_SPC_CENTRAL_TCK MAC_US_TO_TCK (1300)
+
+/** Duration of startup period on CCo */
+#define CP_EOC_CCO_STARTUP_PERIOD MAC_MS_TO_TCK (MAC_SEC_TO_MS (20))
+/** Duration of CSMA period in beacon during statrup */
+#define CP_EOC_CSMA_STARTUP_PERIOD MAC_MS_TO_TCK (25)
+
+/** Number of beacon periods to disconnect non-replying slave. */
+#define CP_EOC_CCO_RELEASE_LIMIT 10
+
+/** Scheduling context of CP */
+struct cp_eoc_cco_bw_sched_t
+{
+ /** Service pool of scheduling context*/
+ cp_eoc_cco_services_t services;
+};
+typedef struct cp_eoc_cco_bw_sched_t cp_eoc_cco_bw_sched_t;
+
+#endif /* cp_eoc_cco_bw_inc_bw_h */
diff --git a/cesar/cp/eoc/cco/bw/inc/service.h b/cesar/cp/eoc/cco/bw/inc/service.h
new file mode 100644
index 0000000000..43d6281232
--- /dev/null
+++ b/cesar/cp/eoc/cco/bw/inc/service.h
@@ -0,0 +1,63 @@
+#ifndef cp_eoc_cco_bw_inc_service_h
+#define cp_eoc_cco_bw_inc_service_h
+/* Cesar project {{{
+ *
+ * Cppyright (C) 2010 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+#include "lib/slab.h"
+#include "lib/list.h"
+
+#define MAX_NUMBER_OF_SERVICES 128
+#define SERVICE_PARAMETERS_NB 7
+
+/* Currently, maximum number of services is 128 */
+#define SERVICE_NOT_LIMITED 0x00
+
+/** Set of available services */
+struct cp_eoc_cco_services_t
+{
+ /** Slab allocator for services */
+ slab_cache_t slab;
+ /** List of services */
+ list_t service_list;
+ /** Number of services */
+ int service_nb;
+};
+
+/** Service parameters and classifying rules */
+struct cp_eoc_cco_bw_service_t
+{
+ /** Unique index specifying the service */
+ u8 service_index;
+ /** Classifying part */
+ u8 classsif_rule;
+ u16 classif_value;
+ /** Latency (ms) */
+ u16 latency;
+ /** Jitter (ms) */
+ u16 jitter;
+ /** Best effort bandwidth (10kbps) */
+ u16 dload_pir;
+ u16 uload_pir;
+ /** Promised bandwidth (10kbps) */
+ u16 dload_cir;
+ u16 uload_cir;
+ /** Priority */
+ u16 qos_prio;
+ /** Node for service list */
+ list_node_t service_node;
+ /** Automatic Connection Service, enabled/disabled */
+ bool acs;
+ /** Scheduling private part */
+ uint dload_pir_to_bp_bits;
+ uint uload_pir_to_bp_bits;
+ uint dload_cir_to_bp_bits;
+ uint uload_cir_to_bp_bits;
+ u8 polls_per_bp;
+};
+
+
+#endif /* cp_eoc_cco_bw_inc_service_h */
diff --git a/cesar/cp/eoc/cco/bw/service.h b/cesar/cp/eoc/cco/bw/service.h
new file mode 100644
index 0000000000..d6166ea32c
--- /dev/null
+++ b/cesar/cp/eoc/cco/bw/service.h
@@ -0,0 +1,73 @@
+#ifndef cp_eoc_cco_bw_service_h
+#define cp_eoc_cco_bw_service_h
+/* Cesar project {{{
+ *
+ * Cppyright (C) 2010 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/cco/bw/service.h
+ * \brief Services allocation and update
+ * \ingroup cp_eoc_cco_bw
+*/
+#include "cp/cp.h"
+
+/** Forward declaration. */
+typedef struct cp_eoc_cco_services_t cp_eoc_cco_services_t;
+typedef struct cp_eoc_cco_bw_service_t cp_eoc_cco_bw_service_t;
+
+BEGIN_DECLS
+
+/**
+ * Initialise services
+ * \param ctx the CP module context
+ */
+void
+cp_eoc_cco_services_init (cp_t *ctx);
+
+/**
+ * Initialise scheduler context
+ * \param ctx the CP module context
+ */
+void
+cp_eoc_cco_services_uninit (cp_t *ctx);
+
+/**
+ * Allocate memory for new service
+ * \param ctx the CP module context
+ * \return TODO
+ */
+cp_eoc_cco_bw_service_t *
+cp_eoc_cco_bw_service_alloc (cp_t *ctx);
+
+/**
+ * Find specified service from list of available services
+ * \param ctx the CP module context
+ * \param service_index index of wanted service
+ * \return TODO
+ */
+cp_eoc_cco_bw_service_t *
+cp_eoc_cco_bw_service_find (cp_t *ctx, uint service_index);
+
+/**
+ * Add new service to list of available services
+ * \param ctx the CP module context
+ * \param srv newly created service entry
+ */
+void
+cp_eoc_cco_bw_service_add (cp_t *ctx, cp_eoc_cco_bw_service_t *srv);
+
+/**
+ * Remove service from list of available services
+ * \param ctx the CP module context
+ * \param service_index service to be removed
+ * \return TODO
+ */
+bool
+cp_eoc_cco_bw_service_remove (cp_t *ctx, uint service_index);
+
+END_DECLS
+
+#endif /* cp_eoc_cco_bw_service_h */
diff --git a/cesar/cp/eoc/cco/bw/src/bw.c b/cesar/cp/eoc/cco/bw/src/bw.c
new file mode 100644
index 0000000000..a858521474
--- /dev/null
+++ b/cesar/cp/eoc/cco/bw/src/bw.c
@@ -0,0 +1,174 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2009 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/cco/bw/src/bw.c
+ * \brief Create the alloctions for beacon period and create CCo schedule
+ * \ingroup cp_eoc_cco_bw
+ *
+*/
+#include "common/std.h"
+
+/* Private headers. */
+#include "cp/inc/context.h"
+#include "cp/cco/bw/inc/context.h"
+#include "cp/eoc/cco/bw/inc/bw.h"
+
+/* Public headers. */
+#include "cp/eoc/cco/bw/bw.h"
+#include "cp/eoc/cco/bw/service.h"
+#include "cp/cco/bw/bw.h"
+#include "cp/sta/mgr/sta.h"
+
+static uint cp_eoc_cco_bw_csma_duration = MAC_US_TO_TCK (4300);
+static uint cp_eoc_cco_bw_central_tck = MIN_SPC_CENTRAL_TCK;
+
+void
+cp_eoc_cco_bw_allocations_adjust (cp_t *ctx, bool adjust)
+{
+ dbg_assert (ctx);
+ if (!adjust)
+ {
+ cp_eoc_cco_bw_csma_duration = MIN_CSMA_EOC_TCK;
+ cp_eoc_cco_bw_central_tck = MIN_SPC_CENTRAL_TCK;
+ }
+ else
+ {
+ cp_eoc_cco_bw_csma_duration = MAC_MS_TO_TCK (7);
+ cp_eoc_cco_bw_central_tck = MAC_MS_TO_TCK (2);
+ }
+ dbg_assert ((cp_eoc_cco_bw_csma_duration - cp_eoc_cco_bw_central_tck)
+ >= MAC_MS_TO_TCK (3));
+}
+
+/**
+ * Create schedule bentry to be transmitted in EOC beacon
+ * \param ctx the module context
+ */
+void
+cp_eoc_cco_bw_bp_allocations (cp_t *ctx)
+{
+ dbg_assert (ctx);
+ cp_cco_bw_alloc_t *alloc;
+ static bool startup_period = true;
+ static bool update_end_date = true;
+ static u32 startup_date_end;
+ if (update_end_date)
+ {
+#if MODULE_INCLUDED (hal_phy_maximus)
+ startup_date_end = phy_date () + MAC_MS_TO_TCK (3000);
+#else
+ startup_date_end = phy_date () + CP_EOC_CCO_STARTUP_PERIOD;
+#endif
+ update_end_date = false;
+ }
+
+ if (startup_period && !less_mod2p32 (phy_date (), startup_date_end))
+ startup_period = false;
+
+ cp_cco_bw_alloc_clean (ctx, &ctx->bw.alloc_list);
+
+ alloc = cp_cco_bw_alloc_init (ctx);
+ alloc->stpf = false;
+ alloc->glid = MAC_LID_SPC_CENTRAL;
+ alloc->end_time_atu = MAC_TCK_TO_ATU(cp_eoc_cco_bw_central_tck);
+ alloc->persistence = CP_CCO_BW_ALLOC_PERSISTENCE_NOT_PERSISTENT;
+ cp_cco_bw_alloc_add (ctx, &ctx->bw.alloc_list, alloc);
+ slab_release (alloc);
+
+ alloc = cp_cco_bw_alloc_init (ctx);
+ alloc->stpf = false;
+ alloc->glid = MAC_LID_LOCAL_CSMA;
+ if (startup_period)
+ {
+ alloc->end_time_atu = MAC_TCK_TO_ATU(CP_EOC_CSMA_STARTUP_PERIOD);
+ }
+ else
+ {
+ alloc->end_time_atu = MAC_TCK_TO_ATU(cp_eoc_cco_bw_csma_duration);
+ }
+ alloc->persistence = CP_CCO_BW_ALLOC_PERSISTENCE_NOT_PERSISTENT;
+ cp_cco_bw_alloc_add (ctx, &ctx->bw.alloc_list, alloc);
+ slab_release (alloc);
+
+ alloc = cp_cco_bw_alloc_init (ctx);
+ alloc->stpf = false;
+ alloc->glid = MAC_LID_CFPI;
+ alloc->end_time_atu = MAC_TCK_TO_ATU(BSU_ACLF_BP_CABLE_TCK);
+ alloc->persistence = CP_CCO_BW_ALLOC_PERSISTENCE_NOT_PERSISTENT;
+ cp_cco_bw_alloc_add (ctx, &ctx->bw.alloc_list, alloc);
+ slab_release (alloc);
+}
+
+/** Create allocations at CCo startup or for station that has missed some
+ * beacons
+ * \param ctx module context
+ */
+void
+cp_eoc_cco_bw_sta_allocations (cp_t *ctx)
+{
+ cp_cco_bw_alloc_t *alloc;
+ dbg_assert (ctx);
+
+ cp_cco_bw_alloc_clean (ctx, &ctx->bw.alloc_list);
+
+ alloc = cp_cco_bw_alloc_init (ctx);
+ alloc->stpf = false;
+ alloc->glid = MAC_LID_SPC_CENTRAL;
+ alloc->end_time_atu = MAC_TCK_TO_ATU(BSU_ACLF_BP_CABLE_TCK);
+ alloc->persistence = CP_CCO_BW_ALLOC_PERSISTENCE_NOT_PERSISTENT;
+ cp_cco_bw_alloc_add (ctx, &ctx->bw.alloc_list, alloc);
+ slab_release (alloc);
+}
+
+#if CONFIG_CP_EOC_IS_MASTER
+void
+cp_eoc_cco_bw_sched_init (cp_t * ctx)
+{
+ dbg_assert (ctx);
+ cp_eoc_cco_services_init (ctx);
+}
+
+void
+cp_eoc_cco_bw_scheduler (cp_t *ctx)
+{
+ sta_t *sta = NULL;
+ uint i;
+
+ dbg_assert ((sizeof (sta->poll_off) * 8) > CP_EOC_CCO_RELEASE_LIMIT);
+
+ for (i = MAC_TEI_STA_MIN_EOC; i < MAC_TEI_STA_MAX; i++)
+ {
+ sta = mac_store_sta_get (ctx->mac_store, i);
+ if (sta)
+ {
+ /* Manage stations not replying to poll. */
+ if (sta->poll_off & 1)
+ sta->poll_off <<= 1;
+ else
+ sta->poll_off = 0;
+
+ if (sta->poll_off & (1 << CP_EOC_CCO_RELEASE_LIMIT))
+ {
+ sta->tdma_poll = false;
+ sta->poll_off = 0;
+ ca_sta_update (ctx->ca, sta);
+ }
+ /* Release previously polled stations. */
+ blk_release (sta);
+ }
+ }
+}
+
+void
+cp_eoc_cco_bw_sched_uninit (cp_t *ctx)
+{
+ dbg_assert (ctx);
+ cp_eoc_cco_services_uninit (ctx);
+}
+
+#endif /* CONFIG_CP_EOC_IS_MASTER */
diff --git a/cesar/cp/eoc/cco/bw/src/service.c b/cesar/cp/eoc/cco/bw/src/service.c
new file mode 100644
index 0000000000..0d91b6b4e0
--- /dev/null
+++ b/cesar/cp/eoc/cco/bw/src/service.c
@@ -0,0 +1,137 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2010 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/cco/bw/src/service.c
+ * \brief Manages update of services availiable on CCo
+ * \ingroup cp_eoc_cco_bw
+ *
+*/
+#include "common/std.h"
+
+/* Private headers. */
+#include "cp/inc/context.h"
+#include "cp/eoc/cco/bw/inc/service.h"
+
+/* Public headers. */
+#include "cp/eoc/cco/bw/service.h"
+
+
+/** Convert bandwidth to bits per one beacon period.
+ * bandwidth is multiple of 1kbps, in bits (* 1000), to get value per one BP
+ * it is divided by 10, so finally (* 100)
+ * convert bandwidth in bytes per one PB (>> 3)
+ * in one PB there is 512 bytes of payload (>> 9)
+ * to send one PB it takes 5460 bits (* 5460)
+ * \param srv specified service to be calculated
+*/
+static void
+cp_eoc_cco_bw_service_bits_per_bp (cp_eoc_cco_bw_service_t *srv)
+{
+ dbg_assert (srv);
+ srv->dload_pir_to_bp_bits = (((uint)(srv->dload_pir * 100) >> 3) * 5460) >> 9;
+ srv->uload_pir_to_bp_bits = (((uint)(srv->uload_pir * 100) >> 3) * 5460) >> 9;
+ srv->dload_cir_to_bp_bits = (((uint)(srv->dload_cir * 100) >> 3) * 5460) >> 9;
+ srv->uload_cir_to_bp_bits = (((uint)(srv->uload_cir * 100) >> 3) * 5460) >> 9;
+}
+
+void
+cp_eoc_cco_services_init (cp_t *ctx)
+{
+ dbg_assert (ctx);
+
+ /* Set size of memory allocations*/
+ slab_cache_init (&ctx->schedule.services.slab, "Service slab",
+ sizeof (cp_eoc_cco_bw_service_t), NULL);
+
+ /* Initialize the list */
+ list_init (&ctx->schedule.services.service_list);
+
+ ctx->schedule.services.service_nb = 0;
+}
+
+void
+cp_eoc_cco_services_uninit (cp_t *ctx)
+{
+ cp_eoc_cco_bw_service_t *service;
+ list_node_t *list_node;
+
+ while (!list_empty (&ctx->schedule.services.service_list))
+ {
+ list_node = list_pop_back (&ctx->schedule.services.service_list);
+ service = PARENT_OF (cp_eoc_cco_bw_service_t, service_node,
+ list_node);
+ slab_release (service);
+ }
+
+ slab_cache_uninit (&ctx->schedule.services.slab);
+}
+
+cp_eoc_cco_bw_service_t *
+cp_eoc_cco_bw_service_alloc (cp_t *ctx)
+{
+ cp_eoc_cco_bw_service_t * service;
+
+ dbg_assert (ctx);
+
+ service = slab_alloc (&ctx->schedule.services.slab);
+ list_init_node (&service->service_node);
+
+ return service;
+}
+
+cp_eoc_cco_bw_service_t *
+cp_eoc_cco_bw_service_find (cp_t *ctx, uint service_index)
+{
+ cp_eoc_cco_bw_service_t * service = NULL;
+ list_node_t *list_node = NULL;
+
+ dbg_assert (ctx);
+
+ list_node = list_begin (&ctx->schedule.services.service_list);
+
+ while (list_node != &ctx->schedule.services.service_list.nil)
+ {
+ if (list_node)
+ service = PARENT_OF (cp_eoc_cco_bw_service_t, service_node, list_node);
+ if (service && (service_index == service->service_index))
+ return service;
+ list_node = list_next (list_node);
+ }
+
+ return NULL;
+}
+
+void
+cp_eoc_cco_bw_service_add (cp_t *ctx, cp_eoc_cco_bw_service_t *srv)
+{
+ dbg_assert (ctx);
+ dbg_assert (srv);
+ list_push_back (&ctx->schedule.services.service_list, &srv->service_node);
+ ctx->schedule.services.service_nb++;
+ cp_eoc_cco_bw_service_bits_per_bp (srv);
+}
+
+bool
+cp_eoc_cco_bw_service_remove (cp_t *ctx, uint service_index)
+{
+ cp_eoc_cco_bw_service_t * service = NULL;
+
+ dbg_assert (ctx);
+
+ service = cp_eoc_cco_bw_service_find (ctx, service_index);
+ if (service)
+ {
+ list_remove (&ctx->schedule.services.service_list,
+ &service->service_node);
+ slab_release (service);
+ ctx->schedule.services.service_nb--;
+ dbg_assert (ctx->schedule.services.service_nb >= 0);
+ return true;
+ }
+ return false;
+}
diff --git a/cesar/cp/eoc/cco/bw/stub/Module b/cesar/cp/eoc/cco/bw/stub/Module
new file mode 100644
index 0000000000..662b4c8860
--- /dev/null
+++ b/cesar/cp/eoc/cco/bw/stub/Module
@@ -0,0 +1,3 @@
+SOURCES:= bw.c service.c
+
+MODULES := cp/cco/bw/stub
diff --git a/cesar/cp/eoc/cco/bw/stub/src/bw.c b/cesar/cp/eoc/cco/bw/stub/src/bw.c
new file mode 100644
index 0000000000..96453fedae
--- /dev/null
+++ b/cesar/cp/eoc/cco/bw/stub/src/bw.c
@@ -0,0 +1,46 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2009 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/cco/bw/stub/src/bw.c
+ * \brief Create the alloctions for beacon period and create CCo schedule
+ * \ingroup cp_eoc_cco_bw_stub
+ *
+*/
+#include "common/std.h"
+#include "cp/cp.h"
+
+void
+cp_eoc_cco_bw_allocations_adjust (cp_t *ctx, bool adjust)
+ __attribute__((weak));
+void
+cp_eoc_cco_bw_allocations_adjust (cp_t *ctx, bool adjust) {}
+
+void
+cp_eoc_cco_bw_bp_allocations (cp_t *ctx) __attribute__((weak));
+void
+cp_eoc_cco_bw_bp_allocations (cp_t *ctx) {}
+
+void
+cp_eoc_cco_bw_sta_allocations (cp_t *ctx) __attribute__((weak));
+void
+cp_eoc_cco_bw_sta_allocations (cp_t *ctx) {}
+
+void
+cp_eoc_cco_bw_sched_init (cp_t * ctx) __attribute__((weak));
+void
+cp_eoc_cco_bw_sched_init (cp_t * ctx);
+
+void
+cp_eoc_cco_bw_sched_uninit (cp_t * ctx) __attribute__((weak));
+void
+cp_eoc_cco_bw_sched_uninit (cp_t * ctx);
+
+void
+cp_eoc_cco_bw_scheduler (void *user_data) __attribute__ ((weak));
+void
+cp_eoc_cco_bw_scheduler (void *user_data) {}
diff --git a/cesar/cp/eoc/cco/bw/stub/src/service.c b/cesar/cp/eoc/cco/bw/stub/src/service.c
new file mode 100644
index 0000000000..491896af59
--- /dev/null
+++ b/cesar/cp/eoc/cco/bw/stub/src/service.c
@@ -0,0 +1,59 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2009 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/cco/bw/stub/src/service.c
+ * \brief TODO
+ * \ingroup cp_eoc_cco_bw_stub
+ *
+*/
+#include "common/std.h"
+#include "cp/cp.h"
+#include "cp/eoc/cco/bw/service.h"
+
+void
+cp_eoc_cco_services_init (cp_t *ctx) __attribute__((weak));
+void
+cp_eoc_cco_services_init (cp_t *ctx) {}
+
+void
+cp_eoc_cco_services_uninit (cp_t *ctx) __attribute__((weak));
+void
+cp_eoc_cco_services_uninit (cp_t *ctx) {}
+
+
+cp_eoc_cco_bw_service_t *
+cp_eoc_cco_bw_service_alloc (cp_t *ctx) __attribute__((weak));
+cp_eoc_cco_bw_service_t *
+cp_eoc_cco_bw_service_alloc (cp_t *ctx)
+{
+ return NULL;
+}
+
+cp_eoc_cco_bw_service_t *
+cp_eoc_cco_bw_service_find (cp_t *ctx, uint service_index)
+ __attribute__((weak));
+cp_eoc_cco_bw_service_t *
+cp_eoc_cco_bw_service_find (cp_t *ctx, uint service_index)
+{
+ return NULL;
+}
+
+void
+cp_eoc_cco_bw_service_add (cp_t *ctx, cp_eoc_cco_bw_service_t *srv)
+ __attribute__((weak));
+void
+cp_eoc_cco_bw_service_add (cp_t *ctx, cp_eoc_cco_bw_service_t *srv) {}
+
+bool
+cp_eoc_cco_bw_service_remove (cp_t *ctx, uint service_index)
+ __attribute__((weak));
+bool
+cp_eoc_cco_bw_service_remove (cp_t *ctx, uint service_index)
+{
+ return true;
+}
diff --git a/cesar/cp/eoc/cco/bw/test/utest/Config b/cesar/cp/eoc/cco/bw/test/utest/Config
new file mode 100644
index 0000000000..e1b92c1c80
--- /dev/null
+++ b/cesar/cp/eoc/cco/bw/test/utest/Config
@@ -0,0 +1,8 @@
+CONFIG_CP_EOC = y
+CONFIG_MAC_COMMON_EOC_MFS = y
+CONFIG_MAC_COMMON_EOC_SCHED = y
+CONFIG_MAC_PBPROC_EOC_FC = y
+CONFIG_CP_EOC_IS_MASTER = y
+CONFIG_CP_EOC_DBG_PRINT_LEVEL = 2
+CONFIG_MAC_COMMON_EOC_TEI = y
+CONFIG_CL_EOC_ROUTE = y
diff --git a/cesar/cp/eoc/cco/bw/test/utest/Makefile b/cesar/cp/eoc/cco/bw/test/utest/Makefile
new file mode 100644
index 0000000000..6da2cfd224
--- /dev/null
+++ b/cesar/cp/eoc/cco/bw/test/utest/Makefile
@@ -0,0 +1,12 @@
+BASE = ../../../../../..
+
+INCLUDES = cp/eoc/cco/bw/test/utest/override
+
+HOST_PROGRAMS = serv
+
+serv_SOURCES = serv.c bw_stub.c
+serv_MODULES = lib mac/common cp/eoc/cco/bw \
+ cp/eoc/fsm/stub cp/msg/stub mac/ca/stub
+serv_CONFIG_MODULES = cp cp/eoc cl
+
+include $(BASE)/common/make/top.mk
diff --git a/cesar/cp/eoc/cco/bw/test/utest/override/cp/inc/context.h b/cesar/cp/eoc/cco/bw/test/utest/override/cp/inc/context.h
new file mode 100644
index 0000000000..e148bde4f3
--- /dev/null
+++ b/cesar/cp/eoc/cco/bw/test/utest/override/cp/inc/context.h
@@ -0,0 +1,49 @@
+#ifndef override_cp_inc_context_h
+#define override_cp_inc_context_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2009 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file override/cp/inc/context.h
+ * \brief « brief description »
+ * \ingroup « module »
+ *
+ * « long description »
+ */
+#include "cp/cp.h"
+#include "cp/cco/bw/bw.h"
+#include "cp/cco/bw/inc/context.h"
+#include "mac/common/store.h"
+#include "cp/eoc/cco/bw/inc/bw.h"
+#include "cp/sta/mgr/sta.h"
+#include "cp/sta/mgr/net.h"
+#include "cp/sta/mgr/inc/net.h"
+#include "cp/inc/trace.h"
+#include "cp/sta/mgr/sta_mgr.h"
+#include "cp/sta/mgr/inc/sta_mgr.h"
+#include "cp/fsm/fsm.h"
+#include "cp/fsm/inc/context.h"
+#include "config/cp/eoc/dbg/print/level.h"
+#include "cp/eoc/cco/action/cco_action.h"
+#include "bsu/inc/context.h"
+
+struct cp_t
+{
+ cp_cco_bw_t bw;
+ mac_store_t *mac_store;
+ cp_eoc_cco_bw_sched_t schedule;
+ ca_t *ca;
+ cp_sta_mgr_t sta_mgr;
+ cp_fsm_t fsm;
+ sar_t *sar;
+ mac_config_t *mac_config;
+ bsu_t *bsu;
+ lib_rnd_t rnd;
+ cl_t *cl;
+};
+
+#endif /* override_cp_inc_context_h */
diff --git a/cesar/cp/eoc/cco/bw/test/utest/override/cp/sta/core/core.h b/cesar/cp/eoc/cco/bw/test/utest/override/cp/sta/core/core.h
new file mode 100644
index 0000000000..75e2513bef
--- /dev/null
+++ b/cesar/cp/eoc/cco/bw/test/utest/override/cp/sta/core/core.h
@@ -0,0 +1,31 @@
+#ifndef override_cp_sta_core_core_h
+#define override_cp_sta_core_core_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2011 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file override/cp/sta/core/core.h
+ * \brief STA Core override.
+ * \ingroup test
+ */
+
+#include "cp/inc/context.h"
+
+BEGIN_DECLS
+
+void
+cp_sta_core_signal_fsm_event (cp_t *ctx);
+
+void
+cp_sta_core_signal_fsm_urgent_event (cp_t *ctx);
+
+u32
+cp_sta_core_get_date_ms (cp_t *ctx);
+
+END_DECLS
+
+#endif /* override_cp_sta_core_core_h */
diff --git a/cesar/cp/eoc/cco/bw/test/utest/override/cp/sta/core/defs.h b/cesar/cp/eoc/cco/bw/test/utest/override/cp/sta/core/defs.h
new file mode 100644
index 0000000000..4bdff91cba
--- /dev/null
+++ b/cesar/cp/eoc/cco/bw/test/utest/override/cp/sta/core/defs.h
@@ -0,0 +1,58 @@
+#ifndef cp_sta_core_defs_h
+#define cp_sta_core_defs_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2011 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file override/cp/sta/core/defs.h
+ * \brief STA core defs override.
+ * \ingroup test
+ *
+ */
+#include "cp/fsm/forward.h"
+
+/** Forward declaration. */
+typedef struct cp_sta_core_t cp_sta_core_t;
+
+/*
+ * the sta core event flags
+ * these are some flags, so take care to give a value with all bits set to 0 but one.
+ */
+enum cp_sta_core_event_flag_t
+{
+ CP_STA_CORE_EVENT_FLAG_RECV_BEACON = 0x1,
+ CP_STA_CORE_EVENT_FLAG_RECV_MME = 0x2,
+ CP_STA_CORE_EVENT_FLAG_FSM = 0x4,
+ CP_STA_CORE_EVENT_FLAG_GARBAGE = 0x8,
+ CP_STA_CORE_EVENT_FLAG_TERMINATE = 0x10
+};
+typedef enum cp_sta_core_event_flag_t cp_sta_core_event_flag_t;
+
+/** Definition of alarm info structure
+ * (applications should not use it directly but use "alias" defined just below) */
+struct cp_sta_core_timed_event_def_t
+{
+ /* eCos alarm. */
+ uint alarm;
+ /* eCos alarm handle. */
+ uint alarm_handle;
+ /* the sta core event flag to set
+ * (auto or user-specified when creating/launching timer alarm). */
+ cp_sta_core_event_flag_t event_flag;
+ /* FSM event specified when creating/launching timer alarm
+ * (set if the previous flag is CP_STA_CORE_EVENT_FLAG_FSM). */
+ cp_fsm_event_t *fsm_event;
+ /* flag indicating a periodic alarm (if set to true)
+ * or one-shot alarm (if set to false). */
+ bool cyclic_alarm;
+ /* pointer to CP context. */
+ cp_t *cp_ctx;
+};
+typedef struct cp_sta_core_timed_event_def_t cp_sta_core_timed_event_def_t;
+
+#endif /* cp_sta_core_defs_h */
+
diff --git a/cesar/cp/eoc/cco/bw/test/utest/src/bw_stub.c b/cesar/cp/eoc/cco/bw/test/utest/src/bw_stub.c
new file mode 100644
index 0000000000..9599b63de1
--- /dev/null
+++ b/cesar/cp/eoc/cco/bw/test/utest/src/bw_stub.c
@@ -0,0 +1,114 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2011 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/cco/bw/test/src/bw_stub.c
+ * \brief stub functions for bw test
+ * \ingroup test
+ *
+ * « long description »
+ */
+#include "common/std.h"
+#include "cp/sta/mgr/sta_own_data.h"
+#include "cp/sta/mgr/net.h"
+#include "cp/sta/mgr/inc/net.h"
+#include "cp/sta/mgr/inc/sta.h"
+#include "cp/sta/mgr/inc/sta_mgr.h"
+#include "cp/sta/mgr/sta_mgr.h"
+#include "cp/inc/context.h"
+
+cp_net_t *
+cp_sta_mgr_get_our_avln (cp_t *ctx) __attribute__ ((weak));
+
+cp_net_t *
+cp_sta_mgr_get_our_avln (cp_t *ctx)
+{
+ dbg_assert (ctx);
+ dbg_assert (ctx->sta_mgr.our_avln);
+ dbg_assert (ctx->sta_mgr.our_avln->present);
+ return ctx->sta_mgr.our_avln;
+}
+
+cp_sta_t *
+cp_sta_mgr_sta_get_assoc (cp_t *ctx, cp_net_t *net, cp_tei_t tei) __attribute__ ((weak));
+
+cp_sta_t *
+cp_sta_mgr_sta_get_assoc (cp_t *ctx, cp_net_t *net, cp_tei_t tei)
+{
+ return NULL;
+}
+
+void
+cp_eoc_cco_action_vs__cco__vs_set_out_lev_ind (cp_t *ctx, cp_mme_peer_t *peer)
+{
+}
+
+u32
+cp_sta_core_get_date_ms (cp_t *ctx)
+{
+ static uint time=0;
+ time+=2000;
+ return time;
+}
+
+void
+pbproc_mfs_remove_all (mfs_tx_t *mfs)
+{
+ if (mfs->head)
+ blk_release_desc ((blk_t*) mfs->head);
+}
+
+void
+cp_cco_action_tei_release (cp_t *ctx, u8 tei)
+{
+ dbg_assert (ctx);
+ dbg_assert (tei);
+}
+
+void
+phy_access_timer_cancel (phy_t *ctx)
+{
+ dbg_assert (ctx);
+}
+
+void
+phy_rx_activate (phy_t *ctx, bool now, u32 date, bool flag)
+{
+ dbg_assert (ctx);
+}
+
+void
+phy_access_backoff_start (phy_t *ctx, u32 date, uint cap)
+{
+ dbg_assert (ctx);
+}
+
+void
+phy_access_timer_program (phy_t *ctx, u32 date)
+{
+ dbg_assert (ctx);
+}
+
+void
+phy_access_backoff_update (phy_t *ctx, uint cap)
+{
+ dbg_assert (ctx);
+}
+
+void
+phy_access_timer_update (phy_t *ctx, u32 date)
+{
+ dbg_assert (ctx);
+}
+
+u32
+phy_date(void)
+{
+ static int i = 0;
+ i += 50000;
+ return i;
+}
diff --git a/cesar/cp/eoc/cco/bw/test/utest/src/serv.c b/cesar/cp/eoc/cco/bw/test/utest/src/serv.c
new file mode 100644
index 0000000000..5405ea5cbb
--- /dev/null
+++ b/cesar/cp/eoc/cco/bw/test/utest/src/serv.c
@@ -0,0 +1,92 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2010 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/cco/bw/test/utest/src/serv.c
+ * \brief Services management unit tests.
+ * \ingroup cp_eoc_cco_bw
+ *
+ */
+#include "common/std.h"
+#include "lib/test.h"
+#include "cp/inc/context.h"
+#include "cp/eoc/cco/bw/service.h"
+
+static cp_t cp;
+
+void
+test_service (test_t test)
+{
+ cp_eoc_cco_bw_service_t *srv = NULL;
+ bool ok;
+ uint i;
+ test_begin (test, "Utils")
+ {
+ cp_eoc_cco_services_init (&cp);
+ srv = cp_eoc_cco_bw_service_alloc (&cp);
+ srv->service_index = 4;
+ srv->dload_pir = 200;
+ cp_eoc_cco_bw_service_add (&cp, srv);
+ test_fail_unless (cp.schedule.services.service_nb == 1);
+ srv = cp_eoc_cco_bw_service_find (&cp, 5);
+ test_fail_if (srv);
+ srv = cp_eoc_cco_bw_service_find (&cp, 4);
+ test_fail_if (!srv);
+ test_fail_if (srv->dload_pir != 200);
+ ok = cp_eoc_cco_bw_service_remove (&cp, 4);
+ test_fail_unless (ok);
+ test_fail_unless (cp.schedule.services.service_nb == 0);
+
+ for (i = 0; i < 30; i++)
+ {
+ srv = cp_eoc_cco_bw_service_alloc (&cp);
+ srv->service_index = i + 5;
+ srv->dload_pir = i * 20;
+ cp_eoc_cco_bw_service_add (&cp, srv);
+ }
+
+ srv = cp_eoc_cco_bw_service_find (&cp, 23);
+ test_fail_unless (srv);
+ test_fail_unless (srv->dload_pir == 360);
+
+ for (i = 7; i < 20; i++)
+ {
+ ok = cp_eoc_cco_bw_service_remove (&cp, i);
+ test_fail_unless (ok);
+ }
+ srv = cp_eoc_cco_bw_service_find (&cp, 10);
+ test_fail_if (srv);
+ test_fail_unless (cp.schedule.services.service_nb == 17);
+ srv = cp_eoc_cco_bw_service_find (&cp, 20);
+ test_fail_if (!srv);
+ test_fail_if (srv->dload_pir != 300);
+ cp_eoc_cco_services_uninit (&cp);
+ }
+ test_end;
+}
+
+int
+main (void)
+{
+ test_t test;
+ test_init (test, 0, NULL);
+
+ test_case_begin (test, "Services");
+
+ test_service (test);
+
+ test_case_begin (test, "Memory test");
+
+ test_begin (test, "Memory verification")
+ {
+ test_fail_if (blk_check_memory() == false, "Memory not freed");
+ }
+ test_end;
+
+ test_result (test);
+ return test_nb_failed (test) == 0 ? 0 : 1;
+}
diff --git a/cesar/cp/eoc/fsm/Config b/cesar/cp/eoc/fsm/Config
new file mode 100644
index 0000000000..9471e4bb3a
--- /dev/null
+++ b/cesar/cp/eoc/fsm/Config
@@ -0,0 +1 @@
+CONFIG_CP_FSM_DEF = "cp/eoc/fsm/src/fsm/cp_eoc_cco.fsm"
diff --git a/cesar/cp/eoc/fsm/Module b/cesar/cp/eoc/fsm/Module
new file mode 100644
index 0000000000..1dd483c94c
--- /dev/null
+++ b/cesar/cp/eoc/fsm/Module
@@ -0,0 +1,40 @@
+SOURCES := tables.c
+
+MODULES := cp/fsm
+
+ifndef $(MODULE_VAR)_ONCE
+$(MODULE_VAR)_ONCE := 1$(CONFIG_CP_FSM_DEF)
+
+cp_fsm_defs_h := $(OBJ_INC_DIR)/cp_fsm_defs.h
+cp_fsm_tables_h = $(OBJ_INC_DIR)/cp_fsm_tables.h
+CLEAN_FILES += $(cp_fsm_defs_h) $(cp_fsm_tables_h)
+
+COMPILE_DEPS += $(cp_fsm_defs_h)
+
+cp_fsm_deps = $(CONFIG_CP_FSM_DEF:"%"=%) \
+ $(call src2src,cp.conf template_defs.h \
+ template_tables.h,$(MODULE)/src/fsm)
+
+$(cp_fsm_defs_h) $(cp_fsm_tables_h): $(cp_fsm_deps) $(DFAGEN) \
+ $(OBJ_INC_DIR_STAMP)
+ echo $(cp_fsm_deps) ; \
+ python $(DFAGEN) -O $(OBJ_INC_DIR) \
+ -o c -d $< -c $(filter %.conf,$^) -p cp_fsm
+
+CLEAN_FILES += $(OBJ_DIR)/cp_fsm.png $(OBJ_DIR)/cp_fsm.dot
+
+$(OBJ_DIR)/cp_fsm.png: $(OBJ_DIR)/cp_fsm.dot $(OBJ_DIR_STAMP)
+ dot -Tpng -o $@ $<
+
+$(OBJ_DIR)/cp_fsm.dot: $(cp_fsm_deps) $(DFAGEN) $(OBJ_DIR_STAMP)
+ python $(DFAGEN) -O $(OBJ_DIR) -o dot -d $< -p cp_fsm
+
+$(call src2obj,cp/eoc/fsm/src/tables.c,target): $(cp_fsm_tables_h)
+
+else
+# This module rules depend on a configuration item, it need work to be used in
+# several build type.
+ifneq ($($(MODULE_VAR)_ONCE),1$(CONFIG_CP_FSM_DEF))
+$(error Module not safe for multiple build types)
+endif
+endif
diff --git a/cesar/cp/eoc/fsm/src/fsm/cp.conf b/cesar/cp/eoc/fsm/src/fsm/cp.conf
new file mode 100644
index 0000000000..2c50e8d998
--- /dev/null
+++ b/cesar/cp/eoc/fsm/src/fsm/cp.conf
@@ -0,0 +1,6 @@
+[user]
+template-dir = .
+
+[templates]
+template_defs.h = %_defs.h
+template_tables.h = %_tables.h
diff --git a/cesar/cp/eoc/fsm/src/fsm/cp_eoc_cco.fsm b/cesar/cp/eoc/fsm/src/fsm/cp_eoc_cco.fsm
new file mode 100644
index 0000000000..94e305ad51
--- /dev/null
+++ b/cesar/cp/eoc/fsm/src/fsm/cp_eoc_cco.fsm
@@ -0,0 +1,220 @@
+Control Plane CCO FSM
+ CCO FSM for control plane
+
+States:
+ STOPPED
+ STARTED
+ POWER_ON
+ CCO
+ BCCO
+ STOPPING
+
+Events:
+ BEACON
+ BEACON_NOT_RECEIVED
+ BEACON_TIMER_EXPIRES
+ BEACON_WITH_SAME_NID
+ HOIP_EXPIRED
+ HANDOVER_DISCOVERED_STA
+ HANDOVER_DISCOVER_PROCESS_DONE
+ nek_timeout
+ cco__nek_change
+ nek_request
+ to_leave
+ cco__snid_conflict
+ to_poweron
+ to_stop
+ rx_beacon
+ no_beacons
+ net_list_empty
+ sta_status_changed
+ stopped
+ first_com_with_assoc_sta
+ leave_remove_delay
+ discover_info_updated
+ whoru_timeout
+
+ DRV_MAC_STOP
+ MULTI_STA_MME
+
+ DRV_STA_SET_MAC_ADDR_REQ
+ DRV_STA_SET_CCO_PREF_REQ
+ DRV_STA_SET_WAS_CCO_REQ
+ DRV_STA_SET_NPW_REQ
+ DRV_STA_SET_DPW_REQ
+ DRV_STA_SET_SL_REQ
+ DRV_STA_SET_NID_REQ
+ DRV_STA_SET_M_STA_HFID_REQ
+ DRV_STA_SET_U_STA_HFID_REQ
+ DRV_STA_SET_AVLN_HFID_REQ
+ DRV_STA_SET_TONEMASK_REQ
+ DRV_STA_MAC_START_REQ
+ DRV_STA_MAC_STOP_REQ
+ DRV_STA_SC_REQ
+ DRV_STA_SET_KEY_REQ
+ DRV_STA_SET_DAK_REQ
+ DRV_STA_GET_KEY_REQ
+ DRV_STA_STATUS_REQ
+ DRV_STA_SET_CONFIG_REQ
+ DRV_EOC_STA_SET_SLAVE_CONFIG_REQ
+ DRV_EOC_STA_SET_EOC_CONFIG_REQ
+ DRV_MCAST_SET_LIST_REQ
+ DRV_STA_FORCE_ROLE_REQ
+
+ VS_GET_TONEMAP_REQ
+ VS_GET_SNR_REQ
+ VS_GET_LINK_STATS_REQ
+ VS_GET_SPECTRUM_REQ
+ VS_GET_AMP_MAP_REQ
+ VS_GET_STATS_REQ
+ VS_GET_CE_STATS_REQ
+ VS_GET_PB_STATS_REQ
+ VS_GET_MACTOTEI_REQ
+ VS_GET_ATTENUATION_LIST_REQ
+
+ VS_EOC_GET_TOPO_REQ
+ VS_EOC_CCO_SET_WL_REQ
+ VS_EOC_CCO_GET_WL_REQ
+ VS_EOC_CCO_SET_OUT_LEV_IND
+ VS_EOC_SET_PORTS_REQ
+ VS_EOC_CCO_GET_PORTS_REQ
+ VS_EOC_CCO_SET_SERVICES_REQ
+ VS_EOC_CCO_GET_SERVICES_REQ
+ VS_EOC_GET_INFO_REQ
+ VS_EOC_DIAGNOSTIC_INFO_REQ
+ VS_EOC_GET_REAL_TIME_STATISTICS_REQ
+
+ IMAC_GET_DISCOVER_LIST_REQ
+
+ CC_DISCOVER_LIST_REQ
+ CC_DISCOVER_LIST_CNF
+ CC_WHO_RU_REQ
+ CC_WHO_RU_CNF
+ CC_ASSOC_REQ
+ CC_ASSOC_CNF
+ CC_LEAVE_REQ
+ CC_LEAVE_CNF
+ CC_LEAVE_IND
+ CC_LEAVE_RSP
+ CC_SET_TEI_MAP_REQ
+ CC_SET_TEI_MAP_IND
+ CC_RELAY_REQ
+ CC_RELAY_IND
+ CC_HANDOVER_CNF
+ CC_HANDOVER_REQ
+ CC_HANDOVER_INFO_IND
+ CC_HANDOVER_INFO_RSP
+ CM_UNASSOCIATED_STA_IND
+ CM_SET_KEY_REQ
+ CM_SET_KEY_CNF
+ CM_SET_KEY_REQ_PID1
+ CM_SET_KEY_CNF_PID1
+ CM_SET_KEY_REQ_PID3
+ CM_SET_KEY_CNF_PID3
+ CM_GET_KEY_REQ
+ CM_GET_KEY_CNF
+ CM_GET_KEY_REQ_PID0
+ CM_GET_KEY_CNF_PID0
+ CM_GET_KEY_REQ_PID3
+ CM_GET_KEY_CNF_PID3
+ CM_SC_JOIN_REQ
+ CM_SC_JOIN_CNF
+ CM_CHAN_EST_IND
+ CM_TM_UPDATE_IND
+ CM_AMP_MAP_REQ
+ CM_AMP_MAP_CNF
+ CM_BRG_INFO_REQ
+ CM_BRG_INFO_CNF
+ CM_STA_CAP_REQ
+ CM_STA_CAP_CNF
+ CM_NW_INFO_REQ
+ CM_NW_INFO_CNF
+ CM_NW_STATS_REQ
+ CM_NW_STATS_CNF
+ CM_LINK_STATS_REQ
+ CM_HFID_REQ
+ CM_HFID_CNF
+ CM_MME_ERROR_IND
+
+STOPPED:
+ DRV_STA_SET_MAC_ADDR_REQ -> . [cp_sta_action_drv__stopped__drv_sta_set_mac_addr_req]
+ DRV_STA_SET_CCO_PREF_REQ -> . [cp_sta_action_drv__stopped__drv_sta_set_cco_pref_req]
+ DRV_STA_SET_WAS_CCO_REQ -> . [cp_sta_action_drv__stopped__drv_sta_set_was_cco_req]
+ DRV_STA_SET_DPW_REQ -> . [cp_sta_action_drv__stopped__drv_sta_set_dpw_req]
+ DRV_STA_SET_NPW_REQ -> . [cp_sta_action_drv__stopped__drv_sta_set_npw_req]
+ DRV_STA_SET_NID_REQ -> . [cp_sta_action_drv__stopped__drv_sta_set_nid_req]
+ DRV_STA_SET_M_STA_HFID_REQ -> . [cp_sta_action_drv__stopped__drv_sta_set_m_sta_hfid_req]
+ DRV_STA_SET_U_STA_HFID_REQ -> . [cp_sta_action_drv__stopped__drv_sta_set_u_sta_hfid_req]
+ DRV_STA_SET_AVLN_HFID_REQ -> . [cp_sta_action_drv__stopped__drv_sta_set_avln_hfid_req]
+ DRV_STA_SET_SL_REQ -> . [cp_sta_action_drv__stopped__drv_sta_set_sl_req]
+ DRV_STA_SET_TONEMASK_REQ -> . [cp_sta_action_drv__stopped__drv_sta_set_tonemask_req]
+ DRV_STA_SET_KEY_REQ -> . [cp_sta_action_drv__stopped__drv_sta_set_key_req]
+ DRV_STA_SET_DAK_REQ -> . [cp_sta_action_drv__stopped__drv_sta_set_dak_req]
+ DRV_STA_MAC_START_REQ -> STARTED [cp_sta_action_drv__stopped__drv_sta_mac_start_req]
+ DRV_STA_SET_CONFIG_REQ -> . [cp_sta_action_drv__drv_sta_set_config_req]
+ DRV_EOC_STA_SET_SLAVE_CONFIG_REQ -> . [cp_eoc_sta_action_drv__drv_sta_set_slave_config_req]
+ DRV_EOC_STA_SET_EOC_CONFIG_REQ -> . [cp_eoc_sta_action_drv__drv_sta_set_eoc_config_req]
+
+STARTED:
+ to_poweron -> POWER_ON [cp_eoc_cco_action_poweron__idle__to_poweron]
+ VS_GET_TONEMAP_REQ -> . [cp_sta_action_vs__started__vs_get_tonemap_req]
+ VS_GET_SNR_REQ -> . [cp_sta_action_vs__started__vs_get_snr_req]
+
+POWER_ON:
+ BEACON_TIMER_EXPIRES -> . [cp_beacon_beacon_not_received]
+ BEACON_NOT_RECEIVED -> CCO [cp_eoc_cco_action_send_central_beacon]
+ rx_beacon -> BCCO [cp_eoc_cco_action__power_on_rx_beacon]
+
+CCO:
+ DRV_STA_MAC_STOP_REQ -> STOPPING [cp_sta_action_drv__started__drv_sta_mac_stop_req]
+ DRV_STA_GET_KEY_REQ -> . [cp_sta_action_drv__drv_sta_get_key_req]
+ DRV_MCAST_SET_LIST_REQ -> . [cp_eoc_cco_action_drv__drv_mcast_set_list_req]
+ VS_EOC_CCO_GET_WL_REQ -> . [cp_eoc_cco_action_vs__stopped__vs_cco_get_wl_req]
+ VS_EOC_CCO_SET_WL_REQ -> . [cp_eoc_cco_action_vs__stopped__vs_cco_set_wl_req]
+ VS_EOC_SET_PORTS_REQ -> . [cp_eoc_cco_action_vs_eoc__cco__vs_eoc_set_ports_req]
+ VS_EOC_CCO_GET_PORTS_REQ -> . [cp_eoc_cco_action_vs_eoc__cco__vs_eoc_cco_get_ports_req]
+ VS_EOC_CCO_SET_SERVICES_REQ -> . [cp_eoc_cco_action_vs_eoc__cco__vs_eoc_cco_set_services_req]
+ VS_EOC_CCO_GET_SERVICES_REQ -> . [cp_eoc_cco_action_vs_eoc__cco__vs_eoc_cco_get_services_req]
+ VS_EOC_GET_INFO_REQ -> . [cp_eoc_cco_action_vs_eoc__cco__vs_eoc_get_info_req]
+ VS_EOC_DIAGNOSTIC_INFO_REQ -> . [cp_eoc_cco_action_vs_eoc__cco__vs_eoc_diagnostic_info_req]
+ VS_EOC_GET_REAL_TIME_STATISTICS_REQ -> . [cp_eoc_sta_action_vs__vs_eoc_get_real_time_statistics_req]
+ BEACON_TIMER_EXPIRES -> . [cp_eoc_cco_action_send_central_beacon]
+ MULTI_STA_MME -> . [cp_eoc_cco_action_event_dispatch]
+ CM_CHAN_EST_IND -> . [ce_tx_process__cm_chan_est_ind]
+ CM_TM_UPDATE_IND -> . [ce_tx_process__cm_update_tm_ind]
+ VS_EOC_GET_TOPO_REQ -> . [cp_eoc_cco_action_vs_eoc__cco__vs_eoc_get_topo_req]
+ first_com_with_assoc_sta -> . [NULL]
+ PREV: cp_sta_action_bridge_first_com
+ CM_BRG_INFO_CNF -> . [cp_sta_action_process_cm_brg_info_cnf]
+ CM_BRG_INFO_REQ -> . [cp_sta_action_process_cm_brg_info_req]
+ VS_GET_TONEMAP_REQ -> . [cp_sta_action_vs__started__vs_get_tonemap_req]
+ VS_GET_SNR_REQ -> . [cp_sta_action_vs__started__vs_get_snr_req]
+ CM_NW_STATS_REQ -> . [cp_sta_action_process_cm_nw_stats_req]
+ CM_LINK_STATS_REQ -> . [cp_sta_action_process_cm_link_stats_req]
+ CM_NW_INFO_REQ -> . [cp_sta_action_process_cm_nw_info_req]
+ CM_SET_KEY_CNF -> . [cp_eoc_cco_action__set_key_cnf]
+ nek_timeout:no -> . [cp_eoc_cco_action_nek_change_timeout]
+ nek_timeout:yes -> .
+ leave_remove_delay -> . [cp_eoc_cco_action__cco__leave_remove_timeout]
+ VS_GET_STATS_REQ -> . [cp_sta_action_vs__started__vs_get_stats_req]
+ CM_STA_CAP_REQ -> . [cp_sta_action_process_cm_sta_cap_req]
+ cco__nek_change -> . [cp_eoc_cco_action_nek_provide]
+ VS_GET_CE_STATS_REQ -> . [cp_sta_action_vs__started__vs_get_ce_stats_req]
+ VS_GET_PB_STATS_REQ -> . [cp_sta_action_vs__started__vs_get_pb_stats_req]
+ VS_GET_MACTOTEI_REQ -> . [cp_sta_action_vs__started__vs_get_mactotei_req]
+
+BCCO:
+ DRV_STA_MAC_STOP_REQ -> STOPPING [cp_eoc_cco_action__bcco_drv_mac_stop]
+ BEACON_NOT_RECEIVED -> CCO [cp_eoc_cco_action__bcco_no_beacons]
+ VS_EOC_GET_TOPO_REQ -> . [cp_eoc_cco_action_vs_eoc__cco__vs_eoc_get_topo_req]
+ VS_GET_TONEMAP_REQ -> . [cp_sta_action_vs__started__vs_get_tonemap_req]
+ VS_GET_SNR_REQ -> . [cp_sta_action_vs__started__vs_get_snr_req]
+
+CCO, BCCO:
+ CC_DISCOVER_LIST_REQ -> . [cp_sta_action_process_cc_discover_list_req]
+
+STOPPING:
+ VS_EOC_GET_TOPO_REQ -> . [cp_eoc_cco_action_vs_eoc__cco__vs_eoc_get_topo_req]
+ to_stop -> . [cp_sta_action_poweron__many__to_idle]
+ stopped -> STOPPED [cp_sta_action_drv__stopping__stopped]
+ send DRV_STA_MAC_STOP.CNF
diff --git a/cesar/cp/eoc/fsm/src/fsm/cp_eoc_sta.fsm b/cesar/cp/eoc/fsm/src/fsm/cp_eoc_sta.fsm
new file mode 100644
index 0000000000..c60b92f202
--- /dev/null
+++ b/cesar/cp/eoc/fsm/src/fsm/cp_eoc_sta.fsm
@@ -0,0 +1,253 @@
+Control Plane STA FSM
+ STA FSM for control plane.
+
+States:
+ STOPPED
+ STARTED
+ STOPPING
+ DETECTING_BEACON
+ UNASSOCIATED [enter=cp_eoc_sta_action_unassoc__start_retry_timer leave=cp_eoc_sta_action_unassoc__stop_retry_timer]
+ ASSOCIATING [enter=cp_sta_action_assoc__start_retry_timer leave=cp_sta_action_assoc__stop_retry_timer]
+ ASSOCIATED [enter=cp_sta_action_assoc__start_retry_timer leave=cp_sta_action_assoc__stop_retry_timer]
+ AUTHENTICATED
+ SLEEP_UNASSOCIATED
+ SLEEP_AUTHENTICATED
+
+Events:
+ BEACON
+ BEACON_NOT_RECEIVED
+ BEACON_TIMER_EXPIRES
+ BEACON_WITH_SAME_NID
+ HOIP_EXPIRED
+ HANDOVER_DISCOVERED_STA
+ HANDOVER_DISCOVER_PROCESS_DONE
+ to_poweron
+ to_stop
+ stopped
+ nd_beacon
+ timeout_associating
+ timeout_unassociating
+ no_beacons
+ enter_sleep_unassociated
+ retry_unassociated
+ exit_sleep_unassociated
+ sleep_enter_cnf
+ sleep_exit_rsp
+ encrypt_payload_rsp
+ cco__nek_change
+ nek_request
+ to_leave
+ first_com_with_assoc_sta
+ discover_info_updated
+ whoru_timeout
+ cco__snid_conflict
+
+ DRV_STA_SET_MAC_ADDR_REQ
+ DRV_STA_SET_CCO_PREF_REQ
+ DRV_STA_SET_WAS_CCO_REQ
+ DRV_STA_SET_NPW_REQ
+ DRV_STA_SET_DPW_REQ
+ DRV_STA_SET_SL_REQ
+ DRV_STA_SET_NID_REQ
+ DRV_STA_SET_M_STA_HFID_REQ
+ DRV_STA_SET_U_STA_HFID_REQ
+ DRV_STA_SET_AVLN_HFID_REQ
+ DRV_STA_SET_TONEMASK_REQ
+ DRV_STA_MAC_START_REQ
+ DRV_STA_MAC_STOP_REQ
+ DRV_STA_SC_REQ
+ DRV_STA_SET_KEY_REQ
+ DRV_STA_SET_DAK_REQ
+ DRV_STA_GET_KEY_REQ
+ DRV_STA_STATUS_REQ
+ DRV_STA_SET_CONFIG_REQ
+ DRV_EOC_STA_SET_SLAVE_CONFIG_REQ
+ DRV_EOC_STA_SET_EOC_CONFIG_REQ
+ DRV_MCAST_SET_LIST_REQ
+ DRV_STA_FORCE_ROLE_REQ
+
+ VS_GET_TONEMAP_REQ
+ VS_GET_SNR_REQ
+ VS_GET_LINK_STATS_REQ
+ VS_GET_SPECTRUM_REQ
+ VS_GET_AMP_MAP_REQ
+ VS_GET_STATS_REQ
+ VS_GET_CE_STATS_REQ
+ VS_GET_PB_STATS_REQ
+ VS_GET_MACTOTEI_REQ
+ VS_GET_ATTENUATION_LIST_REQ
+
+ VS_EOC_GET_TOPO_REQ
+ VS_EOC_CCO_SET_WL_REQ
+ VS_EOC_CCO_GET_WL_REQ
+ VS_EOC_CCO_SET_OUT_LEV_IND
+ VS_EOC_SET_PORTS_REQ
+ VS_EOC_CCO_GET_PORTS_REQ
+ VS_EOC_CCO_SET_SERVICES_REQ
+ VS_EOC_CCO_GET_SERVICES_REQ
+ VS_EOC_GET_INFO_REQ
+ VS_EOC_DIAGNOSTIC_INFO_REQ
+ VS_EOC_GET_REAL_TIME_STATISTICS_REQ
+ IMAC_GET_DISCOVER_LIST_REQ
+
+ CC_DISCOVER_LIST_REQ
+ CC_DISCOVER_LIST_CNF
+ CC_WHO_RU_REQ
+ CC_WHO_RU_CNF
+ CC_ASSOC_REQ
+ CC_ASSOC_CNF
+ CC_LEAVE_REQ
+ CC_LEAVE_CNF
+ CC_LEAVE_IND
+ CC_LEAVE_RSP
+ CC_SET_TEI_MAP_REQ
+ CC_SET_TEI_MAP_IND
+ CC_RELAY_REQ
+ CC_RELAY_IND
+ CC_HANDOVER_CNF
+ CC_HANDOVER_REQ
+ CC_HANDOVER_INFO_IND
+ CC_HANDOVER_INFO_RSP
+ CM_UNASSOCIATED_STA_IND
+ CM_SET_KEY_REQ
+ CM_SET_KEY_CNF
+ CM_SET_KEY_REQ_PID1
+ CM_SET_KEY_CNF_PID1
+ CM_SET_KEY_REQ_PID3
+ CM_SET_KEY_CNF_PID3
+ CM_GET_KEY_REQ
+ CM_GET_KEY_CNF
+ CM_GET_KEY_REQ_PID0
+ CM_GET_KEY_CNF_PID0
+ CM_GET_KEY_REQ_PID3
+ CM_GET_KEY_CNF_PID3
+ CM_SC_JOIN_REQ
+ CM_SC_JOIN_CNF
+ CM_CHAN_EST_IND
+ CM_TM_UPDATE_IND
+ CM_AMP_MAP_REQ
+ CM_AMP_MAP_CNF
+ CM_BRG_INFO_REQ
+ CM_BRG_INFO_CNF
+ CM_STA_CAP_REQ
+ CM_STA_CAP_CNF
+ CM_NW_INFO_REQ
+ CM_NW_INFO_CNF
+ CM_NW_STATS_REQ
+ CM_NW_STATS_CNF
+ CM_LINK_STATS_REQ
+ CM_HFID_REQ
+ CM_HFID_CNF
+ CM_MME_ERROR_IND
+
+STOPPED:
+ DRV_STA_SET_MAC_ADDR_REQ -> . [cp_sta_action_drv__stopped__drv_sta_set_mac_addr_req]
+ DRV_STA_SET_CCO_PREF_REQ -> . [cp_sta_action_drv__stopped__drv_sta_set_cco_pref_req]
+ DRV_STA_SET_WAS_CCO_REQ -> . [cp_sta_action_drv__stopped__drv_sta_set_was_cco_req]
+ DRV_STA_SET_DPW_REQ -> . [cp_sta_action_drv__stopped__drv_sta_set_dpw_req]
+ DRV_STA_SET_NPW_REQ -> . [cp_sta_action_drv__stopped__drv_sta_set_npw_req]
+ DRV_STA_SET_NID_REQ -> . [cp_sta_action_drv__stopped__drv_sta_set_nid_req]
+ DRV_STA_SET_M_STA_HFID_REQ -> . [cp_sta_action_drv__stopped__drv_sta_set_m_sta_hfid_req]
+ DRV_STA_SET_U_STA_HFID_REQ -> . [cp_sta_action_drv__stopped__drv_sta_set_u_sta_hfid_req]
+ DRV_STA_SET_AVLN_HFID_REQ -> . [cp_sta_action_drv__stopped__drv_sta_set_avln_hfid_req]
+ DRV_STA_SET_SL_REQ -> . [cp_sta_action_drv__stopped__drv_sta_set_sl_req]
+ DRV_STA_SET_TONEMASK_REQ -> . [cp_sta_action_drv__stopped__drv_sta_set_tonemask_req]
+ DRV_STA_SET_KEY_REQ -> . [cp_sta_action_drv__stopped__drv_sta_set_key_req]
+ DRV_STA_SET_DAK_REQ -> . [cp_sta_action_drv__stopped__drv_sta_set_dak_req]
+ DRV_STA_MAC_START_REQ -> STARTED [cp_sta_action_drv__stopped__drv_sta_mac_start_req]
+ DRV_STA_SET_CONFIG_REQ -> . [cp_sta_action_drv__drv_sta_set_config_req]
+ DRV_EOC_STA_SET_SLAVE_CONFIG_REQ -> . [cp_eoc_sta_action_drv__drv_sta_set_slave_config_req]
+ DRV_EOC_STA_SET_EOC_CONFIG_REQ -> . [cp_eoc_sta_action_drv__drv_sta_set_eoc_config_req]
+
+STARTED:
+ to_poweron -> DETECTING_BEACON [cp_sta_action_poweron__idle__to_poweron]
+ VS_GET_TONEMAP_REQ -> . [cp_sta_action_vs__started__vs_get_tonemap_req]
+ VS_GET_SNR_REQ -> . [cp_sta_action_vs__started__vs_get_snr_req]
+
+DETECTING_BEACON:
+ BEACON -> . [cp_eoc_sta_action_detect__beacon_received]
+ nd_beacon -> ASSOCIATING [cp_eoc_sta_action_assoc__detecting_detected]
+ no_beacons -> . [cp_eoc_sta_action_assoc__detecting_no_beacons]
+
+UNASSOCIATED:
+ enter_sleep_unassociated -> SLEEP_UNASSOCIATED [NULL]
+ retry_unassociated -> DETECTING_BEACON [NULL]
+ timeout_unassociating -> DETECTING_BEACON [NULL]
+ no_beacons -> . [cp_eoc_sta_action_assoc__unassoc_no_beacons]
+ BEACON -> . [cp_eoc_sta_action_unassoc__beacon_received]
+
+ASSOCIATING:
+ timeout_associating: retry -> DETECTING_BEACON [cp_eoc_sta_action_assoc__associating_timeout]
+ timeout_associating: no_retry -> UNASSOCIATED
+ CC_ASSOC_CNF: success -> ASSOCIATED [cp_eoc_sta_action_assoc__associating_cnf]
+ CC_ASSOC_CNF: unsuccess -> UNASSOCIATED
+ CC_ASSOC_CNF: unrelated -> .
+ no_beacons -> UNASSOCIATED [cp_eoc_sta_action_assoc__associating_no_beacons]
+
+ASSOCIATED:
+ CM_GET_KEY_CNF: all_keys_granted -> AUTHENTICATED [cp_eoc_sta_action_assoc__associated_key_cnf]
+ CM_GET_KEY_CNF: not_granted -> UNASSOCIATED
+ CM_GET_KEY_CNF: unrelated -> UNASSOCIATED
+ encrypt_payload_rsp -> UNASSOCIATED [cp_eoc_sta_action_assoc__associated_encrypt_payload_rsp]
+ no_beacons -> UNASSOCIATED [cp_eoc_sta_action_assoc__associated_no_beacons]
+ timeout_associating -> UNASSOCIATED [cp_eoc_sta_action_assoc__associated_timeout]
+ CC_LEAVE_IND: ok -> DETECTING_BEACON [cp_eoc_sta_action_assoc__associated_leave]
+ send CC_LEAVE.RSP
+ CC_LEAVE_IND: nok -> .
+
+AUTHENTICATED:
+ CM_GET_KEY_CNF -> . [cp_eoc_sta_action_auth__authenticated_key_cnf]
+ sleep_enter_cnf -> SLEEP_AUTHENTICATED [NULL]
+ no_beacons -> DETECTING_BEACON [cp_eoc_sta_action_assoc__authenticated_no_beacons]
+ CC_LEAVE_IND: ok -> DETECTING_BEACON [cp_eoc_sta_action_assoc__authenticated_leave]
+ send CC_LEAVE.RSP
+ CC_LEAVE_IND: nok -> .
+ DRV_STA_MAC_STOP_REQ -> STOPPING [cp_sta_action_drv__started__drv_sta_mac_stop_req]
+ CM_SET_KEY_REQ -> . [cp_eoc_sta_action_auth__authenticated_set_key_req]
+ VS_EOC_CCO_SET_OUT_LEV_IND -> . [cp_eoc_sta_action_auth__authenticated_set_out_lev]
+ CM_STA_CAP_REQ -> . [cp_sta_action_process_cm_sta_cap_req]
+ VS_GET_TONEMAP_REQ -> . [cp_sta_action_vs__started__vs_get_tonemap_req]
+ VS_GET_SNR_REQ -> . [cp_sta_action_vs__started__vs_get_snr_req]
+ CM_LINK_STATS_REQ -> . [cp_sta_action_process_cm_link_stats_req]
+ CM_NW_INFO_REQ -> . [cp_sta_action_process_cm_nw_info_req]
+ CM_NW_STATS_REQ -> . [cp_sta_action_process_cm_nw_stats_req]
+ VS_GET_STATS_REQ -> . [cp_sta_action_vs__started__vs_get_stats_req]
+ VS_GET_CE_STATS_REQ -> . [cp_sta_action_vs__started__vs_get_ce_stats_req]
+ VS_GET_PB_STATS_REQ -> . [cp_sta_action_vs__started__vs_get_pb_stats_req]
+ VS_GET_MACTOTEI_REQ -> . [cp_sta_action_vs__started__vs_get_mactotei_req]
+
+DETECTING_BEACON, UNASSOCIATED, ASSOCIATING, ASSOCIATED, AUTHENTICATED, SLEEP_AUTHENTICATED:
+ BEACON_TIMER_EXPIRES -> . [cp_beacon_beacon_not_received]
+ BEACON_NOT_RECEIVED -> . [cp_eoc_sta_action_assoc__beacon_not_received]
+ VS_EOC_GET_INFO_REQ -> . [cp_eoc_sta_action_vs__vs_eoc_get_info_req]
+ VS_EOC_DIAGNOSTIC_INFO_REQ -> . [cp_eoc_sta_action_vs__vs_eoc_diagnostic_info_req]
+ VS_EOC_GET_REAL_TIME_STATISTICS_REQ -> . [cp_eoc_sta_action_vs__vs_eoc_get_real_time_statistics_req]
+ to_leave -> DETECTING_BEACON [cp_eoc_sta_action_sta_clear_status]
+
+ASSOCIATING:
+ BEACON -> . [cp_eoc_sta_action_assoc__beacon_received]
+
+ASSOCIATED, AUTHENTICATED, SLEEP_AUTHENTICATED:
+ BEACON -> . [cp_eoc_sta_action_auth__beacon_received]
+
+ASSOCIATED, AUTHENTICATED:
+ CM_CHAN_EST_IND -> . [ce_tx_process__cm_chan_est_ind]
+ CM_TM_UPDATE_IND -> . [ce_tx_process__cm_update_tm_ind]
+
+AUTHENTICATED:
+ first_com_with_assoc_sta -> . [NULL]
+ cp_sta_action_bridge_first_com
+ CM_BRG_INFO_CNF -> . [cp_sta_action_process_cm_brg_info_cnf]
+ CM_BRG_INFO_REQ -> . [cp_sta_action_process_cm_brg_info_req]
+
+SLEEP_UNASSOCIATED:
+ exit_sleep_unassociated -> UNASSOCIATED [NULL]
+
+SLEEP_AUTHENTICATED:
+ sleep_exit_rsp -> AUTHENTICATED [NULL]
+ no_beacons -> UNASSOCIATED [NULL]
+
+STOPPING:
+ to_stop -> . [cp_sta_action_poweron__many__to_idle]
+ stopped -> STOPPED [cp_sta_action_drv__stopping__stopped]
+ send DRV_STA_MAC_STOP.CNF
diff --git a/cesar/cp/eoc/fsm/src/fsm/template_defs.h b/cesar/cp/eoc/fsm/src/fsm/template_defs.h
new file mode 100644
index 0000000000..d61762c492
--- /dev/null
+++ b/cesar/cp/eoc/fsm/src/fsm/template_defs.h
@@ -0,0 +1,52 @@
+#ifndef %(prefix)s_defs_h
+#define %(prefix)s_defs_h
+/*
+ * THIS IS AN AUTOMATICALLY GENERATED FILE, DO NOT EDIT!
+ *
+ * %(name)s
+ *
+%(*comments)s */
+
+/* %(name)s states. */
+enum %(prefix)s_state_t
+{
+%(states)s %(PREFIX)s_STATE_NB
+};
+typedef enum %(prefix)s_state_t %(prefix)s_state_t;
+
+/* %(name)s events types. */
+enum %(prefix)s_event_type_t
+{
+%(events,%(PREFIX)s_EVENT_TYPE_%(event)s)s %(PREFIX)s_EVENT_TYPE_NB
+};
+typedef enum %(prefix)s_event_type_t %(prefix)s_event_type_t;
+
+/* This macro enables checks for branches used in the wrong state/event
+ * combination. */
+#define _BRANCH(state, event, to) \
+ ((%(PREFIX)s_STATE_ ## state) << 16 \
+ | (%(PREFIX)s_EVENT_TYPE_ ## event) << 8 \
+ | (%(PREFIX)s_STATE_ ## to))
+
+/* %(name)s branches. */
+enum %(prefix)s_branch_t
+{
+%(branches)s};
+typedef enum %(prefix)s_branch_t %(prefix)s_branch_t;
+
+#undef _BRANCH
+
+/* %(name)s transition type. */
+typedef void *%(prefix)s_transition_t;
+
+/* %(name)s enter/leave type. */
+typedef void (*%(prefix)s_enter_leave_t) (cp_t *ctx);
+
+/* Value to use to follow a given branch. */
+#define %(PREFIX)s_BRANCH(state, event, branch) \
+ %(PREFIX)s_BRANCH__ ## state ## __ ## event ## __ ## branch
+
+/* %(name)s number of initial states. */
+#define %(PREFIX)s_INITIAL_NB %(initials_nb)s
+
+#endif /* %(prefix)s_defs_h */
diff --git a/cesar/cp/eoc/fsm/src/fsm/template_tables.h b/cesar/cp/eoc/fsm/src/fsm/template_tables.h
new file mode 100644
index 0000000000..c13300cd28
--- /dev/null
+++ b/cesar/cp/eoc/fsm/src/fsm/template_tables.h
@@ -0,0 +1,46 @@
+/*
+ * THIS IS AN AUTOMATICALLY GENERATED FILE, DO NOT EDIT!
+ *
+ * %(name)s
+ *
+%(*comments)s */
+
+/* %(name)s transition table. */
+const %(prefix)s_transition_t
+%(prefix)s_transition_table[%(PREFIX)s_STATE_NB][%(PREFIX)s_EVENT_TYPE_NB] = {
+%(transition_table)s};
+
+/* %(name)s only branch table. */
+const %(prefix)s_state_t
+%(prefix)s_only_branch_table[%(PREFIX)s_STATE_NB][%(PREFIX)s_EVENT_TYPE_NB] = {
+%(only_branch_table)s};
+
+/* %(name)s state enter table. */
+const %(prefix)s_enter_leave_t
+%(prefix)s_enter_table[%(PREFIX)s_STATE_NB] = {
+%(states,%(@enter|NULL)s)s};
+
+/* %(name)s state leave table. */
+const %(prefix)s_enter_leave_t
+%(prefix)s_leave_table[%(PREFIX)s_STATE_NB] = {
+%(states,%(@leave|NULL)s)s};
+
+/* %(name)s initial states table. */
+const %(prefix)s_state_t
+%(prefix)s_initials_table[%(PREFIX)s_INITIAL_NB] = {
+%(initials)s};
+
+#if CONFIG_TRACE
+
+/* %(name)s state names table. */
+const char *
+%(prefix)s_state_names_table[%(PREFIX)s_STATE_NB] = {
+%(states,"%(state)s")s};
+
+/* %(name)s event names table. */
+const char *
+%(prefix)s_event_names_table[%(PREFIX)s_EVENT_TYPE_NB] = {
+%(events,"%(event)s")s};
+
+#endif /* CONFIG_TRACE */
+
diff --git a/cesar/cp/eoc/fsm/src/tables.c b/cesar/cp/eoc/fsm/src/tables.c
new file mode 100644
index 0000000000..198de59da8
--- /dev/null
+++ b/cesar/cp/eoc/fsm/src/tables.c
@@ -0,0 +1,37 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/fsm/src/tables.c
+ * \brief EoC FSM tables.
+ * \ingroup cp_eoc_fsm
+ */
+#include "common/std.h"
+
+#include "cp/fsm/fsm.h"
+#include "cp/fsm/inc/tables.h"
+
+#include "ce/tx/tx.h"
+#include "cp/beacon/beacon.h"
+
+#include "cp/eoc/cco/action/cco_action.h"
+#include "cp/eoc/sta/action/action.h"
+#include "cp/eoc/beacon/beacon.h"
+
+
+/* CE TX stub. */
+void
+ce_tx_process__cm_chan_est_ind (cp_t *ctx, cp_mme_rx_t *mme)
+ __attribute__((weak));
+
+void
+ce_tx_process__cm_chan_est_ind (cp_t *ctx, cp_mme_rx_t *mme)
+{
+}
+
+/* Include generated tables. */
+#include "cp_fsm_tables.h"
diff --git a/cesar/cp/eoc/fsm/stub/Module b/cesar/cp/eoc/fsm/stub/Module
new file mode 100644
index 0000000000..da8170171b
--- /dev/null
+++ b/cesar/cp/eoc/fsm/stub/Module
@@ -0,0 +1,4 @@
+SOURCES := fsm_stub.c
+MODULES := cp/eoc/fsm
+cp_eoc_fsm_MODULE_SOURCES := $(call default,cp_eoc_fsm_MODULE_SOURCES,)
+cp_fsm_MODULE_SOURCES := $(call default,cp_fsm_MODULE_SOURCES,)
diff --git a/cesar/cp/eoc/fsm/stub/src/fsm_stub.c b/cesar/cp/eoc/fsm/stub/src/fsm_stub.c
new file mode 100644
index 0000000000..dd915b4f63
--- /dev/null
+++ b/cesar/cp/eoc/fsm/stub/src/fsm_stub.c
@@ -0,0 +1,87 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/fsm/stub/src/fsm_stub.c
+ * \brief Generic FSM stub.
+ * \ingroup cp_eoc_fsm_stub
+ */
+#include "common/std.h"
+#include "cp/fsm/fsm.h"
+
+void
+cp_fsm_init (cp_t *ctx) __attribute__ ((weak));
+void
+cp_fsm_init (cp_t *ctx) { }
+
+void
+cp_fsm_uninit (cp_t *ctx) __attribute__ ((weak));
+void
+cp_fsm_uninit (cp_t *ctx) {}
+
+void
+cp_fsm_process (cp_t *ctx) __attribute__ ((weak));
+void
+cp_fsm_process (cp_t *ctx) {}
+
+void
+cp_fsm_process_urgent (cp_t *ctx) __attribute__ ((weak));
+void
+cp_fsm_process_urgent (cp_t *ctx) {}
+
+void
+cp_fsm_post (cp_t *ctx, cp_fsm_event_t *event) __attribute__ ((weak));
+void
+cp_fsm_post (cp_t *ctx, cp_fsm_event_t *event) {}
+
+void
+cp_fsm_trigger (cp_t *ctx, cp_fsm_event_t *event) __attribute__ ((weak));
+void
+cp_fsm_trigger (cp_t *ctx, cp_fsm_event_t *event) {}
+
+void
+cp_fsm_post_urgent (cp_t *ctx, cp_fsm_event_t *event) __attribute__ ((weak));
+void
+cp_fsm_post_urgent (cp_t *ctx, cp_fsm_event_t *event) {}
+
+void
+cp_fsm_branch_ (cp_t *ctx, cp_fsm_branch_t branch) __attribute__ ((weak));
+void
+cp_fsm_branch_ (cp_t *ctx, cp_fsm_branch_t branch) {}
+
+cp_fsm_event_t *
+cp_fsm_event_bare_new (cp_t *ctx, cp_fsm_event_type_t type)
+ __attribute__ ((weak));
+cp_fsm_event_t *
+cp_fsm_event_bare_new (cp_t *ctx, cp_fsm_event_type_t type)
+{ return INVALID_PTR; }
+
+cp_fsm_event_t *
+cp_fsm_event_mme_new (cp_t *ctx, cp_fsm_event_type_t type, cp_mme_rx_t *mme)
+ __attribute__ ((weak));
+cp_fsm_event_t *
+cp_fsm_event_mme_new (cp_t *ctx, cp_fsm_event_type_t type, cp_mme_rx_t *mme)
+{ return INVALID_PTR; }
+
+cp_fsm_event_t *
+cp_fsm_event_sta_new (cp_t *ctx, cp_fsm_event_type_t type,
+ cp_net_t *net, cp_sta_t *sta) __attribute__ ((weak));
+cp_fsm_event_t *
+cp_fsm_event_sta_new (cp_t *ctx, cp_fsm_event_type_t type,
+ cp_net_t *net, cp_sta_t *sta)
+{ return INVALID_PTR; }
+
+cp_fsm_event_t *
+cp_fsm_event_beacon_new (cp_t *ctx, cp_fsm_event_type_t type,
+ bsu_beacon_t *beacon, cp_net_t *net,
+ cp_sta_t *sta) __attribute__ ((weak));
+cp_fsm_event_t *
+cp_fsm_event_beacon_new (cp_t *ctx, cp_fsm_event_type_t type,
+ bsu_beacon_t *beacon, cp_net_t *net,
+ cp_sta_t *sta)
+{ return INVALID_PTR; }
+
diff --git a/cesar/cp/eoc/fsm/test/utest/Config b/cesar/cp/eoc/fsm/test/utest/Config
new file mode 100644
index 0000000000..7378106168
--- /dev/null
+++ b/cesar/cp/eoc/fsm/test/utest/Config
@@ -0,0 +1,3 @@
+CONFIG_CP_EOC = y
+CONFIG_DEBUG_FATAL_CATCH = y
+CONFIG_CP_FSM_DEF = "cp/eoc/fsm/test/utest/src/utest.fsm"
diff --git a/cesar/cp/eoc/fsm/test/utest/Makefile b/cesar/cp/eoc/fsm/test/utest/Makefile
new file mode 100644
index 0000000000..7cf4406e65
--- /dev/null
+++ b/cesar/cp/eoc/fsm/test/utest/Makefile
@@ -0,0 +1,14 @@
+BASE = ../../../../..
+
+INCLUDES = cp/eoc/fsm/test/utest cp/eoc/fsm/test/utest/override
+
+HOST_PROGRAMS = test_fsm
+test_fsm_SOURCES = test_fsm.c fsm_stub.c actions.c
+test_fsm_MODULES = lib lib/scenario cp/eoc/fsm
+test_fsm_CONFIG_MODULES = cp/eoc mac/common
+cp_eoc_fsm_MODULE_SOURCES :=
+
+cp_MODULE_MODULES =
+cp_MODULE_SOURCES = $(if $(filter y,$(CONFIG_TRACE)),trace.c,)
+
+include $(BASE)/common/make/top.mk
diff --git a/cesar/cp/eoc/fsm/test/utest/inc/scenario_defs.h b/cesar/cp/eoc/fsm/test/utest/inc/scenario_defs.h
new file mode 100644
index 0000000000..a91c3fe4d8
--- /dev/null
+++ b/cesar/cp/eoc/fsm/test/utest/inc/scenario_defs.h
@@ -0,0 +1,135 @@
+#ifndef inc_scenario_defs_h
+#define inc_scenario_defs_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file inc/scenario_defs.h
+ * \brief Scenario definitions.
+ * \ingroup test
+ */
+
+#include "cp/types.h"
+#include "cp/mme.h"
+#include "cp/fsm/fsm.h"
+
+/* Scenario globals. */
+#define SCENARIO_DEFS_GLOBALS \
+ cp_t *cp;
+
+/* Scenario actions. */
+#define SCENARIO_DEFS_ACTIONS \
+ post_and_process, \
+ post, \
+ trigger, \
+ post_urgent, \
+ process, \
+ process_urgent
+
+typedef struct
+{
+ cp_fsm_event_type_t type;
+ cp_mme_rx_t *mme;
+ bsu_beacon_t *beacon;
+ cp_net_t *net;
+ cp_sta_t *sta;
+} scenario_action_event_param_t;
+
+typedef scenario_action_event_param_t scenario_action_post_and_process_t;
+typedef scenario_action_event_param_t scenario_action_post_t;
+typedef scenario_action_event_param_t scenario_action_trigger_t;
+typedef scenario_action_event_param_t scenario_action_post_urgent_t;
+typedef scenario_empty_t scenario_action_process_t;
+typedef scenario_empty_t scenario_action_process_urgent_t;
+
+void
+scenario_action_post_and_process_cb (scenario_globals_t *globals,
+ scenario_params_t *params);
+
+void
+scenario_action_post_cb (scenario_globals_t *globals,
+ scenario_params_t *params);
+
+void
+scenario_action_trigger_cb (scenario_globals_t *globals,
+ scenario_params_t *params);
+
+void
+scenario_action_post_urgent_cb (scenario_globals_t *globals,
+ scenario_params_t *params);
+
+void
+scenario_action_process_cb (scenario_globals_t *globals,
+ scenario_params_t *params);
+
+void
+scenario_action_process_urgent_cb (scenario_globals_t *globals,
+ scenario_params_t *params);
+
+/* Scenario events. */
+#define SCENARIO_DEFS_EVENTS \
+ cp_fsm__STATE1__event1, \
+ cp_fsm__STATE1__event2, \
+ cp_fsm__STATE1__event_mme, \
+ cp_fsm__STATE1__event_sta, \
+ cp_fsm__STATE1__event_beacon, \
+ cp_fsm__STATE1__eventb, \
+ cp_fsm__STATE1__long_event, \
+ cp_fsm__STATE1__urgent_event, \
+ cp_fsm__STATE2__event3, \
+ cp_fsm__STATE3__event1, \
+ cp_fsm__STATE3__event2, \
+ cp_fsm__STATE3__urgent_event, \
+ cp_fsm__STATE4__event1, \
+ cp_fsm__STATE5__enter, \
+ cp_fsm__STATE5__leave, \
+ cp_fsm__STATE6__enter, \
+ cp_fsm__STATE6__leave, \
+ cp_fsm__STATEA__eventb, \
+ cp_fsm__STATEB__eventa
+
+typedef struct
+{
+ cp_fsm_branch_t branch;
+} scenario_event_transition_with_branch_t;
+
+typedef scenario_empty_t scenario_event_cp_fsm__STATE1__event1_t;
+typedef scenario_empty_t scenario_event_cp_fsm__STATE1__event2_t;
+typedef struct
+{
+ cp_mme_rx_t *mme;
+} scenario_event_cp_fsm__STATE1__event_mme_t;
+typedef struct
+{
+ cp_net_t *net;
+ cp_sta_t *sta;
+} scenario_event_cp_fsm__STATE1__event_sta_t;
+typedef struct
+{
+ bsu_beacon_t *beacon;
+ cp_net_t *net;
+ cp_sta_t *sta;
+} scenario_event_cp_fsm__STATE1__event_beacon_t;
+typedef scenario_empty_t scenario_event_cp_fsm__STATE1__eventb_t;
+typedef scenario_empty_t scenario_event_cp_fsm__STATE1__long_event_t;
+typedef scenario_empty_t scenario_event_cp_fsm__STATE1__urgent_event_t;
+typedef scenario_event_transition_with_branch_t
+scenario_event_cp_fsm__STATE2__event3_t;
+typedef scenario_event_transition_with_branch_t
+scenario_event_cp_fsm__STATE3__event1_t;
+typedef scenario_empty_t scenario_event_cp_fsm__STATE3__event2_t;
+typedef scenario_empty_t scenario_event_cp_fsm__STATE3__urgent_event_t;
+typedef scenario_event_transition_with_branch_t
+scenario_event_cp_fsm__STATE4__event1_t;
+typedef scenario_empty_t scenario_event_cp_fsm__STATE5__enter_t;
+typedef scenario_empty_t scenario_event_cp_fsm__STATE5__leave_t;
+typedef scenario_empty_t scenario_event_cp_fsm__STATE6__enter_t;
+typedef scenario_empty_t scenario_event_cp_fsm__STATE6__leave_t;
+typedef scenario_empty_t scenario_event_cp_fsm__STATEA__eventb_t;
+typedef scenario_empty_t scenario_event_cp_fsm__STATEB__eventa_t;
+
+#endif /* inc_scenario_defs_h */
diff --git a/cesar/cp/eoc/fsm/test/utest/override/cp/inc/context.h b/cesar/cp/eoc/fsm/test/utest/override/cp/inc/context.h
new file mode 100644
index 0000000000..edc1fde804
--- /dev/null
+++ b/cesar/cp/eoc/fsm/test/utest/override/cp/inc/context.h
@@ -0,0 +1,35 @@
+#ifndef override_cp_inc_context_h
+#define override_cp_inc_context_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file override/cp/inc/context.h
+ * \brief Control plane context override.
+ * \ingroup test
+ */
+
+#include "cp/fsm/fsm.h"
+#include "cp/fsm/inc/context.h"
+#include "cp/inc/trace.h"
+
+struct cp_t
+{
+#if CONFIG_TRACE
+ /** Trace context. */
+ trace_buffer_t trace;
+#endif /* CONFIG_TRACE */
+
+ /** FSM context. */
+ cp_fsm_t fsm;
+ /** STA core flag. */
+ bool sta_core_flag;
+ /** STA core urgent flag. */
+ bool sta_core_urgent_flag;
+};
+
+#endif /* override_cp_inc_context_h */
diff --git a/cesar/cp/eoc/fsm/test/utest/override/cp/sta/core/core.h b/cesar/cp/eoc/fsm/test/utest/override/cp/sta/core/core.h
new file mode 100644
index 0000000000..352368b45b
--- /dev/null
+++ b/cesar/cp/eoc/fsm/test/utest/override/cp/sta/core/core.h
@@ -0,0 +1,26 @@
+#ifndef override_cp_sta_core_core_h
+#define override_cp_sta_core_core_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file override/cp/sta/core/core.h
+ * \brief STA Core override.
+ * \ingroup test
+ */
+
+BEGIN_DECLS
+
+void
+cp_sta_core_signal_fsm_event (cp_t *ctx);
+
+void
+cp_sta_core_signal_fsm_urgent_event (cp_t *ctx);
+
+END_DECLS
+
+#endif /* override_cp_sta_core_core_h */
diff --git a/cesar/cp/eoc/fsm/test/utest/src/actions.c b/cesar/cp/eoc/fsm/test/utest/src/actions.c
new file mode 100644
index 0000000000..b8d344a32f
--- /dev/null
+++ b/cesar/cp/eoc/fsm/test/utest/src/actions.c
@@ -0,0 +1,97 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/actions.c
+ * \brief Scenario actions.
+ * \ingroup test
+ */
+#include "common/std.h"
+
+#include "lib/scenario/scenario.h"
+
+#include "cp/inc/context.h"
+
+cp_fsm_event_t *
+scenario_action_make_event (cp_t *cp, scenario_action_event_param_t *ep)
+{
+ cp_fsm_event_t *event;
+ if (ep->mme)
+ event = cp_fsm_event_mme_new (cp, ep->type, ep->mme);
+ else if (ep->beacon)
+ event = cp_fsm_event_beacon_new (cp, ep->type, ep->beacon, ep->net,
+ ep->sta);
+ else if (ep->sta)
+ event = cp_fsm_event_sta_new (cp, ep->type, ep->net, ep->sta);
+ else
+ event = cp_fsm_event_bare_new (cp, ep->type);
+ return event;
+}
+
+void
+scenario_action_post_and_process_cb (scenario_globals_t *globals,
+ scenario_params_t *params)
+{
+ test_within (scenario.t);
+ scenario_action_post_and_process_t *p = &params->action_post_and_process;
+ cp_fsm_post (globals->cp, scenario_action_make_event (globals->cp, p));
+ test_fail_unless (globals->cp->sta_core_flag);
+ globals->cp->sta_core_flag = false;
+ cp_fsm_process (globals->cp);
+}
+
+void
+scenario_action_post_cb (scenario_globals_t *globals,
+ scenario_params_t *params)
+{
+ test_within (scenario.t);
+ scenario_action_post_t *p = &params->action_post;
+ cp_fsm_post (globals->cp, scenario_action_make_event (globals->cp, p));
+ test_fail_unless (globals->cp->sta_core_flag);
+}
+
+void
+scenario_action_trigger_cb (scenario_globals_t *globals,
+ scenario_params_t *params)
+{
+ test_within (scenario.t);
+ scenario_action_trigger_t *p = &params->action_trigger;
+ cp_fsm_trigger (globals->cp, scenario_action_make_event (globals->cp, p));
+ test_fail_unless (globals->cp->sta_core_flag);
+}
+
+void
+scenario_action_post_urgent_cb (scenario_globals_t *globals,
+ scenario_params_t *params)
+{
+ test_within (scenario.t);
+ scenario_action_post_urgent_t *p = &params->action_post_urgent;
+ cp_fsm_post_urgent (globals->cp,
+ scenario_action_make_event (globals->cp, p));
+ test_fail_unless (globals->cp->sta_core_urgent_flag);
+}
+
+void
+scenario_action_process_cb (scenario_globals_t *globals,
+ scenario_params_t *params)
+{
+ test_within (scenario.t);
+ test_fail_unless (globals->cp->sta_core_flag);
+ globals->cp->sta_core_flag = false;
+ cp_fsm_process (globals->cp);
+}
+
+void
+scenario_action_process_urgent_cb (scenario_globals_t *globals,
+ scenario_params_t *params)
+{
+ test_within (scenario.t);
+ test_fail_unless (globals->cp->sta_core_urgent_flag);
+ globals->cp->sta_core_urgent_flag = false;
+ cp_fsm_process_urgent (globals->cp);
+}
+
diff --git a/cesar/cp/eoc/fsm/test/utest/src/fsm_stub.c b/cesar/cp/eoc/fsm/test/utest/src/fsm_stub.c
new file mode 100644
index 0000000000..ee8c8bea9e
--- /dev/null
+++ b/cesar/cp/eoc/fsm/test/utest/src/fsm_stub.c
@@ -0,0 +1,263 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/fsm_stub.c
+ * \brief Override FSM tables.
+ * \ingroup test
+ */
+#include "common/std.h"
+
+#include "lib/scenario/scenario.h"
+
+#include "cp/fsm/fsm.h"
+#include "cp/fsm/inc/tables.h"
+
+int cp_fsm__STATE1__enter_nb;
+int cp_fsm__STATE2__enter_nb;
+
+void
+cp_fsm__STATE1__enter (cp_t *ctx);
+
+void
+cp_fsm__STATE1__event1 (cp_t *ctx);
+
+void
+cp_fsm__STATE1__event2 (cp_t *ctx);
+
+void
+cp_fsm__STATE1__error_event_no_branch (cp_t *ctx);
+
+void
+cp_fsm__STATE1__error_event_bad_branch (cp_t *ctx);
+
+void
+cp_fsm__STATE1__error_event_dup_branch (cp_t *ctx);
+
+void
+cp_fsm__STATE1__error_urgent_event_branch (cp_t *ctx);
+
+void
+cp_fsm__STATE1__event_mme (cp_t *ctx, cp_mme_rx_t *mme);
+
+void
+cp_fsm__STATE1__event_sta (cp_t *ctx, cp_net_t *net, cp_sta_t *sta);
+
+void
+cp_fsm__STATE1__event_beacon (cp_t *ctx, bsu_beacon_t *beacon,
+ cp_net_t *net, cp_sta_t *sta);
+
+void
+cp_fsm__STATE1__eventb (cp_t *ctx);
+
+void
+cp_fsm__STATE1__long_event (cp_t *ctx);
+
+void
+cp_fsm__STATE1__urgent_event (cp_t *ctx);
+
+void
+cp_fsm__STATE2__enter (cp_t *ctx);
+
+void
+cp_fsm__STATE2__event3 (cp_t *ctx);
+
+void
+cp_fsm__STATE3__event1 (cp_t *ctx);
+
+void
+cp_fsm__STATE3__event2 (cp_t *ctx);
+
+void
+cp_fsm__STATE3__urgent_event (cp_t *ctx);
+
+void
+cp_fsm__STATE4__event1 (cp_t *ctx);
+
+void
+cp_fsm__STATE5__enter (cp_t *ctx);
+
+void
+cp_fsm__STATE5__leave (cp_t *ctx);
+
+void
+cp_fsm__STATE6__enter (cp_t *ctx);
+
+void
+cp_fsm__STATE6__leave (cp_t *ctx);
+
+void
+cp_fsm__STATEA__eventb (cp_t *ctx);
+
+void
+cp_fsm__STATEB__eventa (cp_t *ctx);
+
+/* Include generated tables. */
+#include "cp_fsm_tables.h"
+
+void
+cp_fsm__STATE1__enter (cp_t *ctx)
+{
+ cp_fsm__STATE1__enter_nb++;
+}
+
+void
+cp_fsm__STATE1__event1 (cp_t *ctx)
+{
+ scenario_event (cp_fsm__STATE1__event1);
+}
+
+void
+cp_fsm__STATE1__event2 (cp_t *ctx)
+{
+ scenario_event (cp_fsm__STATE1__event2);
+}
+
+void
+cp_fsm__STATE1__error_event_no_branch (cp_t *ctx)
+{
+ /* Do not choose branch. */
+}
+
+void
+cp_fsm__STATE1__error_event_bad_branch (cp_t *ctx)
+{
+ cp_fsm_branch (ctx, STATE2, event3, branch1);
+}
+
+void
+cp_fsm__STATE1__error_event_dup_branch (cp_t *ctx)
+{
+ cp_fsm_branch (ctx, STATE1, error_event_dup_branch, branch1);
+ cp_fsm_branch (ctx, STATE1, error_event_dup_branch, branch2);
+}
+
+void
+cp_fsm__STATE1__error_urgent_event_branch (cp_t *ctx)
+{
+ cp_fsm_branch (ctx, STATE1, error_urgent_event_branch, branch1);
+}
+
+void
+cp_fsm__STATE1__event_mme (cp_t *ctx, cp_mme_rx_t *mme)
+{
+ scenario_event (cp_fsm__STATE1__event_mme, param);
+ test_fail_unless (mme == param->mme);
+}
+
+void
+cp_fsm__STATE1__event_sta (cp_t *ctx, cp_net_t *net, cp_sta_t *sta)
+{
+ scenario_event (cp_fsm__STATE1__event_sta, param);
+ test_fail_unless (net == param->net);
+ test_fail_unless (sta == param->sta);
+}
+
+void
+cp_fsm__STATE1__event_beacon (cp_t *ctx, bsu_beacon_t *beacon,
+ cp_net_t *net, cp_sta_t *sta)
+{
+ scenario_event (cp_fsm__STATE1__event_beacon, param);
+ test_fail_unless (beacon == param->beacon);
+ test_fail_unless (net == param->net);
+ test_fail_unless (sta == param->sta);
+}
+
+void
+cp_fsm__STATE1__eventb (cp_t *ctx)
+{
+ scenario_event (cp_fsm__STATE1__eventb);
+}
+
+void
+cp_fsm__STATE1__long_event (cp_t *ctx)
+{
+ scenario_event (cp_fsm__STATE1__long_event);
+ cp_fsm_process_urgent (ctx);
+}
+
+void
+cp_fsm__STATE1__urgent_event (cp_t *ctx)
+{
+ scenario_event (cp_fsm__STATE1__urgent_event);
+}
+
+void
+cp_fsm__STATE2__enter (cp_t *ctx)
+{
+ cp_fsm__STATE2__enter_nb++;
+}
+
+void
+cp_fsm__STATE2__event3 (cp_t *ctx)
+{
+ scenario_event (cp_fsm__STATE2__event3, param);
+ cp_fsm_branch_ (ctx, param->branch);
+}
+
+void
+cp_fsm__STATE3__event1 (cp_t *ctx)
+{
+ scenario_event (cp_fsm__STATE3__event1, param);
+ cp_fsm_branch_ (ctx, param->branch);
+}
+
+void
+cp_fsm__STATE3__event2 (cp_t *ctx)
+{
+ scenario_event (cp_fsm__STATE3__event2);
+}
+
+void
+cp_fsm__STATE3__urgent_event (cp_t *ctx)
+{
+ scenario_event (cp_fsm__STATE3__urgent_event);
+}
+
+void
+cp_fsm__STATE4__event1 (cp_t *ctx)
+{
+ scenario_event (cp_fsm__STATE4__event1, param);
+ cp_fsm_branch_ (ctx, param->branch);
+}
+
+void
+cp_fsm__STATE5__enter (cp_t *ctx)
+{
+ scenario_event (cp_fsm__STATE5__enter);
+}
+
+void
+cp_fsm__STATE5__leave (cp_t *ctx)
+{
+ scenario_event (cp_fsm__STATE5__leave);
+}
+
+void
+cp_fsm__STATE6__enter (cp_t *ctx)
+{
+ scenario_event (cp_fsm__STATE6__enter);
+}
+
+void
+cp_fsm__STATE6__leave (cp_t *ctx)
+{
+ scenario_event (cp_fsm__STATE6__leave);
+}
+
+void
+cp_fsm__STATEA__eventb (cp_t *ctx)
+{
+ scenario_event (cp_fsm__STATEA__eventb);
+}
+
+void
+cp_fsm__STATEB__eventa (cp_t *ctx)
+{
+ scenario_event (cp_fsm__STATEB__eventa);
+}
+
diff --git a/cesar/cp/eoc/fsm/test/utest/src/test_fsm.c b/cesar/cp/eoc/fsm/test/utest/src/test_fsm.c
new file mode 100644
index 0000000000..54a17abc6d
--- /dev/null
+++ b/cesar/cp/eoc/fsm/test/utest/src/test_fsm.c
@@ -0,0 +1,477 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/test_fsm.c
+ * \brief Test FSM module.
+ * \ingroup test
+ */
+#include "common/std.h"
+
+#include "lib/blk.h"
+#include "lib/test.h"
+#include "lib/scenario/scenario.h"
+
+#include "cp/fsm/fsm.h"
+
+#include "cp/inc/context.h"
+
+#include "cp/sta/core/core.h"
+
+extern int cp_fsm__STATE1__enter_nb;
+extern int cp_fsm__STATE2__enter_nb;
+
+void
+test_fsm_basic_test_case (test_t t)
+{
+ test_case_begin (t, "basic");
+ cp_t cp;
+ cp.sta_core_urgent_flag = false;
+ cp_trace_init (&cp);
+ slab_cache_t cache;
+ slab_cache_init (&cache, "dummy", 1, NULL);
+ cp_mme_rx_t *mme = slab_alloc (&cache);
+ cp_sta_t *sta = slab_alloc (&cache);
+ cp_net_t *net = (void *) 0x9abcdef0;
+ bsu_beacon_t *beacon = blk_alloc ();
+ test_begin (t, "bare")
+ {
+ cp_fsm_init (&cp);
+ cp.sta_core_flag = false;
+ scenario_entry_t entries[] = {
+ /* STATE1 */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_event1),
+ SCENARIO_EVENT (cp_fsm__STATE1__event1),
+ /* STATE1 */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_event2),
+ SCENARIO_EVENT (cp_fsm__STATE1__event2),
+ /* STATE2 */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_event3),
+ SCENARIO_EVENT (cp_fsm__STATE2__event3,
+ .branch = CP_FSM_BRANCH (STATE2, event3, branch1)),
+ /* STATE3 */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_event1),
+ SCENARIO_EVENT (cp_fsm__STATE3__event1,
+ .branch = CP_FSM_BRANCH (STATE3, event1, branch2)),
+ /* STATE3 */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_event2),
+ SCENARIO_EVENT (cp_fsm__STATE3__event2),
+ /* STATE2 */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_event3),
+ SCENARIO_EVENT (cp_fsm__STATE2__event3,
+ .branch = CP_FSM_BRANCH (STATE2, event3, branch2)),
+ /* STATE4 */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_event1),
+ SCENARIO_EVENT (cp_fsm__STATE4__event1,
+ .branch = CP_FSM_BRANCH (STATE4, event1, branch2)),
+ /* STATE4 */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_event1),
+ SCENARIO_EVENT (cp_fsm__STATE4__event1,
+ .branch = CP_FSM_BRANCH (STATE4, event1, branch1)),
+ /* STATE1 */
+ SCENARIO_END
+ };
+ scenario_globals_t globals = {
+ .cp = &cp,
+ };
+ scenario_run (t, entries, &globals);
+ test_fail_unless (cp.fsm.active_states[0] == CP_FSM_STATE_STATE1);
+ cp_fsm_uninit (&cp);
+ } test_end;
+ test_begin (t, "mme")
+ {
+ cp_fsm_init (&cp);
+ cp.sta_core_flag = false;
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_event_mme, .mme = mme),
+ SCENARIO_EVENT (cp_fsm__STATE1__event_mme, .mme = mme),
+ SCENARIO_END
+ };
+ scenario_globals_t globals = {
+ .cp = &cp,
+ };
+ scenario_run (t, entries, &globals);
+ test_fail_unless (cp.fsm.active_states[0] == CP_FSM_STATE_STATE1);
+ cp_fsm_uninit (&cp);
+ } test_end;
+ test_begin (t, "sta")
+ {
+ cp_fsm_init (&cp);
+ cp.sta_core_flag = false;
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_event_sta,
+ .net = net, .sta = sta),
+ SCENARIO_EVENT (cp_fsm__STATE1__event_sta,
+ .net = net, .sta = sta),
+ SCENARIO_END
+ };
+ scenario_globals_t globals = {
+ .cp = &cp,
+ };
+ scenario_run (t, entries, &globals);
+ test_fail_unless (cp.fsm.active_states[0] == CP_FSM_STATE_STATE1);
+ cp_fsm_uninit (&cp);
+ } test_end;
+ test_begin (t, "beacon")
+ {
+ cp_fsm_init (&cp);
+ cp.sta_core_flag = false;
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_event_beacon,
+ .beacon = beacon, .net = net, .sta = sta),
+ SCENARIO_EVENT (cp_fsm__STATE1__event_beacon,
+ .beacon = beacon, .net = net, .sta = sta),
+ SCENARIO_END
+ };
+ scenario_globals_t globals = {
+ .cp = &cp,
+ };
+ scenario_run (t, entries, &globals);
+ test_fail_unless (cp.fsm.active_states[0] == CP_FSM_STATE_STATE1);
+ cp_fsm_uninit (&cp);
+ } test_end;
+ test_begin (t, "dual")
+ {
+ cp_fsm_init (&cp);
+ cp.sta_core_flag = false;
+ scenario_entry_t entries[] = {
+ /* STATE1, STATEA */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_eventb),
+ SCENARIO_EVENT (cp_fsm__STATE1__eventb),
+ SCENARIO_EVENT (cp_fsm__STATEA__eventb),
+ /* STATE3, STATEB */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_eventa),
+ SCENARIO_EVENT (cp_fsm__STATEB__eventa),
+ /* STATE3, STATEA */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_event1),
+ SCENARIO_EVENT (cp_fsm__STATE3__event1,
+ .branch = CP_FSM_BRANCH (STATE3, event1, branch1)),
+ /* STATE1, STATEA */
+ SCENARIO_END
+ };
+ scenario_globals_t globals = {
+ .cp = &cp,
+ };
+ scenario_run (t, entries, &globals);
+ test_fail_unless (cp.fsm.active_states[0] == CP_FSM_STATE_STATE1);
+ test_fail_unless (cp.fsm.active_states[1] == CP_FSM_STATE_STATEA);
+ cp_fsm_uninit (&cp);
+ } test_end;
+ test_begin (t, "no action")
+ {
+ cp_fsm_init (&cp);
+ cp.sta_core_flag = false;
+ scenario_entry_t entries[] = {
+ /* STATE1 */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_event_no_action),
+ /* STATE3 */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_event1),
+ SCENARIO_EVENT (cp_fsm__STATE3__event1,
+ .branch = CP_FSM_BRANCH (STATE3, event1, branch1)),
+ /* STATE1 */
+ SCENARIO_END
+ };
+ scenario_globals_t globals = {
+ .cp = &cp,
+ };
+ scenario_run (t, entries, &globals);
+ test_fail_unless (cp.fsm.active_states[0] == CP_FSM_STATE_STATE1);
+ cp_fsm_uninit (&cp);
+ } test_end;
+ test_begin (t, "enter leave")
+ {
+ cp_fsm__STATE1__enter_nb = 0;
+ cp_fsm__STATE2__enter_nb = 0;
+ cp_fsm_init (&cp);
+ cp.sta_core_flag = false;
+ scenario_entry_t entries[] = {
+ /* STATE1 */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_event5),
+ SCENARIO_EVENT (cp_fsm__STATE5__enter),
+ /* STATE5 */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_event5),
+ /* No enter/leave here. */
+ /* STATE5 */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_event6),
+ SCENARIO_EVENT (cp_fsm__STATE5__leave),
+ SCENARIO_EVENT (cp_fsm__STATE6__enter),
+ /* STATE6 */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_event1),
+ SCENARIO_EVENT (cp_fsm__STATE6__leave),
+ /* STATE1 */
+ SCENARIO_END
+ };
+ scenario_globals_t globals = {
+ .cp = &cp,
+ };
+ scenario_run (t, entries, &globals);
+ test_fail_unless (cp.fsm.active_states[0] == CP_FSM_STATE_STATE1);
+ test_fail_unless (cp_fsm__STATE1__enter_nb == 2);
+ test_fail_unless (cp_fsm__STATE2__enter_nb == 0);
+ cp_fsm_uninit (&cp);
+ } test_end;
+ test_begin (t, "trigger")
+ {
+ cp_fsm_init (&cp);
+ cp.sta_core_flag = false;
+ scenario_entry_t entries[] = {
+ /* STATE1 */
+ SCENARIO_ACTION (post, .type = CP_FSM_EVENT_TYPE_event3),
+ SCENARIO_ACTION (trigger, .type = CP_FSM_EVENT_TYPE_event1),
+ SCENARIO_ACTION (trigger, .type = CP_FSM_EVENT_TYPE_event2),
+ SCENARIO_ACTION (process),
+ SCENARIO_EVENT (cp_fsm__STATE1__event1),
+ SCENARIO_ACTION (process),
+ SCENARIO_EVENT (cp_fsm__STATE1__event2),
+ /* STATE2 */
+ SCENARIO_ACTION (process),
+ SCENARIO_EVENT (cp_fsm__STATE2__event3,
+ .branch = CP_FSM_BRANCH (STATE2, event3, branch1)),
+ /* STATE3 */
+ SCENARIO_ACTION (trigger, .type = CP_FSM_EVENT_TYPE_event1),
+ SCENARIO_ACTION (process),
+ SCENARIO_EVENT (cp_fsm__STATE3__event1,
+ .branch = CP_FSM_BRANCH (STATE3, event1, branch1)),
+ /* STATE1 */
+ /* Now, test some insertion corner cases. */
+ SCENARIO_ACTION (trigger, .type = CP_FSM_EVENT_TYPE_event1),
+ SCENARIO_ACTION (trigger, .type = CP_FSM_EVENT_TYPE_event1),
+ SCENARIO_ACTION (post, .type = CP_FSM_EVENT_TYPE_event1),
+ SCENARIO_END
+ };
+ scenario_globals_t globals = {
+ .cp = &cp,
+ };
+ scenario_run (t, entries, &globals);
+ test_fail_unless (cp.fsm.active_states[0] == CP_FSM_STATE_STATE1);
+ cp_fsm_uninit (&cp);
+ } test_end;
+ test_begin (t, "urgent")
+ {
+ cp_fsm_init (&cp);
+ cp.sta_core_flag = false;
+ scenario_entry_t entries[] = {
+ /* STATE1 */
+ SCENARIO_ACTION (post, .type = CP_FSM_EVENT_TYPE_long_event),
+ SCENARIO_ACTION (post_urgent,
+ .type = CP_FSM_EVENT_TYPE_urgent_event),
+ SCENARIO_ACTION (process),
+ SCENARIO_EVENT (cp_fsm__STATE1__long_event),
+ SCENARIO_EVENT (cp_fsm__STATE1__urgent_event),
+ /* STATE3 */
+ SCENARIO_ACTION (post_urgent,
+ .type = CP_FSM_EVENT_TYPE_urgent_event),
+ SCENARIO_ACTION (post_urgent,
+ .type = CP_FSM_EVENT_TYPE_urgent_event),
+ SCENARIO_ACTION (process_urgent),
+ SCENARIO_EVENT (cp_fsm__STATE3__urgent_event),
+ SCENARIO_ACTION (process_urgent),
+ SCENARIO_EVENT (cp_fsm__STATE3__urgent_event),
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_event1),
+ SCENARIO_EVENT (cp_fsm__STATE3__event1,
+ .branch = CP_FSM_BRANCH (STATE3, event1, branch1)),
+ SCENARIO_END
+ };
+ scenario_globals_t globals = {
+ .cp = &cp,
+ };
+ scenario_run (t, entries, &globals);
+ test_fail_unless (cp.fsm.active_states[0] == CP_FSM_STATE_STATE1);
+ cp_fsm_uninit (&cp);
+ } test_end;
+ slab_release (mme);
+ slab_release (sta);
+ slab_cache_uninit (&cache);
+ blk_release (beacon);
+#if CONFIG_TRACE
+ trace_buffer_dbg_dump (&cp.trace);
+#endif /* CONFIG_TRACE */
+ cp_trace_uninit (&cp);
+}
+
+void
+test_fsm_error_test_case (test_t t)
+{
+ test_case_begin (t, "error");
+ cp_t cp;
+ cp_trace_init (&cp);
+ test_begin (t, "no branch")
+ {
+ cp_fsm_init (&cp);
+ cp_fsm_event_t *event = cp_fsm_event_bare_new (
+ &cp, CP_FSM_EVENT_TYPE_error_event_no_branch);
+ cp_fsm_post (&cp, event);
+ const char *asserted = NULL;
+ dbg_fatal_try_begin
+ {
+ cp_fsm_process (&cp);
+ }
+ dbg_fatal_try_catch (const char *msg)
+ {
+ slab_release (event); /* Was not release due to assert. */
+ asserted = msg;
+ }
+ dbg_fatal_try_end;
+ test_fail_unless (asserted);
+ } test_end;
+ test_begin (t, "bad branch")
+ {
+ cp_fsm_init (&cp);
+ cp_fsm_event_t *event = cp_fsm_event_bare_new (
+ &cp, CP_FSM_EVENT_TYPE_error_event_bad_branch);
+ cp_fsm_post (&cp, event);
+ const char *asserted = NULL;
+ dbg_fatal_try_begin
+ {
+ cp_fsm_process (&cp);
+ }
+ dbg_fatal_try_catch (const char *msg)
+ {
+ slab_release (event); /* Was not release due to assert. */
+ asserted = msg;
+ }
+ dbg_fatal_try_end;
+ test_fail_unless (asserted);
+ } test_end;
+ test_begin (t, "dup branch")
+ {
+ cp_fsm_init (&cp);
+ cp_fsm_event_t *event = cp_fsm_event_bare_new (
+ &cp, CP_FSM_EVENT_TYPE_error_event_dup_branch);
+ cp_fsm_post (&cp, event);
+ const char *asserted = NULL;
+ dbg_fatal_try_begin
+ {
+ cp_fsm_process (&cp);
+ }
+ dbg_fatal_try_catch (const char *msg)
+ {
+ slab_release (event); /* Was not release due to assert. */
+ asserted = msg;
+ }
+ dbg_fatal_try_end;
+ test_fail_unless (asserted);
+ } test_end;
+ test_begin (t, "not in transition")
+ {
+ cp_fsm_init (&cp);
+ const char *asserted = NULL;
+ dbg_fatal_try_begin
+ {
+ cp_fsm_branch (&cp, STATE1, error_event_no_branch, branch1);
+ }
+ dbg_fatal_try_catch (const char *msg)
+ {
+ asserted = msg;
+ }
+ dbg_fatal_try_end;
+ test_fail_unless (asserted);
+ } test_end;
+ test_begin (t, "transition for urgent event")
+ {
+ cp_fsm_init (&cp);
+ cp_fsm_event_t *event = cp_fsm_event_bare_new (
+ &cp, CP_FSM_EVENT_TYPE_error_urgent_event_transition);
+ cp_fsm_post_urgent (&cp, event);
+ const char *asserted = NULL;
+ dbg_fatal_try_begin
+ {
+ cp_fsm_process_urgent (&cp);
+ }
+ dbg_fatal_try_catch (const char *msg)
+ {
+ slab_release (event); /* Was not release due to assert. */
+ asserted = msg;
+ }
+ dbg_fatal_try_end;
+ test_fail_unless (asserted);
+ } test_end;
+ test_begin (t, "branch for urgent event")
+ {
+ cp_fsm_init (&cp);
+ cp_fsm_event_t *event = cp_fsm_event_bare_new (
+ &cp, CP_FSM_EVENT_TYPE_error_urgent_event_branch);
+ cp_fsm_post_urgent (&cp, event);
+ const char *asserted = NULL;
+ dbg_fatal_try_begin
+ {
+ cp_fsm_process_urgent (&cp);
+ }
+ dbg_fatal_try_catch (const char *msg)
+ {
+ slab_release (event); /* Was not release due to assert. */
+ asserted = msg;
+ }
+ dbg_fatal_try_end;
+ test_fail_unless (asserted);
+ } test_end;
+#if CONFIG_TRACE
+ trace_buffer_dbg_dump (&cp.trace);
+#endif /* CONFIG_TRACE */
+ cp_trace_uninit (&cp);
+}
+
+void
+test_fsm_test_suite (test_t t)
+{
+ test_suite_begin (t, "fsm");
+ test_fsm_basic_test_case (t);
+ test_fsm_error_test_case (t);
+ test_case_begin (t, "memory");
+ test_begin (t, "memory")
+ {
+ test_fail_unless (blk_check_memory ());
+ } test_end;
+}
+
+void
+cp_sta_core_signal_fsm_event (cp_t *ctx)
+{
+ dbg_assert (ctx);
+ ctx->sta_core_flag = true;
+}
+
+void
+cp_sta_core_signal_fsm_urgent_event (cp_t *ctx)
+{
+ dbg_assert (ctx);
+ ctx->sta_core_urgent_flag = true;
+}
+
+int
+main (int argc, char **argv)
+{
+ test_t t;
+ trace_init ();
+ test_init (t, argc, argv);
+ test_fsm_test_suite (t);
+ trace_uninit ();
+ test_result (t);
+ return test_nb_failed (t) == 0 ? 0 : 1;
+}
+
diff --git a/cesar/cp/eoc/fsm/test/utest/src/utest.fsm b/cesar/cp/eoc/fsm/test/utest/src/utest.fsm
new file mode 100644
index 0000000000..f251cb6708
--- /dev/null
+++ b/cesar/cp/eoc/fsm/test/utest/src/utest.fsm
@@ -0,0 +1,86 @@
+Test Control Plane FSM
+ Test FSM for engine test.
+
+States:
+ STATE1 [enter=cp_fsm__STATE1__enter]
+ STATE2 [enter=cp_fsm__STATE2__enter]
+ STATE3
+ STATE4
+ STATE5 [enter=cp_fsm__STATE5__enter leave=cp_fsm__STATE5__leave]
+ STATE6 [enter=cp_fsm__STATE6__enter leave=cp_fsm__STATE6__leave]
+ *STATEA
+ STATEB
+
+Events:
+ event1
+ event2
+ event3
+ event4
+ event5
+ event6
+ error_event_no_branch
+ test error conditions: no branch selected
+ error_event_bad_branch
+ test error conditions: branch not for this event
+ error_event_dup_branch
+ test error conditions: branch selected two times
+ error_urgent_event_transition
+ test error conditions: urgent event with transition
+ error_urgent_event_branch
+ test error conditions: urgent event with branch
+ event_mme
+ event_sta
+ event_beacon
+ event_no_action
+ eventa
+ eventb
+ long_event
+ long event handling triggering a urgent process
+ urgent_event
+
+STATE1:
+ event1 -> .
+ event2 -> STATE2
+ event5 -> STATE5 [NULL]
+ error_event_no_branch: branch1 -> .
+ error_event_no_branch: branch2 -> .
+ error_event_bad_branch: branch1 -> .
+ error_event_bad_branch: branch2 -> .
+ error_event_dup_branch: branch1 -> .
+ error_event_dup_branch: branch2 -> .
+ error_urgent_event_transition -> STATE2 [NULL]
+ error_urgent_event_branch: branch1 -> .
+ error_urgent_event_branch: branch2 -> .
+ event_mme -> .
+ event_sta -> .
+ event_beacon -> .
+ event_no_action -> STATE3 [NULL]
+ eventb -> STATE3
+ long_event -> STATE3
+ urgent_event -> .
+
+STATE2:
+ event3: branch1 -> STATE3
+ event3: branch2 -> STATE4
+
+STATE3:
+ event2 -> STATE2
+ urgent_event -> .
+
+STATE3, STATE4:
+ event1: branch1 -> STATE1
+ event1: branch2 -> .
+
+STATE5:
+ event5 -> . [NULL]
+ event6 -> STATE6 [NULL]
+
+STATE6:
+ event1 -> STATE1 [NULL]
+
+STATEA:
+ eventb -> STATEB
+
+STATEB:
+ eventa -> STATEA
+
diff --git a/cesar/cp/eoc/inc/dbg_print.h b/cesar/cp/eoc/inc/dbg_print.h
new file mode 100644
index 0000000000..b1c5ad1c62
--- /dev/null
+++ b/cesar/cp/eoc/inc/dbg_print.h
@@ -0,0 +1,63 @@
+#ifndef cp_eoc_inc_dbg_print_h
+#define cp_eoc_inc_dbg_print_h
+
+/* Cesar project {{{
+ *
+ * Copyright (C) 2007 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/inc/dbg_print.h
+ * \brief Define macros for printing sta status (associated, authenticated,
+ * white_list).
+ * \ingroup cp_eoc
+ */
+
+#include "config/cp/eoc/dbg/print/level.h"
+
+/* CONFIG_CP_EOC_DBG_PRINT_LEVEL == 0
+ * => no messages will be printed
+ */
+#if (CONFIG_CP_EOC_DBG_PRINT_LEVEL == 0)
+#define DBG_PRINTC(args...) { while (0); }
+#define DBG_PRINT_2(args...) { while (0); }
+#define DBG_PRINT(args...) { while (0); }
+
+
+/* CONFIG_CP_EOC_DBG_PRINT_LEVEL == 1
+ * => messages will be printed without a path to the file and the line number.
+ */
+#elif (CONFIG_CP_EOC_DBG_PRINT_LEVEL == 1)
+#include "stdio.h"
+#define DBG_PRINTC(args...) \
+ { \
+ printf(args);\
+ }
+#define DBG_PRINT_2(args...) { while (0); }
+#define DBG_PRINT(args...) {\
+ printf (args);\
+ printf ("\n");\
+}
+
+
+/* CONFIG_CP_EOC_DBG_PRINT_LEVEL == 2
+ * => messages will be printed with a path to the file and the line number.
+ */
+#elif (CONFIG_CP_EOC_DBG_PRINT_LEVEL == 2)
+#include "stdio.h"
+#define DBG_PRINTC(args...) \
+ { \
+ printf(args);\
+ }
+#define DBG_PRINT_2(args...) DBG_PRINT(args)
+#define DBG_PRINT(args...) {\
+ printf ("DBG: ");\
+ printf (__FILE__);\
+ printf(", line: %d\n ", __LINE__);\
+ printf (args);\
+ printf ("\n");\
+}
+#endif /* CONFIG_CP_EOC_DBG_PRINT_LEVEL */
+#endif /* cp_eoc_inc_dbg_print_h */
diff --git a/cesar/cp/eoc/inc/trace.h b/cesar/cp/eoc/inc/trace.h
new file mode 100644
index 0000000000..83a4450b12
--- /dev/null
+++ b/cesar/cp/eoc/inc/trace.h
@@ -0,0 +1,31 @@
+#ifndef inc_trace_h
+#define inc_trace_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2012 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/inc/trace.h
+ * \ingroup cp_eoc
+ */
+
+#include "cp/inc/trace.h"
+
+#if CONFIG_TRACE
+enum
+{
+ CP_TRACE_MULTI_STA_FSM_CHANGE_STATE = CP_TRACE_LAST_ENUM,
+ CP_TRACE_MULTI_STA_ASSOC,
+};
+#endif
+
+BEGIN_DECLS
+
+/* cp_eoc_trace_init declared as CP_VARIANT. */
+
+END_DECLS
+
+#endif /* inc_trace_h */
diff --git a/cesar/cp/eoc/msg/Config b/cesar/cp/eoc/msg/Config
new file mode 100644
index 0000000000..0654fcba00
--- /dev/null
+++ b/cesar/cp/eoc/msg/Config
@@ -0,0 +1,2 @@
+CONFIG_CP_MSG_EOC_MULTI_STA_MME = n
+CONFIG_CP_MSG_EOC_DRV_MME = n
diff --git a/cesar/cp/eoc/msg/Module b/cesar/cp/eoc/msg/Module
new file mode 100644
index 0000000000..cd82535dc2
--- /dev/null
+++ b/cesar/cp/eoc/msg/Module
@@ -0,0 +1,3 @@
+MODULES := cp/msg
+
+SOURCES := msg_vs.c
diff --git a/cesar/cp/eoc/msg/inc/msg_vs.h b/cesar/cp/eoc/msg/inc/msg_vs.h
new file mode 100644
index 0000000000..cb5b549bd3
--- /dev/null
+++ b/cesar/cp/eoc/msg/inc/msg_vs.h
@@ -0,0 +1,252 @@
+#ifndef cp_eoc_msg_inc_msg_vs_h
+#define cp_eoc_msg_inc_msg_vs_h
+/* Cesar-EoC project {{{
+ *
+ * Copyright (C) 2009 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/msg/inc/msg_vs.h
+ * \brief VS EoC family MME.
+ * \ingroup cp_eoc_msg
+ */
+#include "cp/eoc/msg/inc/vs_eoc_get_topo.h"
+#include "cp/eoc/cco/bw/inc/service.h"
+#include "cp/sta/mgr/sta.h"
+#include "cp/eoc/sta/action/vs.h"
+
+#define WL_MME_MAX_ENTRY_COUNT 15
+
+/** Result of a VS_EOC_CCO_SET_WL request. */
+enum cp_msg_vs_eoc_cco_set_wl_req_result_t
+{
+ CP_MSG_VS_EOC_CCO_SET_WL_REQ_RESULT_SUCCESS,
+ CP_MSG_VS_EOC_CCO_SET_WL_REQ_RESULT_FAILURE,
+ CP_MSG_VS_EOC_CCO_SET_WL_REQ_RESULT_NB,
+};
+typedef enum cp_msg_vs_eoc_cco_set_wl_req_result_t cp_msg_vs_eoc_cco_set_wl_req_result_t;
+
+
+/** Result of a VS_EOC_CCO_GET_WL request. */
+enum cp_msg_vs_eoc_cco_get_wl_req_result_t
+{
+ CP_MSG_VS_EOC_CCO_GET_WL_REQ_RESULT_SUCCESS,
+ CP_MSG_VS_EOC_CCO_GET_WL_REQ_RESULT_FAILURE,
+ CP_MSG_VS_EOC_CCO_GET_WL_REQ_RESULT_NB,
+};
+typedef enum cp_msg_vs_eoc_cco_get_wl_req_result_t cp_msg_vs_eoc_cco_get_wl_req_result_t;
+
+/** Result of a VS_EOC_SET_PORTS request */
+
+enum cp_msg_vs_eoc_set_ports_req_result_t
+{
+ CP_MSG_VS_EOC_SET_PORTS_REQ_RESULT_SUCCESS,
+ CP_MSG_VS_EOC_SET_PORTS_REQ_RESULT_FAILURE,
+ CP_MSG_VS_EOC_SET_PORTS_REQ_RESULT_NB,
+};
+typedef enum cp_msg_vs_eoc_set_ports_req_result_t cp_msg_vs_eoc_set_ports_req_result_t;
+
+/** Result of a VS_EOC_CCO_GET_PORTS request */
+
+enum cp_msg_vs_eoc_cco_get_ports_req_result_t
+{
+ CP_MSG_VS_EOC_CCO_GET_PORTS_REQ_RESULT_SUCCESS,
+ CP_MSG_VS_EOC_CCO_GET_PORTS_REQ_RESULT_FAILURE,
+ CP_MSG_VS_EOC_CCO_GET_PORTS_REQ_RESULT_NB,
+};
+typedef enum cp_msg_vs_eoc_cco_get_ports_req_result_t cp_msg_vs_eoc_cco_get_ports_req_result_t;
+
+/** Result of a VS_EOC_CCO_SET_SERVICES request */
+
+enum cp_msg_vs_eoc_cco_set_services_req_result_t
+{
+ CP_MSG_VS_EOC_CCO_SET_SERVICES_REQ_RESULT_SUCCESS,
+ CP_MSG_VS_EOC_CCO_SET_SERVICES_REQ_RESULT_FAILURE,
+ CP_MSG_VS_EOC_CCO_SET_SERVICES_REQ_RESULT_NB,
+};
+typedef enum cp_msg_vs_eoc_cco_set_services_req_result_t cp_msg_vs_eoc_cco_set_services_req_result_t;
+
+/** Result of a VS_EOC_CCO_GET_SERVICES request */
+
+enum cp_msg_vs_eoc_cco_get_services_req_result_t
+{
+ CP_MSG_VS_EOC_CCO_GET_SERVICES_REQ_RESULT_SUCCESS,
+ CP_MSG_VS_EOC_CCO_GET_SERVICES_REQ_RESULT_FAILURE,
+ CP_MSG_VS_EOC_CCO_GET_SERVICES_REQ_RESULT_NB,
+};
+typedef enum cp_msg_vs_eoc_cco_get_services_req_result_t cp_msg_vs_eoc_cco_get_services_req_result_t;
+
+/** Result of a VS_EOC_GET_INFO_REQ request */
+
+enum cp_msg_vs_eoc_get_info_req_result_t
+{
+ CP_MSG_VS_EOC_GET_INFO_REQ_RESULT_SUCCESS,
+ CP_MSG_VS_EOC_GET_INFO_REQ_RESULT_FAILURE,
+ CP_MSG_VS_EOC_GET_INFO_REQ_RESULT_NB,
+};
+typedef enum cp_msg_vs_eoc_get_info_req_result_t cp_msg_vs_eoc_get_info_req_result_t;
+
+/** Result of a VS_EOC_DIAGNOSTIC_INFO_REQ request */
+
+enum cp_msg_vs_eoc_diagnostic_info_req_result_t
+{
+ CP_MSG_VS_EOC_DIAGNOSTIC_INFO_REQ_RESULT_SUCCESS,
+ CP_MSG_VS_EOC_DIAGNOSTIC_INFO_REQ_RESULT_FAILURE,
+ CP_MSG_VS_EOC_DIAGNOSTIC_INFO_REQ_RESULT_NB,
+};
+typedef enum cp_msg_vs_eoc_diagnostic_info_req_result_t cp_msg_vs_eoc_diagnostic_info_req_result_t;
+
+/** Result of a VS_EOC_GET_REAL_TIME_STATISTICS_REQ request */
+
+enum cp_msg_vs_eoc_get_real_time_statistics_req_result_t
+{
+ CP_MSG_VS_EOC_GET_REAL_TIME_STATISTICS_REQ_RESULT_SUCCESS,
+ CP_MSG_VS_EOC_GET_REAL_TIME_STATISTICS_REQ_RESULT_FAILURE,
+ CP_MSG_VS_EOC_GET_REAL_TIME_STATISTICS_REQ_RESULT_NB,
+};
+typedef enum cp_msg_vs_eoc_get_real_time_statistics_req_result_t cp_msg_vs_eoc_get_real_time_statistics_req_result_t;
+
+BEGIN_DECLS
+
+
+
+/**
+ * Receive a VS_EOC_CCO_SET_WL.REQ.
+ * \param ctx control plane context
+ * \param mme MME handle
+ * \param mac received mac address
+ * \return true on success
+ */
+
+
+bool
+cp_msg_vs_eoc_cco_set_wl_req_receive (cp_t *ctx, cp_mme_rx_t *mme,
+ uint *numStas, cp_tei_t *stas_teis, mac_t *stas_macs,
+ u8 *stas_authorizations, u8 *stas_output_levels, u32 *stas_start_times,
+ u32 *stas_end_times, cp_key_t *stas_daks, cp_dpw_t *stas_dpws,
+ u8 *stas_actions);
+
+void
+cp_msg_vs_eoc_cco_set_wl_cnf_send (cp_t *ctx, cp_mme_peer_t *peer, mmtype_t mmtype,
+ cp_msg_vs_eoc_cco_set_wl_req_result_t result);
+
+bool
+cp_msg_vs_eoc_cco_get_wl_req_receive (cp_t *ctx, cp_mme_rx_t *mme, u8 *first_wl_index_nb);
+
+void
+cp_msg_vs_eoc_cco_get_wl_cnf_send (cp_t *ctx, uint result, cp_mme_peer_t *peer,
+ uint numStas, cp_tei_t *stas_teis, mac_t *stas_macs,
+ u8 *stas_authorizations, u8 *stas_output_levels, u32 *stas_start_times,
+ u32 *stas_end_times, cp_key_t *stas_daks, cp_dpw_t *stas_dpws,
+ u8 *stas_actions, u8 first_wl_index_nb);
+
+void
+cp_msg_vs_eoc_cco_set_out_lev_ind_send (cp_t *ctx, cp_mme_peer_t *peer, uint output_level);
+
+bool
+cp_msg_eoc_sta_vs_set_out_lev_ind_receive(cp_t *ctx, cp_mme_rx_t *mme, uint *output_level);
+
+
+bool cp_msg_vs_eoc_set_ports_req_receive(cp_t *ctx, cp_mme_rx_t *mme, uint *numStas, mac_t *stas_macs,
+ u8 stas_ports_ed[][PORT_NB], u8 stas_ports_service[][PORT_NB]);
+
+void
+cp_msg_vs_eoc_set_ports_cnf_send (cp_t *ctx, cp_mme_peer_t *peer, mmtype_t mmtype,
+ cp_msg_vs_eoc_set_ports_req_result_t result);
+
+bool
+cp_msg_vs_eoc_cco_get_ports_req_receive (cp_t *ctx, cp_mme_rx_t *mme, u8 *first_mac_index_nb);
+
+void
+cp_msg_vs_eoc_cco_get_ports_cnf_send (cp_t *ctx, cp_mme_peer_t *peer, cp_msg_vs_eoc_cco_get_ports_req_result_t result,
+ uint numStas, mac_t *stas_macs, bool (*stas_port_ed)[PORT_NB], u8 (*stas_port_service)[PORT_NB], u8 first_mac_index_nb);
+
+bool
+cp_msg_vs_eoc_cco_set_services_req_receive(cp_t *ctx, cp_mme_rx_t *mme, u8 *command, u8 *services_number, u8 *service_indexes,
+ u8 *classifier_rules, u16 *clssifier_values, u8 *acses, u8 *parameters_numbers,
+ u16 parameters_lists[][SERVICE_PARAMETERS_NB]);
+
+void
+cp_msg_vs_eoc_cco_set_services_cnf_send (cp_t *ctx, cp_mme_peer_t *peer, mmtype_t mmtype,
+ cp_msg_vs_eoc_cco_set_services_req_result_t result);
+
+bool
+cp_msg_vs_eoc_cco_get_services_req_receive (cp_t *ctx, cp_mme_rx_t *mme, u8 *first_service_index_nb);
+
+void
+cp_msg_vs_eoc_cco_get_services_cnf_send (cp_t *ctx, cp_mme_peer_t *peer, cp_msg_vs_eoc_cco_get_services_req_result_t result,
+ u8 services_number, u8 *service_indexes, u8 *classifier_rules, u16 *classifier_values,
+ u8 *acses, u8 *parameters_numbers, u16 (*parameters_lists)[SERVICE_PARAMETERS_NB],
+ u8 first_service_index_nb);
+
+bool
+cp_msg_vs_eoc_cco_get_info_req_receive (cp_t *ctx, cp_mme_rx_t *mme, u8 *internal_eoc_index, u8 *control);
+
+void
+cp_msg_vs_eoc_cco_get_info_cnf_send(cp_t *ctx, cp_mme_peer_t *peer, cp_msg_vs_eoc_get_info_req_result_t status,
+ u16 tei, s8 attenuation, u8 snr, u16 phy_uplink_speed, u16 phy_downlink_speed, u8 output_power,
+ u32 tx_success_counter, u32 tx_crc_error_counter, u32 tx_other_error_counter, u32 rx_success_counter,
+ u32 rx_crc_error_counter, u32 rx_other_error_counter);
+
+bool
+cp_msg_vs_eoc_cco_diagnostic_info_req_receive (cp_t *ctx, cp_mme_rx_t *mme, u8 *internal_eoc_index, u8 *control);
+
+
+void
+cp_msg_vs_eoc_cco_diagnostict_info_cnf_send(cp_t *ctx, cp_mme_peer_t *peer, cp_msg_vs_eoc_diagnostic_info_req_result_t status,
+ u8 assoc_stat, u64 nid, u8 num_slots, mac_t he_mac_address, u16 est_avg_phy_rate, u8 num_good_assoc_auth,
+ u16 num_bad_could_not_assoc, u32 num_bad_assoc_failure, u32 num_bad_could_not_auth, u32 num_leave);
+
+
+
+/**
+ * Start sending of a VS_EOC_GET_TOPO.CNF.
+ * \param ctx the control plane context.
+ * \param peer the peer info.
+ * \param result the result.
+ * \param sta_nb the number of stations connected to CCo.
+ * \return the message context.
+ */
+cp_mme_tx_t *
+cp_msg_vs_eoc_get_topo_cnf_send_begin (cp_t *ctx, cp_mme_peer_t *peer,
+ cp_msg_vs_eoc_get_topo_cnf_result_t
+ result,
+ u8 sta_nb);
+
+/**
+ * Fill the MME with the station parameters.
+ * \param ctx the module context.
+ * \param mme the MME message.
+ * \param mac_addr the mac address of the station.
+ * \param auth_status the authorization status of the station.
+ * \param up_att the upstream attenuation.
+ */
+void
+cp_msg_vs_eoc_get_topo_cnf_send_sta (cp_t *ctx, cp_mme_tx_t *mme,
+ mac_t mac_addr,
+ u8 auth_status, s8 up_att);
+
+/**
+ * End sending of a VS_EOC_GET_TOPO.CNF.
+ * \param ctx the control plane context.
+ * \param mme the MME to send.
+ */
+void
+cp_msg_vs_eoc_get_topo_cnf_send_end (cp_t *ctx, cp_mme_tx_t *mme);
+
+
+bool
+cp_msg_vs_eoc_cco_get_real_time_stats_req_receive (cp_t *ctx, cp_mme_rx_t *mme, u8 *control);
+
+void
+cp_msg_vs_eoc_cco_get_real_time_stats_cnf_send (cp_t *ctx, cp_mme_peer_t *peer,
+ cp_msg_vs_eoc_get_real_time_statistics_req_result_t status, real_time_stats_t *rt_stats);
+
+
+
+END_DECLS
+
+
+#endif /* cp_eoc_msg_inc_msg_vs_h */
diff --git a/cesar/cp/eoc/msg/inc/vs_eoc_get_topo.h b/cesar/cp/eoc/msg/inc/vs_eoc_get_topo.h
new file mode 100644
index 0000000000..d36d84a98d
--- /dev/null
+++ b/cesar/cp/eoc/msg/inc/vs_eoc_get_topo.h
@@ -0,0 +1,27 @@
+#ifndef cp_msg_inc_vs_eoc_get_topo_h
+#define cp_msg_inc_vs_eoc_get_topo_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2009 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/msg/inc/vs_eoc_get_topo.h
+ * \brief VS_EOC_GET_TOPO Structures.
+ * \ingroup cp_eoc_msg
+ */
+
+/** VS_EOC_GET_TOPO.CNF result. */
+enum cp_msg_vs_eoc_get_topo_cnf_result_t
+{
+ CP_MSG_VS_EOC_GET_TOPO_CNF_RESULT_SUCCESS,
+ CP_MSG_VS_EOC_GET_TOPO_CNF_RESULT_FAILURE,
+ CP_MSG_VS_EOC_GET_TOPO_CNF_RESULT_NB
+};
+
+typedef enum cp_msg_vs_eoc_get_topo_cnf_result_t
+cp_msg_vs_eoc_get_topo_cnf_result_t;
+
+#endif /* cp_msg_inc_vs_eoc_get_topo_h */
diff --git a/cesar/cp/eoc/msg/msg.h b/cesar/cp/eoc/msg/msg.h
new file mode 100644
index 0000000000..43707f54b6
--- /dev/null
+++ b/cesar/cp/eoc/msg/msg.h
@@ -0,0 +1,23 @@
+#ifndef cp_eoc_msg_msg_h
+#define cp_eoc_msg_msg_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2012 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/msg/msg.h
+ * \brief « brief description »
+ * \ingroup cp_eoc_msg
+ *
+ * « long description »
+ */
+
+#include "cp/msg/msg.h"
+
+#include "cp/eoc/msg/inc/msg_vs.h"
+
+
+#endif /* cp_eoc_msg_msg_h */
diff --git a/cesar/cp/eoc/msg/src/msg_vs.c b/cesar/cp/eoc/msg/src/msg_vs.c
new file mode 100644
index 0000000000..de1f289bbd
--- /dev/null
+++ b/cesar/cp/eoc/msg/src/msg_vs.c
@@ -0,0 +1,654 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2009 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/msg/src/msg_vs_eoc.c
+ * \brief VS EoC family MME.
+ * \ingroup cp_msg
+ */
+#include "common/std.h"
+#include "common/defs/homeplugAV.h"
+#include "common/defs/ethernet.h"
+
+#include "cp/cp.h"
+#include "cp/mme.h"
+#include "cp/msg/msg.h"
+#include "common/defs/spidcom.h"
+
+#include "cp/sta/mgr/net.h"
+#include "cp/sta/mgr/sta_mgr.h"
+
+
+#include "cp/eoc/msg/inc/msg_vs.h"
+#include "cp/msg/inc/msg.h"
+#include "cp/eoc/sta/action/inc/vs.h"
+
+
+/**
+ * Start sending of a VS_EOC_GET_TOPO.CNF.
+ * \param ctx the control plane context.
+ * \param peer the peer info.
+ * \param result the result.
+ * \param sta_nb the number of stations connected to CCo.
+ * \return the message context.
+ */
+cp_mme_tx_t *
+cp_msg_vs_eoc_get_topo_cnf_send_begin (cp_t *ctx, cp_mme_peer_t *peer,
+ cp_msg_vs_eoc_get_topo_cnf_result_t
+ result, u8 sta_nb)
+{
+ cp_mme_tx_t * mme;
+
+ dbg_assert (ctx);
+ dbg_assert (peer);
+ dbg_assert (result < CP_MSG_VS_EOC_GET_TOPO_CNF_RESULT_NB);
+
+ mme = cp_msg_mme_init_not_frag (ctx, peer, VS_EOC_GET_TOPO_CNF);
+ dbg_assert (mme);
+
+ bitstream_write (&mme->bitstream, result, 8);
+ bitstream_write (&mme->bitstream, sta_nb, 8);
+
+ return mme;
+}
+
+/**
+ * Fill the MME with the station parameters.
+ * \param ctx the module context.
+ * \param mme the MME message.
+ * \param mac_addr the mac address of the station.
+ * \param auth_status the authorization status of the station.
+ * \param up_att the upstream attenuation.
+ */
+void
+cp_msg_vs_eoc_get_topo_cnf_send_sta (cp_t *ctx, cp_mme_tx_t *mme,
+ mac_t mac_addr, u8 auth_status,
+ s8 up_att)
+{
+ dbg_assert (ctx);
+ dbg_assert (mme);
+ dbg_assert (auth_status <= 3);
+
+ bitstream_write_large (&mme->bitstream, mac_addr, 48);
+ bitstream_write (&mme->bitstream, auth_status, 8);
+ /* Cast up_att to u8 because bitstream only process words, so the s8
+ * will be promoted to int (i.e. 32bits) and bitstream verifies that only
+ * 8 bits are set. */
+ bitstream_write (&mme->bitstream, (u8) up_att, 8);
+}
+
+/**
+ * End sending of a VS_EOC_GET_TOPO.CNF.
+ * \param ctx the control plane context.
+ * \param mme the MME to send.
+ */
+void
+cp_msg_vs_eoc_get_topo_cnf_send_end (cp_t *ctx, cp_mme_tx_t *mme)
+{
+ dbg_assert (ctx);
+ dbg_assert (mme);
+
+ bitstream_write_finalise (&mme->bitstream);
+
+ cp_msg_mme_send (ctx, mme);
+}
+
+bool
+cp_msg_vs_eoc_cco_set_wl_req_receive (
+ cp_t *ctx, cp_mme_rx_t *mme, uint *numStas, cp_tei_t *stas_teis,
+ mac_t *stas_macs, u8 *stas_authorizations, u8 *stas_output_levels,
+ u32 *stas_start_times, u32 *stas_end_times, cp_key_t *stas_daks,
+ cp_dpw_t *stas_dpws, u8 *stas_actions)
+{
+ dbg_assert (ctx);
+ dbg_assert (mme);
+ dbg_assert (numStas);
+ dbg_assert (stas_teis);
+ dbg_assert (stas_macs);
+ dbg_assert (stas_authorizations);
+ dbg_assert (stas_output_levels);
+ dbg_assert (stas_start_times);
+ dbg_assert (stas_end_times);
+ dbg_assert (stas_daks);
+ dbg_assert (stas_dpws);
+ dbg_assert (stas_actions);
+
+ /* Number of stations in the current MME */
+ uint number_of_stations;
+ uint i, j;
+
+ if (cp_msg_mme_read_error (ctx, mme))
+ {
+ number_of_stations = bitstream_read (&mme->bitstream, 8);
+ *numStas = number_of_stations;
+
+ for (i=0; i<number_of_stations; i++)
+ {
+ bitstream_access (&mme->bitstream, &stas_macs[i], 48);
+ bitstream_access (&mme->bitstream, &stas_teis[i], 8);
+ bitstream_access (&mme->bitstream, &stas_authorizations[i], 8);
+ bitstream_access (&mme->bitstream, &stas_output_levels[i], 8);
+ bitstream_access (&mme->bitstream, &stas_start_times[i], 32);
+ bitstream_access (&mme->bitstream, &stas_end_times[i], 32);
+ for (j=0; j<4; j++)
+ bitstream_access (&mme->bitstream, &stas_daks[i].key[j], 32);
+ bitstream_access_buf (&mme->bitstream, (u8 *) stas_dpws[i].dpw,
+ CP_DPW_MAX_SIZE);
+ stas_dpws[i].dpw[CP_DPW_MAX_SIZE] = '\0';
+ bitstream_access (&mme->bitstream, &stas_actions[i], 8);
+ }
+
+ return true;
+ }
+
+ return false;
+}
+
+void
+cp_msg_vs_eoc_cco_set_wl_cnf_send (
+ cp_t *ctx, cp_mme_peer_t *peer, mmtype_t mmtype,
+ cp_msg_vs_eoc_cco_set_wl_req_result_t result)
+{
+ cp_mme_tx_t *msg;
+
+ dbg_assert (peer);
+ dbg_assert (mmtype);
+
+ msg = cp_msg_mme_init_not_frag (ctx, peer, mmtype);
+ dbg_check (msg);
+
+ bitstream_access (&msg->bitstream, &result, 8);
+
+ cp_msg_mme_send (ctx, msg);
+}
+
+
+bool
+cp_msg_vs_eoc_cco_get_wl_req_receive (cp_t *ctx, cp_mme_rx_t *mme, u8 *first_wl_index_nb)
+{
+ dbg_assert (ctx);
+ dbg_assert (mme);
+
+ if (cp_msg_mme_read_error (ctx, mme))
+ {
+ *first_wl_index_nb = bitstream_read(&mme->bitstream, 8);
+ return true;
+ }
+ return false;
+}
+
+void
+cp_msg_vs_eoc_cco_get_wl_cnf_send (cp_t *ctx,
+ cp_msg_vs_eoc_cco_get_wl_req_result_t result, cp_mme_peer_t *peer,
+ uint numStas, cp_tei_t *stas_teis, mac_t *stas_macs,
+ u8 *stas_authorizations, u8 *stas_output_levels, u32 *stas_start_times,
+ u32 *stas_end_times, cp_key_t *stas_daks, cp_dpw_t *stas_dpws,
+ u8 *stas_actions, u8 first_wl_index_nb)
+{
+ cp_mme_tx_t *tx;
+ u8 i, j;
+ u8 total_wl_index_nb;
+ u8 wl_index_nb;
+ dbg_assert (ctx);
+ dbg_assert (stas_teis);
+ dbg_assert (stas_macs);
+ dbg_assert (stas_authorizations);
+ dbg_assert (stas_output_levels);
+ dbg_assert (stas_start_times);
+ dbg_assert (stas_end_times);
+ dbg_assert (stas_daks);
+ dbg_assert (stas_dpws);
+ dbg_assert (stas_actions);
+
+ /* One MME can contain maximum of WL_MME_MAX_ENTRY_COUNT WL entries. */
+ total_wl_index_nb = numStas;
+
+ if (first_wl_index_nb > total_wl_index_nb)
+ wl_index_nb = 0;
+ else
+ wl_index_nb = MIN (total_wl_index_nb - first_wl_index_nb,
+ WL_MME_MAX_ENTRY_COUNT);
+
+ tx = cp_msg_mme_init_not_frag (ctx, peer, VS_EOC_CCO_GET_WL_CNF);
+ dbg_assert (tx);
+ bitstream_write (&tx->bitstream, result, 8);
+ bitstream_write (&tx->bitstream, total_wl_index_nb, 8);
+ bitstream_write (&tx->bitstream, first_wl_index_nb, 8);
+ bitstream_write (&tx->bitstream, wl_index_nb, 8);
+ for (i = first_wl_index_nb; i < first_wl_index_nb + wl_index_nb; i++)
+ {
+ bitstream_write_large(&tx->bitstream, stas_macs[i], 48);
+ bitstream_write(&tx->bitstream, stas_teis[i], 8);
+ bitstream_write(&tx->bitstream, stas_authorizations[i], 8);
+ bitstream_write(&tx->bitstream, stas_output_levels[i], 8);
+ bitstream_write(&tx->bitstream, stas_start_times[i], 32);
+ bitstream_write(&tx->bitstream, stas_end_times[i], 32);
+ for (j=0; j<4; j++)
+ bitstream_write(&tx->bitstream, stas_daks[i].key[j], 32);
+ bitstream_write_buf(&tx->bitstream, (u8 *) stas_dpws[i].dpw,
+ CP_DPW_MAX_SIZE);
+ bitstream_write(&tx->bitstream, stas_actions[i], 8);
+ }
+
+ cp_msg_mme_send (ctx, tx);
+}
+
+void
+cp_msg_vs_eoc_cco_set_out_lev_ind_send(cp_t *ctx, cp_mme_peer_t *peer, uint output_level)
+{
+ dbg_assert(ctx);
+
+ cp_mme_tx_t *tx;
+
+ tx = cp_msg_mme_init_not_frag (ctx, peer, VS_EOC_CCO_SET_OUT_LEV_IND);
+ dbg_assert(tx);
+
+ bitstream_write(&tx->bitstream, output_level, 8);
+ bitstream_write_finalise(&tx->bitstream);
+ cp_msg_mme_send (ctx, tx);
+}
+
+bool
+cp_msg_eoc_sta_vs_set_out_lev_ind_receive(cp_t *ctx, cp_mme_rx_t *mme, uint *output_level)
+{
+ dbg_assert (ctx);
+ dbg_assert (mme);
+
+ if (cp_msg_mme_read_error (ctx, mme))
+ {
+ *output_level = bitstream_read(&mme->bitstream, 8);
+ return true;
+ }
+ return false;
+}
+
+
+bool cp_msg_vs_eoc_set_ports_req_receive(cp_t *ctx, cp_mme_rx_t *mme, uint *numStas, mac_t *stas_macs,
+ u8 stas_ports_ed[][PORT_NB], u8 stas_ports_service[][PORT_NB])
+{
+ dbg_assert(ctx);
+ dbg_assert(mme);
+ dbg_assert(numStas);
+ dbg_assert(stas_macs);
+ dbg_assert(stas_ports_ed);
+ dbg_assert(stas_ports_service);
+
+ uint number_of_stations;
+ uint i,j;
+
+ if(cp_msg_mme_read_error(ctx,mme))
+ {
+ number_of_stations = bitstream_read (&mme->bitstream, 8);
+ *numStas = number_of_stations;
+
+ for(i = 0; i < number_of_stations; i++)
+ {
+ bitstream_access(&mme->bitstream, &stas_macs[i], 48);
+ for(j = 0; j < PORT_NB; j++)
+ {
+ bitstream_access(&mme->bitstream, &stas_ports_ed[i][j], 8);
+ bitstream_access(&mme->bitstream, &stas_ports_service[i][j], 8);
+ }
+ }
+ return true;
+ }
+ return false;
+}
+
+void
+cp_msg_vs_eoc_set_ports_cnf_send (cp_t *ctx, cp_mme_peer_t *peer, mmtype_t mmtype,
+ cp_msg_vs_eoc_set_ports_req_result_t result)
+{
+ cp_mme_tx_t *msg;
+
+ dbg_assert (peer);
+ dbg_assert (mmtype);
+
+ msg = cp_msg_mme_init_not_frag (ctx, peer, mmtype);
+ dbg_check (msg);
+
+ bitstream_access (&msg->bitstream, &result, 8);
+
+ cp_msg_mme_send (ctx, msg);
+}
+
+bool
+cp_msg_vs_eoc_cco_get_ports_req_receive (cp_t *ctx, cp_mme_rx_t *mme, u8 *first_mac_index_nb)
+{
+ dbg_assert (ctx);
+ dbg_assert (mme);
+
+ if (cp_msg_mme_read_error (ctx, mme))
+ {
+ *first_mac_index_nb = bitstream_read(&mme->bitstream, 8);
+ return true;
+ }
+ return false;
+}
+
+
+void
+cp_msg_vs_eoc_cco_get_ports_cnf_send (
+ cp_t *ctx, cp_mme_peer_t *peer,
+ cp_msg_vs_eoc_cco_get_ports_req_result_t result, uint numStas,
+ mac_t *stas_macs, bool stas_port_ed[][PORT_NB],
+ u8 stas_port_service[][PORT_NB], u8 first_mac_index_nb)
+{
+ cp_mme_tx_t *tx;
+ u8 i,j;
+ u8 entries_per_mme_nb;
+ u8 total_macs_index_nb;
+ u8 macs_index_nb;
+ dbg_assert (ctx);
+ dbg_assert (stas_macs);
+ dbg_assert(stas_port_ed);
+ dbg_assert(stas_port_service);
+
+ /* One mme can contain 1492 bytes. The first 4 bytes are: result, total_macs_index_nb, first_mac_index_nb
+ and macs_index_nb. There are 1488 bytes remaining. Each entry begins with 6 bytes for a mac address,
+ followed by 2 bytes for each port (one for stas_port_ed and the other one for stas_port_service). */
+
+ entries_per_mme_nb = 1488/(6 + 2 * PORT_NB) - 1;
+ total_macs_index_nb = numStas;
+
+ if (first_mac_index_nb > total_macs_index_nb)
+ macs_index_nb = 0;
+ else
+ macs_index_nb = ((total_macs_index_nb - first_mac_index_nb) >= entries_per_mme_nb) ?
+ entries_per_mme_nb : total_macs_index_nb - first_mac_index_nb;
+
+ tx = cp_msg_mme_init_not_frag (ctx, peer, VS_EOC_CCO_GET_PORTS_CNF);
+ dbg_assert (tx);
+ bitstream_write (&tx->bitstream, result, 8);
+ bitstream_write (&tx->bitstream, total_macs_index_nb, 8);
+ bitstream_write (&tx->bitstream, first_mac_index_nb, 8);
+ bitstream_write (&tx->bitstream, macs_index_nb, 8);
+ for (i = first_mac_index_nb; i < first_mac_index_nb + macs_index_nb; i++)
+ {
+ bitstream_write_large(&tx->bitstream, stas_macs[i], 48);
+ for(j = 0; j < PORT_NB; j++)
+ {
+ bitstream_write(&tx->bitstream, stas_port_ed[i][j], 8);
+ bitstream_write(&tx->bitstream, stas_port_service[i][j], 8);
+ }
+ }
+
+ cp_msg_mme_send (ctx, tx);
+}
+
+
+bool
+cp_msg_vs_eoc_cco_set_services_req_receive (
+ cp_t *ctx, cp_mme_rx_t *mme, u8 *command, u8 *services_number,
+ u8 *service_indexes, u8 *classifier_rules, u16 *classifier_values,
+ u8 *acses, u8 *parameters_numbers,
+ u16 parameters_lists[][SERVICE_PARAMETERS_NB])
+{
+ dbg_assert(ctx);
+ dbg_assert(mme);
+ dbg_assert(command);
+ dbg_assert(services_number);
+ dbg_assert(service_indexes);
+ dbg_assert(classifier_rules);
+ dbg_assert(classifier_values);
+ dbg_assert(acses);
+ dbg_assert(parameters_numbers);
+ dbg_assert(parameters_lists);
+
+ u8 number_of_services;
+ u8 i,j;
+ u8 parameters_number_tmp;
+
+ if(cp_msg_mme_read_error(ctx,mme))
+ {
+ *command = bitstream_read(&mme->bitstream, 8);
+ number_of_services = bitstream_read (&mme->bitstream, 8);
+ *services_number = number_of_services;
+
+ for(i = 0; i < number_of_services; i++)
+ {
+ bitstream_access(&mme->bitstream, &service_indexes[i], 8);
+ bitstream_access(&mme->bitstream, &classifier_rules[i], 8);
+ bitstream_access(&mme->bitstream, &classifier_values[i], 16);
+ bitstream_access(&mme->bitstream, &acses[i], 8);
+ bitstream_access(&mme->bitstream, &parameters_numbers[i], 8);
+ parameters_number_tmp = parameters_numbers[i];
+ for(j = 0; j < parameters_number_tmp; j++)
+ {
+ bitstream_access(&mme->bitstream, &parameters_lists[i][j], 16);
+ }
+ }
+ return true;
+ }
+ return false;
+}
+
+void
+cp_msg_vs_eoc_cco_set_services_cnf_send (
+ cp_t *ctx, cp_mme_peer_t *peer,
+ mmtype_t mmtype, cp_msg_vs_eoc_cco_set_services_req_result_t result)
+{
+ cp_mme_tx_t *msg;
+
+ dbg_assert (peer);
+ dbg_assert (mmtype);
+
+ msg = cp_msg_mme_init_not_frag (ctx, peer, mmtype);
+ dbg_check (msg);
+
+ bitstream_access (&msg->bitstream, &result, 8);
+
+ cp_msg_mme_send (ctx, msg);
+}
+
+
+bool
+cp_msg_vs_eoc_cco_get_services_req_receive (cp_t *ctx, cp_mme_rx_t *mme, u8 *first_service_index_nb)
+{
+ dbg_assert (ctx);
+ dbg_assert (mme);
+
+ if (cp_msg_mme_read_error (ctx, mme))
+ {
+ *first_service_index_nb = bitstream_read(&mme->bitstream, 8);
+ return true;
+ }
+ return false;
+}
+
+void
+cp_msg_vs_eoc_cco_get_services_cnf_send (cp_t *ctx, cp_mme_peer_t *peer, cp_msg_vs_eoc_cco_get_services_req_result_t result,
+ u8 services_number, u8 *service_indexes, u8 *classifier_rules, u16 *classifier_values,
+ u8 *acses, u8 *parameters_numbers, u16 (*parameters_lists)[SERVICE_PARAMETERS_NB], u8 first_service_index_nb)
+{
+ dbg_assert(ctx);
+ dbg_assert(peer);
+ dbg_assert(service_indexes);
+ dbg_assert(classifier_rules);
+ dbg_assert(classifier_values);
+ dbg_assert(acses);
+ dbg_assert(parameters_numbers);
+ dbg_assert(parameters_lists);
+
+ cp_mme_tx_t *tx;
+ u8 i, j;
+ u8 total_services_index_nb;
+ u8 services_index_nb;
+
+ total_services_index_nb = services_number;
+
+ /* One MME can contain maximum of 73 services entries. One mme can contain 1492 bytes. The first 4 bytes are:
+ result, total_services_index_nb, first_service_index_nb and services_index_nb. There are 1488 bytes remaining.
+ Each entry contains 20 bytes. */
+
+ if (first_service_index_nb > total_services_index_nb)
+ services_index_nb = 0;
+ else
+ services_index_nb = ((total_services_index_nb - first_service_index_nb) >= 73) ?
+ 73 : total_services_index_nb - first_service_index_nb;
+
+ tx = cp_msg_mme_init_not_frag (ctx, peer, VS_EOC_CCO_GET_SERVICES_CNF);
+ dbg_assert (tx);
+ bitstream_write (&tx->bitstream, result, 8);
+ bitstream_write (&tx->bitstream, total_services_index_nb, 8);
+ bitstream_write (&tx->bitstream, first_service_index_nb, 8);
+ bitstream_write (&tx->bitstream, services_index_nb, 8);
+
+ for (i = first_service_index_nb; i < first_service_index_nb + services_index_nb; i++)
+ {
+ bitstream_write(&tx->bitstream, service_indexes[i], 8);
+ bitstream_write(&tx->bitstream, classifier_rules[i], 8);
+ bitstream_write(&tx->bitstream, classifier_values[i], 16);
+ bitstream_write(&tx->bitstream, acses[i], 8);
+ bitstream_write(&tx->bitstream, parameters_numbers[i], 8);
+ for(j = 0; j < parameters_numbers[i]; j++)
+ {
+ bitstream_write(&tx->bitstream, parameters_lists[i][j], 16);
+ }
+ }
+
+ cp_msg_mme_send (ctx, tx);
+}
+
+bool
+cp_msg_vs_eoc_cco_get_info_req_receive (cp_t *ctx, cp_mme_rx_t *mme, u8 *internal_eoc_index, u8 *control)
+{
+ dbg_assert (ctx);
+ dbg_assert (mme);
+
+ if (cp_msg_mme_read_error (ctx, mme))
+ {
+ *internal_eoc_index = bitstream_read(&mme->bitstream, 8);
+ *control = bitstream_read(&mme->bitstream, 8);
+ return true;
+ }
+ return false;
+}
+
+void
+cp_msg_vs_eoc_cco_get_info_cnf_send(cp_t *ctx, cp_mme_peer_t *peer, cp_msg_vs_eoc_get_info_req_result_t status,
+ u16 tei, s8 attenuation, u8 snr, u16 phy_uplink_speed, u16 phy_downlink_speed, u8 output_power,
+ u32 tx_success_counter, u32 tx_crc_error_counter, u32 tx_other_error_counter, u32 rx_success_counter,
+ u32 rx_crc_error_counter, u32 rx_other_error_counter)
+{
+ dbg_assert(ctx);
+ dbg_assert(peer);
+
+ cp_mme_tx_t *tx;
+ tx = cp_msg_mme_init_not_frag (ctx, peer, VS_EOC_GET_INFO_CNF);
+ dbg_assert (tx);
+
+ bitstream_write (&tx->bitstream, status, 8);
+ bitstream_write (&tx->bitstream, tei, 16);
+ /* Cast up_att to u8 because bitstream only process words, so the s8
+ * will be promoted to int (i.e. 32bits) and bitstream verifies that only
+ * 8 bits are set. */
+ bitstream_write (&tx->bitstream, (u8) attenuation, 8);
+ bitstream_write (&tx->bitstream, snr, 8);
+ bitstream_write (&tx->bitstream, phy_uplink_speed, 16);
+ bitstream_write (&tx->bitstream, phy_downlink_speed, 16);
+ bitstream_write (&tx->bitstream, output_power, 8);
+ bitstream_write (&tx->bitstream, tx_success_counter, 32);
+ bitstream_write (&tx->bitstream, tx_crc_error_counter, 32);
+ bitstream_write (&tx->bitstream, tx_other_error_counter, 32);
+ bitstream_write (&tx->bitstream, rx_success_counter, 32);
+ bitstream_write (&tx->bitstream, rx_crc_error_counter, 32);
+ bitstream_write (&tx->bitstream, rx_other_error_counter, 32);
+
+ cp_msg_mme_send (ctx, tx);
+}
+
+
+bool
+cp_msg_vs_eoc_cco_diagnostic_info_req_receive (cp_t *ctx, cp_mme_rx_t *mme, u8 *internal_eoc_index, u8 *control)
+{
+ dbg_assert (ctx);
+ dbg_assert (mme);
+
+ if (cp_msg_mme_read_error (ctx, mme))
+ {
+ *internal_eoc_index = bitstream_read(&mme->bitstream, 8);
+ *control = bitstream_read(&mme->bitstream, 8);
+ return true;
+ }
+ return false;
+}
+
+void
+cp_msg_vs_eoc_cco_diagnostict_info_cnf_send(cp_t *ctx, cp_mme_peer_t *peer, cp_msg_vs_eoc_diagnostic_info_req_result_t status,
+ u8 assoc_stat, u64 nid, u8 num_slots, mac_t he_mac_address, u16 est_avg_phy_rate, u8 num_good_assoc_auth,
+ u16 num_bad_could_not_assoc, u32 num_bad_assoc_failure, u32 num_bad_could_not_auth, u32 num_leave)
+{
+ dbg_assert(ctx);
+ dbg_assert(peer);
+
+ cp_mme_tx_t *tx;
+ tx = cp_msg_mme_init_not_frag (ctx, peer, VS_EOC_DIAGNOSTIC_INFO_CNF);
+ dbg_assert (tx);
+
+ bitstream_write (&tx->bitstream, status, 8);
+ bitstream_write (&tx->bitstream, assoc_stat, 8);
+ bitstream_write_large (&tx->bitstream, nid, 56);
+ bitstream_write (&tx->bitstream, num_slots, 8);
+ bitstream_write_large (&tx->bitstream, he_mac_address, 48);
+ bitstream_write (&tx->bitstream, est_avg_phy_rate, 16);
+ bitstream_write (&tx->bitstream, num_good_assoc_auth, 8);
+ bitstream_write (&tx->bitstream, num_bad_could_not_assoc, 16);
+ bitstream_write (&tx->bitstream, num_bad_assoc_failure, 32);
+ bitstream_write (&tx->bitstream, num_bad_could_not_auth, 32);
+ bitstream_write (&tx->bitstream, num_leave, 32);
+
+ cp_msg_mme_send (ctx, tx);
+}
+
+
+bool
+cp_msg_vs_eoc_cco_get_real_time_stats_req_receive (cp_t *ctx, cp_mme_rx_t *mme, u8 *control)
+{
+ dbg_assert (ctx);
+ dbg_assert (mme);
+
+ if (cp_msg_mme_read_error (ctx, mme))
+ {
+ *control = bitstream_read(&mme->bitstream, 8);
+ return true;
+ }
+ return false;
+}
+
+void
+cp_msg_vs_eoc_cco_get_real_time_stats_cnf_send (cp_t *ctx, cp_mme_peer_t *peer,
+ cp_msg_vs_eoc_get_real_time_statistics_req_result_t status,
+ real_time_stats_t *rt_stats)
+{
+ dbg_assert(ctx);
+ dbg_assert(peer);
+
+ cp_mme_tx_t *tx;
+ tx = cp_msg_mme_init_not_frag (ctx, peer,
+ VS_EOC_GET_REAL_TIME_STATISTICS_CNF);
+ dbg_assert (tx);
+
+ bitstream_write (&tx->bitstream, status, 8);
+ bitstream_write (&tx->bitstream, rt_stats->nb_unicast_packets_rx, 32);
+ bitstream_write (&tx->bitstream, rt_stats->nb_unicast_packets_tx, 32);
+ bitstream_write (&tx->bitstream, rt_stats->total_nb_bytes_rx, 32);
+ bitstream_write (&tx->bitstream, rt_stats->total_nb_bytes_tx, 32);
+ bitstream_write (&tx->bitstream, rt_stats->nb_broadcast_packets_rx, 32);
+ bitstream_write (&tx->bitstream, rt_stats->nb_broadcast_packets_tx, 32);
+ bitstream_write (&tx->bitstream, rt_stats->nb_multicast_packets_rx, 32);
+ bitstream_write (&tx->bitstream, rt_stats->nb_multicast_packets_tx, 32);
+ bitstream_write (&tx->bitstream, rt_stats->nb_packets_rx_crc, 32);
+ bitstream_write (&tx->bitstream, rt_stats->nb_packets_rx_short, 32);
+ bitstream_write (&tx->bitstream, rt_stats->nb_packets_tx_short, 32);
+ bitstream_write (&tx->bitstream, rt_stats->nb_packets_tx_dropped, 32);
+ bitstream_write (&tx->bitstream, rt_stats->nb_packets_rx_discarded, 32);
+ bitstream_write (&tx->bitstream, rt_stats->avg_pre_fec_bit_error_rate, 32);
+
+ cp_msg_mme_send (ctx, tx);
+}
+
diff --git a/cesar/cp/eoc/msg/stub/Module b/cesar/cp/eoc/msg/stub/Module
new file mode 100644
index 0000000000..216fce5aca
--- /dev/null
+++ b/cesar/cp/eoc/msg/stub/Module
@@ -0,0 +1,3 @@
+MODULES := cp/msg/stub
+
+SOURCES += msg_vs.c
diff --git a/cesar/cp/eoc/msg/stub/src/msg_vs.c b/cesar/cp/eoc/msg/stub/src/msg_vs.c
new file mode 100644
index 0000000000..d5f1b1a08b
--- /dev/null
+++ b/cesar/cp/eoc/msg/stub/src/msg_vs.c
@@ -0,0 +1,302 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2009 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/msg_vs_eoc.c
+ * \brief « brief description »
+ * \ingroup « module »
+ *
+ * « long description »
+ */
+#include "common/std.h"
+#include "cp/cp.h"
+#include "cp/eoc/msg/msg.h"
+#include "cp/msg/inc/msg.h"
+#include "cp/eoc/msg/inc/vs_eoc_get_topo.h"
+#include "cp/eoc/msg/inc/msg_vs.h"
+
+bool
+cp_msg_vs_eoc_cco_set_wl_req_receive (
+ cp_t * ctx, cp_mme_rx_t * mme, uint * numStas, cp_tei_t * stas_teis,
+ mac_t * stas_macs, u8 * stas_authorizations, u8 * stas_output_levels,
+ u32 * stas_start_times, u32 * stas_end_times, cp_key_t * stas_daks,
+ cp_dpw_t * stas_dpws, u8 * stas_actions) __attribute__ ((weak));
+
+bool
+cp_msg_vs_eoc_cco_set_wl_req_receive (
+ cp_t * ctx, cp_mme_rx_t * mme, uint * numStas, cp_tei_t * stas_teis,
+ mac_t * stas_macs, u8 * stas_authorizations, u8 * stas_output_levels,
+ u32 * stas_start_times, u32 * stas_end_times, cp_key_t * stas_daks,
+ cp_dpw_t * stas_dpws, u8 * stas_actions)
+{
+ return true;
+}
+
+void
+cp_msg_vs_eoc_cco_set_wl_cnf_send (
+ cp_t * ctx, cp_mme_peer_t * peer, mmtype_t mmtype,
+ cp_msg_vs_eoc_cco_set_wl_req_result_t result) __attribute__ ((weak));
+
+void
+cp_msg_vs_eoc_cco_set_wl_cnf_send (
+ cp_t * ctx, cp_mme_peer_t * peer, mmtype_t mmtype,
+ cp_msg_vs_eoc_cco_set_wl_req_result_t result) {}
+
+bool
+cp_msg_vs_eoc_cco_get_wl_req_receive (
+ cp_t * ctx, cp_mme_rx_t * mme, u8 * first_wl_index_nb)
+ __attribute__((weak));
+
+bool
+cp_msg_vs_eoc_cco_get_wl_req_receive (
+ cp_t * ctx, cp_mme_rx_t * mme, u8 * first_wl_index_nb)
+{ return true; }
+
+void
+cp_msg_vs_eoc_cco_get_wl_cnf_send (
+ cp_t * ctx, uint result, cp_mme_peer_t * peer, uint numStas,
+ cp_tei_t * stas_teis, mac_t * stas_macs, u8 * stas_authorizations,
+ u8 * stas_output_levels, u32 * stas_start_times, u32 * stas_end_times,
+ cp_key_t * stas_daks, cp_dpw_t * stas_dpws, u8 * stas_actions,
+ u8 first_wl_index_nb)__attribute__((weak));
+
+void
+cp_msg_vs_eoc_cco_get_wl_cnf_send (
+ cp_t * ctx, uint result, cp_mme_peer_t * peer, uint numStas,
+ cp_tei_t * stas_teis, mac_t * stas_macs, u8 * stas_authorizations,
+ u8 * stas_output_levels, u32 * stas_start_times, u32 * stas_end_times,
+ cp_key_t * stas_daks, cp_dpw_t * stas_dpws, u8 * stas_actions,
+ u8 first_wl_index_nb) {}
+
+void
+cp_msg_vs_eoc_cco_set_out_lev_ind_send (
+ cp_t * ctx, cp_mme_peer_t * peer, uint output_level)__attribute__((weak));
+
+void
+cp_msg_vs_eoc_cco_set_out_lev_ind_send (
+ cp_t * ctx, cp_mme_peer_t * peer, uint output_level) {}
+
+bool
+cp_msg_eoc_sta_vs_set_out_lev_ind_receive (
+ cp_t * ctx, cp_mme_rx_t * mme, uint * output_level)__attribute__((weak));
+
+bool
+cp_msg_eoc_sta_vs_set_out_lev_ind_receive (
+ cp_t * ctx, cp_mme_rx_t * mme, uint * output_level)
+{ return true; };
+
+bool
+cp_msg_vs_eoc_set_ports_req_receive (
+ cp_t * ctx, cp_mme_rx_t * mme, uint * numStas, mac_t * stas_macs,
+ u8 stas_ports_ed[][PORT_NB],
+ u8 stas_ports_service[][PORT_NB])__attribute__((weak));
+
+bool
+cp_msg_vs_eoc_set_ports_req_receive (
+ cp_t * ctx, cp_mme_rx_t * mme, uint * numStas, mac_t * stas_macs,
+ u8 stas_ports_ed[][PORT_NB],
+ u8 stas_ports_service[][PORT_NB])
+{ return true; }
+
+void
+cp_msg_vs_eoc_set_ports_cnf_send (
+ cp_t * ctx, cp_mme_peer_t * peer, mmtype_t mmtype,
+ cp_msg_vs_eoc_set_ports_req_result_t result)__attribute__((weak));
+
+void
+cp_msg_vs_eoc_set_ports_cnf_send (
+ cp_t * ctx, cp_mme_peer_t * peer, mmtype_t mmtype,
+ cp_msg_vs_eoc_set_ports_req_result_t result) {}
+
+bool
+cp_msg_vs_eoc_cco_get_ports_req_receive (
+ cp_t * ctx, cp_mme_rx_t * mme,
+ u8 * first_mac_index_nb)__attribute__((weak));
+
+bool
+cp_msg_vs_eoc_cco_get_ports_req_receive (
+ cp_t * ctx, cp_mme_rx_t * mme,
+ u8 * first_mac_index_nb)
+{ return true; }
+
+void
+cp_msg_vs_eoc_cco_get_ports_cnf_send (
+ cp_t * ctx, cp_mme_peer_t * peer, cp_msg_vs_eoc_cco_get_ports_req_result_t
+ result, uint numStas, mac_t * stas_macs, bool (*stas_port_ed)[PORT_NB],
+ u8 (*stas_port_service)[PORT_NB],
+ u8 first_mac_index_nb)__attribute__((weak));
+
+void
+cp_msg_vs_eoc_cco_get_ports_cnf_send (
+ cp_t * ctx, cp_mme_peer_t * peer, cp_msg_vs_eoc_cco_get_ports_req_result_t
+ result, uint numStas, mac_t * stas_macs, bool (*stas_port_ed)[PORT_NB],
+ u8 (*stas_port_service)[PORT_NB],
+ u8 first_mac_index_nb) { }
+
+bool
+cp_msg_vs_eoc_cco_set_services_req_receive (
+ cp_t *ctx, cp_mme_rx_t *mme, u8 *command, u8 *services_number,
+ u8 *service_indexes, u8 *classifier_rules, u16 *clssifier_values,
+ u8 *acses, u8 *parameters_numbers,
+ u16 parameters_lists[] [SERVICE_PARAMETERS_NB])__attribute__((weak));
+
+bool
+cp_msg_vs_eoc_cco_set_services_req_receive (
+ cp_t *ctx, cp_mme_rx_t *mme, u8 *command, u8 *services_number,
+ u8 *service_indexes, u8 *classifier_rules, u16 *clssifier_values,
+ u8 *acses, u8 *parameters_numbers,
+ u16 parameters_lists[] [SERVICE_PARAMETERS_NB])
+{ return true; }
+
+void
+cp_msg_vs_eoc_cco_set_services_cnf_send (
+ cp_t * ctx, cp_mme_peer_t * peer, mmtype_t mmtype,
+ cp_msg_vs_eoc_cco_set_services_req_result_t result)__attribute__((weak));
+
+void
+cp_msg_vs_eoc_cco_set_services_cnf_send (
+ cp_t * ctx, cp_mme_peer_t * peer, mmtype_t mmtype,
+ cp_msg_vs_eoc_cco_set_services_req_result_t result) { }
+
+bool
+cp_msg_vs_eoc_cco_get_services_req_receive (
+ cp_t *ctx, cp_mme_rx_t *mme,
+ u8 *first_service_index_nb)__attribute__((weak));
+
+bool
+cp_msg_vs_eoc_cco_get_services_req_receive (
+ cp_t *ctx, cp_mme_rx_t *mme,
+ u8 *first_service_index_nb)
+{ return true; }
+
+void
+cp_msg_vs_eoc_cco_get_services_cnf_send (
+ cp_t * ctx, cp_mme_peer_t *peer,
+ cp_msg_vs_eoc_cco_get_services_req_result_t result,
+ u8 services_number, u8 *service_indexes,
+ u8 * classifier_rules, u16 * classifier_values, u8 * acses,
+ u8 * parameters_numbers, u16 (*parameters_lists)[SERVICE_PARAMETERS_NB],
+ u8 first_service_index_nb)__attribute__((weak));
+
+void
+cp_msg_vs_eoc_cco_get_services_cnf_send (
+ cp_t * ctx, cp_mme_peer_t *peer,
+ cp_msg_vs_eoc_cco_get_services_req_result_t result,
+ u8 services_number, u8 *service_indexes,
+ u8 * classifier_rules, u16 * classifier_values, u8 * acses,
+ u8 * parameters_numbers, u16 (*parameters_lists)[SERVICE_PARAMETERS_NB],
+ u8 first_service_index_nb) { }
+
+bool
+cp_msg_vs_eoc_cco_get_info_req_receive (cp_t * ctx, cp_mme_rx_t * mme,
+ u8 * internal_eoc_index,
+ u8 * control)__attribute__((weak));
+
+bool
+cp_msg_vs_eoc_cco_get_info_req_receive (cp_t * ctx, cp_mme_rx_t * mme,
+ u8 * internal_eoc_index,
+ u8 * control)
+{ return true; }
+
+void
+cp_msg_vs_eoc_cco_get_info_cnf_send (
+ cp_t * ctx, cp_mme_peer_t * peer,
+ cp_msg_vs_eoc_get_info_req_result_t status, u16 tei, s8 attenuation,
+ u8 snr, u16 phy_uplink_speed, u16 phy_downlink_speed, u8 output_power,
+ u32 tx_success_counter, u32 tx_crc_error_counter,
+ u32 tx_other_error_counter, u32 rx_success_counter,
+ u32 rx_crc_error_counter, u32 rx_other_error_counter)__attribute__((weak));
+
+void
+cp_msg_vs_eoc_cco_get_info_cnf_send (
+ cp_t * ctx, cp_mme_peer_t * peer,
+ cp_msg_vs_eoc_get_info_req_result_t status, u16 tei, s8 attenuation,
+ u8 snr, u16 phy_uplink_speed, u16 phy_downlink_speed, u8 output_power,
+ u32 tx_success_counter, u32 tx_crc_error_counter,
+ u32 tx_other_error_counter, u32 rx_success_counter,
+ u32 rx_crc_error_counter, u32 rx_other_error_counter) { }
+
+bool
+cp_msg_vs_eoc_cco_diagnostic_info_req_receive (
+ cp_t * ctx, cp_mme_rx_t * mme, u8 * internal_eoc_index,
+ u8 * control)__attribute__((weak));
+
+bool
+cp_msg_vs_eoc_cco_diagnostic_info_req_receive (
+ cp_t * ctx, cp_mme_rx_t * mme, u8 * internal_eoc_index,
+ u8 * control)
+{ return true; }
+
+void
+cp_msg_vs_eoc_cco_diagnostict_info_cnf_send (
+ cp_t * ctx, cp_mme_peer_t * peer,
+ cp_msg_vs_eoc_diagnostic_info_req_result_t status, u8 assoc_stat, u64 nid,
+ u8 num_slots, mac_t he_mac_address, u16 est_avg_phy_rate,
+ u8 num_good_assoc_auth, u16 num_bad_could_not_assoc,
+ u32 num_bad_assoc_failure, u32 num_bad_could_not_auth,
+ u32 num_leave)__attribute__((weak));
+
+void
+cp_msg_vs_eoc_cco_diagnostict_info_cnf_send (
+ cp_t * ctx, cp_mme_peer_t * peer,
+ cp_msg_vs_eoc_diagnostic_info_req_result_t status, u8 assoc_stat, u64 nid,
+ u8 num_slots, mac_t he_mac_address, u16 est_avg_phy_rate,
+ u8 num_good_assoc_auth, u16 num_bad_could_not_assoc,
+ u32 num_bad_assoc_failure, u32 num_bad_could_not_auth,
+ u32 num_leave) { }
+
+cp_mme_tx_t*
+cp_msg_vs_eoc_get_topo_cnf_send_begin (
+ cp_t * ctx, cp_mme_peer_t * peer,
+ cp_msg_vs_eoc_get_topo_cnf_result_t result,
+ u8 sta_nb)__attribute__((weak));
+
+cp_mme_tx_t*
+cp_msg_vs_eoc_get_topo_cnf_send_begin (
+ cp_t * ctx, cp_mme_peer_t * peer,
+ cp_msg_vs_eoc_get_topo_cnf_result_t result,
+ u8 sta_nb)
+{ return INVALID_PTR; }
+
+void
+cp_msg_vs_eoc_get_topo_cnf_send_sta (
+ cp_t * ctx, cp_mme_tx_t * mme, mac_t mac_addr, u8 auth_status,
+ s8 up_att)__attribute__((weak));
+
+void
+cp_msg_vs_eoc_get_topo_cnf_send_sta (
+ cp_t * ctx, cp_mme_tx_t * mme, mac_t mac_addr, u8 auth_status,
+ s8 up_att) { }
+
+void
+cp_msg_vs_eoc_get_topo_cnf_send_end (
+ cp_t * ctx, cp_mme_tx_t * mme)__attribute__((weak));
+
+void
+cp_msg_vs_eoc_get_topo_cnf_send_end (
+ cp_t * ctx, cp_mme_tx_t * mme) { }
+
+bool
+cp_msg_vs_eoc_cco_get_real_time_stats_req_receive (
+ cp_t * ctx, cp_mme_rx_t * mme, u8 * control)__attribute__((weak));
+
+bool
+cp_msg_vs_eoc_cco_get_real_time_stats_req_receive (
+ cp_t * ctx, cp_mme_rx_t * mme, u8 * control)
+{ return true; }
+
+void
+cp_msg_vs_eoc_cco_get_real_time_stats_cnf_send (
+ cp_t * ctx, cp_mme_peer_t * peer,
+ cp_msg_vs_eoc_get_real_time_statistics_req_result_t status,
+ real_time_stats_t * rt_stats)__attribute__((weak));
+
+void
+cp_msg_vs_eoc_cco_get_real_time_stats_cnf_send (
+ cp_t * ctx, cp_mme_peer_t * peer,
+ cp_msg_vs_eoc_get_real_time_statistics_req_result_t status,
+ real_time_stats_t * rt_stats) { }
diff --git a/cesar/cp/eoc/msg/test/utest/Config b/cesar/cp/eoc/msg/test/utest/Config
new file mode 100644
index 0000000000..39dc8b2a35
--- /dev/null
+++ b/cesar/cp/eoc/msg/test/utest/Config
@@ -0,0 +1,7 @@
+CONFIG_CP_EOC = y
+CONFIG_DEBUG_FATAL_CATCH = y
+CONFIG_CP_FSM_DEF = "cp/eoc/fsm/src/fsm/cp_eoc_cco.fsm"
+CONFIG_CP_EOC_IS_MASTER = y
+CONFIG_CP_MSG_EOC_MULTI_STA_MME = y
+CONFIG_CL_EOC_ROUTE = y
+
diff --git a/cesar/cp/eoc/msg/test/utest/Makefile b/cesar/cp/eoc/msg/test/utest/Makefile
new file mode 100644
index 0000000000..bc5d49bf1f
--- /dev/null
+++ b/cesar/cp/eoc/msg/test/utest/Makefile
@@ -0,0 +1,21 @@
+BASE = ../../../../..
+
+INCLUDES = cp/eoc/msg/test/utest/override
+
+HOST_PROGRAMS = test_vs_eoc_msg test_msg_cc_eoc
+
+test_vs_eoc_msg_SOURCES = msg_vs_eoc.c
+test_vs_eoc_msg_MODULES = lib cp/eoc/msg cp/secu mac/common \
+ cp/eoc/sta/mgr cp/eoc/fsm/stub cp/sta/core/stub \
+ cp/eoc/cco/action/stub cl/stub mac/sar/stub bsu/stub bufmgr/stub
+test_vs_eoc_msg_CONFIG_MODULES = cp/eoc
+
+test_msg_cc_eoc_SOURCES = msg_cc_eoc.c
+test_msg_cc_eoc_MODULES = lib cp/eoc/msg cp/secu mac/common \
+ cp/eoc/sta/mgr cp/eoc/fsm/stub cp/sta/core/stub mac/sar/stub \
+ cl/stub cp/eoc/cco/action/stub cp/cl_interf interface/stub \
+ bsu/stub bufmgr/stub
+test_msg_cc_eoc_CONFIG_MODULES = cp/eoc cl
+
+include $(BASE)/common/make/top.mk
+
diff --git a/cesar/cp/eoc/msg/test/utest/doc/Makefile b/cesar/cp/eoc/msg/test/utest/doc/Makefile
new file mode 100644
index 0000000000..50006394a5
--- /dev/null
+++ b/cesar/cp/eoc/msg/test/utest/doc/Makefile
@@ -0,0 +1,20 @@
+PAGES = read-header.txt
+
+ODT=$(PAGES:%.txt=%.odt)
+HTML=$(PAGES:%.txt=%.html)
+
+all: $(ODT) $(HTML)
+
+odt: $(ODT)
+
+html: $(HTML)
+
+%.odt: %.txt
+ rst2odt.py $< $@
+
+%.html: %.txt
+ rst2html $< $@
+
+clean:
+ rm -f $(ODT)
+ rm -f $(HTML)
diff --git a/cesar/cp/eoc/msg/test/utest/doc/read-header.txt b/cesar/cp/eoc/msg/test/utest/doc/read-header.txt
new file mode 100644
index 0000000000..24eb81f982
--- /dev/null
+++ b/cesar/cp/eoc/msg/test/utest/doc/read-header.txt
@@ -0,0 +1,67 @@
+MSG read MME header
+===================
+
+ MME used for the test with :
+
+* a length of 92 bytes.
+* TEI = 1
+
++-------+-------------------+-----------------+
+|Name | Value | length (bytes) |
++-------+-------------------+-----------------+
+|oda | 12:34:56:78:9A:BC | 6 |
++-------+-------------------+-----------------+
+|osa | 34:56:78:9A:BC:DE | 6 |
++-------+-------------------+-----------------+
+|[vlan] | 0x12 | 4 |
++-------+-------------------+-----------------+
+|Mtype | 0x88E1 | 2 |
++-------+-------------------+-----------------+
+|MMV | 0x1 | 1 |
++-------+-------------------+-----------------+
+|MMTYPE | 0x3245 | 2 |
++-------+-------------------+-----------------+
+|FMI | 0x432 | 2 |
++-------+-------------------+-----------------+
+
+Test 1 : Read a MME with a VLAN tag.
+------------------------------------
+
+The result shall be the following one.
+
+The MME rx object returned shall not be NULL and shall contain:
+
+* p_mme = buffer address containing the MME.
+* mmtype = 0x3245
+* length = 92.
+* peer
+
+ * mac = 34:56:78:9A:BC:DE
+ * vlan = 0x12
+ * tei = 1 (provided in argument).
+
+Test 2 : Read a MME without a VLAN tag.
+---------------------------------------
+
+The result shall be the following one.
+
+The MME rx object returned shall not be NULL and shall contain:
+
+* p_mme = buffer address containing the MME.
+* mmtype = 0x3245
+* length = 92.
+* peer
+
+ * mac = 34:56:78:9A:BC:DE
+ * vlan = 0
+ * tei = 1 (provided in argument).
+
+Test 3 : Read a MME with the MMV equal to 0
+-------------------------------------------
+
+The returned value shall be NULL.
+
+Test 4 : Read the MME with MType different of 0x88E1
+----------------------------------------------------
+
+The returned value shall be NULL.
diff --git a/cesar/cp/eoc/msg/test/utest/override/cp/inc/context.h b/cesar/cp/eoc/msg/test/utest/override/cp/inc/context.h
new file mode 100644
index 0000000000..dc19ed641a
--- /dev/null
+++ b/cesar/cp/eoc/msg/test/utest/override/cp/inc/context.h
@@ -0,0 +1,76 @@
+#ifndef overide_cp_inc_context_h
+#define overide_cp_inc_context_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file overide/cp/inc/context.h
+ * \brief « brief description »
+ * \ingroup « module »
+ *
+ * « long description »
+ */
+
+#define TCK_PER_RTC 250000
+#define BEACON_PERIOD_TCK BSU_ACLF_BP_50HZ_TCK
+
+#include "lib/rnd.h"
+#include "cp/msg/inc/context.h"
+#include "cl/cl.h"
+
+#include "cp/sta/mgr/sta_mgr.h"
+#include "cp/sta/mgr/inc/sta_mgr.h"
+
+#include "cp/fsm/fsm.h"
+
+#include "cp/cl_interf/cl_interf.h"
+#include "cp/cl_interf/inc/context.h"
+
+#include "mac/common/config.h"
+#include "mac/common/store.h"
+
+#include "bufmgr/bufmgr.h"
+
+struct cp_t
+{
+ /** MSG context. */
+ cp_msg_t msg;
+
+ /** Interface context. */
+ interface_t *interface;
+
+ /** Station Manager. */
+ cp_sta_mgr_t sta_mgr;
+
+ /** Convergence layer context. */
+ cl_t *cl;
+
+ /** Random generator. */
+ lib_rnd_t rnd;
+
+ /** Mac config. */
+ mac_config_t *mac_config;
+
+ /** Store. */
+ mac_store_t *mac_store;
+
+ /** SAR context. */
+ sar_t *sar;
+
+ /** BSU context. */
+ bsu_t *bsu;
+
+ /** BSU. */
+ bsu_aclf_t *bsu_aclf;
+
+ cp_cl_interf_t cl_interf;
+
+ /** Buffer manager. */
+ bufmgr_t *bufmgr;
+};
+
+#endif /* overide_cp_inc_context_h */
diff --git a/cesar/cp/eoc/msg/test/utest/override/cp/sta/core/defs.h b/cesar/cp/eoc/msg/test/utest/override/cp/sta/core/defs.h
new file mode 100644
index 0000000000..fda52dde53
--- /dev/null
+++ b/cesar/cp/eoc/msg/test/utest/override/cp/sta/core/defs.h
@@ -0,0 +1,60 @@
+#ifndef cp_sta_core_defs_h
+#define cp_sta_core_defs_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/sta/core/defs.h
+ * \brief Sta core defs.
+ * \ingroup cp/sta/core
+ *
+ */
+#include "cp/fsm/forward.h"
+
+/** Forward declaration. */
+typedef struct cp_sta_core_t cp_sta_core_t;
+
+/*
+ * the sta core event flags
+ * these are some flags, so take care to give a value with all bits set to 0 but one.
+ */
+enum cp_sta_core_event_flag_t
+{
+ CP_STA_CORE_EVENT_FLAG_RECV_BEACON = 0x1,
+ CP_STA_CORE_EVENT_FLAG_RECV_MME = 0x2,
+ CP_STA_CORE_EVENT_FLAG_FSM = 0x4,
+ CP_STA_CORE_EVENT_FLAG_GARBAGE = 0x8,
+ CP_STA_CORE_EVENT_FLAG_TERMINATE = 0x10
+};
+typedef enum cp_sta_core_event_flag_t cp_sta_core_event_flag_t;
+
+/** Definition of alarm info structure
+ * (applications should not use it directly but use "alias" defined just below) */
+struct cp_sta_core_timed_event_def_t
+{
+ /* eCos alarm. */
+ uint alarm;
+ /* eCos alarm handle. */
+ uint alarm_handle;
+ /* the sta core event flag to set
+ * (auto or user-specified when creating/launching timer alarm). */
+ cp_sta_core_event_flag_t event_flag;
+ /* FSM event specified when creating/launching timer alarm
+ * (set if the previous flag is CP_STA_CORE_EVENT_FLAG_FSM). */
+ cp_fsm_event_t *fsm_event;
+ /* flag indicating a periodic alarm (if set to true)
+ * or one-shot alarm (if set to false). */
+ bool cyclic_alarm;
+ /* pointer to CP context. */
+ cp_t *cp_ctx;
+};
+typedef struct cp_sta_core_timed_event_def_t cp_sta_core_timed_event_def_t;
+
+int
+cp_sta_core_ms_to_cyg_tick (cp_t *ctx, const uint ms);
+
+#endif /* cp_sta_core_defs_h */
diff --git a/cesar/cp/eoc/msg/test/utest/override/cyg/kernel/kapi.h b/cesar/cp/eoc/msg/test/utest/override/cyg/kernel/kapi.h
new file mode 100644
index 0000000000..019e5d3a07
--- /dev/null
+++ b/cesar/cp/eoc/msg/test/utest/override/cyg/kernel/kapi.h
@@ -0,0 +1,37 @@
+#ifndef override_cyg_kernel_kapi_h
+#define override_cyg_kernel_kapi_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2010 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file override/cyg/kernel/kapi.h
+ * \brief override some kernel api from <cyg/kernel/kapi.h>.
+ * \ingroup cp_msg
+ *
+ *
+ */
+
+struct cyg_resolution_t
+{
+ u32 dividend;
+ u32 divisor;
+} ;
+
+typedef struct cyg_resolution_t cyg_resolution_t;
+
+typedef u64 cyg_tick_count_t;
+
+int
+cyg_real_time_clock (void);
+
+cyg_resolution_t
+cyg_clock_get_resolution (int clock);
+
+cyg_tick_count_t
+cyg_current_time (void);
+
+#endif
diff --git a/cesar/cp/eoc/msg/test/utest/override/mac/sar/inc/context.h b/cesar/cp/eoc/msg/test/utest/override/mac/sar/inc/context.h
new file mode 100644
index 0000000000..9e7c6f07ca
--- /dev/null
+++ b/cesar/cp/eoc/msg/test/utest/override/mac/sar/inc/context.h
@@ -0,0 +1,23 @@
+#ifndef overide_mac_sar_inc_context_h
+#define overide_mac_sar_inc_context_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file overide/mac/sar/inc/context.h
+ * \brief « brief description »
+ * \ingroup « module »
+ *
+ * « long description »
+ */
+
+struct sar_t
+{
+ mac_store_t *mac_store;
+};
+
+#endif /* overide_mac_sar_inc_context_h */
diff --git a/cesar/cp/eoc/msg/test/utest/src/msg_cc_eoc.c b/cesar/cp/eoc/msg/test/utest/src/msg_cc_eoc.c
new file mode 100644
index 0000000000..f5474310d5
--- /dev/null
+++ b/cesar/cp/eoc/msg/test/utest/src/msg_cc_eoc.c
@@ -0,0 +1,134 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/msg/test/src/msg_cc.c
+ * \brief Test the MSG_CC Family functions.
+ * \ingroup cp_msg
+ *
+ */
+#include "common/std.h"
+
+#include "common/defs/ethernet.h"
+#include "common/defs/homeplugAV.h"
+
+#include "lib/test.h"
+#include "lib/swap.h"
+#include "lib/bitstream.h"
+
+#include "cp/cp.h"
+#include "cp/msg/msg.h"
+#include "cp/sta/mgr/sta_mgr.h"
+#include "cp/sta/mgr/sta_own_data.h"
+
+#include "cp/inc/context.h"
+#include "cp/msg/inc/msg.h"
+
+#include "stdio.h"
+
+#include "mac/sar/inc/context.h"
+#include "cl/inc/context.h"
+
+
+
+
+static u8 buffer[256];
+cp_t cp;
+bitstream_t stream;
+test_t test;
+bool fsm_post;
+
+void
+test_case_msg_dispatch (void)
+{
+ test_case_begin (test, "MSG Dispatch");
+
+ test_begin (test, "MSG dispatch STA does not exists")
+ {
+ cp_mme_rx_t *mme_rx;
+ //uint fmi;
+ cl_t cl;
+ sar_t sar;
+ bitstream_t bitstream;
+ uint req_type = CP_MSG_CC_ASSOC_REQ_TYPE_NEW;
+ u64 nid = 12;
+ uint cco_cap = 2;
+ uint pco_cap = true;
+
+ cp_sta_mgr_init (&cp);
+ cp_msg_init (&cp);
+ cl.mactotei = NULL;
+ sar.mac_store = mac_store_init ();
+ cp.sar = &sar;
+ cp.mac_store = sar.mac_store;
+ cp.cl = &cl;
+
+ mme_rx = cp_msg_mme_rx_init (&cp, buffer, 60, MAC_TEI_UNASSOCIATED);
+ mme_rx->peer.mac = 2;
+ mme_rx->peer.eth_type = HPAV_MTYPE_MME;
+ mme_rx->peer.vlan_tci = 0;
+ mme_rx->peer.tei = 0;
+ mme_rx->mmtype = CC_ASSOC_REQ;
+
+ // Write the request.
+ bitstream_init (&bitstream, buffer + 19, 10, BITSTREAM_WRITE);
+ bitstream_access (&bitstream, &req_type, 8);
+ bitstream_access (&bitstream, &nid, 56);
+ bitstream_access (&bitstream, &cco_cap, 8);
+ bitstream_access (&bitstream, &pco_cap, 8);
+ bitstream_finalise (&bitstream);
+
+ // Initialise the MME Rx object.
+ mme_rx->p_mme = buffer;
+ mme_rx->length = 60;
+ bitstream_init (&mme_rx->bitstream, buffer + 19, 60, BITSTREAM_READ);
+
+ /* Test */
+ fsm_post = false;
+ cp_msg_dispatch (&cp, mme_rx);
+ test_fail_if (fsm_post != false);
+
+ cp_msg_uninit (&cp);
+ }
+ test_end;
+
+}
+
+int
+main (void)
+{
+
+ test_init (test, 0, NULL);
+ lib_stats_init ();
+
+ test_case_msg_dispatch ();
+
+ lib_stats_uninit ();
+ test_result (test);
+ return test_nb_failed (test) == 0 ? 0 : 1;
+}
+
+u32
+bsu_aclf_beacon_period_tck (bsu_aclf_t *ctx)
+{
+ return BSU_ACLF_BP_50HZ_TCK;
+}
+
+u32
+cyg_current_time (void)
+{
+ /* For tests purpose we can simulate 1000 beacon periods */
+ return (u32)((BSU_ACLF_BP_50HZ_TCK * 1000ull) / TCK_PER_RTC);
+}
+
+
+u32
+cp_sta_core_tck_per_rtc (cp_t *ctx)
+{
+
+ return TCK_PER_RTC;
+}
diff --git a/cesar/cp/eoc/msg/test/utest/src/msg_vs_eoc.c b/cesar/cp/eoc/msg/test/utest/src/msg_vs_eoc.c
new file mode 100644
index 0000000000..08bdc05e9a
--- /dev/null
+++ b/cesar/cp/eoc/msg/test/utest/src/msg_vs_eoc.c
@@ -0,0 +1,315 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2009 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/msg/test/utest/src/msg_vs.c
+ * \brief Test the EoC MSG_VS Family functions.
+ * \ingroup cp_eoc/msg_test_utest
+ *
+ */
+
+#include "common/std.h"
+
+#include "common/defs/ethernet.h"
+#include "common/defs/homeplugAV.h"
+
+#include "lib/test.h"
+#include "lib/bitstream.h"
+
+#include "cp/cp.h"
+#include "cp/eoc/msg/msg.h"
+
+#include "cp/inc/context.h"
+#include "cp/msg/inc/msg.h"
+#include "cp/eoc/msg/inc/vs_eoc_get_topo.h"
+
+struct mme_header_t
+{
+ mac_t oda;
+ mac_t osa;
+ uint vlan;
+ uint mtype;
+ uint mmv;
+ mmtype_t mmtype;
+ uint fmi_inf;
+ uint fmi_mi;
+ uint fmi_ssn;
+};
+typedef struct mme_header_t mme_header_t;
+
+static u8 buffer[2048];
+cp_t cp;
+
+mac_t own_mac_addr = 0x123456789ABCull;
+test_t test;
+cp_mme_peer_t peer;
+
+static void
+test_write_header (bool vlan_present, mme_header_t *pheader,
+ bitstream_t *pstream)
+{
+ bitstream_init (pstream, buffer, ETH_PACKET_MAX_NOVLAN_SIZE,
+ BITSTREAM_WRITE);
+
+ bitstream_write_large (pstream, pheader->oda, 48);
+ bitstream_write_large (pstream, pheader->osa, 48);
+ bitstream_write (pstream, HPAV_MTYPE_MME, 16);
+ bitstream_write (pstream, HPAV_MMV, 8);
+ bitstream_write (pstream, pheader->mmtype, 16);
+ bitstream_write (pstream, pheader->fmi_inf, 4);
+ bitstream_write (pstream, pheader->fmi_mi, 4);
+ bitstream_write (pstream, pheader->fmi_ssn, 8);
+}
+
+static void
+test_read_header (bool vlan_present, mme_header_t *pheader,
+ mme_header_t *pexpected, bitstream_t *pstream)
+{
+ bitstream_init (pstream, buffer, ETH_PACKET_MAX_NOVLAN_SIZE,
+ BITSTREAM_READ);
+
+ pheader->oda = bitstream_read_large (pstream, 48);
+ pheader->osa = bitstream_read_large (pstream, 48);
+ if (vlan_present)
+ pheader->vlan = bitstream_read (pstream, 32);
+ pheader->mtype = bitstream_read (pstream, 16);
+ pheader->mmv = bitstream_read (pstream, 8);
+ pheader->mmtype = bitstream_read (pstream, 16);
+ pheader->fmi_inf = bitstream_read (pstream, 4);
+ pheader->fmi_mi = bitstream_read (pstream, 4);
+ pheader->fmi_ssn = bitstream_read (pstream, 8);
+ if (pheader->mmtype >= VS_MIN && pheader->mmtype <= VS_MAX)
+ bitstream_read (pstream, 24);
+
+ test_begin (test, "Header")
+ {
+ test_fail_if (pheader->oda != pexpected->oda);
+ test_fail_if (pheader->osa != pexpected->osa);
+ test_fail_if (pheader->mtype != HPAV_MTYPE_MME);
+ test_fail_if (pheader->mmv != HPAV_MMV);
+ test_fail_if (pheader->mmtype != pexpected->mmtype);
+ test_fail_if (pheader->fmi_inf != pexpected->fmi_inf);
+ test_fail_if (pheader->fmi_mi != pexpected->fmi_mi);
+ test_fail_if (pheader->fmi_ssn != pexpected->fmi_ssn);
+ }
+ test_end;
+}
+
+void
+test_case_msg_vs_eoc_get_topo (void)
+{
+ test_case_begin (test, "VS_EOC_GET_TOPO");
+
+ test_begin (test, "VS_EOC_GET_TOPO.CNF Send")
+ {
+ uint i;
+ /* Context. */
+ bitstream_t stream;
+ mme_header_t header;
+ mme_header_t expected;
+
+ u64 data;
+ cp_mme_tx_t *tx_mme;
+ cp_msg_vs_eoc_get_topo_cnf_result_t result;
+
+ cp_msg_init (&cp);
+
+ /*********************************/
+ /* Good values. */
+ /*********************************/
+ result = CP_MSG_VS_EOC_GET_TOPO_CNF_RESULT_SUCCESS;
+ u8 sta_nb = 10;
+ u8 auth_status = 1;
+ s8 up_att = 0;
+ mac_t mac_addr = 0x112233445566LL;
+
+ /* Call MME. */
+ tx_mme = cp_msg_vs_eoc_get_topo_cnf_send_begin (&cp, &peer, result,
+ sta_nb);
+
+ for (i = 1; i <= sta_nb ; i++)
+ cp_msg_vs_eoc_get_topo_cnf_send_sta (&cp, tx_mme, mac_addr,
+ auth_status, up_att);
+
+ cp_msg_vs_eoc_get_topo_cnf_send_end (&cp, tx_mme);
+
+ /* Expected header */
+ expected.oda = peer.mac;
+ expected.osa = own_mac_addr;
+ expected.mmtype = VS_EOC_GET_TOPO_CNF;
+ expected.fmi_inf = 0;
+ expected.fmi_mi = 0;
+ expected.fmi_ssn = 0;
+ /* Read MME for Data comparison. */
+
+ test_read_header (false, &header, &expected, &stream);
+ bitstream_access (&stream, &data, 8);
+ test_fail_if (data != result, "Wrong Result");
+
+ bitstream_access (&stream, &data, 8);
+ test_fail_if (data != sta_nb, "Wrong station number");
+
+ for(i = 0 ; i < sta_nb ; i++)
+ {
+ bitstream_access (&stream, &data, 48);
+ test_fail_if ((data != mac_addr),
+ "Wrong mac address [%d]",i);
+ bitstream_access (&stream, &data, 8);
+ test_fail_if (data != auth_status, "Wrong authorization status [%d]",i);
+ bitstream_access (&stream, &data, 8);
+ test_fail_if ((s8)data != up_att, "Wrong upstream attenuation [%d]",i);
+ }
+
+ /*********************************/
+ /* Send the request with bad value of result */
+ /*********************************/
+ dbg_fatal_try_begin
+ {
+ result = CP_MSG_VS_EOC_GET_TOPO_CNF_RESULT_NB;
+ tx_mme = cp_msg_vs_eoc_get_topo_cnf_send_begin (&cp, &peer, result,
+ sta_nb);
+ }
+ dbg_fatal_try_catch (const char *fatal_message)
+ {
+ test_verbose_print (fatal_message);
+ test_fail_unless (true);
+ }
+ dbg_fatal_try_end;
+
+ /*********************************/
+ /* Send the request with bad value of authorization status */
+ /*********************************/
+ dbg_fatal_try_begin
+ {
+ result = CP_MSG_VS_EOC_GET_TOPO_CNF_RESULT_SUCCESS;
+ auth_status = 36;
+ tx_mme = cp_msg_vs_eoc_get_topo_cnf_send_begin (&cp, &peer, result,
+ sta_nb);
+ cp_msg_vs_eoc_get_topo_cnf_send_sta (&cp, tx_mme, mac_addr, auth_status, up_att);
+ }
+ dbg_fatal_try_catch (const char *fatal_message)
+ {
+ slab_release(tx_mme);
+ test_verbose_print (fatal_message);
+ test_fail_unless (true);
+ }
+ dbg_fatal_try_end;
+
+ /* End TEST VS_EOC_GET_TOPO.CNF Send */
+ cp_msg_uninit (&cp);
+ }
+ test_end;
+
+ test_begin (test, "VS_EOC_GET_TOPO.REQ Receive")
+ {
+ /* Context. */
+ bitstream_t stream;
+ mme_header_t header;
+ uint fmi;
+
+ cp_mme_rx_t *rx_mme;
+ cp_msg_init (&cp);
+
+ /* Buil MME Header */
+ header.oda = own_mac_addr;
+ header.osa = peer.mac;
+ header.mmtype = VS_EOC_GET_TOPO_REQ;
+ header.fmi_inf = 0;
+ header.fmi_mi = 0;
+ header.fmi_ssn = 0;
+
+ test_write_header (false, &header, &stream);
+
+ /*********************************/
+ /* Receive MME (empty data) */
+ /*********************************/
+ bitstream_finalise (&stream);
+
+ /* Receive MME */
+ rx_mme = cp_msg_mme_read_header (&cp, buffer,
+ ETH_PACKET_MAX_NOVLAN_SIZE,
+ peer.tei, &fmi);
+ test_fail_unless (rx_mme != NULL);
+ test_fail_unless (rx_mme->mmtype == VS_EOC_GET_TOPO_REQ);
+
+ slab_release(rx_mme);
+
+ /* End TEST VS_EOC_GET_TOPO.REQ Receive */
+
+ cp_msg_uninit (&cp);
+ }
+ test_end;
+}
+
+int
+main (void)
+{
+ mac_config_t mac_config;
+
+ test_init (test, 0, NULL);
+ cp.mac_config = &mac_config;
+
+ cp_sta_own_data_set_mac_address (&cp, own_mac_addr);
+
+ peer.mac = 0x23456789ABCDull;
+ peer.eth_type = HPAV_MTYPE_MME;
+ peer.vlan_tci = 0;
+ peer.tei = MAC_TEI_FOREIGN;
+
+ test_case_msg_vs_eoc_get_topo ();
+
+ test_case_begin (test, "Memory allocation");
+ test_begin (test, "memory leaks")
+ {
+ test_fail_if (blk_check_memory () != true, "Memory leaks");
+ }
+ test_end;
+ test_result (test);
+ return test_nb_failed (test) == 0 ? 0 : 1;
+
+ return 0;
+}
+
+u8 *
+cp_cl_interf_get_buffer_tx (cp_t *ctx)
+{
+ dbg_assert (ctx);
+ return buffer;
+}
+
+/**
+ * Send a MME over the PWL or the HLE.
+ * \param ctx the module context.
+ * \param mme The MME to send.
+ *
+ */
+void
+cp_cl_interf_mme_send (cp_t *ctx, cp_mme_tx_t * mme)
+{
+ mme->p_mme = NULL;
+}
+
+u32
+bsu_aclf_beacon_period_tck (bsu_aclf_t *ctx)
+{
+ return BSU_ACLF_BP_50HZ_TCK;
+}
+
+u32
+cyg_current_time (void)
+{
+ /* For tests purpose we can simulate 1000 beacon periods */
+ return (u32)((BSU_ACLF_BP_50HZ_TCK * 1000ull) / TCK_PER_RTC);
+}
+
+
+u32
+cp_sta_core_tck_per_rtc (cp_t *ctx)
+{
+
+ return TCK_PER_RTC;
+}
diff --git a/cesar/cp/eoc/multi_sta/action/Config b/cesar/cp/eoc/multi_sta/action/Config
new file mode 100644
index 0000000000..5ae012ceb2
--- /dev/null
+++ b/cesar/cp/eoc/multi_sta/action/Config
@@ -0,0 +1 @@
+CONFIG_CP_EOC_MULTI_STA_WL_ALLOWED = n \ No newline at end of file
diff --git a/cesar/cp/eoc/multi_sta/action/Module b/cesar/cp/eoc/multi_sta/action/Module
new file mode 100644
index 0000000000..1bb6efbf51
--- /dev/null
+++ b/cesar/cp/eoc/multi_sta/action/Module
@@ -0,0 +1 @@
+SOURCES := multi_sta_action.c
diff --git a/cesar/cp/eoc/multi_sta/action/multi_sta_action.h b/cesar/cp/eoc/multi_sta/action/multi_sta_action.h
new file mode 100644
index 0000000000..7cb0309aae
--- /dev/null
+++ b/cesar/cp/eoc/multi_sta/action/multi_sta_action.h
@@ -0,0 +1,62 @@
+#ifndef cp_eoc_multista_action_action_h
+#define cp_eoc_multista_action_action_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/multi_sta/action/action.h
+ * \brief multi_sta Public functions.
+ * \ingroup cp_multista_action
+ *
+ */
+#include "cp/cp.h"
+#include "cp/mme.h"
+#include "cp/sta/mgr/sta.h"
+#include "cp/eoc/inc/trace.h"
+
+/**
+ * manage association of a station.
+ * \param ctx the module context.
+ * \param assoc_req CM_ASSOC.REQ MME msg having
+ * being received
+ */
+void
+cp_eoc_multi_sta_action__assoc_req (cp_t *ctx, cp_mme_rx_t *mme);
+
+/**
+ * manage authentication of a station.
+ * \param ctx the module context.
+ * \param get_key_req CM_GET_KEY.REQ MME msg having
+ * being decrypted
+ */
+void
+cp_eoc_multi_sta_action__get_key_req (cp_t *ctx, cp_mme_rx_t *mme);
+
+/**
+ * manage authentication of a station.
+ * \param ctx the module context.
+ * \param get_key_req CM_GET_KEY.REQ MME msg having being
+ * decrypted
+ */
+void
+cp_eoc_cco_action__cco__cm_get_key_req_pid0 (
+ cp_t *ctx, cp_mme_rx_t *get_key_req);
+
+/**
+ * TODO
+ */
+void
+cp_eoc_multi_sta_action_put_sta_unassociated (
+ cp_t *ctx, cp_sta_t *station);
+
+/**
+ * TODO
+ */
+cp_tei_t
+cp_eoc_multi_sta_action_compute_tei (cp_t *ctx);
+
+#endif /* cp_eoc_multista_action_action_h */
diff --git a/cesar/cp/eoc/multi_sta/action/src/multi_sta_action.c b/cesar/cp/eoc/multi_sta/action/src/multi_sta_action.c
new file mode 100644
index 0000000000..1fd85ca269
--- /dev/null
+++ b/cesar/cp/eoc/multi_sta/action/src/multi_sta_action.c
@@ -0,0 +1,441 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2009 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/multi_sta/action/src/multi_sta_action.c
+ * \brief multi_sta Action functions.
+ * \ingroup cp_multista_action
+ *
+ */
+
+#include "common/std.h"
+
+/* Private headers. */
+#include "cp/inc/context.h"
+ /* TODO: "cl_eoc_mactotei_entry_insert" should not be called.
+ * It's a private function.*/
+#include "cl/inc/context.h"
+#include "cp/eoc/multi_sta_fsm/inc/tables.h"
+#include "cp/eoc/inc/dbg_print.h"
+
+/* Public headers. */
+#include "cp/eoc/cco/action/vs_eoc_master.h"
+#include "cp/eoc/multi_sta/action/multi_sta_action.h"
+#include "cp/eoc/multi_sta_fsm/fsm.h"
+
+/* Config headers. */
+#include "config/cp/eoc/multi/sta/wl/allowed.h"
+#include "config/cl/eoc.h"
+
+
+/**
+ * manage association of a station.
+ * \param ctx the module context.
+ * \param assoc_req CM_ASSOC.REQ MME msg having being received
+ */
+
+#define _BRANCH(state, event, to) \
+ ((CP_EOC_MULTI_STA_FSM_STATE_ ## state) << 16 \
+ | (CP_EOC_MULTI_STA_FSM_EVENT_TYPE_ ## event) << 8 \
+ | (CP_EOC_MULTI_STA_FSM_STATE_ ## to))
+
+static void
+cp_eoc_multi_sta_action__assoc_req_common (cp_t *ctx, cp_mme_rx_t *mme)
+{
+ cp_eoc_multi_sta_fsm_event_t event;
+ cp_net_t *net;
+ cp_tei_t tei = MAC_TEI_UNASSOCIATED;
+ cp_msg_cc_assoc_cnf_t cnf;
+ cp_sta_t *sta;
+ bool added;
+ mfs_tx_t *mfs;
+
+ dbg_assert (ctx);
+ dbg_assert (mme);
+
+ /* Add the station to the AVLN. */
+ net = cp_sta_mgr_get_our_avln (ctx);
+
+ cnf.nid = cp_net_get_nid (ctx, net);
+ cnf.snid = cp_net_get_snid (ctx, net);
+
+ sta = cp_sta_mgr_sta_get_from_mac (ctx, mme->peer.mac);
+
+#if CONFIG_CP_EOC_MULTI_STA_WL_ALLOWED
+ cp_sta_own_data_t *own = cp_sta_mgr_get_sta_own_data (ctx);
+
+ /* The station already exists get the TEI. */
+ if (sta)
+ tei = cp_sta_get_tei (sta);
+
+ /* Check the White List restriction. */
+ if ((MAC_TEI_IS_STA (tei)) && (sta->multi_sta.allowed == true)
+ && (sta->multi_sta.to_leave == false))
+ {
+ cnf.result = ctx->cco_action.wl_accept_all ?
+ CP_MSG_CC_ASSOC_CNF_RESULT_SUCCESS_WL_ACCEPT_ALL
+ : CP_MSG_CC_ASSOC_CNF_RESULT_SUCCESS;
+ cnf.lease_time_min = CP_LEASE_ASSOC_MIN;
+ }
+ else
+ {
+ cnf.result = ctx->cco_action.wl_complete ?
+ CP_MSG_CC_ASSOC_CNF_RESULT_FAILURE_PERMANANT_RESSOURCE_EXHAUSTION :
+ CP_MSG_CC_ASSOC_CNF_RESULT_FAILURE_TEMPORARY_RESSOURCE_EXHAUSTION;
+ own->num_bad_assoc_failure ++;
+ }
+#else
+ /* The station already exists get the TEI. */
+ if (sta)
+ tei = cp_sta_get_tei (sta);
+
+ if (MAC_TEI_IS_STA (tei))
+ {
+ cnf.result = CP_MSG_CC_ASSOC_CNF_RESULT_SUCCESS;
+ cnf.lease_time_min = CP_LEASE_ASSOC_MIN;
+ }
+ else
+ {
+ cnf.result = ctx->cco_action.wl_complete ?
+ CP_MSG_CC_ASSOC_CNF_RESULT_FAILURE_PERMANANT_RESSOURCE_EXHAUSTION :
+ CP_MSG_CC_ASSOC_CNF_RESULT_FAILURE_TEMPORARY_RESSOURCE_EXHAUSTION;
+ }
+#endif /* CONFIG_CP_EOC_MULTI_STA_WL_ALLOWED */
+
+ /* Send the answer. */
+ cnf.sta_tei = tei;
+
+ /* find and change properly */
+ mme->peer.tei = MAC_TEI_BCAST;
+
+#if CONFIG_CP_EOC_MULTI_STA_WL_ALLOWED
+ /* Check allowed field. */
+ if ((MAC_TEI_IS_STA (tei)) && (sta->multi_sta.allowed == true))
+ {
+ if (sta->multi_sta.to_leave == false)
+ {
+ CP_TRACE (MULTI_STA_ASSOC, TRACE_U64 (mme->peer.mac), tei);
+ cp_msg_cc_assoc_cnf_send (ctx, &mme->peer, &cnf);
+
+ mfs = mac_store_mfs_add_tx (
+ ctx->mac_store, false, true, MAC_LID_NONE, tei, &added);
+ if (added)
+ sar_mfs_add (ctx->sar, (mfs_t *)mfs);
+ if (mfs)
+ blk_release (mfs);
+
+ /* Branch */
+ cp_eoc_multi_sta_fsm_event_t *e = &event;
+ cp_eoc_multi_sta_fsm_event_new (
+ ctx, CP_EOC_MULTI_STA_FSM_EVENT_TYPE_CC_ASSOC_REQ, e);
+
+ sta->fsm.handled_event = e;
+
+ /*sta in the white list*/
+ if (sta->fsm.state == CP_EOC_MULTI_STA_FSM_STATE_disconnected)
+ {
+ cp_eoc_multi_sta_fsm_branch_ (
+ ctx,
+ _BRANCH (disconnected, CC_ASSOC_REQ, associated),
+ sta);
+ sta->associated_date_ms = cp_sta_core_get_date_ms (ctx);
+ DBG_PRINT_2 ("sta: dsc->asc, tei=%d", tei);
+ }
+ else if (sta->fsm.state
+ == CP_EOC_MULTI_STA_FSM_STATE_unassociated)
+ {
+ cp_eoc_multi_sta_fsm_branch_ (
+ ctx,
+ _BRANCH (unassociated, CC_ASSOC_REQ, associated),
+ sta);
+ sta->associated_date_ms = cp_sta_core_get_date_ms (ctx);
+ DBG_PRINT_2 ("sta: una->asc, tei=%d", tei);
+ }
+
+ slab_release (sta);
+ }
+ }
+ /* Sta not registered or not in the white list. */
+ else
+ {
+ cp_eoc_multi_sta_fsm_event_t *e = &event;
+ cp_eoc_multi_sta_fsm_event_new (
+ ctx, CP_EOC_MULTI_STA_FSM_EVENT_TYPE_CC_ASSOC_REQ, e);
+ sta->fsm.handled_event = e;
+ cp_msg_cc_assoc_cnf_send (ctx, &mme->peer, &cnf);
+ if (sta->fsm.state == CP_EOC_MULTI_STA_FSM_STATE_disconnected)
+ {
+ cp_eoc_multi_sta_fsm_branch_ (
+ ctx,
+ _BRANCH (disconnected, CC_ASSOC_REQ, unassociated),
+ sta);
+ DBG_PRINT_2 ("sta: dsc->una, tei=%d", tei);
+ }
+ else if (sta->fsm.state
+ == CP_EOC_MULTI_STA_FSM_STATE_unassociated)
+ {
+ DBG_PRINT_2 ("sta: una, tei=%d", tei);
+ sta->fsm.handled_event = NULL;
+ }
+
+ slab_release (sta);
+ }
+#else
+ if (tei)
+ {
+ cp_sta_mgr_commit_to_dataplane (ctx);
+ /* Update the last request date in the sta. */
+ CP_TRACE (MULTI_STA_ASSOC, TRACE_U64 (mme->peer.mac), tei);
+ cp_msg_cc_assoc_cnf_send (ctx, &mme->peer, &cnf);
+
+ mfs = mac_store_mfs_add_tx (ctx->mac_store, false, true,
+ MAC_LID_NONE, tei, &added);
+ if (added)
+ sar_mfs_add (ctx->sar, (mfs_t *)mfs);
+ if (mfs)
+ blk_release (mfs);
+ /* Branch. */
+ cp_eoc_multi_sta_fsm_event_t *e = &event;
+ cp_eoc_multi_sta_fsm_event_new (
+ ctx, CP_EOC_MULTI_STA_FSM_EVENT_TYPE_CC_ASSOC_REQ, e);
+
+ sta->fsm.handled_event = e;
+
+ /* Sta in the white list. */
+ cp_eoc_multi_sta_fsm_branch_ (
+ ctx, _BRANCH (disconnected, CC_ASSOC_REQ, associated), sta);
+ slab_release (sta);
+
+ }
+ /* Check allowed field as well for WL implementation. */
+ if (!tei)
+ {
+ sta = cp_sta_mgr_sta_add (ctx, net, 0, mme->peer.mac);
+
+ cp_eoc_multi_sta_fsm_event_t *e = &event;
+ cp_eoc_multi_sta_fsm_event_new (
+ ctx, CP_EOC_MULTI_STA_FSM_EVENT_TYPE_CC_ASSOC_REQ, e);
+
+ sta->fsm.handled_event = e;
+
+ /* Sta not in the white list. */
+ cp_eoc_multi_sta_fsm_branch_
+ (ctx, _BRANCH (disconnected, CC_ASSOC_REQ, unassociated), sta);
+
+ slab_release (sta);
+ }
+#endif /* CONFIG_CP_EOC_MULTI_STA_WL_ALLOWED */
+}
+
+void
+cp_eoc_multi_sta_action__assoc_req (cp_t *ctx, cp_mme_rx_t *mme)
+{
+ cp_msg_cc_assoc_req_t assoc;
+
+ dbg_assert_ptr (ctx);
+ dbg_assert_ptr (mme);
+
+ cp_sta_t *sta;
+ cp_tei_t tei = MAC_TEI_UNASSOCIATED;
+
+ /* TODO take in consideration request type, is it new or renew*/
+ if (cp_msg_cc_assoc_req_receive (ctx, mme, &assoc))
+ {
+ cp_eoc_multi_sta_action__assoc_req_common (ctx, mme);
+ }
+ else
+ {
+ sta = cp_sta_mgr_sta_get_from_mac (ctx, mme->peer.mac);
+ tei = cp_sta_get_tei (sta);
+ sta->fsm.handled_event = NULL;
+ DBG_PRINT_2 ("wrong assoc_req, tei=%d", tei);
+ slab_release (sta);
+ }
+}
+
+void
+cp_eoc_multi_sta_action__get_key_req (cp_t *ctx, cp_mme_rx_t *mme)
+{
+ cp_eoc_cco_action__cco__cm_get_key_req_pid0 (ctx, mme);
+}
+
+void
+cp_eoc_cco_action__cco__cm_get_key_req_pid0 (
+ cp_t *ctx, cp_mme_rx_t * get_key_req)
+{
+ cp_eoc_multi_sta_fsm_event_t event;
+ cp_msg_cm_get_key_req_t req;
+ cp_msg_cm_get_key_cnf_t cnf;
+ cp_net_t *net = NULL;
+ cp_sta_t *sta = NULL;
+ bool added, acceptable = false;
+ mfs_tx_t *mfs;
+
+ dbg_assert (ctx);
+ dbg_assert (get_key_req);
+
+ if (cp_msg_cm_get_key_req_receive (ctx, get_key_req, &req)
+ && cp_secu_protocol_check (NULL, &get_key_req->prun,
+ CP_SECU_PROTOCOL_RUN_CHECK_RESULT_NEW)
+ && MAC_TEI_IS_STA (get_key_req->peer.tei))
+ acceptable = true;
+
+ /* Get the data in the payload of the mme. */
+ if (acceptable)
+ {
+ if (req.key_type == CP_MSG_KEY_NEK)
+ {
+ /* Get the network. */
+ net = cp_sta_mgr_get_our_avln (ctx);
+ /* Get the station. */
+ sta = cp_sta_mgr_sta_get_assoc (ctx, net, get_key_req->peer.tei);
+
+ if (sta)
+ {
+ cnf.result = CP_MSG_CM_GET_KEY_CNF_RESULT_KEY_GRANTED;
+ cp_sta_set_assoc_confirmed (ctx, sta, true);
+ sta->fsm.handled_event = NULL;
+
+ /* All keys granted. */
+ uint i;
+
+ mac_nek_t *nek = bsu_nek_get_current (ctx->bsu);
+ cnf.eks = nek->eks;
+ for (i = 0; i < COUNT (nek->nek_enc); i++)
+ cnf.key.key[i] = nek->nek_enc[i];
+
+ for (i = 0; i < MAC_CAP_NB; i++)
+ {
+ mfs = mac_store_mfs_add_tx (
+ ctx->mac_store, false, false, MAC_LLID_MIN + i,
+ get_key_req->peer.tei, &added);
+ if (added)
+ sar_mfs_add (ctx->sar, (mfs_t *)mfs);
+ if (mfs)
+ {
+ mfs->cap = i;
+ blk_release (mfs);
+ }
+ }
+
+ /* Send the TEI map: Not needed in EoC. */
+ slab_release (sta);
+ }
+ else
+ {
+ cnf.result = CP_MSG_CM_GET_KEY_CNF_RESULT_REQUEST_REFUSED;
+
+ sta = cp_sta_mgr_sta_get_from_mac (ctx,
+ get_key_req->peer.mac);
+ if (sta)
+ {
+ sta->fsm.handled_event = NULL;
+ DBG_PRINT_2 ("not auth, all keys not granted, tei=%d",
+ get_key_req->peer.tei);
+ slab_release (sta);
+ }
+ }
+ cp_secu_protocol_next (&get_key_req->prun, &ctx->rnd, false);
+ } /* Use it to ack previous neck key. */
+ else if (req.key_type == CP_MSG_KEY_TEK)
+ {
+ uint i;
+
+ mac_nek_t *nek = bsu_nek_get_current (ctx->bsu);
+ cnf.eks = nek->eks;
+ for (i = 0; i < COUNT (nek->nek_enc); i++)
+ cnf.key.key[i] = nek->nek_enc[i];
+
+ /* Get the network. */
+ net = cp_sta_mgr_get_our_avln (ctx);
+ /* Get the station. */
+ sta = cp_sta_mgr_sta_get_assoc (ctx, net, get_key_req->peer.tei);
+
+ if (sta)
+ {
+ cnf.result = CP_MSG_CM_GET_KEY_CNF_RESULT_KEY_GRANTED;
+ cp_sta_set_authenticated (ctx, sta, true);
+
+ cp_eoc_multi_sta_fsm_event_t *e = &event;
+ cp_eoc_multi_sta_fsm_event_new (
+ ctx, CP_EOC_MULTI_STA_FSM_EVENT_TYPE_CC_GET_KEY_REQ, e);
+
+ sta->fsm.handled_event = e;
+
+ /* all keys granted*/
+ cp_eoc_multi_sta_fsm_branch_ (
+ ctx,
+ _BRANCH (associated, CC_GET_KEY_REQ, authenticated),
+ sta);
+
+ sta->authenticated_to_unassociated = true;
+#if CONFIG_CL_EOC_ROUTE
+ arch_dsr_lock ();
+ added = cl_eoc_mactotei_entry_insert (
+ ctx->cl, get_key_req->peer.mac, get_key_req->peer.tei);
+ arch_dsr_unlock ();
+ dbg_assert (added);
+#endif
+ slab_release (sta);
+ }
+ cp_secu_protocol_next (&get_key_req->prun, &ctx->rnd, true);
+ }
+ }
+ /* Refuse the request. */
+ else
+ {
+ cnf.result = CP_MSG_CM_GET_KEY_CNF_RESULT_REQUEST_REFUSED;
+
+ sta = cp_sta_mgr_sta_get_from_mac (ctx, get_key_req->peer.mac);
+ if (sta)
+ {
+ sta->fsm.handled_event = NULL;
+ DBG_PRINT_2 ("not auth, all keys not granted, tei=%d",
+ get_key_req->peer.tei);
+ slab_release (sta);
+ }
+ }
+
+ /* Send message to peer. Mark station authenticated. */
+ cnf.key_type = req.key_type;
+ cnf.nid = req.nid;
+ cp_msg_cm_get_key_cnf_send (ctx, &get_key_req->peer, get_key_req->peks,
+ &get_key_req->prun, &cnf);
+
+ if ((req.key_type == CP_MSG_KEY_TEK)
+ && (cnf.result == CP_MSG_CM_GET_KEY_CNF_RESULT_KEY_GRANTED))
+ {
+ cp_eoc_cco_action_vs__cco__vs_set_out_lev_ind (
+ ctx, &get_key_req->peer);
+ DBG_PRINT_2 ("sta: auth, tei=%d", get_key_req->peer.tei);
+ cp_sta_own_data_t *own = cp_sta_mgr_get_sta_own_data (ctx);
+ own->num_good_assoc_auth ++;
+ }
+}
+
+void
+cp_eoc_multi_sta_action_put_sta_unassociated (cp_t *ctx, cp_sta_t *station)
+{
+ dbg_assert (ctx);
+ dbg_assert (station);
+
+ station->fsm.state = CP_EOC_MULTI_STA_FSM_STATE_unassociated;
+}
+
+cp_tei_t
+cp_eoc_multi_sta_action_compute_tei (cp_t *ctx)
+{
+ static uint tei = MAC_TEI_STA_MIN_EOC - 1;
+
+ tei ++;
+ if (tei <= MAC_TEI_STA_MAX)
+ return tei;
+ else
+ return MAC_TEI_UNASSOCIATED;
+}
+
+#undef _BRANCH
diff --git a/cesar/cp/eoc/multi_sta/action/stub/Module b/cesar/cp/eoc/multi_sta/action/stub/Module
new file mode 100644
index 0000000000..1bb6efbf51
--- /dev/null
+++ b/cesar/cp/eoc/multi_sta/action/stub/Module
@@ -0,0 +1 @@
+SOURCES := multi_sta_action.c
diff --git a/cesar/cp/eoc/multi_sta/action/stub/src/multi_sta_action.c b/cesar/cp/eoc/multi_sta/action/stub/src/multi_sta_action.c
new file mode 100644
index 0000000000..e2a9bc1e89
--- /dev/null
+++ b/cesar/cp/eoc/multi_sta/action/stub/src/multi_sta_action.c
@@ -0,0 +1,50 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2009 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/multi_sta/action/stub/src/multi_sta_action.c
+ * \brief Multi STA functions stub.
+ * \ingroup cp_eoc_multista_action_stub
+ *
+ * Stub function for the unit test of the other modules.
+ */
+#include "common/std.h"
+#include "cp/cp.h"
+#include "cp/mme.h"
+#include "cp/sta/mgr/sta.h"
+
+void
+cp_eoc_multi_sta_action__assoc_req (cp_t *ctx, cp_mme_rx_t *mme)
+ __attribute__ ((weak));
+void
+cp_eoc_multi_sta_action__assoc_req (cp_t *ctx, cp_mme_rx_t *mme) {}
+
+void
+cp_eoc_multi_sta_action__get_key_req (cp_t *ctx, cp_mme_rx_t *mme)
+ __attribute__ ((weak));
+void
+cp_eoc_multi_sta_action__get_key_req (cp_t *ctx, cp_mme_rx_t *mme) {}
+
+void
+cp_eoc_cco_action__cco__cm_get_key_req_pid0 (
+ cp_t *ctx, cp_mme_rx_t * get_key_req)
+ __attribute__ ((weak));
+void
+cp_eoc_cco_action__cco__cm_get_key_req_pid0 (
+ cp_t *ctx, cp_mme_rx_t * get_key_req) {}
+
+void
+cp_eoc_multi_sta_action_put_sta_unassociated (cp_t *ctx, cp_sta_t *station)
+ __attribute__ ((weak));
+void
+cp_eoc_multi_sta_action_put_sta_unassociated (cp_t *ctx, cp_sta_t *station) {}
+
+cp_tei_t
+cp_eoc_multi_sta_action_compute_tei (cp_t *ctx) __attribute__ ((weak));
+cp_tei_t
+cp_eoc_multi_sta_action_compute_tei (cp_t *ctx)
+{ return MAC_TEI_UNASSOCIATED; }
diff --git a/cesar/cp/eoc/multi_sta/action/test/utest/Makefile b/cesar/cp/eoc/multi_sta/action/test/utest/Makefile
new file mode 100644
index 0000000000..b238673cdd
--- /dev/null
+++ b/cesar/cp/eoc/multi_sta/action/test/utest/Makefile
@@ -0,0 +1,12 @@
+all: fsm actions
+
+fsm: fsm-Makefile
+ make -f fsm-Makefile
+
+actions: actions-Makefile
+ make -f actions-Makefile
+
+clean: fsm-Makefile actions-Makefile
+ make -f fsm-Makefile clean
+ make -f actions-Makefile clean
+ rmdir obj
diff --git a/cesar/cp/eoc/multi_sta/action/test/utest/actions-Config b/cesar/cp/eoc/multi_sta/action/test/utest/actions-Config
new file mode 100644
index 0000000000..53b2b131ce
--- /dev/null
+++ b/cesar/cp/eoc/multi_sta/action/test/utest/actions-Config
@@ -0,0 +1,14 @@
+CONFIG_CP_EOC = y
+CONFIG_DEBUG_FATAL_CATCH = y
+CONFIG_CP_EOC_MULTI_STA_FSM_DEF="cp/eoc/multi_sta_fsm/src/fsm/multi_sta.fsm"
+CONFIG_CP_EOC_IS_MASTER = y
+CONFIG_MAC_PBPROC_EOC_FC = y
+CONFIG_CP_FSM_DEF = "cp/eoc/fsm/src/fsm/cp_eoc_cco.fsm"
+CONFIG_CP_EOC_SCHEDULER = y
+CONFIG_MAC_COMMON_EOC_SCHED = y
+CONFIG_TRACE_ON_FATAL = y
+CONFIG_TRACE = n
+CONFIG_CP_MSG_EOC_MULTI_STA_MME = y
+CONFIG_MAC_COMMON_EOC_TEI = y
+CONFIG_CL_EOC_ROUTE = y
+CONFIG_RESTRACK = y
diff --git a/cesar/cp/eoc/multi_sta/action/test/utest/actions-Makefile b/cesar/cp/eoc/multi_sta/action/test/utest/actions-Makefile
new file mode 100644
index 0000000000..2b4ce872ba
--- /dev/null
+++ b/cesar/cp/eoc/multi_sta/action/test/utest/actions-Makefile
@@ -0,0 +1,26 @@
+BASE = ../../../../../..
+
+VARIANT = actions
+
+DEFS = -DSTA_CORE_UNIT_TEST=1
+
+INCLUDES = cp/eoc/multi_sta/action/test/utest/actions-override
+
+HOST_PROGRAMS = test_actions
+
+test_actions_SOURCES = test_actions.c cl_interf_stub.c \
+ hal_phy_stub.c cyg_stub.c cp_stub.c dataplane_stub.c
+
+test_actions_MODULES = lib mac/common \
+ cp/eoc/multi_sta_fsm cp/eoc/multi_sta/action \
+ cp/eoc/sta/mgr cp/eoc/sta/action cp/sta/core/stub \
+ cp/eoc/cco/action/stub cp/eoc/cco/bw \
+ cp/eoc/msg cp/eoc/fsm cp/secu \
+ cp/eoc/beacon/stub mac/sar/stub mac/ca/stub cl/stub \
+ interface/stub ce/tx/stub bsu/stub bufmgr/stub \
+ ce/rx/stub mac/pbproc/stub
+
+test_actions_CONFIG_MODULES = cl cp/eoc mac/sar
+test_actions_LDLIBS = -lm
+
+include $(BASE)/common/make/top.mk
diff --git a/cesar/cp/eoc/multi_sta/action/test/utest/actions-override/cp/inc/context.h b/cesar/cp/eoc/multi_sta/action/test/utest/actions-override/cp/inc/context.h
new file mode 100644
index 0000000000..0b432a120e
--- /dev/null
+++ b/cesar/cp/eoc/multi_sta/action/test/utest/actions-override/cp/inc/context.h
@@ -0,0 +1,97 @@
+#ifndef override_cp_inc_context_h
+#define override_cp_inc_context_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file override/cp/inc/context.h
+ * \brief Control plane context override.
+ * \ingroup test
+ */
+
+#include "cp/eoc/beacon/beacon.h"
+#include "cp/eoc/beacon/inc/beacon.h"
+#include "cp/fsm/fsm.h"
+#include "cp/fsm/inc/context.h"
+#include "cp/inc/trace.h"
+#include "cp/sta/mgr/sta_mgr.h"
+#include "cp/sta/mgr/inc/sta_mgr.h"
+#include "mac/common/config.h"
+#include "mac/common/store.h"
+#include "mac/sar/sar.h"
+#include "cl/cl.h"
+#include "cp/msg/inc/context.h"
+#include "lib/rnd.h"
+#include "interface/interface.h"
+#include "cp/sta/core/defs.h"
+#include "cp/sta/action/inc/context.h"
+#include "cp/cco/bw/bw.h"
+#include "cp/cco/bw/inc/context.h"
+#include "cp/eoc/cco/bw/inc/bw.h"
+#include "cp/cl_interf/cl_interf.h"
+#include "cp/cl_interf/inc/context.h"
+#include "cp/eoc/cco/action/inc/cco_action.h"
+#include "cp/cco/action/inc/cco_action.h"
+#include "ce/tx/inc/tx.h"
+#include "bsu/aclf/aclf.h"
+#include "config/cl/eoc/route.h"
+#include "bufmgr/bufmgr.h"
+#include "cp/eoc/inc/dbg_print.h"
+
+struct cp_t
+{
+#if CONFIG_TRACE
+ /** Trace context. */
+ trace_buffer_t trace;
+ /** Verbose trace context. */
+ trace_buffer_t trace_verbose;
+#endif /* CONFIG_TRACE */
+
+ /** FSM context. */
+ cp_fsm_t fsm;
+ /** STA core flag. */
+ bool sta_core_flag;
+ /** STA core urgent flag. */
+ bool sta_core_urgent_flag;
+ /** station manager context*/
+ cp_sta_mgr_t sta_mgr;
+ /** Mac store /dataplane */
+ mac_store_t *mac_store;
+ /** MAC config contest*/
+ mac_config_t *mac_config;
+ /** Convergence Layer context */
+ cl_t *cl;
+ /** Phy context. */
+ phy_t *phy;
+ /** Segmentation and reassembly context */
+ sar_t *sar;
+ /** PBProc. */
+ pbproc_t *pbproc;
+ /** Context of the aclf. */
+ bsu_aclf_t *bsu_aclf;
+
+ cp_beacon_t beacon;
+ cp_msg_t msg;
+ lib_rnd_t rnd;
+ interface_t *interface;
+ cp_sta_action_t sta_action;
+ cp_eoc_cco_bw_sched_t schedule;
+ ca_t *ca;
+ cp_cco_bw_t bw;
+ cp_cl_interf_t cl_interf;
+ cp_cco_action_t cco_action;
+ ce_tx_t ce_tx;
+ ce_rx_t *ce_rx;
+
+ /** BSU context. */
+ bsu_t *bsu;
+
+ /** Buffer manager. */
+ bufmgr_t *bufmgr;
+};
+
+#endif /* override_cp_inc_context_h */
diff --git a/cesar/cp/eoc/multi_sta/action/test/utest/actions-override/cp/sta/core/core.h b/cesar/cp/eoc/multi_sta/action/test/utest/actions-override/cp/sta/core/core.h
new file mode 100644
index 0000000000..de8319d615
--- /dev/null
+++ b/cesar/cp/eoc/multi_sta/action/test/utest/actions-override/cp/sta/core/core.h
@@ -0,0 +1,52 @@
+#ifndef override_cp_sta_core_core_h
+#define override_cp_sta_core_core_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file override/cp/sta/core/core.h
+ * \brief STA Core override.
+ * \ingroup test
+ */
+
+#include "cp/inc/context.h"
+
+BEGIN_DECLS
+
+void
+cp_sta_core_signal_fsm_event (cp_t *ctx);
+
+void
+cp_sta_core_signal_fsm_urgent_event (cp_t *ctx);
+
+u32
+cp_sta_core_get_date_ms (cp_t *ctx);
+
+void
+cp_sta_core_checkpoint (cp_t *ctx);
+
+void
+cp_sta_core_signal_recv_mme_event(cp_t *cp_ctx);
+
+void
+cp_sta_core_gen_timed_event(cp_t *cp_ctx,
+ cp_sta_core_timed_event_def_t *sta_core_timed_event,
+ cp_fsm_event_t *fsm_event,
+ uint event_delay_ms);
+
+void
+cp_sta_core_stop_timed_or_cyclic_event(cp_t *cp_ctx,
+ cp_sta_core_timed_event_def_t *sta_core_timed_event);
+
+int
+cp_sta_core_ms_to_cyg_tick (cp_t *ctx, const uint ms);
+
+u32
+cp_sta_core_tck_per_rtc (cp_t *ctx);
+END_DECLS
+
+#endif /* override_cp_sta_core_core_h */
diff --git a/cesar/cp/eoc/multi_sta/action/test/utest/actions-override/cp/sta/core/defs.h b/cesar/cp/eoc/multi_sta/action/test/utest/actions-override/cp/sta/core/defs.h
new file mode 100644
index 0000000000..9698b44e93
--- /dev/null
+++ b/cesar/cp/eoc/multi_sta/action/test/utest/actions-override/cp/sta/core/defs.h
@@ -0,0 +1,57 @@
+#ifndef cp_sta_core_defs_h
+#define cp_sta_core_defs_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/sta/core/defs.h
+ * \brief Sta core defs.
+ * \ingroup cp/sta/core
+ *
+ */
+#include "cp/fsm/forward.h"
+
+/** Forward declaration. */
+typedef struct cp_sta_core_t cp_sta_core_t;
+
+/*
+ * the sta core event flags
+ * these are some flags, so take care to give a value with all bits set to 0 but one.
+ */
+enum cp_sta_core_event_flag_t
+{
+ CP_STA_CORE_EVENT_FLAG_RECV_BEACON = 0x1,
+ CP_STA_CORE_EVENT_FLAG_RECV_MME = 0x2,
+ CP_STA_CORE_EVENT_FLAG_FSM = 0x4,
+ CP_STA_CORE_EVENT_FLAG_GARBAGE = 0x8,
+ CP_STA_CORE_EVENT_FLAG_TERMINATE = 0x10
+};
+typedef enum cp_sta_core_event_flag_t cp_sta_core_event_flag_t;
+
+/** Definition of alarm info structure
+ * (applications should not use it directly but use "alias" defined just below) */
+struct cp_sta_core_timed_event_def_t
+{
+ /* eCos alarm. */
+ uint alarm;
+ /* eCos alarm handle. */
+ uint alarm_handle;
+ /* the sta core event flag to set
+ * (auto or user-specified when creating/launching timer alarm). */
+ cp_sta_core_event_flag_t event_flag;
+ /* FSM event specified when creating/launching timer alarm
+ * (set if the previous flag is CP_STA_CORE_EVENT_FLAG_FSM). */
+ cp_fsm_event_t *fsm_event;
+ /* flag indicating a periodic alarm (if set to true)
+ * or one-shot alarm (if set to false). */
+ bool cyclic_alarm;
+ /* pointer to CP context. */
+ cp_t *cp_ctx;
+};
+typedef struct cp_sta_core_timed_event_def_t cp_sta_core_timed_event_def_t;
+
+#endif /* cp_sta_core_defs_h */
diff --git a/cesar/cp/eoc/multi_sta/action/test/utest/actions-override/cyg/kernel/kapi.h b/cesar/cp/eoc/multi_sta/action/test/utest/actions-override/cyg/kernel/kapi.h
new file mode 100644
index 0000000000..019e5d3a07
--- /dev/null
+++ b/cesar/cp/eoc/multi_sta/action/test/utest/actions-override/cyg/kernel/kapi.h
@@ -0,0 +1,37 @@
+#ifndef override_cyg_kernel_kapi_h
+#define override_cyg_kernel_kapi_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2010 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file override/cyg/kernel/kapi.h
+ * \brief override some kernel api from <cyg/kernel/kapi.h>.
+ * \ingroup cp_msg
+ *
+ *
+ */
+
+struct cyg_resolution_t
+{
+ u32 dividend;
+ u32 divisor;
+} ;
+
+typedef struct cyg_resolution_t cyg_resolution_t;
+
+typedef u64 cyg_tick_count_t;
+
+int
+cyg_real_time_clock (void);
+
+cyg_resolution_t
+cyg_clock_get_resolution (int clock);
+
+cyg_tick_count_t
+cyg_current_time (void);
+
+#endif
diff --git a/cesar/cp/eoc/multi_sta/action/test/utest/fsm-Config b/cesar/cp/eoc/multi_sta/action/test/utest/fsm-Config
new file mode 100644
index 0000000000..4e2aa9e19f
--- /dev/null
+++ b/cesar/cp/eoc/multi_sta/action/test/utest/fsm-Config
@@ -0,0 +1,13 @@
+CONFIG_CP_EOC = y
+CONFIG_DEBUG_FATAL_CATCH = y
+CONFIG_CP_EOC_MULTI_STA_FSM_DEF="cp/eoc/multi_sta_fsm/src/fsm/multi_sta.fsm"
+CONFIG_CP_EOC_IS_MASTER = y
+CONFIG_CP_FSM_DEF = "cp/eoc/fsm/src/fsm/cp_eoc_cco.fsm"
+CONFIG_MAC_PBPROC_EOC_FC = y
+CONFIG_CP_EOC_SCHEDULER = y
+CONFIG_MAC_COMMON_EOC_SCHED = y
+CONFIG_MAC_COMMON_EOC_TEI = y
+CONFIG_CP_STA_MGR_CCO_EOC = y
+CONFIG_CP_EOC_DBG_PRINT_LEVEL = 1
+CONFIG_RESTRACK = y
+CONFIG_CL_EOC_ROUTE = y
diff --git a/cesar/cp/eoc/multi_sta/action/test/utest/fsm-Makefile b/cesar/cp/eoc/multi_sta/action/test/utest/fsm-Makefile
new file mode 100644
index 0000000000..8bb820104e
--- /dev/null
+++ b/cesar/cp/eoc/multi_sta/action/test/utest/fsm-Makefile
@@ -0,0 +1,25 @@
+BASE = ../../../../../..
+
+VARIANT = fsm
+
+DEFS = -DSTA_CORE_UNIT_TEST=1
+
+INCLUDES = cp/eoc/multi_sta/action/test/utest \
+ cp/eoc/multi_sta/action/test/utest/fsm-override
+
+HOST_PROGRAMS = test_fsm
+
+test_fsm_SOURCES = test_fsm.c actions.c cl_interf_stub.c\
+ hal_phy_stub.c cyg_stub.c cp_stub.c fsm_stub.c
+
+test_fsm_MODULES = lib lib/scenario \
+ cp/eoc/multi_sta_fsm cp/eoc/multi_sta/action/stub \
+ cp/eoc/sta/mgr cp/eoc/sta/action/stub cp/sta/core/stub \
+ cp/eoc/cco/action cp/eoc/cco/bw \
+ cp/eoc/fsm cp/eoc/msg mac/common cp/secu cp/eoc/beacon/stub \
+ mac/sar/stub mac/ca/stub interface/stub cl/stub ce/tx/stub \
+ bsu/stub bufmgr/stub mac/pbproc/stub ce/rx/stub
+
+test_fsm_CONFIG_MODULES = cl mac/sar cp/eoc
+
+include $(BASE)/common/make/top.mk
diff --git a/cesar/cp/eoc/multi_sta/action/test/utest/fsm-override/cp/inc/context.h b/cesar/cp/eoc/multi_sta/action/test/utest/fsm-override/cp/inc/context.h
new file mode 100644
index 0000000000..a869013f23
--- /dev/null
+++ b/cesar/cp/eoc/multi_sta/action/test/utest/fsm-override/cp/inc/context.h
@@ -0,0 +1,94 @@
+#ifndef override_cp_inc_context_h
+#define override_cp_inc_context_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file override/cp/inc/context.h
+ * \brief Control plane context override.
+ * \ingroup test
+ */
+
+#include "cp/eoc/beacon/beacon.h"
+#include "cp/eoc/beacon/inc/beacon.h"
+#include "cp/fsm/fsm.h"
+#include "cp/fsm/inc/context.h"
+#include "cp/inc/trace.h"
+#include "cp/sta/mgr/sta_mgr.h"
+#include "cp/sta/mgr/inc/sta_mgr.h"
+#include "mac/common/config.h"
+#include "mac/common/store.h"
+#include "mac/sar/sar.h"
+#include "cl/cl.h"
+#include "cp/msg/inc/context.h"
+#include "lib/rnd.h"
+#include "interface/interface.h"
+#include "cp/sta/core/defs.h"
+#include "cp/sta/action/inc/context.h"
+#include "cp/cco/bw/bw.h"
+#include "cp/cco/bw/inc/context.h"
+#include "cp/eoc/cco/bw/inc/bw.h"
+#include "cp/cl_interf/cl_interf.h"
+#include "cp/cl_interf/inc/context.h"
+#include "cp/cl_interf/cl_interf.h"
+#include "cp/cl_interf/inc/context.h"
+#include "cp/eoc/cco/action/inc/cco_action.h"
+#include "cp/cco/action/inc/cco_action.h"
+#include "ce/tx/inc/tx.h"
+#include "bsu/aclf/aclf.h"
+#include "bufmgr/bufmgr.h"
+
+struct cp_t
+{
+#if CONFIG_TRACE
+ /** Trace context. */
+ trace_buffer_t trace;
+#endif /* CONFIG_TRACE */
+
+
+
+ /** FSM context. */
+ cp_fsm_t fsm;
+
+ /** STA core flag. */
+ bool sta_core_flag;
+ /** STA core urgent flag. */
+ bool sta_core_urgent_flag;
+ /** station manager context*/
+ cp_sta_mgr_t sta_mgr;
+ /** Mac store /dataplane */
+ mac_store_t *mac_store;
+ /** MAC config contest*/
+ mac_config_t *mac_config;
+ /** Convergence Layer context */
+ cl_t *cl;
+ /** Segmentation and reassembly context */
+ sar_t *sar;
+ /** PBProc. */
+ pbproc_t *pbproc;
+ /** Context of the aclf. */
+ bsu_aclf_t *bsu_aclf;
+
+ cp_beacon_t beacon;
+ cp_cco_bw_t bw;
+ cp_msg_t msg;
+ lib_rnd_t rnd;
+ interface_t *interface;
+ cp_sta_action_t sta_action;
+ cp_eoc_cco_bw_sched_t schedule;
+ ca_t *ca;
+ cp_cl_interf_t cl_interf;
+ cp_cco_action_t cco_action;
+ ce_tx_t ce_tx;
+ ce_rx_t *ce_rx;
+ /** BSU context. */
+ bsu_t *bsu;
+ /** Buffer manager. */
+ bufmgr_t *bufmgr;
+};
+
+#endif /* override_cp_inc_context_h */
diff --git a/cesar/cp/eoc/multi_sta/action/test/utest/fsm-override/cp/sta/core/core.h b/cesar/cp/eoc/multi_sta/action/test/utest/fsm-override/cp/sta/core/core.h
new file mode 100644
index 0000000000..57f7eee028
--- /dev/null
+++ b/cesar/cp/eoc/multi_sta/action/test/utest/fsm-override/cp/sta/core/core.h
@@ -0,0 +1,53 @@
+#ifndef override_cp_sta_core_core_h
+#define override_cp_sta_core_core_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file override/cp/sta/core/core.h
+ * \brief STA Core override.
+ * \ingroup test
+ */
+
+#include "cp/inc/context.h"
+
+BEGIN_DECLS
+
+void
+cp_sta_core_signal_fsm_event (cp_t *ctx);
+
+void
+cp_sta_core_signal_fsm_urgent_event (cp_t *ctx);
+
+u32
+cp_sta_core_get_date_ms (cp_t *ctx);
+
+void
+cp_sta_core_checkpoint (cp_t *ctx);
+
+void
+cp_sta_core_signal_recv_mme_event(cp_t *cp_ctx);
+
+void
+cp_sta_core_gen_timed_event(cp_t *cp_ctx,
+ cp_sta_core_timed_event_def_t *sta_core_timed_event,
+ cp_fsm_event_t *fsm_event,
+ uint event_delay_ms);
+
+void
+cp_sta_core_stop_timed_or_cyclic_event(cp_t *cp_ctx,
+ cp_sta_core_timed_event_def_t *sta_core_timed_event);
+
+int
+cp_sta_core_ms_to_cyg_tick (cp_t *ctx, const uint ms);
+
+u32
+cp_sta_core_tck_per_rtc (cp_t *ctx);
+
+END_DECLS
+
+#endif /* override_cp_sta_core_core_h */
diff --git a/cesar/cp/eoc/multi_sta/action/test/utest/fsm-override/cp/sta/core/defs.h b/cesar/cp/eoc/multi_sta/action/test/utest/fsm-override/cp/sta/core/defs.h
new file mode 100644
index 0000000000..9698b44e93
--- /dev/null
+++ b/cesar/cp/eoc/multi_sta/action/test/utest/fsm-override/cp/sta/core/defs.h
@@ -0,0 +1,57 @@
+#ifndef cp_sta_core_defs_h
+#define cp_sta_core_defs_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/sta/core/defs.h
+ * \brief Sta core defs.
+ * \ingroup cp/sta/core
+ *
+ */
+#include "cp/fsm/forward.h"
+
+/** Forward declaration. */
+typedef struct cp_sta_core_t cp_sta_core_t;
+
+/*
+ * the sta core event flags
+ * these are some flags, so take care to give a value with all bits set to 0 but one.
+ */
+enum cp_sta_core_event_flag_t
+{
+ CP_STA_CORE_EVENT_FLAG_RECV_BEACON = 0x1,
+ CP_STA_CORE_EVENT_FLAG_RECV_MME = 0x2,
+ CP_STA_CORE_EVENT_FLAG_FSM = 0x4,
+ CP_STA_CORE_EVENT_FLAG_GARBAGE = 0x8,
+ CP_STA_CORE_EVENT_FLAG_TERMINATE = 0x10
+};
+typedef enum cp_sta_core_event_flag_t cp_sta_core_event_flag_t;
+
+/** Definition of alarm info structure
+ * (applications should not use it directly but use "alias" defined just below) */
+struct cp_sta_core_timed_event_def_t
+{
+ /* eCos alarm. */
+ uint alarm;
+ /* eCos alarm handle. */
+ uint alarm_handle;
+ /* the sta core event flag to set
+ * (auto or user-specified when creating/launching timer alarm). */
+ cp_sta_core_event_flag_t event_flag;
+ /* FSM event specified when creating/launching timer alarm
+ * (set if the previous flag is CP_STA_CORE_EVENT_FLAG_FSM). */
+ cp_fsm_event_t *fsm_event;
+ /* flag indicating a periodic alarm (if set to true)
+ * or one-shot alarm (if set to false). */
+ bool cyclic_alarm;
+ /* pointer to CP context. */
+ cp_t *cp_ctx;
+};
+typedef struct cp_sta_core_timed_event_def_t cp_sta_core_timed_event_def_t;
+
+#endif /* cp_sta_core_defs_h */
diff --git a/cesar/cp/eoc/multi_sta/action/test/utest/fsm-override/cyg/kernel/kapi.h b/cesar/cp/eoc/multi_sta/action/test/utest/fsm-override/cyg/kernel/kapi.h
new file mode 100644
index 0000000000..019e5d3a07
--- /dev/null
+++ b/cesar/cp/eoc/multi_sta/action/test/utest/fsm-override/cyg/kernel/kapi.h
@@ -0,0 +1,37 @@
+#ifndef override_cyg_kernel_kapi_h
+#define override_cyg_kernel_kapi_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2010 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file override/cyg/kernel/kapi.h
+ * \brief override some kernel api from <cyg/kernel/kapi.h>.
+ * \ingroup cp_msg
+ *
+ *
+ */
+
+struct cyg_resolution_t
+{
+ u32 dividend;
+ u32 divisor;
+} ;
+
+typedef struct cyg_resolution_t cyg_resolution_t;
+
+typedef u64 cyg_tick_count_t;
+
+int
+cyg_real_time_clock (void);
+
+cyg_resolution_t
+cyg_clock_get_resolution (int clock);
+
+cyg_tick_count_t
+cyg_current_time (void);
+
+#endif
diff --git a/cesar/cp/eoc/multi_sta/action/test/utest/inc/scenario_defs.h b/cesar/cp/eoc/multi_sta/action/test/utest/inc/scenario_defs.h
new file mode 100644
index 0000000000..e004a95476
--- /dev/null
+++ b/cesar/cp/eoc/multi_sta/action/test/utest/inc/scenario_defs.h
@@ -0,0 +1,135 @@
+#ifndef inc_scenario_defs_h
+#define inc_scenario_defs_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file inc/scenario_defs.h
+ * \brief Scenario definitions.
+ * \ingroup test
+ */
+
+#include "cp/types.h"
+#include "cp/mme.h"
+#include "cp/eoc/multi_sta_fsm/fsm.h"
+
+/* Scenario globals. */
+#define SCENARIO_DEFS_GLOBALS \
+ cp_t *cp;
+
+/* Scenario actions. */
+#define SCENARIO_DEFS_ACTIONS \
+ post_and_process, \
+ post, \
+ trigger, \
+ post_urgent, \
+ process, \
+ process_urgent
+
+
+typedef struct
+{
+ cp_eoc_multi_sta_fsm_event_type_t type;
+ cp_sta_t *sta;
+} scenario_action_param_t;
+
+typedef scenario_action_param_t scenario_action_post_and_process_t;
+typedef scenario_action_param_t scenario_action_post_t;
+typedef scenario_action_param_t scenario_action_trigger_t;
+typedef scenario_action_param_t scenario_action_post_urgent_t;
+typedef scenario_action_param_t scenario_action_process_t;
+typedef scenario_empty_t scenario_action_process_urgent_t;
+
+void
+scenario_action_post_and_process_cb (scenario_globals_t *globals,
+ scenario_params_t *params);
+
+void
+scenario_action_post_cb (scenario_globals_t *globals,
+ scenario_params_t *params);
+
+void
+scenario_action_trigger_cb (scenario_globals_t *globals,
+ scenario_params_t *params);
+
+void
+scenario_action_post_urgent_cb (scenario_globals_t *globals,
+ scenario_params_t *params);
+
+void
+scenario_action_process_cb (scenario_globals_t *globals,
+ scenario_params_t *params);
+
+void
+scenario_action_process_urgent_cb (scenario_globals_t *globals,
+ scenario_params_t *params);
+
+/* Scenario events. */
+
+#define SCENARIO_DEFS_EVENTS \
+ cp_eoc_multi_sta_fsm_handled_event,\
+ cp_eoc_multi_sta_fsm__unassociated__timeout_assoc,\
+ cp_eoc_multi_sta_fsm__associated__CC_GET_KEY_REQ,\
+ cp_eoc_multi_sta_fsm__associated__timeout_auth,\
+ cp_eoc_multi_sta_fsm__associated__cc_leave,\
+ cp_eoc_multi_sta_fsm__authenticated__cc_leave,\
+ cp_eoc_multi_sta_fsm__authenticated__CC_SLEEP_ENTER_REQ,\
+ cp_eoc_multi_sta_fsm__authenticated__lost_connection,\
+ cp_eoc_multi_sta_fsm__sleep_authenticated__lost_connection,\
+ cp_eoc_multi_sta_fsm__sleep_authenticated__CC_SLEEP_EXIT_IND,\
+ cp_eoc_multi_sta_fsm__disconnected__CC_ASSOC_REQ,\
+ cp_eoc_multi_sta_fsm__unassociated__CC_ASSOC_REQ
+
+
+typedef struct
+{
+ cp_eoc_multi_sta_fsm_branch_t branch;
+ cp_sta_t *sta;
+} scenario_event_transition_with_branch_t;
+
+
+typedef scenario_event_transition_with_branch_t
+scenario_event_cp_eoc_multi_sta_fsm__disconnected__CC_ASSOC_REQ_t;
+
+typedef scenario_event_transition_with_branch_t
+scenario_event_cp_eoc_multi_sta_fsm__associated__CC_GET_KEY_REQ_t;
+
+typedef scenario_empty_t
+scenario_event_cp_eoc_multi_sta_fsm_handled_event_t;
+
+typedef scenario_empty_t
+scenario_event_cp_eoc_multi_sta_fsm__unassociated__timeout_assoc_t;
+
+
+typedef scenario_empty_t
+scenario_event_cp_eoc_multi_sta_fsm__unassociated__CC_ASSOC_REQ_t;
+
+typedef scenario_empty_t
+scenario_event_cp_eoc_multi_sta_fsm__associated__timeout_auth_t;
+
+typedef scenario_empty_t
+scenario_event_cp_eoc_multi_sta_fsm__associated__cc_leave_t;
+
+typedef scenario_empty_t
+scenario_event_cp_eoc_multi_sta_fsm__authenticated__cc_leave_t;
+
+typedef scenario_empty_t
+scenario_event_cp_eoc_multi_sta_fsm__authenticated__CC_SLEEP_ENTER_REQ_t;
+
+typedef scenario_empty_t
+scenario_event_cp_eoc_multi_sta_fsm__authenticated__lost_connection_t;
+
+typedef scenario_empty_t
+scenario_event_cp_eoc_multi_sta_fsm__sleep_authenticated__lost_connection_t;
+
+typedef scenario_empty_t
+scenario_event_cp_eoc_multi_sta_fsm__sleep_authenticated__CC_SLEEP_EXIT_IND_t;
+
+
+
+
+#endif /* inc_scenario_defs_h */
diff --git a/cesar/cp/eoc/multi_sta/action/test/utest/src/actions.c b/cesar/cp/eoc/multi_sta/action/test/utest/src/actions.c
new file mode 100644
index 0000000000..6438b5e34e
--- /dev/null
+++ b/cesar/cp/eoc/multi_sta/action/test/utest/src/actions.c
@@ -0,0 +1,41 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/actions.c
+ * \brief Scenario actions.
+ * \ingroup test
+ */
+#include "common/std.h"
+#include "lib/scenario/scenario.h"
+#include "cp/inc/context.h"
+#include "cp/eoc/multi_sta_fsm/fsm.h"
+#include "cp/eoc/multi_sta_fsm/inc/events.h"
+#include "cp/inc/context.h"
+
+
+static cp_eoc_multi_sta_fsm_event_t event;
+
+static
+cp_eoc_multi_sta_fsm_event_t *scenario_action_make_event (cp_t *cp,
+scenario_action_param_t *ap)
+{
+
+ cp_eoc_multi_sta_fsm_event_t *e = &event;
+ cp_eoc_multi_sta_fsm_event_new (cp, ap->type, e);
+ return e;
+}
+
+void
+scenario_action_process_cb (scenario_globals_t *globals,
+ scenario_params_t *params)
+{
+ scenario_action_process_t *p = (scenario_action_process_t*)params;
+ cp_eoc_multi_sta_fsm_handled_event (globals->cp, p->sta,
+ scenario_action_make_event(globals->cp, p));
+}
+
diff --git a/cesar/cp/eoc/multi_sta/action/test/utest/src/actions_stub.c b/cesar/cp/eoc/multi_sta/action/test/utest/src/actions_stub.c
new file mode 100644
index 0000000000..b76f3f7754
--- /dev/null
+++ b/cesar/cp/eoc/multi_sta/action/test/utest/src/actions_stub.c
@@ -0,0 +1,81 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/actions_stub.c
+ * \brief Override Multi STA FSM tables.
+ * \ingroup test
+ */
+#include "common/std.h"
+
+#include "lib/scenario/scenario.h"
+
+
+void
+cp_eoc_multi_sta_fsm__unassociated__CC_ASSOC_REQ(cp_t *ctx);
+
+void
+cp_eoc_multi_sta_fsm__unassociated__timeout_assoc(cp_t *ctx);
+
+void
+cp_eoc_multi_sta_fsm__associated__CC_GET_KEY_REQ(cp_t *ctx);
+
+void
+cp_eoc_multi_sta_fsm__associated__timeout_auth(cp_t *ctx);
+
+void
+cp_eoc_multi_sta_fsm__associated__cc_leave(cp_t *ctx);
+
+void
+cp_eoc_multi_sta_fsm__authenticated__cc_leave(cp_t *ctx);
+
+void
+cp_eoc_multi_sta_fsm__authenticated__CC_SLEEP_ENTER_REQ(cp_t *ctx);
+
+void
+cp_eoc_multi_sta_fsm__authenticated__lost_connection(cp_t *ctx);
+
+void
+cp_eoc_multi_sta_fsm__sleep_authenticated__lost_connection(cp_t *ctx);
+
+void
+cp_eoc_multi_sta_fsm__sleep_authenticated__CC_SLEEP_EXIT_IND(cp_t *ctx);
+
+void
+cp_eoc_multi_sta_action__assoc_req(cp_t *ctx,cp_mme_rx_t *mme);
+
+void
+cp_sta_action_vs__started__vs_get_tonemap_req (cp_t *ctx, cp_mme_rx_t *mme_rx);
+
+void
+cp_eoc_multi_sta_action__get_key_req(cp_t *ctx,cp_mme_rx_t *mme);
+
+void
+cp_sta_action_process_cm_sta_cap_req (cp_t *ctx, cp_mme_rx_t *rx_mme)
+{
+}
+
+void
+cp_sta_action_process_cm_nw_info_req (cp_t *ctx, cp_mme_rx_t *rx_mme)
+{
+}
+
+void
+cp_sta_action_process_cm_nw_stats_req (cp_t *ctx, cp_mme_rx_t *rx_mme)
+{
+}
+
+void
+cp_sta_action_process_cm_link_stats_req (cp_t *ctx, cp_mme_rx_t *rx_mme)
+{
+}
+
+
+void
+cp_eoc_cco_action_vs__cco__vs_set_out_lev_ind (cp_t *ctx, cp_mme_peer_t *peer)
+{
+}
diff --git a/cesar/cp/eoc/multi_sta/action/test/utest/src/beacon_stub.c b/cesar/cp/eoc/multi_sta/action/test/utest/src/beacon_stub.c
new file mode 100644
index 0000000000..123dcb9f0b
--- /dev/null
+++ b/cesar/cp/eoc/multi_sta/action/test/utest/src/beacon_stub.c
@@ -0,0 +1,30 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/beacon_stub.c
+ * \brief Beacon stub.
+ * \ingroup test
+ */
+#include "common/std.h"
+
+#include "cp/beacon/beacon.h"
+
+#include "lib/scenario/scenario.h"
+
+
+void
+cp_beacon_deactivate (cp_t *ctx)
+{
+
+}
+
+void
+cp_beacon_poweron_init (cp_t *ctx)
+{
+
+}
diff --git a/cesar/cp/eoc/multi_sta/action/test/utest/src/cl_interf_stub.c b/cesar/cp/eoc/multi_sta/action/test/utest/src/cl_interf_stub.c
new file mode 100644
index 0000000000..910786a8a5
--- /dev/null
+++ b/cesar/cp/eoc/multi_sta/action/test/utest/src/cl_interf_stub.c
@@ -0,0 +1,44 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2012 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/cco/action/test/utest3/src/cl_interf_stub.c
+ * \brief « brief description »
+ * \ingroup cp_eoc_cco_action_test_utest3
+ *
+ * « long description »
+ */
+#include "common/std.h"
+#include "cp/cp.h"
+#include "cp/mme.h"
+
+static u8 buffer[2048];
+
+u8 *
+cp_cl_interf_get_buffer_tx (cp_t *ctx)
+{
+ dbg_assert (ctx);
+ return buffer;
+}
+
+/**
+ * Send a MME over the PWL or the HLE.
+ * \param ctx the module context.
+ * \param mme The MME to send.
+ *
+ */
+void
+cp_cl_interf_mme_send (cp_t *ctx, cp_mme_tx_t * mme)
+{
+ mme->p_mme = NULL;
+}
+
+void
+cp_cl_interf_init (cp_t *ctx)
+{
+ dbg_assert (ctx);
+}
diff --git a/cesar/cp/eoc/multi_sta/action/test/utest/src/cp_eoc_sta_misc_stub.c b/cesar/cp/eoc/multi_sta/action/test/utest/src/cp_eoc_sta_misc_stub.c
new file mode 100644
index 0000000000..0c7a2e5520
--- /dev/null
+++ b/cesar/cp/eoc/multi_sta/action/test/utest/src/cp_eoc_sta_misc_stub.c
@@ -0,0 +1,23 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/cco/action/test/utest/src/cp_eoc_sta_misc_stub.c
+ * \brief STA action, miscellaneous definitions.
+ * \ingroup cp_sta_action
+ */
+ #include "common/std.h"
+ #include "cp/inc/context.h"
+ #include "cp/msg/msg.h"
+
+void
+cp_eoc_sta_mgr_get_ports (cp_t *ctx, uint *numStas, mac_t *stas_macs, bool stas_port_ed[][PORT_NB],
+ u8 stas_port_service[][PORT_NB])
+{
+
+}
+
diff --git a/cesar/cp/eoc/multi_sta/action/test/utest/src/cp_stub.c b/cesar/cp/eoc/multi_sta/action/test/utest/src/cp_stub.c
new file mode 100644
index 0000000000..edf5563e27
--- /dev/null
+++ b/cesar/cp/eoc/multi_sta/action/test/utest/src/cp_stub.c
@@ -0,0 +1,59 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2009 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file eoc/sta/action/test/utest/src/cp_stub.c
+ * \brief cp/cp.c stub
+ * \ingroup test
+ *
+ */
+#include "common/std.h"
+#include "cp/cp.h"
+#include "cp/mme.h"
+#include "cp/inc/context.h"
+#include "cp/msg/inc/cc_assoc.h"
+#include "cp/sta/mgr/inc/sta.h"
+#include "cp/eoc/sta/mgr/sta_mgr.h"
+
+/**
+ * Compute the NID and the NMK from the network password.
+ * \param ctx the CP context.
+ * \param npw the network password.
+ * \param sl the security level of the station.
+ *
+ * This function will generate the NID and the NMK from the NPW and store it
+ * in the station own data.
+ */
+void
+cp_compute_nmk_and_nid_from_npw (cp_t *ctx, const char *npw,
+ cp_security_level_t sl)
+{
+ u64 nid;
+ cp_key_t nmk;
+ uint length;
+
+ dbg_assert (ctx);
+ dbg_assert (npw);
+
+ length = strlen (npw);
+
+ nmk = cp_secu_npw2nmk (ctx, (const u8*) npw, length);
+ nid = cp_secu_nmk2nid (ctx, nmk, sl);
+
+ /* Store the nid and the nmk to the station own data. */
+ cp_sta_own_data_set_nid (ctx, nid);
+ cp_sta_own_data_set_nmk (ctx, nmk,
+ CP_MSG_DRV_STA_SET_KEY_TYPE_CHANGE_NID);
+}
+
+u32
+cp_sta_core_get_date_ms (cp_t *ctx)
+{
+ static uint time=0;
+ time+=2000;
+ return time;
+}
diff --git a/cesar/cp/eoc/multi_sta/action/test/utest/src/cyg_stub.c b/cesar/cp/eoc/multi_sta/action/test/utest/src/cyg_stub.c
new file mode 100644
index 0000000000..f9f9784e0e
--- /dev/null
+++ b/cesar/cp/eoc/multi_sta/action/test/utest/src/cyg_stub.c
@@ -0,0 +1,40 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2012 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/cyg_stub.c
+ * \brief « brief description »
+ * \ingroup « module »
+ *
+ * « long description »
+ */
+#include "common/std.h"
+#include "cp/cp.h"
+#include "bsu/aclf/aclf.h"
+#include <cyg/kernel/kapi.h>
+
+#define BSU_ACLF_BP_CABLE_TCK 2500000
+#define TCK_PER_RTC 250000
+
+u32
+cp_sta_core_tck_per_rtc (cp_t *ctx)
+{
+ return TCK_PER_RTC;
+}
+
+u32
+bsu_aclf_beacon_period_tck (bsu_aclf_t *ctx)
+{
+ return BSU_ACLF_BP_CABLE_TCK;
+}
+
+cyg_tick_count_t
+cyg_current_time (void)
+{
+ /* For tests purpose we can simulate 1000 beacon periods */
+ return (u32)((BSU_ACLF_BP_CABLE_TCK * 1000ull) / TCK_PER_RTC);
+}
diff --git a/cesar/cp/eoc/multi_sta/action/test/utest/src/dataplane_stub.c b/cesar/cp/eoc/multi_sta/action/test/utest/src/dataplane_stub.c
new file mode 100644
index 0000000000..e6cbb08815
--- /dev/null
+++ b/cesar/cp/eoc/multi_sta/action/test/utest/src/dataplane_stub.c
@@ -0,0 +1,32 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/dataplane_stub.c
+ * \brief Data plane layers stub.
+ * \ingroup test
+ */
+#include "common/std.h"
+
+#include "cl/cl_mactotei.h"
+#include "mac/pbproc/pbproc.h"
+#include "cp/inc/context.h"
+#include "mac/sar/inc/context.h"
+
+void
+sar_sta_remove (sar_t *ctx, u8 tei)
+{
+ if (MAC_TEI_IS_STA (tei))
+ {
+ bool ok;
+ ok = mac_store_sta_remove (ctx->mac_store, tei);
+
+ dbg_assert (ok);
+ }
+}
+
+
diff --git a/cesar/cp/eoc/multi_sta/action/test/utest/src/fsm_stub.c b/cesar/cp/eoc/multi_sta/action/test/utest/src/fsm_stub.c
new file mode 100644
index 0000000000..5fb2316451
--- /dev/null
+++ b/cesar/cp/eoc/multi_sta/action/test/utest/src/fsm_stub.c
@@ -0,0 +1,201 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/fsm_stub.c
+ * \brief Override Multi STA FSM tables.
+ * \ingroup test
+ */
+#include "common/std.h"
+
+#include "lib/scenario/scenario.h"
+
+#include "cp/eoc/multi_sta_fsm/fsm.h"
+#include "cp/eoc/multi_sta_fsm/inc/tables.h"
+
+
+void
+cp_eoc_multi_sta_fsm__unassociated__CC_ASSOC_REQ(cp_t *ctx);
+
+void
+cp_eoc_multi_sta_fsm__unassociated__timeout_assoc(cp_t *ctx);
+
+void
+cp_eoc_multi_sta_fsm__associated__timeout_auth(cp_t *ctx);
+
+void
+cp_eoc_multi_sta_fsm__associated__cc_leave(cp_t *ctx);
+
+void
+cp_eoc_multi_sta_fsm__authenticated__cc_leave(cp_t *ctx);
+
+void
+cp_eoc_multi_sta_fsm__authenticated__CC_SLEEP_ENTER_REQ(cp_t *ctx);
+
+void
+cp_eoc_multi_sta_fsm__authenticated__lost_connection(cp_t *ctx);
+
+void
+cp_eoc_multi_sta_fsm__sleep_authenticated__lost_connection(cp_t *ctx);
+
+void
+cp_eoc_multi_sta_fsm__sleep_authenticated__CC_SLEEP_EXIT_IND(cp_t *ctx);
+
+void
+cp_eoc_multi_sta_action__assoc_req(cp_t *ctx,cp_mme_rx_t *mme);
+
+void
+cp_eoc_multi_sta_action__get_key_req(cp_t *ctx,cp_mme_rx_t *mme);
+
+void
+cp_sta_action_vs__started__vs_get_tonemap_req (cp_t *ctx, cp_mme_rx_t *mme_rx);
+
+void
+cp_sta_action_process_cm_sta_cap_req (cp_t *ctx, cp_mme_rx_t *rx_mme);
+
+void
+cp_sta_action_process_cm_nw_info_req (cp_t *ctx, cp_mme_rx_t *rx_mme);
+
+void
+cp_sta_action_vs__started__vs_get_snr_req (cp_t *ctx, cp_mme_rx_t *mme);
+
+void
+cp_sta_action_vs__started__vs_get_ce_stats_req (cp_t *ctx, cp_mme_rx_t *mme);
+
+void
+cp_sta_action_vs__started__vs_get_pb_stats_req (cp_t *ctx, cp_mme_rx_t *mme);
+
+void
+cp_sta_action_vs__started__vs_get_mactotei_req (cp_t *ctx, cp_mme_rx_t *mme);
+
+void
+cp_sta_action_process_cm_sta_cap_req (cp_t *ctx, cp_mme_rx_t *rx_mme)
+{
+}
+
+void
+cp_sta_action_process_cm_nw_info_req (cp_t *ctx, cp_mme_rx_t *rx_mme)
+{
+}
+
+void
+cp_sta_action_process_cm_nw_stats_req (cp_t *ctx, cp_mme_rx_t *rx_mme)
+{
+}
+
+void
+cp_sta_action_process_cm_link_stats_req (cp_t *ctx, cp_mme_rx_t *rx_mme)
+{
+}
+
+void
+cp_sta_action_vs__started__vs_get_stats_req (cp_t *ctx, cp_mme_rx_t *mme)
+{
+}
+
+void
+cp_eoc_multi_sta_action__assoc_req(cp_t *ctx,cp_mme_rx_t *mme)
+{
+ scenario_event (cp_eoc_multi_sta_fsm__disconnected__CC_ASSOC_REQ, param);
+ cp_eoc_multi_sta_fsm_branch_ (ctx, param->branch, param->sta);
+}
+
+
+void
+cp_eoc_multi_sta_action__get_key_req(cp_t *ctx,cp_mme_rx_t *mme)
+{
+ scenario_event (cp_eoc_multi_sta_fsm__associated__CC_GET_KEY_REQ, param);
+ cp_eoc_multi_sta_fsm_branch_ (ctx, param->branch, param->sta);
+}
+
+
+void
+cp_eoc_multi_sta_fsm__unassociated__CC_ASSOC_REQ(cp_t *ctx)
+{
+ scenario_event (cp_eoc_multi_sta_fsm__unassociated__CC_ASSOC_REQ);
+}
+
+void
+cp_eoc_multi_sta_fsm__unassociated__timeout_assoc(cp_t *ctx)
+{
+ scenario_event (cp_eoc_multi_sta_fsm__unassociated__timeout_assoc);
+}
+
+void
+cp_eoc_multi_sta_fsm__associated__CC_GET_KEY_REQ(cp_t *ctx)
+{
+ scenario_event(cp_eoc_multi_sta_fsm__associated__CC_GET_KEY_REQ);
+}
+
+void
+cp_eoc_multi_sta_fsm__associated__timeout_auth(cp_t *ctx)
+{
+ scenario_event(cp_eoc_multi_sta_fsm__associated__timeout_auth);
+}
+
+void
+cp_eoc_multi_sta_fsm__associated__cc_leave(cp_t *ctx)
+{
+ scenario_event(cp_eoc_multi_sta_fsm__associated__cc_leave);
+}
+
+void
+cp_eoc_multi_sta_fsm__authenticated__cc_leave(cp_t *ctx)
+{
+ scenario_event(cp_eoc_multi_sta_fsm__authenticated__cc_leave);
+}
+
+void
+cp_eoc_multi_sta_fsm__authenticated__CC_SLEEP_ENTER_REQ(cp_t *ctx)
+{
+ scenario_event(cp_eoc_multi_sta_fsm__authenticated__CC_SLEEP_ENTER_REQ);
+}
+
+void
+cp_eoc_multi_sta_fsm__authenticated__lost_connection(cp_t *ctx)
+{
+ scenario_event(cp_eoc_multi_sta_fsm__authenticated__lost_connection);
+}
+
+void
+cp_eoc_multi_sta_fsm__sleep_authenticated__lost_connection(cp_t *ctx)
+{
+ scenario_event(cp_eoc_multi_sta_fsm__sleep_authenticated__lost_connection);
+}
+
+
+void
+cp_eoc_multi_sta_fsm__sleep_authenticated__CC_SLEEP_EXIT_IND(cp_t *ctx)
+{
+ scenario_event
+ (cp_eoc_multi_sta_fsm__sleep_authenticated__CC_SLEEP_EXIT_IND);
+}
+
+void
+cp_sta_action_vs__started__vs_get_tonemap_req (cp_t *ctx, cp_mme_rx_t *mme_rx)
+{
+}
+
+void
+cp_sta_action_vs__started__vs_get_snr_req (cp_t *ctx, cp_mme_rx_t *mme)
+{
+}
+
+void
+cp_sta_action_vs__started__vs_get_ce_stats_req (cp_t *ctx, cp_mme_rx_t *mme)
+{
+}
+
+void
+cp_sta_action_vs__started__vs_get_pb_stats_req (cp_t *ctx, cp_mme_rx_t *mme)
+{
+}
+
+void
+cp_sta_action_vs__started__vs_get_mactotei_req (cp_t *ctx, cp_mme_rx_t *mme)
+{
+}
diff --git a/cesar/cp/eoc/multi_sta/action/test/utest/src/hal_phy_stub.c b/cesar/cp/eoc/multi_sta/action/test/utest/src/hal_phy_stub.c
new file mode 100644
index 0000000000..5e8eb8cc99
--- /dev/null
+++ b/cesar/cp/eoc/multi_sta/action/test/utest/src/hal_phy_stub.c
@@ -0,0 +1,26 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2012 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/hal_phy_stub.c
+ * \brief « brief description »
+ * \ingroup « module »
+ *
+ * « long description »
+ */
+#include "common/std.h"
+#include "hal/phy/forward.h"
+
+void
+phy_tx_scale_adapt_exp_set (phy_t *ctx, u8 exp)
+{
+}
+
+void
+phy_tx_scale_adapt_set (phy_t *ctx, u16 value)
+{
+}
diff --git a/cesar/cp/eoc/multi_sta/action/test/utest/src/mgr_stub.c b/cesar/cp/eoc/multi_sta/action/test/utest/src/mgr_stub.c
new file mode 100644
index 0000000000..d6fe512dce
--- /dev/null
+++ b/cesar/cp/eoc/multi_sta/action/test/utest/src/mgr_stub.c
@@ -0,0 +1,63 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2009 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file eoc/sta/action/test/utest/src/msg_stub.c
+ * \brief cp/sta/mgr/sta_mgr stub
+ * \ingroup test
+ *
+ */
+#include "common/std.h"
+#include "cp/cp.h"
+#include "cp/mme.h"
+#include "cp/inc/context.h"
+#include "cp/msg/inc/cc_assoc.h"
+
+bool
+cp_msg_cc_assoc_cnf_receive (cp_t *ctx, cp_mme_rx_t *mme,
+ cp_msg_cc_assoc_cnf_t *data)
+{
+ dbg_assert (ctx);
+ return true;
+}
+
+void
+cp_msg_cc_assoc_cnf_send (cp_t *ctx, cp_mme_peer_t *peer,
+ const cp_msg_cc_assoc_cnf_t *data)
+{
+ dbg_assert (ctx);
+ dbg_assert (peer);
+ dbg_assert (data);
+}
+
+void
+cp_cco_action_tei_release (cp_t *ctx, u8 tei)
+{
+ dbg_assert (ctx);
+ dbg_assert (tei);
+}
+
+u32
+cp_sta_core_get_date_ms (cp_t *ctx)
+{
+ return 0;
+}
+
+void
+cp_sta_core_checkpoint (cp_t *ctx)
+{
+}
+
+void
+sar_activate (sar_t *ctx, bool activate)
+{
+}
+
+void
+pbproc_activate (pbproc_t *ctx, bool flag)
+{
+}
diff --git a/cesar/cp/eoc/multi_sta/action/test/utest/src/test_actions.c b/cesar/cp/eoc/multi_sta/action/test/utest/src/test_actions.c
new file mode 100644
index 0000000000..82c39ceb0c
--- /dev/null
+++ b/cesar/cp/eoc/multi_sta/action/test/utest/src/test_actions.c
@@ -0,0 +1,284 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/test_actions.c
+ * \brief Test multi_sta module.
+ * \ingroup test
+ */
+
+#include "stdio.h"
+#include "common/std.h"
+#include "lib/blk.h"
+#include "lib/test.h"
+#include "cp/eoc/multi_sta/action/multi_sta_action.h"
+#include "cp/eoc/multi_sta_fsm/fsm.h"
+#include "cp/inc/context.h"
+#include "cp/inc/trace.h"
+#include "cp/sta/core/core.h"
+#include "cp/sta/mgr/inc/sta.h"
+#include "cp/msg/msg.h"
+#include "lib/test.h"
+#include "lib/utils.h"
+#include "lib/swap.h"
+#include "lib/slab.h"
+#include "cl/cl.h"
+#include "cl/inc/context.h"
+#include "mac/sar/inc/context.h"
+
+cp_t *
+test_cp_init (void)
+{
+ static cp_t cp;
+ static mac_config_t mac_config;
+ static sar_t sar;
+ static cl_t cl;
+
+ memset (&cp, 0, sizeof (cp));
+ memset (&mac_config, 0, sizeof (mac_config));
+ memset (&sar, 0, sizeof (sar));
+ memset (&cl, 0, sizeof (cl));
+
+ cl.mactotei = NULL;
+ cp.sar = &sar;
+ cp.cl = (cl_t *) &cl;
+ cp.mac_config = &mac_config;
+ cp.mac_store = mac_store_init ();
+ sar.mac_store = cp.mac_store;
+
+ cp_eoc_sta_mgr_init (&cp);
+ cp_msg_init (&cp);
+ cp_sta_own_data_init (&cp);
+ cp_cl_interf_init (&cp);
+ lib_rnd_init (&cp.rnd, 1234);
+ cp_trace_init (&cp);
+
+ return &cp;
+}
+
+void
+test_cp_uninit (cp_t *ctx)
+{
+ cp_sta_mgr_uninit (ctx);
+ cp_eoc_cco_action_uninit (ctx);
+ cp_beacon_uninit (ctx);
+#if CONFIG_TRACE
+ trace_buffer_dbg_dump (ctx->trace);
+#endif /* CONFIG_TRACE */
+ cp_trace_uninit (ctx);
+}
+
+void
+cp_eoc_cco_action_test_release_mac_store (cp_t *ctx)
+{
+ uint tei, i;
+ for (tei = MAC_TEI_STA_MIN_EOC; tei < MAC_TEI_STA_MAX; tei++)
+ {
+ mfs_t *mfs;
+ for (i = 0; i < MAC_CAP_NB; i++)
+ {
+ mfs = mac_store_mfs_get (ctx->mac_store, true, false, false,
+ MAC_LLID_MIN + i, tei);
+ if (mfs)
+ {
+ mac_store_mfs_remove (ctx->mac_store, mfs);
+ blk_release (mfs);
+ }
+ }
+ mfs = mac_store_mfs_get (ctx->mac_store, true, false, true,
+ MAC_LID_NONE, tei);
+ if (mfs)
+ {
+ mac_store_mfs_remove (ctx->mac_store, mfs);
+ blk_release (mfs);
+ }
+ }
+}
+
+void
+test_case_sta_assoc_procedure (test_t test)
+{
+ cp_sta_t *sta;
+
+ u8 buffer[1024];
+ uint req_type = CP_MSG_CC_ASSOC_REQ_TYPE_NEW;
+ cp_tei_t tei = 5;
+ cp_net_t *net;
+ cp_nid_t nid = 12;
+ cp_snid_t snid = 34;
+ uint cco_cap = 2;
+ uint pco_cap = true;
+ cp_mme_rx_t mme_rx;
+ bitstream_t bitstream;
+
+ cp_t *ctx = test_cp_init();
+
+ net = cp_sta_mgr_add_avln (ctx, 1, 1);
+ cp_sta_mgr_set_our_avln (ctx, net);
+
+ ctx->sta_mgr.our_avln->snid = snid;
+ ctx->sta_mgr.our_avln->nid = nid;
+
+ test_case_begin (test, "Receiving CC_ASSOC.REQ");
+
+ test_begin (test, "Test 1: Receiving a CC_ASSOC.REQ join")
+ {
+ /* Construct the MME to associate the first station. */
+ mme_rx.peer.mac = 2;
+ mme_rx.peer.eth_type = HPAV_MTYPE_MME;
+ mme_rx.peer.vlan_tci = 0x0;
+ mme_rx.peer.tei = 0;
+
+ DBG_PRINT ("Receiving a CC_ASSOC.REQ join ENTERED");
+
+ /* Write the request. */
+ bitstream_init (&mme_rx.bitstream, buffer, sizeof(buffer),
+ BITSTREAM_READ);
+ bitstream_init (&bitstream, buffer, sizeof (buffer), BITSTREAM_WRITE);
+ bitstream_access (&bitstream, &req_type, 8);
+ bitstream_access (&bitstream, &nid, 56);
+ bitstream_access (&bitstream, &cco_cap, 8);
+ bitstream_access (&bitstream, &pco_cap, 8);
+ bitstream_finalise (&bitstream);
+
+ /* Initialise the MME Rx object. */
+ mme_rx.p_mme = buffer;
+ mme_rx.length = 60;
+
+ sta = cp_sta_mgr_sta_add (ctx, net, tei, mme_rx.peer.mac);
+ dbg_assert (sta);
+ slab_release (sta);
+ cp_eoc_multi_sta_action__assoc_req (ctx, &mme_rx);
+
+ sta = cp_sta_mgr_sta_get_from_mac (ctx, mme_rx.peer.mac);
+ dbg_assert (sta);
+ slab_release (sta);
+
+ test_fail_unless (sta->fsm.state
+ == CP_EOC_MULTI_STA_FSM_STATE_associated);
+
+ cp_eoc_multi_sta_fsm_uninit (ctx, sta);
+ cp_eoc_cco_action_test_release_mac_store (ctx);
+ cp_sta_mgr_sta_remove (ctx, sta);
+ }
+ test_end;
+
+ test_cp_uninit (ctx);
+}
+
+
+
+void
+test_case_sta_authentication (test_t test)
+{
+ test_case_begin (test, "Authentication status.");
+
+ cp_net_t *net;
+ bitstream_t bitstream;
+ cp_mme_rx_t mme;
+ u64 data;
+ u8 buffer[1024];
+ cp_sta_t *sta;
+
+ cp_t * ctx = test_cp_init ();
+ memset (&mme, 0, sizeof (cp_mme_rx_t));
+
+ /* Update the net NID and SNID. */
+ cp_sta_own_data_set_nid (ctx, 0x1);
+ cp_sta_own_data_set_snid (ctx, 0x2);
+
+ net = cp_sta_mgr_add_avln (ctx, 2, 1);
+ cp_sta_mgr_set_our_avln (ctx, net);
+ cp_sta_own_data_set_tei (ctx, 1);
+ cp_sta_own_data_set_cco_status (ctx, true);
+
+ sta = cp_sta_mgr_sta_add (ctx, net, 2, 2);
+ dbg_assert (sta);
+ slab_release (sta);
+ cp_sta_set_assoc_confirmed (ctx, sta, false);
+ cp_eoc_multi_sta_fsm_init (ctx,sta);
+ sta->fsm.state = CP_EOC_MULTI_STA_FSM_STATE_associated;
+
+
+ test_case_begin (test, "Sta authentication procedure");
+
+ test_begin (test, "assoc")
+ {
+ bitstream_init (&mme.bitstream, buffer, sizeof(buffer),
+ BITSTREAM_READ);
+ /* Build the MME. */
+ bitstream_init (&bitstream, buffer, sizeof(buffer), BITSTREAM_WRITE);
+
+ /* relayed. */
+ data = 0;
+ bitstream_access (&bitstream, &data, 8);
+ /* Request key type. */
+ data = CP_MSG_KEY_TEK;
+ bitstream_access (&bitstream, &data, 8);
+ /* NID. */
+ data = cp_net_get_nid (ctx, net);
+ bitstream_access (&bitstream, &data, 56);
+ /* Nonce. */
+ data = 0xc;
+ bitstream_access (&bitstream, &data, 32);
+ /* PID. */
+ data = 0;
+ bitstream_access (&bitstream, &data, 8);
+ /* prn. */
+ data = 0xA;
+ bitstream_access (&bitstream, &data, 16);
+ /* Pmn. */
+ data = 1;
+ bitstream_access (&bitstream, &data, 8);
+ bitstream_finalise (&bitstream);
+
+ mme.length = 0;
+ mme.peer.tei = 0x2;
+ mme.peer.mac = 2;
+ cp_secu_protocol_run_new (&mme.prun, 0, &ctx->rnd);
+
+ cp_eoc_multi_sta_action__get_key_req (ctx, &mme);
+ sta = cp_sta_mgr_sta_get_from_mac(ctx, mme.peer.mac);
+ test_fail_unless (sta->fsm.state
+ == CP_EOC_MULTI_STA_FSM_STATE_authenticated);
+
+ slab_release (sta);
+ cp_sta_mgr_sta_remove (ctx, sta);
+ }
+ test_end;
+
+ test_cp_uninit (ctx);
+}
+
+
+void
+test_action_test_suite (test_t t)
+{
+ test_suite_begin (t, "multi_sta fsm");
+ test_case_sta_assoc_procedure (t);
+ test_case_sta_authentication(t);
+}
+
+int
+main (int argc, char **argv)
+{
+ test_t t;
+ lib_stats_init();
+ trace_init ();
+ test_init (t, argc, argv);
+ test_action_test_suite (t);
+ trace_uninit ();
+ lib_stats_uninit();
+ test_case_begin (t, "Memory allocation");
+ test_begin (t, "memory leaks")
+ {
+ test_fail_if (blk_check_memory () != true, "Memory leaks");
+ }
+ test_end;
+ test_result (t);
+ return test_nb_failed (t) == 0 ? 0 : 1;
+}
diff --git a/cesar/cp/eoc/multi_sta/action/test/utest/src/test_fsm.c b/cesar/cp/eoc/multi_sta/action/test/utest/src/test_fsm.c
new file mode 100644
index 0000000000..befe1715a7
--- /dev/null
+++ b/cesar/cp/eoc/multi_sta/action/test/utest/src/test_fsm.c
@@ -0,0 +1,125 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/test_fsm.c
+ * \brief Test multi_sta module.
+ * \ingroup test
+ */
+
+#include "stdio.h"
+#include "common/std.h"
+#include "lib/blk.h"
+#include "lib/test.h"
+#include "lib/scenario/scenario.h"
+#include "cp/eoc/multi_sta_fsm/fsm.h"
+#include "cp/inc/context.h"
+#include "cp/sta/core/core.h"
+#include "cp/msg/msg.h"
+#include "lib/test.h"
+#include "lib/utils.h"
+#include "lib/swap.h"
+#include "lib/slab.h"
+
+
+void
+test_fsm_basic_test_case (test_t t)
+{
+ test_case_begin (t, "basic");
+ cp_t cp;
+ cp_sta_t sta;
+ cp.sta_core_urgent_flag = false;
+ cp_trace_init (&cp);
+
+ test_begin (t, "Disconnected-Authenticated")
+ {
+ cp_eoc_multi_sta_fsm_init (&cp, &sta);
+ cp.sta_core_flag = false;
+ scenario_entry_t entries[] = {
+ /* Disconnected */
+ SCENARIO_ACTION (process,
+ .type = CP_EOC_MULTI_STA_FSM_EVENT_TYPE_CC_ASSOC_REQ,
+ .sta = &sta),
+
+ SCENARIO_EVENT (cp_eoc_multi_sta_fsm__disconnected__CC_ASSOC_REQ,
+ .sta = &sta,
+ .branch =
+ CP_EOC_MULTI_STA_FSM_BRANCH(disconnected, CC_ASSOC_REQ, sta_in_wl)), //state, event, branch
+
+
+
+
+ SCENARIO_ACTION (process,
+ .type = CP_EOC_MULTI_STA_FSM_EVENT_TYPE_CC_GET_KEY_REQ,
+ .sta = &sta),
+
+ SCENARIO_EVENT (cp_eoc_multi_sta_fsm__associated__CC_GET_KEY_REQ,
+ .sta = &sta,
+ .branch =
+ CP_EOC_MULTI_STA_FSM_BRANCH(associated, CC_GET_KEY_REQ, all_keys_granted)),
+
+ SCENARIO_END
+ };
+
+
+ scenario_globals_t globals = {
+ .cp = &cp,
+ };
+ scenario_run (t, entries, &globals);
+
+ test_fail_unless (sta.fsm.state == CP_EOC_MULTI_STA_FSM_STATE_authenticated);
+
+ cp_eoc_multi_sta_fsm_uninit (&cp, &sta);
+ } test_end;
+
+
+
+#if CONFIG_TRACE
+ trace_buffer_dbg_dump (&cp.trace);
+#endif /* CONFIG_TRACE */
+ cp_trace_uninit (&cp);
+}
+
+void
+test_fsm_test_suite (test_t t)
+{
+ test_suite_begin (t, "multi_sta fsm");
+ test_fsm_basic_test_case (t);
+}
+
+void
+cp_sta_core_signal_fsm_event (cp_t *ctx)
+{
+ dbg_assert (ctx);
+ ctx->sta_core_flag = true;
+}
+
+void
+cp_sta_core_signal_fsm_urgent_event (cp_t *ctx)
+{
+ dbg_assert (ctx);
+ ctx->sta_core_urgent_flag = true;
+}
+
+int
+main (int argc, char **argv)
+{
+ test_t t;
+ trace_init ();
+ test_init (t, argc, argv);
+ test_fsm_test_suite (t);
+ trace_uninit ();
+ test_case_begin (t, "Memory allocation");
+ test_begin (t, "memory leaks")
+ {
+ test_fail_if (blk_check_memory () != true, "Memory leaks");
+ }
+ test_end;
+ test_result (t);
+ return test_nb_failed (t) == 0 ? 0 : 1;
+}
+
diff --git a/cesar/cp/eoc/multi_sta_fsm/Config b/cesar/cp/eoc/multi_sta_fsm/Config
new file mode 100644
index 0000000000..d84f18d9da
--- /dev/null
+++ b/cesar/cp/eoc/multi_sta_fsm/Config
@@ -0,0 +1 @@
+CONFIG_CP_EOC_MULTI_STA_FSM_DEF = "cp/eoc/multi_sta_fsm/src/fsm/multi_sta.fsm"
diff --git a/cesar/cp/eoc/multi_sta_fsm/Module b/cesar/cp/eoc/multi_sta_fsm/Module
new file mode 100644
index 0000000000..138c989aa7
--- /dev/null
+++ b/cesar/cp/eoc/multi_sta_fsm/Module
@@ -0,0 +1,40 @@
+SOURCES := tables.c fsm.c events.c
+
+ifndef $(MODULE_VAR)_ONCE
+$(MODULE_VAR)_ONCE := 1$(CONFIG_CP_EOC_MULTI_STA_FSM_DEF)
+
+cp_eoc_multi_sta_fsm_defs_h = $(OBJ_DIR)/inc/cp_eoc_multi_sta_fsm_defs.h
+cp_eoc_multi_sta_fsm_tables_h = $(OBJ_DIR)/inc/cp_eoc_multi_sta_fsm_tables.h
+CLEAN_FILES += $(cp_eoc_multi_sta_fsm_defs_h) $(cp_eoc_multi_sta_fsm_tables_h)
+
+COMPILE_DEPS += $(cp_eoc_multi_sta_fsm_defs_h)
+
+vpath %.fsm $(BASE)
+vpath %.conf $(BASE)
+vpath %_defs.h $(BASE)
+vpath %_tables.h $(BASE)
+
+cp_eoc_multi_sta_fsm_deps = $(CONFIG_CP_EOC_MULTI_STA_FSM_DEF:"%"=%) \
+ $(call src2src,multi_sta.conf template_defs.h \
+ template_tables.h,cp/eoc/multi_sta_fsm/src/fsm)
+
+$(cp_eoc_multi_sta_fsm_defs_h) $(cp_eoc_multi_sta_fsm_tables_h): $(cp_eoc_multi_sta_fsm_deps) $(DFAGEN) \
+ $(OBJ_INC_DIR_STAMP)
+ python $(DFAGEN) -O $(OBJ_INC_DIR) \
+ -o c -d $< -c $(filter %.conf,$^) -p cp_eoc_multi_sta_fsm
+
+CLEAN_FILES += $(OBJ_DIR)/cp_eoc_multi_sta_fsm.png $(OBJ_DIR)/cp_eoc_multi_sta_fsm.dot
+
+$(OBJ_DIR)/cp_eoc_multi_sta_fsm.png: $(OBJ_DIR)/cp_eoc_multi_sta_fsm.dot
+ dot -Tpng -o $@ $<
+
+$(OBJ_DIR)/cp_eoc_multi_sta_fsm.dot: $(cp_eoc_multi_sta_fsm_deps)
+ python $(DFAGEN) -O $(OBJ_DIR) \
+ -o dot -d $< -p cp_eoc_multi_sta_fsm
+else
+# This module rules depend on a configuration item, it need work to be used in
+# several build type.
+ifneq ($($(MODULE_VAR)_ONCE),1$(CONFIG_CP_EOC_MULTI_STA_FSM_DEF))
+$(error Module not safe for multiple build types)
+endif
+endif
diff --git a/cesar/cp/eoc/multi_sta_fsm/doc/cp_eoc_multi_sta_fsm.odt b/cesar/cp/eoc/multi_sta_fsm/doc/cp_eoc_multi_sta_fsm.odt
new file mode 100644
index 0000000000..aba756d326
--- /dev/null
+++ b/cesar/cp/eoc/multi_sta_fsm/doc/cp_eoc_multi_sta_fsm.odt
Binary files differ
diff --git a/cesar/cp/eoc/multi_sta_fsm/forward.h b/cesar/cp/eoc/multi_sta_fsm/forward.h
new file mode 100644
index 0000000000..473fe853d2
--- /dev/null
+++ b/cesar/cp/eoc/multi_sta_fsm/forward.h
@@ -0,0 +1,19 @@
+#ifndef cp_eoc_multi_sta_fsm_forward_h
+#define cp_eoc_multi_sta_fsm_forward_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/multi_sta_fsm/forward.h
+ * \brief Control plane Multi STA FSM forward declarations.
+ * \ingroup cp_eoc_multistafsm
+ */
+
+/* Forward declaration. */
+typedef struct cp_eoc_multi_sta_fsm_event_t cp_eoc_multi_sta_fsm_event_t;
+
+#endif /* cp_eoc_multi_sta_fsm_forward_h */
diff --git a/cesar/cp/eoc/multi_sta_fsm/fsm.h b/cesar/cp/eoc/multi_sta_fsm/fsm.h
new file mode 100644
index 0000000000..e7e926f48b
--- /dev/null
+++ b/cesar/cp/eoc/multi_sta_fsm/fsm.h
@@ -0,0 +1,68 @@
+#ifndef cp_eoc_multi_sta_fsm_h
+#define cp_eoc_multi_sta_fsm_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/multi_sta_fsm/multi_sta_fsm.h
+ * \brief Control plane Multi STA FSM
+ * \ingroup cp_eoc_multistafsm
+ *
+ */
+#include "cp/cp.h"
+#include "forward.h"
+
+#include "inc/events.h"
+#include "cp/sta/mgr/sta.h"
+#include "cp/eoc/inc/trace.h"
+
+BEGIN_DECLS
+
+/**
+ * Initialise the Multi STA FSM
+ * \param ctx control plane context
+ */
+void
+cp_eoc_multi_sta_fsm_init (cp_t *ctx, cp_sta_t* sta);
+
+/**
+ * Uninitialise the Multi STA FSM
+ * \param ctx control plane context
+ */
+void
+cp_eoc_multi_sta_fsm_uninit (cp_t *ctx, cp_sta_t* sta);
+
+/**
+ * Process one event
+ * \param ctx control plane context
+ * \param sta active station
+ * \param event event to process
+ */
+void
+cp_eoc_multi_sta_fsm_handled_event (cp_t *ctx, cp_sta_t *sta,
+ cp_eoc_multi_sta_fsm_event_t *e);
+
+
+
+/**
+ * Select a branch during a transition.
+ * \param ctx control plane context
+ * \param branch branch to select
+ * \param sta active station
+ *
+ * The selected branch must correspond to the current handled transition.
+ */
+void
+cp_eoc_multi_sta_fsm_branch_ (cp_t *ctx, cp_eoc_multi_sta_fsm_branch_t branch,
+cp_sta_t *sta);
+#define cp_eoc_multi_sta_fsm_branch(ctx, state, event, branch, sta) \
+ cp_eoc_multi_sta_fsm_branch_ \
+ ((ctx), CP_EOC_MULTI_STA_FSM_BRANCH (state, event,branch), (sta))
+
+END_DECLS
+
+#endif /* cp_eoc_multi_sta_fsm_h */
diff --git a/cesar/cp/eoc/multi_sta_fsm/inc/context.h b/cesar/cp/eoc/multi_sta_fsm/inc/context.h
new file mode 100644
index 0000000000..aa771ca943
--- /dev/null
+++ b/cesar/cp/eoc/multi_sta_fsm/inc/context.h
@@ -0,0 +1,33 @@
+#ifndef cp_eoc_multi_sta_fsm_inc_context_h
+#define cp_eoc_multi_sta_fsm_inc_context_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/multi_sta_fsm/inc/context.h
+ * \brief Multi STA FSM private context.
+ * \ingroup cp_eoc_multistafsm
+ */
+
+#include "lib/slab.h"
+
+#include "cp/eoc/multi_sta_fsm/forward.h" // for 'cp_eoc_multi_sta_fsm_event_t'
+#include "cp_eoc_multi_sta_fsm_defs.h" // for 'cp_eoc_multi_sta_fsm_state_t'
+
+/** Multi STA FSM context. */
+struct cp_eoc_multi_sta_fsm_t
+{
+ /** current state */
+ cp_eoc_multi_sta_fsm_state_t state;
+
+ /** event currently handled*/
+ cp_eoc_multi_sta_fsm_event_t *handled_event;
+};
+
+typedef struct cp_eoc_multi_sta_fsm_t cp_eoc_multi_sta_fsm_t;
+
+#endif /* cp_eoc_multi_sta_fsm_inc_context_h */
diff --git a/cesar/cp/eoc/multi_sta_fsm/inc/events.h b/cesar/cp/eoc/multi_sta_fsm/inc/events.h
new file mode 100644
index 0000000000..d5d681b373
--- /dev/null
+++ b/cesar/cp/eoc/multi_sta_fsm/inc/events.h
@@ -0,0 +1,75 @@
+#ifndef cp_eoc_multi_sta_fsm_inc_events_h
+#define cp_eoc_multi_sta_fsm_inc_events_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/multi_sta_fsm/inc/events.h
+ * \brief MUlti STA FSM events
+ * \ingroup cp_eoc_multistafsm
+ */
+
+/* This is a auto-generated file, check your Makefile if it is not found. */
+#include "cp_eoc_multi_sta_fsm_defs.h"
+#include "cp/sta/mgr/sta.h"
+#include "cp/sta/mgr/net.h"
+#include "cp/eoc/multi_sta_fsm/forward.h"
+
+/**
+ * Call the transition associated with an event.
+ * \param ctx control plane context
+ * \param sta station
+ * \param event handled event
+ * \param transition transition function to call
+ */
+typedef void (*cp_eoc_multi_sta_fsm_handler_t) (cp_t *ctx, cp_sta_t *sta,
+ cp_eoc_multi_sta_fsm_event_t *event,
+ cp_eoc_multi_sta_fsm_transition_t transition);
+
+
+void
+cp_eoc_multi_sta_fsm_event_handler (cp_t *ctx, cp_sta_t *sta,
+ cp_eoc_multi_sta_fsm_event_t *event,
+ cp_eoc_multi_sta_fsm_transition_t transition);
+
+
+/** Event base structure. */
+struct cp_eoc_multi_sta_fsm_event_t
+{
+ /** Event type. */
+ cp_eoc_multi_sta_fsm_event_type_t type;
+ /** Handle transition callback. */
+ cp_eoc_multi_sta_fsm_handler_t handler;
+};
+
+struct cp_eoc_multi_sta_fsm_event_mme_t
+{
+ /** Parent event. */
+ cp_eoc_multi_sta_fsm_event_t event;
+ /** Associated MME. */
+ cp_mme_rx_t *mme;
+};
+typedef struct cp_eoc_multi_sta_fsm_event_mme_t
+cp_eoc_multi_sta_fsm_event_mme_t;
+/* Forward declaration in cp/eoc/multi_sta_fsm/forward.h. */
+
+BEGIN_DECLS
+
+void
+cp_eoc_multi_sta_fsm_event_new (cp_t *ctx,
+ cp_eoc_multi_sta_fsm_event_type_t type,
+ cp_eoc_multi_sta_fsm_event_t *event);
+
+
+
+cp_eoc_multi_sta_fsm_event_t *
+cp_eoc_multi_sta_fsm_event_mme_new (cp_t *ctx, cp_eoc_multi_sta_fsm_event_type_t
+type, cp_mme_rx_t *mme);
+
+END_DECLS
+
+#endif /* cp_eoc_multi_sta_fsm_inc_events_h */
diff --git a/cesar/cp/eoc/multi_sta_fsm/inc/tables.h b/cesar/cp/eoc/multi_sta_fsm/inc/tables.h
new file mode 100644
index 0000000000..c806841c21
--- /dev/null
+++ b/cesar/cp/eoc/multi_sta_fsm/inc/tables.h
@@ -0,0 +1,52 @@
+#ifndef cp_eoc_multi_sta_fsm_inc_tables_h
+#define cp_eoc_multi_sta_fsm_inc_tables_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/multi_sta_fsm/inc/tables.h
+ * \brief Multi STA FSM tables declaration
+ * \ingroup cp_eoc_multistafsm
+ */
+
+#include "config/trace.h"
+
+/** Control Plane Multi STA FSM transition table. */
+extern const cp_eoc_multi_sta_fsm_transition_t
+ cp_eoc_multi_sta_fsm_transition_table
+ [CP_EOC_MULTI_STA_FSM_STATE_NB][CP_EOC_MULTI_STA_FSM_EVENT_TYPE_NB];
+
+/** Control Plane Multi STA FSM only branch table. */
+extern const cp_eoc_multi_sta_fsm_state_t
+ cp_eoc_multi_sta_fsm_only_branch_table
+ [CP_EOC_MULTI_STA_FSM_STATE_NB][CP_EOC_MULTI_STA_FSM_EVENT_TYPE_NB];
+
+/* Control Plane Multi STA FSM state enter table. */
+const cp_eoc_multi_sta_fsm_enter_leave_t
+cp_eoc_multi_sta_fsm_enter_table[CP_EOC_MULTI_STA_FSM_STATE_NB] ;
+
+/* Control Plane Multi STA FSM state leave table. */
+const cp_eoc_multi_sta_fsm_enter_leave_t
+cp_eoc_multi_sta_fsm_leave_table[CP_EOC_MULTI_STA_FSM_STATE_NB];
+
+/* Control Plane Multi STA FSM initial states table. */
+const cp_eoc_multi_sta_fsm_state_t
+cp_eoc_multi_sta_fsm_initials_table[CP_EOC_MULTI_STA_FSM_INITIAL_NB];
+
+#if CONFIG_TRACE
+
+/* Control Plane Multi STA FSM state names table. */
+extern const char *
+cp_eoc_multi_sta_fsm_state_names_table[CP_EOC_MULTI_STA_FSM_STATE_NB];
+
+/* Control Plane Multi STA event names table. */
+const char *
+cp_eoc_multi_sta_fsm_event_names_table[CP_EOC_MULTI_STA_FSM_EVENT_TYPE_NB];
+
+#endif /* CONFIG_TRACE */
+
+#endif /* cp_eoc_multi_sta_fsm_inc_tables_h */
diff --git a/cesar/cp/eoc/multi_sta_fsm/src/events.c b/cesar/cp/eoc/multi_sta_fsm/src/events.c
new file mode 100644
index 0000000000..e2e31e4f19
--- /dev/null
+++ b/cesar/cp/eoc/multi_sta_fsm/src/events.c
@@ -0,0 +1,71 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/multi_sta_fsm/src/events.c
+ * \brief Multi STA FSM events.
+ * \ingroup cp_eoc_multistafsm
+ */
+#include "common/std.h"
+
+#include "cp/inc/context.h"
+#include "fsm.h"
+#include "inc/tables.h"
+
+
+typedef void (*cp_eoc_multi_sta_fsm_event_transition_t) (cp_t *ctx,
+ cp_mme_rx_t *mme);
+
+void
+cp_eoc_multi_sta_fsm_event_handler (cp_t *ctx, cp_sta_t *sta,
+ cp_eoc_multi_sta_fsm_event_t *event,
+ cp_eoc_multi_sta_fsm_transition_t transition)
+{
+ dbg_assert_ptr (ctx);
+ dbg_assert_ptr (event);
+ dbg_assert (transition);
+ dbg_assert_ptr (sta);
+ cp_eoc_multi_sta_fsm_event_transition_t t = transition;
+
+ cp_eoc_multi_sta_fsm_event_mme_t *event_mme =
+ PARENT_OF (cp_eoc_multi_sta_fsm_event_mme_t, event, event);
+ /* Call transition. */
+ t (ctx, event_mme->mme);
+}
+
+void
+cp_eoc_multi_sta_fsm_event_new (cp_t *ctx,
+ cp_eoc_multi_sta_fsm_event_type_t type,
+ cp_eoc_multi_sta_fsm_event_t *event)
+{
+ dbg_assert_ptr (ctx);
+ dbg_assert (type < CP_EOC_MULTI_STA_FSM_EVENT_TYPE_NB);
+ dbg_assert_ptr (event);
+ event->type = type;
+ event->handler = cp_eoc_multi_sta_fsm_event_handler;
+ return;
+}
+
+
+
+
+cp_eoc_multi_sta_fsm_event_t *
+cp_eoc_multi_sta_fsm_event_mme_new (cp_t *ctx, cp_eoc_multi_sta_fsm_event_type_t
+type, cp_mme_rx_t *mme)
+{
+ dbg_assert (ctx);
+ dbg_assert (type < CP_EOC_MULTI_STA_FSM_EVENT_TYPE_NB);
+ cp_eoc_multi_sta_fsm_event_mme_t *e;
+ e = slab_alloc (&ctx->fsm.event_mme_cache);
+ e->event.type = type;
+ e->event.handler = cp_eoc_multi_sta_fsm_event_handler;
+// slab_addref (mme);
+ e->mme = mme;
+ return &e->event;
+}
+
+
diff --git a/cesar/cp/eoc/multi_sta_fsm/src/fsm.c b/cesar/cp/eoc/multi_sta_fsm/src/fsm.c
new file mode 100644
index 0000000000..63305bf607
--- /dev/null
+++ b/cesar/cp/eoc/multi_sta_fsm/src/fsm.c
@@ -0,0 +1,158 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/multi_sta_fsm/src/fsm.c
+ * \brief FSM slave station engine.
+ * \ingroup cp_eoc_multistafsm
+ */
+#include "common/std.h"
+#include "cp/inc/context.h"
+#include "fsm.h"
+#include "inc/tables.h"
+#include "cp/sta/core/core.h"
+#include "cp/sta/mgr/sta.h"
+#include "stdio.h"
+
+void
+cp_eoc_multi_sta_fsm_init (cp_t *ctx, cp_sta_t *sta)
+{
+ dbg_assert_ptr (ctx);
+ dbg_assert_ptr (sta);
+ /* only one initial state allowed */
+ dbg_assert (CP_EOC_MULTI_STA_FSM_INITIAL_NB==1);
+ sta->fsm.state = cp_eoc_multi_sta_fsm_initials_table[0];
+ if (cp_eoc_multi_sta_fsm_enter_table[0])
+ cp_eoc_multi_sta_fsm_enter_table[0](ctx,sta);
+}
+
+void
+cp_eoc_multi_sta_fsm_uninit (cp_t *ctx, cp_sta_t *sta)
+{
+}
+
+/**
+ * Execute callbacks attached to enter and leave action of states.
+ * \param ctx control plane context
+ * \param sta active station
+ * \param to state entered
+ */
+static void
+cp_eoc_multi_sta_fsm_leave_enter (cp_t *ctx, cp_sta_t *sta, cp_eoc_multi_sta_fsm_state_t to)
+{
+ dbg_assert_ptr (ctx);
+ dbg_assert_ptr (sta);
+ dbg_assert (to < CP_EOC_MULTI_STA_FSM_STATE_NB);
+ cp_eoc_multi_sta_fsm_state_t from = sta->fsm.state;
+ dbg_assert (from < CP_EOC_MULTI_STA_FSM_STATE_NB);
+ /* Do not call leave/enter callbacks if staying in the same state. */
+ if (from != to)
+ {
+ CP_TRACE (MULTI_STA_FSM_CHANGE_STATE, from, to);
+ if (cp_eoc_multi_sta_fsm_leave_table[from])
+ cp_eoc_multi_sta_fsm_leave_table[from] (ctx, sta);
+ sta->fsm.state = to;
+ if (cp_eoc_multi_sta_fsm_enter_table[to])
+ cp_eoc_multi_sta_fsm_enter_table[to] (ctx, sta);
+ }
+}
+
+
+/**
+ * Handle event for one active state.
+ * \param ctx control plane context
+ * \param e event to handle
+ * \param sta active station
+ */
+
+void
+cp_eoc_multi_sta_fsm_handled_event (cp_t *ctx, cp_sta_t *sta,
+ cp_eoc_multi_sta_fsm_event_t *e)
+{
+ dbg_assert_ptr (ctx);
+ dbg_assert_ptr (e);
+ dbg_assert_ptr (sta);
+
+ cp_eoc_multi_sta_fsm_transition_t t =
+ cp_eoc_multi_sta_fsm_transition_table[sta->fsm.state][e->type];
+ if (t)
+ {
+ /* Transition with action. */
+ sta->fsm.handled_event = e;
+ e->handler (ctx, sta, e, t);
+
+ /* If state has not been set, this means that there is one and
+ * only one branch for this transition. Check this and change
+ * state. */
+ if (sta->fsm.handled_event)
+ {
+ cp_eoc_multi_sta_fsm_state_t to =
+ cp_eoc_multi_sta_fsm_only_branch_table
+ [sta->fsm.state][e->type];
+ dbg_assert_print (to != CP_EOC_MULTI_STA_FSM_STATE_NB,
+ "no branch selected");
+ dbg_assert (to < CP_EOC_MULTI_STA_FSM_STATE_NB);
+ if (to != CP_EOC_MULTI_STA_FSM_STATE_NB)
+ /* Be clement for errors.*/
+ cp_eoc_multi_sta_fsm_leave_enter (ctx, sta, to);
+ sta->fsm.handled_event = NULL;
+ }
+ }
+ else
+ {
+ /* Transition without action. */
+ cp_eoc_multi_sta_fsm_state_t to =
+ cp_eoc_multi_sta_fsm_only_branch_table
+ [sta->fsm.state][e->type];
+ if (to != CP_EOC_MULTI_STA_FSM_STATE_NB)
+ {
+ dbg_assert (to < CP_EOC_MULTI_STA_FSM_STATE_NB);
+ cp_eoc_multi_sta_fsm_leave_enter (ctx, sta, to);
+ sta->fsm.handled_event = NULL;
+ }
+ }
+}
+
+/**
+ * Select a branch during a transition.
+ * \param ctx control plane context
+ * \param branch branch to select
+ * \param sta active station
+ *
+ * The selected branch must correspond to the current handled transition.
+ *
+ */
+
+void
+cp_eoc_multi_sta_fsm_branch_ (cp_t *ctx, cp_eoc_multi_sta_fsm_branch_t branch,
+cp_sta_t *sta)
+{
+
+ dbg_assert_ptr (ctx);
+ dbg_assert_ptr (sta);
+ /* Check handled transition. */
+ dbg_assert (sta->fsm.state < CP_EOC_MULTI_STA_FSM_STATE_NB);
+ dbg_assert_print (sta->fsm.handled_event,
+ "not in transition or duplicated branch");
+ /* Check there is actually several branches. */
+ dbg_assert_print
+ (cp_eoc_multi_sta_fsm_only_branch_table[sta->fsm.state]
+ [sta->fsm.handled_event->type] ==
+ CP_EOC_MULTI_STA_FSM_STATE_NB,
+ "no branch");
+ /* Check this correspond to the current transition. */
+ cp_eoc_multi_sta_fsm_state_t state = ((uint) branch >> 16) & 0xff;
+ cp_eoc_multi_sta_fsm_event_type_t event_type = ((uint) branch >> 8) &
+0xff;
+ dbg_assert_print (state == sta->fsm.state
+ && event_type == sta->fsm.handled_event->type,
+ "bad branch");
+ /* Select this branch. */
+ cp_eoc_multi_sta_fsm_state_t to = ((uint) branch) & 0xff;
+ cp_eoc_multi_sta_fsm_leave_enter (ctx, sta, to);
+ sta->fsm.handled_event = NULL;
+}
diff --git a/cesar/cp/eoc/multi_sta_fsm/src/fsm/multi_sta.conf b/cesar/cp/eoc/multi_sta_fsm/src/fsm/multi_sta.conf
new file mode 100644
index 0000000000..2c50e8d998
--- /dev/null
+++ b/cesar/cp/eoc/multi_sta_fsm/src/fsm/multi_sta.conf
@@ -0,0 +1,6 @@
+[user]
+template-dir = .
+
+[templates]
+template_defs.h = %_defs.h
+template_tables.h = %_tables.h
diff --git a/cesar/cp/eoc/multi_sta_fsm/src/fsm/multi_sta.fsm b/cesar/cp/eoc/multi_sta_fsm/src/fsm/multi_sta.fsm
new file mode 100644
index 0000000000..181feba796
--- /dev/null
+++ b/cesar/cp/eoc/multi_sta_fsm/src/fsm/multi_sta.fsm
@@ -0,0 +1,45 @@
+Multi STA FSM
+ FSM for slave stations
+
+States:
+ disconnected
+ unassociated
+ associated
+ authenticated
+ sleep_authenticated
+
+Events:
+ CC_ASSOC_REQ
+ timeout_assoc
+ CC_GET_KEY_REQ
+ timeout_auth
+ cc_leave
+ CC_SLEEP_ENTER_REQ
+ lost_connection
+ CC_SLEEP_EXIT_IND
+
+
+disconnected:
+ CC_ASSOC_REQ: sta_in_wl -> associated [cp_eoc_multi_sta_action__assoc_req]
+ CC_ASSOC_REQ: sta_not_in_wl -> unassociated
+
+unassociated:
+ CC_ASSOC_REQ: sta_in_wl -> associated [cp_eoc_multi_sta_action__assoc_req]
+ CC_ASSOC_REQ: sta_not_in_wl -> unassociated
+ timeout_assoc -> disconnected [NULL]
+
+associated:
+ CC_GET_KEY_REQ: all_keys_granted -> authenticated[cp_eoc_multi_sta_action__get_key_req]
+ CC_GET_KEY_REQ: more_to_grant -> .
+ timeout_auth -> disconnected [NULL]
+ cc_leave -> disconnected [NULL]
+
+authenticated:
+ CC_GET_KEY_REQ -> . [cp_eoc_multi_sta_action__get_key_req]
+ CC_SLEEP_ENTER_REQ -> sleep_authenticated [NULL]
+ cc_leave -> disconnected [NULL]
+ lost_connection -> disconnected [NULL]
+
+sleep_authenticated:
+ CC_SLEEP_EXIT_IND -> authenticated [NULL]
+ lost_connection -> disconnected [NULL]
diff --git a/cesar/cp/eoc/multi_sta_fsm/src/fsm/template_defs.h b/cesar/cp/eoc/multi_sta_fsm/src/fsm/template_defs.h
new file mode 100644
index 0000000000..224552483b
--- /dev/null
+++ b/cesar/cp/eoc/multi_sta_fsm/src/fsm/template_defs.h
@@ -0,0 +1,53 @@
+#ifndef %(prefix)s_defs_h
+#define %(prefix)s_defs_h
+/*
+ * THIS IS AN AUTOMATICALLY GENERATED FILE, DO NOT EDIT!
+ *
+ * %(name)s
+ *
+%(*comments)s */
+
+/* %(name)s states. */
+enum %(prefix)s_state_t
+{
+%(states)s %(PREFIX)s_STATE_NB
+};
+typedef enum %(prefix)s_state_t %(prefix)s_state_t;
+
+/* %(name)s events types. */
+enum %(prefix)s_event_type_t
+{
+%(events,%(PREFIX)s_EVENT_TYPE_%(event)s)s %(PREFIX)s_EVENT_TYPE_NB
+};
+typedef enum %(prefix)s_event_type_t %(prefix)s_event_type_t;
+
+/* This macro enables checks for branches used in the wrong state/event
+ * combination. */
+#define _BRANCH(state, event, to) \
+ ((%(PREFIX)s_STATE_ ## state) << 16 \
+ | (%(PREFIX)s_EVENT_TYPE_ ## event) << 8 \
+ | (%(PREFIX)s_STATE_ ## to))
+
+/* %(name)s branches. */
+enum %(prefix)s_branch_t
+{
+%(branches)s};
+typedef enum %(prefix)s_branch_t %(prefix)s_branch_t;
+
+#undef _BRANCH
+
+/* %(name)s transition type. */
+typedef void *%(prefix)s_transition_t;
+
+/* %(name)s enter/leave type. */
+struct cp_sta_t;
+typedef void (*%(prefix)s_enter_leave_t) (cp_t *ctx, struct cp_sta_t *sta);
+
+/* Value to use to follow a given branch. */
+#define %(PREFIX)s_BRANCH(state, event, branch) \
+ %(PREFIX)s_BRANCH__ ## state ## __ ## event ## __ ## branch
+
+/* %(name)s number of initial states. */
+#define %(PREFIX)s_INITIAL_NB %(initials_nb)s
+
+#endif /* %(prefix)s_defs_h */
diff --git a/cesar/cp/eoc/multi_sta_fsm/src/fsm/template_tables.h b/cesar/cp/eoc/multi_sta_fsm/src/fsm/template_tables.h
new file mode 100644
index 0000000000..c13300cd28
--- /dev/null
+++ b/cesar/cp/eoc/multi_sta_fsm/src/fsm/template_tables.h
@@ -0,0 +1,46 @@
+/*
+ * THIS IS AN AUTOMATICALLY GENERATED FILE, DO NOT EDIT!
+ *
+ * %(name)s
+ *
+%(*comments)s */
+
+/* %(name)s transition table. */
+const %(prefix)s_transition_t
+%(prefix)s_transition_table[%(PREFIX)s_STATE_NB][%(PREFIX)s_EVENT_TYPE_NB] = {
+%(transition_table)s};
+
+/* %(name)s only branch table. */
+const %(prefix)s_state_t
+%(prefix)s_only_branch_table[%(PREFIX)s_STATE_NB][%(PREFIX)s_EVENT_TYPE_NB] = {
+%(only_branch_table)s};
+
+/* %(name)s state enter table. */
+const %(prefix)s_enter_leave_t
+%(prefix)s_enter_table[%(PREFIX)s_STATE_NB] = {
+%(states,%(@enter|NULL)s)s};
+
+/* %(name)s state leave table. */
+const %(prefix)s_enter_leave_t
+%(prefix)s_leave_table[%(PREFIX)s_STATE_NB] = {
+%(states,%(@leave|NULL)s)s};
+
+/* %(name)s initial states table. */
+const %(prefix)s_state_t
+%(prefix)s_initials_table[%(PREFIX)s_INITIAL_NB] = {
+%(initials)s};
+
+#if CONFIG_TRACE
+
+/* %(name)s state names table. */
+const char *
+%(prefix)s_state_names_table[%(PREFIX)s_STATE_NB] = {
+%(states,"%(state)s")s};
+
+/* %(name)s event names table. */
+const char *
+%(prefix)s_event_names_table[%(PREFIX)s_EVENT_TYPE_NB] = {
+%(events,"%(event)s")s};
+
+#endif /* CONFIG_TRACE */
+
diff --git a/cesar/cp/eoc/multi_sta_fsm/src/tables.c b/cesar/cp/eoc/multi_sta_fsm/src/tables.c
new file mode 100644
index 0000000000..4e1ff83b98
--- /dev/null
+++ b/cesar/cp/eoc/multi_sta_fsm/src/tables.c
@@ -0,0 +1,25 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/multi_sta_fsm/src/tables.c
+ * \brief Multi STA FSM tables.
+ * \ingroup cp_eoc_multistafsm
+ */
+#include "common/std.h"
+
+#include "fsm.h"
+#include "inc/tables.h"
+
+#include "cp/sta/action/action.h"
+#include "cp/beacon/beacon.h"
+#include "cp/eoc/cco/action/cco_action.h"
+#include "ce/tx/tx.h"
+#include "cp/eoc/multi_sta/action/multi_sta_action.h"
+
+/* Include generated tables. */
+#include "cp_eoc_multi_sta_fsm_tables.h"
diff --git a/cesar/cp/eoc/multi_sta_fsm/stub/Module b/cesar/cp/eoc/multi_sta_fsm/stub/Module
new file mode 100644
index 0000000000..eb71a07a82
--- /dev/null
+++ b/cesar/cp/eoc/multi_sta_fsm/stub/Module
@@ -0,0 +1,3 @@
+SOURCES := fsm_stub.c
+
+cp_multi_sta_fsm_MODULE_SOURCES := $(call default,cp_multi_sta_fsm_MODULE_SOURCES,)
diff --git a/cesar/cp/eoc/multi_sta_fsm/stub/src/fsm_stub.c b/cesar/cp/eoc/multi_sta_fsm/stub/src/fsm_stub.c
new file mode 100644
index 0000000000..c0f066c5b5
--- /dev/null
+++ b/cesar/cp/eoc/multi_sta_fsm/stub/src/fsm_stub.c
@@ -0,0 +1,56 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2009 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/multi_sta_fsm/stub/src/fsm_stub.c
+ * \brief Generic multi STA FSM stub.
+ * \ingroup cp_eoc_multistafsm_stub
+ */
+#include "common/std.h"
+
+//#include "cp/eoc/multi_sta_fsm/inc/context.h"
+#include "cp/eoc/multi_sta_fsm/fsm.h"
+#include "cp/eoc/multi_sta_fsm/inc/tables.h"
+
+void
+cp_eoc_multi_sta_fsm_init (cp_t *ctx, cp_sta_t *sta) __attribute__ ((weak));
+void
+cp_eoc_multi_sta_fsm_init (cp_t *ctx, cp_sta_t *sta) {}
+
+void
+cp_eoc_multi_sta_fsm_uninit (cp_t *ctx, cp_sta_t* sta) __attribute__ ((weak));
+void
+cp_eoc_multi_sta_fsm_uninit (cp_t *ctx, cp_sta_t* sta) {}
+
+void
+cp_fsm_process (cp_t *ctx) __attribute__ ((weak));
+void
+cp_fsm_process (cp_t *ctx) {}
+
+void
+cp_eoc_multi_sta_fsm_handled_event (cp_t *ctx, cp_sta_t *sta,
+ cp_eoc_multi_sta_fsm_event_t *e) __attribute__ ((weak));
+void
+cp_eoc_multi_sta_fsm_handled_event (cp_t *ctx, cp_sta_t *sta,
+ cp_eoc_multi_sta_fsm_event_t *e) {}
+
+void
+cp_eoc_multi_sta_fsm_branch_ (cp_t *ctx, cp_eoc_multi_sta_fsm_branch_t branch,
+ cp_sta_t *sta) __attribute__ ((weak));
+void
+cp_eoc_multi_sta_fsm_branch_ (cp_t *ctx, cp_eoc_multi_sta_fsm_branch_t branch,
+ cp_sta_t *sta) {}
+
+void
+cp_eoc_multi_sta_fsm_event_new (cp_t *ctx,
+ cp_eoc_multi_sta_fsm_event_type_t type,
+ cp_eoc_multi_sta_fsm_event_t *event) __attribute__ ((weak));
+
+void
+cp_eoc_multi_sta_fsm_event_new (cp_t *ctx,
+ cp_eoc_multi_sta_fsm_event_type_t type,
+ cp_eoc_multi_sta_fsm_event_t *event) {}
diff --git a/cesar/cp/eoc/multi_sta_fsm/test/utest/Config b/cesar/cp/eoc/multi_sta_fsm/test/utest/Config
new file mode 100644
index 0000000000..8d176cb070
--- /dev/null
+++ b/cesar/cp/eoc/multi_sta_fsm/test/utest/Config
@@ -0,0 +1,6 @@
+CONFIG_CP_EOC = y
+CONFIG_DEBUG_FATAL_CATCH = y
+CONFIG_CP_EOC_MULTI_STA_FSM_DEF="cp/eoc/multi_sta_fsm/test/utest/src/utest.fsm"
+CONFIG_CP_EOC_IS_MASTER = y
+CONFIG_CP_FSM_DEF = "cp/eoc/fsm/src/fsm/cp_eoc_cco.fsm"
+CONFIG_CL_EOC_ROUTE = y
diff --git a/cesar/cp/eoc/multi_sta_fsm/test/utest/Makefile b/cesar/cp/eoc/multi_sta_fsm/test/utest/Makefile
new file mode 100644
index 0000000000..a5df6aa2ed
--- /dev/null
+++ b/cesar/cp/eoc/multi_sta_fsm/test/utest/Makefile
@@ -0,0 +1,19 @@
+BASE = ../../../../..
+
+DEFS = -DSTA_CORE_UNIT_TEST=1
+
+INCLUDES = cp/eoc/multi_sta_fsm/test/utest \
+ cp/eoc/multi_sta_fsm/test/utest/override
+
+HOST_PROGRAMS = test_fsm
+test_fsm_SOURCES = test_fsm.c fsm_stub.c actions.c
+test_fsm_MODULES = lib lib/scenario \
+ cp/eoc/multi_sta_fsm mac/common \
+ cp/eoc/sta/mgr cp/sta/core/stub cl/stub cp/secu \
+ cp/eoc/cco/action/stub mac/sar/stub \
+ cp/eoc/msg/stub cp/cl_interf interface/stub bsu/stub bufmgr/stub
+
+test_fsm_CONFIG_MODULES = cp/eoc cl mac/sar
+cp_eoc_multi_sta_fsm_MODULE_SOURCES = fsm.c events.c
+
+include $(BASE)/common/make/top.mk
diff --git a/cesar/cp/eoc/multi_sta_fsm/test/utest/inc/scenario_defs.h b/cesar/cp/eoc/multi_sta_fsm/test/utest/inc/scenario_defs.h
new file mode 100644
index 0000000000..73cb6431d6
--- /dev/null
+++ b/cesar/cp/eoc/multi_sta_fsm/test/utest/inc/scenario_defs.h
@@ -0,0 +1,107 @@
+#ifndef inc_scenario_defs_h
+#define inc_scenario_defs_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file inc/scenario_defs.h
+ * \brief Scenario definitions.
+ * \ingroup test
+ */
+
+#include "cp/types.h"
+#include "cp/eoc/multi_sta_fsm/fsm.h"
+
+/* Scenario globals. */
+#define SCENARIO_DEFS_GLOBALS \
+ cp_t *cp;
+
+/* Scenario actions. */
+#define SCENARIO_DEFS_ACTIONS \
+ process
+
+typedef struct
+{
+ cp_eoc_multi_sta_fsm_event_type_t type;
+ cp_mme_rx_t *mme;
+ cp_sta_t *sta;
+} scenario_action_param_t;
+
+typedef scenario_action_param_t scenario_action_process_t;
+
+void scenario_action_process_cb (scenario_globals_t *globals,
+ scenario_params_t *params);
+
+
+#define SCENARIO_DEFS_EVENTS \
+ cp_eoc_multi_sta_fsm__STATE1__enter, \
+ cp_eoc_multi_sta_fsm__STATE1__event1, \
+ cp_eoc_multi_sta_fsm__STATE2__event2, \
+ cp_eoc_multi_sta_fsm__STATE3__event1, \
+ cp_eoc_multi_sta_fsm__STATE3__event2, \
+ cp_eoc_multi_sta_fsm__STATE4__event1, \
+ cp_eoc_multi_sta_fsm__STATE4__event4, \
+ cp_eoc_multi_sta_fsm__STATE5__event1, \
+ cp_eoc_multi_sta_fsm__STATE5__event5, \
+ cp_eoc_multi_sta_fsm__STATE6__event1, \
+ cp_eoc_multi_sta_fsm__STATE6__event6, \
+ cp_eoc_multi_sta_fsm__STATE6__enter, \
+ cp_eoc_multi_sta_fsm__STATE6__leave
+
+typedef struct
+{
+ cp_mme_rx_t *mme;
+ cp_sta_t *sta;
+ cp_eoc_multi_sta_fsm_branch_t branch;
+} scenario_event_transition_with_branch_t;
+
+typedef struct
+{
+ cp_mme_rx_t *mme;
+ cp_sta_t *sta;
+} scenario_event_transition_t;
+
+typedef scenario_event_transition_t
+scenario_event_cp_eoc_multi_sta_fsm__STATE1__enter_t;
+
+typedef scenario_event_transition_t
+scenario_event_cp_eoc_multi_sta_fsm__STATE1__event1_t;
+
+typedef scenario_event_transition_with_branch_t
+scenario_event_cp_eoc_multi_sta_fsm__STATE2__event2_t;
+
+typedef scenario_event_transition_t
+scenario_event_cp_eoc_multi_sta_fsm__STATE3__event1_t;
+
+typedef scenario_event_transition_t
+scenario_event_cp_eoc_multi_sta_fsm__STATE3__event2_t;
+
+typedef scenario_event_transition_t
+scenario_event_cp_eoc_multi_sta_fsm__STATE4__event1_t;
+
+typedef scenario_event_transition_with_branch_t
+scenario_event_cp_eoc_multi_sta_fsm__STATE4__event4_t;
+
+typedef scenario_event_transition_t
+scenario_event_cp_eoc_multi_sta_fsm__STATE5__event1_t;
+
+typedef scenario_event_transition_t
+scenario_event_cp_eoc_multi_sta_fsm__STATE5__event5_t;
+
+typedef scenario_event_transition_t
+scenario_event_cp_eoc_multi_sta_fsm__STATE6__event1_t;
+
+typedef scenario_event_transition_t
+scenario_event_cp_eoc_multi_sta_fsm__STATE6__event6_t;
+
+typedef scenario_event_transition_t
+scenario_event_cp_eoc_multi_sta_fsm__STATE6__enter_t;
+
+typedef scenario_event_transition_t
+scenario_event_cp_eoc_multi_sta_fsm__STATE6__leave_t;
+
+#endif /* inc_scenario_defs_h */
diff --git a/cesar/cp/eoc/multi_sta_fsm/test/utest/override/cp/inc/context.h b/cesar/cp/eoc/multi_sta_fsm/test/utest/override/cp/inc/context.h
new file mode 100644
index 0000000000..233f8ffb51
--- /dev/null
+++ b/cesar/cp/eoc/multi_sta_fsm/test/utest/override/cp/inc/context.h
@@ -0,0 +1,69 @@
+#ifndef override_cp_inc_context_h
+#define override_cp_inc_context_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file override/cp/inc/context.h
+ * \brief Control plane context override.
+ * \ingroup test
+ */
+
+
+#include "cp/eoc/multi_sta_fsm/fsm.h"
+#include "cp/eoc/multi_sta_fsm/inc/context.h"
+#include "cp/sta/mgr/sta_mgr.h"
+#include "cp/sta/mgr/inc/sta_mgr.h"
+#include "mac/common/config.h"
+#include "mac/common/store.h"
+#include "mac/sar/sar.h"
+#include "mac/sar/inc/context.h"
+#include "cp/inc/trace.h"
+#include "cp/msg/inc/context.h"
+#include "lib/rnd.h"
+#include "cp/fsm/fsm.h"
+#include "cp/fsm/inc/context.h"
+#include "cp/cl_interf/cl_interf.h"
+#include "cp/cl_interf/inc/context.h"
+#include "interface/interface.h"
+#include "cl/cl.h"
+#include "cp/eoc/cco/action/cco_action.h"
+#include "bufmgr/bufmgr.h"
+
+struct cp_t
+{
+
+ /** FSM context. */
+ cp_fsm_t fsm;
+
+ cp_sta_mgr_t sta_mgr;
+ /** Mac store /dataplane */
+ mac_store_t *mac_store;
+
+ /** MAC config contest*/
+ mac_config_t *mac_config;
+
+ cl_t *cl;
+ /** Segmentation and reassembly context */
+ sar_t *sar;
+
+ cp_msg_t msg;
+
+ lib_rnd_t rnd;
+
+ cp_cl_interf_t cl_interf;
+
+ interface_t *interface;
+
+ /** BSU context. */
+ bsu_t *bsu;
+
+ /** Buffer manager. */
+ bufmgr_t *bufmgr;
+};
+
+#endif /* override_cp_inc_context_h */
diff --git a/cesar/cp/eoc/multi_sta_fsm/test/utest/override/cp/sta/core/core.h b/cesar/cp/eoc/multi_sta_fsm/test/utest/override/cp/sta/core/core.h
new file mode 100644
index 0000000000..532db293ff
--- /dev/null
+++ b/cesar/cp/eoc/multi_sta_fsm/test/utest/override/cp/sta/core/core.h
@@ -0,0 +1,40 @@
+#ifndef override_cp_sta_core_core_h
+#define override_cp_sta_core_core_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file override/cp/sta/core/core.h
+ * \brief STA Core override.
+ * \ingroup test
+ */
+
+#include "cp/inc/context.h"
+
+BEGIN_DECLS
+
+void
+cp_sta_core_signal_fsm_event (cp_t *ctx);
+
+void
+cp_sta_core_signal_fsm_urgent_event (cp_t *ctx);
+
+u32
+cp_sta_core_get_date_ms (cp_t *ctx);
+
+void
+cp_sta_core_signal_recv_mme_event(cp_t *cp_ctx);
+
+void
+cp_sta_core_checkpoint (cp_t *ctx);
+
+int
+cp_sta_core_ms_to_cyg_tick (cp_t *ctx, const uint ms);
+
+END_DECLS
+
+#endif /* override_cp_sta_core_core_h */
diff --git a/cesar/cp/eoc/multi_sta_fsm/test/utest/override/cp/sta/core/defs.h b/cesar/cp/eoc/multi_sta_fsm/test/utest/override/cp/sta/core/defs.h
new file mode 100644
index 0000000000..e9871e09e2
--- /dev/null
+++ b/cesar/cp/eoc/multi_sta_fsm/test/utest/override/cp/sta/core/defs.h
@@ -0,0 +1,58 @@
+#ifndef cp_sta_core_defs_h
+#define cp_sta_core_defs_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/sta/core/defs.h
+ * \brief Sta core defs.
+ * \ingroup cp/sta/core
+ *
+ */
+#include "cp/fsm/forward.h"
+
+/** Forward declaration. */
+typedef struct cp_sta_core_t cp_sta_core_t;
+
+/*
+ * the sta core event flags
+ * these are some flags, so take care to give a value with all bits set to 0 but one.
+ */
+enum cp_sta_core_event_flag_t
+{
+ CP_STA_CORE_EVENT_FLAG_RECV_BEACON = 0x1,
+ CP_STA_CORE_EVENT_FLAG_RECV_MME = 0x2,
+ CP_STA_CORE_EVENT_FLAG_FSM = 0x4,
+ CP_STA_CORE_EVENT_FLAG_GARBAGE = 0x8,
+ CP_STA_CORE_EVENT_FLAG_TERMINATE = 0x10
+};
+typedef enum cp_sta_core_event_flag_t cp_sta_core_event_flag_t;
+
+/** Definition of alarm info structure
+ * (applications should not use it directly but use "alias" defined just below) */
+struct cp_sta_core_timed_event_def_t
+{
+ /* eCos alarm. */
+ uint alarm;
+ /* eCos alarm handle. */
+ uint alarm_handle;
+ /* the sta core event flag to set
+ * (auto or user-specified when creating/launching timer alarm). */
+ cp_sta_core_event_flag_t event_flag;
+ /* FSM event specified when creating/launching timer alarm
+ * (set if the previous flag is CP_STA_CORE_EVENT_FLAG_FSM). */
+ cp_fsm_event_t *fsm_event;
+ /* flag indicating a periodic alarm (if set to true)
+ * or one-shot alarm (if set to false). */
+ bool cyclic_alarm;
+ /* pointer to CP context. */
+ cp_t *cp_ctx;
+};
+typedef struct cp_sta_core_timed_event_def_t cp_sta_core_timed_event_def_t;
+
+#endif /* cp_sta_core_defs_h */
+
diff --git a/cesar/cp/eoc/multi_sta_fsm/test/utest/src/actions.c b/cesar/cp/eoc/multi_sta_fsm/test/utest/src/actions.c
new file mode 100644
index 0000000000..32b94d20de
--- /dev/null
+++ b/cesar/cp/eoc/multi_sta_fsm/test/utest/src/actions.c
@@ -0,0 +1,34 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/actions.c
+ * \brief Scenario actions.
+ * \ingroup test
+ */
+#include "common/std.h"
+
+#include "lib/scenario/scenario.h"
+
+#include "cp/inc/context.h"
+#include "cp/eoc/multi_sta_fsm/fsm.h"
+#include "cp/eoc/multi_sta_fsm/inc/events.h"
+
+void
+scenario_action_process_cb (scenario_globals_t *globals,
+ scenario_params_t *params)
+{
+ scenario_action_process_t *p = (scenario_action_process_t*) params;
+
+ cp_eoc_multi_sta_fsm_event_mme_t e;
+ cp_eoc_multi_sta_fsm_event_type_t type;
+ type = p->type;
+ e.event.type = type;
+ e.event.handler = cp_eoc_multi_sta_fsm_event_handler;
+ e.mme = p->mme;
+ cp_eoc_multi_sta_fsm_handled_event (globals->cp, p->sta, &(e.event));
+}
diff --git a/cesar/cp/eoc/multi_sta_fsm/test/utest/src/fsm_stub.c b/cesar/cp/eoc/multi_sta_fsm/test/utest/src/fsm_stub.c
new file mode 100644
index 0000000000..c1dbe907d6
--- /dev/null
+++ b/cesar/cp/eoc/multi_sta_fsm/test/utest/src/fsm_stub.c
@@ -0,0 +1,185 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/fsm_stub.c
+ * \brief Override Multi STA FSM tables.
+ * \ingroup test
+ */
+#include "common/std.h"
+
+#include "lib/scenario/scenario.h"
+
+#include "cp/eoc/multi_sta_fsm/fsm.h"
+#include "cp/eoc/multi_sta_fsm/inc/tables.h"
+
+int cp_fsm__STATE1__enter_nb;
+
+extern cp_sta_t *
+cp_sta_mgr_sta_get_from_mac (cp_t *ctx, mac_t mac_addr);
+
+void
+cp_eoc_multi_sta_fsm__STATE1__enter (cp_t *ctx, cp_sta_t *sta);
+void
+cp_eoc_multi_sta_fsm__STATE1__event1 (cp_t *ctx, cp_mme_rx_t *mme);
+void
+cp_eoc_multi_sta_fsm__STATE2__event2 (cp_t *ctx, cp_mme_rx_t *mme);
+
+void
+cp_eoc_multi_sta_fsm__STATE2__event2 (cp_t *ctx, cp_mme_rx_t *mme);
+
+void
+cp_eoc_multi_sta_fsm__STATE3__event1 (cp_t *ctx, cp_mme_rx_t *mme);
+void
+cp_eoc_multi_sta_fsm__STATE3__event2 (cp_t *ctx, cp_mme_rx_t *mme);
+void
+cp_eoc_multi_sta_fsm__STATE4__event1 (cp_t *ctx);
+void
+cp_eoc_multi_sta_fsm__STATE4__event4 (cp_t *ctx, cp_mme_rx_t *mme);
+void
+cp_eoc_multi_sta_fsm__STATE5__event1 (cp_t *ctx);
+void
+cp_eoc_multi_sta_fsm__STATE5__event5 (cp_t *ctx);
+void
+cp_eoc_multi_sta_fsm__STATE6__event1 (cp_t *ctx);
+void
+cp_eoc_multi_sta_fsm__STATE6__event6 (cp_t *ctx);
+void
+cp_eoc_multi_sta_fsm__STATE1__error_event_no_branch (cp_t *ctx, cp_mme_rx_t *mme);
+void
+cp_eoc_multi_sta_fsm__STATE1__error_event_bad_branch (cp_t *ctx, cp_mme_rx_t *mme);
+void
+cp_eoc_multi_sta_fsm__STATE1__error_event_dup_branch (cp_t *ctx, cp_mme_rx_t *mme);
+void
+cp_eoc_multi_sta_fsm__STATE6__enter (cp_t *ctx, cp_sta_t *sta);
+void
+cp_eoc_multi_sta_fsm__STATE6__leave (cp_t *ctx, cp_sta_t *sta);
+
+/* Include generated tables. */
+#include "cp_eoc_multi_sta_fsm_tables.h"
+
+void
+cp_eoc_multi_sta_fsm__STATE1__enter (cp_t *ctx, cp_sta_t *sta)
+{
+ cp_fsm__STATE1__enter_nb++;
+}
+
+void
+cp_eoc_multi_sta_fsm__STATE1__event1 (cp_t *ctx, cp_mme_rx_t *mme)
+{
+ scenario_event (cp_eoc_multi_sta_fsm__STATE1__event1);
+}
+
+
+void
+cp_eoc_multi_sta_fsm__STATE2__event2 (cp_t *ctx, cp_mme_rx_t *mme)
+{
+ scenario_event (cp_eoc_multi_sta_fsm__STATE2__event2, param);
+ test_fail_unless(mme == param->mme);
+ cp_sta_t *sta;
+ sta = cp_sta_mgr_sta_get_from_mac(ctx, mme->peer.mac);
+ cp_eoc_multi_sta_fsm_branch_ (ctx, param->branch, sta);
+}
+
+
+
+
+void
+cp_eoc_multi_sta_fsm__STATE3__event1 (cp_t *ctx, cp_mme_rx_t *mme)
+{
+ scenario_event (cp_eoc_multi_sta_fsm__STATE3__event1);
+}
+
+void
+cp_eoc_multi_sta_fsm__STATE3__event2 (cp_t *ctx, cp_mme_rx_t *mme)
+{
+ scenario_event (cp_eoc_multi_sta_fsm__STATE3__event2);
+}
+
+void
+cp_eoc_multi_sta_fsm__STATE4__event1 (cp_t *ctx)
+{
+ scenario_event (cp_eoc_multi_sta_fsm__STATE4__event1);
+}
+
+
+void
+cp_eoc_multi_sta_fsm__STATE4__event4 (cp_t *ctx, cp_mme_rx_t *mme)
+{
+ scenario_event (cp_eoc_multi_sta_fsm__STATE4__event4, param);
+ cp_sta_t *sta;
+ test_fail_unless(mme == param->mme);
+ sta = cp_sta_mgr_sta_get_from_mac(ctx, mme->peer.mac);
+ cp_eoc_multi_sta_fsm_branch_ (ctx, param->branch, sta);
+}
+
+
+
+void
+cp_eoc_multi_sta_fsm__STATE5__event1 (cp_t *ctx)
+{
+ scenario_event (cp_eoc_multi_sta_fsm__STATE5__event1);
+}
+
+void
+cp_eoc_multi_sta_fsm__STATE5__event5 (cp_t *ctx)
+{
+ scenario_event (cp_eoc_multi_sta_fsm__STATE5__event5);
+}
+
+void
+cp_eoc_multi_sta_fsm__STATE6__event1 (cp_t *ctx)
+{
+ scenario_event (cp_eoc_multi_sta_fsm__STATE6__event1);
+}
+
+void
+cp_eoc_multi_sta_fsm__STATE6__event6 (cp_t *ctx)
+{
+ scenario_event (cp_eoc_multi_sta_fsm__STATE6__event6);
+}
+
+void
+cp_eoc_multi_sta_fsm__STATE1__error_event_no_branch (cp_t *ctx, cp_mme_rx_t *mme)
+{
+ /* Do not choose branch. */
+}
+
+void
+cp_eoc_multi_sta_fsm__STATE1__error_event_bad_branch (cp_t *ctx,
+ cp_mme_rx_t *mme)
+{
+
+ cp_sta_t *sta;
+ sta = cp_sta_mgr_sta_get_from_mac(ctx, mme->peer.mac);
+ cp_eoc_multi_sta_fsm_branch (ctx, STATE4, event4, branch1, sta);
+}
+
+void
+cp_eoc_multi_sta_fsm__STATE1__error_event_dup_branch (cp_t *ctx,
+ cp_mme_rx_t *mme)
+{
+
+ cp_sta_t *sta;
+ sta = cp_sta_mgr_sta_get_from_mac(ctx, mme->peer.mac);
+ cp_eoc_multi_sta_fsm_branch (ctx, STATE1, error_event_dup_branch,
+ branch1, sta);
+ cp_eoc_multi_sta_fsm_branch (ctx, STATE1, error_event_dup_branch,
+ branch2, sta);
+}
+
+void
+cp_eoc_multi_sta_fsm__STATE6__enter (cp_t *ctx, cp_sta_t *sta)
+{
+ scenario_event (cp_eoc_multi_sta_fsm__STATE6__enter);
+}
+
+void
+cp_eoc_multi_sta_fsm__STATE6__leave (cp_t *ctx, cp_sta_t *sta)
+{
+ scenario_event (cp_eoc_multi_sta_fsm__STATE6__leave);
+}
diff --git a/cesar/cp/eoc/multi_sta_fsm/test/utest/src/test_fsm.c b/cesar/cp/eoc/multi_sta_fsm/test/utest/src/test_fsm.c
new file mode 100644
index 0000000000..a98a1eb268
--- /dev/null
+++ b/cesar/cp/eoc/multi_sta_fsm/test/utest/src/test_fsm.c
@@ -0,0 +1,294 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/test_fsm.c
+ * \brief Test Multi STA FSM module.
+ * \ingroup test
+ */
+#include "common/std.h"
+
+#include "lib/blk.h"
+#include "lib/test.h"
+#include "lib/scenario/scenario.h"
+#include "cp/sta/mgr/inc/sta.h"
+#include "cp/sta/mgr/sta_mgr.h"
+
+#include "config/trace.h"
+#include "cp/eoc/multi_sta_fsm/fsm.h"
+#include "cp/inc/context.h"
+
+
+extern int cp_fsm__STATE1__enter_nb;
+
+void
+test_fsm_basic_test_case (test_t t)
+{
+ test_case_begin (t, "basic");
+ cp_t ctx;
+ cp_trace_init (&ctx);
+ cp_net_t *net;
+ cp_tei_t tei = 5;
+ uint cl;
+
+ sar_t sar;
+ ctx.sar = &sar;
+ cp_mme_rx_t my_mme;
+ cp_mme_rx_t *mme = &my_mme;
+ cp_sta_t *sta;
+ mac_config_t mac_config;
+
+ ctx.mac_config = &mac_config;
+ ctx.cl = (cl_t *) &cl;
+ ctx.mac_store = mac_store_init ();
+ lib_rnd_init (&ctx.rnd, 1234);
+
+ cp_eoc_sta_mgr_init (&ctx);
+
+ net = cp_sta_mgr_add_avln (&ctx, 1, 1); // snid = 1, nid = 1
+ cp_sta_mgr_set_our_avln (&ctx, net);
+ mme->peer.mac = 2;
+ mme->peer.tei = 0;
+ sta = cp_sta_mgr_sta_add (&ctx, net, tei, mme->peer.mac);
+
+ test_begin (t, "regular")
+ {
+ cp_fsm__STATE1__enter_nb = 0;
+ cp_eoc_multi_sta_fsm_init (&ctx, sta);
+ scenario_entry_t entries[] = {
+ /* STATE1 */
+ SCENARIO_ACTION (process,
+ .mme = mme,
+ .sta = sta,
+ .type = CP_EOC_MULTI_STA_FSM_EVENT_TYPE_event1),
+ SCENARIO_EVENT (cp_eoc_multi_sta_fsm__STATE1__event1,
+ .sta = sta,
+ .mme = mme),
+ /* STATE2 */
+ SCENARIO_ACTION (process,
+ .sta = sta,
+ .mme = mme,
+ .type = CP_EOC_MULTI_STA_FSM_EVENT_TYPE_event2),
+ SCENARIO_EVENT (cp_eoc_multi_sta_fsm__STATE2__event2,
+ .mme = mme,
+ .sta = sta,
+ .branch =
+ CP_EOC_MULTI_STA_FSM_BRANCH(STATE2, event2, branch1)),
+ /* STATE3*/
+ SCENARIO_ACTION (process,
+ .mme = mme,
+ .sta = sta,
+ .type = CP_EOC_MULTI_STA_FSM_EVENT_TYPE_event3),
+ /*no SCENARIO_EVENT */
+ /* STATE4 */
+ SCENARIO_ACTION (process,
+ .mme = mme,
+ .sta = sta,
+ .type = CP_EOC_MULTI_STA_FSM_EVENT_TYPE_event4),
+ SCENARIO_EVENT (cp_eoc_multi_sta_fsm__STATE4__event4,
+ .mme = mme,
+ .sta = sta,
+ .branch =
+ CP_EOC_MULTI_STA_FSM_BRANCH(STATE4, event4, branch4)),
+ /* STATE4 */
+ SCENARIO_ACTION (process,
+ .mme = mme,
+ .sta = sta,
+ .type = CP_EOC_MULTI_STA_FSM_EVENT_TYPE_event4),
+ SCENARIO_EVENT (cp_eoc_multi_sta_fsm__STATE4__event4,
+ .mme = mme,
+ .sta = sta,
+ .branch =
+ CP_EOC_MULTI_STA_FSM_BRANCH(STATE4, event4, branch1)),
+ /* STATE5*/
+ SCENARIO_ACTION (process,
+ .mme = mme,
+ .sta = sta,
+ .type = CP_EOC_MULTI_STA_FSM_EVENT_TYPE_event5),
+ SCENARIO_EVENT (cp_eoc_multi_sta_fsm__STATE5__event5,
+ .mme = mme,
+ .sta=sta),
+ SCENARIO_EVENT (cp_eoc_multi_sta_fsm__STATE6__enter,
+ .mme = mme,
+ .sta=sta),
+ /* STATE6 */
+ SCENARIO_ACTION (process,
+ .mme = mme,
+ .sta = sta,
+ .type = CP_EOC_MULTI_STA_FSM_EVENT_TYPE_event6),
+ SCENARIO_EVENT (cp_eoc_multi_sta_fsm__STATE6__event6,
+ .mme = mme,
+ .sta=sta),
+ /* STATE6 */
+ SCENARIO_ACTION (process,
+ .mme = mme,
+ .sta = sta,
+ .type = CP_EOC_MULTI_STA_FSM_EVENT_TYPE_event1),
+ SCENARIO_EVENT (cp_eoc_multi_sta_fsm__STATE6__event1,
+ .mme = mme,
+ .sta=sta),
+ SCENARIO_EVENT (cp_eoc_multi_sta_fsm__STATE6__leave,
+ .mme = mme,
+ .sta=sta),
+ /* STATE1 */
+ SCENARIO_END
+ };
+ scenario_globals_t globals = {
+ .cp = &ctx,
+ };
+ scenario_run (t, entries, &globals);
+ test_fail_unless (sta->fsm.state ==
+ CP_EOC_MULTI_STA_FSM_STATE_STATE1);
+ test_fail_unless (cp_fsm__STATE1__enter_nb == 2);
+ cp_eoc_multi_sta_fsm_uninit (&ctx, sta);
+
+ } test_end;
+ cp_sta_mgr_uninit (&ctx);
+ slab_release (sta);
+#if CONFIG_TRACE
+ trace_buffer_dbg_dump (&cp.trace);
+#endif /* CONFIG_TRACE */
+ cp_trace_uninit (&cp);
+}
+
+void
+test_fsm_error_test_case (test_t t)
+{
+ test_case_begin (t, "error");
+ cp_t cp;
+ cp_trace_init (&cp);
+ cp_net_t *net;
+ cp_tei_t tei = 5;
+ uint cl;
+ sar_t sar;
+ cp.sar = &sar;
+
+ cp_sta_t *sta;
+ cp_mme_rx_t my_mme;
+ cp_mme_rx_t *mme = &my_mme;
+ cp.cl = (cl_t *) &cl;
+ cp.mac_store = mac_store_init ();
+ mac_config_t mac_config;
+ mac_config_init (&mac_config);
+ cp.mac_config = &mac_config;
+ lib_rnd_init (&cp.rnd, 1234);
+
+ cp_eoc_sta_mgr_init (&cp);
+
+ net = cp_sta_mgr_add_avln (&cp, 1, 1);
+ cp_sta_mgr_set_our_avln (&cp, net);
+ mme->peer.mac = 2;
+ mme->peer.tei = 0;
+ sta = cp_sta_mgr_sta_add (&cp, net, tei, mme->peer.mac);
+
+ test_begin (t, "no branch")
+ {
+ cp_eoc_multi_sta_fsm_init (&cp, sta);
+
+ cp_eoc_multi_sta_fsm_event_mme_t e;
+ cp_eoc_multi_sta_fsm_event_type_t type;
+ type = CP_EOC_MULTI_STA_FSM_EVENT_TYPE_error_event_no_branch;
+ e.event.type = type;
+ e.event.handler = cp_eoc_multi_sta_fsm_event_handler;
+ e.mme = mme;
+
+
+ const char *asserted = NULL;
+ dbg_fatal_try_begin
+ {
+ cp_eoc_multi_sta_fsm_handled_event (&cp, sta, &(e.event));
+ }
+ dbg_fatal_try_catch (const char *msg)
+ {
+ asserted = msg;
+ }
+ dbg_fatal_try_end;
+ test_fail_unless (asserted);
+ cp_eoc_multi_sta_fsm_uninit (&cp, sta);
+ } test_end;
+ test_begin (t, "bad branch")
+ {
+ cp_eoc_multi_sta_fsm_init (&cp, sta);
+
+ cp_eoc_multi_sta_fsm_event_mme_t e;
+ cp_eoc_multi_sta_fsm_event_type_t type;
+ type = CP_EOC_MULTI_STA_FSM_EVENT_TYPE_error_event_bad_branch;
+ e.event.type = type;
+ e.event.handler = cp_eoc_multi_sta_fsm_event_handler;
+ e.mme = mme;
+
+ const char *asserted = NULL;
+ dbg_fatal_try_begin
+ {
+ cp_eoc_multi_sta_fsm_handled_event (&cp, sta, &(e.event));
+ }
+ dbg_fatal_try_catch (const char *msg)
+ {
+ asserted = msg;
+ }
+ dbg_fatal_try_end;
+ test_fail_unless (asserted);
+ cp_eoc_multi_sta_fsm_uninit (&cp, sta);
+ } test_end;
+ test_begin (t, "dup branch")
+ {
+ cp_eoc_multi_sta_fsm_init (&cp, sta);
+
+ cp_eoc_multi_sta_fsm_event_mme_t e;
+ cp_eoc_multi_sta_fsm_event_type_t type;
+ type = CP_EOC_MULTI_STA_FSM_EVENT_TYPE_error_event_dup_branch;
+ e.event.type = type;
+ e.event.handler = cp_eoc_multi_sta_fsm_event_handler;
+ e.mme = mme;
+
+ const char *asserted = NULL;
+ dbg_fatal_try_begin
+ {
+ cp_eoc_multi_sta_fsm_handled_event (&cp, sta, &(e.event));
+ }
+ dbg_fatal_try_catch (const char *msg)
+ {
+ asserted = msg;
+ }
+ dbg_fatal_try_end;
+ test_fail_unless (asserted);
+ cp_eoc_multi_sta_fsm_uninit (&cp, sta);
+ } test_end;
+
+ cp_sta_mgr_uninit (&cp);
+ slab_release (sta);
+
+#if CONFIG_TRACE
+ trace_buffer_dbg_dump (&cp.trace);
+#endif // CONFIG_TRACE
+ cp_trace_uninit (&cp);
+}
+
+
+
+
+void
+test_fsm_test_suite (test_t t)
+{
+ test_suite_begin (t, "fsm");
+ test_fsm_basic_test_case (t);
+ test_fsm_error_test_case (t);
+}
+
+int
+main (int argc, char **argv)
+{
+ test_t t;
+ lib_stats_init();
+ trace_init ();
+ test_init (t, argc, argv);
+ test_fsm_test_suite (t);
+ trace_uninit ();
+ lib_stats_uninit();
+ test_result (t);
+ return test_nb_failed (t) == 0 ? 0 : 1;
+}
diff --git a/cesar/cp/eoc/multi_sta_fsm/test/utest/src/utest.fsm b/cesar/cp/eoc/multi_sta_fsm/test/utest/src/utest.fsm
new file mode 100644
index 0000000000..fc03163b41
--- /dev/null
+++ b/cesar/cp/eoc/multi_sta_fsm/test/utest/src/utest.fsm
@@ -0,0 +1,53 @@
+Slave STA FSM
+ FSM for slave stations
+
+States:
+ STATE1 [enter=cp_eoc_multi_sta_fsm__STATE1__enter]
+ STATE2
+ STATE3
+ STATE4
+ STATE5
+ STATE6 [enter=cp_eoc_multi_sta_fsm__STATE6__enter leave=cp_eoc_multi_sta_fsm__STATE6__leave]
+
+Events:
+ CC_ASSOC_REQ
+ event1
+ event2
+ event3
+ event4
+ event5
+ event6
+ error_event_no_branch
+ test error conditions: no branch selected
+ error_event_bad_branch
+ test error conditions: branch not for this event
+ error_event_dup_branch
+ test error conditions: branch selected two times
+
+STATE1:
+ event1 -> STATE2
+ error_event_no_branch: branch1 -> .
+ error_event_no_branch: branch2 -> .
+ error_event_bad_branch: branch1 -> .
+ error_event_bad_branch: branch2 -> .
+ error_event_dup_branch: branch1 -> .
+ error_event_dup_branch: branch2 -> .
+STATE2:
+ event2: branch1 -> STATE3
+ event2: branch2 -> STATE1
+STATE3:
+ event1 -> STATE1
+ event3 -> STATE4 [NULL]
+ event2 -> STATE2
+STATE4:
+ event1 -> STATE1
+ event4: branch1 -> STATE5
+ event4: branch2 -> STATE2
+ event4: branch3 -> STATE3
+ event4: branch4 -> STATE4
+STATE5:
+ event1 -> STATE1
+ event5 -> STATE6
+STATE6:
+ event1 -> STATE1
+ event6 -> .
diff --git a/cesar/cp/eoc/src/trace.c b/cesar/cp/eoc/src/trace.c
new file mode 100644
index 0000000000..1ee442dba3
--- /dev/null
+++ b/cesar/cp/eoc/src/trace.c
@@ -0,0 +1,100 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2012 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/src/trace.c
+ * \ingroup cp_eoc
+ */
+#include "common/std.h"
+#include "cp/inc/context.h"
+#include "inc/trace.h"
+
+#if CONFIG_CP_EOC_IS_MASTER
+#include "cp/eoc/multi_sta_fsm/inc/tables.h"
+
+/**
+ * Format a MULTI_STA_FSM state.
+ * \see trace_format_t.
+ */
+static int
+cp_eoc_trace_format_multi_sta_fsm_state (char *text, uint text_size, int data)
+{
+ const char *state_name;
+ if (data < 0 || data >= CP_FSM_STATE_NB)
+ state_name = "UNKNOWN";
+ else
+ state_name = cp_eoc_multi_sta_fsm_state_names_table[data];
+ uint state_name_len = strlen (state_name);
+ if (state_name_len > text_size)
+ return -1;
+ else
+ {
+ memcpy (text, state_name, state_name_len);
+ return state_name_len;
+ }
+}
+
+/**
+ * Format a MULTI_STA_FSM event.
+ * \see trace_format_t.
+ */
+static int
+cp_eoc_trace_format_multi_sta_fsm_event (char *text, uint text_size, int data)
+{
+ const char *event_name;
+ if (data < 0 || data >= CP_FSM_EVENT_TYPE_NB)
+ event_name = "UNKNOWN";
+ else
+ event_name = cp_eoc_multi_sta_fsm_event_names_table[data];
+ uint event_name_len = strlen (event_name);
+ if (event_name_len > text_size)
+ return -1;
+ else
+ {
+ memcpy (text, event_name, event_name_len);
+ return event_name_len;
+ }
+}
+
+void
+cp_eoc_trace_init (cp_t *ctx)
+{
+ static trace_namespace_t namespace;
+ static const trace_event_id_t event_ids[] =
+ {
+ TRACE_COMMON_EVENT,
+ /* eoc TRACE_EVENT must be added after common part. */
+ TRACE_EVENT (CP_TRACE_MULTI_STA_FSM_CHANGE_STATE,
+ "multi_sta_fsm %T => %T"),
+ TRACE_EVENT (CP_TRACE_MULTI_STA_ASSOC,
+ "[CCO_EOC] Assoc, Mac addr : %m, tei : %x"),
+ };
+ dbg_assert (ctx);
+
+ cp_trace_common_init (ctx, &namespace, event_ids, COUNT (event_ids));
+
+ trace_namespace_register_format (&namespace, 'T',
+ cp_eoc_trace_format_multi_sta_fsm_state);
+ trace_namespace_register_format (&namespace, 'V',
+ cp_eoc_trace_format_multi_sta_fsm_event);
+}
+
+#else /* !CONFIG_CP_EOC_IS_MASTER */
+
+void
+cp_eoc_trace_init (cp_t *ctx)
+{
+ static trace_namespace_t namespace;
+ static const trace_event_id_t event_ids[] =
+ {
+ TRACE_COMMON_EVENT,
+ };
+ dbg_assert (ctx);
+ cp_trace_common_init (ctx, &namespace, event_ids, COUNT (event_ids));
+}
+
+#endif /* !CONFIG_CP_EOC_IS_MASTER */
diff --git a/cesar/cp/eoc/sta/action/Config b/cesar/cp/eoc/sta/action/Config
new file mode 100644
index 0000000000..28cb71ccf5
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/Config
@@ -0,0 +1 @@
+CONFIG_CP_EOC_STA_CON_ALLOWED = n \ No newline at end of file
diff --git a/cesar/cp/eoc/sta/action/Module b/cesar/cp/eoc/sta/action/Module
new file mode 100644
index 0000000000..a3c17077dc
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/Module
@@ -0,0 +1,8 @@
+# Common sources
+SOURCES := action.c poweron.c drv.c vs.c assoc.c
+# Slave Sources
+ifeq ($(CONFIG_CP_EOC_IS_MASTER),n)
+ SOURCES += assoc_slave.c
+endif
+
+MODULES := cp/sta/action
diff --git a/cesar/cp/eoc/sta/action/action.h b/cesar/cp/eoc/sta/action/action.h
new file mode 100644
index 0000000000..ae90ccb28f
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/action.h
@@ -0,0 +1,22 @@
+#ifndef cp_eoc_sta_action_action_h
+#define cp_eoc_sta_action_action_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2009 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/sta/action/action.h
+ * \brief EoC STA public functions.
+ * \ingroup cp_eoc_sta_action
+ *
+ */
+#include "cp/sta/action/action.h"
+
+#include "cp/eoc/sta/action/assoc_slave.h"
+#include "cp/eoc/sta/action/drv.h"
+#include "cp/eoc/sta/action/vs.h"
+
+#endif /* cp_eoc_sta_action_action_h */
diff --git a/cesar/cp/eoc/sta/action/assoc_slave.h b/cesar/cp/eoc/sta/action/assoc_slave.h
new file mode 100644
index 0000000000..6c54ed488a
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/assoc_slave.h
@@ -0,0 +1,229 @@
+#ifndef cp_eoc_sta_action_assoc_slave_h
+#define cp_eoc_sta_action_assoc_slave_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2009 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/sta/eoc/action/assoc_slave.h
+ * \brief EoC STA Slave action, association related definitions.
+ * \ingroup cp_eoc_sta_action
+ *
+ * Association/authentication
+ * ==========================
+ *
+ * This part relates to association and authentication for a slave STA. A
+ * state machine is used to handle the association status of the station:
+ *
+ * \image html assoc.png "Association state machine"
+ *
+ */
+#include "cp/cp.h"
+#include "cp/mme.h"
+#include "cp/sta/mgr/sta.h"
+#include "cp/sta/mgr/net.h"
+
+BEGIN_DECLS
+
+/** Clear status of one station
+ * TODO
+ */
+void
+cp_eoc_sta_action_sta_clear_status (cp_t *ctx);
+
+/**
+ * Start a association procedure.
+ * \param ctx control plane context
+ *
+ * nd_beacon is detected, and association is triggered
+ */
+void
+cp_eoc_sta_action_assoc__detecting_detected (cp_t *ctx);
+
+/**
+ * TODO
+ */
+void
+cp_eoc_sta_action_detect__beacon_received (cp_t *ctx, bsu_beacon_t *beacon,
+ cp_net_t *net, cp_sta_t *sta);
+
+/**
+ * TODO
+ */
+void
+cp_eoc_sta_action_assoc__beacon_received (cp_t *ctx, bsu_beacon_t *beacon,
+ cp_net_t *net, cp_sta_t *sta);
+
+/**
+ * TODO
+ */
+void
+cp_eoc_sta_action_auth__beacon_received (cp_t *ctx, bsu_beacon_t *beacon,
+ cp_net_t *net, cp_sta_t *sta);
+
+/**
+ * Timeout occurred while station was in associating state.
+ * \param ctx control plane context
+ *
+ */
+void
+cp_eoc_sta_action_assoc__associating_timeout (cp_t *ctx);
+
+/**
+ * CC_ASSOC.CNF was received
+ * \param ctx control plane context
+ * \param mme received MME handle
+ */
+void
+cp_eoc_sta_action_assoc__associating_cnf (cp_t *ctx, cp_mme_rx_t *mme);
+
+/**
+ * Several beacons was not detected while station was in asscoiating state
+ * \param ctx control plane context
+ *
+ */
+void
+cp_eoc_sta_action_assoc__associating_no_beacons (cp_t *ctx);
+
+/**
+ * Handle UNASSOCIATED => DETECTING transition
+ * \param ctx control plane context
+ *
+ */
+void
+cp_eoc_sta_action_assoc__unassociated_retry (cp_t *ctx);
+
+/**
+ * GET_KEY.CNF was received
+ * \param ctx control plane context
+ * \param mme received MME handle
+ */
+void
+cp_eoc_sta_action_assoc__associated_key_cnf (cp_t *ctx, cp_mme_rx_t *mme);
+
+/**
+ * GET_KEY.CNF was received for TEK_KEY (used to authenticate station)
+ * \param ctx control plane context
+ * \param mme received MME handle
+ */
+void
+cp_eoc_sta_action_auth__authenticated_key_cnf (cp_t *ctx, cp_mme_rx_t *mme);
+
+/**
+ * TODO
+ */
+void
+cp_eoc_sta_action_auth__authenticated_set_key_req (cp_t *ctx,
+ cp_mme_rx_t *mme);
+
+/**
+ * Several beacons was not detected while station was in asscoiated state
+ * \param ctx control plane context
+ *
+ */
+void
+cp_eoc_sta_action_assoc__associated_no_beacons (cp_t *ctx);
+
+/**
+ * Timeout during asscoiated state
+ * \param ctx control plane context
+ *
+ */
+void
+cp_eoc_sta_action_assoc__associated_timeout (cp_t *ctx);
+
+/**
+ * CC_LEAVE.IND was received while station in associated state
+ * \param ctx control plane context
+ * \param mme received MME handle
+ *
+ */
+void
+cp_eoc_sta_action_assoc__associated_leave (cp_t *ctx, cp_mme_rx_t *mme);
+
+/**
+ * CC_LEAVE.IND was received while station in authenticated state
+ * \param ctx control plane context
+ * \param mme received MME handle
+ *
+ */
+void
+cp_eoc_sta_action_assoc__authenticated_leave (cp_t *ctx, cp_mme_rx_t *mme);
+
+/**
+ * Several beacons was not detected while station was in authenticated
+ * state
+ * \param ctx control plane context
+ *
+ */
+void
+cp_eoc_sta_action_assoc__authenticated_no_beacons (cp_t *ctx);
+
+/**
+ * TODO
+ */
+void
+cp_eoc_sta_action_assoc__beacon_not_received (cp_t *ctx);
+
+/**
+ * TODO
+ */
+void
+cp_eoc_sta_action_unassoc__start_retry_timer (cp_t *ctx);
+
+/**
+ * TODO
+ */
+void
+cp_eoc_sta_action_unassoc__stop_retry_timer (cp_t *ctx);
+
+/**
+ * CM_ENCRYPTED_PAYLOAD.RSP was received
+ * \param ctx control plane context
+ * \param mme received MME handle
+ *
+ */
+void
+cp_eoc_sta_action_assoc__associated_encrypt_payload_rsp (cp_t *ctx,
+ cp_mme_rx_t *mme);
+
+void
+cp_eoc_sta_action_auth__authenticated_set_out_lev (cp_t *ctx,
+ cp_mme_rx_t *mme);
+
+/**
+ * Several beacons were not detected while station was in
+ * detecting beacon state
+ * \param ctx control plane context
+ *
+ */
+void
+cp_eoc_sta_action_assoc__detecting_no_beacons (cp_t *ctx);
+
+/**
+ * Several beacons were not detected while station was in
+ * unassociated state
+ * \param ctx control plane context
+ *
+ */
+void
+cp_eoc_sta_action_assoc__unassoc_no_beacons (cp_t *ctx);
+
+/**
+ * BEACON was received while station was in unassociated state
+ * \param ctx control plane context
+ * \param beacon pointer to received beacon
+ * \param net pointer to station's network
+ * \param sta pointer to control plane station
+ *
+ */
+void
+cp_eoc_sta_action_unassoc__beacon_received (
+ cp_t *ctx, bsu_beacon_t *beacon, cp_net_t *net, cp_sta_t *sta);
+
+END_DECLS
+
+#endif /* cp_eoc_sta_action_assoc_slave_h */
diff --git a/cesar/cp/eoc/sta/action/doc/Makefile b/cesar/cp/eoc/sta/action/doc/Makefile
new file mode 100644
index 0000000000..053351b0de
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/doc/Makefile
@@ -0,0 +1,48 @@
+PAGES = assoc
+GRAPHS = assoc
+
+DOTFLAGS =
+CONVERTFLAGS = -border 1 -bordercolor '\#d7d7d7'
+
+TOOLS_DIR = ../../../../../common/tools
+DOC_DIR = ../../../../../common/doc
+SDL2DOT = $(TOOLS_DIR)/sdl2dot
+SDLPS = $(TOOLS_DIR)/sdl.ps
+#EXTRACT_DOC = $(DOC_DIR)/extractdoc
+DOX2RST = $(DOC_DIR)/dox2rst
+
+#all: png rst
+all: png
+
+png: $(GRAPHS:%=%.png)
+ps: $(GRAPHS:%=%.ps)
+
+%.png: %.ps
+ convert $(CONVERTFLAGS) $< $@
+
+%.ps: %.dot Makefile
+ dot $(DOTFLAGS) -Tps -l $(SDLPS) -o $@ $<
+
+%.dot: %.sdl
+ $(SDL2DOT) $< > $@
+
+rst: top.rst
+html: png top.html
+odt: top.odt
+
+top.rst: $(PAGES:%=%.rst)
+ cat $^ > $@
+
+%.rst: ../%.h
+ $(EXTRACT_DOC) $< | $(DOX2RST) -s 50 > $@
+
+%.html: %.rst
+ rst2html $< $@
+
+%.odt: %.rst
+ rst2odt.py $< $@
+
+clean:
+ rm -f $(GRAPHS:%=%.ps) $(GRAPHS:%=%.png)
+ rm -f $(PAGES:%=%.rst) $(PAGES:%=%.html)
+ rm -f top.rst top.html top.odt
diff --git a/cesar/cp/eoc/sta/action/doc/assoc.sdl b/cesar/cp/eoc/sta/action/doc/assoc.sdl
new file mode 100644
index 0000000000..681e1b6672
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/doc/assoc.sdl
@@ -0,0 +1,41 @@
+((start)) -> (detecting_beacon)
+
+detecting_beacon:
+(detecting_beacon) -nd beacon -> (associating)
+(detecting_beacon) -nd beacon\n timeout -> (unassociated)
+
+associating:
+(associating) -associating\ntime out -> <:retry?> -y -> (detecting_beacon)
+ <:retry?> -n -> (unassociated)
+(associating) -CC_ASSOC.CNF -> <:result?> -success -> (associated)
+ <:result?> -unsuccess -> (unassociated)
+ <:result?> -unrelated -> (unassociated)
+(associating) -no beacons -> (unassociated)
+
+unassociated:
+(unassociated) -enter sleep_unassociated -> (sleep_unassociated)
+(unassociated) -retry -> (detecting_beacon)
+
+sleep_unassociated:
+(sleep_unassociated) -exit sleep -> (unassociated)
+
+associated:
+(associated) -CC_GET_KEY.CNF -> <:result=key granted> -y -> <:all keys granted?> -y -> (authenticated)
+ <:all keys granted?> -n -> (associated)
+ <:result=key granted> -n -> (unassociated)
+ <:result=key granted> -unrelated -> (unassociated)
+
+(associated) -CM_ENCRYPT_PAYLOAD.RSP -> (unassociated)
+(associated) -authenticating\ntimeout -> (unassociated)
+(associated) -no beacons -> (unassociated)
+(associated) -CC_LEAVE.IND -> (detecting_beacon)
+
+authenticated:
+(authenticated) -CC_SLEEP_ENTER.CNF -> (sleep_authenticated)
+(authenticated) -no beacons -> (unassociated)
+(authenticated) -CC_LEAVE.IND -> (detecting_beacon)
+
+sleep_authenticated:
+(sleep_authenticated) -CC_SLEEP_EXIT.RSP -> (authenticated)
+(sleep_authenticated) -no beacons -> (unassociated)
+
diff --git a/cesar/cp/eoc/sta/action/doc/cp_eoc_sta_action.odt b/cesar/cp/eoc/sta/action/doc/cp_eoc_sta_action.odt
new file mode 100644
index 0000000000..0a85ee703b
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/doc/cp_eoc_sta_action.odt
Binary files differ
diff --git a/cesar/cp/eoc/sta/action/drv.h b/cesar/cp/eoc/sta/action/drv.h
new file mode 100644
index 0000000000..4b5165ad0b
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/drv.h
@@ -0,0 +1,65 @@
+#ifndef cp_eoc_sta_action_drv_h
+#define cp_eoc_sta_action_drv_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2009 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/sta/action/drv.h
+ * \brief Driver messages
+ * \ingroup cp_eoc_sta_action
+ *
+ * Entering and exiting sleep states
+ * ==========================
+ *
+ * This part relates to entering and exiting STA sleep states
+ *
+ * \image html
+ *
+ */
+#include "cp/cp.h"
+#include "cp/mme.h"
+
+BEGIN_DECLS
+
+/**
+ * TODO
+ */
+void
+cp_eoc_sta_action_drv__stopped__drv_sta_set_tonemask_req (
+ cp_t *ctx, cp_mme_rx_t *mme);
+
+/**
+ * TODO
+ */
+void
+cp_eoc_sta_action_drv__stopped__drv_sta_set_key_req (
+ cp_t *ctx, cp_mme_rx_t *mme);
+
+/**
+ * TODO
+ */
+void
+cp_eoc_sta_action_drv__drv_sta_set_slave_config_req (
+ cp_t *ctx, cp_mme_rx_t *mme);
+
+/**
+ * TODO
+ */
+void
+cp_eoc_sta_action_drv__drv_sta_set_eoc_config_req (
+ cp_t *ctx, cp_mme_rx_t *mme);
+
+/**
+ * Common handler for DRV_STA_GET_STATUS.IND.
+ * \param ctx control plane context
+ */
+void
+cp_eoc_sta_action_drv__drv_sta_get_status_ind (cp_t *ctx);
+
+END_DECLS
+
+#endif /* cp_eoc_sta_action_drv_h */
diff --git a/cesar/cp/eoc/sta/action/inc/assoc.h b/cesar/cp/eoc/sta/action/inc/assoc.h
new file mode 100644
index 0000000000..f54dd7bd24
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/inc/assoc.h
@@ -0,0 +1,43 @@
+#ifndef cp_eoc_sta_action_inc_assoc_h
+#define cp_eoc_sta_action_inc_assoc_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2012 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/sta/action/inc/assoc.h
+ * \brief « brief description »
+ * \ingroup cp_eoc_sta_action
+ *
+ * « long description »
+ */
+
+#define UNASSOC_RETRY_TIMEOUT_MS 30*1000
+#define RETRY_TIMEOUT_MS 1200
+#define LEAVING_TIMEOUT_MS (40 * 3)
+#define LEAVE_WAIT_TIMEOUT_MS 1000
+#define CP_EOC_NUM_RETRY 3
+#define CP_EOC_NOT_POLLED_NB 20
+#define CP_EOC_BEACON_1S_NB 10
+
+#define CP_EOC_STA_ASSOC_REQ_OFFSET \
+ ((ctx->mac_config->sta_mac_address >> 40) & 0x1F)
+#define UNASSOC_FAST_RETRY_TIMEOUT_MS 15*1000
+
+#include "config/cp/eoc/sta/con.h"
+
+
+#if CONFIG_CP_EOC_STA_CON_ALLOWED
+#define SUB_STAT_ATTR(a, b, c) ((a).c - (b).c)
+#define SUB_STAT(c) SUB_STAT_ATTR (ctx->sar->stats, sar_offset, c)
+#endif
+
+BEGIN_DECLS
+
+
+END_DECLS
+
+#endif /* cp_eoc_sta_action_inc_assoc_h */
diff --git a/cesar/cp/eoc/sta/action/inc/vs.h b/cesar/cp/eoc/sta/action/inc/vs.h
new file mode 100644
index 0000000000..a1fa741ab4
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/inc/vs.h
@@ -0,0 +1,35 @@
+#ifndef cp_eoc_sta_action_inc_vs_h
+#define cp_eoc_sta_action_inc_vs_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2012 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/sta/action/inc/vs.h
+ * \brief « brief description »
+ * \ingroup cp_eoc_sta_action
+ *
+ * « long description »
+ */
+
+struct real_time_stats_t {
+ uint nb_unicast_packets_rx;
+ uint nb_unicast_packets_tx;
+ uint total_nb_bytes_rx;
+ uint total_nb_bytes_tx;
+ uint nb_broadcast_packets_rx;
+ uint nb_broadcast_packets_tx;
+ uint nb_multicast_packets_rx;
+ uint nb_multicast_packets_tx;
+ uint nb_packets_rx_crc;
+ uint nb_packets_rx_short;
+ uint nb_packets_tx_short;
+ uint nb_packets_tx_dropped;
+ uint nb_packets_rx_discarded;
+ uint avg_pre_fec_bit_error_rate;
+};
+
+#endif /* cp_eoc_sta_action_inc_vs_h */
diff --git a/cesar/cp/eoc/sta/action/src/action.c b/cesar/cp/eoc/sta/action/src/action.c
new file mode 100644
index 0000000000..0f7ccebe8f
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/src/action.c
@@ -0,0 +1,36 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/sta/action/src/action.c
+ * \brief EoC STA action.
+ * \ingroup cp_eoc_sta_action
+ */
+#include "common/std.h"
+
+/* Public headers. */
+#include "ce/tx/tx.h"
+#include "cp/inc/context.h" // cp_t
+#include "cl/cl_eoc_mactotei.h"
+#include "cp/eoc/sta/action/action.h"
+#include "cp/sta/action/action.h"
+
+void
+cp_eoc_sta_action_init (cp_t *ctx)
+{
+ /* Initialize the STA action bridge module. */
+ cp_sta_action_bridge_init (ctx);
+}
+
+void
+cp_eoc_sta_action_garbage (cp_t *ctx)
+{
+ cl_eoc_mactotei_periodic_action (ctx->cl);
+
+ /* Update tone map list for CE in TX. */
+ ce_tx_update_tone_map (ctx);
+}
diff --git a/cesar/cp/eoc/sta/action/src/assoc.c b/cesar/cp/eoc/sta/action/src/assoc.c
new file mode 100644
index 0000000000..cd42c8660c
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/src/assoc.c
@@ -0,0 +1,35 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/sta/action/src/assoc.c
+ * \brief EoC STA action, association related definitions.
+ * \ingroup cp_eoc_sta_action
+ */
+#include "common/std.h"
+
+/* Private headers. */
+#include "cp/inc/context.h"
+#include "cp/eoc/sta/action/inc/assoc.h"
+
+/* Public headers. */
+#include "cp/eoc/sta/action/action.h"
+#include "cp/sta/action/action.h"
+#include "cp/fsm/fsm.h"
+
+#if !CONFIG_CP_EOC_IS_MASTER
+void
+cp_eoc_sta_action_assoc__start_retry_timer (cp_t *ctx)
+{
+ /* only Slave compilation */
+ dbg_assert (ctx);
+ cp_fsm_event_t *event = cp_fsm_event_bare_new (
+ ctx, CP_FSM_EVENT_TYPE_timeout_associating);
+ cp_sta_core_gen_timed_event (ctx, &ctx->sta_action.assoc.timer, event,
+ RETRY_TIMEOUT_MS);
+}
+#endif
diff --git a/cesar/cp/eoc/sta/action/src/assoc_slave.c b/cesar/cp/eoc/sta/action/src/assoc_slave.c
new file mode 100644
index 0000000000..7d91c9d879
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/src/assoc_slave.c
@@ -0,0 +1,683 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/sta/action/src/assoc.c
+ * \brief STA action, association related definitions.
+ * \ingroup cp_eoc_sta_action
+ */
+#include "common/std.h"
+
+/* Private headers. */
+#include "cp/eoc/sta/action/inc/assoc.h"
+#include "cp/inc/context.h"
+#include "mac/sar/inc/context.h"
+#include "mac/pbproc/inc/context.h"
+#include "cp/eoc/inc/dbg_print.h"
+#include "cp/eoc/msg/inc/msg_vs.h"
+
+/* Public headers. */
+#include "cp/eoc/sta/action/action.h"
+#include "cp/eoc/sta/action/assoc_slave.h"
+#include "cp/eoc/sta/mgr/sta_own_data.h"
+#include "cp/sta/action/action.h"
+#include "cp/msg/msg.h"
+#include "cp/eoc/beacon/beacon.h"
+#include "mac/sar/sar.h"
+#include "mac/common/ntb.h"
+#include "mac/common/defs.h"
+#include "hal/gpio/gpio.h"
+#include "cp/eoc/cco/bw/bw.h"
+
+/* Config headers. */
+#include "config/cp/eoc/sta.h"
+
+
+#if CONFIG_CP_EOC_STA_CON_ALLOWED
+static u32 mem=0, auth_time=0;
+static sar_stats_t sar_offset;
+#endif
+
+void
+cp_eoc_sta_action_sta_clear_status (cp_t *ctx)
+{
+ dbg_assert (ctx);
+ ctx->sta_action.assoc.retry = 0;
+ ctx->sta_action.assoc.beacon_loss = 0;
+ ctx->sta_action.assoc.init_count = CP_EOC_STA_ASSOC_REQ_OFFSET;
+ cp_sta_own_data_t *own_data = cp_sta_mgr_get_sta_own_data (ctx);
+ bool send_mme = false;
+
+ /* If sta has been associated set UNASSOCIATED state and remove master. */
+ if (MAC_TEI_IS_EOC_STA (cp_sta_own_data_get_tei (ctx)))
+ {
+ cp_sta_t * sta = NULL;
+ cp_net_t * net = cp_sta_mgr_get_our_avln (ctx);
+ sta = cp_sta_mgr_sta_get_assoc (ctx, net, own_data->tei_track);
+ if (sta)
+ {
+ send_mme = true;
+
+ cp_sta_set_authenticated (ctx, sta, false);
+ cp_sta_mgr_sta_remove (ctx, sta);
+ slab_release (sta);
+ }
+ }
+ cp_sta_own_data_set_authenticated_status (ctx, false);
+ cp_sta_own_data_set_tei (ctx, MAC_TEI_UNASSOCIATED);
+ if (send_mme)
+ cp_eoc_sta_action_drv__drv_sta_get_status_ind (ctx);
+ cp_beacon_process_untracked_avln (ctx);
+ cp_eoc_cco_bw_sta_allocations (ctx);
+}
+
+void
+cp_eoc_sta_action_assoc__detecting_detected (cp_t *ctx)
+{
+ dbg_assert (ctx);
+ /* Send association request. */
+ cp_msg_cc_assoc_req_t data = {
+ CP_MSG_CC_ASSOC_REQ_TYPE_NEW,
+ cp_sta_own_data_get_nid (ctx),
+ CP_CCO_LEVEL,
+ CP_PCO_CAP
+ };
+ cp_msg_cc_assoc_req_send (ctx, &ctx->sta_action.assoc.peer, &data);
+}
+
+void
+cp_eoc_sta_action_detect__beacon_received (cp_t *ctx, bsu_beacon_t *beacon,
+ cp_net_t *net, cp_sta_t *sta)
+{
+ dbg_assert (ctx);
+ dbg_assert (beacon);
+ dbg_assert (net);
+ dbg_assert (sta);
+
+ cp_snid_t our_snid = cp_sta_own_data_get_snid (ctx);
+ cp_nid_t our_nid = cp_sta_own_data_get_nid (ctx);
+ cp_snid_t its_snid = cp_net_get_snid (ctx, net);
+ cp_nid_t its_nid = cp_net_get_nid (ctx, net);
+ cp_sta_own_data_t *own_data = cp_sta_mgr_get_sta_own_data (ctx);
+ ctx->sta_action.assoc.beacon_loss = 0;
+
+ if (our_nid == its_nid)
+ {
+ /* Synchronised and tracking the beacon. */
+ if (our_snid == its_snid
+ && own_data->tei_track == beacon->vf.stei
+ && beacon->bmis.mac_address.present
+ && own_data->cco_mac_addr_track
+ == beacon->bmis.mac_address.mac_address
+ && cp_beacon_synchronised (ctx))
+ {
+ if (ctx->sta_action.assoc.init_count > 0)
+ ctx->sta_action.assoc.init_count--;
+ else
+ {
+ cp_sta_get_peer (sta, &ctx->sta_action.assoc.peer);
+ cp_fsm_post_new_event (ctx, bare, nd_beacon);
+ }
+ }
+ /* No tracking track it.. */
+ else if (own_data->tei_track == MAC_TEI_UNASSOCIATED
+ || (our_snid != its_snid
+ && beacon->bmis.mac_address.present
+ && own_data->cco_mac_addr_track
+ == beacon->bmis.mac_address.mac_address))
+ {
+ cp_sta_mgr_set_tracking (ctx, its_snid, its_nid);
+ cp_beacon_process_tracked_avln (ctx, beacon, net);
+ }
+ }
+}
+
+void
+cp_eoc_sta_action_assoc__beacon_received (cp_t *ctx, bsu_beacon_t *beacon,
+ cp_net_t *net, cp_sta_t *sta)
+{
+ dbg_assert (ctx);
+ dbg_assert (beacon);
+ dbg_assert (net);
+ dbg_assert (sta);
+
+ ctx->sta_action.assoc.beacon_loss = 0;
+}
+
+void
+cp_eoc_sta_action_auth__beacon_received (cp_t *ctx, bsu_beacon_t *beacon,
+ cp_net_t *net, cp_sta_t *sta)
+{
+ dbg_assert (ctx);
+ dbg_assert (beacon);
+ dbg_assert (net);
+ dbg_assert (sta);
+
+ ctx->sta_action.assoc.beacon_loss = 0;
+ /* check consecc polling count */
+ if (ctx->pbproc->polled)
+ {
+ ctx->sta_action.assoc.retry=0;
+ ctx->pbproc->polled = false;
+ }
+ else
+ {
+ if (cp_sta_own_data_get_authenticated_status (ctx)
+ && ++ctx->sta_action.assoc.retry >= CP_EOC_NOT_POLLED_NB)
+ {
+ ctx->sta_action.assoc.retry = 0;
+ cp_fsm_post_new_event (ctx, bare, to_leave);
+ return;
+ }
+ }
+#if CONFIG_CP_EOC_STA_CON_ALLOWED
+ if (++mem >= CP_EOC_BEACON_1S_NB)
+ {
+ auth_time++;
+ mem = 0;
+ char temp[128];
+ sprintf (temp, "sta=%d snid=%d blk=%d"
+ " sar[%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d] pb[%d]\n",
+ auth_time, cp_sta_own_data_get_snid (ctx), blk_free_nb (),
+ SUB_STAT (rx_jobs_nb),
+ ctx->sar->stats.rx_jobs_waiting_nb,
+ SUB_STAT (rx_pb_count),
+ SUB_STAT (pb_data_before_ssn_min),
+ SUB_STAT (pb_data_duplicated),
+ SUB_STAT (pb_mme_before_ssn_min),
+ SUB_STAT (pb_mme_duplicated),
+ SUB_STAT (rx_pb_crc_error_count),
+ SUB_STAT (mfs_tx_data_pb_expired_nb),
+ SUB_STAT (mfs_rx_data_pb_expired_nb),
+ SUB_STAT (mfs_tx_mme_pb_expired_nb),
+ SUB_STAT (mfs_rx_mme_pb_expired_nb),
+ ctx->pbproc->stats.tx_data_cancel
+ + ctx->pbproc->stats.tx_data_wack_noack);
+ sar_offset = ctx->sar->stats;
+ int pos = 0, len = strlen (temp), len1;
+ while (pos < len)
+ {
+ char * temp1 = temp + pos, tmpa[32];
+ len1 = MIN (len, pos + 20);
+ strncpy (tmpa, temp1, len1 - pos);
+ tmpa[len1 - pos] = '\0';
+ printf (tmpa);
+ pos = len1;
+ }
+ }
+#endif
+}
+
+void
+cp_eoc_sta_action_assoc__associating_timeout (cp_t *ctx)
+{
+ cp_sta_own_data_t *own = cp_sta_mgr_get_sta_own_data (ctx);
+ own->num_bad_could_not_assoc ++;
+ if (ctx->sta_action.assoc.retry++ < CP_EOC_NUM_RETRY)
+ {
+ cp_fsm_branch (ctx, ASSOCIATING, timeout_associating, retry);
+ }
+ else
+ {
+ cp_fsm_branch (ctx, ASSOCIATING, timeout_associating, no_retry);
+ cp_eoc_sta_action_sta_clear_status (ctx);
+ }
+}
+
+void
+cp_eoc_sta_action_assoc__associating_cnf (cp_t *ctx, cp_mme_rx_t *mme)
+{
+ cp_msg_cc_assoc_cnf_t cnf;
+ bool added;
+ mfs_tx_t *mfs;
+ dbg_assert (ctx);
+ dbg_assert (mme);
+ cp_sta_own_data_t *own = cp_sta_mgr_get_sta_own_data (ctx);
+ if (!cp_msg_cc_assoc_cnf_receive (ctx, mme, &cnf)
+ || !cp_mme_peer_cmp (&ctx->sta_action.assoc.peer, &mme->peer)
+ || (cp_sta_own_data_get_nid (ctx) != cnf.nid))
+ {
+ /* Unrelated message, drop it. */
+ cp_fsm_branch (ctx, ASSOCIATING, CC_ASSOC_CNF, unrelated);
+ }
+ else if ((cnf.result != CP_MSG_CC_ASSOC_CNF_RESULT_SUCCESS)
+ &&
+ (cnf.result != CP_MSG_CC_ASSOC_CNF_RESULT_SUCCESS_WL_ACCEPT_ALL))
+ {
+ /* Negative result, station not associated */
+ ctx->sta_action.assoc.fast_retry =
+ cnf.result ==
+ CP_MSG_CC_ASSOC_CNF_RESULT_FAILURE_TEMPORARY_RESSOURCE_EXHAUSTION;
+ own->num_bad_assoc_failure ++;
+ cp_fsm_branch (ctx, ASSOCIATING, CC_ASSOC_CNF, unsuccess);
+ }
+ else
+ {
+ /* change dak and result */
+ if (cnf.result
+ == CP_MSG_CC_ASSOC_CNF_RESULT_SUCCESS_WL_ACCEPT_ALL)
+ {
+ cp_key_t key = cp_secu_generate_keys (
+ ctx, (u8 *) MASTER_GOLDEN_DPW,
+ strlen (MASTER_GOLDEN_DPW), CP_SECU_SALT_KEY_DAK);
+ cp_sta_own_data_set_dak (ctx, key);
+ cnf.result = CP_MSG_CC_ASSOC_CNF_RESULT_SUCCESS;
+ }
+ else if (cnf.result == CP_MSG_CC_ASSOC_CNF_RESULT_SUCCESS)
+ cp_sta_own_data_set_dak (
+ ctx, cp_eoc_sta_own_data_get_original_dak (ctx));
+
+ ctx->sta_action.assoc.fast_retry = false;
+ /* Update state. */
+ cp_sta_own_data_set_tei (ctx, cnf.sta_tei);
+ /* Change our AVLN. */
+ cp_sta_t *sta =
+ cp_sta_mgr_sta_get_from_mac (
+ ctx, ctx->sta_action.assoc.peer.mac);
+ dbg_assert (sta);
+ cp_sta_mgr_set_our_avln (ctx, cp_sta_get_net (sta));
+ slab_release (sta);
+
+ /* Create request for KEYs */
+ cp_msg_cm_get_key_req_t get_key = {
+ .relayed = false, .key_type = CP_MSG_KEY_NEK,
+ .nid = cp_sta_own_data_get_nid (ctx) };
+ cp_secu_protocol_run_new (
+ &ctx->sta_action.assoc.prun, 0, &ctx->rnd);
+
+ mfs = mac_store_mfs_add_tx (ctx->mac_store, false, true,
+ MAC_LID_NONE,
+ mme->peer.tei, &added);
+ if (added)
+ sar_mfs_add (ctx->sar, (mfs_t *)mfs);
+
+ if (mfs)
+ blk_release (mfs);
+
+ /*STA is authenticated data can be transferred */
+ uint i;
+ for (i = 0; i < MAC_CAP_NB; i++)
+ {
+ mfs = mac_store_mfs_add_tx (ctx->mac_store, false, false,
+ MAC_LLID_MIN + i,
+ mme->peer.tei, &added);
+ if (added)
+ sar_mfs_add (ctx->sar, (mfs_t *)mfs);
+ if (mfs)
+ {
+ mfs->cap = i;
+ blk_release (mfs);
+ }
+ }
+
+ cp_msg_cm_get_key_req_send (ctx, &mme->peer, CP_MME_PEKS_DAK,
+ &ctx->sta_action.assoc.prun, &get_key);
+ /* Change state. */
+ cp_fsm_branch (ctx, ASSOCIATING, CC_ASSOC_CNF, success);
+ DBG_PRINT("sta: assoc");
+ cp_eoc_sta_action_drv__drv_sta_get_status_ind (ctx);
+ }
+}
+
+void
+cp_eoc_sta_action_assoc__associating_no_beacons (cp_t *ctx)
+{
+ cp_eoc_sta_action_sta_clear_status (ctx);
+}
+
+/* Simply goto detecting beacon and wait for beacon to start assoc */
+void
+cp_eoc_sta_action_assoc__unassociated_retry (cp_t *ctx)
+{
+ dbg_assert (ctx);
+}
+
+void
+cp_eoc_sta_action_assoc__associated_key_cnf (cp_t *ctx, cp_mme_rx_t *mme)
+{
+ dbg_assert (ctx);
+ dbg_assert (mme);
+ cp_msg_cm_get_key_cnf_t cnf;
+ bool added, accepted = true;
+ mfs_tx_t *mfs;
+ /* Check response. */
+ if (!cp_mme_peer_cmp (&mme->peer, &ctx->sta_action.assoc.peer)
+ || !cp_msg_cm_get_key_cnf_receive (ctx, mme, &cnf)
+ || !cp_secu_protocol_check (&ctx->sta_action.assoc.prun, &mme->prun,
+ CP_SECU_PROTOCOL_RUN_CHECK_RESULT_NEXT)
+ || cnf.nid != cp_sta_own_data_get_nid (ctx)
+ || (mme->peks != CP_MME_PEKS_DAK))
+ accepted = false;
+
+ if (!accepted)
+ {
+ /* Unrelated message, drop. */
+ cp_fsm_branch (ctx, ASSOCIATED, CM_GET_KEY_CNF, unrelated);
+ }
+ else if (cnf.result != CP_MSG_CM_GET_KEY_CNF_RESULT_KEY_GRANTED)
+ {
+ /* Failure indication. */
+ cp_fsm_branch (ctx, ASSOCIATED, CM_GET_KEY_CNF, not_granted);
+ }
+ else if (cnf.key_type == CP_MSG_KEY_NEK)
+ {
+ /* Use the first nex_index from msg, BEACON */
+ /* Use the new key. */
+ cp_beacon_change_nek (ctx, cnf.eks, cnf.key, true);
+ /*STA is authenticated data can be transferred */
+ uint i;
+ for (i = 0; i < MAC_CAP_NB; i++)
+ {
+ mfs = mac_store_mfs_add_tx (ctx->mac_store, false, false,
+ MAC_LLID_MIN + i,
+ mme->peer.tei, &added);
+ if (added)
+ sar_mfs_add (ctx->sar, (mfs_t *)mfs);
+ if (mfs)
+ {
+ mfs->cap = i;
+ blk_release (mfs);
+ }
+ }
+ /* Signal joined state.
+ * TODO: cp_fsm_trigger_new_event (ctx, bare, joined); */
+ /* Reset beacon loss counter. */
+ cp_sta_own_data_t *own = cp_sta_mgr_get_sta_own_data (ctx);
+ ctx->sta_action.assoc.beacon_loss = 0;
+ cp_fsm_branch (ctx, ASSOCIATED, CM_GET_KEY_CNF, all_keys_granted);
+ own->num_good_assoc_auth ++;
+
+ /* Create request for KEYs */
+ cp_msg_cm_get_key_req_t get_key = {
+ .relayed = false, .key_type = CP_MSG_KEY_TEK,
+ .nid = cp_sta_own_data_get_nid (ctx) };
+ cp_secu_protocol_run_new (&ctx->sta_action.assoc.prun, 0, &ctx->rnd);
+
+ cp_msg_cm_get_key_req_send (ctx, &mme->peer, CP_MME_PEKS_DAK,
+ &ctx->sta_action.assoc.prun, &get_key);
+ cp_sta_own_data_set_authenticated_status (ctx, true);
+ cp_eoc_sta_action_drv__drv_sta_get_status_ind (ctx);
+ }
+}
+
+void
+cp_eoc_sta_action_auth__authenticated_key_cnf (cp_t *ctx, cp_mme_rx_t *mme)
+{
+ dbg_assert (ctx);
+ dbg_assert (mme);
+ cp_msg_cm_get_key_cnf_t cnf;
+ bool accepted = true;
+
+ /* Check response. */
+ if (!cp_mme_peer_cmp (&mme->peer, &ctx->sta_action.assoc.peer)
+ || !cp_msg_cm_get_key_cnf_receive (ctx, mme, &cnf)
+ || !cp_secu_protocol_check (&ctx->sta_action.assoc.prun, &mme->prun,
+ CP_SECU_PROTOCOL_RUN_CHECK_RESULT_LAST)
+ || cnf.nid != cp_sta_own_data_get_nid (ctx)
+ || (mme->peks != CP_MME_PEKS_DAK))
+ accepted = false;
+
+ if (accepted
+ && cnf.key_type == CP_MSG_KEY_TEK
+ && cnf.result == CP_MSG_CM_GET_KEY_CNF_RESULT_KEY_GRANTED)
+ {
+ /* Use the new key. TODO Stop time timer */
+ cp_sta_own_data_set_authenticated_status (ctx, true);
+ // Get the network.
+ cp_net_t *net = cp_sta_mgr_get_our_avln (ctx);
+ cp_sta_t *sta =
+ cp_sta_mgr_sta_get_assoc (ctx, net, mme->peer.tei);
+
+ if (sta)
+ {
+ cp_sta_set_authenticated (ctx, sta, true);
+ slab_release (sta);
+ }
+ DBG_PRINT("sta: auth eks=%d", cnf.eks);
+ }
+}
+
+void
+cp_eoc_sta_action_auth__authenticated_set_key_req (cp_t *ctx,
+ cp_mme_rx_t *mme)
+{
+ dbg_assert (ctx);
+ dbg_assert (mme);
+ /* Get our CCo. */
+ cp_net_t *net = cp_sta_mgr_get_our_avln (ctx);
+ cp_mme_peer_t peer;
+ cp_net_get_cco_peer (ctx, net, &peer);
+ /* Check received message. */
+ cp_msg_cm_set_key_req_t req;
+
+ if (cp_mme_peer_cmp (&mme->peer, &peer)
+ && cp_msg_cm_set_key_req_receive (ctx, mme, &req)
+ && req.nid == cp_sta_own_data_get_nid (ctx))
+ {
+ if ((req.key_type == CP_MSG_KEY_NEK)
+ && (mme->peks == CP_MME_PEKS_DAK)
+ && (cp_secu_protocol_check
+ (&ctx->sta_action.nek_prun, &mme->prun,
+ CP_SECU_PROTOCOL_RUN_CHECK_RESULT_NEXT)))
+ {
+
+ ctx->sta_action.nek_prun = mme->prun;
+ /* Send response. */
+ cp_msg_cm_set_key_cnf_t cnf = {
+ CP_MSG_CM_SET_KEY_CNF_RESULT_SUCCESS,
+ CP_CCO_LEVEL };
+ cp_secu_protocol_next (&ctx->sta_action.nek_prun, &ctx->rnd,
+ true);
+ cp_msg_cm_set_key_cnf_send (ctx, &peer, CP_MME_PEKS_DAK,
+ &ctx->sta_action.nek_prun,
+ &cnf);
+ /* Update NEK. */
+ cp_beacon_change_nek (ctx, req.new_eks, req.new_key, false);
+ DBG_PRINT("key_exc: eks=%d", req.new_eks);
+ }
+ else if ((req.key_type == CP_MSG_KEY_NONCE_ONLY)
+ && (mme->peks == CP_MME_PEKS_DAK)
+ && (cp_secu_protocol_check
+ (NULL, &mme->prun, CP_SECU_PROTOCOL_RUN_CHECK_RESULT_NEW)))
+ {
+ /* Send response. */
+ cp_msg_cm_set_key_cnf_t cnf = {
+ CP_MSG_CM_SET_KEY_CNF_RESULT_SUCCESS,
+ CP_CCO_LEVEL };
+
+ ctx->sta_action.nek_prun = mme->prun;
+ cp_secu_protocol_next (&ctx->sta_action.nek_prun, &ctx->rnd,
+ false);
+ ctx->sta_action.nek_prun.my_nonce = lib_rnd32 (&ctx->rnd);
+ cp_msg_cm_set_key_cnf_send (ctx, &peer, CP_MME_PEKS_DAK,
+ &ctx->sta_action.nek_prun,
+ &cnf);
+ }
+ }
+ else
+ {
+ /* Send response. */
+ cp_msg_cm_set_key_cnf_t cnf = {
+ CP_MSG_CM_SET_KEY_CNF_RESULT_FAILURE,
+ CP_CCO_LEVEL };
+ cp_secu_protocol_run_t prun = mme->prun;
+ prun.my_nonce = lib_rnd32 (&ctx->rnd);
+ cp_secu_protocol_next (&prun, &ctx->rnd, true);
+ cp_msg_cm_set_key_cnf_send (ctx, &peer, CP_MME_PEKS_DAK, &prun,
+ &cnf);
+ }
+}
+
+/* Leave state and start detection again */
+void
+cp_eoc_sta_action_assoc__associated_no_beacons (cp_t *ctx)
+{
+ cp_eoc_sta_action_sta_clear_status (ctx);
+}
+
+/* Left assosiation and goto unassoc state and go again: */
+void
+cp_eoc_sta_action_assoc__associated_timeout (cp_t *ctx)
+{
+ cp_sta_own_data_t *own = cp_sta_mgr_get_sta_own_data (ctx);
+ own->num_bad_could_not_auth ++;
+ cp_eoc_sta_action_sta_clear_status (ctx);
+}
+
+void
+cp_eoc_sta_action_assoc__associated_leave (cp_t *ctx, cp_mme_rx_t *mme)
+{
+ dbg_assert (ctx);
+ dbg_assert (mme);
+
+ /* Check received message. */
+ enum cp_msg_cc_leave_ind_reason_t reason;
+ cp_nid_t nid;
+
+ cp_sta_own_data_t *own = cp_sta_mgr_get_sta_own_data (ctx);
+ own->num_leave ++;
+ if (cp_msg_cc_leave_ind_receive (ctx, mme, &reason, &nid)
+ && nid == cp_sta_own_data_get_nid (ctx))
+ {
+ cp_msg_cc_leave_rsp_send (ctx, &mme->peer);
+ cp_fsm_branch (ctx, ASSOCIATED, CC_LEAVE_IND, ok);
+ cp_eoc_sta_action_sta_clear_status (ctx);
+ }
+ else
+ {
+ cp_fsm_branch (ctx, ASSOCIATED, CC_LEAVE_IND, nok);
+ }
+}
+
+/* start LEAVE process: TODO */
+void
+cp_eoc_sta_action_assoc__authenticated_leave (cp_t *ctx, cp_mme_rx_t *mme)
+{
+ dbg_assert (ctx);
+ dbg_assert (mme);
+
+ /* Check received message. */
+ enum cp_msg_cc_leave_ind_reason_t reason;
+ cp_nid_t nid;
+
+ cp_sta_own_data_t *own = cp_sta_mgr_get_sta_own_data (ctx);
+ own->num_leave ++;
+ if (cp_msg_cc_leave_ind_receive (ctx, mme, &reason, &nid)
+ && nid == cp_sta_own_data_get_nid (ctx))
+ {
+ cp_msg_cc_leave_rsp_send (ctx, &mme->peer);
+ cp_fsm_branch (ctx, AUTHENTICATED, CC_LEAVE_IND, ok);
+ cp_eoc_sta_action_sta_clear_status (ctx);
+ }
+ else
+ {
+ cp_fsm_branch (ctx, AUTHENTICATED, CC_LEAVE_IND, nok);
+ }
+}
+
+/* Actions to left auth state: start LEAVE process TODO */
+void
+cp_eoc_sta_action_assoc__authenticated_no_beacons (cp_t *ctx)
+{
+ cp_eoc_sta_action_sta_clear_status (ctx);
+}
+
+void
+cp_eoc_sta_action_assoc__beacon_not_received (cp_t *ctx)
+{
+ static int ltra = 0;
+ if (ltra > 5) ltra = 0; else ltra++;
+ GPIO_SET (LED_TRAFFIC, !ltra);
+
+ dbg_assert (ctx);
+ ctx->sta_action.assoc.beacon_loss++;
+ if (ctx->sta_action.assoc.beacon_loss > CP_MAX_NO_BEACON)
+ {
+ ctx->sta_action.assoc.beacon_loss = 0;
+ cp_fsm_trigger_new_event (ctx, bare, no_beacons);
+ }
+#if CONFIG_CP_EOC_STA_CON_ALLOWED
+ DBG_PRINT ("d=%u bcn_not_rcv", phy_date () / MAC_MS_TO_TCK (1));
+#endif
+}
+
+void
+cp_eoc_sta_action_unassoc__start_retry_timer (cp_t *ctx)
+{
+ dbg_assert (ctx);
+ /* randomize start of assoc process */
+ ctx->sta_action.assoc.init_count = CP_EOC_STA_ASSOC_REQ_OFFSET;
+ cp_fsm_event_t *event = cp_fsm_event_bare_new (
+ ctx, CP_FSM_EVENT_TYPE_timeout_unassociating);
+ cp_sta_core_gen_timed_event (ctx, &ctx->sta_action.assoc.timer, event,
+ (ctx->sta_action.assoc.fast_retry) ?
+ UNASSOC_FAST_RETRY_TIMEOUT_MS :
+ UNASSOC_RETRY_TIMEOUT_MS);
+}
+
+void
+cp_eoc_sta_action_unassoc__stop_retry_timer (cp_t *ctx)
+{
+ dbg_assert (ctx);
+ cp_sta_core_stop_timed_or_cyclic_event (
+ ctx, &ctx->sta_action.assoc.timer);
+}
+
+/* Find the place for this function and meaning TODO */
+void
+cp_eoc_sta_action_assoc__associated_encrypt_payload_rsp (cp_t *ctx,
+ cp_mme_rx_t *mme)
+{
+}
+
+void
+cp_eoc_sta_action_auth__authenticated_set_out_lev(cp_t *ctx, cp_mme_rx_t *mme)
+{
+ dbg_assert (ctx);
+
+ uint output_level;
+ bool ok;
+
+ ok = cp_msg_eoc_sta_vs_set_out_lev_ind_receive (ctx, mme, &output_level);
+ if (ok)
+ {
+ cp_sta_own_data_set_output_level (ctx, output_level);
+ cp_mme_peer_t peer;
+ peer.tei = MAC_TEI_FOREIGN;
+ peer.mac = cp_sta_own_data_get_mac_address (ctx);
+ peer.eth_type = HPAV_MTYPE_MME;
+ peer.vlan_tci = 0;
+ /* Get the output level stored. */
+ output_level = cp_sta_own_data_get_output_level (ctx);
+ cp_msg_vs_eoc_cco_set_out_lev_ind_send (ctx, &peer, output_level);
+ DBG_PRINT_2 ("out_lev = %d", output_level);
+ }
+}
+
+void
+cp_eoc_sta_action_assoc__detecting_no_beacons (cp_t *ctx)
+{
+ cp_eoc_sta_action_sta_clear_status (ctx);
+}
+
+void
+cp_eoc_sta_action_assoc__unassoc_no_beacons (cp_t *ctx)
+{
+ cp_eoc_sta_action_sta_clear_status (ctx);
+}
+
+void
+cp_eoc_sta_action_unassoc__beacon_received (
+ cp_t *ctx, bsu_beacon_t *beacon, cp_net_t *net, cp_sta_t *sta)
+{
+ dbg_assert (ctx);
+ dbg_assert (beacon);
+ dbg_assert (net);
+ dbg_assert (sta);
+
+ ctx->sta_action.assoc.beacon_loss = 0;
+}
diff --git a/cesar/cp/eoc/sta/action/src/drv.c b/cesar/cp/eoc/sta/action/src/drv.c
new file mode 100644
index 0000000000..33f024faa5
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/src/drv.c
@@ -0,0 +1,164 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/sta/action/src/drv.c
+ * \brief EoC STA action, driver related definitions.
+ * \ingroup cp_eoc_sta_action
+ */
+#include "common/std.h"
+
+/* Private headers. */
+#include "cp/inc/context.h"
+
+/* Public headers. */
+#include "cp/sta/action/action.h"
+#include "cp/msg/msg.h"
+#include "cp/eoc/cco/bw/bw.h"
+#include "ce/rx/rx.h"
+
+/* Config headers. */
+#include "config/cp/msg/eoc.h"
+
+
+void
+cp_eoc_sta_action_drv__stopped__drv_sta_set_tonemask_req (
+ cp_t *ctx, cp_mme_rx_t *mme)
+{
+ u32 tonemask[PHY_TONEMASK_WORDS];
+ bool ok = cp_msg_drv_sta_set_tonemask_req_receive (ctx, mme, tonemask);
+ if (ok)
+ {
+#if CONFIG_CP_MSG_EOC_DRV_MME
+ /* Commit to mac configuration and update tonemask informations. */
+ memcpy (ctx->mac_config->tonemask_info.tonemask, tonemask,
+ sizeof (tonemask));
+#else
+ /* TODO. */
+#endif
+ bool adjust =
+ tonemask_carrier_nb (ctx->mac_config->tonemask_info.tonemask)
+ < 375;
+ pbproc_parameters_adjust (ctx->pbproc, adjust);
+ cp_eoc_cco_bw_allocations_adjust (ctx, adjust);
+ /* Tonemask will be programmed once the PBProc is activated. */
+ tonemask_update (&ctx->mac_config->tonemask_info);
+ ce_rx_init_tonemask (ctx->ce_rx);
+ }
+ cp_msg_drv_any_cnf_send (ctx, &mme->peer, DRV_STA_SET_TONEMASK_CNF,
+ ok ? CP_MSG_DRV_RESULT_SUCCESS
+ : CP_MSG_DRV_RESULT_FAILURE);
+}
+
+void
+cp_eoc_sta_action_drv__stopped__drv_sta_set_key_req (
+ cp_t *ctx, cp_mme_rx_t *mme)
+{
+ cp_key_t nmk;
+ enum cp_msg_drv_sta_set_key_type_t type;
+ cp_nid_t nid;
+ cp_security_level_t sl;
+
+ dbg_assert (ctx);
+ dbg_assert (mme);
+
+ /* Try to decode the DRV MME. */
+ if (cp_msg_drv_sta_set_key_req_receive (ctx, mme, &nmk, &type, &nid, &sl))
+ {
+ /* Set the NMK. */
+ cp_sta_own_data_set_nmk (ctx, nmk, type);
+
+ /* We need to have a NID; let's build it if we do not have one. */
+ if (type == CP_MSG_DRV_STA_SET_KEY_TYPE_CHANGE_SECURITY_LEVEL)
+ {
+ /* Build NID from SL and NMK. */
+ cp_sta_own_data_set_security_level (ctx, sl);
+ nid = cp_secu_nmk2nid (ctx, nmk, sl);
+ }
+ /* Always setup NID. */
+ cp_sta_own_data_set_nid (ctx, nid);
+ dbg_do (
+ if (type == CP_MSG_DRV_STA_SET_KEY_TYPE_CHANGE_SECURITY_LEVEL)
+ dbg_assert (sl == cp_sta_own_data_get_security_level (ctx));
+ );
+
+ /* Reply with success. */
+ cp_msg_drv_any_cnf_send (ctx, &mme->peer, DRV_STA_SET_KEY_CNF,
+ CP_MSG_DRV_RESULT_SUCCESS);
+ }
+ else
+ {
+ /* Error in decoding, let's reply with an error. */
+ cp_msg_drv_any_cnf_send (ctx, &mme->peer, DRV_STA_SET_KEY_CNF,
+ CP_MSG_DRV_RESULT_FAILURE);
+ }
+}
+
+void
+cp_eoc_sta_action_drv__drv_sta_set_slave_config_req (
+ cp_t *ctx, cp_mme_rx_t *mme)
+{
+ /* Check parameter. */
+ dbg_assert (mme);
+
+ char config[HPAV_MME_PAYLOAD_MAX_SIZE];
+ cp_msg_drv_result_t result = CP_MSG_DRV_RESULT_FAILURE;
+
+ if (cp_msg_drv_sta_set_slave_req_receive (ctx, mme, config))
+ {
+ /* Correctly decoded, let's try to set it up. */
+ if (lib_stats_write_stats (config))
+ {
+ /* Success. */
+ result = CP_MSG_DRV_RESULT_SUCCESS;
+ }
+ }
+ cp_msg_drv_any_cnf_send (ctx, &mme->peer,
+ DRV_EOC_STA_SET_SLAVE_CONFIG_CNF,
+ result);
+}
+
+void
+cp_eoc_sta_action_drv__drv_sta_set_eoc_config_req (
+ cp_t *ctx, cp_mme_rx_t *mme)
+{
+ uint exp, value;
+ cp_msg_drv_result_t result = CP_MSG_DRV_RESULT_FAILURE;
+ dbg_assert (ctx);
+ dbg_assert (mme);
+
+ if (cp_msg_drv_sta_set_eoc_req_receive (ctx, mme, &exp, &value))
+ {
+ result = CP_MSG_DRV_RESULT_SUCCESS;
+ phy_tx_scale_adapt_exp_set (ctx->phy, exp);
+ phy_tx_scale_adapt_set (ctx->phy, value);
+ }
+
+ cp_msg_drv_any_cnf_send (ctx, &mme->peer,
+ DRV_EOC_STA_SET_EOC_CONFIG_CNF,
+ result);
+}
+
+void
+cp_eoc_sta_action_drv__drv_sta_get_status_ind (cp_t *ctx)
+{
+ dbg_assert(ctx);
+ cp_msg_drv_sta_status_status_t state =
+ CP_MSG_DRV_STA_STATUS_STATUS_UNASSOC;
+
+ cp_mme_peer_t peer;
+
+ peer.tei = MAC_TEI_FOREIGN;
+ peer.mac = ctx->sta_mgr.sta_own_data.mac_addr;
+ peer.eth_type = HPAV_MTYPE_MME;
+ peer.vlan_tci = 0;
+ if (cp_sta_own_data_get_tei (ctx))
+ state = CP_MSG_DRV_STA_STATUS_STATUS_ASSOC;
+ if (cp_sta_own_data_get_authenticated_status (ctx))
+ state = CP_MSG_DRV_STA_STATUS_STATUS_AUTH;
+ cp_msg_drv_get_status_ind_send (ctx, &peer, DRV_STA_STATUS_IND, state);
+}
diff --git a/cesar/cp/eoc/sta/action/src/poweron.c b/cesar/cp/eoc/sta/action/src/poweron.c
new file mode 100644
index 0000000000..3a8926927d
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/src/poweron.c
@@ -0,0 +1,87 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/sta/action/src/poweron.c
+ * \brief EoC STA action, power on procedure related definitions.
+ * \ingroup cp_eoc_sta_action
+ */
+#include "common/std.h"
+
+/* Private headers. */
+#include "cp/inc/context.h"
+
+/* Public headers. */
+#include "cp/defs.h"
+#include "cp/eoc/cco/bw/bw.h"
+#include "cp/sta/action/action.h"
+#include "cp/sta/mgr/sta_mgr.h"
+#include "cp/beacon/beacon.h"
+
+/*
+ * Initial settings for all Master and slave
+ * \param ctx the module context.
+ */
+PRIVATE void
+cp_eoc_sta_action__power_on_no_beacons (cp_t *ctx)
+{
+ cp_net_t *net;
+ cp_nid_t nid;
+ cp_snid_t snid;
+ cp_sta_own_data_t *own;
+ dbg_assert (ctx);
+
+ cp_sta_own_data_set_tei (ctx, MAC_TEI_UNASSOCIATED);
+ cp_sta_own_data_set_authenticated_status (ctx, false);
+
+ /* Set our AVLN. */
+ snid = cp_sta_own_data_get_snid (ctx);
+ nid = cp_sta_own_data_get_nid (ctx);
+
+ net = cp_sta_mgr_add_avln (ctx, snid, nid);
+ cp_sta_mgr_set_our_avln (ctx, net);
+
+ /* Set the CCo status in the station own data. */
+ own = cp_sta_mgr_get_sta_own_data (ctx);
+ own->nid_track = cp_sta_own_data_get_nid (ctx);
+ cp_sta_own_data_set_cco_status (ctx, false);
+ own->tei_track = MAC_TEI_UNASSOCIATED;
+ /* set start values */
+ ctx->sta_action.assoc.retry = 0;
+ ctx->sta_action.assoc.beacon_loss = 0;
+}
+
+void
+cp_eoc_sta_action_poweron__many__to_idle (cp_t *ctx)
+{
+ dbg_assert (ctx);
+ /* Cleanup. */
+ pbproc_activate (ctx->pbproc, false);
+ sar_activate (ctx->sar, false);
+ sar_cleanup (ctx->sar);
+ cp_beacon_deactivate (ctx);
+ /* Signal station is stopped. */
+ cp_fsm_trigger_new_event (ctx, bare, stopped);
+}
+
+void
+cp_eoc_sta_action_poweron__idle__to_poweron (cp_t *ctx)
+{
+ dbg_assert (ctx);
+ cp_eoc_sta_action__power_on_no_beacons (ctx);
+ cp_eoc_cco_bw_sta_allocations (ctx);
+ cp_beacon_poweron_init (ctx);
+ bsu_power_on (ctx->bsu, cp_sta_own_data_get_snid (ctx));
+ bsu_activate (ctx->bsu, true);
+ /* force beacon tracking on startup */
+ cp_beacon_process_untracked_avln (ctx);
+ cp_beacon_reconfigure_timer (ctx, false);
+ sar_activate (ctx->sar, true);
+ pbproc_activate (ctx->pbproc, true);
+ ctx->sta_action.assoc.peer = CP_MME_PEER (MAC_BROADCAST,
+ MAC_TEI_UNASSOCIATED);
+}
diff --git a/cesar/cp/eoc/sta/action/src/vs.c b/cesar/cp/eoc/sta/action/src/vs.c
new file mode 100644
index 0000000000..f34d1d6228
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/src/vs.c
@@ -0,0 +1,317 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/sta/action/src/vs.c
+ * \brief Vendor Specific EoC definitions.
+ * \ingroup cp_eoc_sta_action
+ */
+#include "common/std.h"
+
+/* Private headers. */
+#include "cp/eoc/sta/action/inc/vs.h"
+#include "cp/inc/context.h"
+#include "cl/inc/context.h"
+#include "ce/rx/bitloading/inc/nsr.h"
+#include "cp/eoc/msg/inc/msg_vs.h"
+#include "mac/pbproc/inc/context.h"
+#include "mac/sar/inc/context.h"
+
+/* Public headers. */
+#include "cp/eoc/sta/action/vs.h"
+#include "cp/sta/action/action.h"
+#include "cp/msg/msg.h"
+#include "cp/eoc/cco/bw/bw.h"
+#include <math.h> /* for log(). */
+
+#define RT_STATS_OFFSET(a, b) rt_stats.a = b - rt_stats_offset.a
+
+void
+cp_eoc_sta_action_vs__vs_eoc_get_info_req (
+ cp_t *ctx, cp_mme_rx_t *mme)
+{
+ dbg_assert(ctx);
+ dbg_assert(mme);
+
+ sta_t *sta = NULL;
+
+ bool ok;
+ cp_msg_vs_eoc_get_info_req_result_t status =
+ CP_MSG_VS_EOC_GET_INFO_REQ_RESULT_SUCCESS;
+ u8 internal_eoc_index;
+ u8 control;
+ u16 tei = 0;
+ s8 attenuation = 0;
+ u8 snr = 0;
+ u8 snr_sum = 0;
+ u16 phy_uplink_speed = 0;
+ u16 phy_downlink_speed = 0;
+ u8 output_power = 0;
+ u32 tx_success_counter = 0;
+ u32 tx_crc_error_counter = 0;
+ u32 tx_other_error_counter = 0;
+ u32 rx_success_counter = 0;
+ u32 rx_crc_error_counter = 0;
+ u32 rx_other_error_counter = 0;
+
+ ok = cp_msg_vs_eoc_cco_get_info_req_receive (
+ ctx, mme, &internal_eoc_index, &control);
+ if (ok)
+ {
+ tei = ctx->sta_mgr.sta_own_data.tei;
+
+ if (tei != MAC_TEI_UNASSOCIATED)
+ {
+ sta = mac_store_sta_get (ctx->mac_store,
+ ctx->sta_action.assoc.peer.tei);
+ if (sta)
+ {
+ if (sta->authenticated)
+ {
+ snr_sum = ce_rx_bl_nsr_compute_total_mean (
+ &sta->ce_rx_bt);
+ snr = 10 * log (snr_sum);
+ attenuation = sta->agc_gain;
+ }
+ blk_release (sta);
+ }
+
+ phy_uplink_speed = cp_sta_action_get_average_ble (
+ ctx, ctx->sta_action.assoc.peer.tei, true, false)
+ * MAX_THROUGHPUT_MBPS / DEFAULT_STREAM_QUALITY;
+ phy_downlink_speed = cp_sta_action_get_average_ble (
+ ctx, ctx->sta_action.assoc.peer.tei, false, false)
+ * MAX_THROUGHPUT_MBPS / DEFAULT_STREAM_QUALITY;
+ }
+
+ output_power = ctx->sta_mgr.sta_own_data.output_level;
+ if (control == 1)
+ {
+ ctx->pbproc->stats.tx_data = 0;
+ ctx->pbproc->stats.tx_data_cancel = 0;
+ ctx->pbproc->stats.tx_data_wack_noack = 0;
+ ctx->pbproc->stats.rx_data = 0;
+ ctx->pbproc->stats.rx_data_error = 0;
+ ctx->pbproc->stats.rx_crc_error = 0;
+ }
+ tx_success_counter = ctx->pbproc->stats.tx_data
+ - ctx->pbproc->stats.tx_data_cancel
+ - ctx->pbproc->stats.tx_data_wack_noack;
+ /* N.A. */
+ tx_crc_error_counter = 0;
+ tx_other_error_counter = ctx->pbproc->stats.tx_data_cancel
+ + ctx->pbproc->stats.tx_data_wack_noack;
+ rx_success_counter = ctx->pbproc->stats.rx_data
+ - ctx->pbproc->stats.rx_data_error;
+ rx_crc_error_counter = ctx->pbproc->stats.rx_crc_error;
+ rx_other_error_counter = ctx->pbproc->stats.rx_data_error;
+ }
+ else
+ {
+ status = CP_MSG_VS_EOC_GET_INFO_REQ_RESULT_FAILURE;
+ }
+
+ cp_msg_vs_eoc_cco_get_info_cnf_send (
+ ctx, &mme->peer, status, tei, attenuation, snr,
+ phy_uplink_speed, phy_downlink_speed, output_power,
+ tx_success_counter, tx_crc_error_counter, tx_other_error_counter,
+ rx_success_counter, rx_crc_error_counter, rx_other_error_counter);
+}
+
+void
+cp_eoc_sta_action_vs__vs_eoc_diagnostic_info_req (
+ cp_t *ctx, cp_mme_rx_t *mme)
+{
+ dbg_assert(ctx);
+ dbg_assert(mme);
+
+ bool ok;
+ cp_msg_vs_eoc_diagnostic_info_req_result_t status =
+ CP_MSG_VS_EOC_DIAGNOSTIC_INFO_REQ_RESULT_SUCCESS;
+ u8 internal_eoc_index;
+ u8 control;
+ u8 assoc_stat = 0;
+ u64 nid = 0;
+ u8 num_slots = 0;
+ mac_t he_mac_address = 0;
+ u16 est_avg_phy_rate = 0;
+ u8 num_good_assoc_auth = 0;
+ u16 num_bad_could_not_assoc = 0;
+ u32 num_bad_assoc_failure = 0;
+ u32 num_bad_could_not_auth = 0;
+ u32 num_leave = 0;
+ cp_sta_own_data_t *own = cp_sta_mgr_get_sta_own_data (ctx);
+
+ ok = cp_msg_vs_eoc_cco_diagnostic_info_req_receive (
+ ctx, mme, &internal_eoc_index, &control);
+ if (ok)
+ {
+ if (ctx->sta_mgr.sta_own_data.tei == MAC_TEI_UNASSOCIATED)
+ {
+ assoc_stat = 0;
+ }
+ else if (!ctx->mac_config->authenticated)
+ {
+ assoc_stat = 1;
+ }
+ else
+ {
+ assoc_stat = 2;
+ }
+
+ nid = ctx->sta_mgr.our_avln->nid;
+ num_slots = 1;
+ he_mac_address = ctx->sta_action.assoc.peer.mac;
+ est_avg_phy_rate = 0;
+
+ if (control == 1)
+ {
+ own->num_good_assoc_auth = 0;
+ own->num_bad_could_not_assoc = 0;
+ own->num_bad_assoc_failure = 0;
+ own->num_bad_could_not_auth = 0;
+ own->num_leave = 0;
+ }
+ num_good_assoc_auth = own->num_good_assoc_auth;
+ num_bad_could_not_assoc = own->num_bad_could_not_assoc;
+ num_bad_assoc_failure = own->num_bad_assoc_failure;
+ num_bad_could_not_auth = own->num_bad_could_not_auth;
+ num_leave = own->num_leave;
+ }
+ else
+ {
+ status = CP_MSG_VS_EOC_DIAGNOSTIC_INFO_REQ_RESULT_FAILURE;
+ }
+
+ cp_msg_vs_eoc_cco_diagnostict_info_cnf_send (
+ ctx, &mme->peer, status, assoc_stat, nid, num_slots, he_mac_address,
+ est_avg_phy_rate, num_good_assoc_auth, num_bad_could_not_assoc,
+ num_bad_assoc_failure, num_bad_could_not_auth, num_leave);
+}
+
+void
+cp_eoc_sta_action_vs__vs_eoc_get_real_time_statistics_req (
+ cp_t *ctx, cp_mme_rx_t *mme)
+{
+ bool ok = false;
+ cp_msg_vs_eoc_get_info_req_result_t status =
+ CP_MSG_VS_EOC_GET_REAL_TIME_STATISTICS_REQ_RESULT_SUCCESS;
+ u8 clear = 0;
+ static bool init = false;
+ real_time_stats_t rt_stats;
+ static real_time_stats_t rt_stats_offset;
+ static uint rx_pb_count_offset = 0;
+ if (!init)
+ {
+ memset (&rt_stats, 0x0, sizeof (real_time_stats_t));
+ memset (&rt_stats_offset, 0x0, sizeof (real_time_stats_t));
+ init = true;
+ }
+ uint num;
+ uint div;
+
+ dbg_assert(ctx);
+ dbg_assert(mme);
+
+ ok = cp_msg_vs_eoc_cco_get_real_time_stats_req_receive (ctx, mme, &clear);
+
+ if (ok)
+ {
+ if (clear == 1)
+ {
+ memset (&rt_stats, 0x0, sizeof (real_time_stats_t));
+
+ rt_stats_offset.nb_unicast_packets_rx =
+ ctx->pbproc->stats.rx_data;
+ rt_stats_offset.nb_unicast_packets_tx =
+ ctx->pbproc->stats.tx_data_wack;
+ rt_stats_offset.nb_broadcast_packets_rx =
+ ctx->pbproc->stats.rx_data_woack
+ + ctx->pbproc->stats.rx_beacon;
+ rt_stats_offset.nb_broadcast_packets_tx =
+ ctx->pbproc->stats.tx_data_woack
+ + ctx->pbproc->stats.tx_data_beacon;
+ rt_stats_offset.nb_packets_rx_discarded =
+ ctx->pbproc->stats.rx_data_error;
+ rt_stats_offset.total_nb_bytes_rx =
+ ctx->cl->stats.rx_data_bytes;
+ rt_stats_offset.total_nb_bytes_tx =
+ ctx->cl->stats.tx_data_bytes;
+ rt_stats_offset.nb_packets_rx_short =
+ ctx->pbproc->stats.rx_data_empty;
+ rt_stats_offset.nb_packets_tx_short =
+ ctx->pbproc->stats.tx_data_empty;
+ rt_stats_offset.nb_packets_tx_dropped =
+ ctx->pbproc->stats.tx_data_cancel
+ + ctx->pbproc->stats.tx_late;
+ rt_stats_offset.nb_multicast_packets_rx =
+ ctx->cl->stats.rx_data_multicast;
+ rt_stats_offset.nb_multicast_packets_tx =
+ ctx->cl->stats.tx_data_multicast;
+
+#if CONFIG_STATS
+ rt_stats_offset.avg_pre_fec_bit_error_rate =
+ ctx->sar->stats.ber_sum;
+ rt_stats_offset.nb_packets_rx_crc =
+ ctx->sar->stats.rx_pb_crc_error_count;
+ rx_pb_count_offset = ctx->sar->stats.rx_pb_count;
+#else /* CONFIG_STATS */
+ rt_stats_offset.avg_pre_fec_bit_error_rate = 0;
+ rt_stats_offset.nb_packets_rx_crc = 0;
+ rx_pb_count_offset = 0;
+#endif /* CONFIG_STATS */
+ }
+ RT_STATS_OFFSET (nb_unicast_packets_rx,
+ ctx->pbproc->stats.rx_data);
+ RT_STATS_OFFSET (nb_unicast_packets_tx,
+ ctx->pbproc->stats.tx_data_wack);
+ RT_STATS_OFFSET (total_nb_bytes_rx,
+ ctx->cl->stats.rx_data_bytes);
+ RT_STATS_OFFSET (total_nb_bytes_tx,
+ ctx->cl->stats.tx_data_bytes);
+ RT_STATS_OFFSET (nb_broadcast_packets_rx,
+ ctx->pbproc->stats.rx_data_woack
+ + ctx->pbproc->stats.rx_beacon);
+ RT_STATS_OFFSET (nb_broadcast_packets_tx,
+ ctx->pbproc->stats.tx_data_woack
+ + ctx->pbproc->stats.tx_data_beacon);
+ RT_STATS_OFFSET (nb_multicast_packets_rx,
+ ctx->cl->stats.rx_data_multicast);
+ RT_STATS_OFFSET (nb_multicast_packets_tx,
+ ctx->cl->stats.tx_data_multicast);
+ RT_STATS_OFFSET (nb_packets_rx_short,
+ ctx->pbproc->stats.rx_data_empty);
+ RT_STATS_OFFSET (nb_packets_tx_short,
+ ctx->pbproc->stats.tx_data_empty);
+ RT_STATS_OFFSET (nb_packets_tx_dropped,
+ ctx->pbproc->stats.tx_data_cancel
+ + ctx->pbproc->stats.tx_late);
+ RT_STATS_OFFSET (nb_packets_rx_discarded,
+ ctx->pbproc->stats.rx_data_error);
+#if CONFIG_STATS
+ RT_STATS_OFFSET (nb_packets_rx_crc,
+ ctx->sar->stats.rx_pb_crc_error_count);
+ num = (ctx->sar->stats.ber_sum
+ - rt_stats_offset.avg_pre_fec_bit_error_rate);
+ div = ((ctx->sar->stats.rx_pb_count - rx_pb_count_offset)
+ - rt_stats.nb_packets_rx_crc) * MAC_PB520_BYTES * 8;
+ if (div != 0)
+ rt_stats.avg_pre_fec_bit_error_rate = (num * 10000) / div;
+ else
+ rt_stats.avg_pre_fec_bit_error_rate = 0;
+#else /* CONFIG_STATS */
+ rt_stats.nb_packets_rx_crc = 0;
+ rt_stats.avg_pre_fec_bit_error_rate = 0;
+#endif /* CONFIG_STATS */
+ }
+ else
+ {
+ status = CP_MSG_VS_EOC_GET_REAL_TIME_STATISTICS_REQ_RESULT_FAILURE;
+ }
+ cp_msg_vs_eoc_cco_get_real_time_stats_cnf_send (ctx, &mme->peer, status,
+ &rt_stats);
+}
diff --git a/cesar/cp/eoc/sta/action/stub/Module b/cesar/cp/eoc/sta/action/stub/Module
new file mode 100644
index 0000000000..3220ccf47b
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/stub/Module
@@ -0,0 +1,7 @@
+SOURCES := action.c poweron.c drv.c vs.c assoc.c
+
+ifneq ($(VARIANT),master)
+ SOURCES += assoc_slave.c
+endif
+
+MODULES := cp/sta/action/stub
diff --git a/cesar/cp/eoc/sta/action/stub/src/action.c b/cesar/cp/eoc/sta/action/stub/src/action.c
new file mode 100644
index 0000000000..eecda50828
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/stub/src/action.c
@@ -0,0 +1,19 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2011 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/sta/action/stub/src/action.c
+ * \brief Station action stubs.
+ * \ingroup cp_eoc_sta_action_stub
+ */
+#include "common/std.h"
+#include "cp/cp.h"
+
+void
+cp_eoc_sta_action_init (cp_t *ctx) __attribute__((weak));
+void
+cp_eoc_sta_action_init (cp_t *ctx) {};
diff --git a/cesar/cp/eoc/sta/action/stub/src/assoc.c b/cesar/cp/eoc/sta/action/stub/src/assoc.c
new file mode 100644
index 0000000000..34c1b5ef5a
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/stub/src/assoc.c
@@ -0,0 +1,21 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2012 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/sta/action/stub/src/assoc.c
+ * \brief « brief description »
+ * \ingroup cp_eoc_sta_action_stub
+ *
+ * « long description »
+ */
+#include "common/std.h"
+#include "cp/cp.h"
+
+void
+cp_eoc_sta_action_assoc__start_retry_timer (cp_t *ctx) __attribute__((weak));
+void
+cp_eoc_sta_action_assoc__start_retry_timer (cp_t *ctx) {}
diff --git a/cesar/cp/eoc/sta/action/stub/src/assoc_slave.c b/cesar/cp/eoc/sta/action/stub/src/assoc_slave.c
new file mode 100644
index 0000000000..1421b55ae7
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/stub/src/assoc_slave.c
@@ -0,0 +1,176 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2012 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eco/sta/action/stub/src/assoc_slave.c
+ * \brief « brief description »
+ * \ingroup cp_eoc_sta_action_stub
+ *
+ * « long description »
+ */
+#include "common/std.h"
+#include "cp/cp.h"
+#include "cp/mme.h"
+#include "cp/sta/mgr/sta.h"
+#include "cp/sta/mgr/net.h"
+#include "bsu/beacon/beacon.h"
+
+void
+cp_eoc_sta_action_sta_clear_status (cp_t *ctx) __attribute__((weak));
+void
+cp_eoc_sta_action_sta_clear_status (cp_t *ctx) {}
+
+void
+cp_eoc_sta_action_assoc__detecting_detected (cp_t *ctx) __attribute__((weak));
+void
+cp_eoc_sta_action_assoc__detecting_detected (cp_t *ctx) {}
+
+void
+cp_eoc_sta_action_detect__beacon_received (cp_t *ctx, bsu_beacon_t *beacon,
+ cp_net_t *net, cp_sta_t *sta)
+ __attribute__((weak));
+void
+cp_eoc_sta_action_detect__beacon_received (cp_t *ctx, bsu_beacon_t *beacon,
+ cp_net_t *net, cp_sta_t *sta) {}
+
+void
+cp_eoc_sta_action_assoc__beacon_received (cp_t *ctx, bsu_beacon_t *beacon,
+ cp_net_t *net, cp_sta_t *sta)
+ __attribute__((weak));
+void
+cp_eoc_sta_action_assoc__beacon_received (cp_t *ctx, bsu_beacon_t *beacon,
+ cp_net_t *net, cp_sta_t *sta) {}
+
+void
+cp_eoc_sta_action_auth__beacon_received (cp_t *ctx, bsu_beacon_t *beacon,
+ cp_net_t *net, cp_sta_t *sta)
+ __attribute__((weak));
+void
+cp_eoc_sta_action_auth__beacon_received (cp_t *ctx, bsu_beacon_t *beacon,
+ cp_net_t *net, cp_sta_t *sta) {}
+
+void
+cp_eoc_sta_action_assoc__associating_timeout (cp_t *ctx)
+ __attribute__((weak));
+void
+cp_eoc_sta_action_assoc__associating_timeout (cp_t *ctx) {}
+
+void
+cp_eoc_sta_action_assoc__associating_cnf (cp_t *ctx, cp_mme_rx_t *mme)
+ __attribute__((weak));
+void
+cp_eoc_sta_action_assoc__associating_cnf (cp_t *ctx, cp_mme_rx_t *mme) {}
+
+void
+cp_eoc_sta_action_assoc__associating_no_beacons (cp_t *ctx)
+ __attribute__((weak));
+void
+cp_eoc_sta_action_assoc__associating_no_beacons (cp_t *ctx) {}
+
+void
+cp_eoc_sta_action_assoc__unassociated_retry (cp_t *ctx)
+ __attribute__((weak));
+void
+cp_eoc_sta_action_assoc__unassociated_retry (cp_t *ctx) {}
+
+void
+cp_eoc_sta_action_assoc__associated_key_cnf (cp_t *ctx, cp_mme_rx_t *mme)
+ __attribute__((weak));
+void
+cp_eoc_sta_action_assoc__associated_key_cnf (cp_t *ctx, cp_mme_rx_t *mme) {}
+
+void
+cp_eoc_sta_action_auth__authenticated_key_cnf (cp_t *ctx, cp_mme_rx_t *mme)
+ __attribute__((weak));
+void
+cp_eoc_sta_action_auth__authenticated_key_cnf (cp_t *ctx, cp_mme_rx_t *mme) {}
+
+void
+cp_eoc_sta_action_auth__authenticated_set_key_req (
+ cp_t *ctx, cp_mme_rx_t *mme) __attribute__((weak));
+void
+cp_eoc_sta_action_auth__authenticated_set_key_req (
+ cp_t *ctx, cp_mme_rx_t *mme) {}
+
+void
+cp_eoc_sta_action_assoc__associated_no_beacons (cp_t *ctx)
+ __attribute__((weak));
+void
+cp_eoc_sta_action_assoc__associated_no_beacons (cp_t *ctx) {}
+
+void
+cp_eoc_sta_action_assoc__associated_timeout (cp_t *ctx) __attribute__((weak));
+void
+cp_eoc_sta_action_assoc__associated_timeout (cp_t *ctx) {}
+
+void
+cp_eoc_sta_action_assoc__associated_leave (cp_t *ctx, cp_mme_rx_t *mme)
+ __attribute__((weak));
+void
+cp_eoc_sta_action_assoc__associated_leave (cp_t *ctx, cp_mme_rx_t *mme) {}
+
+void
+cp_eoc_sta_action_assoc__authenticated_leave (cp_t *ctx, cp_mme_rx_t *mme)
+ __attribute__((weak));
+void
+cp_eoc_sta_action_assoc__authenticated_leave (cp_t *ctx, cp_mme_rx_t *mme) {}
+
+void
+cp_eoc_sta_action_assoc__authenticated_no_beacons (cp_t *ctx)
+ __attribute__((weak));
+void
+cp_eoc_sta_action_assoc__authenticated_no_beacons (cp_t *ctx) {}
+
+void
+cp_eoc_sta_action_assoc__beacon_not_received (cp_t *ctx)
+ __attribute__((weak));
+void
+cp_eoc_sta_action_assoc__beacon_not_received (cp_t *ctx) {}
+
+void
+cp_eoc_sta_action_unassoc__start_retry_timer (cp_t *ctx)
+ __attribute__((weak));
+void
+cp_eoc_sta_action_unassoc__start_retry_timer (cp_t *ctx) {}
+
+void
+cp_eoc_sta_action_unassoc__stop_retry_timer (cp_t *ctx) __attribute__((weak));
+void
+cp_eoc_sta_action_unassoc__stop_retry_timer (cp_t *ctx) {}
+
+void
+cp_eoc_sta_action_assoc__associated_encrypt_payload_rsp (
+ cp_t *ctx, cp_mme_rx_t *mme) __attribute__((weak));
+void
+cp_eoc_sta_action_assoc__associated_encrypt_payload_rsp (
+ cp_t *ctx, cp_mme_rx_t *mme) {}
+
+void
+cp_eoc_sta_action_auth__authenticated_set_out_lev (
+ cp_t *ctx, cp_mme_rx_t *mme) __attribute__((weak));
+void
+cp_eoc_sta_action_auth__authenticated_set_out_lev (
+ cp_t *ctx, cp_mme_rx_t *mme) {}
+
+void
+cp_eoc_sta_action_assoc__detecting_no_beacons (cp_t *ctx)
+ __attribute__((weak));
+void
+cp_eoc_sta_action_assoc__detecting_no_beacons (cp_t *ctx) {}
+
+void
+cp_eoc_sta_action_assoc__unassoc_no_beacons (cp_t *ctx) __attribute__((weak));
+void
+cp_eoc_sta_action_assoc__unassoc_no_beacons (cp_t *ctx) {}
+
+void
+cp_eoc_sta_action_unassoc__beacon_received (
+ cp_t *ctx, bsu_beacon_t *beacon, cp_net_t *net, cp_sta_t *sta)
+ __attribute__((weak));
+void
+cp_eoc_sta_action_unassoc__beacon_received (
+ cp_t *ctx, bsu_beacon_t *beacon, cp_net_t *net, cp_sta_t *sta) {}
diff --git a/cesar/cp/eoc/sta/action/stub/src/drv.c b/cesar/cp/eoc/sta/action/stub/src/drv.c
new file mode 100644
index 0000000000..07ba901b0a
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/stub/src/drv.c
@@ -0,0 +1,49 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/sta/action/stub/src/drv.c
+ * \brief STA action, driver related definitions.
+ * \ingroup cp_eoc_sta_action_stub
+ */
+#include "common/std.h"
+#include "cp/cp.h"
+#include "cp/mme.h"
+
+void
+cp_eoc_sta_action_drv__stopped__drv_sta_set_tonemask_req (
+ cp_t *ctx, cp_mme_rx_t *mme) __attribute__((weak));
+void
+cp_eoc_sta_action_drv__stopped__drv_sta_set_tonemask_req (
+ cp_t *ctx, cp_mme_rx_t *mme) {}
+
+void
+cp_eoc_sta_action_drv__stopped__drv_sta_set_key_req (
+ cp_t *ctx, cp_mme_rx_t *mme) __attribute__((weak));
+void
+cp_eoc_sta_action_drv__stopped__drv_sta_set_key_req (
+ cp_t *ctx, cp_mme_rx_t *mme) {}
+
+void
+cp_eoc_sta_action_drv__drv_sta_set_slave_config_req (
+ cp_t *ctx, cp_mme_rx_t *mme) __attribute__((weak));
+void
+cp_eoc_sta_action_drv__drv_sta_set_slave_config_req (
+ cp_t *ctx, cp_mme_rx_t *mme) {}
+
+void
+cp_eoc_sta_action_drv__drv_sta_set_eoc_config_req (
+ cp_t *ctx, cp_mme_rx_t *mme) __attribute__((weak));
+void
+cp_eoc_sta_action_drv__drv_sta_set_eoc_config_req (
+ cp_t *ctx, cp_mme_rx_t *mme) {}
+
+void
+cp_eoc_sta_action_drv__drv_sta_get_status_ind (cp_t *ctx)
+ __attribute__((weak));
+void
+cp_eoc_sta_action_drv__drv_sta_get_status_ind (cp_t *ctx) {}
diff --git a/cesar/cp/eoc/sta/action/stub/src/poweron.c b/cesar/cp/eoc/sta/action/stub/src/poweron.c
new file mode 100644
index 0000000000..29ec7b6b2a
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/stub/src/poweron.c
@@ -0,0 +1,26 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2009 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/sta/action/stub/src/poweron.c
+ * \brief STA action, poweron related definitions.
+ * \ingroup cp_eoc_sta_action_stub
+ */
+#include "common/std.h"
+#include "cp/cp.h"
+
+void
+cp_eoc_sta_action_poweron__many__to_idle (cp_t *ctx)
+ __attribute__((weak));
+void
+cp_eoc_sta_action_poweron__many__to_idle (cp_t *ctx) {}
+
+void
+cp_eoc_sta_action_poweron__idle__to_poweron (cp_t *ctx)
+ __attribute__((weak));
+void
+cp_eoc_sta_action_poweron__idle__to_poweron (cp_t *ctx) {}
diff --git a/cesar/cp/eoc/sta/action/stub/src/vs.c b/cesar/cp/eoc/sta/action/stub/src/vs.c
new file mode 100644
index 0000000000..5a43bbcfe4
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/stub/src/vs.c
@@ -0,0 +1,38 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2012 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/sta/action/stub/vs.c
+ * \brief « brief description »
+ * \ingroup cp_eoc_sta_action_stub
+ *
+ * « long description »
+ */
+#include "common/std.h"
+#include "cp/cp.h"
+#include "cp/mme.h"
+
+void
+cp_eoc_sta_action_vs__vs_eoc_get_info_req (
+ cp_t *ctx, cp_mme_rx_t *mme) __attribute__((weak));
+void
+cp_eoc_sta_action_vs__vs_eoc_get_info_req (
+ cp_t *ctx, cp_mme_rx_t *mme) {}
+
+void
+cp_eoc_sta_action_vs__vs_eoc_diagnostic_info_req (
+ cp_t *ctx, cp_mme_rx_t *mme) __attribute__((weak));
+void
+cp_eoc_sta_action_vs__vs_eoc_diagnostic_info_req (
+ cp_t *ctx, cp_mme_rx_t *mme) {}
+
+void
+cp_eoc_sta_action_vs__vs_eoc_get_real_time_statistics_req (
+ cp_t *ctx, cp_mme_rx_t *mme) __attribute__((weak));
+void
+cp_eoc_sta_action_vs__vs_eoc_get_real_time_statistics_req (
+ cp_t *ctx, cp_mme_rx_t *mme) {}
diff --git a/cesar/cp/eoc/sta/action/test/utest/Makefile b/cesar/cp/eoc/sta/action/test/utest/Makefile
new file mode 100644
index 0000000000..b238673cdd
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/test/utest/Makefile
@@ -0,0 +1,12 @@
+all: fsm actions
+
+fsm: fsm-Makefile
+ make -f fsm-Makefile
+
+actions: actions-Makefile
+ make -f actions-Makefile
+
+clean: fsm-Makefile actions-Makefile
+ make -f fsm-Makefile clean
+ make -f actions-Makefile clean
+ rmdir obj
diff --git a/cesar/cp/eoc/sta/action/test/utest/actions-Config b/cesar/cp/eoc/sta/action/test/utest/actions-Config
new file mode 100644
index 0000000000..64ad77436f
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/test/utest/actions-Config
@@ -0,0 +1,13 @@
+CONFIG_CP_EOC = y
+CONFIG_CP_MSG_EOC_DRV_MME = y
+CONFIG_DEBUG_FATAL_CATCH = y
+CONFIG_CP_FSM_DEF = "cp/eoc/fsm/src/fsm/cp_eoc_sta.fsm"
+CONFIG_GPIO_LED_TRAFFIC = y
+CONFIG_MAC_PBPROC_EOC_FC = y
+CONFIG_MAC_COMMON_EOC_TONEMASK = y
+CONFIG_CP_EOC_STA_CON_ALLOWED = n
+CONFIG_MAC_COMMON_EOC_SCHED = y
+CONFIG_MAC_COMMON_EOC_TEI = y
+CONFIG_RESTRACK = y
+CONFIG_MAC_COMMON_EOC_MFS = y
+CONFIG_CL_EOC_ROUTE = y
diff --git a/cesar/cp/eoc/sta/action/test/utest/actions-Makefile b/cesar/cp/eoc/sta/action/test/utest/actions-Makefile
new file mode 100644
index 0000000000..5a537081c6
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/test/utest/actions-Makefile
@@ -0,0 +1,25 @@
+BASE = ../../../../../..
+
+DEFS = -DNO_PRIVATE
+
+VARIANT = actions
+
+INCLUDES = cp/eoc/sta/action/test/utest/actions-override
+
+HOST_PROGRAMS = test_actions
+
+test_actions_SOURCES = test_actions.c phy_stub.c cyg_stub.c cp_stub.c \
+ cl_interf_stub.c
+
+test_actions_MODULES = lib cp/eoc/fsm cp/eoc/sta/action cp/eoc/msg \
+ cp/eoc/sta/mgr cp/secu/stub mac/common cp/eoc/beacon/stub \
+ cp/eoc/cco/action/stub cp/eoc/cco/bw/stub \
+ mac/sar/stub cp/sta/core/stub cl/stub \
+ interface/stub cp/secu ce/tx/stub \
+ bsu/stub bufmgr/stub ce/rx/stub mac/pbproc/stub
+
+test_actions_CONFIG_MODULES = cp/eoc cl mac/sar mac/pbproc
+test_actions_LDLIBS = -lm
+
+include $(BASE)/common/make/top.mk
+
diff --git a/cesar/cp/eoc/sta/action/test/utest/actions-override/cp/inc/context.h b/cesar/cp/eoc/sta/action/test/utest/actions-override/cp/inc/context.h
new file mode 100644
index 0000000000..20ec0c03c5
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/test/utest/actions-override/cp/inc/context.h
@@ -0,0 +1,93 @@
+#ifndef override_cp_inc_context_h
+#define override_cp_inc_context_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file override/cp/inc/context.h
+ * \brief Control plane context override.
+ * \ingroup test
+ */
+
+#include "cp/fsm/fsm.h"
+#include "cp/fsm/inc/tables.h"
+#include "cp/fsm/inc/context.h"
+#include "cp/inc/trace.h"
+#include "cp/sta/mgr/sta_mgr.h"
+#include "cp/sta/mgr/inc/sta_mgr.h"
+#include "mac/common/config.h"
+#include "mac/common/store.h"
+#include "cp/sta/core/defs.h"
+#include "cp/sta/action/inc/context.h"
+#include "cp/msg/inc/context.h"
+#include "lib/rnd.h"
+#include "interface/interface.h"
+#include "mac/sar/sar.h"
+#include "mac/sar/inc/context.h"
+#include "cl/cl.h"
+#include "cl/inc/context.h"
+#include "cp/cl_interf/cl_interf.h"
+#include "cp/cl_interf/inc/context.h"
+#include "hal/phy/phy.h"
+#include "cp/eoc/beacon/inc/beacon.h"
+#include "cp/eoc/beacon/beacon.h"
+#include "ce/tx/inc/tx.h"
+#include "cp/eoc/cco/action/inc/cco_action.h"
+#include "bsu/aclf/aclf.h"
+#include "bufmgr/bufmgr.h"
+
+#define CP_NID_SIZE_BITS 54
+
+struct cp_t
+{
+#if CONFIG_TRACE
+ /** Trace context. */
+ trace_buffer_t trace;
+#endif /* CONFIG_TRACE */
+
+ /** FSM context. */
+ cp_fsm_t fsm;
+ /** STA core flag. */
+ bool sta_core_flag;
+ /** STA core urgent flag. */
+ bool sta_core_urgent_flag;
+ /** station manager context*/
+ cp_sta_mgr_t sta_mgr;
+ /** MAC config contest*/
+ mac_config_t *mac_config;
+ cp_sta_action_t sta_action;
+ cp_msg_t msg;
+ lib_rnd_t rnd;
+ interface_t *interface;
+ /** Mac store /dataplane */
+ mac_store_t *mac_store;
+ /** Convergence Layer context */
+ cl_t *cl;
+ /** Segmentation and reassembly context */
+ sar_t *sar;
+ /** PBProc. */
+ pbproc_t *pbproc;
+ cp_cl_interf_t cl_interf;
+ /** Phy context. */
+ phy_t *phy;
+ /** BSU. */
+ bsu_aclf_t *bsu_aclf;
+
+ cp_beacon_t beacon;
+ ce_tx_t ce_tx;
+ ce_rx_t *ce_rx;
+
+ bsu_t *bsu;
+ cp_cco_action_t cco_action;
+
+
+ /** Buffer manager. */
+ bufmgr_t *bufmgr;
+};
+
+
+#endif /* override_cp_inc_context_h */
diff --git a/cesar/cp/eoc/sta/action/test/utest/actions-override/cp/sta/core/core.h b/cesar/cp/eoc/sta/action/test/utest/actions-override/cp/sta/core/core.h
new file mode 100644
index 0000000000..a4d6eda352
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/test/utest/actions-override/cp/sta/core/core.h
@@ -0,0 +1,51 @@
+#ifndef override_cp_sta_core_core_h
+#define override_cp_sta_core_core_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file override/cp/sta/core/core.h
+ * \brief STA Core override.
+ * \ingroup test
+ */
+
+#include "cp/inc/context.h"
+
+BEGIN_DECLS
+
+void
+cp_sta_core_signal_fsm_event (cp_t *ctx);
+
+void
+cp_sta_core_signal_fsm_urgent_event (cp_t *ctx);
+
+u32
+cp_sta_core_get_date_ms (cp_t *ctx);
+
+void
+cp_sta_core_signal_recv_mme_event (cp_t *cp_ctx);
+
+void
+cp_sta_core_checkpoint (cp_t *ctx);
+
+void
+cp_sta_core_gen_timed_event (
+ cp_t *cp_ctx, cp_sta_core_timed_event_def_t *sta_core_timed_event,
+ cp_fsm_event_t *fsm_event, uint event_delay_ms);
+
+void
+cp_sta_core_stop_timed_or_cyclic_event(
+ cp_t *cp_ctx, cp_sta_core_timed_event_def_t *sta_core_timed_event);
+
+int
+cp_sta_core_ms_to_cyg_tick (cp_t *ctx, const uint ms);
+
+u32
+cp_sta_core_tck_per_rtc (cp_t *ctx);
+END_DECLS
+
+#endif /* override_cp_sta_core_core_h */
diff --git a/cesar/cp/eoc/sta/action/test/utest/actions-override/cp/sta/core/defs.h b/cesar/cp/eoc/sta/action/test/utest/actions-override/cp/sta/core/defs.h
new file mode 100644
index 0000000000..9698b44e93
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/test/utest/actions-override/cp/sta/core/defs.h
@@ -0,0 +1,57 @@
+#ifndef cp_sta_core_defs_h
+#define cp_sta_core_defs_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/sta/core/defs.h
+ * \brief Sta core defs.
+ * \ingroup cp/sta/core
+ *
+ */
+#include "cp/fsm/forward.h"
+
+/** Forward declaration. */
+typedef struct cp_sta_core_t cp_sta_core_t;
+
+/*
+ * the sta core event flags
+ * these are some flags, so take care to give a value with all bits set to 0 but one.
+ */
+enum cp_sta_core_event_flag_t
+{
+ CP_STA_CORE_EVENT_FLAG_RECV_BEACON = 0x1,
+ CP_STA_CORE_EVENT_FLAG_RECV_MME = 0x2,
+ CP_STA_CORE_EVENT_FLAG_FSM = 0x4,
+ CP_STA_CORE_EVENT_FLAG_GARBAGE = 0x8,
+ CP_STA_CORE_EVENT_FLAG_TERMINATE = 0x10
+};
+typedef enum cp_sta_core_event_flag_t cp_sta_core_event_flag_t;
+
+/** Definition of alarm info structure
+ * (applications should not use it directly but use "alias" defined just below) */
+struct cp_sta_core_timed_event_def_t
+{
+ /* eCos alarm. */
+ uint alarm;
+ /* eCos alarm handle. */
+ uint alarm_handle;
+ /* the sta core event flag to set
+ * (auto or user-specified when creating/launching timer alarm). */
+ cp_sta_core_event_flag_t event_flag;
+ /* FSM event specified when creating/launching timer alarm
+ * (set if the previous flag is CP_STA_CORE_EVENT_FLAG_FSM). */
+ cp_fsm_event_t *fsm_event;
+ /* flag indicating a periodic alarm (if set to true)
+ * or one-shot alarm (if set to false). */
+ bool cyclic_alarm;
+ /* pointer to CP context. */
+ cp_t *cp_ctx;
+};
+typedef struct cp_sta_core_timed_event_def_t cp_sta_core_timed_event_def_t;
+
+#endif /* cp_sta_core_defs_h */
diff --git a/cesar/cp/eoc/sta/action/test/utest/actions-override/cyg/kernel/kapi.h b/cesar/cp/eoc/sta/action/test/utest/actions-override/cyg/kernel/kapi.h
new file mode 100644
index 0000000000..019e5d3a07
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/test/utest/actions-override/cyg/kernel/kapi.h
@@ -0,0 +1,37 @@
+#ifndef override_cyg_kernel_kapi_h
+#define override_cyg_kernel_kapi_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2010 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file override/cyg/kernel/kapi.h
+ * \brief override some kernel api from <cyg/kernel/kapi.h>.
+ * \ingroup cp_msg
+ *
+ *
+ */
+
+struct cyg_resolution_t
+{
+ u32 dividend;
+ u32 divisor;
+} ;
+
+typedef struct cyg_resolution_t cyg_resolution_t;
+
+typedef u64 cyg_tick_count_t;
+
+int
+cyg_real_time_clock (void);
+
+cyg_resolution_t
+cyg_clock_get_resolution (int clock);
+
+cyg_tick_count_t
+cyg_current_time (void);
+
+#endif
diff --git a/cesar/cp/eoc/sta/action/test/utest/fsm-Config b/cesar/cp/eoc/sta/action/test/utest/fsm-Config
new file mode 100644
index 0000000000..8e23e37b10
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/test/utest/fsm-Config
@@ -0,0 +1,4 @@
+CONFIG_CP_EOC = y
+CONFIG_CP_MSG_EOC_DRV_MME = y
+CONFIG_DEBUG_FATAL_CATCH = y
+CONFIG_CP_FSM_DEF = "cp/eoc/fsm/src/fsm/cp_eoc_sta.fsm"
diff --git a/cesar/cp/eoc/sta/action/test/utest/fsm-Makefile b/cesar/cp/eoc/sta/action/test/utest/fsm-Makefile
new file mode 100644
index 0000000000..25ea0aa7ba
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/test/utest/fsm-Makefile
@@ -0,0 +1,20 @@
+BASE = ../../../../../..
+
+DEFS = -DNO_PRIVATE
+
+VARIANT = fsm
+
+INCLUDES = cp/eoc/sta/action/test/utest \
+ cp/eoc/sta/action/test/utest/fsm-override
+
+HOST_PROGRAMS = test_fsm
+
+test_fsm_SOURCES = test_fsm.c actions.c fsm_stub.c
+
+test_fsm_MODULES = lib lib/scenario cp/eoc/fsm mac/sar/stub \
+ cp/eoc/sta/action/stub cp/eoc/beacon/stub ce/tx/stub
+
+test_fsm_CONFIG_MODULES = cp/eoc mac/common cl mac/sar
+
+include $(BASE)/common/make/top.mk
+
diff --git a/cesar/cp/eoc/sta/action/test/utest/fsm-override/cp/inc/context.h b/cesar/cp/eoc/sta/action/test/utest/fsm-override/cp/inc/context.h
new file mode 100644
index 0000000000..edc1fde804
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/test/utest/fsm-override/cp/inc/context.h
@@ -0,0 +1,35 @@
+#ifndef override_cp_inc_context_h
+#define override_cp_inc_context_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file override/cp/inc/context.h
+ * \brief Control plane context override.
+ * \ingroup test
+ */
+
+#include "cp/fsm/fsm.h"
+#include "cp/fsm/inc/context.h"
+#include "cp/inc/trace.h"
+
+struct cp_t
+{
+#if CONFIG_TRACE
+ /** Trace context. */
+ trace_buffer_t trace;
+#endif /* CONFIG_TRACE */
+
+ /** FSM context. */
+ cp_fsm_t fsm;
+ /** STA core flag. */
+ bool sta_core_flag;
+ /** STA core urgent flag. */
+ bool sta_core_urgent_flag;
+};
+
+#endif /* override_cp_inc_context_h */
diff --git a/cesar/cp/eoc/sta/action/test/utest/fsm-override/cp/sta/core/core.h b/cesar/cp/eoc/sta/action/test/utest/fsm-override/cp/sta/core/core.h
new file mode 100644
index 0000000000..352368b45b
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/test/utest/fsm-override/cp/sta/core/core.h
@@ -0,0 +1,26 @@
+#ifndef override_cp_sta_core_core_h
+#define override_cp_sta_core_core_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file override/cp/sta/core/core.h
+ * \brief STA Core override.
+ * \ingroup test
+ */
+
+BEGIN_DECLS
+
+void
+cp_sta_core_signal_fsm_event (cp_t *ctx);
+
+void
+cp_sta_core_signal_fsm_urgent_event (cp_t *ctx);
+
+END_DECLS
+
+#endif /* override_cp_sta_core_core_h */
diff --git a/cesar/cp/eoc/sta/action/test/utest/inc/scenario_defs.h b/cesar/cp/eoc/sta/action/test/utest/inc/scenario_defs.h
new file mode 100644
index 0000000000..aa3a8d1e5e
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/test/utest/inc/scenario_defs.h
@@ -0,0 +1,283 @@
+#ifndef inc_scenario_defs_h
+#define inc_scenario_defs_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file inc/scenario_defs.h
+ * \brief Scenario definitions.
+ * \ingroup test
+ */
+
+#include "cp/types.h"
+#include "cp/mme.h"
+#include "cp/fsm/fsm.h"
+
+#include "cp/msg/msg.h"
+#include "cp/sta/mgr/sta.h"
+#include "cp/sta/mgr/net.h"
+#include "cp/fsm/fsm.h"
+#include "cl/cl_mactotei.h"
+#include "mac/common/tonemap.h"
+
+/* Scenario globals. */
+#define SCENARIO_DEFS_GLOBALS \
+ cp_t *cp;\
+ u16 prn; \
+ u32 my_nonce; \
+ u32 your_nonce; \
+ cp_mme_tx_t *mme;
+
+/* Scenario actions. */
+#define SCENARIO_DEFS_ACTIONS \
+ post_and_process, \
+ post, \
+ trigger, \
+ post_urgent, \
+ process, \
+ process_urgent
+/*
+ vs__started__vs_get_tonemap_req*/
+
+
+/* Actions with MME and parameters. */
+#define __m(action, param...) \
+typedef struct \
+{ \
+ cp_mme_peer_t peer; \
+ PREPROC_FOR_EACH (__m_, param) \
+} scenario_action_ ## action ## _t; \
+void \
+scenario_action_ ## action ## _cb ( \
+ scenario_globals_t *globals, scenario_params_t *params);
+#define __m_(param) param;
+
+
+__m (vs__started__vs_get_tonemap_req)
+
+#undef __m
+#undef __m_
+
+typedef struct
+{
+ cp_fsm_event_type_t type;
+ cp_mme_rx_t *mme;
+ bsu_beacon_t *beacon;
+ cp_net_t *net;
+ cp_sta_t *sta;
+} scenario_action_event_param_t;
+
+typedef scenario_action_event_param_t scenario_action_post_and_process_t;
+typedef scenario_action_event_param_t scenario_action_post_t;
+typedef scenario_action_event_param_t scenario_action_trigger_t;
+typedef scenario_action_event_param_t scenario_action_post_urgent_t;
+typedef scenario_empty_t scenario_action_process_t;
+typedef scenario_empty_t scenario_action_process_urgent_t;
+
+void
+scenario_action_post_and_process_cb (scenario_globals_t *globals,
+ scenario_params_t *params);
+
+void
+scenario_action_post_cb (scenario_globals_t *globals,
+ scenario_params_t *params);
+
+void
+scenario_action_trigger_cb (scenario_globals_t *globals,
+ scenario_params_t *params);
+
+void
+scenario_action_post_urgent_cb (scenario_globals_t *globals,
+ scenario_params_t *params);
+
+void
+scenario_action_process_cb (scenario_globals_t *globals,
+ scenario_params_t *params);
+
+void
+scenario_action_process_urgent_cb (scenario_globals_t *globals,
+ scenario_params_t *params);
+
+/* Scenario events. */
+
+#define SCENARIO_DEFS_EVENTS \
+ cp_fsm__STOPPED__drv_sta_set_mac_addr_req, \
+ cp_fsm__STOPPED__drv_sta_set_cco_pref_req, \
+ cp_fsm__STOPPED__drv_sta_set_was_cco_req, \
+ cp_fsm__STOPPED__drv_sta_set_dpw_req, \
+ cp_fsm__STOPPED__drv_sta_set_nid_req, \
+ cp_fsm__STOPPED__drv_sta_set_tonemask_req, \
+ cp_fsm__STOPPED__drv_sta_set_key_req, \
+ cp_fsm__STOPPED__drv_sta_set_dak_req, \
+ cp_fsm__STOPPED__drv_sta_mac_start_req, \
+ cp_fsm__STOPPED__drv_sta_set_npw_req, \
+ cp_fsm__STOPPED__drv_sta_set_sl_req, \
+ cp_fsm__STOPPED__drv_sta_set_m_sta_hfid_req, \
+ cp_fsm__STOPPED__drv_sta_set_u_sta_hfid_req, \
+ cp_fsm__STOPPED__drv_sta_set_avln_hfid_req, \
+ cp_sta_action_drv__drv_sta_set_config_req, \
+ cp_fsm__STARTED__poweron__idle__to_poweron, \
+ cp_fsm__STOPPING__poweron__many__to_idle,\
+ cp_fsm__STOPPING__drv__stopping__stopped,\
+ cp_fsm__DETECTING_BEACON__sta_clear_status, \
+ cp_fsm__DETECTING_BEACON__BEACON, \
+ cp_fsm__DETECTING_BEACON__BEACON_NOT_RECEIVED, \
+ cp_fsm__DETECTING_BEACON__nd_beacon, \
+ cp_fsm__ASSOCIATING__start_retry_timer, \
+ cp_fsm__ASSOCIATING__timeout_associating, \
+ cp_fsm__ASSOCIATING__CC_ASSOC_CNF, \
+ cp_fsm__ASSOCIATING__no_beacons, \
+ cp_fsm__ASSOCIATING__beacon_not_received, \
+ cp_fsm__ASSOCIATING__stop_retry_timer, \
+ cp_fsm__UNASSOCIATED__start_retry_timer, \
+ cp_fsm__UNASSOCIATED__enter_sleep_unassociated, \
+ cp_fsm__UNASSOCIATED__retry_unassociated, \
+ cp_fsm__UNASSOCIATED__timeout_unassociating, \
+ cp_fsm__UNASSOCIATED__no_beacons, \
+ cp_fsm__UNASSOCIATED__BEACON, \
+ cp_fsm__UNASSOCIATED__stop_retry_timer, \
+ cp_fsm__SLEEP_UNASSOCIATED__exit_sleep_unassociated, \
+ cp_fsm__ASSOCIATED__no_beacons, \
+ cp_fsm__ASSOCIATED__CC_LEAVE_IND, \
+ cp_fsm__ASSOCIATED__CM_GET_KEY_CNF, \
+ cp_fsm__ASSOCIATED__timeout_associating, \
+ cp_fsm__ASSOCIATED__encrypt_payload_rsp, \
+ cp_fsm__ASSOCIATED__cm_chan_est_ind, \
+ cp_fsm__ASSOCIATED__cm_update_tm_ind, \
+ cp_fsm__AUTHENTICATED__no_beacons, \
+ cp_fsm__AUTHENTICATED__BEACON, \
+ cp_fsm__AUTHENTICATED__CC_LEAVE_IND, \
+ cp_fsm__AUTHENTICATED__drv__started__drv_sta_mac_stop_req,\
+ cp_fsm__AUTHENTICATED__process_cm_brg_info_req,\
+ cp_fsm__AUTHENTICATED__process_cm_brg_info_cnf,\
+ cp_fsm__AUTHENTICATED__CM_SET_KEY_REQ,\
+ cp_fsm__AUTHENTICATED__CM_NW_STATS_REQ,\
+ cp_fsm__AUTHENTICATED__set_out_lev_ind,\
+ cp_fsm__CCO__bridge_first_com,\
+ cp_msg_vs_get_tonemap_req_receive, \
+ cp_msg_vs_get_tonemap_cnf_send, \
+ cp_beacon_synchronised
+
+
+/* MME send event. */
+#define __ms(event, param...) \
+typedef struct \
+{ \
+ cp_mme_peer_t peer; \
+ PREPROC_FOR_EACH (__p_, ## param) \
+} scenario_event_ ## event ## _t;
+
+/* MME receive event. */
+#define __mr(event, param...) \
+typedef struct \
+{ \
+ bool ok; \
+ PREPROC_FOR_EACH (__p_, ## param) \
+} scenario_event_ ## event ## _t;
+
+#define __p_(param) param;
+
+
+__mr (cp_msg_vs_get_tonemap_req_receive,
+ mac_t mac_addr,
+ cp_msg_vs_get_tonemap_tmi_t tmi,
+ u8 int_id,
+ cp_msg_vs_get_tonemap_req_dir_t dir)
+__ms (cp_msg_vs_get_tonemap_cnf_send,
+ cp_msg_vs_get_tonemap_cnf_result_t result,
+ uint beacon_delta,
+ u8 int_id,
+ tonemaps_t *tms,
+ cp_msg_vs_get_tonemap_tmi_t tmi)
+
+/* Event with return. */
+#define __er(event, param...) \
+typedef struct \
+{ \
+ bool ok; \
+ PREPROC_FOR_EACH (__p_, ## param) \
+} scenario_event_ ## event ## _t;
+
+__er (cp_beacon_synchronised)
+
+#undef __er
+#undef __ms
+#undef __mr
+
+typedef struct
+{
+ cp_fsm_branch_t branch;
+} scenario_event_transition_with_branch_t;
+
+/* Any event. */
+#define __e(event, param...) \
+ typedef struct \
+ { \
+ PREPROC_FOR_EACH (__p_, ## param) \
+ } scenario_event_ ## event ## _t;
+
+__e (cp_fsm__STOPPED__drv_sta_set_mac_addr_req)
+__e (cp_fsm__STOPPED__drv_sta_set_cco_pref_req)
+__e (cp_fsm__STOPPED__drv_sta_set_was_cco_req)
+__e (cp_fsm__STOPPED__drv_sta_set_dpw_req)
+__e (cp_fsm__STOPPED__drv_sta_set_nid_req)
+__e (cp_fsm__STOPPED__drv_sta_set_tonemask_req)
+__e (cp_fsm__STOPPED__drv_sta_set_key_req)
+__e (cp_fsm__STOPPED__drv_sta_set_dak_req)
+__e (cp_fsm__STOPPED__drv_sta_mac_start_req)
+__e (cp_fsm__STOPPED__drv_sta_set_npw_req)
+__e (cp_fsm__STOPPED__drv_sta_set_sl_req)
+__e (cp_fsm__STOPPING__poweron__many__to_idle)
+__e (cp_fsm__STOPPING__drv__stopping__stopped)
+__e (cp_fsm__CCO__bridge_first_com)
+__e (cp_fsm__STOPPED__drv_sta_set_m_sta_hfid_req)
+__e (cp_fsm__STOPPED__drv_sta_set_u_sta_hfid_req)
+__e (cp_fsm__STOPPED__drv_sta_set_avln_hfid_req)
+__e (cp_fsm__STARTED__poweron__idle__to_poweron)
+__e (cp_fsm__DETECTING_BEACON__sta_clear_status)
+__e (cp_fsm__DETECTING_BEACON__BEACON)
+__e (cp_fsm__DETECTING_BEACON__BEACON_NOT_RECEIVED)
+__e (cp_fsm__DETECTING_BEACON__nd_beacon)
+__e (cp_fsm__ASSOCIATING__start_retry_timer)
+__e (cp_fsm__ASSOCIATING__timeout_associating, cp_fsm_branch_t branch)
+__e (cp_fsm__ASSOCIATING__CC_ASSOC_CNF, cp_fsm_branch_t branch)
+__e (cp_fsm__ASSOCIATING__no_beacons)
+__e (cp_fsm__ASSOCIATING__beacon_not_received)
+__e (cp_fsm__ASSOCIATING__stop_retry_timer)
+__e (cp_fsm__UNASSOCIATED__start_retry_timer)
+__e (cp_fsm__UNASSOCIATED__enter_sleep_unassociated)
+__e (cp_fsm__UNASSOCIATED__retry_unassociated)
+__e (cp_fsm__UNASSOCIATED__timeout_unassociating)
+__e (cp_fsm__UNASSOCIATED__no_beacons)
+__e (cp_fsm__UNASSOCIATED__BEACON)
+__e (cp_fsm__UNASSOCIATED__stop_retry_timer)
+__e (cp_fsm__SLEEP_UNASSOCIATED__exit_sleep_unassociated)
+__e (cp_fsm__ASSOCIATED__no_beacons)
+__e (cp_fsm__ASSOCIATED__CC_LEAVE_IND, cp_fsm_branch_t branch)
+__e (cp_fsm__ASSOCIATED__CM_GET_KEY_CNF, cp_fsm_branch_t branch)
+__e (cp_fsm__ASSOCIATED__timeout_associating)
+__e (cp_fsm__ASSOCIATED__cm_chan_est_ind)
+__e (cp_fsm__ASSOCIATED__cm_update_tm_ind)
+__e (cp_fsm__ASSOCIATED__encrypt_payload_rsp)
+__e (cp_fsm__AUTHENTICATED__no_beacons)
+__e (cp_fsm__AUTHENTICATED__BEACON)
+__e (cp_fsm__AUTHENTICATED__CC_LEAVE_IND, cp_fsm_branch_t branch)
+__e (cp_fsm__AUTHENTICATED__sleep_enter_cnf)
+__e (cp_fsm__AUTHENTICATED__drv__started__drv_sta_mac_stop_req)
+__e (cp_fsm__AUTHENTICATED__process_cm_brg_info_req)
+__e (cp_fsm__AUTHENTICATED__process_cm_brg_info_cnf)
+__e (cp_fsm__AUTHENTICATED__CM_SET_KEY_REQ)
+__e (cp_fsm__AUTHENTICATED__CM_NW_STATS_REQ)
+__e (cp_fsm__AUTHENTICATED__set_out_lev_ind)
+__e (cp_fsm__SLEEP_AUTHENTICATED__no_beacons)
+__e (cp_fsm__SLEEP_AUTHENTICATED__sleep_exit_rsp)
+__e (cp_sta_action_drv__drv_sta_set_config_req)
+
+#undef __e
+#undef __p_
+
+#endif /* inc_scenario_defs_h */
diff --git a/cesar/cp/eoc/sta/action/test/utest/inc/test_sta_action.h b/cesar/cp/eoc/sta/action/test/utest/inc/test_sta_action.h
new file mode 100644
index 0000000000..48172abd46
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/test/utest/inc/test_sta_action.h
@@ -0,0 +1,56 @@
+#ifndef inc_test_sta_action_h
+#define inc_test_sta_action_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file inc/test_sta_action.h
+ * \brief Test sta/action.
+ * \ingroup test
+ */
+#include "cp/inc/context.h"
+
+/** Contexts used in tests. */
+struct test_sta_action_t
+{
+ cp_t cp;
+ mac_config_t mac_config;
+};
+typedef struct test_sta_action_t test_sta_action_t;
+
+/**
+ * Initialise test contexts.
+ * \param ctx test context
+ */
+void
+test_sta_action_init (test_sta_action_t *ctx);
+
+/**
+ * Uninitialise test contexts.
+ * \param ctx test context
+ */
+void
+test_sta_action_uninit (test_sta_action_t *ctx);
+
+/**
+ * Reset test contexts.
+ * \param ctx test context
+ */
+void
+test_sta_action_reset (test_sta_action_t *ctx);
+
+/**
+ * Create our AVLN as if the STA was associated.
+ * \param ctx test context
+ * \param nid our NID
+ * \param snid our SNID
+ */
+void
+test_sta_action_create_our_net (test_sta_action_t *ctx, cp_nid_t nid,
+ cp_snid_t snid);
+
+#endif /* inc_test_sta_action_h */
diff --git a/cesar/cp/eoc/sta/action/test/utest/src/actions.c b/cesar/cp/eoc/sta/action/test/utest/src/actions.c
new file mode 100644
index 0000000000..09258d2361
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/test/utest/src/actions.c
@@ -0,0 +1,118 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/actions.c
+ * \brief Scenario actions.
+ * \ingroup test
+ */
+#include "common/std.h"
+
+#include "lib/scenario/scenario.h"
+
+#include "cp/inc/context.h"
+
+#include "cp/eoc/sta/action/action.h"
+
+
+void
+cp_sta_action_vs__started__vs_get_tonemap_req (cp_t *ctx, cp_mme_rx_t *mme_rx);
+
+
+cp_fsm_event_t *
+scenario_action_make_event (cp_t *cp, scenario_action_event_param_t *ep)
+{
+ cp_fsm_event_t *event;
+ if (ep->mme)
+ event = cp_fsm_event_mme_new (cp, ep->type, ep->mme);
+ else if (ep->beacon)
+ event = cp_fsm_event_beacon_new (cp, ep->type, ep->beacon, ep->net,
+ ep->sta);
+ else if (ep->sta)
+ event = cp_fsm_event_sta_new (cp, ep->type, ep->net, ep->sta);
+ else
+ event = cp_fsm_event_bare_new (cp, ep->type);
+ return event;
+}
+
+void
+scenario_action_post_and_process_cb (scenario_globals_t *globals,
+ scenario_params_t *params)
+{
+ test_within (scenario.t);
+ scenario_action_post_and_process_t *p = &params->action_post_and_process;
+ cp_fsm_post (globals->cp, scenario_action_make_event (globals->cp, p));
+ test_fail_unless (globals->cp->sta_core_flag);
+ globals->cp->sta_core_flag = false;
+ cp_fsm_process (globals->cp);
+}
+
+void
+scenario_action_post_cb (scenario_globals_t *globals,
+ scenario_params_t *params)
+{
+ test_within (scenario.t);
+ scenario_action_post_t *p = &params->action_post;
+ cp_fsm_post (globals->cp, scenario_action_make_event (globals->cp, p));
+ test_fail_unless (globals->cp->sta_core_flag);
+}
+
+void
+scenario_action_trigger_cb (scenario_globals_t *globals,
+ scenario_params_t *params)
+{
+ test_within (scenario.t);
+ scenario_action_trigger_t *p = &params->action_trigger;
+ cp_fsm_trigger (globals->cp, scenario_action_make_event (globals->cp, p));
+ test_fail_unless (globals->cp->sta_core_flag);
+}
+
+void
+scenario_action_post_urgent_cb (scenario_globals_t *globals,
+ scenario_params_t *params)
+{
+ test_within (scenario.t);
+ scenario_action_post_urgent_t *p = &params->action_post_urgent;
+ cp_fsm_post_urgent (globals->cp,
+ scenario_action_make_event (globals->cp, p));
+ test_fail_unless (globals->cp->sta_core_urgent_flag);
+}
+
+void
+scenario_action_process_cb (scenario_globals_t *globals,
+ scenario_params_t *params)
+{
+ test_within (scenario.t);
+ test_fail_unless (globals->cp->sta_core_flag);
+ globals->cp->sta_core_flag = false;
+ cp_fsm_process (globals->cp);
+}
+
+void
+scenario_action_process_urgent_cb (scenario_globals_t *globals,
+ scenario_params_t *params)
+{
+ test_within (scenario.t);
+ test_fail_unless (globals->cp->sta_core_urgent_flag);
+ globals->cp->sta_core_urgent_flag = false;
+ cp_fsm_process_urgent (globals->cp);
+}
+
+#define __m(ACTION) \
+void \
+scenario_action_ ## ACTION ## _cb (scenario_globals_t *globals, \
+ scenario_params_t *params) \
+{ \
+ static cp_mme_rx_t mme; \
+ mme.peer = params->action_ ## ACTION.peer; \
+ mme.peks = CP_MME_PEKS_SPC_NOT_EMBEDDED; \
+ cp_sta_action_ ## ACTION (globals->cp, &mme); \
+}
+
+
+
+
diff --git a/cesar/cp/eoc/sta/action/test/utest/src/cl_interf_stub.c b/cesar/cp/eoc/sta/action/test/utest/src/cl_interf_stub.c
new file mode 100644
index 0000000000..910786a8a5
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/test/utest/src/cl_interf_stub.c
@@ -0,0 +1,44 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2012 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/cco/action/test/utest3/src/cl_interf_stub.c
+ * \brief « brief description »
+ * \ingroup cp_eoc_cco_action_test_utest3
+ *
+ * « long description »
+ */
+#include "common/std.h"
+#include "cp/cp.h"
+#include "cp/mme.h"
+
+static u8 buffer[2048];
+
+u8 *
+cp_cl_interf_get_buffer_tx (cp_t *ctx)
+{
+ dbg_assert (ctx);
+ return buffer;
+}
+
+/**
+ * Send a MME over the PWL or the HLE.
+ * \param ctx the module context.
+ * \param mme The MME to send.
+ *
+ */
+void
+cp_cl_interf_mme_send (cp_t *ctx, cp_mme_tx_t * mme)
+{
+ mme->p_mme = NULL;
+}
+
+void
+cp_cl_interf_init (cp_t *ctx)
+{
+ dbg_assert (ctx);
+}
diff --git a/cesar/cp/eoc/sta/action/test/utest/src/cp_stub.c b/cesar/cp/eoc/sta/action/test/utest/src/cp_stub.c
new file mode 100644
index 0000000000..00f335e35a
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/test/utest/src/cp_stub.c
@@ -0,0 +1,58 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2009 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file eoc/sta/action/test/utest/src/cp_stub.c
+ * \brief cp/cp.c stub
+ * \ingroup test
+ *
+ */
+#include "common/std.h"
+#include "cp/cp.h"
+#include "cp/mme.h"
+#include "cp/inc/context.h"
+#include "cp/sta/core/core.h"
+#include "cp/sta/core/defs.h"
+
+/**
+ * Compute the NID and the NMK from the network password.
+ * \param ctx the CP context.
+ * \param npw the network password.
+ * \param sl the security level of the station.
+ *
+ * This function will generate the NID and the NMK from the NPW and store it
+ * in the station own data.
+ */
+void
+cp_compute_nmk_and_nid_from_npw (cp_t *ctx, const char *npw,
+ cp_security_level_t sl)
+{
+ u64 nid;
+ cp_key_t nmk;
+ uint length;
+
+ dbg_assert (ctx);
+ dbg_assert (npw);
+
+ length = strlen (npw);
+
+ nmk = cp_secu_npw2nmk (ctx, (const u8*) npw, length);
+ nid = cp_secu_nmk2nid (ctx, nmk, sl);
+
+ /* Store the nid and the nmk to the station own data. */
+ cp_sta_own_data_set_nmk (ctx, nmk, 0);
+ cp_sta_own_data_set_nid (ctx, nid);
+}
+
+void
+cp_sta_core_gen_timed_event(cp_t *cp_ctx,
+ cp_sta_core_timed_event_def_t *sta_core_timed_event,
+ cp_fsm_event_t *fsm_event,
+ uint event_delay_ms)
+{
+ slab_release (fsm_event);
+}
diff --git a/cesar/cp/eoc/sta/action/test/utest/src/cyg_stub.c b/cesar/cp/eoc/sta/action/test/utest/src/cyg_stub.c
new file mode 100644
index 0000000000..f9f9784e0e
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/test/utest/src/cyg_stub.c
@@ -0,0 +1,40 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2012 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/cyg_stub.c
+ * \brief « brief description »
+ * \ingroup « module »
+ *
+ * « long description »
+ */
+#include "common/std.h"
+#include "cp/cp.h"
+#include "bsu/aclf/aclf.h"
+#include <cyg/kernel/kapi.h>
+
+#define BSU_ACLF_BP_CABLE_TCK 2500000
+#define TCK_PER_RTC 250000
+
+u32
+cp_sta_core_tck_per_rtc (cp_t *ctx)
+{
+ return TCK_PER_RTC;
+}
+
+u32
+bsu_aclf_beacon_period_tck (bsu_aclf_t *ctx)
+{
+ return BSU_ACLF_BP_CABLE_TCK;
+}
+
+cyg_tick_count_t
+cyg_current_time (void)
+{
+ /* For tests purpose we can simulate 1000 beacon periods */
+ return (u32)((BSU_ACLF_BP_CABLE_TCK * 1000ull) / TCK_PER_RTC);
+}
diff --git a/cesar/cp/eoc/sta/action/test/utest/src/fsm_stub.c b/cesar/cp/eoc/sta/action/test/utest/src/fsm_stub.c
new file mode 100644
index 0000000000..4bee0e8346
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/test/utest/src/fsm_stub.c
@@ -0,0 +1,335 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/fsm_stub.c
+ * \brief Override FSM tables.
+ * \ingroup test
+ */
+#include "common/std.h"
+
+#include "lib/scenario/scenario.h"
+#include "cp/eoc/sta/action/assoc_slave.h"
+#include "cp/eoc/sta/action/drv.h"
+#include "cp/eoc/sta/action/vs.h"
+
+#include "cp/fsm/fsm.h"
+#include "cp/fsm/inc/tables.h"
+
+void
+cp_sta_action_drv__drv_sta_set_config_req (cp_t *ctx, cp_mme_rx_t *mme_rx)
+{
+ scenario_event (cp_sta_action_drv__drv_sta_set_config_req);
+}
+
+void
+cp_eoc_sta_action_auth__authenticated_set_out_lev(cp_t *ctx, cp_mme_rx_t *mme)
+{
+ scenario_event (cp_fsm__AUTHENTICATED__set_out_lev_ind);
+}
+
+void
+cp_sta_action_drv__stopped__drv_sta_set_mac_addr_req (cp_t *ctx,
+ cp_mme_rx_t *mme)
+{
+ scenario_event (cp_fsm__STOPPED__drv_sta_set_mac_addr_req);
+}
+
+void
+cp_sta_action_drv__stopped__drv_sta_set_cco_pref_req (cp_t *ctx,
+ cp_mme_rx_t *mme)
+{
+ scenario_event (cp_fsm__STOPPED__drv_sta_set_cco_pref_req);
+}
+
+void
+cp_sta_action_drv__stopped__drv_sta_set_was_cco_req (cp_t *ctx,
+ cp_mme_rx_t *mme)
+{
+ scenario_event (cp_fsm__STOPPED__drv_sta_set_was_cco_req);
+}
+
+void
+cp_sta_action_drv__stopped__drv_sta_set_dpw_req (cp_t *ctx, cp_mme_rx_t *mme)
+{
+ scenario_event (cp_fsm__STOPPED__drv_sta_set_dpw_req);
+}
+
+void
+cp_sta_action_drv__stopped__drv_sta_set_nid_req (cp_t *ctx, cp_mme_rx_t *mme)
+{
+ scenario_event (cp_fsm__STOPPED__drv_sta_set_nid_req);
+}
+
+void
+cp_eoc_sta_action_drv__stopped__drv_sta_set_tonemask_req (cp_t *ctx,
+ cp_mme_rx_t *mme)
+{
+ scenario_event (cp_fsm__STOPPED__drv_sta_set_tonemask_req);
+}
+
+void
+cp_eoc_sta_action_drv__stopped__drv_sta_set_key_req (cp_t *ctx, cp_mme_rx_t *mme)
+{
+ scenario_event (cp_fsm__STOPPED__drv_sta_set_key_req);
+}
+
+void
+cp_sta_action_drv__stopped__drv_sta_set_dak_req (cp_t *ctx, cp_mme_rx_t *mme)
+{
+ scenario_event (cp_fsm__STOPPED__drv_sta_set_dak_req);
+}
+
+void
+cp_sta_action_drv__stopped__drv_sta_mac_start_req (cp_t *ctx,
+ cp_mme_rx_t *mme)
+{
+ scenario_event (cp_fsm__STOPPED__drv_sta_mac_start_req);
+}
+
+void
+cp_beacon_beacon_not_received (cp_t *ctx)
+{
+ scenario_event (cp_fsm__ASSOCIATING__beacon_not_received);
+}
+
+void
+cp_eoc_sta_action_assoc__detecting_detected (cp_t *ctx)
+{
+ scenario_event (cp_fsm__DETECTING_BEACON__nd_beacon);
+}
+
+void
+cp_eoc_sta_action_assoc__associating_timeout (cp_t *ctx)
+{
+ scenario_event (cp_fsm__ASSOCIATING__timeout_associating, param);
+ cp_fsm_branch_ (ctx, param->branch);
+}
+
+void
+cp_eoc_sta_action_assoc__associating_cnf (cp_t *ctx, cp_mme_rx_t *mme)
+{
+ scenario_event (cp_fsm__ASSOCIATING__CC_ASSOC_CNF, param);
+ cp_fsm_branch_ (ctx, param->branch);
+}
+
+void
+cp_eoc_sta_action_assoc__associating_no_beacons (cp_t *ctx)
+{
+ scenario_event (cp_fsm__ASSOCIATING__no_beacons);
+}
+
+void
+cp_eoc_sta_action_assoc__unassociated_retry (cp_t *ctx)
+{
+ scenario_event (cp_fsm__UNASSOCIATED__retry_unassociated);
+}
+
+void
+cp_eoc_sta_action_assoc__associated_key_cnf (cp_t *ctx, cp_mme_rx_t *mme)
+{
+ scenario_event (cp_fsm__ASSOCIATED__CM_GET_KEY_CNF, param);
+ cp_fsm_branch_ (ctx, param->branch);
+}
+
+void
+cp_eoc_sta_action_assoc__associated_encrypt_payload_rsp (cp_t *ctx,
+ cp_mme_rx_t *mme)
+{
+ scenario_event (cp_fsm__ASSOCIATED__encrypt_payload_rsp);
+}
+
+void
+cp_eoc_sta_action_assoc__associated_no_beacons (cp_t *ctx)
+{
+ scenario_event (cp_fsm__ASSOCIATED__no_beacons);
+}
+
+void
+cp_eoc_sta_action_assoc__associated_timeout (cp_t *ctx)
+{
+ scenario_event (cp_fsm__ASSOCIATED__timeout_associating);
+}
+
+void
+cp_eoc_sta_action_assoc__associated_leave (cp_t *ctx, cp_mme_rx_t *mme)
+{
+ scenario_event (cp_fsm__ASSOCIATED__CC_LEAVE_IND, param);
+ cp_fsm_branch_ (ctx, param->branch);
+}
+
+void
+cp_eoc_sta_action_assoc__authenticated_no_beacons (cp_t *ctx)
+{
+ scenario_event (cp_fsm__AUTHENTICATED__no_beacons);
+}
+
+void
+cp_eoc_sta_action_assoc__authenticated_leave (cp_t *ctx, cp_mme_rx_t *mme)
+{
+ scenario_event (cp_fsm__AUTHENTICATED__CC_LEAVE_IND, param);
+ cp_fsm_branch_ (ctx, param->branch);
+}
+
+void
+cp_eoc_sta_action_assoc__beacon_not_received (cp_t *ctx)
+{
+ scenario_event (cp_fsm__DETECTING_BEACON__BEACON_NOT_RECEIVED);
+}
+
+void
+ce_tx_process__cm_chan_est_ind (cp_t *ctx, cp_mme_rx_t *mme)
+{
+ scenario_event (cp_fsm__ASSOCIATED__cm_chan_est_ind);
+}
+
+void
+ce_tx_process__cm_update_tm_ind (cp_t *ctx, cp_mme_rx_t *mme)
+{
+ scenario_event (cp_fsm__ASSOCIATED__cm_update_tm_ind);
+}
+
+void
+cp_eoc_sta_action_unassoc__start_retry_timer (cp_t *ctx)
+{
+ scenario_event (cp_fsm__UNASSOCIATED__start_retry_timer);
+}
+
+void
+cp_eoc_sta_action_assoc__start_retry_timer (cp_t *ctx)
+{
+ scenario_event (cp_fsm__ASSOCIATING__start_retry_timer);
+}
+
+void
+cp_eoc_sta_action_unassoc__stop_retry_timer (cp_t *ctx)
+{
+ scenario_event (cp_fsm__UNASSOCIATED__stop_retry_timer);
+}
+
+void
+cp_sta_action_assoc__stop_retry_timer (cp_t *ctx)
+{
+ scenario_event (cp_fsm__ASSOCIATING__stop_retry_timer);
+}
+
+void
+cp_sta_action_drv__stopped__drv_sta_set_npw_req (cp_t *ctx, cp_mme_rx_t *mme)
+{
+ scenario_event (cp_fsm__STOPPED__drv_sta_set_npw_req);
+}
+
+void
+cp_sta_action_drv__stopped__drv_sta_set_sl_req (cp_t *ctx, cp_mme_rx_t *mme)
+{
+ scenario_event (cp_fsm__STOPPED__drv_sta_set_sl_req);
+}
+
+void
+cp_sta_action_drv__stopped__drv_sta_set_m_sta_hfid_req (cp_t *ctx,
+ cp_mme_rx_t *mme)
+{
+ scenario_event (cp_fsm__STOPPED__drv_sta_set_m_sta_hfid_req);
+}
+
+void
+cp_sta_action_drv__stopped__drv_sta_set_u_sta_hfid_req (cp_t *ctx,
+ cp_mme_rx_t *mme)
+{
+ scenario_event (cp_fsm__STOPPED__drv_sta_set_u_sta_hfid_req);
+}
+
+void
+cp_sta_action_drv__stopped__drv_sta_set_avln_hfid_req (cp_t *ctx,
+ cp_mme_rx_t *mme)
+{
+ scenario_event (cp_fsm__STOPPED__drv_sta_set_avln_hfid_req);
+}
+
+void
+cp_sta_action_bridge_first_com (cp_t *ctx, cp_net_t *net, cp_sta_t *sta)
+{
+ scenario_event (cp_fsm__CCO__bridge_first_com);
+}
+
+void
+cp_eoc_sta_action_poweron__many__to_idle (cp_t *ctx)
+{
+ scenario_event (cp_fsm__STOPPING__poweron__many__to_idle);
+}
+
+void
+cp_eoc_sta_action_poweron__idle__to_poweron (cp_t *ctx)
+{
+ scenario_event (cp_fsm__STARTED__poweron__idle__to_poweron);
+}
+
+void
+cp_sta_action_drv__stopping__stopped (cp_t *ctx)
+{
+ scenario_event (cp_fsm__STOPPING__drv__stopping__stopped);
+}
+
+void
+cp_sta_action_drv__started__drv_sta_mac_stop_req (cp_t *ctx,
+ cp_mme_rx_t *mme)
+{
+ scenario_event
+ (cp_fsm__AUTHENTICATED__drv__started__drv_sta_mac_stop_req);
+}
+
+void
+cp_sta_action_process_cm_brg_info_req (cp_t *ctx, cp_mme_rx_t *mme)
+{
+ scenario_event (cp_fsm__AUTHENTICATED__process_cm_brg_info_req);
+}
+
+void
+cp_sta_action_process_cm_brg_info_cnf (cp_t *ctx, cp_mme_rx_t *mme)
+{
+ scenario_event (cp_fsm__AUTHENTICATED__process_cm_brg_info_cnf);
+}
+
+void
+cp_eoc_sta_action_auth__beacon_received (cp_t *ctx, bsu_beacon_t *beacon,
+ cp_net_t *net, cp_sta_t *sta)
+{
+ scenario_event (cp_fsm__AUTHENTICATED__BEACON);
+}
+
+void
+cp_eoc_sta_action_assoc__unassoc_no_beacons (cp_t *ctx)
+{
+ scenario_event (cp_fsm__UNASSOCIATED__no_beacons);
+}
+
+void
+cp_eoc_sta_action_unassoc__beacon_received (cp_t *ctx, bsu_beacon_t *beacon,
+ cp_net_t *net, cp_sta_t *sta)
+{
+ scenario_event (cp_fsm__UNASSOCIATED__BEACON);
+}
+
+void
+cp_eoc_sta_action_auth__authenticated_set_key_req (cp_t *ctx,
+ cp_mme_rx_t *mme)
+{
+ scenario_event (cp_fsm__AUTHENTICATED__CM_SET_KEY_REQ);
+}
+
+void
+cp_sta_action_process_cm_nw_stats_req (cp_t *ctx, cp_mme_rx_t *rx_mme)
+{
+ scenario_event (cp_fsm__AUTHENTICATED__CM_NW_STATS_REQ);
+}
+
+void
+cp_eoc_sta_action_detect__beacon_received (cp_t *ctx, bsu_beacon_t *beacon,
+ cp_net_t *net, cp_sta_t *sta)
+{
+ scenario_event (cp_fsm__DETECTING_BEACON__BEACON);
+}
diff --git a/cesar/cp/eoc/sta/action/test/utest/src/phy_stub.c b/cesar/cp/eoc/sta/action/test/utest/src/phy_stub.c
new file mode 100644
index 0000000000..ba991fe957
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/test/utest/src/phy_stub.c
@@ -0,0 +1,26 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2011 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file
+ * \brief
+ * \ingroup
+ */
+
+#include "common/std.h"
+#include "cp/inc/context.h"
+
+
+void
+phy_tx_scale_adapt_exp_set (phy_t *ctx, u8 exp)
+{
+}
+
+void
+phy_tx_scale_adapt_set (phy_t *ctx, u16 value)
+{
+}
diff --git a/cesar/cp/eoc/sta/action/test/utest/src/test_actions.c b/cesar/cp/eoc/sta/action/test/utest/src/test_actions.c
new file mode 100644
index 0000000000..e0836d0875
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/test/utest/src/test_actions.c
@@ -0,0 +1,1967 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/test_actions.c
+ * \brief Test FSM module.
+ * \ingroup test
+ */
+
+#include "stdio.h"
+#include "common/std.h"
+#include "lib/blk.h"
+#include "cp/inc/context.h"
+#include "cp/msg/msg.h"
+#include "lib/test.h"
+#include "lib/utils.h"
+#include "lib/swap.h"
+#include "lib/slab.h"
+#include "cp/eoc/sta/action/drv.h"
+#include "cp/fsm/fsm.h"
+#include "cp/inc/context.h"
+#include "cp/fsm/inc/tables.h"
+#include "cp/sta/core/core.h"
+#include "inc/test_sta_action.h"
+#include "cp/sta/mgr/inc/sta.h"
+#include "mac/pbproc/inc/context.h"
+#include "cp/eoc/sta/action/action.h"
+#include "cp/sta/action/assoc.h"
+
+void
+cp_eoc_sta_action__power_on_no_beacons (cp_t *ctx);
+
+void
+cp_test_init (cp_t * ctx)
+{
+ static pbproc_t pbproc;
+ static mac_config_t mac_config;
+ static cl_t cl;
+ static sar_t sar;
+
+ memset (ctx, 0, sizeof (cp_t));
+ memset (&mac_config, 0, sizeof (mac_config_t));
+ memset (&sar, 0, sizeof (sar));
+ memset (&pbproc, 0, sizeof (pbproc));
+
+ ctx->mac_config = &mac_config;
+ ctx->sar = &sar;
+ ctx->cl = &cl;
+ ctx->pbproc = &pbproc;
+
+ ctx->mac_store = mac_store_init ();
+ mac_config_init (ctx->mac_config);
+ lib_stats_init ();
+ cp_msg_init(ctx);
+ cp_cl_interf_init (ctx);
+ lib_rnd_init (&ctx->rnd, 1234);
+ cp_eoc_sta_mgr_init (ctx);
+ cp_fsm_init (ctx);
+}
+
+void
+cp_test_uninit (cp_t * ctx)
+{
+ ctx->fsm.handled_event = NULL;
+ mac_store_uninit (ctx->mac_store);
+ cp_msg_uninit (ctx);
+ cp_fsm_uninit (ctx);
+ lib_stats_uninit ();
+}
+
+void
+cp_eoc_cco_action_test_release_mac_store (cp_t *ctx)
+{
+ uint tei, i;
+ for (tei = MAC_TEI_STA_MIN_EOC; tei < MAC_TEI_STA_MAX; tei++)
+ {
+ mfs_t *mfs;
+ for (i = 0; i < MAC_CAP_NB; i++)
+ {
+ mfs = mac_store_mfs_get (ctx->mac_store, true, false, false,
+ MAC_LLID_MIN + i, tei);
+ if (mfs)
+ {
+ mac_store_mfs_remove (ctx->mac_store, mfs);
+ blk_release (mfs);
+ }
+ }
+ mfs = mac_store_mfs_get (ctx->mac_store, true, false, true,
+ MAC_LID_NONE, tei);
+ if (mfs)
+ {
+ mac_store_mfs_remove (ctx->mac_store, mfs);
+ blk_release (mfs);
+ }
+ }
+}
+
+void
+test_case_association_and_authentication_action (test_t test)
+{
+ test_case_begin (test, "Asssociation and authentication");
+
+ test_begin (test, "Receiving and processing DRV_STA_SET_MAC_ADDR_REQ")
+ {
+ cp_t ctx;
+ cp_mme_rx_t my_mme;
+ cp_mme_rx_t *mme = &my_mme;
+
+ bitstream_t bitstream;
+ u64 data;
+ u8 buffer[1024];
+
+ cp_test_init (&ctx);
+ memset (mme, 0, sizeof (*mme));
+ mme->mmtype = DRV_STA_SET_MAC_ADDR_REQ;
+ cp_secu_protocol_run_new (&mme->prun, 0, &ctx.rnd);
+ bitstream_init (&my_mme.bitstream, buffer, sizeof(buffer),
+ BITSTREAM_READ);
+
+ /* Build the MME. */
+ bitstream_init (&bitstream, buffer, sizeof(buffer), BITSTREAM_WRITE);
+ //Mac address
+ data = 0x3;
+ bitstream_access (&bitstream, &data, 48);
+
+ bitstream_finalise (&bitstream);
+
+ mme->length = 6;
+
+ mme->peer.mac = 0x3;
+
+ cp_sta_action_drv__stopped__drv_sta_set_mac_addr_req (&ctx, mme);
+
+ test_fail_unless (ctx.sta_mgr.sta_own_data.mac_addr == mme->peer.mac);
+
+ test_fail_unless (ctx.mac_config->sta_mac_address == mme->peer.mac);
+
+ cp_test_uninit (&ctx);
+ }
+ test_end;
+
+ test_begin (test, "Receiving and processing DRV_STA_SET_CCO_PREF_REQ")
+ {
+ cp_t ctx;
+
+ cp_mme_rx_t my_mme;
+ cp_mme_rx_t *mme = &my_mme;
+
+ bitstream_t bitstream;
+ u8 cco_pref;
+ u8 buffer[1024];
+
+ cp_test_init (&ctx);
+ memset (mme, 0, sizeof (*mme));
+ mme->mmtype = DRV_STA_SET_CCO_PREF_REQ;
+ cp_secu_protocol_run_new (&mme->prun, 0, &ctx.rnd);
+ bitstream_init (&my_mme.bitstream, buffer, sizeof(buffer),
+ BITSTREAM_READ);
+
+ /* Build the MME. */
+ bitstream_init (&bitstream, buffer, sizeof(buffer), BITSTREAM_WRITE);
+
+ /* 0x01 means that the staion is prefered as CCO
+ * 0x00 means that the station is not prefered as CCO. */
+ cco_pref = 0x1;
+ bitstream_access(&bitstream, &cco_pref, 8);
+
+ bitstream_finalise (&bitstream);
+
+ mme->length = 1;
+
+ cp_sta_action_drv__stopped__drv_sta_set_cco_pref_req (&ctx, mme);
+ cp_sta_own_data_t *own = cp_sta_mgr_get_sta_own_data (&ctx);
+
+ test_fail_unless (own->cco_prefered == cco_pref);
+ cp_test_uninit (&ctx);
+ }
+ test_end;
+
+ test_begin (test, "Receiving and processing DRV_STA_SET_WAS_CCO_REQ")
+ {
+ cp_t ctx;
+
+ cp_mme_rx_t my_mme;
+ cp_mme_rx_t *mme = &my_mme;
+
+ bitstream_t bitstream;
+ u8 was_cco;
+ u8 buffer[1024];
+
+ cp_test_init (&ctx);
+ memset (mme, 0, sizeof (*mme));
+ mme->mmtype = DRV_STA_SET_WAS_CCO_REQ;
+ cp_secu_protocol_run_new (&mme->prun, 0, &ctx.rnd);
+ bitstream_init (&my_mme.bitstream, buffer, sizeof(buffer),
+ BITSTREAM_READ);
+
+ /* Build the MME. */
+ bitstream_init (&bitstream, buffer, sizeof(buffer), BITSTREAM_WRITE);
+
+ /* 0x01 means that the staion was a CCO prviously
+ * 0x00 means that the station was not a CCO previously. */
+ was_cco = 0x1;
+ bitstream_access(&bitstream, &was_cco, 8);
+
+ bitstream_finalise (&bitstream);
+
+ mme->length = 1;
+
+ cp_sta_action_drv__stopped__drv_sta_set_was_cco_req (&ctx, mme);
+
+ test_fail_unless (ctx.sta_mgr.sta_own_data.was_cco == was_cco);
+ cp_test_uninit (&ctx);
+ }
+ test_end;
+
+ test_begin (test, "Receiving and processing DRV_STA_SET_NPW_REQ")
+ {
+ cp_t ctx;
+ cp_mme_rx_t my_mme;
+ cp_mme_rx_t *mme = &my_mme;
+ uint i;
+ bitstream_t bitstream;
+ u8 buffer[1024];
+ char npw[CP_NPW_MAX_SIZE + 1];
+
+ cp_test_init (&ctx);
+ memset (mme, 0, sizeof (*mme));
+ /* Sample network password: SPC-300_EoC_200MBps. */
+ memset (npw, 0, sizeof (npw));
+ strcpy(npw, "SPC-300_EoC_200MBps");
+
+ ctx.sta_mgr.sta_own_data.security_level = CP_SECURITY_LEVEL_SC;
+ ctx.sta_mgr.sta_own_data.nmk.key[0] = 0;
+ ctx.sta_mgr.sta_own_data.nmk.key[1] = 0;
+ ctx.sta_mgr.sta_own_data.nmk.key[2] = 0;
+ ctx.sta_mgr.sta_own_data.nmk.key[3] = 0;
+ ctx.sta_mgr.our_avln = NULL;
+
+ mme->mmtype = DRV_STA_SET_NPW_REQ;
+ cp_secu_protocol_run_new (&mme->prun, 0, &ctx.rnd);
+ bitstream_init (&my_mme.bitstream, buffer, sizeof(buffer),
+ BITSTREAM_READ);
+
+ /* Build the MME. */
+ bitstream_init (&bitstream, buffer, sizeof(buffer), BITSTREAM_WRITE);
+
+ for(i = 0; i < CP_NPW_MAX_SIZE; i++)
+ bitstream_access(&bitstream, &npw[i], 8);
+
+ bitstream_finalise(&bitstream);
+
+ cp_sta_action_drv__stopped__drv_sta_set_npw_req (&ctx, mme);
+
+ test_fail_unless (!(strcmp(ctx.sta_mgr.sta_own_data.npw, npw)));
+ cp_test_uninit (&ctx);
+ }
+ test_end;
+
+ test_begin (test, "Receiving and processing DRV_STA_SET_DPW_REQ")
+ {
+ cp_t ctx;
+ cp_mme_rx_t my_mme;
+ cp_mme_rx_t *mme = &my_mme;
+ uint i;
+ bitstream_t bitstream;
+ u8 buffer[1024];
+ char dpw[CP_NPW_MAX_SIZE + 1];
+
+ cp_test_init (&ctx);
+ memset (mme, 0, sizeof (*mme));
+ /* Sample device password: Spidcom_Eoc_Modem_user_121. */
+ memset (dpw, 0, sizeof (dpw));
+ strcpy(dpw, "SPC-300_EoC_200MBps");
+
+ mme->mmtype = DRV_STA_SET_DPW_REQ;
+ cp_secu_protocol_run_new (&mme->prun, 0, &ctx.rnd);
+ bitstream_init (&my_mme.bitstream, buffer, sizeof(buffer),
+ BITSTREAM_READ);
+
+ /* Build the MME. */
+ bitstream_init (&bitstream, buffer, sizeof(buffer), BITSTREAM_WRITE);
+
+ for(i = 0; i < CP_NPW_MAX_SIZE; i++)
+ bitstream_access(&bitstream, &dpw[i], 8);
+
+ bitstream_finalise(&bitstream);
+
+ cp_sta_action_drv__stopped__drv_sta_set_dpw_req (&ctx, mme);
+
+ test_fail_unless (!(strcmp(ctx.sta_mgr.sta_own_data.dpw, dpw)));
+ cp_test_uninit (&ctx);
+ }
+ test_end;
+
+ test_begin (test, "Receiving and processing DRV_STA_SET_SL_REQ")
+ {
+ cp_t ctx;
+
+ cp_mme_rx_t my_mme;
+ cp_mme_rx_t *mme = &my_mme;
+
+ bitstream_t bitstream;
+ cp_security_level_t sl;
+ u8 buffer[1024];
+ char npw[CP_NPW_MAX_SIZE + 1];
+
+ cp_test_init (&ctx);
+ memset (mme, 0, sizeof (*mme));
+ memset (npw, 0, sizeof (npw));
+ strcpy(npw, "SPC-300_EoC_200MBps");
+ cp_sta_own_data_set_npw (&ctx, npw);
+
+ mme->mmtype = DRV_STA_SET_SL_REQ;
+ cp_secu_protocol_run_new (&mme->prun, 0, &ctx.rnd);
+ bitstream_init (&my_mme.bitstream, buffer, sizeof(buffer),
+ BITSTREAM_READ);
+
+ /* Build the MME. */
+ bitstream_init (&bitstream, buffer, sizeof(buffer), BITSTREAM_WRITE);
+ /* Possible security level values:
+ * CP_SECURITY_LEVEL_SC, CP_SECURITY_LEVEL_HS */
+ sl = CP_SECURITY_LEVEL_HS;
+ bitstream_access(&bitstream, &sl, 8);
+
+ bitstream_finalise (&bitstream);
+
+ cp_sta_action_drv__stopped__drv_sta_set_sl_req (&ctx, mme);
+
+ test_fail_unless (ctx.sta_mgr.sta_own_data.security_level == sl);
+ cp_test_uninit (&ctx);
+ }
+ test_end;
+
+ test_begin (test, "Receiving and processing DRV_STA_SET_NID_REQ")
+ {
+ cp_t ctx;
+ cp_mme_rx_t my_mme;
+ cp_mme_rx_t *mme = &my_mme;
+ bitstream_t bitstream;
+ u8 buffer[1024];
+ cp_nid_t nid;
+ cp_net_t *net;
+
+ cp_test_init (&ctx);
+ memset (mme, 0, sizeof (*mme));
+
+ /* Sample network id: 0x11223344556677. */
+ nid = 0x11223344556677ull;
+
+ /* Set our avln. */
+ net = cp_sta_mgr_add_avln (&ctx, 1, 1);
+ cp_sta_mgr_set_our_avln (&ctx, net);
+
+ mme->mmtype = DRV_STA_SET_NID_REQ;
+ cp_secu_protocol_run_new (&mme->prun, 0, &ctx.rnd);
+ bitstream_init (&my_mme.bitstream, buffer, sizeof(buffer),
+ BITSTREAM_READ);
+
+ /* Build the MME. */
+ bitstream_init (&bitstream, buffer, sizeof(buffer), BITSTREAM_WRITE);
+
+ bitstream_access(&bitstream, &nid, 56);
+ bitstream_finalise (&bitstream);
+
+ mme->length = 7;
+
+ cp_sta_action_drv__stopped__drv_sta_set_nid_req (&ctx, mme);
+
+ test_fail_unless (ctx.sta_mgr.sta_own_data.nid == nid);
+
+ test_fail_unless (ctx.sta_mgr.our_avln->nid == nid);
+ cp_test_uninit (&ctx);
+ }
+ test_end;
+
+ test_begin (test, "Receiving and processing DRV_STA_SET_M_STA_HFID_REQ")
+ {
+ cp_t ctx;
+ cp_mme_rx_t my_mme;
+ cp_mme_rx_t *mme = &my_mme;
+ uint i;
+ bitstream_t bitstream;
+ u8 buffer[1024];
+ char m_sta_hfid[CP_HFID_SIZE + 1];
+
+ cp_test_init (&ctx);
+ memset (mme, 0, sizeof (*mme));
+
+ /* Sample manufacturer human friendly identifier:
+ * Spidcom_SPC_300_EoC_m_HFID_123. */
+ memset(m_sta_hfid, 0, sizeof (m_sta_hfid));
+ strcpy(m_sta_hfid, "Spidcom_SPC_300_EoC_m_HFID_123");
+
+ mme->mmtype = DRV_STA_SET_M_STA_HFID_REQ;
+ cp_secu_protocol_run_new (&mme->prun, 0, &ctx.rnd);
+ bitstream_init (&my_mme.bitstream, buffer, sizeof(buffer),
+ BITSTREAM_READ);
+
+ /* Build the MME. */
+ bitstream_init (&bitstream, buffer, sizeof(buffer), BITSTREAM_WRITE);
+
+ for(i = 0; i < CP_HFID_SIZE; i++)
+ bitstream_access(&bitstream, &m_sta_hfid[i], 8);
+
+ bitstream_finalise(&bitstream);
+
+ cp_sta_action_drv__stopped__drv_sta_set_m_sta_hfid_req (&ctx, mme);
+
+ cp_sta_own_data_t *own = cp_sta_mgr_get_sta_own_data (&ctx);
+
+ test_fail_unless (!(strcmp(own->hfid_manufacturer, m_sta_hfid)));
+ cp_test_uninit (&ctx);
+ }
+ test_end;
+
+ test_begin (test, "Receiving and processing DRV_STA_SET_U_STA_HFID_REQ")
+ {
+ cp_t ctx;
+ cp_mme_rx_t my_mme;
+ cp_mme_rx_t *mme = &my_mme;
+ uint i;
+ bitstream_t bitstream;
+ u8 buffer[1024];
+ char u_sta_hfid[CP_HFID_SIZE + 1];
+
+ cp_test_init (&ctx);
+ memset (mme, 0, sizeof (*mme));
+
+ /* Sample manufacturer human friendly identifier:
+ * Spidcom_SPC_300_EoC_m_HFID_123. */
+ memset(u_sta_hfid, 0, sizeof (u_sta_hfid));
+ strcpy(u_sta_hfid, "Spidcom_SPC_300_EoC_u_HFID_123");
+
+ mme->mmtype = DRV_STA_SET_M_STA_HFID_REQ;
+ cp_secu_protocol_run_new (&mme->prun, 0, &ctx.rnd);
+ bitstream_init (&my_mme.bitstream, buffer, sizeof(buffer),
+ BITSTREAM_READ);
+
+ /* Build the MME. */
+ bitstream_init (&bitstream, buffer, sizeof(buffer), BITSTREAM_WRITE);
+
+ for(i = 0; i < CP_HFID_SIZE; i++)
+ bitstream_access(&bitstream, &u_sta_hfid[i], 8);
+
+ bitstream_finalise(&bitstream);
+
+ cp_sta_action_drv__stopped__drv_sta_set_u_sta_hfid_req (&ctx, mme);
+
+ cp_sta_own_data_t *own = cp_sta_mgr_get_sta_own_data (&ctx);
+
+ test_fail_unless (!(strcmp(own->hfid_user, u_sta_hfid)));
+ cp_test_uninit (&ctx);
+ }
+ test_end;
+
+ test_begin (test, "Receiving and processing DRV_STA_SET_AVLN_HFID_REQ")
+ {
+ cp_t ctx;
+ cp_mme_rx_t my_mme;
+ cp_mme_rx_t *mme = &my_mme;
+ uint i;
+ bitstream_t bitstream;
+ u8 buffer[1024];
+ char avln_hfid[CP_HFID_SIZE + 1];
+
+ cp_test_init (&ctx);
+ memset (mme, 0, sizeof (*mme));
+
+ /* sample avln human friendly identifier:
+ * Spidcom_SPC_300_EoC_avln_HFID_123. */
+ memset(avln_hfid, 0, sizeof (avln_hfid));
+ strcpy(avln_hfid, "Spidcom_SPC_300_EoC_avln_HFID_123");
+
+ mme->mmtype = DRV_STA_SET_M_STA_HFID_REQ;
+ cp_secu_protocol_run_new (&mme->prun, 0, &ctx.rnd);
+ bitstream_init (&my_mme.bitstream, buffer, sizeof(buffer),
+ BITSTREAM_READ);
+
+ /* Build the MME. */
+ bitstream_init (&bitstream, buffer, sizeof(buffer), BITSTREAM_WRITE);
+
+ for(i = 0; i < CP_HFID_SIZE; i++)
+ bitstream_access(&bitstream, &avln_hfid[i], 8);
+
+ bitstream_finalise(&bitstream);
+
+ cp_sta_action_drv__stopped__drv_sta_set_avln_hfid_req (&ctx, mme);
+
+ cp_sta_own_data_t *own = cp_sta_mgr_get_sta_own_data (&ctx);
+
+ test_fail_unless (!(strcmp(own->hfid_avln, avln_hfid)));
+ cp_test_uninit (&ctx);
+ }
+ test_end;
+
+ test_begin (test, "Receiving and processing DRV_STA_SET_KEY_REQ change NID")
+ {
+ cp_t ctx;
+ cp_mme_rx_t my_mme;
+ cp_mme_rx_t *mme = &my_mme;
+ uint i;
+ bitstream_t bitstream;
+ u8 buffer[1024];
+ cp_nid_t nid;
+ cp_net_t *net;
+ cp_key_t nmk;
+ enum cp_msg_drv_sta_set_key_type_t type;
+ cp_security_level_t sl;
+
+ cp_test_init (&ctx);
+ memset (mme, 0, sizeof (*mme));
+
+ /* Sample network id: 0x11223344556677. */
+ nid = 0x11223344556677ull;
+
+ /* Possible security level values:
+ * CP_SECURITY_LEVEL_SC, CP_SECURITY_LEVEL_HS. */
+ sl = CP_SECURITY_LEVEL_HS;
+
+ /* Possible type values:
+ * CP_MSG_DRV_STA_SET_KEY_TYPE_CHANGE_NID,
+ * CP_MSG_DRV_STA_SET_KEY_TYPE_CHANGE_SECURITY_LEVEL,
+ * CP_MSG_DRV_STA_SET_KEY_TYPE_NB */
+ type = CP_MSG_DRV_STA_SET_KEY_TYPE_CHANGE_NID;
+
+ /* Sample network membership key. */
+ nmk.key[0] = 0x11111111;
+ nmk.key[1] = 0x22222222;
+ nmk.key[2] = 0x33333333;
+ nmk.key[3] = 0x44444444;
+
+ net = cp_sta_mgr_add_avln (&ctx, 1, 1);
+ cp_sta_mgr_set_our_avln (&ctx, net);
+ cp_sta_own_data_set_security_level (&ctx, sl);
+
+ mme->mmtype = DRV_STA_SET_KEY_REQ;
+ cp_secu_protocol_run_new (&mme->prun, 0, &ctx.rnd);
+ bitstream_init (&my_mme.bitstream, buffer, sizeof(buffer),
+ BITSTREAM_READ);
+
+ /* Build the MME. */
+ bitstream_init (&bitstream, buffer, sizeof(buffer), BITSTREAM_WRITE);
+
+ for (i = 0; i < COUNT (nmk.key); i++)
+ bitstream_access(&bitstream, &nmk.key[i], 32);
+
+ bitstream_access(&bitstream, &type, 8);
+ bitstream_access(&bitstream, &nid, 56);
+ bitstream_access(&bitstream, &sl, 8);
+ bitstream_finalise(&bitstream);
+
+ mme->length = 25;
+
+ cp_eoc_sta_action_drv__stopped__drv_sta_set_key_req (&ctx, mme);
+
+ for (i = 0; i < COUNT (nmk.key); i++)
+ test_fail_unless (ctx.sta_mgr.sta_own_data.nmk.key[i] == nmk.key[i]);
+
+ test_fail_unless (ctx.sta_mgr.sta_own_data.nid == nid);
+
+ test_fail_unless (ctx.sta_mgr.our_avln->nid == nid);
+
+ //When NID is changed, SL should stay the same
+ test_fail_unless (ctx.sta_mgr.sta_own_data.security_level == sl);
+ cp_test_uninit (&ctx);
+ }
+ test_end
+
+ test_begin (test, "Receiving and processing DRV_STA_SET_KEY_REQ change sl")
+ {
+ cp_t ctx;
+ cp_mme_rx_t my_mme;
+ cp_mme_rx_t *mme = &my_mme;
+ uint i;
+ bitstream_t bitstream;
+ u8 buffer[1024];
+ cp_nid_t nid;
+ cp_net_t *net;
+ cp_key_t nmk;
+ enum cp_msg_drv_sta_set_key_type_t type;
+ cp_security_level_t sl;
+
+ cp_test_init (&ctx);
+ memset (mme, 0, sizeof (*mme));
+
+ nid = 0x11223344556677ull;
+
+ /* Possible security level values:
+ * CP_SECURITY_LEVEL_SC, CP_SECURITY_LEVEL_HS. */
+ sl = CP_SECURITY_LEVEL_SC;
+
+ /* Possible type values:
+ * CP_MSG_DRV_STA_SET_KEY_TYPE_CHANGE_NID,
+ * CP_MSG_DRV_STA_SET_KEY_TYPE_CHANGE_SECURITY_LEVEL,
+ * CP_MSG_DRV_STA_SET_KEY_TYPE_NB */
+ type = CP_MSG_DRV_STA_SET_KEY_TYPE_CHANGE_SECURITY_LEVEL;
+
+ nmk.key[0] = 0x11111111;
+ nmk.key[1] = 0x22222222;
+ nmk.key[2] = 0x33333333;
+ nmk.key[3] = 0x44444444;
+
+ net = cp_sta_mgr_add_avln (&ctx, 1, 1);
+ cp_sta_mgr_set_our_avln (&ctx, net);
+ cp_sta_own_data_set_security_level (&ctx, sl);
+
+ mme->mmtype = DRV_STA_SET_KEY_REQ;
+ cp_secu_protocol_run_new (&mme->prun, 0, &ctx.rnd);
+ bitstream_init (&my_mme.bitstream, buffer, sizeof(buffer),
+ BITSTREAM_READ);
+
+ /* Build the MME. */
+ bitstream_init (&bitstream, buffer, sizeof(buffer), BITSTREAM_WRITE);
+
+ for (i = 0; i < COUNT (nmk.key); i++)
+ bitstream_access(&bitstream, &nmk.key[i], 32);
+
+ bitstream_access(&bitstream, &type, 8);
+ bitstream_access(&bitstream, &nid, 56);
+ bitstream_access(&bitstream, &sl, 8);
+ bitstream_finalise(&bitstream);
+
+ mme->length = 25;
+
+ cp_sta_action_drv__stopped__drv_sta_set_key_req (&ctx, mme);
+
+ test_fail_unless (ctx.sta_mgr.sta_own_data.security_level == sl);
+
+ for (i = 0; i < COUNT (nmk.key); i++)
+ test_fail_unless (ctx.sta_mgr.sta_own_data.nmk.key[i] == nmk.key[i]);
+
+ /* STA that changes Security Level shall discard the previous NMK. */
+ test_fail_unless (ctx.sta_mgr.sta_own_data.nid != nid);
+
+ test_fail_unless (ctx.sta_mgr.our_avln->nid != nid);
+ cp_test_uninit (&ctx);
+ }
+ test_end
+
+ test_begin (test, "Receiving and processing DRV_STA_SET_DAK_REQ")
+ {
+ cp_t ctx;
+
+ cp_test_init (&ctx);
+
+ cp_mme_rx_t my_mme;
+ cp_mme_rx_t *mme = &my_mme;
+ uint i;
+ bitstream_t bitstream;
+ cp_key_t dak;
+ u8 buffer[1024];
+
+ dak.key[0] = 0x11111111;
+ dak.key[1] = 0x22222222;
+ dak.key[2] = 0x33333333;
+ dak.key[3] = 0x44444444;
+
+ memset (mme, 0, sizeof (*mme));
+ mme->mmtype = DRV_STA_SET_DAK_REQ;
+ cp_secu_protocol_run_new (&mme->prun, 0, &ctx.rnd);
+
+ bitstream_init (&my_mme.bitstream, buffer, sizeof(buffer),
+ BITSTREAM_READ);
+
+ /* Build the MME. */
+ bitstream_init (&bitstream, buffer, sizeof(buffer), BITSTREAM_WRITE);
+
+ for (i = 0; i < COUNT (dak.key); i++)
+ bitstream_access(&bitstream, &dak.key[i], 32);
+
+ bitstream_finalise (&bitstream);
+
+ mme->length = 16;
+
+ cp_sta_action_drv__stopped__drv_sta_set_dak_req (&ctx, mme);
+
+ for (i = 0; i < COUNT (dak.key); i++)
+ test_fail_unless (ctx.sta_mgr.sta_own_data.dak.key[i] == dak.key[i]);
+ cp_test_uninit (&ctx);
+ }
+ test_end;
+
+ test_begin (test, "Receiving and processing DRV_STA_SET_TONEMASK_REQ")
+ {
+ cp_t ctx;
+
+ cp_test_init (&ctx);
+
+ cp_mme_rx_t my_mme;
+ cp_mme_rx_t *mme = &my_mme;
+ uint i;
+ bitstream_t bitstream;
+ tonemask_info_t ti;
+ u8 buffer[2048];
+ u32 ff32, ff10;
+
+ ff32 = 0xffffffff;
+ ff10 = 0x3ff;
+
+ memset (mme, 0, sizeof (*mme));
+ mme->mmtype = DRV_STA_SET_TONEMASK_REQ;
+ cp_secu_protocol_run_new (&mme->prun, 0, &ctx.rnd);
+
+ bitstream_init (&my_mme.bitstream, buffer, sizeof(buffer),
+ BITSTREAM_READ);
+
+ /* Build the MME. */
+ bitstream_init (&bitstream, buffer, sizeof(buffer), BITSTREAM_WRITE);
+
+ ti.carrier_nb = tonemask_default (ti.tonemask);
+ tonemask_update(&ti);
+
+ /* ti.tonemask[2] = 0x3FFFFFFC by default,
+ * MSB coresponds to carrier 169 (0-enable,
+ * 1-disable), by default it is enabled (MSB = 0) */
+
+ /* disable carrier number 169
+ * (set MSB to 1, i.e. ti.tonemask[2] = 0xBFFFFFFC */
+ ti.tonemask[2] = 0xBFFFFFFC;
+ tonemask_update(&ti);
+
+ for (i = 0; i < PHY_CARRIER_OFFSET / 32; i++)
+ bitstream_access(&bitstream, &ff32, 32);
+
+ bitstream_access(&bitstream, &ff10, 10);
+
+ for (i = 0; i < PHY_TONEMASK_WORDS; i++)
+ {
+ bitstream_access(&bitstream, &ti.tonemask[i], 32);
+ }
+
+ for (i = 0; i <= (PHY_ALL_CARRIER_NB - PHY_TONEMASK_WORDS * 32 -
+ PHY_CARRIER_OFFSET) / 32; i++)
+ bitstream_access(&bitstream, &ff32, 32);
+
+ bitstream_finalise (&bitstream);
+
+ mme->length = PHY_TONEMASK_WORDS * 32 + PHY_CARRIER_OFFSET +
+ (PHY_ALL_CARRIER_NB - PHY_TONEMASK_WORDS * 32 -
+ PHY_CARRIER_OFFSET) ;
+
+ cp_sta_action_drv__stopped__drv_sta_set_tonemask_req (&ctx, mme);
+
+ test_fail_unless (ctx.mac_config->tonemask_info.carrier_nb ==
+ ti.carrier_nb);
+
+ for (i = 0; i < PHY_TONEMASK_WORDS; i++)
+ test_fail_unless (ctx.mac_config->tonemask_info.tonemask[i] ==
+ ti.tonemask[i]);
+ cp_test_uninit (&ctx);
+ }
+ test_end;
+
+ test_begin (test, "Receiving and processing DRV_STA_SET_CONFIG_REQ")
+ {
+ cp_t ctx;
+
+ cp_test_init (&ctx);
+
+ cp_mme_rx_t my_mme;
+ cp_mme_rx_t *mme = &my_mme;
+ uint i;
+ bitstream_t bitstream;
+ u8 buffer[1024];
+
+ char test_config[6] = "tei:1";
+
+ memset (mme, 0, sizeof (*mme));
+ mme->mmtype = DRV_STA_SET_CONFIG_REQ;
+ cp_secu_protocol_run_new (&mme->prun, 0, &ctx.rnd);
+
+ bitstream_init (&my_mme.bitstream, buffer, sizeof(buffer),
+ BITSTREAM_READ);
+
+ /* Build the MME. */
+ bitstream_init (&bitstream, buffer, sizeof(buffer), BITSTREAM_WRITE);
+
+ for(i = 0; i < 6; i++)
+ bitstream_access(&bitstream, &test_config[i], 8);
+
+ bitstream_finalise (&bitstream);
+
+ mme->length = 6;
+
+ cp_sta_action_drv__drv_sta_set_config_req (&ctx, mme);
+ cp_test_uninit (&ctx);
+ }
+ test_end;
+
+ test_begin (test, "Receiving and processing DRV_STA_GET_KEY_REQ")
+ {
+ cp_t ctx;
+
+ cp_test_init (&ctx);
+
+ cp_mme_rx_t my_mme;
+ cp_mme_rx_t *mme = &my_mme;
+ bitstream_t bitstream;
+ u8 buffer[1024];
+ cp_nid_t nid;
+ cp_net_t *net;
+ cp_key_t nmk;
+ cp_security_level_t sl;
+ u8 i;
+
+ memset (mme, 0, sizeof (*mme));
+ nmk.key[0] = 0x11111111;
+ nmk.key[1] = 0x22222222;
+ nmk.key[2] = 0x33333333;
+ nmk.key[3] = 0x44444444;
+
+ net = cp_sta_mgr_add_avln (&ctx, 1, 1);
+ cp_sta_mgr_set_our_avln (&ctx, net);
+
+ sl = CP_SECURITY_LEVEL_SC;
+ cp_sta_own_data_set_nmk (&ctx, nmk, 0);
+ nid = cp_secu_nmk2nid (&ctx, nmk, sl);
+ cp_sta_own_data_set_nid (&ctx, nid);
+
+ mme->mmtype = DRV_STA_GET_KEY_REQ;
+ cp_secu_protocol_run_new (&mme->prun, 0, &ctx.rnd);
+
+ bitstream_init (&my_mme.bitstream, buffer, sizeof(buffer),
+ BITSTREAM_READ);
+
+ /* Build the MME. */
+ bitstream_init (&bitstream, buffer, sizeof(buffer), BITSTREAM_WRITE);
+
+ bitstream_finalise (&bitstream);
+
+ cp_sta_action_drv__drv_sta_get_key_req (&ctx, mme);
+
+ test_fail_unless (ctx.sta_mgr.sta_own_data.nid == nid);
+
+ for (i = 0; i < COUNT (nmk.key); i++)
+ test_fail_unless (ctx.sta_mgr.sta_own_data.nmk.key[i] == nmk.key[i]);
+
+ test_fail_unless (ctx.sta_mgr.sta_own_data.security_level == sl);
+ cp_test_uninit (&ctx);
+ }
+ test_end;
+
+ test_begin (test, "Receiving and processing DRV_STA_MAC_START_REQ")
+ {
+ cp_t ctx;
+ cp_mme_rx_t my_mme;
+ cp_mme_rx_t *mme = &my_mme;
+ bitstream_t bitstream;
+ u8 buffer[1024];
+
+ cp_test_init (&ctx);
+
+ memset (mme, 0, sizeof (*mme));
+ mme->mmtype = DRV_STA_MAC_START_REQ;
+ cp_secu_protocol_run_new (&mme->prun, 0, &ctx.rnd);
+
+ bitstream_init (&my_mme.bitstream, buffer, sizeof(buffer),
+ BITSTREAM_READ);
+
+ /* Build the MME. */
+ bitstream_init (&bitstream, buffer, sizeof(buffer), BITSTREAM_WRITE);
+
+ bitstream_finalise (&bitstream);
+
+ cp_sta_action_drv__stopped__drv_sta_mac_start_req (&ctx, mme);
+ cp_test_uninit (&ctx);
+ }
+ test_end;
+
+ test_begin (test, "Receiving and processing DRV_STA_MAC_STOP_REQ")
+ {
+ cp_t ctx;
+ cp_mme_rx_t my_mme;
+ cp_mme_rx_t *mme = &my_mme;
+ bitstream_t bitstream;
+ u8 buffer[1024];
+
+ cp_test_init (&ctx);
+
+ memset (mme, 0, sizeof (*mme));
+ mme->peer.mac = 2;
+ mme->peer.tei = 5;
+ mme->peer.eth_type = ETH_TYPE_VLAN;
+ mme->peer.vlan_tci = 6;
+ mme->mmtype = DRV_STA_MAC_STOP_REQ;
+ cp_secu_protocol_run_new (&mme->prun, 0, &ctx.rnd);
+
+ bitstream_init (&my_mme.bitstream, buffer, sizeof(buffer),
+ BITSTREAM_READ);
+
+ /* Build the MME. */
+ bitstream_init (&bitstream, buffer, sizeof(buffer), BITSTREAM_WRITE);
+
+ bitstream_finalise (&bitstream);
+
+ cp_sta_action_drv__started__drv_sta_mac_stop_req (&ctx, mme);
+
+ test_fail_unless (ctx.sta_action.drv_peer.tei == mme->peer.tei);
+ test_fail_unless (ctx.sta_action.drv_peer.mac == mme->peer.mac);
+ test_fail_unless (ctx.sta_action.drv_peer.eth_type ==
+ mme->peer.eth_type);
+ test_fail_unless (ctx.sta_action.drv_peer.vlan_tci ==
+ mme->peer.vlan_tci);
+ cp_test_uninit (&ctx);
+ }
+ test_end;
+
+ test_begin (test, "cp_eoc_sta_action_sta_clear_status")
+ {
+ cp_t ctx;
+
+ cp_test_init (&ctx);
+
+ cp_net_t *net;
+
+ cp_mme_rx_t my_mme;
+ cp_mme_rx_t *mme = &my_mme;
+
+ net = cp_sta_mgr_add_avln (&ctx, 1, 1);
+ cp_sta_mgr_set_our_avln (&ctx, net);
+
+ memset (mme, 0, sizeof (*mme));
+ mme->peer.mac = 2;
+ mme->peer.tei = 5;
+ cp_sta_t *sta = cp_sta_mgr_sta_add (&ctx, net, mme->peer.tei,
+ mme->peer.mac);
+
+ cp_eoc_sta_action_sta_clear_status(&ctx);
+
+ cp_sta_own_data_t *own_data = cp_sta_mgr_get_sta_own_data (&ctx);
+ test_fail_unless (own_data->tei_track == MAC_TEI_UNASSOCIATED);
+ test_fail_unless (cp_sta_own_data_get_tei (&ctx) ==
+ MAC_TEI_UNASSOCIATED);
+ test_fail_unless (cp_sta_own_data_get_authenticated_status (&ctx) ==
+ false);
+ test_fail_unless (ctx.sta_action.assoc.retry == 0);
+ test_fail_unless (ctx.sta_action.assoc.beacon_loss == 0);
+ cp_eoc_sta_mgr_sta_remove (&ctx, sta);
+ slab_release (sta);
+ test_fail_unless (mac_store_sta_remove (ctx.mac_store, mme->peer.tei));
+ cp_test_uninit (&ctx);
+ }
+ test_end
+
+ test_begin (test, "Call to cp_eoc_sta_action_assoc__detecting_detected")
+ {
+ cp_t ctx;
+ cp_test_init (&ctx);
+ cp_eoc_sta_action_assoc__detecting_detected (&ctx);
+ cp_test_uninit (&ctx);
+ }
+ test_end
+
+ test_begin (test, "Call cp_eoc_sta_action_assoc__beacon_received")
+ {
+ cp_t ctx;
+ cp_test_init (&ctx);
+
+ cp_net_t *net;
+ cp_sta_t *sta;
+ bsu_beacon_t beacon;
+ bsu_beacon_t *pbeacon = &beacon;
+
+ cp_mme_rx_t my_mme;
+ cp_mme_rx_t *mme = &my_mme;
+
+ net = cp_sta_mgr_add_avln (&ctx, 1, 1);
+ cp_sta_mgr_set_our_avln (&ctx, net);
+
+ memset (mme, 0, sizeof (*mme));
+ mme->peer.mac = 2;
+ mme->peer.tei = 5;
+ sta = cp_sta_mgr_sta_add (&ctx, net, mme->peer.tei, mme->peer.mac);
+
+ cp_eoc_sta_action_assoc__beacon_received (&ctx, pbeacon, net, sta);
+
+ test_fail_unless (ctx.sta_action.assoc.beacon_loss == 0);
+ cp_eoc_sta_mgr_sta_remove (&ctx, sta);
+ slab_release (sta);
+ test_fail_unless (mac_store_sta_remove (ctx.mac_store, mme->peer.tei));
+ cp_test_uninit (&ctx);
+ }
+ test_end
+
+ test_begin (test, "Call cp_eoc_sta_action_auth__beacon_received")
+ {
+ cp_t ctx;
+
+ cp_test_init (&ctx);
+
+ cp_net_t *net;
+ cp_sta_t *sta;
+ bsu_beacon_t beacon;
+ bsu_beacon_t *pbeacon = &beacon;
+
+ cp_mme_rx_t my_mme;
+ cp_mme_rx_t *mme = &my_mme;
+
+ net = cp_sta_mgr_add_avln (&ctx, 1, 1);
+ cp_sta_mgr_set_our_avln (&ctx, net);
+
+ memset (mme, 0, sizeof (*mme));
+ mme->peer.mac = 2;
+ mme->peer.tei = 5;
+ sta = cp_sta_mgr_sta_add (&ctx, net, mme->peer.tei, mme->peer.mac);
+
+ ctx.pbproc->polled = true;
+ ((cp_sta_private_t *)sta)->is_cco = true;
+
+ ctx.fsm.active_states[0] = CP_FSM_STATE_AUTHENTICATED;
+
+ cp_eoc_sta_action_auth__beacon_received (&ctx, pbeacon, net, sta);
+ test_fail_unless(ctx.fsm.active_states[0] == CP_FSM_STATE_AUTHENTICATED);
+ cp_eoc_sta_mgr_sta_remove (&ctx, sta);
+ slab_release (sta);
+ test_fail_unless (mac_store_sta_remove (ctx.mac_store, mme->peer.tei));
+ cp_test_uninit (&ctx);
+ }
+ test_end
+
+ test_begin (test, "Call cp_eoc_sta_action_assoc__associating_cnf"
+ " - success")
+ {
+ cp_t ctx;
+
+ cp_test_init (&ctx);
+ cp_net_t *net;
+ bitstream_t bitstream;
+ u8 result;
+ cp_nid_t nid;
+ cp_snid_t snid;
+ cp_tei_t tei;
+ u16 lease_time;
+ u8 buffer[1024];
+
+ cp_mme_rx_t my_mme;
+ cp_mme_rx_t *mme = &my_mme;
+
+ ctx.fsm.handled_active_state = 0;
+
+ result = CP_MSG_CC_ASSOC_CNF_RESULT_SUCCESS;
+ lease_time = 2;
+ nid = 0x11223344556677ull;
+ snid = 5;
+
+ memset (mme, 0, sizeof (*mme));
+ mme->peer.tei = tei = ctx.sta_action.assoc.peer.tei = 5;
+ mme->peer.mac = ctx.sta_action.assoc.peer.mac = 0x2;
+
+ net = cp_sta_mgr_add_avln (&ctx, snid, nid);
+ cp_sta_mgr_set_our_avln (&ctx, net);
+
+ cp_sta_t *sta = cp_sta_mgr_sta_add (&ctx, net, mme->peer.tei,
+ mme->peer.mac);
+
+ mme->mmtype = CC_ASSOC_CNF;
+ cp_secu_protocol_run_new (&mme->prun, 0, &ctx.rnd);
+ bitstream_init (&my_mme.bitstream, buffer, sizeof(buffer),
+ BITSTREAM_READ);
+
+ /* Build the MME. */
+ bitstream_init (&bitstream, buffer, sizeof(buffer), BITSTREAM_WRITE);
+ /* Mac address. */
+ bitstream_access (&bitstream, &result, 8);
+ bitstream_access (&bitstream, &nid, 56);
+ bitstream_access (&bitstream, &snid, 8);
+ bitstream_access (&bitstream, &tei, 8);
+ bitstream_access (&bitstream, &lease_time, 16);
+
+ bitstream_finalise (&bitstream);
+
+ mme->length = 60;
+
+ cp_fsm_event_t event;
+ ctx.fsm.handled_event = &event;
+ ctx.fsm.handled_event->type = CP_FSM_EVENT_TYPE_CC_ASSOC_CNF;
+ ctx.fsm.active_states[0] = CP_FSM_STATE_ASSOCIATING;
+
+ cp_eoc_sta_action_assoc__associating_cnf (&ctx, mme);
+
+ test_fail_unless(ctx.fsm.active_states[0] == CP_FSM_STATE_ASSOCIATED);
+ cp_eoc_sta_mgr_sta_remove (&ctx, sta);
+ slab_release (sta);
+ cp_eoc_cco_action_test_release_mac_store (&ctx);
+ test_fail_unless (
+ mac_store_sta_remove (ctx.mac_store, mme->peer.tei));
+ cp_test_uninit (&ctx);
+ }
+ test_end
+
+ test_begin (test, "Call cp_eoc_sta_action_assoc__associating_cnf"
+ " - temporary ressource exhaustion")
+ {
+ cp_t ctx;
+
+ cp_test_init (&ctx);
+ cp_net_t *net;
+ bitstream_t bitstream;
+ u8 result;
+ cp_nid_t nid;
+ cp_snid_t snid;
+ cp_tei_t tei;
+ u16 lease_time;
+ u8 buffer[1024];
+
+ cp_mme_rx_t my_mme;
+ cp_mme_rx_t *mme = &my_mme;
+
+ ctx.fsm.handled_active_state = 0;
+
+ result =
+ CP_MSG_CC_ASSOC_CNF_RESULT_FAILURE_TEMPORARY_RESSOURCE_EXHAUSTION;
+ lease_time = 2;
+ nid = 0x11223344556677ull;
+ snid = 5;
+
+ memset (mme, 0, sizeof (*mme));
+ mme->peer.tei = tei = ctx.sta_action.assoc.peer.tei = 5;
+ mme->peer.mac = ctx.sta_action.assoc.peer.mac = 0x2;
+
+ net = cp_sta_mgr_add_avln (&ctx, snid, nid);
+ cp_sta_mgr_set_our_avln (&ctx, net);
+
+ cp_sta_t *sta = cp_sta_mgr_sta_add (&ctx, net, mme->peer.tei,
+ mme->peer.mac);
+
+ mme->mmtype = CC_ASSOC_CNF;
+ cp_secu_protocol_run_new (&mme->prun, 0, &ctx.rnd);
+ bitstream_init (&my_mme.bitstream, buffer, sizeof(buffer),
+ BITSTREAM_READ);
+
+ /* Build the MME. */
+ bitstream_init (&bitstream, buffer, sizeof(buffer), BITSTREAM_WRITE);
+ /* Mac address. */
+ bitstream_access (&bitstream, &result, 8);
+ bitstream_access (&bitstream, &nid, 56);
+ bitstream_access (&bitstream, &snid, 8);
+ bitstream_access (&bitstream, &tei, 8);
+ bitstream_access (&bitstream, &lease_time, 16);
+
+ bitstream_finalise (&bitstream);
+
+ mme->length = 60;
+
+ cp_fsm_event_t event;
+ ctx.fsm.handled_event = &event;
+ ctx.fsm.handled_event->type = CP_FSM_EVENT_TYPE_CC_ASSOC_CNF;
+ ctx.fsm.active_states[0] = CP_FSM_STATE_ASSOCIATING;
+
+ cp_eoc_sta_action_assoc__associating_cnf (&ctx, mme);
+
+ test_fail_unless(ctx.fsm.active_states[0]
+ == CP_FSM_STATE_UNASSOCIATED);
+ test_fail_unless (ctx.sta_action.assoc.fast_retry == 1);
+
+ cp_eoc_sta_mgr_sta_remove (&ctx, sta);
+ slab_release (sta);
+ cp_eoc_cco_action_test_release_mac_store (&ctx);
+ test_fail_unless (
+ mac_store_sta_remove (ctx.mac_store, mme->peer.tei));
+ cp_test_uninit (&ctx);
+ }
+ test_end
+
+ test_begin (test, "Call cp_eoc_sta_action_assoc__associating_cnf"
+ " - permanent ressource exhaustion")
+ {
+ cp_t ctx;
+
+ cp_test_init (&ctx);
+ cp_net_t *net;
+ bitstream_t bitstream;
+ u8 result;
+ cp_nid_t nid;
+ cp_snid_t snid;
+ cp_tei_t tei;
+ u16 lease_time;
+ u8 buffer[1024];
+
+ cp_mme_rx_t my_mme;
+ cp_mme_rx_t *mme = &my_mme;
+
+ ctx.fsm.handled_active_state = 0;
+
+ result =
+ CP_MSG_CC_ASSOC_CNF_RESULT_FAILURE_PERMANANT_RESSOURCE_EXHAUSTION;
+ lease_time = 2;
+ nid = 0x11223344556677ull;
+ snid = 5;
+
+ memset (mme, 0, sizeof (*mme));
+ mme->peer.tei = tei = ctx.sta_action.assoc.peer.tei = 5;
+ mme->peer.mac = ctx.sta_action.assoc.peer.mac = 0x2;
+
+ net = cp_sta_mgr_add_avln (&ctx, snid, nid);
+ cp_sta_mgr_set_our_avln (&ctx, net);
+
+ cp_sta_t *sta = cp_sta_mgr_sta_add (&ctx, net, mme->peer.tei,
+ mme->peer.mac);
+
+ mme->mmtype = CC_ASSOC_CNF;
+ cp_secu_protocol_run_new (&mme->prun, 0, &ctx.rnd);
+ bitstream_init (&my_mme.bitstream, buffer, sizeof(buffer),
+ BITSTREAM_READ);
+
+ /* Build the MME. */
+ bitstream_init (&bitstream, buffer, sizeof(buffer), BITSTREAM_WRITE);
+ /* Mac address. */
+ bitstream_access (&bitstream, &result, 8);
+ bitstream_access (&bitstream, &nid, 56);
+ bitstream_access (&bitstream, &snid, 8);
+ bitstream_access (&bitstream, &tei, 8);
+ bitstream_access (&bitstream, &lease_time, 16);
+
+ bitstream_finalise (&bitstream);
+
+ mme->length = 60;
+
+ cp_fsm_event_t event;
+ ctx.fsm.handled_event = &event;
+ ctx.fsm.handled_event->type = CP_FSM_EVENT_TYPE_CC_ASSOC_CNF;
+ ctx.fsm.active_states[0] = CP_FSM_STATE_ASSOCIATING;
+
+ cp_eoc_sta_action_assoc__associating_cnf (&ctx, mme);
+
+ test_fail_unless(ctx.fsm.active_states[0]
+ == CP_FSM_STATE_UNASSOCIATED);
+ test_fail_unless (ctx.sta_action.assoc.fast_retry == 0);
+
+ cp_eoc_sta_mgr_sta_remove (&ctx, sta);
+ slab_release (sta);
+ cp_eoc_cco_action_test_release_mac_store (&ctx);
+ test_fail_unless (
+ mac_store_sta_remove (ctx.mac_store, mme->peer.tei));
+ cp_test_uninit (&ctx);
+ }
+ test_end
+
+ test_begin (test, "cp_eoc_sta_action_assoc__associating_no_beacons")
+ {
+ cp_t ctx;
+
+ cp_test_init (&ctx);
+
+ cp_net_t *net;
+
+ cp_mme_rx_t my_mme;
+ cp_mme_rx_t *mme = &my_mme;
+
+ net = cp_sta_mgr_add_avln (&ctx, 1, 1);
+ cp_sta_mgr_set_our_avln (&ctx, net);
+
+ memset (mme, 0, sizeof (*mme));
+ mme->peer.mac = 2;
+ mme->peer.tei = 5;
+ cp_sta_t *sta = cp_sta_mgr_sta_add (&ctx, net, mme->peer.tei,
+ mme->peer.mac);
+
+ cp_eoc_sta_action_assoc__associating_no_beacons(&ctx);
+
+ cp_sta_own_data_t *own_data = cp_sta_mgr_get_sta_own_data (&ctx);
+ test_fail_unless (own_data->tei_track == MAC_TEI_UNASSOCIATED);
+ test_fail_unless (cp_sta_own_data_get_tei (&ctx) ==
+ MAC_TEI_UNASSOCIATED);
+ test_fail_unless (cp_sta_own_data_get_authenticated_status (&ctx) ==
+ false);
+ test_fail_unless (ctx.sta_action.assoc.retry == 0);
+ test_fail_unless (ctx.sta_action.assoc.beacon_loss == 0);
+ cp_eoc_sta_mgr_sta_remove (&ctx, sta);
+ slab_release (sta);
+ cp_eoc_cco_action_test_release_mac_store (&ctx);
+ test_fail_unless (mac_store_sta_remove (ctx.mac_store, mme->peer.tei));
+ cp_test_uninit (&ctx);
+ }
+ test_end
+
+ test_begin (test, "cp_eoc_sta_action_assoc__unassociated_retry")
+ {
+ cp_t ctx;
+ cp_eoc_sta_action_assoc__unassociated_retry(&ctx);
+ }
+ test_end
+
+ test_begin (test, "Call cp_eoc_sta_action_assoc__associated_key_cnf")
+ {
+ cp_t ctx;
+
+ cp_test_init (&ctx);
+
+ cp_net_t *net;
+ bitstream_t bitstream;
+ u8 result, eks, req_key_type;
+ cp_nid_t nid;
+ cp_snid_t snid=0;
+ cp_tei_t tei;
+ u8 buffer[1024];
+ cp_key_t nmk;
+
+ cp_mme_rx_t my_mme;
+ cp_mme_rx_t *mme = &my_mme;
+
+ memset (mme, 0, sizeof (*mme));
+ mme->prun.my_nonce = ctx.sta_action.assoc.prun.my_nonce =
+ lib_rnd32 (&ctx.rnd);
+ mme->prun.your_nonce = ctx.sta_action.assoc.prun.your_nonce =
+ lib_rnd32 (&ctx.rnd);
+
+ result = CP_MSG_CM_GET_KEY_CNF_RESULT_KEY_GRANTED;
+ req_key_type = CP_MSG_KEY_NEK;
+ mme->prun.prn = ctx.sta_action.assoc.prun.prn = 1;
+ nid = 0x11223344556677ull;
+ eks = 0;
+ mme->prun.pid = ctx.sta_action.assoc.prun.pid = 2;
+ ctx.sta_action.assoc.prun.pmn = 1;
+ mme->prun.pmn = ctx.sta_action.assoc.prun.pmn + 1;
+ mme->peks = CP_MME_PEKS_DAK;
+
+ nmk.key[0] = 0x11111111;
+ nmk.key[1] = 0x22222222;
+ nmk.key[2] = 0x33333333;
+ nmk.key[3] = 0x44444444;
+
+ mme->peer.tei = tei = ctx.sta_action.assoc.peer.tei = 5;
+ mme->peer.mac = ctx.sta_action.assoc.peer.mac = 0x2;
+
+ net = cp_sta_mgr_add_avln (&ctx, snid, nid);
+ cp_sta_mgr_set_our_avln (&ctx, net);
+
+ cp_sta_t *sta = cp_sta_mgr_sta_add (&ctx, net, mme->peer.tei,
+ mme->peer.mac);
+
+ mme->mmtype = CM_GET_KEY_CNF;
+ bitstream_init (&my_mme.bitstream, buffer, sizeof(buffer),
+ BITSTREAM_READ);
+
+ /* Build the MME. */
+ bitstream_init (&bitstream, buffer, sizeof(buffer), BITSTREAM_WRITE);
+
+ bitstream_access (&bitstream, &result, 8);
+ bitstream_access (&bitstream, &req_key_type, 8);
+ /* Reverse nonce order (simulate other side). */
+ bitstream_access (&bitstream, &mme->prun.your_nonce, 32);
+ bitstream_access (&bitstream, &mme->prun.my_nonce, 32);
+ bitstream_access (&bitstream, &nid, 56);
+ bitstream_access (&bitstream, &eks, 8);
+ bitstream_access (&bitstream, &mme->prun.pid, 8);
+ bitstream_access (&bitstream, &mme->prun.prn, 16);
+ bitstream_access (&bitstream, &mme->prun.pmn, 8);
+ bitstream_access (&bitstream, &nmk.key[0], 32);
+ bitstream_access (&bitstream, &nmk.key[1], 32);
+ bitstream_access (&bitstream, &nmk.key[2], 32);
+ bitstream_access (&bitstream, &nmk.key[3], 32);
+
+ bitstream_finalise (&bitstream);
+
+ mme->length = 38;
+
+ cp_fsm_event_t event;
+ ctx.fsm.handled_event = &event;
+ ctx.fsm.active_states[0] = CP_FSM_STATE_ASSOCIATED;
+ ctx.fsm.handled_event->type = CP_FSM_EVENT_TYPE_CM_GET_KEY_CNF;
+
+ cp_eoc_sta_action_assoc__associated_key_cnf (&ctx, mme);
+
+ test_fail_unless(ctx.fsm.active_states[0] == CP_FSM_STATE_AUTHENTICATED);
+ cp_eoc_sta_mgr_sta_remove (&ctx, sta);
+ slab_release (sta);
+ cp_eoc_cco_action_test_release_mac_store (&ctx);
+ test_fail_unless (mac_store_sta_remove (ctx.mac_store, mme->peer.tei));
+ cp_test_uninit (&ctx);
+ }
+ test_end
+
+ test_begin (test, "Call cp_eoc_sta_action_auth__authenticated_key_cnf")
+ {
+ cp_t ctx;
+
+ cp_test_init (&ctx);
+
+ cp_net_t *net;
+ cp_sta_t *sta;
+ bitstream_t bitstream;
+ u8 result, eks, req_key_type;
+ cp_nid_t nid;
+ cp_snid_t snid=0;
+ cp_tei_t tei;
+ u8 buffer[1024];
+ cp_key_t nmk;
+
+ cp_mme_rx_t my_mme;
+ cp_mme_rx_t *mme = &my_mme;
+
+ memset (mme, 0, sizeof (*mme));
+ mme->prun.my_nonce = ctx.sta_action.assoc.prun.my_nonce =
+ lib_rnd32 (&ctx.rnd);
+ mme->prun.your_nonce = ctx.sta_action.assoc.prun.your_nonce =
+ lib_rnd32 (&ctx.rnd);
+
+ result = CP_MSG_CM_GET_KEY_CNF_RESULT_KEY_GRANTED;
+ req_key_type = CP_MSG_KEY_TEK;
+ mme->prun.prn = ctx.sta_action.assoc.prun.prn = 1;
+ nid = 0x11223344556677ull;
+ eks = 0;
+ mme->prun.pid = ctx.sta_action.assoc.prun.pid = 2;
+ ctx.sta_action.assoc.prun.pmn = 1;
+ mme->prun.pmn = 0xFF;
+ mme->peks = CP_MME_PEKS_DAK;
+
+ nmk.key[0] = 0x11111111;
+ nmk.key[1] = 0x22222222;
+ nmk.key[2] = 0x33333333;
+ nmk.key[3] = 0x44444444;
+
+ mme->peer.tei = tei = ctx.sta_action.assoc.peer.tei = 5;
+ mme->peer.mac = ctx.sta_action.assoc.peer.mac = 0x2;
+
+ //set our avln
+ net = cp_sta_mgr_add_avln (&ctx, snid, nid);
+ cp_sta_mgr_set_our_avln (&ctx, net);
+
+ sta = cp_sta_mgr_sta_add (&ctx, net, mme->peer.tei, mme->peer.mac);
+
+ mme->mmtype = CM_GET_KEY_CNF;
+ bitstream_init (&my_mme.bitstream, buffer, sizeof(buffer),
+ BITSTREAM_READ);
+
+ /* Build the MME. */
+ bitstream_init (&bitstream, buffer, sizeof(buffer), BITSTREAM_WRITE);
+
+ bitstream_access (&bitstream, &result, 8);
+ bitstream_access (&bitstream, &req_key_type, 8);
+ /* Reverse nonce order (simulate other side). */
+ bitstream_access (&bitstream, &mme->prun.your_nonce, 32);
+ bitstream_access (&bitstream, &mme->prun.my_nonce, 32);
+ bitstream_access (&bitstream, &nid, 56);
+ bitstream_access (&bitstream, &eks, 8);
+ bitstream_access (&bitstream, &mme->prun.pid, 8);
+ bitstream_access (&bitstream, &mme->prun.prn, 16);
+ bitstream_access (&bitstream, &mme->prun.pmn, 8);
+ bitstream_access (&bitstream, &nmk.key[0], 32);
+ bitstream_access (&bitstream, &nmk.key[1], 32);
+ bitstream_access (&bitstream, &nmk.key[2], 32);
+ bitstream_access (&bitstream, &nmk.key[3], 32);
+
+ bitstream_finalise (&bitstream);
+
+ mme->length = 38;
+
+ cp_fsm_event_t event;
+ ctx.fsm.handled_event = &event;
+ ctx.fsm.active_states[0] = CP_FSM_STATE_AUTHENTICATED;
+ ctx.fsm.handled_event->type = CP_FSM_EVENT_TYPE_CM_GET_KEY_CNF;
+
+ cp_eoc_sta_action_auth__authenticated_key_cnf (&ctx, mme);
+
+ test_fail_unless(ctx.fsm.active_states[0] == CP_FSM_STATE_AUTHENTICATED);
+ test_fail_unless(cp_sta_get_authenticated (&ctx, sta));
+ cp_eoc_sta_mgr_sta_remove (&ctx, sta);
+ slab_release (sta);
+ cp_eoc_cco_action_test_release_mac_store (&ctx);
+ test_fail_unless (mac_store_sta_remove (ctx.mac_store, mme->peer.tei));
+ cp_test_uninit (&ctx);
+ }
+ test_end
+
+ test_begin (test, "Call cp_eoc_sta_action_auth__authenticated_set_key_req")
+ {
+ cp_t ctx;
+
+ cp_test_init (&ctx);
+
+ cp_net_t *net;
+ cp_sta_t *sta;
+ bitstream_t bitstream;
+ u8 eks, req_key_type, cco_cap;
+ cp_nid_t nid;
+ cp_snid_t snid=0;
+ cp_tei_t tei;
+ u8 buffer[1024];
+ cp_key_t nmk;
+
+ cp_mme_rx_t my_mme;
+ cp_mme_rx_t *mme = &my_mme;
+
+ memset (mme, 0, sizeof (*mme));
+ mme->prun.my_nonce = ctx.sta_action.nek_prun.my_nonce =
+ lib_rnd32 (&ctx.rnd);
+ mme->prun.your_nonce = ctx.sta_action.nek_prun.your_nonce =
+ lib_rnd32 (&ctx.rnd);
+
+ req_key_type = CP_MSG_KEY_NEK;
+ mme->prun.prn = ctx.sta_action.nek_prun.prn = 1;
+ nid = 0x11223344556677ull;
+ cco_cap = 1;
+ eks = 0;
+ mme->prun.pid = ctx.sta_action.nek_prun.pid = 2;
+ ctx.sta_action.nek_prun.pmn = 1;
+ mme->prun.pmn = ctx.sta_action.nek_prun.pmn + 1;
+ mme->peks = CP_MME_PEKS_DAK;
+
+ //sample network membership key:
+ nmk.key[0] = 0x11111111;
+ nmk.key[1] = 0x22222222;
+ nmk.key[2] = 0x33333333;
+ nmk.key[3] = 0x44444444;
+ mme->peer.tei = tei = ctx.sta_action.assoc.peer.tei = 5;
+ mme->peer.mac = ctx.sta_action.assoc.peer.mac = 0x2;
+
+ net = cp_sta_mgr_add_avln (&ctx, snid, nid);
+ cp_sta_mgr_set_our_avln (&ctx, net);
+
+ sta = cp_sta_mgr_sta_add (&ctx, net, mme->peer.tei, mme->peer.mac);
+
+ net->cco = sta;
+
+ mme->mmtype = CM_SET_KEY_REQ;
+ bitstream_init (&my_mme.bitstream, buffer, sizeof(buffer),
+ BITSTREAM_READ);
+
+ /* Build the MME. */
+ bitstream_init (&bitstream, buffer, sizeof(buffer), BITSTREAM_WRITE);
+
+ bitstream_access (&bitstream, &req_key_type, 8);
+ /* Reverse nonce order (simulate other side). */
+ bitstream_access (&bitstream, &mme->prun.your_nonce, 32);
+ bitstream_access (&bitstream, &mme->prun.my_nonce, 32);
+ bitstream_access (&bitstream, &mme->prun.pid, 8);
+ bitstream_access (&bitstream, &mme->prun.prn, 16);
+ bitstream_access (&bitstream, &mme->prun.pmn, 8);
+ bitstream_access (&bitstream, &cco_cap, 8);
+ bitstream_access (&bitstream, &nid, 56);
+ bitstream_access (&bitstream, &eks, 8);
+ bitstream_access (&bitstream, &nmk.key[0], 32);
+ bitstream_access (&bitstream, &nmk.key[1], 32);
+ bitstream_access (&bitstream, &nmk.key[2], 32);
+ bitstream_access (&bitstream, &nmk.key[3], 32);
+
+ bitstream_finalise (&bitstream);
+
+ mme->length = 38;
+
+ cp_fsm_event_t event;
+ ctx.fsm.handled_event = &event;
+ ctx.fsm.active_states[0] = CP_FSM_STATE_AUTHENTICATED;
+ ctx.fsm.handled_event->type = CP_FSM_EVENT_TYPE_CM_SET_KEY_REQ;
+
+ cp_eoc_sta_action_auth__authenticated_set_key_req (&ctx, mme);
+
+ test_fail_unless (ctx.fsm.active_states[0] ==
+ CP_FSM_STATE_AUTHENTICATED);
+ /* It should be last action. */
+ test_fail_unless (ctx.sta_action.nek_prun.pmn == 0xFF);
+ cp_eoc_sta_mgr_sta_remove (&ctx, sta);
+ slab_release (sta);
+ cp_eoc_cco_action_test_release_mac_store (&ctx);
+ test_fail_unless (mac_store_sta_remove (ctx.mac_store, mme->peer.tei));
+ cp_test_uninit (&ctx);
+ }
+ test_end
+
+ test_begin (test, "cp_eoc_sta_action_assoc__associated_no_beacons")
+ {
+ cp_t ctx;
+
+ cp_test_init (&ctx);
+
+ cp_net_t *net;
+
+ cp_mme_rx_t my_mme;
+ cp_mme_rx_t *mme = &my_mme;
+
+ net = cp_sta_mgr_add_avln (&ctx, 1, 1);
+ cp_sta_mgr_set_our_avln (&ctx, net);
+
+ memset (mme, 0, sizeof (*mme));
+ mme->peer.mac = 2;
+ mme->peer.tei = 5;
+ cp_sta_t *sta = cp_sta_mgr_sta_add (&ctx, net, mme->peer.tei,
+ mme->peer.mac);
+
+ cp_eoc_sta_action_assoc__associated_no_beacons(&ctx);
+
+ cp_sta_own_data_t *own_data = cp_sta_mgr_get_sta_own_data (&ctx);
+ test_fail_unless (own_data->tei_track == MAC_TEI_UNASSOCIATED);
+ test_fail_unless (cp_sta_own_data_get_tei (&ctx) ==
+ MAC_TEI_UNASSOCIATED);
+ test_fail_unless (cp_sta_own_data_get_authenticated_status (&ctx) ==
+ false);
+ test_fail_unless (ctx.sta_action.assoc.retry == 0);
+ test_fail_unless (ctx.sta_action.assoc.beacon_loss == 0);
+ cp_eoc_sta_mgr_sta_remove (&ctx, sta);
+ slab_release (sta);
+ cp_eoc_cco_action_test_release_mac_store (&ctx);
+ test_fail_unless (mac_store_sta_remove (ctx.mac_store, mme->peer.tei));
+ cp_test_uninit (&ctx);
+ }
+ test_end
+
+ test_begin (test, "cp_eoc_sta_action_assoc__associated_timeout")
+ {
+ cp_t ctx;
+
+ cp_test_init (&ctx);
+
+ cp_net_t *net;
+
+ cp_mme_rx_t my_mme;
+ cp_mme_rx_t *mme = &my_mme;
+
+ net = cp_sta_mgr_add_avln (&ctx, 1, 1);
+ cp_sta_mgr_set_our_avln (&ctx, net);
+
+ memset (mme, 0, sizeof (*mme));
+ mme->peer.mac = 2;
+ mme->peer.tei = 5;
+ cp_sta_t *sta = cp_sta_mgr_sta_add (&ctx, net, mme->peer.tei,
+ mme->peer.mac);
+
+ cp_eoc_sta_action_assoc__associated_timeout(&ctx);
+
+ cp_sta_own_data_t *own_data = cp_sta_mgr_get_sta_own_data (&ctx);
+ test_fail_unless (own_data->tei_track == MAC_TEI_UNASSOCIATED);
+ test_fail_unless (cp_sta_own_data_get_tei (&ctx) ==
+ MAC_TEI_UNASSOCIATED);
+ test_fail_unless (cp_sta_own_data_get_authenticated_status (&ctx) ==
+ false);
+ test_fail_unless (ctx.sta_action.assoc.retry == 0);
+ test_fail_unless (ctx.sta_action.assoc.beacon_loss == 0);
+ cp_eoc_sta_mgr_sta_remove (&ctx, sta);
+ slab_release (sta);
+ cp_eoc_cco_action_test_release_mac_store (&ctx);
+ test_fail_unless (mac_store_sta_remove (ctx.mac_store, mme->peer.tei));
+ cp_test_uninit (&ctx);
+ }
+ test_end
+
+ test_begin (test, "Call cp_eoc_sta_action_assoc__associated_leave")
+ {
+ cp_t ctx;
+
+ cp_test_init (&ctx);
+
+ cp_net_t *net;
+ bitstream_t bitstream;
+ u8 reason;
+ cp_nid_t nid;
+ cp_snid_t snid;
+ u8 buffer[1024];
+
+ cp_mme_rx_t my_mme;
+ cp_mme_rx_t *mme = &my_mme;
+
+ reason = 0;
+ nid = 0x11223344556677ull;
+ snid = 4;
+
+ memset (mme, 0, sizeof (*mme));
+ mme->peer.tei = 5;
+ mme->peer.mac = 0x2;
+
+ net = cp_sta_mgr_add_avln (&ctx, snid, nid);
+ cp_sta_mgr_set_our_avln (&ctx, net);
+
+ cp_sta_t *sta = cp_sta_mgr_sta_add (&ctx, net, mme->peer.tei,
+ mme->peer.mac);
+
+ mme->mmtype = CC_LEAVE_IND;
+ bitstream_init (&my_mme.bitstream, buffer, sizeof(buffer),
+ BITSTREAM_READ);
+
+ /* Build the MME. */
+ bitstream_init (&bitstream, buffer, sizeof(buffer), BITSTREAM_WRITE);
+
+ bitstream_access (&bitstream, &reason, 8);
+ bitstream_access (&bitstream, &nid, 56);
+
+ bitstream_finalise (&bitstream);
+
+ mme->length = 8;
+
+ cp_fsm_event_t event;
+ ctx.fsm.handled_event = &event;
+ ctx.fsm.active_states[0] = CP_FSM_STATE_ASSOCIATED;
+ ctx.fsm.handled_event->type = CP_FSM_EVENT_TYPE_CC_LEAVE_IND;
+
+ cp_eoc_sta_action_assoc__associated_leave (&ctx, mme);
+
+ cp_sta_own_data_t *own_data = cp_sta_mgr_get_sta_own_data (&ctx);
+
+ test_fail_unless(ctx.fsm.active_states[0] ==
+ CP_FSM_STATE_DETECTING_BEACON);
+ test_fail_unless (own_data->tei_track == MAC_TEI_UNASSOCIATED);
+ test_fail_unless (cp_sta_own_data_get_tei (&ctx) ==
+ MAC_TEI_UNASSOCIATED);
+ test_fail_unless (cp_sta_own_data_get_authenticated_status (&ctx) ==
+ false);
+ test_fail_unless (ctx.sta_action.assoc.retry == 0);
+ test_fail_unless (ctx.sta_action.assoc.beacon_loss == 0);
+ cp_eoc_sta_mgr_sta_remove (&ctx, sta);
+ slab_release (sta);
+ cp_eoc_cco_action_test_release_mac_store (&ctx);
+ test_fail_unless (mac_store_sta_remove (ctx.mac_store, mme->peer.tei));
+ cp_test_uninit (&ctx);
+ }
+ test_end
+
+ test_begin (test, "Call cp_eoc_sta_action_assoc__authenticated_leave")
+ {
+ cp_t ctx;
+
+ cp_test_init (&ctx);
+
+ cp_net_t *net;
+ bitstream_t bitstream;
+ u8 reason;
+ cp_nid_t nid;
+ cp_snid_t snid;
+ u8 buffer[1024];
+
+ cp_mme_rx_t my_mme;
+ cp_mme_rx_t *mme = &my_mme;
+
+ reason = 0;
+ nid = 0x11223344556677ull;
+ snid = 4;
+
+ memset (mme, 0, sizeof (*mme));
+ mme->peer.tei = 5;
+ mme->peer.mac = 0x2;
+
+ net = cp_sta_mgr_add_avln (&ctx, snid, nid);
+ cp_sta_mgr_set_our_avln (&ctx, net);
+
+ cp_sta_t *sta = cp_sta_mgr_sta_add (&ctx, net, mme->peer.tei,
+ mme->peer.mac);
+
+ mme->mmtype = CC_LEAVE_IND;
+ bitstream_init (&my_mme.bitstream, buffer, sizeof(buffer),
+ BITSTREAM_READ);
+
+ /* Build the MME. */
+ bitstream_init (&bitstream, buffer, sizeof(buffer), BITSTREAM_WRITE);
+
+ bitstream_access (&bitstream, &reason, 8);
+ bitstream_access (&bitstream, &nid, 56);
+
+ bitstream_finalise (&bitstream);
+
+ mme->length = 8;
+
+ cp_fsm_event_t event;
+ ctx.fsm.handled_event = &event;
+ ctx.fsm.active_states[0] = CP_FSM_STATE_AUTHENTICATED;
+ ctx.fsm.handled_event->type = CP_FSM_EVENT_TYPE_CC_LEAVE_IND;
+
+ cp_eoc_sta_action_assoc__authenticated_leave (&ctx, mme);
+
+ cp_sta_own_data_t *own_data = cp_sta_mgr_get_sta_own_data (&ctx);
+
+ test_fail_unless(ctx.fsm.active_states[0] ==
+ CP_FSM_STATE_DETECTING_BEACON);
+ test_fail_unless (own_data->tei_track == MAC_TEI_UNASSOCIATED);
+ test_fail_unless (cp_sta_own_data_get_tei (&ctx) ==
+ MAC_TEI_UNASSOCIATED);
+ test_fail_unless (cp_sta_own_data_get_authenticated_status (&ctx) ==
+ false);
+ test_fail_unless (ctx.sta_action.assoc.retry == 0);
+ test_fail_unless (ctx.sta_action.assoc.beacon_loss == 0);
+ cp_eoc_sta_mgr_sta_remove (&ctx, sta);
+ slab_release (sta);
+ cp_eoc_cco_action_test_release_mac_store (&ctx);
+ test_fail_unless (mac_store_sta_remove (ctx.mac_store, mme->peer.tei));
+ cp_test_uninit (&ctx);
+ }
+ test_end
+
+ test_begin (test, "cp_eoc_sta_action_assoc__authenticated_no_beacons")
+ {
+ cp_t ctx;
+
+ cp_test_init (&ctx);
+
+ cp_net_t *net;
+
+ cp_mme_rx_t my_mme;
+ cp_mme_rx_t *mme = &my_mme;
+
+ net = cp_sta_mgr_add_avln (&ctx, 1, 1);
+ cp_sta_mgr_set_our_avln (&ctx, net);
+
+ memset (mme, 0, sizeof (*mme));
+ mme->peer.mac = 2;
+ mme->peer.tei = 5;
+ cp_sta_t *sta = cp_sta_mgr_sta_add (&ctx, net, mme->peer.tei,
+ mme->peer.mac);
+
+ cp_eoc_sta_action_assoc__authenticated_no_beacons(&ctx);
+
+ cp_sta_own_data_t *own_data = cp_sta_mgr_get_sta_own_data (&ctx);
+ test_fail_unless (own_data->tei_track == MAC_TEI_UNASSOCIATED);
+ test_fail_unless (cp_sta_own_data_get_tei (&ctx) ==
+ MAC_TEI_UNASSOCIATED);
+ test_fail_unless (cp_sta_own_data_get_authenticated_status (&ctx) ==
+ false);
+ test_fail_unless (ctx.sta_action.assoc.retry == 0);
+ test_fail_unless (ctx.sta_action.assoc.beacon_loss == 0);
+ cp_eoc_sta_mgr_sta_remove (&ctx, sta);
+ slab_release (sta);
+ cp_eoc_cco_action_test_release_mac_store (&ctx);
+ test_fail_unless (mac_store_sta_remove (ctx.mac_store, mme->peer.tei));
+ cp_test_uninit (&ctx);
+ }
+ test_end
+
+ test_begin (test, "cp_eoc_sta_action_assoc__beacon_not_received")
+ {
+ cp_t ctx;
+ cp_test_init (&ctx);
+
+ ctx.sta_action.assoc.beacon_loss = CP_MAX_NO_BEACON + 1;
+
+ cp_eoc_sta_action_assoc__beacon_not_received(&ctx);
+
+ test_fail_unless (ctx.sta_action.assoc.beacon_loss == 0);
+ cp_test_uninit (&ctx);
+ }
+ test_end
+
+ test_begin (test, "cp_eoc_sta_action_auth__authenticated_set_out_lev")
+ {
+ cp_t ctx;
+
+ cp_test_init (&ctx);
+
+ cp_net_t *net;
+ bitstream_t bitstream;
+ u8 out_level;
+ u8 buffer[1024];
+
+ cp_mme_rx_t my_mme;
+ cp_mme_rx_t *mme = &my_mme;
+
+ memset (mme, 0, sizeof (*mme));
+ mme->peer.tei = 5;
+ mme->peer.mac = 0x2;
+ out_level = 120;
+
+ //set our avln
+ net = cp_sta_mgr_add_avln (&ctx, 1, 1);
+ cp_sta_mgr_set_our_avln (&ctx, net);
+
+ cp_sta_t *sta = cp_sta_mgr_sta_add (&ctx, net, mme->peer.tei,
+ mme->peer.mac);
+
+ mme->mmtype = CC_LEAVE_IND;
+ bitstream_init (&my_mme.bitstream, buffer, sizeof(buffer),
+ BITSTREAM_READ);
+
+ /* Build the MME. */
+ bitstream_init (&bitstream, buffer, sizeof(buffer), BITSTREAM_WRITE);
+
+ bitstream_access (&bitstream, &out_level, 8);
+
+ bitstream_finalise (&bitstream);
+
+ mme->length = 1;
+
+ cp_eoc_sta_action_auth__authenticated_set_out_lev(&ctx, mme);
+ cp_eoc_sta_mgr_sta_remove (&ctx, sta);
+ slab_release (sta);
+ cp_eoc_cco_action_test_release_mac_store (&ctx);
+ test_fail_unless (mac_store_sta_remove (ctx.mac_store, mme->peer.tei));
+ cp_test_uninit (&ctx);
+ }
+ test_end
+}
+
+
+void
+test_case_poweron (test_t test)
+{
+ test_case_begin (test, "Poweron");
+
+ test_begin (test, "Rcv & process cp_eoc_sta_action__power_on_no_beacons")
+ {
+ cp_t ctx;
+ cp_sta_own_data_t *own;
+
+ cp_test_init (&ctx);
+
+ ctx.sta_mgr.sta_own_data.nid = 1;
+ ctx.sta_mgr.sta_own_data.snid = 1;
+
+ cp_eoc_sta_action__power_on_no_beacons (&ctx);
+
+ own = cp_sta_mgr_get_sta_own_data (&ctx);
+
+ test_fail_unless(cp_sta_own_data_get_tei(&ctx) == MAC_TEI_UNASSOCIATED);
+ test_fail_unless(cp_sta_own_data_get_authenticated_status(&ctx) ==
+ false);
+ test_fail_unless(cp_sta_mgr_get_our_avln(&ctx) != NULL);
+ test_fail_unless(own->nid_track == cp_sta_own_data_get_nid (&ctx));
+ test_fail_unless(cp_sta_own_data_get_cco_status(&ctx) == false);
+ test_fail_unless(own->tei_track == MAC_TEI_UNASSOCIATED);
+ test_fail_unless(ctx.sta_action.assoc.retry == 0);
+ test_fail_unless(ctx.sta_action.assoc.beacon_loss == 0);
+ cp_test_uninit (&ctx);
+ }
+ test_end
+
+ test_begin (test, "Rcv & process cp_sta_action_poweron__idle__to_poweron")
+ {
+ cp_t ctx;
+ cp_test_init (&ctx);
+
+ ctx.sta_mgr.sta_own_data.nid = 1;
+ ctx.sta_mgr.sta_own_data.snid = 1;
+
+ cp_sta_action_poweron__idle__to_poweron (&ctx);
+
+ test_fail_unless(ctx.sta_action.assoc.peer.mac == \
+ CP_MME_PEER (MAC_BROADCAST, MAC_TEI_UNASSOCIATED).mac);
+ test_fail_unless(ctx.sta_action.assoc.peer.eth_type ==
+ CP_MME_PEER (MAC_BROADCAST, MAC_TEI_UNASSOCIATED).eth_type);
+ test_fail_unless(ctx.sta_action.assoc.peer.vlan_tci ==
+ CP_MME_PEER (MAC_BROADCAST, MAC_TEI_UNASSOCIATED).vlan_tci);
+ test_fail_unless(ctx.sta_action.assoc.peer.tei ==
+ CP_MME_PEER (MAC_BROADCAST, MAC_TEI_UNASSOCIATED).tei);
+ cp_test_uninit (&ctx);
+ }
+ test_end
+}
+
+
+void
+test_action_test_suite (test_t t)
+{
+ test_suite_begin (t, "sta_action");
+ test_case_association_and_authentication_action (t);
+ test_case_poweron (t);
+}
+
+
+int
+main (int argc, char **argv)
+{
+ test_t t;
+ trace_init ();
+ test_init (t, argc, argv);
+ test_action_test_suite (t);
+ trace_uninit ();
+
+ test_case_begin (t, "Memory allocation");
+ test_begin (t, "memory leaks")
+ {
+ test_fail_if (blk_check_memory () != true, "Memory leaks");
+ }
+ test_end;
+
+ test_result (t);
+ return test_nb_failed (t) == 0 ? 0 : 1;
+}
diff --git a/cesar/cp/eoc/sta/action/test/utest/src/test_fsm.c b/cesar/cp/eoc/sta/action/test/utest/src/test_fsm.c
new file mode 100644
index 0000000000..9e6ddf4e9a
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/test/utest/src/test_fsm.c
@@ -0,0 +1,743 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2010 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/test_fsm.c
+ * \brief Test FSM module.
+ * \ingroup test
+ */
+#include "common/std.h"
+
+#include "lib/blk.h"
+#include "lib/test.h"
+#include "lib/scenario/scenario.h"
+#include "cp/fsm/fsm.h"
+#include "cp/inc/context.h"
+#include "cp/sta/core/core.h"
+
+void
+test_fsm_basic_test_case (test_t t)
+{
+ test_case_begin (t, "basic");
+ cp_t cp;
+ cp.sta_core_urgent_flag = false;
+ cp_trace_init (&cp);
+
+ test_begin (t, "successuful authentication")
+ {
+ cp_fsm_init (&cp);
+ cp.sta_core_flag = false;
+ scenario_entry_t entries[] = {
+ /* STOPPED */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_DRV_STA_SET_MAC_ADDR_REQ),
+ SCENARIO_EVENT (cp_fsm__STOPPED__drv_sta_set_mac_addr_req),
+ /* STOPPED */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_DRV_STA_SET_CCO_PREF_REQ),
+ SCENARIO_EVENT (cp_fsm__STOPPED__drv_sta_set_cco_pref_req),
+ /* STOPPED */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_DRV_STA_SET_WAS_CCO_REQ),
+ SCENARIO_EVENT (cp_fsm__STOPPED__drv_sta_set_was_cco_req),
+ /* STOPPED */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_DRV_STA_SET_NPW_REQ),
+ SCENARIO_EVENT (cp_fsm__STOPPED__drv_sta_set_npw_req),
+ /* STOPPED */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_DRV_STA_SET_DPW_REQ),
+ SCENARIO_EVENT (cp_fsm__STOPPED__drv_sta_set_dpw_req),
+ /* STOPPED */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_DRV_STA_SET_SL_REQ),
+ SCENARIO_EVENT (cp_fsm__STOPPED__drv_sta_set_sl_req),
+ /* STOPPED */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_DRV_STA_SET_NID_REQ),
+ SCENARIO_EVENT (cp_fsm__STOPPED__drv_sta_set_nid_req),
+ /* STOPPED */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_DRV_STA_SET_TONEMASK_REQ),
+ SCENARIO_EVENT (cp_fsm__STOPPED__drv_sta_set_tonemask_req),
+ /* STOPPED */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_DRV_STA_SET_KEY_REQ),
+ SCENARIO_EVENT (cp_fsm__STOPPED__drv_sta_set_key_req),
+ /* STOPPED */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_DRV_STA_SET_DAK_REQ),
+ SCENARIO_EVENT (cp_fsm__STOPPED__drv_sta_set_dak_req),
+ /* STOPPED */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_DRV_STA_SET_M_STA_HFID_REQ),
+ SCENARIO_EVENT (cp_fsm__STOPPED__drv_sta_set_m_sta_hfid_req),
+ /* STOPPED */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_DRV_STA_SET_U_STA_HFID_REQ),
+ SCENARIO_EVENT (cp_fsm__STOPPED__drv_sta_set_u_sta_hfid_req),
+ /* STOPPED */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_DRV_STA_SET_AVLN_HFID_REQ),
+ SCENARIO_EVENT (cp_fsm__STOPPED__drv_sta_set_avln_hfid_req),
+ /* STOPPED */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_DRV_STA_SET_CONFIG_REQ),
+ SCENARIO_EVENT (cp_sta_action_drv__drv_sta_set_config_req),
+ /* STOPPED */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_DRV_STA_MAC_START_REQ),
+ SCENARIO_EVENT (cp_fsm__STOPPED__drv_sta_mac_start_req),
+ /* STARTED */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_to_poweron),
+ SCENARIO_EVENT (cp_fsm__STARTED__poweron__idle__to_poweron),
+ /* DETECTING_BEACON */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_BEACON),
+ SCENARIO_EVENT (cp_fsm__DETECTING_BEACON__BEACON),
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_nd_beacon),
+ SCENARIO_EVENT (cp_fsm__DETECTING_BEACON__nd_beacon),
+ /*Enter ASSOC timer */
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__start_retry_timer),
+ /* ASSOCIATING*/
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_CC_ASSOC_CNF),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__CC_ASSOC_CNF,
+ .branch = CP_FSM_BRANCH (ASSOCIATING, CC_ASSOC_CNF, success)),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__stop_retry_timer),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__start_retry_timer),
+ /* ASSOCIATED */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_CM_GET_KEY_CNF),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATED__CM_GET_KEY_CNF,
+ .branch = CP_FSM_BRANCH (ASSOCIATED, CM_GET_KEY_CNF, all_keys_granted)),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__stop_retry_timer),
+ /* AUTHENTICATED */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_BEACON),
+ SCENARIO_EVENT (cp_fsm__AUTHENTICATED__BEACON),
+ /* AUTHENTICATED -> VS_EOC_CCO_SET_OUT_LEV_IND -> AUTHENTICATED */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_VS_EOC_CCO_SET_OUT_LEV_IND),
+ SCENARIO_EVENT (cp_fsm__AUTHENTICATED__set_out_lev_ind),
+ SCENARIO_END
+ };
+ scenario_globals_t globals = {
+ .cp = &cp,
+ };
+ scenario_run (t, entries, &globals);
+ test_fail_unless (cp.fsm.active_states[0] == CP_FSM_STATE_AUTHENTICATED);
+ cp_fsm_uninit (&cp);
+ } test_end;
+
+ test_begin (t, "unassociated")
+ {
+ cp_fsm_init (&cp);
+ cp.sta_core_flag = false;
+ scenario_entry_t entries[] = {
+ /* STOPPED */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_DRV_STA_MAC_START_REQ),
+ SCENARIO_EVENT (cp_fsm__STOPPED__drv_sta_mac_start_req),
+ /* STARTED */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_to_poweron),
+ SCENARIO_EVENT (cp_fsm__STARTED__poweron__idle__to_poweron),
+ /* DETECTING_BEACON */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_BEACON),
+ SCENARIO_EVENT (cp_fsm__DETECTING_BEACON__BEACON),
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_nd_beacon),
+ SCENARIO_EVENT (cp_fsm__DETECTING_BEACON__nd_beacon),
+ /*Enter ASSOC timer */
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__start_retry_timer),
+ /* ASSOCIATING*/
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_CC_ASSOC_CNF),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__CC_ASSOC_CNF,
+ .branch = CP_FSM_BRANCH (ASSOCIATING,
+ CC_ASSOC_CNF, success)),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__stop_retry_timer),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__start_retry_timer),
+ /* ASSOCIATED */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_CM_GET_KEY_CNF),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATED__CM_GET_KEY_CNF,
+ .branch = CP_FSM_BRANCH (ASSOCIATED,
+ CM_GET_KEY_CNF, all_keys_granted)),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__stop_retry_timer),
+ /* AUTHENTICATED */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_BEACON),
+ SCENARIO_EVENT (cp_fsm__AUTHENTICATED__BEACON),
+ /* AUTHENTICATED -> VS_EOC_CCO_SET_OUT_LEV_IND -> AUTHENTICATED */
+ SCENARIO_ACTION (post_and_process,
+ .type
+ = CP_FSM_EVENT_TYPE_VS_EOC_CCO_SET_OUT_LEV_IND),
+ SCENARIO_EVENT (cp_fsm__AUTHENTICATED__set_out_lev_ind),
+ /* AUTHENTICATED, leave => OK */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_CC_LEAVE_IND),
+ SCENARIO_EVENT (cp_fsm__AUTHENTICATED__CC_LEAVE_IND,
+ .branch = CP_FSM_BRANCH (AUTHENTICATED,
+ CC_LEAVE_IND, ok)),
+ /* DETECTING_BEACON, beacon detected */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_nd_beacon),
+ SCENARIO_EVENT (cp_fsm__DETECTING_BEACON__nd_beacon),
+ /* ASSOCIATING, assoc_cnf, unsuccess*/
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__start_retry_timer),
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_CC_ASSOC_CNF),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__CC_ASSOC_CNF,
+ .branch = CP_FSM_BRANCH (ASSOCIATING,
+ CC_ASSOC_CNF, unsuccess)),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__stop_retry_timer),
+ /* UNASSOCIATED */
+ SCENARIO_EVENT (cp_fsm__UNASSOCIATED__start_retry_timer),
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_BEACON),
+ SCENARIO_EVENT (cp_fsm__UNASSOCIATED__BEACON),
+ /* UNASSOCIATED, no beacons */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_no_beacons),
+ SCENARIO_EVENT (cp_fsm__UNASSOCIATED__no_beacons),
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_timeout_unassociating),
+ SCENARIO_EVENT (cp_fsm__UNASSOCIATED__stop_retry_timer),
+ SCENARIO_END
+ };
+ scenario_globals_t globals = {
+ .cp = &cp,
+ };
+ scenario_run (t, entries, &globals);
+ test_fail_unless (cp.fsm.active_states[0]
+ == CP_FSM_STATE_DETECTING_BEACON);
+ cp_fsm_uninit (&cp);
+ } test_end;
+
+ test_begin (t, "associating, beacon timeout => sleep_unassociated")
+ {
+ cp_fsm_init (&cp);
+ cp.sta_core_flag = false;
+ scenario_entry_t entries[] = {
+ /* STOPPED */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_DRV_STA_MAC_START_REQ),
+ SCENARIO_EVENT (cp_fsm__STOPPED__drv_sta_mac_start_req),
+ /* STARTED */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_to_poweron),
+ SCENARIO_EVENT (cp_fsm__STARTED__poweron__idle__to_poweron),
+ SCENARIO_END
+ };
+ scenario_globals_t globals = {
+ .cp = &cp,
+ };
+ scenario_run (t, entries, &globals);
+ test_fail_unless (cp.fsm.active_states[0]
+ == CP_FSM_STATE_DETECTING_BEACON);
+ cp_fsm_uninit (&cp);
+ } test_end;
+
+ test_begin (t, "bad association")
+ {
+ cp_fsm_init (&cp);
+ cp.sta_core_flag = false;
+ scenario_entry_t entries[] = {
+ /* STOPPED */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_DRV_STA_MAC_START_REQ),
+ SCENARIO_EVENT (cp_fsm__STOPPED__drv_sta_mac_start_req),
+ /* STARTED */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_to_poweron),
+ SCENARIO_EVENT (cp_fsm__STARTED__poweron__idle__to_poweron),
+ /* DETECTING_BEACON, beacon detected */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_nd_beacon),
+ SCENARIO_EVENT (cp_fsm__DETECTING_BEACON__nd_beacon),
+ /*Enter ACCOC timer */
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__start_retry_timer),
+ /* ASSOCIATING, timeout, retry */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_timeout_associating),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__timeout_associating,
+ .branch = CP_FSM_BRANCH (ASSOCIATING, timeout_associating, retry)),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__stop_retry_timer),
+ /* DETECTING_BEACON, beacon detected */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_nd_beacon),
+ SCENARIO_EVENT (cp_fsm__DETECTING_BEACON__nd_beacon),
+ /*Enter ACCOC timer */
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__start_retry_timer),
+ /* ASSOCIATING, timeout, no retries*/
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_timeout_associating),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__timeout_associating,
+ .branch = CP_FSM_BRANCH (ASSOCIATING, timeout_associating, no_retry)),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__stop_retry_timer),
+ /* UNASSOCIATED */
+ SCENARIO_EVENT (cp_fsm__UNASSOCIATED__start_retry_timer),
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_enter_sleep_unassociated),
+ SCENARIO_EVENT (cp_fsm__UNASSOCIATED__stop_retry_timer),
+ /* SLEEP_UNASSOCIATED */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_exit_sleep_unassociated),
+ /* UNASSOCIATED */
+ SCENARIO_EVENT (cp_fsm__UNASSOCIATED__start_retry_timer),
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_retry_unassociated),
+ SCENARIO_EVENT (cp_fsm__UNASSOCIATED__stop_retry_timer),
+ /* DETECTING_BEACON, beacon detected */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_nd_beacon),
+ SCENARIO_EVENT (cp_fsm__DETECTING_BEACON__nd_beacon),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__start_retry_timer),
+ /* ASSOCIATING, assoc_cnf, unrelated */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_CC_ASSOC_CNF),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__CC_ASSOC_CNF,
+ .branch = CP_FSM_BRANCH (ASSOCIATING, CC_ASSOC_CNF, unsuccess)),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__stop_retry_timer),
+ SCENARIO_EVENT (cp_fsm__UNASSOCIATED__start_retry_timer),
+ /* UNASSOCIATED */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_retry_unassociated),
+ SCENARIO_EVENT (cp_fsm__UNASSOCIATED__stop_retry_timer),
+ /* DETECTING_BEACON, beacon detected */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_nd_beacon),
+ SCENARIO_EVENT (cp_fsm__DETECTING_BEACON__nd_beacon),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__start_retry_timer),
+ /* ASSOCIATING, no beacons*/
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_no_beacons),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__no_beacons),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__stop_retry_timer),
+ /* UNASSOCIATED */
+ SCENARIO_EVENT (cp_fsm__UNASSOCIATED__start_retry_timer),
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_retry_unassociated),
+ SCENARIO_EVENT (cp_fsm__UNASSOCIATED__stop_retry_timer),
+ /* DETECTING_BEACON, beacon detected */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_nd_beacon),
+ SCENARIO_EVENT (cp_fsm__DETECTING_BEACON__nd_beacon),
+ /* ASSOCIATING, assoc_cnf, unsuccess*/
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__start_retry_timer),
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_CC_ASSOC_CNF),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__CC_ASSOC_CNF,
+ .branch = CP_FSM_BRANCH (ASSOCIATING, CC_ASSOC_CNF, unsuccess)),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__stop_retry_timer),
+ /* UNASSOCIATED */
+ SCENARIO_EVENT (cp_fsm__UNASSOCIATED__start_retry_timer),
+ SCENARIO_END
+ };
+ scenario_globals_t globals = {
+ .cp = &cp,
+ };
+ scenario_run (t, entries, &globals);
+ test_fail_unless (cp.fsm.active_states[0] == CP_FSM_STATE_UNASSOCIATED);
+ cp_fsm_uninit (&cp);
+ } test_end;
+
+ test_begin (t, "associated")
+ {
+ cp_fsm_init (&cp);
+ cp.sta_core_flag = false;
+ scenario_entry_t entries[] = {
+ /* STOPPED */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_DRV_STA_MAC_START_REQ),
+ SCENARIO_EVENT (cp_fsm__STOPPED__drv_sta_mac_start_req),
+ /* STARTED */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_to_poweron),
+ SCENARIO_EVENT (cp_fsm__STARTED__poweron__idle__to_poweron),
+ /* DETECTING_BEACON */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_nd_beacon),
+ SCENARIO_EVENT (cp_fsm__DETECTING_BEACON__nd_beacon),
+ /*Enter ACCOC timer */
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__start_retry_timer),
+ /* ASSOCIATING*/
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_CC_ASSOC_CNF),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__CC_ASSOC_CNF,
+ .branch = CP_FSM_BRANCH (ASSOCIATING, CC_ASSOC_CNF, success)),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__stop_retry_timer),
+ /* ASSOCIATED, get_key_cnf, unrelated */
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__start_retry_timer),
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_CM_GET_KEY_CNF),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATED__CM_GET_KEY_CNF,
+ .branch = CP_FSM_BRANCH (ASSOCIATED, CM_GET_KEY_CNF, unrelated)),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__stop_retry_timer),
+ /* UNASSOCIATED */
+ SCENARIO_EVENT (cp_fsm__UNASSOCIATED__start_retry_timer),
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_retry_unassociated),
+ SCENARIO_EVENT (cp_fsm__UNASSOCIATED__stop_retry_timer),
+ /* DETECTING_BEACON */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_nd_beacon),
+ SCENARIO_EVENT (cp_fsm__DETECTING_BEACON__nd_beacon),
+ /* ASSOCIATING*/
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__start_retry_timer),
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_CC_ASSOC_CNF),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__CC_ASSOC_CNF,
+ .branch = CP_FSM_BRANCH (ASSOCIATING, CC_ASSOC_CNF, success)),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__stop_retry_timer),
+ /* ASSOCIATED,get_key_cnf, not granted */
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__start_retry_timer),
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_CM_GET_KEY_CNF),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATED__CM_GET_KEY_CNF,
+ .branch = CP_FSM_BRANCH (ASSOCIATED, CM_GET_KEY_CNF, not_granted)),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__stop_retry_timer),
+ /* UNASSOCIATED */
+ SCENARIO_EVENT (cp_fsm__UNASSOCIATED__start_retry_timer),
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_retry_unassociated),
+ SCENARIO_EVENT (cp_fsm__UNASSOCIATED__stop_retry_timer),
+ /* DETECTING_BEACON */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_nd_beacon),
+ SCENARIO_EVENT (cp_fsm__DETECTING_BEACON__nd_beacon),
+ /* ASSOCIATING*/
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__start_retry_timer),
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_CC_ASSOC_CNF),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__CC_ASSOC_CNF,
+ .branch = CP_FSM_BRANCH (ASSOCIATING, CC_ASSOC_CNF, success)),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__stop_retry_timer),
+ /* ASSOCIATED, encrypt_payload */
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__start_retry_timer),
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_encrypt_payload_rsp),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATED__encrypt_payload_rsp),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__stop_retry_timer),
+ /* UNASSOCIATED */
+ SCENARIO_EVENT (cp_fsm__UNASSOCIATED__start_retry_timer),
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_retry_unassociated),
+ SCENARIO_EVENT (cp_fsm__UNASSOCIATED__stop_retry_timer),
+ /* DETECTING_BEACON */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_nd_beacon),
+ SCENARIO_EVENT (cp_fsm__DETECTING_BEACON__nd_beacon),
+ /* ASSOCIATING*/
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__start_retry_timer),
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_CC_ASSOC_CNF),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__CC_ASSOC_CNF,
+ .branch = CP_FSM_BRANCH (ASSOCIATING, CC_ASSOC_CNF, success)),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__stop_retry_timer),
+ /* ASSOCIATED, no beacons */
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__start_retry_timer),
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_no_beacons),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATED__no_beacons),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__stop_retry_timer),
+ /* UNASSOCIATED */
+ SCENARIO_EVENT (cp_fsm__UNASSOCIATED__start_retry_timer),
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_retry_unassociated),
+ SCENARIO_EVENT (cp_fsm__UNASSOCIATED__stop_retry_timer),
+ /* DETECTING_BEACON */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_nd_beacon),
+ SCENARIO_EVENT (cp_fsm__DETECTING_BEACON__nd_beacon),
+ /* ASSOCIATING*/
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__start_retry_timer),
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_CC_ASSOC_CNF),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__CC_ASSOC_CNF,
+ .branch = CP_FSM_BRANCH (ASSOCIATING, CC_ASSOC_CNF, success)),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__stop_retry_timer),
+ /* ASSOCIATED, leave */
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__start_retry_timer),
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_CC_LEAVE_IND),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATED__CC_LEAVE_IND,
+ .branch = CP_FSM_BRANCH (ASSOCIATED, CC_LEAVE_IND, ok)),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__stop_retry_timer),
+ /* DETECTING_BEACON */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_nd_beacon),
+ SCENARIO_EVENT (cp_fsm__DETECTING_BEACON__nd_beacon),
+ /* ASSOCIATING*/
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__start_retry_timer),
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_CC_ASSOC_CNF),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__CC_ASSOC_CNF,
+ .branch = CP_FSM_BRANCH (ASSOCIATING, CC_ASSOC_CNF, success)),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__stop_retry_timer),
+ /* ASSOCIATED, timeout_authenticating */
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__start_retry_timer),
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_timeout_associating),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATED__timeout_associating),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__stop_retry_timer),
+ /* UNASSOCIATED */
+ SCENARIO_EVENT (cp_fsm__UNASSOCIATED__start_retry_timer),
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_retry_unassociated),
+ SCENARIO_EVENT (cp_fsm__UNASSOCIATED__stop_retry_timer),
+ /* DETECTING_BEACON */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_nd_beacon),
+ SCENARIO_EVENT (cp_fsm__DETECTING_BEACON__nd_beacon),
+ /* ASSOCIATING*/
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__start_retry_timer),
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_CC_ASSOC_CNF),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__CC_ASSOC_CNF,
+ .branch = CP_FSM_BRANCH (ASSOCIATING, CC_ASSOC_CNF, success)),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__stop_retry_timer),
+ /* ASSOCIATED, get_key */
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__start_retry_timer),
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_CM_GET_KEY_CNF),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATED__CM_GET_KEY_CNF,
+ .branch = CP_FSM_BRANCH (ASSOCIATED, CM_GET_KEY_CNF, all_keys_granted)),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__stop_retry_timer),
+ /* AUTHENTICATED */
+ SCENARIO_END
+ };
+ scenario_globals_t globals = {
+ .cp = &cp,
+ };
+ scenario_run (t, entries, &globals);
+ test_fail_unless (cp.fsm.active_states[0] == CP_FSM_STATE_AUTHENTICATED);
+ cp_fsm_uninit (&cp);
+ } test_end;
+
+ test_begin (t, "authenticated")
+ {
+ cp_fsm_init (&cp);
+ cp.sta_core_flag = false;
+ scenario_entry_t entries[] = {
+ /* STOPPED */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_DRV_STA_MAC_START_REQ),
+ SCENARIO_EVENT (cp_fsm__STOPPED__drv_sta_mac_start_req),
+ /* STARTED */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_to_poweron),
+ SCENARIO_EVENT (cp_fsm__STARTED__poweron__idle__to_poweron),
+ /* DETECTING_BEACON */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_nd_beacon),
+ SCENARIO_EVENT (cp_fsm__DETECTING_BEACON__nd_beacon),
+ /*Enter ACCOC timer */
+ /* ASSOCIATING*/
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__start_retry_timer),
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_CC_ASSOC_CNF),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__CC_ASSOC_CNF,
+ .branch = CP_FSM_BRANCH (ASSOCIATING, CC_ASSOC_CNF, success)),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__stop_retry_timer),
+ /* ASSOCIATED */
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__start_retry_timer),
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_CM_GET_KEY_CNF),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATED__CM_GET_KEY_CNF,
+ .branch = CP_FSM_BRANCH (ASSOCIATED, CM_GET_KEY_CNF, all_keys_granted)),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__stop_retry_timer),
+ /* AUTHENTICATED, sleep */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_sleep_enter_cnf),
+ /* SLEEP_AUTHENTICATED, exit sleep */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_sleep_exit_rsp),
+ /* AUTHENTICATED, sleep */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_sleep_enter_cnf),
+ /* SLEEP_AUTHENTICATED, no beacons */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_no_beacons),
+ /* UNASSOCIATED */
+ SCENARIO_EVENT (cp_fsm__UNASSOCIATED__start_retry_timer),
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_retry_unassociated),
+ SCENARIO_EVENT (cp_fsm__UNASSOCIATED__stop_retry_timer),
+ /* DETECTING_BEACON */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_nd_beacon),
+ SCENARIO_EVENT (cp_fsm__DETECTING_BEACON__nd_beacon),
+ /* ASSOCIATING*/
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__start_retry_timer),
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_CC_ASSOC_CNF),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__CC_ASSOC_CNF,
+ .branch = CP_FSM_BRANCH (ASSOCIATING, CC_ASSOC_CNF, success)),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__stop_retry_timer),
+ /* ASSOCIATED */
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__start_retry_timer),
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_CM_GET_KEY_CNF),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATED__CM_GET_KEY_CNF,
+ .branch = CP_FSM_BRANCH (ASSOCIATED, CM_GET_KEY_CNF, all_keys_granted)),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__stop_retry_timer),
+ /* AUTHENTICATED, NEK change request */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_CM_SET_KEY_REQ),
+ SCENARIO_EVENT (cp_fsm__AUTHENTICATED__CM_SET_KEY_REQ),
+ /* AUTHENTICATED, no beacons */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_no_beacons),
+ SCENARIO_EVENT (cp_fsm__AUTHENTICATED__no_beacons),
+ /* DETECTING_BEACON */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_nd_beacon),
+ SCENARIO_EVENT (cp_fsm__DETECTING_BEACON__nd_beacon),
+ /* ASSOCIATING*/
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__start_retry_timer),
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_CC_ASSOC_CNF),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__CC_ASSOC_CNF,
+ .branch = CP_FSM_BRANCH (ASSOCIATING, CC_ASSOC_CNF, success)),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__stop_retry_timer),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__start_retry_timer),
+ /* ASSOCIATED */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_CM_GET_KEY_CNF),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATED__CM_GET_KEY_CNF,
+ .branch = CP_FSM_BRANCH (ASSOCIATED, CM_GET_KEY_CNF, all_keys_granted)),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__stop_retry_timer),
+ /* AUTHENTICATED, CM_NW_STATS */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_CM_NW_STATS_REQ),
+ SCENARIO_EVENT (cp_fsm__AUTHENTICATED__CM_NW_STATS_REQ),
+ /* AUTHENTICATED, leave => OK */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_CC_LEAVE_IND),
+ SCENARIO_EVENT (cp_fsm__AUTHENTICATED__CC_LEAVE_IND,
+ .branch = CP_FSM_BRANCH (AUTHENTICATED, CC_LEAVE_IND, ok)),
+ SCENARIO_END
+ };
+ scenario_globals_t globals = {
+ .cp = &cp,
+ };
+ scenario_run (t, entries, &globals);
+ test_fail_unless (cp.fsm.active_states[0] == CP_FSM_STATE_DETECTING_BEACON);
+ cp_fsm_uninit (&cp);
+ } test_end;
+
+ test_begin (t, "stopped")
+ {
+ cp_fsm_init (&cp);
+ cp.sta_core_flag = false;
+ scenario_entry_t entries[] = {
+ /* STOPPED */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_DRV_STA_MAC_START_REQ),
+ SCENARIO_EVENT (cp_fsm__STOPPED__drv_sta_mac_start_req),
+ /* STARTED */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_to_poweron),
+ SCENARIO_EVENT (cp_fsm__STARTED__poweron__idle__to_poweron),
+ /* DETECTING_BEACON */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_nd_beacon),
+ SCENARIO_EVENT (cp_fsm__DETECTING_BEACON__nd_beacon),
+ /* ASSOCIATING*/
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__start_retry_timer),
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_CC_ASSOC_CNF),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__CC_ASSOC_CNF,
+ .branch = CP_FSM_BRANCH (ASSOCIATING, CC_ASSOC_CNF, success)),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__stop_retry_timer),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__start_retry_timer),
+ /* ASSOCIATED */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_CM_GET_KEY_CNF),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATED__CM_GET_KEY_CNF,
+ .branch = CP_FSM_BRANCH (ASSOCIATED, CM_GET_KEY_CNF, all_keys_granted)),
+ SCENARIO_EVENT (cp_fsm__ASSOCIATING__stop_retry_timer),
+ /* AUTHENTICATED, leave => not OK */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_CC_LEAVE_IND),
+ SCENARIO_EVENT (cp_fsm__AUTHENTICATED__CC_LEAVE_IND,
+ .branch = CP_FSM_BRANCH (AUTHENTICATED, CC_LEAVE_IND, nok)),
+ /* STOPPED */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_DRV_STA_MAC_STOP_REQ),
+ SCENARIO_EVENT (cp_fsm__AUTHENTICATED__drv__started__drv_sta_mac_stop_req),
+ /* STOPPING */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_to_stop),
+ SCENARIO_EVENT (cp_fsm__STOPPING__poweron__many__to_idle),
+ /* STOPPING */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_stopped),
+ SCENARIO_EVENT (cp_fsm__STOPPING__drv__stopping__stopped),
+ SCENARIO_END
+ };
+ scenario_globals_t globals = {
+ .cp = &cp,
+ };
+ scenario_run (t, entries, &globals);
+ test_fail_unless (cp.fsm.active_states[0] == CP_FSM_STATE_STOPPED);
+ cp_fsm_uninit (&cp);
+ } test_end;
+
+#if CONFIG_TRACE
+ trace_buffer_dbg_dump (&cp.trace);
+#endif /* CONFIG_TRACE */
+ cp_trace_uninit (&cp);
+}
+
+
+void
+test_fsm_test_suite (test_t t)
+{
+ test_suite_begin (t, "fsm");
+ test_fsm_basic_test_case (t);
+}
+
+void
+cp_sta_core_signal_fsm_event (cp_t *ctx)
+{
+ dbg_assert (ctx);
+ ctx->sta_core_flag = true;
+}
+
+void
+cp_sta_core_signal_fsm_urgent_event (cp_t *ctx)
+{
+ dbg_assert (ctx);
+ ctx->sta_core_urgent_flag = true;
+}
+
+int
+main (int argc, char **argv)
+{
+ test_t t;
+ trace_init ();
+ test_init (t, argc, argv);
+ test_fsm_test_suite (t);
+ trace_uninit ();
+
+ test_case_begin (t, "Memory allocation");
+ test_begin (t, "memory leaks")
+ {
+ test_fail_if (blk_check_memory () != true, "Memory leaks");
+ }
+ test_end;
+ test_result (t);
+ return test_nb_failed (t) == 0 ? 0 : 1;
+}
+
diff --git a/cesar/cp/eoc/sta/action/test/utest_eoc/Config b/cesar/cp/eoc/sta/action/test/utest_eoc/Config
new file mode 100644
index 0000000000..3702f12660
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/test/utest_eoc/Config
@@ -0,0 +1,8 @@
+CONFIG_CP_AV = n
+CONFIG_CP_EOC = y
+CONFIG_CP_FSM_DEF = "cp/eoc/fsm/src/fsm/cp_eoc_sta.fsm"
+CONFIG_MAC_PBPROC_EOC_FC = y
+CONFIG_CP_MSG_EOC_DRV_MME = y
+CONFIG_MAC_COMMON_EOC_SCHED = y
+CONFIG_CL_EOC_ROUTE = y
+CONFIG_MAC_COMMON_EOC_TEI = y
diff --git a/cesar/cp/eoc/sta/action/test/utest_eoc/Makefile b/cesar/cp/eoc/sta/action/test/utest_eoc/Makefile
new file mode 100644
index 0000000000..99a54f4527
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/test/utest_eoc/Makefile
@@ -0,0 +1,24 @@
+BASE = ../../../../../..
+
+INCLUDES = cp/eoc/sta/action/test/utest_eoc \
+ cp/eoc/sta/action/test/utest_eoc/override
+
+HOST_PROGRAMS = test_sta_action
+test_sta_action_SOURCES = test_sta_action.c assoc.c drv.c \
+ msg_stub.c dataplane_stub.c fsm_stub.c \
+ core_stub.c beacon_stub.c cp_stub.c \
+ scenario_actions.c ce_stub.c \
+ mac_sar_interface_stub.c secu.c
+
+test_sta_action_MODULES = lib lib/scenario cp/eoc/sta/action cp/eoc/sta/mgr \
+ cp/eoc/fsm/stub mac/common cl/stub cp/secu/stub \
+ cp/eoc/cco/action/stub cp/eoc/beacon/stub \
+ cp/msg/stub ce/stub mac/sar/stub \
+ cp/eoc/cco/bw/stub bsu/stub hal/ipmbox/stub \
+ bufmgr/stub
+
+test_sta_action_CONFIG_MODULES = cp cp/eoc cp/eoc/msg mac/sar mac/pbproc cl
+
+test_sta_action_LDLIBS = -lm
+
+include $(BASE)/common/make/top.mk
diff --git a/cesar/cp/eoc/sta/action/test/utest_eoc/assoc-Makefile b/cesar/cp/eoc/sta/action/test/utest_eoc/assoc-Makefile
new file mode 100644
index 0000000000..5565be5a69
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/test/utest_eoc/assoc-Makefile
@@ -0,0 +1,20 @@
+BASE = ../../../../../..
+
+VARIANT = assoc
+
+INCLUDES = cp/eoc/sta/action/test/utest_eoc/assoc-override
+
+HOST_PROGRAMS = test_assoc
+
+test_assoc_SOURCES = test_assoc.c mgr_stub.c core_stub.c cp_stub.c msg_stub.c phy_stub.c
+
+test_assoc_MODULES = lib mac/common cp/secu \
+ cp/eoc/sta/action cp/eoc/sta/mgr \
+ cp/eoc/fsm/stub cp/eoc/msg/stub cp/eoc/beacon/stub \
+ cp/eoc/cco/bw/stub cl/stub mac/sar/stub bsu/stub \
+ mac/pbproc/stub ce/rx/stub ce/tx/stub
+
+test_assoc_CONFIG_MODULES = cp/eoc mac cl
+test_assoc_LDLIBS = -lm
+
+include $(BASE)/common/make/top.mk
diff --git a/cesar/cp/eoc/sta/action/test/utest_eoc/inc/scenario_defs.h b/cesar/cp/eoc/sta/action/test/utest_eoc/inc/scenario_defs.h
new file mode 100644
index 0000000000..4165f9ef27
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/test/utest_eoc/inc/scenario_defs.h
@@ -0,0 +1,408 @@
+#ifndef inc_scenario_defs_h
+#define inc_scenario_defs_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file inc/scenario_defs.h
+ * \brief Scenario definitions.
+ * \ingroup test
+ */
+
+#include "cp/msg/msg.h"
+#include "cp/sta/mgr/sta.h"
+#include "cp/sta/mgr/net.h"
+#include "cp/fsm/fsm.h"
+#include "cl/cl_mactotei.h"
+#include "mac/common/tonemap.h"
+#include "cp/eoc/msg/inc/msg_vs.h"
+#include "cp/eoc/sta/action/inc/vs.h"
+
+/* Scenario globals. */
+#define SCENARIO_DEFS_GLOBALS \
+ cp_t *cp; \
+ u16 prn; \
+ u32 my_nonce; \
+ u32 your_nonce; \
+ cp_mme_tx_t *mme;
+
+/* Scenario actions. */
+#define SCENARIO_DEFS_ACTIONS \
+ drv__stopped__drv_sta_set_mac_addr_req, \
+ drv__stopped__drv_sta_set_cco_pref_req, \
+ drv__stopped__drv_sta_set_was_cco_req, \
+ drv__stopped__drv_sta_set_npw_req, \
+ drv__stopped__drv_sta_set_dpw_req, \
+ drv__stopped__drv_sta_set_sl_req, \
+ drv__stopped__drv_sta_set_nid_req, \
+ drv__stopped__drv_sta_set_m_sta_hfid_req, \
+ drv__stopped__drv_sta_set_u_sta_hfid_req, \
+ drv__stopped__drv_sta_set_avln_hfid_req, \
+ drv__stopped__drv_sta_set_tonemask_req, \
+ drv__stopped__drv_sta_mac_start_req, \
+ drv__stopped__drv_sta_set_key_req, \
+ drv__stopped__drv_sta_set_dak_req, \
+ drv__started__drv_sta_mac_stop_req, \
+ drv__stopping__stopped, \
+ drv__drv_sta_get_key_req, \
+ drv__drv_sta_status_req, \
+ drv__drv_sta_set_config_req, \
+ \
+ detect__beacon_received, \
+ assoc__detecting_no_beacons, \
+ assoc__detecting_detected, \
+ assoc__associating_cnf, \
+ assoc__associating_timeout, \
+ assoc__associating_no_beacons, \
+ assoc__associated_key_cnf, \
+ assoc__associated_no_beacons, \
+ assoc__associated_timeout, \
+ assoc__associated_leave, \
+ auth__authenticated_key_cnf
+
+/* Actions without parameter. */
+#define __0(action) \
+typedef scenario_empty_t scenario_action_ ## action ## _t; \
+void \
+scenario_action_ ## action ## _cb ( \
+ scenario_globals_t *globals, scenario_params_t *params);
+
+/* Actions with parameters. */
+#define __n(action, param...) \
+typedef struct \
+{ \
+ PREPROC_FOR_EACH (__n_, param) \
+} scenario_action_ ## action ## _t; \
+void \
+scenario_action_ ## action ## _cb ( \
+ scenario_globals_t *globals, scenario_params_t *params);
+#define __n_(param) param;
+
+/* Actions with MME and parameters. */
+#define __m(action, param...) \
+typedef struct \
+{ \
+ cp_mme_peer_t peer; \
+ PREPROC_FOR_EACH (__m_, param) \
+} scenario_action_ ## action ## _t; \
+void \
+scenario_action_ ## action ## _cb ( \
+ scenario_globals_t *globals, scenario_params_t *params);
+#define __m_(param) param;
+
+__m (drv__stopped__drv_sta_set_mac_addr_req)
+__m (drv__stopped__drv_sta_set_cco_pref_req)
+__m (drv__stopped__drv_sta_set_was_cco_req)
+__m (drv__stopped__drv_sta_set_npw_req)
+__m (drv__stopped__drv_sta_set_dpw_req)
+__m (drv__stopped__drv_sta_set_sl_req)
+__m (drv__stopped__drv_sta_set_nid_req)
+__m (drv__stopped__drv_sta_set_m_sta_hfid_req)
+__m (drv__stopped__drv_sta_set_u_sta_hfid_req)
+__m (drv__stopped__drv_sta_set_avln_hfid_req)
+__m (drv__stopped__drv_sta_set_tonemask_req)
+__m (drv__stopped__drv_sta_mac_start_req)
+__m (drv__stopped__drv_sta_set_key_req)
+__m (drv__stopped__drv_sta_set_dak_req)
+__m (drv__started__drv_sta_mac_stop_req)
+__0 (drv__stopping__stopped)
+__m (drv__drv_sta_get_key_req)
+__m (drv__drv_sta_status_req)
+__m (drv__drv_sta_set_config_req)
+
+__n (detect__beacon_received,
+ bsu_beacon_t *beacon, cp_net_t *net, cp_sta_t *sta)
+__0 (assoc__detecting_no_beacons)
+__0 (assoc__detecting_detected)
+__m (assoc__associating_cnf)
+__0 (assoc__associating_timeout)
+__0 (assoc__associating_no_beacons)
+__m (assoc__associated_key_cnf)
+__0 (assoc__associated_no_beacons)
+__0 (assoc__associated_timeout)
+__m (assoc__associated_leave)
+__m (auth__authenticated_key_cnf)
+
+#undef __0
+#undef __n
+#undef __n_
+#undef __m
+#undef __m_
+#undef __m
+
+/* Scenario events. */
+#define SCENARIO_DEFS_EVENTS \
+ cp_msg_drv_sta_set_mac_addr_req_receive, \
+ cp_msg_drv_sta_set_cco_pref_req_receive, \
+ cp_msg_drv_sta_set_was_cco_req_receive, \
+ cp_msg_drv_sta_set_npw_req_receive, \
+ cp_msg_drv_sta_set_dpw_req_receive, \
+ cp_msg_drv_sta_set_sl_req_receive, \
+ cp_msg_drv_sta_set_nid_req_receive, \
+ cp_msg_drv_sta_set_m_sta_hfid_req_receive, \
+ cp_msg_drv_sta_set_u_sta_hfid_req_receive, \
+ cp_msg_drv_sta_set_avln_hfid_req_receive, \
+ cp_msg_drv_sta_set_tonemask_req_receive, \
+ cp_msg_drv_sta_mac_start_req_receive, \
+ cp_msg_drv_sta_mac_stop_req_receive, \
+ cp_msg_drv_sta_sc_req_receive, \
+ cp_msg_drv_sta_set_key_req_receive, \
+ cp_msg_drv_sta_set_key_ind_send, \
+ cp_msg_drv_sta_set_dak_req_receive, \
+ cp_msg_drv_any_cnf_send, \
+ cp_msg_drv_sta_get_key_req_receive, \
+ cp_msg_drv_sta_get_key_cnf_send, \
+ cp_msg_drv_sta_status_req_receive, \
+ cp_msg_drv_sta_status_cnf_send, \
+ cp_msg_drv_sta_status_ind_send, \
+ cp_msg_drv_sta_set_config_req_receive, \
+ \
+ cp_msg_cc_assoc_req_send, \
+ cp_msg_cc_assoc_cnf_receive, \
+ cp_msg_cc_leave_ind_receive, \
+ cp_msg_cc_leave_rsp_send, \
+ \
+ cp_msg_cm_get_key_req_send, \
+ cp_msg_cm_get_key_cnf_receive, \
+ \
+ cp_msg_vs_eoc_cco_get_info_req_receive, \
+ cp_msg_vs_eoc_cco_get_info_cnf_send, \
+ cp_msg_vs_eoc_cco_diagnostic_info_req_receive, \
+ cp_msg_vs_eoc_cco_diagnostict_info_cnf_send, \
+ cp_msg_vs_eoc_cco_get_real_time_stats_req_receive, \
+ cp_msg_vs_eoc_cco_get_real_time_stats_cnf_send, \
+ cp_msg_eoc_sta_vs_set_out_lev_ind_receive, \
+ cp_msg_vs_eoc_cco_set_out_lev_ind_send, \
+ \
+ cp_msg_vs_get_attenuation_list_req_receive, \
+ cp_msg_vs_get_attenuation_list_cnf_send_begin, \
+ cp_msg_vs_get_attenuation_list_cnf_send_entry, \
+ cp_msg_vs_get_attenuation_list_cnf_send_end, \
+ \
+ cp_fsm_event_bare_new, \
+ cp_fsm_event_mme_new, \
+ cp_fsm_branch, \
+ \
+ cp_sta_core_gen_timed_event, \
+ cp_sta_core_stop_timed_or_cyclic_event, \
+ \
+ cp_beacon_create_default_schedules, \
+ cp_beacon_process_tracked_avln, \
+ cp_beacon_process_untracked_avln, \
+ cp_beacon_reconfigure_timer, \
+ cp_beacon_change_nek, \
+ cp_beacon_deactivate, \
+ cp_beacon_synchronised, \
+ \
+ cp_eoc_cco_bw_sta_allocations, \
+ \
+ sar_activate, \
+ sar_cleanup, \
+ \
+ pbproc_activate, \
+ pbproc_parameters_adjust
+
+/* MME send event. */
+#define __ms(event, param...) \
+typedef struct \
+{ \
+ cp_mme_peer_t peer; \
+ PREPROC_FOR_EACH (__p_, ## param) \
+} scenario_event_ ## event ## _t;
+
+/* MME send event complex. */
+#define __msc(event, param...) \
+typedef struct \
+{ \
+ PREPROC_FOR_EACH (__p_, ## param) \
+} scenario_event_ ## event ## _t;
+
+/* MME send event with encryption information. */
+#define __msk(event, param...) \
+typedef struct \
+{ \
+ cp_mme_peer_t peer; \
+ cp_mme_peks_t peks; \
+ u8 pid; \
+ u8 pmn; \
+ PREPROC_FOR_EACH (__p_, ## param) \
+} scenario_event_ ## event ## _t;
+
+/* MME send event for CC_RELAY.IND. */
+#define __msr(event, param...) \
+typedef struct \
+{ \
+ mac_t mac_fa; \
+ cp_tei_t ftei; \
+ PREPROC_FOR_EACH (__p_, ## param) \
+} scenario_event_ ## event ## _t;
+
+/* MME receive event. */
+#define __mr(event, param...) \
+typedef struct \
+{ \
+ bool ok; \
+ PREPROC_FOR_EACH (__p_, ## param) \
+} scenario_event_ ## event ## _t;
+
+/* MME receive event with encryption information. */
+#define __mrk(event, param...) \
+typedef struct \
+{ \
+ bool ok; \
+ cp_mme_peks_t peks; \
+ u8 pid; \
+ u8 pmn; \
+ bool new_prn; \
+ bool new_my_nonce; \
+ bool new_your_nonce; \
+ PREPROC_FOR_EACH (__p_, ## param) \
+} scenario_event_ ## event ## _t;
+
+#define __p_(param) param;
+
+__mr (cp_msg_drv_sta_set_mac_addr_req_receive, mac_t mac)
+__mr (cp_msg_drv_sta_set_cco_pref_req_receive, bool cco_pref)
+__mr (cp_msg_drv_sta_set_was_cco_req_receive, bool was_cco)
+__mr (cp_msg_drv_sta_set_npw_req_receive, char *npw)
+__mr (cp_msg_drv_sta_set_dpw_req_receive, char *dpw)
+__mr (cp_msg_drv_sta_set_sl_req_receive, cp_security_level_t sl)
+__mr (cp_msg_drv_sta_set_nid_req_receive, cp_nid_t nid)
+__mr (cp_msg_drv_sta_set_m_sta_hfid_req_receive, char *m_sta_hfid)
+__mr (cp_msg_drv_sta_set_u_sta_hfid_req_receive, char *u_sta_hfid)
+__mr (cp_msg_drv_sta_set_avln_hfid_req_receive, char *avln_hfid)
+__mr (cp_msg_drv_sta_set_tonemask_req_receive, u32 *tonemask)
+__mr (cp_msg_drv_sta_mac_start_req_receive)
+__mr (cp_msg_drv_sta_mac_stop_req_receive)
+__mr (cp_msg_drv_sta_sc_req_receive, bool sc_join)
+__mr (cp_msg_drv_sta_set_key_req_receive, cp_key_t nmk,
+ enum cp_msg_drv_sta_set_key_type_t type, cp_nid_t nid,
+ cp_security_level_t sl)
+__ms (cp_msg_drv_sta_set_key_ind_send, cp_key_t nmk,
+ enum cp_msg_drv_sta_set_key_type_t type, cp_nid_t nid,
+ cp_security_level_t sl)
+__mr (cp_msg_drv_sta_set_dak_req_receive, cp_key_t dak)
+__ms (cp_msg_drv_any_cnf_send, mmtype_t mmtype, cp_msg_drv_result_t result)
+__mr (cp_msg_drv_sta_get_key_req_receive)
+__ms (cp_msg_drv_sta_get_key_cnf_send, uint result, cp_key_t nmk,
+ cp_nid_t nid, cp_security_level_t sl)
+__mr (cp_msg_drv_sta_status_req_receive)
+__ms (cp_msg_drv_sta_status_cnf_send, uint result,
+ cp_msg_drv_sta_status_status_t status,
+ cp_msg_drv_sta_status_cco_t cco,
+ bool preferred_cco,
+ bool backup_cco,
+ bool simple_connect,
+ bsu_aclf_frequency_t pwl_sync_frequency)
+__ms (cp_msg_drv_sta_status_ind_send,
+ cp_msg_drv_sta_status_status_t status,
+ cp_msg_drv_sta_status_cco_t cco,
+ bool preferred_cco,
+ bool backup_cco,
+ bool simple_connect,
+ bsu_aclf_frequency_t pwl_sync_frequency)
+__mr (cp_msg_drv_sta_set_config_req_receive,
+ char *config)
+__ms (cp_msg_cc_assoc_req_send, enum cp_msg_cc_assoc_req_type_t request_type,
+ cp_nid_t nid, u8 cco_cap, u8 proxy_cap)
+__mr (cp_msg_cc_assoc_cnf_receive, enum cp_msg_cc_assoc_cnf_result_t result,
+ cp_nid_t nid, cp_snid_t snid, cp_tei_t sta_tei, u16 lease_time_min)
+__mr (cp_msg_cc_leave_ind_receive, enum cp_msg_cc_leave_ind_reason_t reason,
+ cp_nid_t nid)
+__ms (cp_msg_cc_leave_rsp_send)
+__msk (cp_msg_cm_get_key_req_send, bool relayed,
+ enum cp_msg_key_type_t key_type, cp_nid_t nid, u32 *hash_key)
+__mrk (cp_msg_cm_get_key_cnf_receive,
+ enum cp_msg_cm_get_key_cnf_result_t result,
+ enum cp_msg_key_type_t key_type, cp_nid_t nid, u8 eks, u32 *hash_key,
+ cp_key_t *key)
+__mr (cp_msg_vs_eoc_cco_get_info_req_receive,
+ u8 internal_eoc_index, u8 control)
+__ms (cp_msg_vs_eoc_cco_get_info_cnf_send,
+ cp_msg_vs_eoc_get_info_req_result_t status,
+ u16 tei, s8 attenuation,
+ u8 snr, u16 phy_uplink_speed,
+ u16 phy_downlink_speed, u8 output_power,
+ u32 tx_success_counter, u32 tx_crc_error_counter,
+ u32 tx_other_error_counter, u32 rx_success_counter,
+ u32 rx_crc_error_counter, u32 rx_other_error_counter)
+__mr (cp_msg_vs_eoc_cco_diagnostic_info_req_receive,
+ u8 internal_eoc_index, u8 control)
+__ms (cp_msg_vs_eoc_cco_diagnostict_info_cnf_send,
+ cp_msg_vs_eoc_diagnostic_info_req_result_t status,
+ u8 assoc_stat, u64 nid, u8 num_slots,
+ mac_t he_mac_address, u16 est_avg_phy_rate,
+ u8 num_good_assoc_auth, u16 num_bad_could_not_assoc,
+ u32 num_bad_assoc_failure, u32 num_bad_could_not_auth,
+ u32 num_leave)
+__mr (cp_msg_vs_eoc_cco_get_real_time_stats_req_receive,
+ u8 control)
+__ms (cp_msg_vs_eoc_cco_get_real_time_stats_cnf_send,
+ cp_msg_vs_eoc_get_real_time_statistics_req_result_t status,
+ real_time_stats_t *rt_stats);
+__mr (cp_msg_eoc_sta_vs_set_out_lev_ind_receive, uint output_level)
+__ms (cp_msg_vs_eoc_cco_set_out_lev_ind_send, uint output_level)
+
+__mr (cp_msg_vs_get_attenuation_list_req_receive)
+__ms (cp_msg_vs_get_attenuation_list_cnf_send_begin, uint nb)
+__msc (cp_msg_vs_get_attenuation_list_cnf_send_entry,
+ mac_t mac, cp_tei_t tei,
+ vs_get_attenuation_list_att_status_t status, s8 attenuation_db)
+__msc (cp_msg_vs_get_attenuation_list_cnf_send_end)
+
+#undef __ms
+#undef __msk
+#undef __msr
+#undef __mr
+#undef __mrk
+#undef __msc
+
+/* Event with return. */
+#define __er(event, param...) \
+typedef struct \
+{ \
+ bool ok; \
+ PREPROC_FOR_EACH (__p_, ## param) \
+} scenario_event_ ## event ## _t;
+
+
+/* Any event. */
+#define __e(event, param...) \
+typedef struct \
+{ \
+ PREPROC_FOR_EACH (__p_, ## param) \
+} scenario_event_ ## event ## _t;
+
+__e (cp_fsm_event_bare_new, cp_fsm_event_type_t type)
+__e (cp_fsm_event_mme_new, cp_fsm_event_type_t type)
+__e (cp_fsm_branch, cp_fsm_branch_t branch)
+
+__e (cp_sta_core_gen_timed_event, uint delay_min_ms, uint delay_max_ms)
+__e (cp_sta_core_stop_timed_or_cyclic_event)
+
+__e (cp_beacon_create_default_schedules)
+__e (cp_beacon_process_tracked_avln, bsu_beacon_t *beacon, cp_net_t *net)
+__e (cp_beacon_process_untracked_avln)
+__e (cp_beacon_reconfigure_timer)
+__e (cp_beacon_change_nek, u8 eks, cp_key_t *nek, bool now)
+__e (cp_beacon_deactivate)
+__er (cp_beacon_synchronised)
+
+__e (cp_eoc_cco_bw_sta_allocations)
+
+__e (sar_activate, bool flag)
+__e (sar_cleanup)
+
+__e (pbproc_activate, bool flag)
+__e (pbproc_parameters_adjust, bool adjust)
+
+#undef __e
+#undef __er
+
+#undef __p_
+
+#endif /* inc_scenario_defs_h */
diff --git a/cesar/cp/eoc/sta/action/test/utest_eoc/inc/test_sta_action.h b/cesar/cp/eoc/sta/action/test/utest_eoc/inc/test_sta_action.h
new file mode 100644
index 0000000000..177f1ca7d1
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/test/utest_eoc/inc/test_sta_action.h
@@ -0,0 +1,70 @@
+#ifndef inc_test_sta_action_h
+#define inc_test_sta_action_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file inc/test_sta_action.h
+ * \brief Test sta/action.
+ * \ingroup test
+ */
+#include "cp/inc/context.h"
+
+/** Contexts used in tests. */
+struct test_sta_action_t
+{
+ cp_t cp;
+ mac_config_t mac_config;
+ bsu_aclf_t bsu_aclf;
+};
+typedef struct test_sta_action_t test_sta_action_t;
+
+/**
+ * Initialise test contexts.
+ * \param ctx test context
+ */
+void
+test_sta_action_init (test_sta_action_t *ctx);
+
+/**
+ * Uninitialise test contexts.
+ * \param ctx test context
+ */
+void
+test_sta_action_uninit (test_sta_action_t *ctx);
+
+/**
+ * Reset test contexts.
+ * \param ctx test context
+ */
+void
+test_sta_action_reset (test_sta_action_t *ctx);
+
+/**
+ * Create our AVLN as if the STA was associated.
+ * \param ctx test context
+ * \param nid our NID
+ * \param snid our SNID
+ */
+void
+test_sta_action_create_our_net (test_sta_action_t *ctx, cp_nid_t nid,
+ cp_snid_t snid);
+
+/**
+ * Fill the beacon with the NID, SNID, STEI and MAC address if valid.
+ * \param beacon the beacon to fill.
+ * \param nid the network Identifier of the CCo.
+ * \param snid the short network identifier of the CCo.
+ * \param stei the source TEI of the CCo.
+ * \param mac the Mac address of the CCo.
+ */
+void
+test_sta_action_beacon_create (
+ bsu_beacon_t *beacon, cp_nid_t nid, cp_snid_t snid, cp_tei_t stei,
+ mac_t mac);
+
+#endif /* inc_test_sta_action_h */
diff --git a/cesar/cp/eoc/sta/action/test/utest_eoc/override/cp/inc/context.h b/cesar/cp/eoc/sta/action/test/utest_eoc/override/cp/inc/context.h
new file mode 100644
index 0000000000..10294d018c
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/test/utest_eoc/override/cp/inc/context.h
@@ -0,0 +1,79 @@
+#ifndef override_cp_inc_context_h
+#define override_cp_inc_context_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file override/cp/inc/context.h
+ * \brief Control plane context override.
+ * \ingroup test
+ */
+#include "cp/types.h"
+#include "cp/sta/action/inc/context.h"
+#include "cp/sta/mgr/sta_mgr.h"
+#include "cp/sta/mgr/inc/sta_mgr.h"
+#include "cl/cl.h"
+#include "mac/common/config.h"
+#include "mac/common/store.h"
+#include "mac/sar/sar.h"
+#include "mac/pbproc/pbproc.h"
+#include "lib/rnd.h"
+#include "lib/trace.h"
+#include "ce/tx/inc/tx.h"
+
+enum cp_handover_reason_t
+{
+ CP_HANDOVER_REASON_CCO_SELECTION,
+ CP_HANDOVER_REASON_CCO_LEAVING,
+ CP_HANDOVER_REASON_USER_APPOINT,
+ CP_HANDOVER_REASON_NB,
+};
+
+enum cp_handover_soft_hard_t
+{
+ CP_HANDOVER_SOFT_HARD_SOFT,
+ CP_HANDOVER_SOFT_HARD_HARD,
+ CP_HANDOVER_NB,
+};
+
+struct cp_handover_t
+{
+ /** Handover timeout. */
+ cp_sta_core_timed_event_def_t handover_timeout;
+
+ /** handover reason. */
+ enum cp_handover_reason_t reason;
+
+ /** Handover soft hard */
+ enum cp_handover_soft_hard_t soft_hard;
+};
+
+
+struct cp_t
+{
+ cp_sta_action_t sta_action;
+ cp_sta_mgr_t sta_mgr;
+ lib_rnd_t rnd;
+ cl_t *cl;
+ mac_config_t *mac_config;
+ mac_store_t *mac_store;
+ sar_t *sar;
+ pbproc_t *pbproc;
+ /** Handover context. */
+ struct cp_handover_t handover;
+ ce_tx_t ce_tx;
+ ce_rx_t *ce_rx;
+ void *bsu;
+ bsu_aclf_t *bsu_aclf;
+ phy_t *phy;
+
+#if CONFIG_TRACE
+ trace_buffer_t trace;
+#endif
+};
+
+#endif /* override_cp_inc_context_h */
diff --git a/cesar/cp/eoc/sta/action/test/utest_eoc/override/cp/sta/core/core.h b/cesar/cp/eoc/sta/action/test/utest_eoc/override/cp/sta/core/core.h
new file mode 100644
index 0000000000..e7519405ee
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/test/utest_eoc/override/cp/sta/core/core.h
@@ -0,0 +1,38 @@
+#ifndef override_cp_sta_core_core_h
+#define override_cp_sta_core_core_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file override/cp/sta/core/core.h
+ * \brief STA core override.
+ * \ingroup test
+ */
+#include "cp/types.h"
+#include "cp/fsm/forward.h"
+
+struct cp_sta_core_timed_event_def_t
+{
+};
+typedef struct cp_sta_core_timed_event_def_t cp_sta_core_timed_event_def_t;
+
+void
+cp_sta_core_gen_timed_event (
+ cp_t *cp_ctx, cp_sta_core_timed_event_def_t *sta_core_timed_event,
+ cp_fsm_event_t *fsm_event, uint event_delay_ms);
+
+void
+cp_sta_core_stop_timed_or_cyclic_event(
+ cp_t *cp_ctx, cp_sta_core_timed_event_def_t *sta_core_timed_event);
+
+u32
+cp_sta_core_get_date_ms (cp_t *ctx);
+
+void
+cp_sta_core_checkpoint (cp_t *ctx);
+
+#endif /* override_cp_sta_core_core_h */
diff --git a/cesar/cp/eoc/sta/action/test/utest_eoc/scenario-Config b/cesar/cp/eoc/sta/action/test/utest_eoc/scenario-Config
new file mode 100644
index 0000000000..ec1d21cd90
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/test/utest_eoc/scenario-Config
@@ -0,0 +1,9 @@
+CONFIG_CP_EOC = y
+CONFIG_DEBUG_FATAL_CATCH = y
+CONFIG_CP_FSM_DEF = "cp/eoc/fsm/src/fsm/cp_eoc_sta.fsm"
+CONFIG_CP_EOC_STA_CON_ALLOWED = n
+CONFIG_MAC_PBPROC_EOC_FC = y
+CONFIG_CP_EOC_DBG_PRINT_LEVEL = 0
+CONFIG_CP_MSG_EOC_DRV_MME = y
+CONFIG_MAC_COMMON_EOC_SCHED = y
+CONFIG_CL_EOC_ROUTE = y
diff --git a/cesar/cp/eoc/sta/action/test/utest_eoc/scenario-Makefile b/cesar/cp/eoc/sta/action/test/utest_eoc/scenario-Makefile
new file mode 100644
index 0000000000..d748e94bc2
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/test/utest_eoc/scenario-Makefile
@@ -0,0 +1,22 @@
+BASE = ../../../../../..
+
+VARIANT = scenario
+
+INCLUDES = cp/eoc/sta/action/test/utest_eoc/scenario-override \
+ cp/eoc/sta/action/test/utest_eoc
+
+HOST_PROGRAMS = test_scenario
+
+test_scenario_SOURCES = test_scenario.c scenario_actions.c fsm_stub.c\
+ mgr_stub.c core_stub.c cp_stub.c msg_stub.c phy_stub.c
+
+test_scenario_MODULES = lib lib/scenario cp/eoc/fsm/stub cp/sta/mgr mac/common cp/eoc/sta/action \
+ cl/stub mac/sar/stub cp/eoc/sta/mgr \
+ cp/msg/stub cp/secu cp/beacon/stub bsu/stub cp/eoc/cco/bw/stub mac/pbproc/stub cp/eoc/beacon/stub cp/eoc/msg/stub
+
+test_scenario_CONFIG_MODULES = cp/eoc mac cl
+
+cp_eoc_sta_action_MODULE_SOURCES = assoc.c poweron.c drv.c assoc_slave.c
+cp_sta_action_MODULE_SOURCES =
+
+include $(BASE)/common/make/top.mk
diff --git a/cesar/cp/eoc/sta/action/test/utest_eoc/src/assoc.c b/cesar/cp/eoc/sta/action/test/utest_eoc/src/assoc.c
new file mode 100644
index 0000000000..063f62a200
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/test/utest_eoc/src/assoc.c
@@ -0,0 +1,461 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/assoc.c
+ * \brief Test sta/action/assoc.
+ * \ingroup test
+ */
+#include "common/std.h"
+
+#include "lib/scenario/scenario.h"
+
+#include "inc/test_sta_action.h"
+
+#include "cp/sta/action/action.h"
+#include "cp/sta/mgr/inc/sta.h"
+
+void
+assoc_create_master (test_t t, test_sta_action_t *ctx, cp_snid_t snid,
+ cp_nid_t nid, cp_tei_t master_tei, mac_t master_mac,
+ cp_net_t **master_net, cp_sta_t **master)
+{
+ /* Create a Master to associate with. */
+ *master_net = cp_sta_mgr_add_avln (&ctx->cp, snid, nid);
+ dbg_assert (*master_net);
+ *master = cp_sta_mgr_sta_add (
+ &ctx->cp, *master_net, master_tei, master_mac);
+ cp_net_set_cco (&ctx->cp, *master_net, master_tei);
+}
+
+void
+assoc_test_case_basic (test_t t)
+{
+ test_sta_action_t ctx;
+ test_sta_action_init (&ctx);
+ cp_eoc_sta_action_init (&ctx.cp);
+ scenario_globals_t globals = {
+ .cp = &ctx.cp,
+ };
+
+ test_case_begin (t, "Associate with a Master");
+ test_begin (t, "Started up.")
+ {
+ test_fail_unless (ctx.cp.mac_config->authenticated == false);
+ test_fail_unless (ctx.cp.sta_action.assoc.retry == 0);
+ test_fail_unless (ctx.cp.sta_action.assoc.beacon_loss == 0);
+ test_fail_unless (cp_sta_own_data_get_tei (&ctx.cp)
+ == MAC_TEI_UNASSOCIATED);
+ }
+ test_end;
+
+ test_begin (t, "No beacons")
+ {
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (assoc__detecting_no_beacons),
+ SCENARIO_EVENT (cp_beacon_process_untracked_avln),
+ SCENARIO_EVENT (cp_eoc_cco_bw_sta_allocations),
+ SCENARIO_END
+ };
+ scenario_run (t, entries, &globals);
+ }
+ test_end;
+
+ /* Create a Master to associate with. */
+ const cp_snid_t snid = 0;
+ const cp_nid_t nid = 0xf11111111111ull;
+ const cp_tei_t master_tei = 1, sta_tei = 3;
+ const mac_t master_mac = 0x111111111111ull;
+ cp_net_t *master_net;
+ cp_sta_t *master = NULL;
+
+ /* Create a second master, as on EoC clients barely change the NPW (i.e.
+ * the nid is a hash of the NMK which is hashed from the NPW) the second
+ * master has the same NID. */
+ const cp_tei_t master2_tei = 1;
+ const mac_t master2_mac = 0x222222222222ull;
+ cp_sta_t *master2 = NULL;
+
+ const cp_tei_t master3_tei = 1;
+ const mac_t master3_mac = 0x333333333333ull;
+ cp_net_t *master3_net = NULL;
+ cp_sta_t *master3 = NULL;
+ const cp_snid_t master3_snid = snid + 1;
+
+ assoc_create_master (t, &ctx, snid, nid, master2_tei, master2_mac,
+ &master_net, &master2);
+
+ /* Create and set Master as the real master of the net. */
+ assoc_create_master (t, &ctx, snid, nid, master_tei, master_mac,
+ &master_net, &master);
+
+ assoc_create_master (t, &ctx, master3_snid, nid, master3_tei,
+ master3_mac, &master3_net, &master3);
+
+ bsu_beacon_t beacon_master;
+ test_sta_action_beacon_create (&beacon_master, nid, snid,
+ master_tei, master_mac);
+ bsu_beacon_t beacon_master2;
+ test_sta_action_beacon_create (&beacon_master2, nid, snid,
+ master2_tei, master2_mac);
+
+ bsu_beacon_t beacon_master3;
+ test_sta_action_beacon_create (&beacon_master3, nid, master3_snid,
+ master3_tei, master3_mac);
+
+ cp_sta_own_data_set_nid (&ctx.cp, nid);
+ cp_sta_own_data_set_snid (&ctx.cp, 0xf);
+
+ ctx.cp.sta_action.assoc.init_count = 1;
+ test_begin (t, "Receive a beacon from the master, synchronisation")
+ {
+ /* In state DETECTING_BEACON */
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (detect__beacon_received,
+ .beacon = &beacon_master,
+ .net = master_net,
+ .sta = master),
+ SCENARIO_EVENT (cp_beacon_process_tracked_avln,
+ .beacon = &beacon_master,
+ .net = master_net),
+ /* Synchronisation still wrong. */
+ SCENARIO_ACTION (detect__beacon_received,
+ .beacon = &beacon_master,
+ .net = master_net,
+ .sta = master),
+ SCENARIO_EVENT (cp_beacon_synchronised, .ok = false),
+ /* Synchronisation is okay. */
+ SCENARIO_ACTION (detect__beacon_received,
+ .beacon = &beacon_master,
+ .net = master_net,
+ .sta = master),
+ SCENARIO_EVENT (cp_beacon_synchronised, .ok = true),
+ /* Synchronisation is okay, start association */
+ SCENARIO_ACTION (detect__beacon_received,
+ .beacon = &beacon_master,
+ .net = master_net,
+ .sta = master),
+ SCENARIO_EVENT (cp_beacon_synchronised, .ok = true),
+ SCENARIO_EVENT (cp_fsm_event_bare_new,
+ .type = CP_FSM_EVENT_TYPE_nd_beacon),
+ /* Synchronisation is okay, should NOT associate */
+ SCENARIO_ACTION (detect__beacon_received,
+ .beacon = &beacon_master2,
+ .net = master_net,
+ .sta = master2),
+ /* With a Master which as a snid different. It should not
+ * associate */
+ SCENARIO_ACTION (detect__beacon_received,
+ .beacon = &beacon_master3,
+ .net = master3_net,
+ .sta = master3),
+ SCENARIO_END
+ };
+ scenario_run (t, entries, &globals);
+
+ cp_sta_own_data_t *own = cp_sta_mgr_get_sta_own_data (&ctx.cp);
+ test_fail_unless (own->tei_track == master_tei);
+ test_fail_unless (own->cco_mac_addr_track = master_mac);
+ test_fail_unless (own->nid_track = nid);
+ test_fail_unless (cp_sta_own_data_get_snid (&ctx.cp)
+ == cp_net_get_snid (&ctx.cp, master_net));
+ }
+ test_end;
+
+ cp_mme_peer_t master_peer, master2_peer;
+ cp_sta_get_peer (master, &master_peer);
+ cp_sta_get_peer (master2, &master2_peer);
+
+ test_begin (t, "Associate with the master")
+ {
+ ctx.cp.sta_action.assoc.retry = 2;
+ scenario_entry_t entries[] = {
+ /* In state DETECTING_BEACON with event nd_beacon */
+ SCENARIO_ACTION (assoc__detecting_detected),
+ SCENARIO_EVENT (cp_msg_cc_assoc_req_send,
+ .peer = master_peer,
+ .request_type = CP_MSG_CC_ASSOC_REQ_TYPE_NEW,
+ .nid = nid,
+ .cco_cap = CP_CCO_LEVEL,
+ .proxy_cap = CP_PCO_CAP),
+ /* Master2 answers. */
+ SCENARIO_ACTION (assoc__associating_cnf, .peer = master2_peer),
+ SCENARIO_EVENT (cp_msg_cc_assoc_cnf_receive, .ok = true,
+ .result = CP_MSG_CC_ASSOC_CNF_RESULT_SUCCESS,
+ .nid = nid, .snid = snid, .sta_tei = sta_tei,
+ .lease_time_min = 15),
+ SCENARIO_EVENT (cp_fsm_branch,
+ .branch = CP_FSM_BRANCH (
+ ASSOCIATING, CC_ASSOC_CNF, unrelated)),
+ /* Master answers. */
+ SCENARIO_ACTION (assoc__associating_cnf, .peer = master_peer),
+ SCENARIO_EVENT (cp_msg_cc_assoc_cnf_receive, .ok = true,
+ .result = CP_MSG_CC_ASSOC_CNF_RESULT_SUCCESS,
+ .nid = nid, .snid = snid, .sta_tei = sta_tei,
+ .lease_time_min = 15),
+ SCENARIO_EVENT (cp_msg_cm_get_key_req_send,
+ .peer = master_peer, .peks = CP_MME_PEKS_DAK,
+ .pid = 0, .pmn = 1, .relayed = false,
+ .key_type = CP_MSG_KEY_NEK, .nid = nid),
+ SCENARIO_EVENT (cp_fsm_branch,
+ .branch = CP_FSM_BRANCH (
+ ASSOCIATING, CC_ASSOC_CNF, success)),
+ /* Master answers White list ALL */
+ SCENARIO_ACTION (assoc__associating_cnf, .peer = master_peer),
+ SCENARIO_EVENT (
+ cp_msg_cc_assoc_cnf_receive, .ok = true,
+ .result = CP_MSG_CC_ASSOC_CNF_RESULT_SUCCESS_WL_ACCEPT_ALL,
+ .nid = nid, .snid = snid, .sta_tei = sta_tei,
+ .lease_time_min = 15),
+ SCENARIO_EVENT (cp_msg_cm_get_key_req_send,
+ .peer = master_peer, .peks = CP_MME_PEKS_DAK,
+ .pid = 0, .pmn = 1, .relayed = false,
+ .key_type = CP_MSG_KEY_NEK, .nid = nid),
+ SCENARIO_EVENT (cp_fsm_branch,
+ .branch = CP_FSM_BRANCH (
+ ASSOCIATING, CC_ASSOC_CNF, success)),
+ /* Master answers with an error in the mme */
+ SCENARIO_ACTION (assoc__associating_cnf, .peer = master_peer),
+ SCENARIO_EVENT (cp_msg_cc_assoc_cnf_receive, .ok = false,
+ .result = CP_MSG_CC_ASSOC_CNF_RESULT_SUCCESS,
+ .nid = nid, .snid = snid, .sta_tei = sta_tei,
+ .lease_time_min = 15),
+ SCENARIO_EVENT (cp_fsm_branch,
+ .branch = CP_FSM_BRANCH (
+ ASSOCIATING, CC_ASSOC_CNF, unrelated)),
+ /* Wrong NID. */
+ SCENARIO_ACTION (assoc__associating_cnf, .peer = master_peer),
+ SCENARIO_EVENT (cp_msg_cc_assoc_cnf_receive, .ok = true,
+ .result = CP_MSG_CC_ASSOC_CNF_RESULT_SUCCESS,
+ .nid = 0, .snid = snid, .sta_tei = sta_tei,
+ .lease_time_min = 15),
+ SCENARIO_EVENT (cp_fsm_branch,
+ .branch = CP_FSM_BRANCH (
+ ASSOCIATING, CC_ASSOC_CNF, unrelated)),
+ /* Associating receiving a timeout retry */
+ SCENARIO_ACTION (assoc__associating_timeout),
+ SCENARIO_EVENT (cp_fsm_branch,
+ .branch = CP_FSM_BRANCH (
+ ASSOCIATING, timeout_associating, retry)),
+ /* Associating receiving a timeout no retry */
+ SCENARIO_ACTION (assoc__associating_timeout),
+ SCENARIO_EVENT (cp_fsm_branch,
+ .branch = CP_FSM_BRANCH (
+ ASSOCIATING, timeout_associating, no_retry)),
+ SCENARIO_EVENT (cp_beacon_process_untracked_avln),
+ SCENARIO_EVENT (cp_eoc_cco_bw_sta_allocations),
+ /* ASSOCIATING receives a no_beacons event. */
+ SCENARIO_ACTION (assoc__associating_no_beacons),
+ SCENARIO_EVENT (cp_beacon_process_untracked_avln),
+ SCENARIO_EVENT (cp_eoc_cco_bw_sta_allocations),
+ SCENARIO_END
+ };
+ scenario_run (t, entries, &globals);
+ }
+ test_end;
+
+ cp_key_t nek = {.key = {0, 0, 0, 0 }};
+ test_begin (t, "Authenticate with the master")
+ {
+ ctx.cp.sta_action.assoc.prun.pid = 0;
+ ctx.cp.sta_action.assoc.prun.pmn = 0;
+ scenario_entry_t entries[] = {
+ /* Receive the get key conf from the master 2. */
+ SCENARIO_ACTION (assoc__associated_key_cnf, .peer = master2_peer),
+ SCENARIO_EVENT (cp_fsm_branch,
+ .branch = CP_FSM_BRANCH (
+ ASSOCIATED, CM_GET_KEY_CNF, unrelated)),
+ /* Receive the get key conf from the master MME is wrong. */
+ SCENARIO_ACTION (assoc__associated_key_cnf, .peer = master_peer),
+ SCENARIO_EVENT (cp_msg_cm_get_key_cnf_receive,
+ .ok = false,
+ .result = CP_MSG_CM_GET_KEY_CNF_RESULT_KEY_GRANTED,
+ .key_type = CP_MSG_KEY_NEK,
+ .nid = nid),
+ SCENARIO_EVENT (cp_fsm_branch,
+ .branch = CP_FSM_BRANCH (
+ ASSOCIATED, CM_GET_KEY_CNF, unrelated)),
+ /* Receive the get key conf from the master MME key refuse. */
+ SCENARIO_ACTION (assoc__associated_key_cnf,
+ .peer = master_peer),
+ SCENARIO_EVENT (cp_msg_cm_get_key_cnf_receive,
+ .ok = true,
+ .peks = CP_MME_PEKS_DAK,
+ .pid = 0,
+ .pmn = 0x2,
+ .new_prn = true,
+ .new_my_nonce = false,
+ .new_your_nonce = false,
+ .result = CP_MSG_CM_GET_KEY_CNF_RESULT_REQUEST_REFUSED,
+ .key_type = CP_MSG_KEY_NEK,
+ .nid = nid),
+ SCENARIO_EVENT (cp_fsm_branch,
+ .branch = CP_FSM_BRANCH (
+ ASSOCIATED, CM_GET_KEY_CNF, not_granted)),
+ /* Receive the get key conf from the master MME key granted, wrong
+ * NID. */
+ SCENARIO_ACTION (assoc__associated_key_cnf,
+ .peer = master_peer),
+ SCENARIO_EVENT (cp_msg_cm_get_key_cnf_receive,
+ .ok = true,
+ .peks = CP_MME_PEKS_DAK,
+ .new_prn = true,
+ .pid = 0,
+ .pmn = 0x2,
+ .result = CP_MSG_CM_GET_KEY_CNF_RESULT_KEY_GRANTED,
+ .key_type = CP_MSG_KEY_NEK),
+ SCENARIO_EVENT (cp_fsm_branch,
+ .branch = CP_FSM_BRANCH (
+ ASSOCIATED, CM_GET_KEY_CNF, unrelated)),
+ /* Receive the get key conf from the master MME key granted.
+ * Wrong Key type. */
+ SCENARIO_ACTION (assoc__associated_key_cnf,
+ .peer = master_peer),
+ SCENARIO_EVENT (cp_msg_cm_get_key_cnf_receive,
+ .ok = true,
+ .peks = CP_MME_PEKS_DAK,
+ .new_prn = true,
+ .pid = 0,
+ .pmn = 0x2,
+ .result = CP_MSG_CM_GET_KEY_CNF_RESULT_KEY_GRANTED,
+ .key_type = CP_MSG_KEY_TEK,
+ .nid = nid),
+ /* Receive the get key conf from the master MME key granted. */
+ SCENARIO_ACTION (assoc__associated_key_cnf,
+ .peer = master_peer),
+ SCENARIO_EVENT (cp_msg_cm_get_key_cnf_receive,
+ .ok = true,
+ .peks = CP_MME_PEKS_DAK,
+ .pid = 0,
+ .pmn = 0,
+ .new_prn = false,
+ .result = CP_MSG_CM_GET_KEY_CNF_RESULT_KEY_GRANTED,
+ .key_type = CP_MSG_KEY_NEK,
+ .nid = nid,
+ .eks = 0,
+ .key = &nek),
+ SCENARIO_EVENT (cp_beacon_change_nek, .eks = 0,
+ .nek = &nek,
+ .now = true),
+ SCENARIO_EVENT (cp_fsm_branch,
+ .branch = CP_FSM_BRANCH (
+ ASSOCIATED, CM_GET_KEY_CNF, all_keys_granted)),
+ SCENARIO_EVENT (cp_msg_cm_get_key_req_send,
+ .peer = master_peer,
+ .peks = CP_MME_PEKS_DAK,
+ .pid = 0,
+ .pmn = 1,
+ .relayed = false,
+ .key_type = CP_MSG_KEY_TEK,
+ .nid = nid),
+ /* ASSOCIATED no beacons. */
+ SCENARIO_ACTION (assoc__associated_no_beacons),
+ SCENARIO_EVENT (cp_beacon_process_untracked_avln),
+ SCENARIO_EVENT (cp_eoc_cco_bw_sta_allocations),
+ /* ASSOCIATED timeout associating. */
+ SCENARIO_ACTION (assoc__associated_timeout),
+ SCENARIO_EVENT (cp_beacon_process_untracked_avln),
+ SCENARIO_EVENT (cp_eoc_cco_bw_sta_allocations),
+ /* ASSOCIATED receives a CC_LEAVE_IND. Wrong MME. */
+ SCENARIO_ACTION (assoc__associated_leave, .peer = master_peer),
+ SCENARIO_EVENT (
+ cp_msg_cc_leave_ind_receive,
+ .ok = false,
+ .reason = CP_MSG_CC_LEAVE_IND_REASON_TEI_LEASE_EXPIRED,
+ .nid = nid),
+ SCENARIO_EVENT (
+ cp_fsm_branch,
+ .branch = CP_FSM_BRANCH (ASSOCIATED, CC_LEAVE_IND, nok)),
+ /* ASSOCIATED receives a CC_LEAVE_IND. Wrong NID */
+ SCENARIO_ACTION (assoc__associated_leave, .peer = master_peer),
+ SCENARIO_EVENT (
+ cp_msg_cc_leave_ind_receive,
+ .ok = true,
+ .reason = CP_MSG_CC_LEAVE_IND_REASON_TEI_LEASE_EXPIRED,
+ .nid = 0),
+ SCENARIO_EVENT (
+ cp_fsm_branch,
+ .branch = CP_FSM_BRANCH (ASSOCIATED, CC_LEAVE_IND, nok)),
+ /* ASSOCIATED receives a CC_LEAVE_IND. */
+ SCENARIO_ACTION (assoc__associated_leave, .peer = master_peer),
+ SCENARIO_EVENT (
+ cp_msg_cc_leave_ind_receive,
+ .ok = true,
+ .reason = CP_MSG_CC_LEAVE_IND_REASON_TEI_LEASE_EXPIRED,
+ .nid = nid),
+ SCENARIO_EVENT (cp_msg_cc_leave_rsp_send, .peer = master_peer),
+ SCENARIO_EVENT (
+ cp_fsm_branch,
+ .branch = CP_FSM_BRANCH (ASSOCIATED, CC_LEAVE_IND, ok)),
+ SCENARIO_EVENT (cp_beacon_process_untracked_avln),
+ SCENARIO_EVENT (cp_eoc_cco_bw_sta_allocations),
+ SCENARIO_END
+ };
+ scenario_run (t, entries, &globals);
+ }
+ test_end;
+
+ test_begin (t, "Authenticate with the master")
+ {
+ cp_sta_mgr_set_our_avln (&ctx.cp, master_net);
+ scenario_entry_t entries[] = {
+ /* Receives the cm_get_key_cnf from Master2. Fails. */
+ SCENARIO_ACTION (auth__authenticated_key_cnf,
+ .peer = master2_peer),
+ /* Receives the cm_get_key_cnf from Master. Wrong MME. */
+ SCENARIO_ACTION (auth__authenticated_key_cnf,
+ .peer = master_peer),
+ SCENARIO_EVENT (cp_msg_cm_get_key_cnf_receive,
+ .ok = true),
+ /* Receives the cm_get_key_cnf from Master. Wrong key. */
+ SCENARIO_ACTION (auth__authenticated_key_cnf,
+ .peer = master_peer),
+ SCENARIO_EVENT (cp_msg_cm_get_key_cnf_receive,
+ .ok = true,
+ .peks = CP_MME_PEKS_DAK,
+ .pid = 0,
+ .pmn = 0x2,
+ .result = CP_MSG_CM_GET_KEY_CNF_RESULT_REQUEST_REFUSED,
+ .key_type = CP_MSG_KEY_NEK,
+ .nid = nid),
+ /* Receives the cm_get_key_cnf from Master. Refused. */
+ SCENARIO_ACTION (auth__authenticated_key_cnf,
+ .peer = master_peer),
+ SCENARIO_EVENT (cp_msg_cm_get_key_cnf_receive,
+ .ok = true,
+ .peks = CP_MME_PEKS_DAK,
+ .pid = 0,
+ .pmn = 0x2,
+ .result = CP_MSG_CM_GET_KEY_CNF_RESULT_REQUEST_REFUSED,
+ .key_type = CP_MSG_KEY_TEK,
+ .nid = nid),
+ /* Receives the cm_get_key_cnf from Master. Granted. */
+ SCENARIO_ACTION (auth__authenticated_key_cnf,
+ .peer = master_peer),
+ SCENARIO_EVENT (cp_msg_cm_get_key_cnf_receive,
+ .ok = true,
+ .peks = CP_MME_PEKS_DAK,
+ .pid = 0,
+ .pmn = 0x2,
+ .result = CP_MSG_CM_GET_KEY_CNF_RESULT_KEY_GRANTED,
+ .key_type = CP_MSG_KEY_TEK,
+ .nid = nid),
+ SCENARIO_END
+ };
+ scenario_run (t, entries, &globals);
+ }
+ test_end;
+
+ test_sta_action_uninit (&ctx);
+}
+
+void
+assoc_test_suite (test_t t)
+{
+ test_suite_begin (t, "assoc");
+ assoc_test_case_basic (t);
+}
diff --git a/cesar/cp/eoc/sta/action/test/utest_eoc/src/beacon_stub.c b/cesar/cp/eoc/sta/action/test/utest_eoc/src/beacon_stub.c
new file mode 100644
index 0000000000..026d682bba
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/test/utest_eoc/src/beacon_stub.c
@@ -0,0 +1,112 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/beacon_stub.c
+ * \brief Beacon stub.
+ * \ingroup test
+ */
+#include "common/std.h"
+
+#include "cp/beacon/beacon.h"
+#include "cp/sta/mgr/sta_mgr.h"
+
+#include "lib/scenario/scenario.h"
+
+void
+cp_beacon_create_default_schedules (cp_t *ctx)
+{
+ dbg_assert (ctx);
+ scenario_event (cp_beacon_create_default_schedules);
+}
+
+void
+cp_beacon_process_tracked_avln (cp_t *ctx, bsu_beacon_t *beacon,
+ cp_net_t *net)
+{
+ dbg_assert (ctx);
+ dbg_assert (beacon);
+ dbg_assert (net);
+ cp_sta_own_data_t *own = cp_sta_mgr_get_sta_own_data (ctx);
+ own->nid_track = beacon->vf.nid;
+ own->tei_track = beacon->vf.stei;
+ own->cco_mac_addr_track = beacon->bmis.mac_address.present ?
+ beacon->bmis.mac_address.mac_address : MAC_ZERO;
+ scenario_event (cp_beacon_process_tracked_avln, param);
+ test_fail_unless (beacon == param->beacon);
+ test_fail_unless (net == param->net);
+ test_fail_unless (cp_net_get_nid (ctx, net) == beacon->vf.nid);
+}
+
+void
+cp_beacon_process_untracked_avln (cp_t *ctx)
+{
+ cp_sta_own_data_t *own = cp_sta_mgr_get_sta_own_data (ctx);
+ own->nid_track = 0;
+ own->tei_track = 0;
+ own->cco_mac_addr_track = MAC_ZERO;
+ scenario_event (cp_beacon_process_untracked_avln);
+}
+
+void
+cp_beacon_beacon_not_received (cp_t *ctx)
+{
+ dbg_assert (ctx);
+}
+
+void
+cp_beacon_reconfigure_timer (cp_t *ctx, bool cco)
+{
+ dbg_assert (ctx);
+ scenario_event (cp_beacon_reconfigure_timer);
+}
+
+void
+cp_beacon_change_nek (cp_t *ctx, uint eks, cp_key_t nek, bool now)
+{
+ dbg_assert (ctx);
+ scenario_event (cp_beacon_change_nek, param);
+ test_fail_unless (eks == param->eks);
+ test_fail_unless (memcmp (&nek, param->nek, sizeof (nek)) == 0);
+ test_fail_unless (now == param->now);
+}
+
+void
+cp_beacon_deactivate (cp_t *ctx)
+{
+ dbg_assert (ctx);
+ scenario_event (cp_beacon_deactivate);
+}
+
+void
+cp_beacon_poweron_init (cp_t *ctx)
+{
+}
+
+void
+cp_av_beacon_sta_update_beacon_data (cp_t *ctx)
+{
+}
+
+void
+cp_beacon_cco_update_beacon_data (cp_t *ctx)
+{
+}
+
+
+void
+cp_av_beacon_discover_init (cp_t *ctx) {}
+
+void
+cp_av_beacon_discover_uninit (cp_t *ctx) {}
+
+bool
+cp_beacon_synchronised (cp_t *ctx)
+{
+ scenario_event (cp_beacon_synchronised, param);
+ return param->ok;
+}
diff --git a/cesar/cp/eoc/sta/action/test/utest_eoc/src/ce_stub.c b/cesar/cp/eoc/sta/action/test/utest_eoc/src/ce_stub.c
new file mode 100644
index 0000000000..ec7ff29510
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/test/utest_eoc/src/ce_stub.c
@@ -0,0 +1,24 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/ce_stub.c
+ * \brief CE stub.
+ * \ingroup test
+ */
+#include "common/std.h"
+#include "lib/blk.h"
+#include "ce/rx/rx.h"
+
+extern blk_t* nsr_block;
+
+blk_t *
+ce_rx_get_nsr (ce_rx_t *ce_rx, cp_tei_t tei, uint int_index,
+ uint int_version, u16* tm_ber)
+{
+ return nsr_block;
+}
diff --git a/cesar/cp/eoc/sta/action/test/utest_eoc/src/core_stub.c b/cesar/cp/eoc/sta/action/test/utest_eoc/src/core_stub.c
new file mode 100644
index 0000000000..dae4a03060
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/test/utest_eoc/src/core_stub.c
@@ -0,0 +1,42 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/core_stub.c
+ * \brief STA core stub.
+ * \ingroup test
+ */
+#include "common/std.h"
+#include "cp/sta/core/core.h"
+
+#include "lib/scenario/scenario.h"
+
+void
+cp_sta_core_gen_timed_event (
+ cp_t *cp_ctx, cp_sta_core_timed_event_def_t *sta_core_timed_event,
+ cp_fsm_event_t *fsm_event, uint event_delay_ms)
+{
+ dbg_assert (cp_ctx);
+ dbg_assert (sta_core_timed_event);
+ scenario_event (cp_sta_core_gen_timed_event, param);
+ test_fail_unless (event_delay_ms >= param->delay_min_ms);
+ test_fail_unless (event_delay_ms <= param->delay_max_ms);
+}
+
+void
+cp_sta_core_stop_timed_or_cyclic_event(
+ cp_t *cp_ctx, cp_sta_core_timed_event_def_t *sta_core_timed_event)
+{
+ dbg_assert (cp_ctx);
+ dbg_assert (sta_core_timed_event);
+ scenario_event (cp_sta_core_stop_timed_or_cyclic_event);
+}
+
+void
+cp_sta_core_checkpoint (cp_t *ctx)
+{
+}
diff --git a/cesar/cp/eoc/sta/action/test/utest_eoc/src/cp_stub.c b/cesar/cp/eoc/sta/action/test/utest_eoc/src/cp_stub.c
new file mode 100644
index 0000000000..b9d5f3c7f3
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/test/utest_eoc/src/cp_stub.c
@@ -0,0 +1,35 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/cp_stub.c
+ * \brief CP stub.
+ * \ingroup test
+ */
+#include "common/std.h"
+#include "lib/scenario/scenario.h"
+#include "cp/cp.h"
+
+void
+cp_compute_nmk_and_nid_from_npw (cp_t *ctx, const char *npw,
+ cp_security_level_t sl)
+{
+ dbg_assert (ctx);
+ dbg_assert (npw);
+}
+
+u32
+cp_sta_core_get_date_ms (cp_t *ctx)
+{
+ return 0;
+}
+
+void
+cp_eoc_cco_bw_sta_allocations (cp_t *ctx)
+{
+ scenario_event (cp_eoc_cco_bw_sta_allocations);
+}
diff --git a/cesar/cp/eoc/sta/action/test/utest_eoc/src/dataplane_stub.c b/cesar/cp/eoc/sta/action/test/utest_eoc/src/dataplane_stub.c
new file mode 100644
index 0000000000..f8bc35fbf8
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/test/utest_eoc/src/dataplane_stub.c
@@ -0,0 +1,84 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/dataplane_stub.c
+ * \brief Data plane layers stub.
+ * \ingroup test
+ */
+#include "common/std.h"
+
+#include "lib/scenario/scenario.h"
+
+#include "cl/cl_mactotei.h"
+#include "mac/pbproc/pbproc.h"
+#include "cp/inc/context.h"
+
+void
+sar_activate (sar_t *ctx, bool flag)
+{
+ scenario_event (sar_activate, param);
+ test_fail_unless (flag == param->flag);
+}
+
+void
+sar_cleanup (sar_t *ctx)
+{
+ if (!scenario.current
+ || scenario.current->event_id != SCENARIO_EVENT_sar_cleanup)
+ return; /* Be less strict. */
+ scenario_event (sar_cleanup);
+}
+
+void
+sar_store_mfs_remove (mac_store_t *mac_store, mfs_t *mfs, void *user)
+{
+ mac_store_mfs_remove (mac_store, mfs);
+}
+
+void
+sar_sta_remove (sar_t *ctx, u8 tei)
+{
+ cp_t *cp = (void *) ctx;
+ /* For EoC some GLID are created. */
+ sta_t *sta = mac_store_sta_get (cp->mac_store, tei);
+ if (sta)
+ {
+ mac_store_mfs_travel_by_tei (cp->mac_store, tei,
+ sar_store_mfs_remove,
+ ctx);
+ dbg_check (mac_store_sta_remove (cp->mac_store, tei));
+ blk_release (sta);
+ }
+}
+
+void
+pbproc_activate (pbproc_t *ctx, bool flag)
+{
+ scenario_event (pbproc_activate, param);
+ test_fail_unless (flag == param->flag);
+}
+
+
+void
+pbproc_parameters_adjust (pbproc_t *ctx, bool adjust)
+{
+ scenario_event (pbproc_parameters_adjust, param);
+ test_fail_unless (adjust == param->adjust);
+}
+
+void
+phy_tx_scale_adapt_exp_set (phy_t *ctx, u8 exp)
+{
+ dbg_assert_default ();
+}
+
+void
+phy_tx_scale_adapt_set (phy_t *ctx, u16 value)
+{
+ dbg_assert_default ();
+}
diff --git a/cesar/cp/eoc/sta/action/test/utest_eoc/src/drv.c b/cesar/cp/eoc/sta/action/test/utest_eoc/src/drv.c
new file mode 100644
index 0000000000..e51a17e2cd
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/test/utest_eoc/src/drv.c
@@ -0,0 +1,688 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/drv.c
+ * \brief Test sta/action/drv.
+ * \ingroup test
+ */
+#include "common/std.h"
+
+#include "lib/scenario/scenario.h"
+#include "cp/av/sta/action/poweron.h"
+#include "inc/test_sta_action.h"
+#include "lib/stats.h"
+#include "cl/inc/context.h"
+#include "bsu/aclf/aclf.h"
+
+#include <string.h>
+
+static void
+drv_set_params (cp_t *ctx,
+ mac_t mac,
+ bool cco_pref,
+ bool was_cco,
+ const char *npw,
+ const char *dpw,
+ cp_security_level_t sl,
+ cp_nid_t nid,
+ const char *m_sta_hfid,
+ const char *u_sta_hfid,
+ const char *avln_hfid,
+ const u32 *tonemask,
+ uint carrier_nb)
+{
+ int i;
+ cp_sta_own_data_t *own = cp_sta_mgr_get_sta_own_data (ctx);
+ cp_sta_own_data_set_mac_address (ctx, mac);
+ own->cco_prefered = cco_pref;
+ cp_sta_own_data_set_was_cco (ctx, was_cco);
+ cp_sta_own_data_set_npw (ctx, npw);
+ cp_sta_own_data_set_dpw (ctx, dpw);
+ cp_sta_own_data_set_security_level (ctx, sl);
+ cp_sta_own_data_set_nid (ctx, nid);
+ cp_sta_own_data_set_hfid_manufacturer (ctx, m_sta_hfid);
+ cp_sta_own_data_set_hfid_user (ctx, u_sta_hfid);
+ cp_sta_own_data_set_hfid_avln (ctx, avln_hfid);
+ dbg_assert (tonemask == NULL);
+ for (i = 0; i < PHY_TONEMASK_WORDS; i++)
+ ctx->mac_config->tonemask_info.tonemask[i] = 0;
+ ctx->mac_config->tonemask_info.carrier_nb = carrier_nb;
+}
+
+static void
+drv_check_params (cp_t *ctx,
+ test_t t,
+ mac_t mac,
+ bool cco_pref,
+ bool was_cco,
+ const char *npw,
+ const char *dpw,
+ cp_security_level_t sl,
+ cp_nid_t nid,
+ const char *m_sta_hfid,
+ const char *u_sta_hfid,
+ const char *avln_hfid,
+ const u32 *tonemask,
+ uint carrier_nb)
+{
+ int i;
+ test_within (t);
+ cp_sta_own_data_t *own = cp_sta_mgr_get_sta_own_data (ctx);
+ test_fail_unless (mac == cp_sta_own_data_get_mac_address (ctx));
+ test_fail_unless (cco_pref == own->cco_prefered);
+ test_fail_unless (was_cco == cp_sta_own_data_get_was_cco (ctx));
+ test_fail_unless (strcmp (npw, cp_sta_own_data_get_npw (ctx)) == 0);
+ test_fail_unless (strcmp (dpw, cp_sta_own_data_get_dpw (ctx)) == 0);
+ test_fail_unless (sl == cp_sta_own_data_get_security_level (ctx));
+ test_fail_unless (nid == cp_sta_own_data_get_nid (ctx));
+ test_fail_unless (strcmp (m_sta_hfid, own->hfid_manufacturer) == 0);
+ test_fail_unless (strcmp (u_sta_hfid, own->hfid_user) == 0);
+ test_fail_unless (strcmp (avln_hfid, own->hfid_avln) == 0);
+ if (tonemask == NULL)
+ for (i = 0; i < PHY_TONEMASK_WORDS; i++)
+ test_fail_unless (ctx->mac_config->tonemask_info.tonemask[i]
+ == 0);
+ else
+ for (i = 0; i < PHY_TONEMASK_WORDS; i++)
+ test_fail_unless (ctx->mac_config->tonemask_info.tonemask[i]
+ == tonemask[i]);
+ test_fail_unless (ctx->mac_config->tonemask_info.carrier_nb
+ == carrier_nb);
+}
+
+static void
+drv_basic_test_case (test_t t)
+{
+ test_sta_action_t ctx;
+ test_sta_action_init (&ctx);
+ cp_mme_peer_t peer = CP_MME_PEER (0xaabbccddeeffull, MAC_TEI_FOREIGN);
+ cp_nid_t nid;
+ test_case_begin (t, "basic");
+ test_begin (t, "set")
+ {
+ drv_set_params (&ctx.cp, MAC_BROADCAST, false, false, "", "",
+ CP_SECURITY_LEVEL_SC, 1, "", "", "", NULL, 0);
+ u32 tonemask[PHY_TONEMASK_WORDS];
+ uint i;
+ nid = ((u64) CP_SECURITY_LEVEL_HS) << (HPAV_NID_SIZE_BITS - 2)
+ | 0x002233445566ull;
+ uint carriers_nb = tonemask_default (tonemask);
+ u8 my_param_u8 = 0;
+ u64 my_param_u64 = 0;
+ char config[] = "my_param_u8:42 my_param_u64:0x4242424242";
+ lib_stats_set_stat_value_notype ("my_param_u8", &my_param_u8,
+ LIB_STATS_ACCESS_WRITE_ONLY,
+ LIB_STATS_USER);
+ lib_stats_set_stat_value_notype ("my_param_u64", &my_param_u64,
+ LIB_STATS_ACCESS_READ_WRITE,
+ LIB_STATS_USER);
+ scenario_entry_t entries[] = {
+ /* Set MAC address. */
+ SCENARIO_ACTION (drv__stopped__drv_sta_set_mac_addr_req,
+ .peer = peer),
+ SCENARIO_EVENT (cp_msg_drv_sta_set_mac_addr_req_receive,
+ .ok = true,
+ .mac = 0x112233445566ull),
+ SCENARIO_EVENT (cp_msg_drv_any_cnf_send,
+ .peer = peer,
+ .mmtype = DRV_STA_SET_MAC_ADDR_CNF,
+ .result = CP_MSG_DRV_RESULT_SUCCESS),
+ /* Set CCo preferred flag. */
+ SCENARIO_ACTION (drv__stopped__drv_sta_set_cco_pref_req,
+ .peer = peer),
+ SCENARIO_EVENT (cp_msg_drv_sta_set_cco_pref_req_receive,
+ .ok = true,
+ .cco_pref = true),
+ SCENARIO_EVENT (cp_msg_drv_any_cnf_send,
+ .peer = peer,
+ .mmtype = DRV_STA_SET_CCO_PREF_CNF,
+ .result = CP_MSG_DRV_RESULT_SUCCESS),
+ /* Set was CCo flag. */
+ SCENARIO_ACTION (drv__stopped__drv_sta_set_was_cco_req,
+ .peer = peer),
+ SCENARIO_EVENT (cp_msg_drv_sta_set_was_cco_req_receive,
+ .ok = true,
+ .was_cco = true),
+ SCENARIO_EVENT (cp_msg_drv_any_cnf_send,
+ .peer = peer,
+ .mmtype = DRV_STA_SET_WAS_CCO_CNF,
+ .result = CP_MSG_DRV_RESULT_SUCCESS),
+ /* Set NPW. */
+ SCENARIO_ACTION (drv__stopped__drv_sta_set_npw_req,
+ .peer = peer),
+ SCENARIO_EVENT (cp_msg_drv_sta_set_npw_req_receive,
+ .ok = true,
+ .npw = "p4ssw0rd"),
+ SCENARIO_EVENT (cp_msg_drv_any_cnf_send,
+ .peer = peer,
+ .mmtype = DRV_STA_SET_NPW_CNF,
+ .result = CP_MSG_DRV_RESULT_SUCCESS),
+ /* Set DPW. */
+ SCENARIO_ACTION (drv__stopped__drv_sta_set_dpw_req,
+ .peer = peer),
+ SCENARIO_EVENT (cp_msg_drv_sta_set_dpw_req_receive,
+ .ok = true,
+ .dpw = "s3cr3t"),
+ SCENARIO_EVENT (cp_msg_drv_any_cnf_send,
+ .peer = peer,
+ .mmtype = DRV_STA_SET_DPW_CNF,
+ .result = CP_MSG_DRV_RESULT_SUCCESS),
+ /* Set SL. */
+ SCENARIO_ACTION (drv__stopped__drv_sta_set_sl_req,
+ .peer = peer),
+ SCENARIO_EVENT (cp_msg_drv_sta_set_sl_req_receive,
+ .ok = true,
+ .sl = CP_SECURITY_LEVEL_HS),
+ SCENARIO_EVENT (cp_msg_drv_any_cnf_send,
+ .peer = peer,
+ .mmtype = DRV_STA_SET_SL_CNF,
+ .result = CP_MSG_DRV_RESULT_SUCCESS),
+ /* Set NID. */
+ SCENARIO_ACTION (drv__stopped__drv_sta_set_nid_req,
+ .peer = peer),
+ SCENARIO_EVENT (cp_msg_drv_sta_set_nid_req_receive,
+ .ok = true,
+ .nid = nid),
+ SCENARIO_EVENT (cp_msg_drv_any_cnf_send,
+ .peer = peer,
+ .mmtype = DRV_STA_SET_NID_CNF,
+ .result = CP_MSG_DRV_RESULT_SUCCESS),
+ /* Set manufacturer STA HFID. */
+ SCENARIO_ACTION (drv__stopped__drv_sta_set_m_sta_hfid_req,
+ .peer = peer),
+ SCENARIO_EVENT (cp_msg_drv_sta_set_m_sta_hfid_req_receive,
+ .ok = true,
+ .m_sta_hfid = "the M STA HFID"),
+ SCENARIO_EVENT (cp_msg_drv_any_cnf_send,
+ .peer = peer,
+ .mmtype = DRV_STA_SET_M_STA_HFID_CNF,
+ .result = CP_MSG_DRV_RESULT_SUCCESS),
+ /* Set user STA HFID. */
+ SCENARIO_ACTION (drv__stopped__drv_sta_set_u_sta_hfid_req,
+ .peer = peer),
+ SCENARIO_EVENT (cp_msg_drv_sta_set_u_sta_hfid_req_receive,
+ .ok = true,
+ .u_sta_hfid = "the U STA HFID"),
+ SCENARIO_EVENT (cp_msg_drv_any_cnf_send,
+ .peer = peer,
+ .mmtype = DRV_STA_SET_U_STA_HFID_CNF,
+ .result = CP_MSG_DRV_RESULT_SUCCESS),
+ /* Set AVLN HFID. */
+ SCENARIO_ACTION (drv__stopped__drv_sta_set_avln_hfid_req,
+ .peer = peer),
+ SCENARIO_EVENT (cp_msg_drv_sta_set_avln_hfid_req_receive,
+ .ok = true,
+ .avln_hfid = "the AVLN HFID"),
+ SCENARIO_EVENT (cp_msg_drv_any_cnf_send,
+ .peer = peer,
+ .mmtype = DRV_STA_SET_AVLN_HFID_CNF,
+ .result = CP_MSG_DRV_RESULT_SUCCESS),
+ /* Set tonemask. */
+ SCENARIO_ACTION (drv__stopped__drv_sta_set_tonemask_req,
+ .peer = peer),
+ SCENARIO_EVENT (cp_msg_drv_sta_set_tonemask_req_receive,
+ .ok = true,
+ .tonemask = tonemask),
+ SCENARIO_EVENT (pbproc_parameters_adjust, .adjust = false),
+ SCENARIO_EVENT (cp_msg_drv_any_cnf_send,
+ .peer = peer,
+ .mmtype = DRV_STA_SET_TONEMASK_CNF,
+ .result = CP_MSG_DRV_RESULT_SUCCESS),
+ /* Set config. */
+ SCENARIO_ACTION (drv__drv_sta_set_config_req,
+ .peer = peer),
+ SCENARIO_EVENT (cp_msg_drv_sta_set_config_req_receive,
+ .ok = true,
+ .config = config),
+ SCENARIO_EVENT (cp_msg_drv_any_cnf_send,
+ .peer = peer,
+ .mmtype = DRV_STA_SET_CONFIG_CNF,
+ .result = CP_MSG_DRV_RESULT_SUCCESS),
+ SCENARIO_END
+ };
+ scenario_globals_t globals = {
+ .cp = &ctx.cp,
+ };
+ scenario_run (t, entries, &globals);
+ drv_check_params (&ctx.cp, t, 0x112233445566ull, true, true,
+ "p4ssw0rd", "s3cr3t", CP_SECURITY_LEVEL_HS,
+ nid, "the M STA HFID",
+ "the U STA HFID", "the AVLN HFID", tonemask,
+ carriers_nb);
+
+
+ cp_key_t nmk_old = { { 0x0, 0x0, 0x0, 0x0} };
+ ctx.cp.sta_mgr.sta_own_data.nmk = nmk_old;
+ cp_nid_t old_nid = 0x1;
+
+ cp_sta_own_data_set_nid (&ctx.cp, old_nid);
+ cp_sta_own_data_set_security_level (&ctx.cp, 0x0);
+
+ enum cp_msg_drv_sta_set_key_type_t type =
+ CP_MSG_DRV_STA_SET_KEY_TYPE_CHANGE_NID;
+ cp_security_level_t sl = 0x1;
+ nid = ((u64) sl) << (HPAV_NID_SIZE_BITS - 2) | 0x123456789abcdull;
+
+ cp_sta_own_data_set_nid (&ctx.cp, nid);
+ cp_key_t nmk = { { 0x11112222, 0x33334444, 0x55556666, 0x77778889 } };
+
+ type = CP_MSG_DRV_STA_SET_KEY_TYPE_CHANGE_SECURITY_LEVEL;
+ scenario_entry_t entries3[] = {
+ /* Set KEY. */
+ SCENARIO_ACTION (drv__stopped__drv_sta_set_key_req,
+ .peer = peer),
+ SCENARIO_EVENT (cp_msg_drv_sta_set_key_req_receive,
+ .ok = true,
+ .nmk = nmk,
+ .type = type,
+ .nid = nid,
+ .sl = sl),
+ SCENARIO_EVENT (cp_msg_drv_any_cnf_send,
+ .peer = peer,
+ .mmtype = DRV_STA_SET_KEY_CNF,
+ .result = CP_MSG_DRV_RESULT_SUCCESS),
+ SCENARIO_ACTION (drv__stopped__drv_sta_set_key_req,
+ .peer = peer),
+ SCENARIO_EVENT (cp_msg_drv_sta_set_key_req_receive,
+ .ok = false,
+ .nmk = nmk,
+ .type = type,
+ .nid = nid,
+ .sl = sl),
+ SCENARIO_EVENT (cp_msg_drv_any_cnf_send,
+ .peer = peer,
+ .mmtype = DRV_STA_SET_KEY_CNF,
+ .result = CP_MSG_DRV_RESULT_FAILURE),
+ SCENARIO_END
+ };
+ scenario_run (t, entries3, &globals);
+
+ nid = cp_secu_nmk2nid (&ctx.cp, nmk, sl);
+ test_fail_unless ((cp_sta_own_data_get_nid (&ctx.cp)) == nid);
+
+ /* SET DAK. */
+ cp_key_t dak = {{ 0x11111111, 0x22222222, 0x33333333, 0x44444444}};
+ cp_key_t own_dak;
+ scenario_entry_t entries4[] = {
+ SCENARIO_ACTION (drv__stopped__drv_sta_set_dak_req,
+ .peer = peer),
+ SCENARIO_EVENT (cp_msg_drv_sta_set_dak_req_receive,
+ .ok = true,
+ .dak = dak),
+ SCENARIO_EVENT (cp_msg_drv_any_cnf_send,
+ .peer = peer,
+ .mmtype = DRV_STA_SET_DAK_CNF,
+ .result = CP_MSG_DRV_RESULT_SUCCESS),
+ SCENARIO_END
+ };
+ scenario_run (t, entries4, &globals);
+
+ own_dak = cp_sta_own_data_get_dak (&ctx.cp);
+ for (i = 0; i < COUNT (dak.key); i++)
+ test_fail_unless (dak.key[i] == own_dak.key[i]);
+
+ memset (&dak, 0, sizeof (cp_key_t));
+ scenario_entry_t entries5[] = {
+ SCENARIO_ACTION (drv__stopped__drv_sta_set_dak_req,
+ .peer = peer),
+ SCENARIO_EVENT (cp_msg_drv_sta_set_dak_req_receive,
+ .ok = false,
+ .dak = dak),
+ SCENARIO_EVENT (cp_msg_drv_any_cnf_send,
+ .peer = peer,
+ .mmtype = DRV_STA_SET_DAK_CNF,
+ .result = CP_MSG_DRV_RESULT_FAILURE),
+ SCENARIO_END
+ };
+ scenario_run (t, entries5, &globals);
+
+ own_dak = cp_sta_own_data_get_dak (&ctx.cp);
+ for (i = 0; i < COUNT (dak.key); i++)
+ test_fail_unless (dak.key[i] != own_dak.key[i]);
+ } test_end;
+ test_begin (t, "set error")
+ {
+ drv_set_params (&ctx.cp, MAC_BROADCAST, false, false, "", "",
+ CP_SECURITY_LEVEL_SC, 1, "", "", "", NULL, 0);
+ scenario_entry_t entries[] = {
+ /* Set MAC address. */
+ SCENARIO_ACTION (drv__stopped__drv_sta_set_mac_addr_req,
+ .peer = peer),
+ SCENARIO_EVENT (cp_msg_drv_sta_set_mac_addr_req_receive,
+ .ok = false),
+ SCENARIO_EVENT (cp_msg_drv_any_cnf_send,
+ .peer = peer,
+ .mmtype = DRV_STA_SET_MAC_ADDR_CNF,
+ .result = CP_MSG_DRV_RESULT_FAILURE),
+ /* Set CCo preferred flag. */
+ SCENARIO_ACTION (drv__stopped__drv_sta_set_cco_pref_req,
+ .peer = peer),
+ SCENARIO_EVENT (cp_msg_drv_sta_set_cco_pref_req_receive,
+ .ok = false),
+ SCENARIO_EVENT (cp_msg_drv_any_cnf_send,
+ .peer = peer,
+ .mmtype = DRV_STA_SET_CCO_PREF_CNF,
+ .result = CP_MSG_DRV_RESULT_FAILURE),
+ /* Set was CCo flag. */
+ SCENARIO_ACTION (drv__stopped__drv_sta_set_was_cco_req,
+ .peer = peer),
+ SCENARIO_EVENT (cp_msg_drv_sta_set_was_cco_req_receive,
+ .ok = false),
+ SCENARIO_EVENT (cp_msg_drv_any_cnf_send,
+ .peer = peer,
+ .mmtype = DRV_STA_SET_WAS_CCO_CNF,
+ .result = CP_MSG_DRV_RESULT_FAILURE),
+ /* Set NPW. */
+ SCENARIO_ACTION (drv__stopped__drv_sta_set_npw_req,
+ .peer = peer),
+ SCENARIO_EVENT (cp_msg_drv_sta_set_npw_req_receive,
+ .ok = false),
+ SCENARIO_EVENT (cp_msg_drv_any_cnf_send,
+ .peer = peer,
+ .mmtype = DRV_STA_SET_NPW_CNF,
+ .result = CP_MSG_DRV_RESULT_FAILURE),
+ /* Set DPW. */
+ SCENARIO_ACTION (drv__stopped__drv_sta_set_dpw_req,
+ .peer = peer),
+ SCENARIO_EVENT (cp_msg_drv_sta_set_dpw_req_receive,
+ .ok = false),
+ SCENARIO_EVENT (cp_msg_drv_any_cnf_send,
+ .peer = peer,
+ .mmtype = DRV_STA_SET_DPW_CNF,
+ .result = CP_MSG_DRV_RESULT_FAILURE),
+ /* Set SL. */
+ SCENARIO_ACTION (drv__stopped__drv_sta_set_sl_req,
+ .peer = peer),
+ SCENARIO_EVENT (cp_msg_drv_sta_set_sl_req_receive,
+ .ok = false),
+ SCENARIO_EVENT (cp_msg_drv_any_cnf_send,
+ .peer = peer,
+ .mmtype = DRV_STA_SET_SL_CNF,
+ .result = CP_MSG_DRV_RESULT_FAILURE),
+ /* Set NID. */
+ SCENARIO_ACTION (drv__stopped__drv_sta_set_nid_req,
+ .peer = peer),
+ SCENARIO_EVENT (cp_msg_drv_sta_set_nid_req_receive,
+ .ok = false),
+ SCENARIO_EVENT (cp_msg_drv_any_cnf_send,
+ .peer = peer,
+ .mmtype = DRV_STA_SET_NID_CNF,
+ .result = CP_MSG_DRV_RESULT_FAILURE),
+ /* Set manufacturer STA HFID. */
+ SCENARIO_ACTION (drv__stopped__drv_sta_set_m_sta_hfid_req,
+ .peer = peer),
+ SCENARIO_EVENT (cp_msg_drv_sta_set_m_sta_hfid_req_receive,
+ .ok = false),
+ SCENARIO_EVENT (cp_msg_drv_any_cnf_send,
+ .peer = peer,
+ .mmtype = DRV_STA_SET_M_STA_HFID_CNF,
+ .result = CP_MSG_DRV_RESULT_FAILURE),
+ /* Set user STA HFID. */
+ SCENARIO_ACTION (drv__stopped__drv_sta_set_u_sta_hfid_req,
+ .peer = peer),
+ SCENARIO_EVENT (cp_msg_drv_sta_set_u_sta_hfid_req_receive,
+ .ok = false),
+ SCENARIO_EVENT (cp_msg_drv_any_cnf_send,
+ .peer = peer,
+ .mmtype = DRV_STA_SET_U_STA_HFID_CNF,
+ .result = CP_MSG_DRV_RESULT_FAILURE),
+ /* Set AVLN HFID. */
+ SCENARIO_ACTION (drv__stopped__drv_sta_set_avln_hfid_req,
+ .peer = peer),
+ SCENARIO_EVENT (cp_msg_drv_sta_set_avln_hfid_req_receive,
+ .ok = false),
+ SCENARIO_EVENT (cp_msg_drv_any_cnf_send,
+ .peer = peer,
+ .mmtype = DRV_STA_SET_AVLN_HFID_CNF,
+ .result = CP_MSG_DRV_RESULT_FAILURE),
+ /* Set tonemask. */
+ SCENARIO_ACTION (drv__stopped__drv_sta_set_tonemask_req,
+ .peer = peer),
+ SCENARIO_EVENT (cp_msg_drv_sta_set_tonemask_req_receive,
+ .ok = false),
+ SCENARIO_EVENT (cp_msg_drv_any_cnf_send,
+ .peer = peer,
+ .mmtype = DRV_STA_SET_TONEMASK_CNF,
+ .result = CP_MSG_DRV_RESULT_FAILURE),
+ SCENARIO_END
+ };
+ scenario_globals_t globals = {
+ .cp = &ctx.cp,
+ };
+ scenario_run (t, entries, &globals);
+ drv_check_params (&ctx.cp, t, MAC_BROADCAST, false, false, "", "",
+ CP_SECURITY_LEVEL_SC, 1, "", "", "", NULL, 0);
+ } test_end;
+ test_begin (t, "start")
+ {
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (drv__stopped__drv_sta_mac_start_req,
+ .peer = peer),
+ SCENARIO_EVENT (cp_msg_drv_sta_mac_start_req_receive,
+ .ok = true),
+ SCENARIO_EVENT (cp_fsm_event_bare_new,
+ .type = CP_FSM_EVENT_TYPE_to_poweron),
+ SCENARIO_EVENT (cp_msg_drv_any_cnf_send,
+ .peer = peer,
+ .mmtype = DRV_STA_MAC_START_CNF,
+ .result = CP_MSG_DRV_RESULT_SUCCESS),
+ SCENARIO_END
+ };
+ scenario_globals_t globals = {
+ .cp = &ctx.cp,
+ };
+ scenario_run (t, entries, &globals);
+ } test_end;
+ test_begin (t, "start error")
+ {
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (drv__stopped__drv_sta_mac_start_req,
+ .peer = peer),
+ SCENARIO_EVENT (cp_msg_drv_sta_mac_start_req_receive,
+ .ok = false),
+ SCENARIO_EVENT (cp_msg_drv_any_cnf_send,
+ .peer = peer,
+ .mmtype = DRV_STA_MAC_START_CNF,
+ .result = CP_MSG_DRV_RESULT_FAILURE),
+ SCENARIO_END
+ };
+ scenario_globals_t globals = {
+ .cp = &ctx.cp,
+ };
+ scenario_run (t, entries, &globals);
+ } test_end;
+ test_begin (t, "stop")
+ {
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (drv__started__drv_sta_mac_stop_req,
+ .peer = peer),
+ SCENARIO_EVENT (cp_msg_drv_sta_mac_stop_req_receive,
+ .ok = true),
+ SCENARIO_EVENT (cp_fsm_event_bare_new,
+ .type = CP_FSM_EVENT_TYPE_to_stop),
+ /* ... */
+ SCENARIO_ACTION (drv__stopping__stopped),
+ SCENARIO_EVENT (cp_msg_drv_any_cnf_send,
+ .peer = peer,
+ .mmtype = DRV_STA_MAC_STOP_CNF,
+ .result = CP_MSG_DRV_RESULT_SUCCESS),
+ SCENARIO_END
+ };
+ scenario_globals_t globals = {
+ .cp = &ctx.cp,
+ };
+ scenario_run (t, entries, &globals);
+ } test_end;
+ test_sta_action_uninit (&ctx);
+}
+
+void
+drv_get_key_test_case (test_t t)
+{
+ test_sta_action_t ctx;
+ test_case_begin (t, "DRV_GET_KEY");
+
+ test_begin (t, "Good and bad")
+ {
+ cp_key_t nmk = { { 0x11112222, 0x33334444, 0x55556666, 0x77778888 } };
+ cp_security_level_t sl = 0x1;
+ cp_nid_t nid = (((u64) sl) << (HPAV_NID_SIZE_BITS - 2)) | 0x123456789abcdull;
+ cp_mme_peer_t peer = CP_MME_PEER (0x012345, MAC_TEI_UNASSOCIATED);
+ test_sta_action_init (&ctx);
+
+ scenario_globals_t globals = {
+ .cp = &ctx.cp,
+ };
+
+ /* Set NID, sl, and nmk. */
+ ctx.cp.sta_mgr.sta_own_data.nmk = nmk;
+ cp_sta_own_data_set_security_level (&ctx.cp, sl);
+ cp_sta_own_data_set_nid (&ctx.cp, nid);
+
+ cp_key_t nmk_null = { {0, 0, 0, 0}};
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (drv__drv_sta_get_key_req,
+ .peer = peer),
+ SCENARIO_EVENT (cp_msg_drv_sta_get_key_req_receive,
+ .ok = true),
+ SCENARIO_EVENT (cp_msg_drv_sta_get_key_cnf_send,
+ .peer = peer,
+ .result = CP_MSG_DRV_RESULT_SUCCESS,
+ .nmk = nmk,
+ .nid = nid,
+ .sl = sl),
+ SCENARIO_ACTION (drv__drv_sta_get_key_req,
+ .peer = peer),
+ SCENARIO_EVENT (cp_msg_drv_sta_get_key_req_receive,
+ .ok = false),
+ SCENARIO_EVENT (cp_msg_drv_sta_get_key_cnf_send,
+ .peer = peer,
+ .result = CP_MSG_DRV_RESULT_FAILURE,
+ .nmk = nmk_null,
+ .nid = 0,
+ .sl = 0),
+ SCENARIO_END
+ };
+ scenario_run (t, entries, &globals);
+ }
+ test_end;
+}
+
+
+void
+drv_get_sta_status_test_case (test_t t)
+{
+ test_sta_action_t ctx;
+ test_case_begin (t, "DRV_GET_STA_STATUS");
+ cp_mme_peer_t peer = CP_MME_PEER(0x1, MAC_TEI_FOREIGN);
+ test_sta_action_init (&ctx);
+ cl_t cl;
+ ctx.cp.cl = &cl;
+
+ scenario_globals_t globals = {
+ .cp = &ctx.cp,
+ };
+
+ cp_sta_own_data_set_tei (&ctx.cp, 1);
+ cp_sta_own_data_set_security_level (&ctx.cp, CP_SECURITY_LEVEL_HS);
+ *((bsu_aclf_frequency_t*) &ctx.cp.bsu_aclf->frequency) =
+ BSU_ACLF_FREQ_50HZ;
+
+ test_begin (t, "Good and bad")
+ {
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (drv__drv_sta_status_req,
+ .peer = peer),
+ SCENARIO_EVENT (cp_msg_drv_sta_status_req_receive,
+ .ok = true),
+ SCENARIO_EVENT (cp_msg_drv_sta_status_cnf_send,
+ .peer = peer,
+ .result = CP_MSG_DRV_RESULT_SUCCESS,
+ .status = CP_MSG_DRV_STA_STATUS_STATUS_ASSOC,
+ .cco = CP_MSG_DRV_STA_STATUS_CCO_STA,
+ .preferred_cco = false,
+ .backup_cco = false,
+ .simple_connect = false,
+ .pwl_sync_frequency = BSU_ACLF_FREQ_50HZ),
+ SCENARIO_ACTION (drv__drv_sta_status_req,
+ .peer = peer),
+ SCENARIO_EVENT (cp_msg_drv_sta_status_req_receive,
+ .ok = false),
+ SCENARIO_EVENT (cp_msg_drv_sta_status_cnf_send,
+ .peer = peer,
+ .result = CP_MSG_DRV_RESULT_FAILURE,
+ .status = 0,
+ .cco = 0,
+ .preferred_cco = false,
+ .backup_cco = false,
+ .simple_connect = false,
+ .pwl_sync_frequency = 0),
+ SCENARIO_END
+ };
+ scenario_run (t, entries, &globals);
+ }
+ test_end;
+ test_begin (t, "UCCo/CCo status")
+ {
+ scenario_entry_t entries_ucco[] = {
+ SCENARIO_ACTION (drv__drv_sta_status_req,
+ .peer = peer),
+ SCENARIO_EVENT (cp_msg_drv_sta_status_req_receive,
+ .ok = true),
+ SCENARIO_EVENT (cp_msg_drv_sta_status_cnf_send,
+ .peer = peer,
+ .result = CP_MSG_DRV_RESULT_SUCCESS,
+ .status = CP_MSG_DRV_STA_STATUS_STATUS_UNASSOC,
+ .cco = CP_MSG_DRV_STA_STATUS_CCO_CCO,
+ .preferred_cco = false,
+ .backup_cco = false,
+ .simple_connect = false,
+ .pwl_sync_frequency = BSU_ACLF_FREQ_50HZ),
+ SCENARIO_END
+ };
+ /* Set our AVLN. */
+ cp_snid_t snid = cp_sta_own_data_get_snid (&ctx.cp);
+ cp_nid_t nid = cp_sta_own_data_get_nid (&ctx.cp);
+ cp_net_t *net = cp_sta_mgr_add_avln (&ctx.cp, snid, nid);
+ cp_sta_mgr_set_our_avln (&ctx.cp, net);
+ cp_sta_own_data_set_cco_status (&ctx.cp, true);
+ net->num_associated_stas = 0;
+ scenario_run (t, entries_ucco, &globals);
+
+ scenario_entry_t entries_cco[] = {
+ SCENARIO_ACTION (drv__drv_sta_status_req,
+ .peer = peer),
+ SCENARIO_EVENT (cp_msg_drv_sta_status_req_receive,
+ .ok = true),
+ SCENARIO_EVENT (cp_msg_drv_sta_status_cnf_send,
+ .peer = peer,
+ .result = CP_MSG_DRV_RESULT_SUCCESS,
+ .status = CP_MSG_DRV_STA_STATUS_STATUS_AUTH,
+ .cco = CP_MSG_DRV_STA_STATUS_CCO_CCO,
+ .preferred_cco = false,
+ .backup_cco = false,
+ .simple_connect = false,
+ .pwl_sync_frequency = BSU_ACLF_FREQ_50HZ),
+ SCENARIO_END
+ };
+ /* Set our AVLN. */
+ net->num_associated_stas = 1;
+ scenario_run (t, entries_cco, &globals);
+ }
+ test_end;
+}
+
+void
+drv_test_suite (test_t t)
+{
+ test_suite_begin (t, "drv");
+ drv_basic_test_case (t);
+ drv_get_key_test_case (t);
+ drv_get_sta_status_test_case (t);
+}
+
diff --git a/cesar/cp/eoc/sta/action/test/utest_eoc/src/fsm_stub.c b/cesar/cp/eoc/sta/action/test/utest_eoc/src/fsm_stub.c
new file mode 100644
index 0000000000..99ba41477f
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/test/utest_eoc/src/fsm_stub.c
@@ -0,0 +1,50 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/fsm_stub.c
+ * \brief FSM stub.
+ * \ingroup test
+ */
+#include "common/std.h"
+#include "cp/fsm/fsm.h"
+
+#include "lib/scenario/scenario.h"
+
+cp_fsm_event_t *
+cp_fsm_event_bare_new (cp_t *ctx, cp_fsm_event_type_t type)
+{
+ dbg_assert (ctx);
+ switch (type)
+ {
+ /* Ignore. */
+ return INVALID_PTR;
+ default:
+ ;
+ }
+ scenario_event (cp_fsm_event_bare_new, param);
+ test_fail_unless (type == param->type);
+ return INVALID_PTR;
+}
+
+cp_fsm_event_t *
+cp_fsm_event_mme_new (cp_t *ctx, cp_fsm_event_type_t type, cp_mme_rx_t *mme)
+{
+ dbg_assert (ctx);
+ scenario_event (cp_fsm_event_mme_new, param);
+ test_fail_unless (type == param->type);
+ return INVALID_PTR;
+}
+
+void
+cp_fsm_branch_ (cp_t *ctx, cp_fsm_branch_t branch)
+{
+ dbg_assert (ctx);
+ scenario_event (cp_fsm_branch, param);
+ test_fail_unless (branch == param->branch);
+}
+
diff --git a/cesar/cp/eoc/sta/action/test/utest_eoc/src/key.c b/cesar/cp/eoc/sta/action/test/utest_eoc/src/key.c
new file mode 100644
index 0000000000..994be95772
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/test/utest_eoc/src/key.c
@@ -0,0 +1,34 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/key.c
+ * \brief Test sta/action/key.
+ * \ingroup test
+ */
+#include "common/std.h"
+
+#include "lib/scenario/scenario.h"
+
+#include "inc/test_sta_action.h"
+
+void
+key_basic_test_case (test_t t)
+{
+ test_sta_action_t ctx;
+ test_sta_action_init (&ctx);
+ /* Cleanup. */
+ test_sta_action_uninit (&ctx);
+ dbg_assert_default ();
+}
+
+void
+key_test_suite (test_t t)
+{
+ test_suite_begin (t, "key");
+ key_basic_test_case (t);
+}
diff --git a/cesar/cp/eoc/sta/action/test/utest_eoc/src/mac_sar_interface_stub.c b/cesar/cp/eoc/sta/action/test/utest_eoc/src/mac_sar_interface_stub.c
new file mode 100644
index 0000000000..7670aca0aa
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/test/utest_eoc/src/mac_sar_interface_stub.c
@@ -0,0 +1,35 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2011 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/mac_sar_interface_stub.c
+ * \brief SAR interface stub functions.
+ * \ingroup cp_msg
+ *
+ * « long description »
+ */
+#include "common/std.h"
+
+#include "mac/sar/sar.h"
+#include "mac/sar/sar_pb_stats.h"
+
+static sar_pb_stats_entry_t fake;
+
+sar_pb_stats_entry_t*
+sar_read_pb_stats_entry (sar_t *ctx, uint index)
+{
+ int i;
+ fake.ntb_clock = 0;
+ fake.stei = 0;
+ fake.pb_nb = 0;
+ fake.fl_av = 0;
+
+ for (i=0; i<PB_STATS_BITMAP_SIZE; i++)
+ fake.pb_bitmap[i] = 0;
+
+ return &fake;
+}
diff --git a/cesar/cp/eoc/sta/action/test/utest_eoc/src/misc.c b/cesar/cp/eoc/sta/action/test/utest_eoc/src/misc.c
new file mode 100644
index 0000000000..9f752f4db5
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/test/utest_eoc/src/misc.c
@@ -0,0 +1,2074 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/misc.c
+ * \brief Test sta/action/misc.
+ * \ingroup test
+ */
+#include "common/std.h"
+
+#include "lib/scenario/scenario.h"
+
+#include "inc/test_sta_action.h"
+
+#include "mac/common/ntb.h" /* for mac_ntb_init */
+
+#include "common/defs/spidcom.h"
+#include "mac/common/timings.h"
+#include "cp/sta/action/action.h"
+
+#include "build_info.h"
+
+void
+misc_whoru_test_case (test_t t)
+{
+ test_sta_action_t ctx;
+ test_sta_action_init (&ctx);
+ scenario_globals_t globals = {
+ .cp = &ctx.cp,
+ };
+ cp_t *cp = &ctx.cp;
+ cp_mme_peer_t peer = CP_MME_PEER (0x112233445566ull, 2);
+ const cp_nid_t nid = 0x111111111111ull;
+ const mac_t mac = 0x111111111111ull;
+ cp_sta_own_data_set_mac_address (cp, mac);
+ char *avln_hfid = "AVLN";
+ cp_sta_own_data_set_hfid_avln (cp, avln_hfid);
+ cp_sta_own_data_set_tei (cp, 1);
+ test_sta_action_create_our_net (&ctx, nid, 12);
+ test_case_begin (t, "whoru");
+ test_begin (t, "ok cco")
+ {
+ cp_sta_own_data_set_cco_status (cp, true);
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (process_cc_who_ru_req, .peer = peer),
+ SCENARIO_EVENT (cp_msg_cc_who_ru_req_receive, .ok = true,
+ .nid = nid),
+ SCENARIO_EVENT (cp_msg_cc_who_ru_cnf_send, .peer = peer,
+ .nid = nid, .cco_mac = mac,
+ .avln_hfid = avln_hfid),
+ SCENARIO_END
+ };
+ scenario_run (t, entries, &globals);
+ } test_end;
+ test_begin (t, "nok mme")
+ {
+ cp_sta_own_data_set_cco_status (cp, true);
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (process_cc_who_ru_req, .peer = peer),
+ SCENARIO_EVENT (cp_msg_cc_who_ru_req_receive, .ok = false,
+ .nid = nid + 1),
+ SCENARIO_END
+ };
+ scenario_run (t, entries, &globals);
+ } test_end;
+ test_begin (t, "nok nid")
+ {
+ cp_sta_own_data_set_cco_status (cp, true);
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (process_cc_who_ru_req, .peer = peer),
+ SCENARIO_EVENT (cp_msg_cc_who_ru_req_receive, .ok = true,
+ .nid = nid + 1),
+ SCENARIO_END
+ };
+ scenario_run (t, entries, &globals);
+ } test_end;
+ /* Cleanup. */
+ test_sta_action_uninit (&ctx);
+}
+
+void
+misc_cc_discover_list_test_case (test_t t)
+{
+ test_sta_action_t ctx;
+ test_sta_action_init (&ctx);
+ scenario_globals_t globals = {
+ .cp = &ctx.cp,
+ };
+ cp_t *cp = &ctx.cp;
+ const cp_nid_t nid = 0x111111111111ull;
+ const mac_t mac = 0x111111111111ull;
+ const cp_snid_t snid = 1;
+ const cp_tei_t tei = 1;
+
+ cp_mme_peer_t peer = CP_MME_PEER (0x112233445577ull, 5);
+ cp_mme_tx_t mme_to_send;
+ globals.mme = &mme_to_send;
+
+ test_case_begin (t, "cc_discover_list");
+
+ test_begin (t, "receive ko")
+ {
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (process_cc_discover_list_req, .peer = peer),
+ SCENARIO_EVENT (cp_msg_cc_discover_list_req_receive, .ok = false),
+ SCENARIO_END
+ };
+ scenario_run (t, entries, &globals);
+ } test_end;
+
+ cp_msg_cc_discover_list_ctx_t disc_ctx;
+
+ test_begin (t, "no station and no network")
+ {
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (process_cc_discover_list_req, .peer = peer),
+ SCENARIO_EVENT (cp_msg_cc_discover_list_req_receive, .ok = true),
+ SCENARIO_EVENT (cp_msg_cc_discover_list_cnf_send_begin,
+ .nb_sta = 0, .nb_net = 0, .disc_ctx = &disc_ctx),
+ SCENARIO_EVENT (cp_msg_cc_discover_list_cnf_send_stations_begin,
+ .disc_ctxc = &disc_ctx),
+ SCENARIO_EVENT (cp_msg_cc_discover_list_cnf_send_net_begin,
+ .disc_ctxc = &disc_ctx),
+ SCENARIO_EVENT (cp_msg_cc_discover_list_cnf_send_end),
+ SCENARIO_END
+ };
+ scenario_run (t, entries, &globals);
+ } test_end;
+
+ /* no own network yet but one network and station discovered. */
+ cp_net_t *other_net = cp_sta_mgr_add_avln (cp, snid, nid);
+ cp_sta_t *sta_1 = cp_sta_mgr_sta_add (cp, other_net, tei, mac);
+
+ test_begin (t, "one station and one network")
+ {
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (process_cc_discover_list_req, .peer = peer),
+ SCENARIO_EVENT (cp_msg_cc_discover_list_req_receive, .ok = true),
+ SCENARIO_EVENT (cp_msg_cc_discover_list_cnf_send_begin,
+ .nb_sta = 1, .nb_net = 1, .disc_ctx = &disc_ctx),
+ SCENARIO_EVENT (cp_msg_cc_discover_list_cnf_send_stations_begin,
+ .disc_ctxc = &disc_ctx),
+ SCENARIO_EVENT (cp_msg_cc_discover_list_cnf_send_station,
+ .mac_addr = mac,
+ .tei = tei,
+ .same_network =
+ CC_DISCOVER_LIST_NET_DIFFERENT_NETWORK,
+ .snid = snid,
+ .access = 0,
+ .cco_cap = 0,
+ .proxy_cap = 0,
+ .backup_cco_cap = 0,
+ .cco_status = 0,
+ .pco_status = 0,
+ .backup_cco_status = 0,
+ .signal_level = 0,
+ .average_ble = 0),
+ SCENARIO_EVENT (cp_msg_cc_discover_list_cnf_send_net_begin,
+ .disc_ctxc = &disc_ctx),
+ SCENARIO_EVENT (cp_msg_cc_discover_list_cnf_send_net,
+ .nid = nid,
+ .snid = snid,
+ .access = 0,
+ .hm = other_net->hm,
+ .numslots = other_net->avln_num_slots,
+ .coordinated_status =
+ CC_DISCOVER_LIST_COORD_NON_COORDINATED,
+ .offset = 0),
+ SCENARIO_EVENT (cp_msg_cc_discover_list_cnf_send_end),
+ SCENARIO_END
+ };
+ scenario_run (t, entries, &globals);
+ } test_end;
+
+ /* Our network is created. */
+ test_sta_action_create_our_net (&ctx, nid + 1, snid + 1);
+ cp_net_t *my_net = cp_sta_mgr_get_our_avln (cp);
+ cp_sta_own_data_set_mac_address (cp, mac + 1);
+ cp_sta_own_data_set_tei (cp, tei);
+
+ test_begin (t, "one station and one network")
+ {
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (process_cc_discover_list_req, .peer = peer),
+ SCENARIO_EVENT (cp_msg_cc_discover_list_req_receive, .ok = true),
+ SCENARIO_EVENT (cp_msg_cc_discover_list_cnf_send_begin,
+ .nb_sta = 1, .nb_net = 1, .disc_ctx = &disc_ctx),
+ SCENARIO_EVENT (cp_msg_cc_discover_list_cnf_send_stations_begin,
+ .disc_ctxc = &disc_ctx),
+ SCENARIO_EVENT (cp_msg_cc_discover_list_cnf_send_station,
+ .mac_addr = mac,
+ .tei = tei,
+ .same_network =
+ CC_DISCOVER_LIST_NET_DIFFERENT_NETWORK,
+ .snid = snid,
+ .access = 0,
+ .cco_cap = 0,
+ .proxy_cap = 0,
+ .backup_cco_cap = 0,
+ .cco_status = 0,
+ .pco_status = 0,
+ .backup_cco_status = 0,
+ .signal_level = 0,
+ .average_ble = 0),
+ SCENARIO_EVENT (cp_msg_cc_discover_list_cnf_send_net_begin,
+ .disc_ctxc = &disc_ctx),
+ SCENARIO_EVENT (cp_msg_cc_discover_list_cnf_send_net,
+ .nid = nid,
+ .snid = snid,
+ .access = 0,
+ .hm = other_net->hm,
+ .numslots = other_net->avln_num_slots,
+ .coordinated_status =
+ CC_DISCOVER_LIST_COORD_NON_COORDINATED,
+ .offset = 0),
+ SCENARIO_EVENT (cp_msg_cc_discover_list_cnf_send_end),
+ SCENARIO_END
+ };
+ scenario_run (t, entries, &globals);
+ } test_end;
+ /** One station is created in our network with no interval and
+ * default tmi = 0. */
+ cp_sta_t *sta_2 = cp_sta_mgr_sta_add (cp, my_net, tei + 2, mac + 2);
+ other_net->network_mode = MAC_NM_COORDINATED;
+ other_net->avln_slot_id = 2;
+ my_net->avln_slot_id = 1;
+ sta_t *sta2 = mac_store_sta_get (cp->mac_store, tei+2);
+ sta2->tx_tonemaps->intervals->intervals_nb = 0;
+ sta2->tx_tonemaps->default_tmi = PHY_MOD_ROBO;
+ cp->mac_config->tonemask_info.tonemap_robo[PHY_MOD_ROBO].ble = 0x12;
+
+ /** One station is created in our network with tei = 0. */
+ cp_sta_t *sta_5 = cp_sta_mgr_sta_add (cp, my_net, 0, mac + 5);
+
+ test_begin (t, "3 stations and one network")
+ {
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (process_cc_discover_list_req, .peer = peer),
+ SCENARIO_EVENT (cp_msg_cc_discover_list_req_receive, .ok = true),
+ SCENARIO_EVENT (cp_msg_cc_discover_list_cnf_send_begin,
+ .nb_sta = 3, .nb_net = 1, .disc_ctx = &disc_ctx),
+ SCENARIO_EVENT (cp_msg_cc_discover_list_cnf_send_stations_begin,
+ .disc_ctxc = &disc_ctx),
+ SCENARIO_EVENT (cp_msg_cc_discover_list_cnf_send_station,
+ .mac_addr = mac,
+ .tei = tei,
+ .same_network =
+ CC_DISCOVER_LIST_NET_DIFFERENT_NETWORK,
+ .snid = snid,
+ .access = 0,
+ .cco_cap = 0,
+ .proxy_cap = 0,
+ .backup_cco_cap = 0,
+ .cco_status = 0,
+ .pco_status = 0,
+ .backup_cco_status = 0,
+ .signal_level = 0,
+ .average_ble = 0),
+ SCENARIO_EVENT (cp_msg_cc_discover_list_cnf_send_station,
+ .mac_addr = mac+5,
+ .tei = 0,
+ .same_network =
+ CC_DISCOVER_LIST_NET_DIFFERENT_NETWORK,
+ .snid = snid+1,
+ .access = 0,
+ .cco_cap = 0,
+ .proxy_cap = 0,
+ .backup_cco_cap = 0,
+ .cco_status = 0,
+ .pco_status = 0,
+ .backup_cco_status = 0,
+ .signal_level = 0,
+ .average_ble = 0),
+ SCENARIO_EVENT (cp_msg_cc_discover_list_cnf_send_station,
+ .mac_addr = mac+2,
+ .tei = tei + 2,
+ .same_network = CC_DISCOVER_LIST_NET_SAME_NETWORK,
+ .snid = snid+1,
+ .access = 0,
+ .cco_cap = 0,
+ .proxy_cap = 0,
+ .backup_cco_cap = 0,
+ .cco_status = 0,
+ .pco_status = 0,
+ .backup_cco_status = 0,
+ .signal_level = 0,
+ .average_ble = 0x12),
+ SCENARIO_EVENT (cp_msg_cc_discover_list_cnf_send_net_begin,
+ .disc_ctxc = &disc_ctx),
+ SCENARIO_EVENT (cp_msg_cc_discover_list_cnf_send_net,
+ .nid = nid,
+ .snid = snid,
+ .access = 0,
+ .hm = other_net->hm,
+ .numslots = other_net->avln_num_slots,
+ .coordinated_status =
+ CC_DISCOVER_LIST_COORD_COORDINATED_GROUP_UNKNOWN,
+ .offset = 0),
+ SCENARIO_EVENT (cp_msg_cc_discover_list_cnf_send_end),
+ SCENARIO_END
+ };
+ scenario_run (t, entries, &globals);
+ } test_end;
+
+ /** A new station is created in our network with no interval and
+ * negociated default tmi. */
+ cp_sta_t *sta_3 = cp_sta_mgr_sta_add (cp, my_net, tei + 3, mac + 3);
+
+ sta_t *sta3 = mac_store_sta_get (cp->mac_store, tei+3);
+ sta3->tx_tonemaps->intervals->intervals_nb = 0;
+ sta3->tx_tonemaps->default_tmi = TONEMAP_INDEX_NEGOTIATED_FIRST;
+ sta3->tx_tonemaps->tm[TONEMAP_INDEX_NEGOTIATED_FIRST] = tonemap_alloc ();
+ sta3->tx_tonemaps->tm[TONEMAP_INDEX_NEGOTIATED_FIRST]->ble = 0x23;
+
+ /** A new station is created in our network with 6 intervals . */
+ cp_sta_t *sta_4 = cp_sta_mgr_sta_add (cp, my_net, tei + 4, mac + 4);
+
+ sta_t *sta4 = mac_store_sta_get (cp->mac_store, tei+4);
+ sta4->tx_tonemaps->intervals->intervals_nb = 6;
+ sta4->tx_tonemaps->default_tmi = TONEMAP_INDEX_NEGOTIATED_FIRST;
+ sta4->tx_tonemaps->tm[TONEMAP_INDEX_NEGOTIATED_FIRST] = tonemap_alloc ();
+ sta4->tx_tonemaps->tm[TONEMAP_INDEX_NEGOTIATED_FIRST]->ble = 0xFF;
+ sta4->tx_tonemaps->tm[TONEMAP_INDEX_NEGOTIATED_FIRST + 1] = tonemap_alloc ();
+ sta4->tx_tonemaps->tm[TONEMAP_INDEX_NEGOTIATED_FIRST + 1]->ble = 0x00;
+ sta4->tx_tonemaps->tm[TONEMAP_INDEX_NEGOTIATED_FIRST + 2] = tonemap_alloc ();
+ sta4->tx_tonemaps->tm[TONEMAP_INDEX_NEGOTIATED_FIRST + 2]->ble = 0x08;
+ sta4->tx_tonemaps->tm[TONEMAP_INDEX_NEGOTIATED_FIRST + 3] = tonemap_alloc ();
+ sta4->tx_tonemaps->tm[TONEMAP_INDEX_NEGOTIATED_FIRST + 3]->ble = 0x0F;
+ /* The 3rd and 6th intervals have no tonemap. */
+
+ sta4->tx_tonemaps->intervals->interval[0].tmi =
+ TONEMAP_INDEX_NEGOTIATED_FIRST;
+ sta4->tx_tonemaps->intervals->interval[0].end_offset_atu = 10;
+ sta4->tx_tonemaps->intervals->interval[1].tmi =
+ TONEMAP_INDEX_NEGOTIATED_FIRST + 1;
+ sta4->tx_tonemaps->intervals->interval[1].end_offset_atu = 100;
+ sta4->tx_tonemaps->intervals->interval[2].tmi = 0xFF;
+ sta4->tx_tonemaps->intervals->interval[2].end_offset_atu = 500;
+ sta4->tx_tonemaps->intervals->interval[3].tmi =
+ TONEMAP_INDEX_NEGOTIATED_FIRST + 2;
+ sta4->tx_tonemaps->intervals->interval[3].end_offset_atu = 800;
+ sta4->tx_tonemaps->intervals->interval[4].tmi =
+ TONEMAP_INDEX_NEGOTIATED_FIRST + 3;
+ sta4->tx_tonemaps->intervals->interval[4].end_offset_atu = 900;
+ sta4->tx_tonemaps->intervals->interval[5].tmi =
+ TONEMAP_INDEX_NEGOTIATED_FIRST + 4;
+ sta4->tx_tonemaps->intervals->interval[5].end_offset_atu = 950;
+
+ test_begin (t, "5 stations and one network")
+ {
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (process_cc_discover_list_req, .peer = peer),
+ SCENARIO_EVENT (cp_msg_cc_discover_list_req_receive, .ok = true),
+ SCENARIO_EVENT (cp_msg_cc_discover_list_cnf_send_begin,
+ .nb_sta = 5, .nb_net = 1, .disc_ctx = &disc_ctx),
+ SCENARIO_EVENT (cp_msg_cc_discover_list_cnf_send_stations_begin,
+ .disc_ctxc = &disc_ctx),
+ SCENARIO_EVENT (cp_msg_cc_discover_list_cnf_send_station,
+ .mac_addr = mac,
+ .tei = tei,
+ .same_network =
+ CC_DISCOVER_LIST_NET_DIFFERENT_NETWORK,
+ .snid = snid,
+ .access = 0,
+ .cco_cap = 0,
+ .proxy_cap = 0,
+ .backup_cco_cap = 0,
+ .cco_status = 0,
+ .pco_status = 0,
+ .backup_cco_status = 0,
+ .signal_level = 0,
+ .average_ble = 0),
+ SCENARIO_EVENT (cp_msg_cc_discover_list_cnf_send_station,
+ .mac_addr = mac+5,
+ .tei = 0,
+ .same_network =
+ CC_DISCOVER_LIST_NET_DIFFERENT_NETWORK,
+ .snid = snid+1,
+ .access = 0,
+ .cco_cap = 0,
+ .proxy_cap = 0,
+ .backup_cco_cap = 0,
+ .cco_status = 0,
+ .pco_status = 0,
+ .backup_cco_status = 0,
+ .signal_level = 0,
+ .average_ble = 0),
+ SCENARIO_EVENT (cp_msg_cc_discover_list_cnf_send_station,
+ .mac_addr = mac+2,
+ .tei = tei+2,
+ .same_network = CC_DISCOVER_LIST_NET_SAME_NETWORK,
+ .snid = snid+1,
+ .access = 0,
+ .cco_cap = 0,
+ .proxy_cap = 0,
+ .backup_cco_cap = 0,
+ .cco_status = 0,
+ .pco_status = 0,
+ .backup_cco_status = 0,
+ .signal_level = 0,
+ .average_ble = 0x12),
+ SCENARIO_EVENT (cp_msg_cc_discover_list_cnf_send_station,
+ .mac_addr = mac+3,
+ .tei = tei+3,
+ .same_network = CC_DISCOVER_LIST_NET_SAME_NETWORK,
+ .snid = snid+1,
+ .access = 0,
+ .cco_cap = 0,
+ .proxy_cap = 0,
+ .backup_cco_cap = 0,
+ .cco_status = 0,
+ .pco_status = 0,
+ .backup_cco_status = 0,
+ .signal_level = 0,
+ .average_ble = 0x23),
+ SCENARIO_EVENT (cp_msg_cc_discover_list_cnf_send_station,
+ .mac_addr = mac+4,
+ .tei = tei+4,
+ .same_network = CC_DISCOVER_LIST_NET_SAME_NETWORK,
+ .snid = snid+1,
+ .access = 0,
+ .cco_cap = 0,
+ .proxy_cap = 0,
+ .backup_cco_cap = 0,
+ .cco_status = 0,
+ .pco_status = 0,
+ .backup_cco_status = 0,
+ .signal_level = 0,
+ .average_ble = 0x05),
+ SCENARIO_EVENT (cp_msg_cc_discover_list_cnf_send_net_begin,
+ .disc_ctxc = &disc_ctx),
+ SCENARIO_EVENT (cp_msg_cc_discover_list_cnf_send_net,
+ .nid = nid,
+ .snid = snid,
+ .access = 0,
+ .hm = other_net->hm,
+ .numslots = other_net->avln_num_slots,
+ .coordinated_status =
+ CC_DISCOVER_LIST_COORD_COORDINATED_GROUP_UNKNOWN,
+ .offset = 0),
+ SCENARIO_EVENT (cp_msg_cc_discover_list_cnf_send_end),
+ SCENARIO_END
+ };
+ scenario_run (t, entries, &globals);
+ } test_end;
+
+ /* Remove the tonemaps. */
+ tonemap_release_list_t tm_release_list;
+ tonemap_release_list_init (&tm_release_list);
+ tonemap_release (sta3->tx_tonemaps, TONEMAP_INDEX_NEGOTIATED_FIRST, &tm_release_list);
+ tonemap_release (sta4->tx_tonemaps, TONEMAP_INDEX_NEGOTIATED_FIRST, &tm_release_list);
+ tonemap_release (sta4->tx_tonemaps, TONEMAP_INDEX_NEGOTIATED_FIRST+1, &tm_release_list);
+ tonemap_release (sta4->tx_tonemaps, TONEMAP_INDEX_NEGOTIATED_FIRST+2, &tm_release_list);
+ tonemap_release (sta4->tx_tonemaps, TONEMAP_INDEX_NEGOTIATED_FIRST+3, &tm_release_list);
+ while (!tonemap_release_list_clean (&tm_release_list))
+ ;
+
+ test_begin (t, "Invalid tonemaps")
+ {
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (process_cc_discover_list_req, .peer = peer),
+ SCENARIO_EVENT (cp_msg_cc_discover_list_req_receive, .ok = true),
+ SCENARIO_EVENT (cp_msg_cc_discover_list_cnf_send_begin,
+ .nb_sta = 5, .nb_net = 1, .disc_ctx = &disc_ctx),
+ SCENARIO_EVENT (cp_msg_cc_discover_list_cnf_send_stations_begin,
+ .disc_ctxc = &disc_ctx),
+ SCENARIO_EVENT (cp_msg_cc_discover_list_cnf_send_station,
+ .mac_addr = mac,
+ .tei = tei,
+ .same_network =
+ CC_DISCOVER_LIST_NET_DIFFERENT_NETWORK,
+ .snid = snid,
+ .access = 0,
+ .cco_cap = 0,
+ .proxy_cap = 0,
+ .backup_cco_cap = 0,
+ .cco_status = 0,
+ .pco_status = 0,
+ .backup_cco_status = 0,
+ .signal_level = 0,
+ .average_ble = 0),
+ SCENARIO_EVENT (cp_msg_cc_discover_list_cnf_send_station,
+ .mac_addr = mac+5,
+ .tei = 0,
+ .same_network =
+ CC_DISCOVER_LIST_NET_DIFFERENT_NETWORK,
+ .snid = snid+1,
+ .access = 0,
+ .cco_cap = 0,
+ .proxy_cap = 0,
+ .backup_cco_cap = 0,
+ .cco_status = 0,
+ .pco_status = 0,
+ .backup_cco_status = 0,
+ .signal_level = 0,
+ .average_ble = 0),
+ SCENARIO_EVENT (cp_msg_cc_discover_list_cnf_send_station,
+ .mac_addr = mac+2,
+ .tei = tei+2,
+ .same_network = CC_DISCOVER_LIST_NET_SAME_NETWORK,
+ .snid = snid+1,
+ .access = 0,
+ .cco_cap = 0,
+ .proxy_cap = 0,
+ .backup_cco_cap = 0,
+ .cco_status = 0,
+ .pco_status = 0,
+ .backup_cco_status = 0,
+ .signal_level = 0,
+ .average_ble = 0x12),
+ SCENARIO_EVENT (cp_msg_cc_discover_list_cnf_send_station,
+ .mac_addr = mac+3,
+ .tei = tei+3,
+ .same_network = CC_DISCOVER_LIST_NET_SAME_NETWORK,
+ .snid = snid+1,
+ .access = 0,
+ .cco_cap = 0,
+ .proxy_cap = 0,
+ .backup_cco_cap = 0,
+ .cco_status = 0,
+ .pco_status = 0,
+ .backup_cco_status = 0,
+ .signal_level = 0,
+ .average_ble = 0),
+ SCENARIO_EVENT (cp_msg_cc_discover_list_cnf_send_station,
+ .mac_addr = mac+4,
+ .tei = tei+4,
+ .same_network = CC_DISCOVER_LIST_NET_SAME_NETWORK,
+ .snid = snid+1,
+ .access = 0,
+ .cco_cap = 0,
+ .proxy_cap = 0,
+ .backup_cco_cap = 0,
+ .cco_status = 0,
+ .pco_status = 0,
+ .backup_cco_status = 0,
+ .signal_level = 0,
+ .average_ble = 0),
+ SCENARIO_EVENT (cp_msg_cc_discover_list_cnf_send_net_begin,
+ .disc_ctxc = &disc_ctx),
+ SCENARIO_EVENT (cp_msg_cc_discover_list_cnf_send_net,
+ .nid = nid,
+ .snid = snid,
+ .access = 0,
+ .hm = other_net->hm,
+ .numslots = other_net->avln_num_slots,
+ .coordinated_status =
+ CC_DISCOVER_LIST_COORD_COORDINATED_GROUP_UNKNOWN,
+ .offset = 0),
+ SCENARIO_EVENT (cp_msg_cc_discover_list_cnf_send_end),
+ SCENARIO_END
+ };
+ scenario_run (t, entries, &globals);
+ } test_end;
+
+ /* Cleanup. */
+ blk_release (sta4);
+ blk_release (sta3);
+ blk_release (sta2);
+ slab_release (sta_1);
+ cp_sta_mgr_sta_remove_from_mac (cp, mac);
+ slab_release (sta_2);
+ cp_sta_mgr_sta_remove_from_mac (cp, mac + 2);
+ slab_release (sta_3);
+ cp_sta_mgr_sta_remove_from_mac (cp, mac + 3);
+ slab_release (sta_4);
+ cp_sta_mgr_sta_remove_from_mac (cp, mac + 4);
+ slab_release (sta_5);
+ cp_sta_mgr_sta_remove_from_mac (cp, mac + 5);
+
+ test_sta_action_uninit (&ctx);
+}
+
+void
+misc_relay_test_case (test_t t)
+{
+ test_sta_action_t ctx;
+ test_sta_action_init (&ctx);
+ scenario_globals_t globals = {
+ .cp = &ctx.cp,
+ };
+ cp_t *cp = &ctx.cp;
+ const cp_nid_t nid = 0x111111111111ull;
+ cp_sta_own_data_set_tei (cp, 2);
+ test_sta_action_create_our_net (&ctx, nid, 1);
+ cp_net_t *our_net = cp_sta_mgr_get_our_avln (cp);
+ mac_t cco_mac = 0x111111111111ull;
+ cp_tei_t cco_tei = 1;
+ cp_sta_t *cco = cp_sta_mgr_sta_add (cp, our_net, cco_tei, cco_mac);
+ cp_net_set_cco (cp, our_net, cco_tei);
+ slab_release (cco);
+ cp_mme_peer_t unapeer = CP_MME_PEER (0x000000000001ull, 0);
+ cp_mme_peer_t apeer = CP_MME_PEER (0x333333333333ull, 3);
+ test_case_begin (t, "relay");
+ test_begin (t, "error")
+ {
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (process_cc_relay_req, .peer = unapeer),
+ SCENARIO_EVENT (cp_msg_cc_relay_req_receive, .ok = false),
+ SCENARIO_END
+ };
+ scenario_run (t, entries, &globals);
+ } test_end;
+ test_begin (t, "encrypted payload")
+ {
+ scenario_entry_t entries[] = {
+ /* Unassociated. */
+ SCENARIO_ACTION (process_cc_relay_req, .peer = unapeer),
+ SCENARIO_EVENT (cp_msg_cc_relay_req_receive, .ok = true,
+ .mac_fa = cco_mac, .ftei = cco_tei,
+ .length = 1234,
+ .mmtype = CM_ENCRYPTED_PAYLOAD_IND),
+ SCENARIO_EVENT (cp_msg_cc_relay_ind_send,
+ .mac_fa = cco_mac, .ftei = MAC_TEI_BCAST,
+ .osa = unapeer.mac, .stei = unapeer.tei,
+ .length = 1234),
+ /* Associated. */
+ SCENARIO_ACTION (process_cc_relay_req, .peer = apeer),
+ SCENARIO_EVENT (cp_msg_cc_relay_req_receive, .ok = true,
+ .mac_fa = cco_mac, .ftei = cco_tei,
+ .length = 1234,
+ .mmtype = CM_ENCRYPTED_PAYLOAD_IND),
+ SCENARIO_EVENT (cp_msg_cc_relay_ind_send,
+ .mac_fa = cco_mac, .ftei = MAC_TEI_BCAST,
+ .osa = apeer.mac, .stei = apeer.tei,
+ .length = 1234),
+ /* Authenticated. */
+ SCENARIO_ACTION (process_cc_relay_req, .peer = apeer,
+ .encrypt = true),
+ SCENARIO_EVENT (cp_msg_cc_relay_req_receive, .ok = true,
+ .mac_fa = cco_mac, .ftei = cco_tei,
+ .length = 1234,
+ .mmtype = CM_ENCRYPTED_PAYLOAD_IND),
+ SCENARIO_EVENT (cp_msg_cc_relay_ind_send,
+ .mac_fa = cco_mac, .ftei = MAC_TEI_BCAST,
+ .osa = apeer.mac, .stei = apeer.tei,
+ .length = 1234),
+ SCENARIO_END
+ };
+ scenario_run (t, entries, &globals);
+ } test_end;
+ test_begin (t, "assoc.req")
+ {
+ scenario_entry_t entries[] = {
+ /* Unassociated. */
+ SCENARIO_ACTION (process_cc_relay_req, .peer = unapeer),
+ SCENARIO_EVENT (cp_msg_cc_relay_req_receive, .ok = true,
+ .mac_fa = cco_mac, .ftei = cco_tei,
+ .length = 1234,
+ .mmtype = CC_ASSOC_REQ),
+ SCENARIO_EVENT (cp_msg_cc_relay_ind_send,
+ .mac_fa = cco_mac, .ftei = cco_tei,
+ .osa = unapeer.mac, .stei = unapeer.tei,
+ .length = 1234),
+ SCENARIO_ACTION (process_cc_relay_req, .peer = unapeer),
+ SCENARIO_EVENT (cp_msg_cc_relay_req_receive, .ok = true,
+ .mac_fa = MAC_BROADCAST, .ftei = MAC_TEI_BCAST,
+ .length = 1234,
+ .mmtype = CC_ASSOC_REQ),
+ SCENARIO_EVENT (cp_msg_cc_relay_ind_send,
+ .mac_fa = cco_mac, .ftei = cco_tei,
+ .osa = unapeer.mac, .stei = unapeer.tei,
+ .length = 1234),
+ SCENARIO_ACTION (process_cc_relay_req, .peer = unapeer),
+ SCENARIO_EVENT (cp_msg_cc_relay_req_receive, .ok = true,
+ .mac_fa = MAC_BROADCAST, .ftei = 1,
+ .length = 1234,
+ .mmtype = CC_ASSOC_REQ),
+ SCENARIO_EVENT (cp_msg_cc_relay_ind_send,
+ .mac_fa = MAC_BROADCAST, .ftei = 1,
+ .osa = unapeer.mac, .stei = unapeer.tei,
+ .length = 1234),
+ /* Associated. */
+ SCENARIO_ACTION (process_cc_relay_req, .peer = apeer),
+ SCENARIO_EVENT (cp_msg_cc_relay_req_receive, .ok = true,
+ .mac_fa = cco_mac, .ftei = cco_tei,
+ .length = 1234,
+ .mmtype = CC_ASSOC_REQ),
+ SCENARIO_EVENT (cp_msg_cc_relay_ind_send,
+ .mac_fa = cco_mac, .ftei = cco_tei,
+ .osa = apeer.mac, .stei = apeer.tei,
+ .length = 1234),
+ SCENARIO_ACTION (process_cc_relay_req, .peer = apeer),
+ SCENARIO_EVENT (cp_msg_cc_relay_req_receive, .ok = true,
+ .mac_fa = MAC_BROADCAST, .ftei = MAC_TEI_BCAST,
+ .length = 1234,
+ .mmtype = CC_ASSOC_REQ),
+ SCENARIO_EVENT (cp_msg_cc_relay_ind_send,
+ .mac_fa = MAC_BROADCAST, .ftei = MAC_TEI_BCAST,
+ .osa = apeer.mac, .stei = apeer.tei,
+ .length = 1234),
+ SCENARIO_END
+ };
+ scenario_run (t, entries, &globals);
+ } test_end;
+ test_begin (t, "unassociated ok")
+ {
+ scenario_entry_t entries[] = {
+ /* Unassociated. */
+ SCENARIO_ACTION (process_cc_relay_req, .peer = unapeer),
+ SCENARIO_EVENT (cp_msg_cc_relay_req_receive, .ok = true,
+ .mac_fa = cco_mac, .ftei = cco_tei,
+ .length = 1234,
+ .mmtype = CC_WHO_RU_REQ),
+ SCENARIO_EVENT (cp_msg_cc_relay_ind_send,
+ .mac_fa = cco_mac, .ftei = cco_tei,
+ .osa = unapeer.mac, .stei = unapeer.tei,
+ .length = 1234),
+ /* Associated. */
+ SCENARIO_ACTION (process_cc_relay_req, .peer = apeer),
+ SCENARIO_EVENT (cp_msg_cc_relay_req_receive, .ok = true,
+ .mac_fa = cco_mac, .ftei = cco_tei,
+ .length = 1234,
+ .mmtype = CC_WHO_RU_REQ),
+ SCENARIO_EVENT (cp_msg_cc_relay_ind_send,
+ .mac_fa = cco_mac, .ftei = cco_tei,
+ .osa = apeer.mac, .stei = apeer.tei,
+ .length = 1234),
+ /* Authenticated. */
+ SCENARIO_ACTION (process_cc_relay_req, .peer = apeer,
+ .encrypt = true),
+ SCENARIO_EVENT (cp_msg_cc_relay_req_receive, .ok = true,
+ .mac_fa = cco_mac, .ftei = cco_tei,
+ .length = 1234,
+ .mmtype = CC_WHO_RU_REQ),
+ SCENARIO_EVENT (cp_msg_cc_relay_ind_send,
+ .mac_fa = cco_mac, .ftei = cco_tei,
+ .osa = apeer.mac, .stei = apeer.tei,
+ .length = 1234),
+ SCENARIO_END
+ };
+ scenario_run (t, entries, &globals);
+ } test_end;
+ test_begin (t, "associated ok")
+ {
+ scenario_entry_t entries[] = {
+ /* Unassociated. */
+ SCENARIO_ACTION (process_cc_relay_req, .peer = unapeer),
+ SCENARIO_EVENT (cp_msg_cc_relay_req_receive, .ok = true,
+ .mac_fa = cco_mac, .ftei = cco_tei,
+ .length = 1234,
+ .mmtype = CM_SET_KEY_REQ),
+ /* Associated. */
+ SCENARIO_ACTION (process_cc_relay_req, .peer = apeer),
+ SCENARIO_EVENT (cp_msg_cc_relay_req_receive, .ok = true,
+ .mac_fa = cco_mac, .ftei = cco_tei,
+ .length = 1234,
+ .mmtype = CM_SET_KEY_REQ),
+ SCENARIO_EVENT (cp_msg_cc_relay_ind_send,
+ .mac_fa = cco_mac, .ftei = cco_tei,
+ .osa = apeer.mac, .stei = apeer.tei,
+ .length = 1234),
+ /* Authenticated. */
+ SCENARIO_ACTION (process_cc_relay_req, .peer = apeer,
+ .encrypt = true),
+ SCENARIO_EVENT (cp_msg_cc_relay_req_receive, .ok = true,
+ .mac_fa = cco_mac, .ftei = cco_tei,
+ .length = 1234,
+ .mmtype = CM_SET_KEY_REQ),
+ SCENARIO_EVENT (cp_msg_cc_relay_ind_send,
+ .mac_fa = cco_mac, .ftei = cco_tei,
+ .osa = apeer.mac, .stei = apeer.tei,
+ .length = 1234),
+ SCENARIO_END
+ };
+ scenario_run (t, entries, &globals);
+ } test_end;
+ test_begin (t, "authenticated ok")
+ {
+ scenario_entry_t entries[] = {
+ /* Unassociated. */
+ SCENARIO_ACTION (process_cc_relay_req, .peer = unapeer),
+ SCENARIO_EVENT (cp_msg_cc_relay_req_receive, .ok = true,
+ .mac_fa = cco_mac, .ftei = cco_tei,
+ .length = 1234,
+ .mmtype = CC_HANDOVER_REQ),
+ /* Associated. */
+ SCENARIO_ACTION (process_cc_relay_req, .peer = apeer),
+ SCENARIO_EVENT (cp_msg_cc_relay_req_receive, .ok = true,
+ .mac_fa = cco_mac, .ftei = cco_tei,
+ .length = 1234,
+ .mmtype = CC_HANDOVER_REQ),
+ /* Authenticated. */
+ SCENARIO_ACTION (process_cc_relay_req, .peer = apeer,
+ .encrypt = true),
+ SCENARIO_EVENT (cp_msg_cc_relay_req_receive, .ok = true,
+ .mac_fa = cco_mac, .ftei = cco_tei,
+ .length = 1234,
+ .mmtype = CC_HANDOVER_REQ),
+ SCENARIO_EVENT (cp_msg_cc_relay_ind_send,
+ .mac_fa = cco_mac, .ftei = cco_tei,
+ .osa = apeer.mac, .stei = apeer.tei,
+ .length = 1234),
+ SCENARIO_END
+ };
+ scenario_run (t, entries, &globals);
+ } test_end;
+ /* Cleanup. */
+ test_sta_action_uninit (&ctx);
+}
+
+void
+misc_hfid_test_case (test_t t)
+{
+ test_sta_action_t ctx;
+ test_sta_action_init (&ctx);
+ cp_av_sta_action_init (&ctx.cp);
+
+ scenario_globals_t globals = {
+ .cp = &ctx.cp,
+ };
+ cp_t *cp = &ctx.cp;
+ cp_mme_peer_t peer = CP_MME_PEER (0x112233445566ull, 2);
+ cp_mme_peer_t drvpeer = CP_MME_PEER (0x112233445566ull, MAC_TEI_FOREIGN);
+ const cp_nid_t nid = 0x111111111111ull;
+ const mac_t mac = 0x111111111111ull;
+ cp_mme_peer_t hlepeer = CP_MME_PEER (mac, MAC_TEI_FOREIGN);
+ cp_sta_own_data_set_mac_address (cp, mac);
+ char *manufacturer_hfid = "MANUFACTURER";
+ cp_sta_own_data_set_hfid_manufacturer (cp, manufacturer_hfid);
+ char *user_hfid = "USER";
+ cp_sta_own_data_set_hfid_user (cp, user_hfid);
+ char *avln_hfid = "AVLN";
+ cp_sta_own_data_set_hfid_avln (cp, avln_hfid);
+ cp_sta_own_data_set_tei (cp, 1);
+ test_sta_action_create_our_net (&ctx, nid, 12);
+ cp_sta_own_data_t *own_data = cp_sta_mgr_get_sta_own_data (cp);
+
+ test_case_begin (t, "hfid");
+
+ /* Check reply parameters at init. */
+ test_begin (t, "avln hfid reply parameters init")
+ {
+ test_fail_unless (cp->sta_action.cm_hfid_reply_peer.mac == 0);
+ } test_end;
+
+ /* Check get avln hfid when we are cco. */
+ cp_sta_own_data_set_cco_status (cp, true);
+
+ test_begin (t, "get avln hfid ok when cco")
+ {
+ scenario_entry_t entries[] = {
+ /* User HFID. */
+ SCENARIO_ACTION (process_cm_hfid_req, .peer = peer),
+ SCENARIO_EVENT (
+ cp_msg_cm_hfid_req_receive, .ok = true,
+ .req_type = CM_HFID_REQ_REQTYPE_PROVIDE_NETWORK_HFID,
+ .nid = nid,
+ ),
+ SCENARIO_EVENT (
+ cp_msg_cm_hfid_cnf_send, .peer = peer,
+ .restype = CM_HFID_CNF_RESTYPE_PROVIDE_NETWORK_HFID,
+ .hfid = avln_hfid,
+ ),
+ SCENARIO_END
+ };
+ scenario_run (t, entries, &globals);
+ /* Check HFID values. */
+ test_fail_unless (strcmp (own_data->hfid_avln, avln_hfid) == 0);
+ /* Check reply parameters in cp_sta_action context. */
+ test_fail_unless (cp->sta_action.cm_hfid_reply_peer.mac == 0);
+ } test_end;
+
+ cp_sta_own_data_set_cco_status (cp, false);
+
+ /** Configure the cco. */
+ cp_net_t *our_net = cp_sta_mgr_get_our_avln (cp);
+ mac_t cco_mac = 0x111111111112ull;
+ cp_tei_t cco_tei = 2;
+ cp_sta_t *cco = cp_sta_mgr_sta_add (cp, our_net, cco_tei, cco_mac);
+ cp_net_set_cco (cp, our_net, cco_tei);
+ cp_mme_peer_t cco_peer;
+ cp_mme_peer_t wrong_peer;
+
+ cco_peer.mac = cco_mac;
+ cco_peer.tei = cco_tei;
+ cco_peer.eth_type = HPAV_MTYPE_MME;
+ cco_peer.vlan_tci = 0;
+
+ wrong_peer.mac = cco_mac + 1;
+ wrong_peer.tei = cco_tei + 1;
+ wrong_peer.eth_type = HPAV_MTYPE_MME;
+ wrong_peer.vlan_tci = 0;
+
+ slab_release (cco);
+
+ test_begin (t, "get ok")
+ {
+ scenario_entry_t entries[] = {
+ /* Manufacturer HFID. */
+ SCENARIO_ACTION (process_cm_hfid_req, .peer = peer),
+ SCENARIO_EVENT (
+ cp_msg_cm_hfid_req_receive, .ok = true,
+ .req_type = CM_HFID_REQ_REQTYPE_PROVIDE_MANUFACTURER_SET_HFID,
+ ),
+ SCENARIO_EVENT (
+ cp_msg_cm_hfid_cnf_send, .peer = peer,
+ .restype = CM_HFID_CNF_RESTYPE_PROVIDE_MANUFACTURER_SET_HFID,
+ .hfid = manufacturer_hfid,
+ ),
+ /* User HFID. */
+ SCENARIO_ACTION (process_cm_hfid_req, .peer = peer),
+ SCENARIO_EVENT (
+ cp_msg_cm_hfid_req_receive, .ok = true,
+ .req_type = CM_HFID_REQ_REQTYPE_PROVIDE_USER_SET_HFID,
+ ),
+ SCENARIO_EVENT (
+ cp_msg_cm_hfid_cnf_send, .peer = peer,
+ .restype = CM_HFID_CNF_RESTYPE_PROVIDE_USER_SET_HFID,
+ .hfid = user_hfid,
+ ),
+ /* AVLN HFID. */
+ SCENARIO_ACTION (process_cm_hfid_req, .peer = peer),
+ SCENARIO_EVENT (
+ cp_msg_cm_hfid_req_receive, .ok = true,
+ .req_type = CM_HFID_REQ_REQTYPE_PROVIDE_NETWORK_HFID,
+ .nid = nid,
+ ),
+ SCENARIO_EVENT (cp_msg_cc_who_ru_req_send, .peer = cco_peer,
+ .nid = nid,),
+ SCENARIO_EVENT (cp_fsm_event_bare_new,
+ .type = CP_FSM_EVENT_TYPE_whoru_timeout),
+ SCENARIO_EVENT (cp_sta_core_gen_timed_event,
+ .delay_min_ms = CP_TIMEOUT_MS,
+ .delay_max_ms = CP_TIMEOUT_MS),
+ SCENARIO_ACTION (process_cc_who_ru_cnf, .peer = cco_peer),
+ SCENARIO_EVENT (cp_sta_core_stop_timed_or_cyclic_event),
+ SCENARIO_EVENT (
+ cp_msg_cc_who_ru_cnf_receive, .ok = true,
+ .nid = nid,
+ .cco_mac = cco_mac,
+ .avln_hfid = avln_hfid,
+ ),
+ SCENARIO_EVENT (
+ cp_msg_cm_hfid_cnf_send, .peer = peer,
+ .restype = CM_HFID_CNF_RESTYPE_PROVIDE_NETWORK_HFID,
+ .hfid = avln_hfid,
+ ),
+ /* Get Who_ru.cnf from the wrong peer. */
+ SCENARIO_ACTION (process_cm_hfid_req, .peer = peer),
+ SCENARIO_EVENT (
+ cp_msg_cm_hfid_req_receive, .ok = true,
+ .req_type = CM_HFID_REQ_REQTYPE_PROVIDE_NETWORK_HFID,
+ .nid = nid,
+ ),
+ SCENARIO_EVENT (cp_msg_cc_who_ru_req_send, .peer = cco_peer,
+ .nid = nid,),
+ SCENARIO_EVENT (cp_fsm_event_bare_new,
+ .type = CP_FSM_EVENT_TYPE_whoru_timeout),
+ SCENARIO_EVENT (cp_sta_core_gen_timed_event,
+ .delay_min_ms = CP_TIMEOUT_MS,
+ .delay_max_ms = CP_TIMEOUT_MS),
+ SCENARIO_ACTION (process_cc_who_ru_cnf, .peer = wrong_peer),
+ SCENARIO_ACTION (process_cc_who_ru_cnf, .peer = cco_peer),
+ SCENARIO_EVENT (cp_sta_core_stop_timed_or_cyclic_event),
+ SCENARIO_EVENT (
+ cp_msg_cc_who_ru_cnf_receive, .ok = true,
+ .nid = nid,
+ .cco_mac = cco_mac,
+ .avln_hfid = avln_hfid,
+ ),
+ SCENARIO_EVENT (
+ cp_msg_cm_hfid_cnf_send, .peer = peer,
+ .restype = CM_HFID_CNF_RESTYPE_PROVIDE_NETWORK_HFID,
+ .hfid = avln_hfid,
+ ),
+ SCENARIO_END
+ };
+ scenario_run (t, entries, &globals);
+ /* Check HFID values. */
+ test_fail_unless (strcmp (own_data->hfid_avln, avln_hfid) == 0);
+ test_fail_unless (strcmp (own_data->hfid_user, user_hfid) == 0);
+ test_fail_unless (strcmp (own_data->hfid_manufacturer,
+ manufacturer_hfid) == 0);
+ /* Check reply parameters in cp_sta_action context. */
+ test_fail_unless (cp->sta_action.cm_hfid_reply_peer.mac == 0);
+ } test_end;
+ test_begin (t, "get error")
+ {
+ scenario_entry_t entries[] = {
+ /* Bad MME. */
+ SCENARIO_ACTION (process_cm_hfid_req, .peer = peer),
+ SCENARIO_EVENT (cp_msg_cm_hfid_req_receive, .ok = false),
+ /* Bad NID. */
+ SCENARIO_ACTION (process_cm_hfid_req, .peer = peer),
+ SCENARIO_EVENT (
+ cp_msg_cm_hfid_req_receive, .ok = true,
+ .req_type = CM_HFID_REQ_REQTYPE_PROVIDE_NETWORK_HFID,
+ .nid = nid + 1,
+ ),
+ SCENARIO_EVENT (
+ cp_msg_cm_hfid_cnf_send, .peer = peer,
+ .restype = CM_HFID_CNF_RESTYPE_FAILURE,
+ .hfid = "",
+ ),
+ /* WHO_RU timeout */
+ SCENARIO_ACTION (process_cm_hfid_req, .peer = peer),
+ SCENARIO_EVENT (
+ cp_msg_cm_hfid_req_receive, .ok = true,
+ .req_type = CM_HFID_REQ_REQTYPE_PROVIDE_NETWORK_HFID,
+ .nid = nid,),
+ SCENARIO_EVENT (cp_msg_cc_who_ru_req_send, .peer = cco_peer,
+ .nid = nid,),
+ SCENARIO_EVENT (cp_fsm_event_bare_new,
+ .type = CP_FSM_EVENT_TYPE_whoru_timeout),
+ SCENARIO_EVENT (cp_sta_core_gen_timed_event,
+ .delay_min_ms = CP_TIMEOUT_MS,
+ .delay_max_ms = CP_TIMEOUT_MS),
+ SCENARIO_ACTION (whoru_timeout_process),
+ SCENARIO_EVENT (cp_sta_core_stop_timed_or_cyclic_event),
+ SCENARIO_EVENT (
+ cp_msg_cm_hfid_cnf_send, .peer = peer,
+ .restype = CM_HFID_CNF_RESTYPE_FAILURE,
+ .hfid = "",),
+ /* Avln request while previous one is still in progress. */
+ SCENARIO_ACTION (process_cm_hfid_req, .peer = peer),
+ SCENARIO_EVENT (
+ cp_msg_cm_hfid_req_receive, .ok = true,
+ .req_type = CM_HFID_REQ_REQTYPE_PROVIDE_NETWORK_HFID,
+ .nid = nid,),
+ SCENARIO_EVENT (cp_msg_cc_who_ru_req_send, .peer = cco_peer,
+ .nid = nid,),
+ SCENARIO_EVENT (cp_fsm_event_bare_new,
+ .type = CP_FSM_EVENT_TYPE_whoru_timeout),
+ SCENARIO_EVENT (cp_sta_core_gen_timed_event,
+ .delay_min_ms = CP_TIMEOUT_MS,
+ .delay_max_ms = CP_TIMEOUT_MS),
+ SCENARIO_ACTION (process_cm_hfid_req, .peer = peer),
+ SCENARIO_EVENT (
+ cp_msg_cm_hfid_req_receive, .ok = true,
+ .req_type = CM_HFID_REQ_REQTYPE_PROVIDE_NETWORK_HFID,
+ .nid = nid + 1,),
+ SCENARIO_EVENT (
+ cp_msg_cm_hfid_cnf_send, .peer = peer,
+ .restype = CM_HFID_CNF_RESTYPE_FAILURE,
+ .hfid = "",),
+ SCENARIO_ACTION (process_cc_who_ru_cnf, .peer = cco_peer),
+ SCENARIO_EVENT (cp_sta_core_stop_timed_or_cyclic_event),
+ SCENARIO_EVENT (cp_msg_cc_who_ru_cnf_receive, .ok = true,
+ .nid = nid, .cco_mac = cco_mac,
+ .avln_hfid = avln_hfid,),
+ SCENARIO_EVENT (
+ cp_msg_cm_hfid_cnf_send, .peer = peer,
+ .restype = CM_HFID_CNF_RESTYPE_PROVIDE_NETWORK_HFID,
+ .hfid = avln_hfid,),
+ SCENARIO_END
+ };
+ scenario_run (t, entries, &globals);
+ /* Check HFID values. */
+ test_fail_unless (strcmp (own_data->hfid_avln, avln_hfid) == 0);
+ test_fail_unless (strcmp (own_data->hfid_user, user_hfid) == 0);
+ test_fail_unless (strcmp (own_data->hfid_manufacturer,
+ manufacturer_hfid) == 0);
+ /* Check reply parameters in cp_sta_action context. */
+ test_fail_unless (cp->sta_action.cm_hfid_reply_peer.mac == 0);
+ } test_end;
+ cp_sta_own_data_set_cco_status (cp, true);
+ test_begin (t, "set ok")
+ {
+ scenario_entry_t entries[] = {
+ /* User HFID. */
+ SCENARIO_ACTION (process_cm_hfid_req, .peer = drvpeer),
+ SCENARIO_EVENT (
+ cp_msg_cm_hfid_req_receive, .ok = true,
+ .req_type = CM_HFID_REQ_REQTYPE_SET_USER_SET_HFID,
+ .hfid = "new user",
+ ),
+ SCENARIO_EVENT (
+ cp_msg_cm_hfid_cnf_send, .peer = drvpeer,
+ .restype = CM_HFID_CNF_RESTYPE_SET_USER_SET_HFID,
+ .hfid = "new user",
+ ),
+ SCENARIO_EVENT (cp_msg_drv_sta_set_u_sta_hfid_ind_send,
+ .peer = hlepeer, .u_sta_hfid = "new user",),
+ /* AVLN HFID. */
+ SCENARIO_ACTION (process_cm_hfid_req, .peer = drvpeer),
+ SCENARIO_EVENT (
+ cp_msg_cm_hfid_req_receive, .ok = true,
+ .req_type = CM_HFID_REQ_REQTYPE_SET_NETWORK_HFID,
+ .nid = nid,
+ .hfid = "new avln",
+ ),
+ SCENARIO_EVENT (
+ cp_msg_cm_hfid_cnf_send, .peer = drvpeer,
+ .restype = CM_HFID_CNF_RESTYPE_SET_NETWORK_HFID,
+ .hfid = "new avln",
+ ),
+ SCENARIO_EVENT (cp_msg_drv_sta_set_avln_hfid_ind_send,
+ .peer = hlepeer, .avln_hfid = "new avln",),
+ SCENARIO_END
+ };
+ scenario_run (t, entries, &globals);
+ /* Check HFID values. */
+ test_fail_unless (strcmp (own_data->hfid_avln, "new avln") == 0);
+ test_fail_unless (strcmp (own_data->hfid_user, "new user") == 0);
+ test_fail_unless (strcmp (own_data->hfid_manufacturer,
+ manufacturer_hfid) == 0);
+ /* Restore HFID. */
+ cp_sta_own_data_set_hfid_user (cp, user_hfid);
+ cp_sta_own_data_set_hfid_avln (cp, avln_hfid);
+ } test_end;
+ test_begin (t, "set error")
+ {
+ scenario_entry_t entries[] = {
+ /* Forbidden for user HFID. */
+ SCENARIO_ACTION (process_cm_hfid_req, .peer = peer),
+ SCENARIO_EVENT (
+ cp_msg_cm_hfid_req_receive, .ok = true,
+ .req_type = CM_HFID_REQ_REQTYPE_SET_USER_SET_HFID,
+ .hfid = "new user error",
+ ),
+ SCENARIO_EVENT (
+ cp_msg_cm_hfid_cnf_send, .peer = peer,
+ .restype = CM_HFID_CNF_RESTYPE_FAILURE,
+ .hfid = user_hfid,
+ ),
+ /* Forbidden for AVLN HFID. */
+ SCENARIO_ACTION (process_cm_hfid_req, .peer = peer),
+ SCENARIO_EVENT (
+ cp_msg_cm_hfid_req_receive, .ok = true,
+ .req_type = CM_HFID_REQ_REQTYPE_SET_NETWORK_HFID,
+ .nid = nid,
+ .hfid = "new avln error",
+ ),
+ SCENARIO_EVENT (
+ cp_msg_cm_hfid_cnf_send, .peer = peer,
+ .restype = CM_HFID_CNF_RESTYPE_FAILURE,
+ .hfid = avln_hfid,
+ ),
+ /* Bad NID. */
+ SCENARIO_ACTION (process_cm_hfid_req, .peer = drvpeer),
+ SCENARIO_EVENT (
+ cp_msg_cm_hfid_req_receive, .ok = true,
+ .req_type = CM_HFID_REQ_REQTYPE_SET_NETWORK_HFID,
+ .nid = nid + 1,
+ .hfid = "new avln error",
+ ),
+ SCENARIO_EVENT (
+ cp_msg_cm_hfid_cnf_send, .peer = drvpeer,
+ .restype = CM_HFID_CNF_RESTYPE_FAILURE,
+ .hfid = avln_hfid,
+ ),
+ SCENARIO_END
+ };
+ scenario_run (t, entries, &globals);
+ /* Check HFID values. */
+ test_fail_unless (strcmp (own_data->hfid_avln, avln_hfid) == 0);
+ test_fail_unless (strcmp (own_data->hfid_user, user_hfid) == 0);
+ test_fail_unless (strcmp (own_data->hfid_manufacturer,
+ manufacturer_hfid) == 0);
+ } test_end;
+ /* Cleanup. */
+ test_sta_action_uninit (&ctx);
+}
+
+void
+misc_mme_error_test_case (test_t t)
+{
+ test_sta_action_t ctx;
+ test_sta_action_init (&ctx);
+ scenario_globals_t globals = {
+ .cp = &ctx.cp,
+ };
+ cp_mme_peer_t peer = CP_MME_PEER (0x112233445566ull, 2);
+ test_case_begin (t, "mme_error");
+ test_begin (t, "ok")
+ {
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (process_cm_mme_error_ind, .peer = peer),
+#if CONFIG_TRACE
+ SCENARIO_EVENT (cp_msg_cm_mme_error_ind_receive, .ok = true,
+ .reason =
+ CP_MSG_CM_MME_ERROR_IND_REASON_MME_NOT_SUPPORTED,
+ .rx_mmv = 42, .rx_mmtype = 4242, .offset = 424242),
+#endif
+ SCENARIO_END
+ };
+ scenario_run (t, entries, &globals);
+ } test_end;
+ test_begin (t, "error")
+ {
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (process_cm_mme_error_ind, .peer = peer),
+#if CONFIG_TRACE
+ SCENARIO_EVENT (cp_msg_cm_mme_error_ind_receive, .ok = false,
+ .reason =
+ CP_MSG_CM_MME_ERROR_IND_REASON_MME_NOT_SUPPORTED,
+ .rx_mmv = 42, .rx_mmtype = 4242, .offset = 424242),
+#endif
+ SCENARIO_END
+ };
+ scenario_run (t, entries, &globals);
+ } test_end;
+ /* Cleanup. */
+ test_sta_action_uninit (&ctx);
+}
+
+void
+misc_nw_stats_test_case (test_t t)
+{
+ /* init test context */
+ test_sta_action_t ctx;
+ cp_t *cp = &ctx.cp;
+
+ /* init globals */
+ scenario_globals_t globals = {
+ .cp = &ctx.cp,
+ };
+ const cp_tei_t my_tei = 2;
+ cp_mme_peer_t peer = CP_MME_PEER (0x112233445577ull, 5);
+ cp_mme_tx_t mme_to_send;
+ globals.mme = &mme_to_send;
+
+ test_sta_action_init (&ctx);
+
+ /* Init mac ntb */
+ mac_config_t mac_config;
+ mac_ntb_init (&mac_config);
+
+ test_case_begin (t, "nw_stats_req when no avln");
+ test_begin (t, "ok")
+ {
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (process_cm_nw_stats_req, .peer = peer),
+ SCENARIO_EVENT (cp_msg_cm_nw_stats_req_receive, .ok = true),
+ SCENARIO_EVENT (cp_msg_cm_nw_stats_cnf_send_begin, .peer = peer,
+ .num_stats = 0),
+ SCENARIO_EVENT (cp_msg_cm_nw_stats_cnf_send_end),
+ SCENARIO_END
+ };
+ scenario_run (t, entries, &globals);
+ } test_end;
+
+ /* Create our net/AVLN. */
+ test_sta_action_create_our_net (&ctx, 0xAB, my_tei);
+ cp_sta_own_data_set_tei (cp, my_tei);
+ cp_net_t *my_net = cp_sta_mgr_get_our_avln (cp);
+ const cp_tei_t tei_1 = 10;
+ const cp_tei_t tei_2 = 11;
+ const mac_t mac_1 = 0x111111111111ull;
+ const mac_t mac_2 = 0x222222222222ull;
+ cp_sta_t *sta_1 = cp_sta_mgr_sta_add (cp, my_net, tei_1, mac_1);
+ cp_sta_t *sta_2 = cp_sta_mgr_sta_add (cp, my_net, tei_2, mac_2);
+
+ test_case_begin (t, "nw_stats_req with avln but no authentication");
+ test_begin (t, "ok")
+ {
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (process_cm_nw_stats_req, .peer = peer),
+ SCENARIO_EVENT (cp_msg_cm_nw_stats_req_receive, .ok = true),
+ SCENARIO_EVENT (cp_msg_cm_nw_stats_cnf_send_begin, .peer = peer,
+ .num_stats = 0),
+ SCENARIO_EVENT (cp_msg_cm_nw_stats_cnf_send_end),
+ SCENARIO_END
+ };
+ scenario_run (t, entries, &globals);
+ } test_end;
+
+ cp_sta_set_authenticated(cp, sta_1, true);
+ cp_sta_set_authenticated(cp, sta_2, true);
+
+ sta_t *sta1 = mac_store_sta_get (cp->mac_store, tei_1);
+ sta1->tx_tonemaps->intervals->intervals_nb = 0;
+ sta1->tx_tonemaps->default_tmi = PHY_MOD_ROBO;
+ sta1->rx_tonemaps->intervals->intervals_nb = 0;
+ sta1->rx_tonemaps->default_tmi = PHY_MOD_HS_ROBO;
+ cp->mac_config->tonemask_info.tonemap_robo[PHY_MOD_ROBO].ble = 0x15;
+ cp->mac_config->tonemask_info.tonemap_robo[PHY_MOD_HS_ROBO].ble = 0x16;
+
+ sta_t *sta2 = mac_store_sta_get (cp->mac_store, tei_2);
+ sta2->tx_tonemaps->intervals->intervals_nb = 0;
+ sta2->tx_tonemaps->default_tmi = TONEMAP_INDEX_NEGOTIATED_FIRST;
+
+ sta2->tx_tonemaps->tm[TONEMAP_INDEX_NEGOTIATED_FIRST] = tonemap_alloc ();
+ sta2->tx_tonemaps->tm[TONEMAP_INDEX_NEGOTIATED_FIRST]->ble = 0x23;
+
+ sta2->rx_tonemaps->intervals->intervals_nb = 4;
+ sta2->rx_tonemaps->tm[TONEMAP_INDEX_NEGOTIATED_FIRST] = tonemap_alloc ();
+ sta2->rx_tonemaps->tm[TONEMAP_INDEX_NEGOTIATED_FIRST]->ble = 0xFF;
+ sta2->rx_tonemaps->tm[TONEMAP_INDEX_NEGOTIATED_FIRST + 1] = tonemap_alloc ();
+ sta2->rx_tonemaps->tm[TONEMAP_INDEX_NEGOTIATED_FIRST + 1]->ble = 0x00;
+ sta2->rx_tonemaps->tm[TONEMAP_INDEX_NEGOTIATED_FIRST + 2] = tonemap_alloc ();
+ sta2->rx_tonemaps->tm[TONEMAP_INDEX_NEGOTIATED_FIRST + 2]->ble = 0x08;
+ sta2->rx_tonemaps->tm[TONEMAP_INDEX_NEGOTIATED_FIRST + 3] = tonemap_alloc ();
+ sta2->rx_tonemaps->tm[TONEMAP_INDEX_NEGOTIATED_FIRST + 3]->ble = 0x0F;
+
+ sta2->rx_tonemaps->intervals->interval[0].tmi =
+ TONEMAP_INDEX_NEGOTIATED_FIRST;
+ sta2->rx_tonemaps->intervals->interval[0].end_offset_atu = 10;
+ sta2->rx_tonemaps->intervals->interval[1].tmi =
+ TONEMAP_INDEX_NEGOTIATED_FIRST + 1;
+ sta2->rx_tonemaps->intervals->interval[1].end_offset_atu = 100;
+ sta2->rx_tonemaps->intervals->interval[2].tmi =
+ TONEMAP_INDEX_NEGOTIATED_FIRST + 2;
+ sta2->rx_tonemaps->intervals->interval[2].end_offset_atu = 400;
+ sta2->rx_tonemaps->intervals->interval[3].tmi =
+ TONEMAP_INDEX_NEGOTIATED_FIRST + 3;
+ sta2->rx_tonemaps->intervals->interval[3].end_offset_atu = 500;
+
+ test_case_begin (t, "nw_stats_req with two stations authenticated");
+ test_begin (t, "ok")
+ {
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (process_cm_nw_stats_req, .peer = peer),
+ SCENARIO_EVENT (cp_msg_cm_nw_stats_req_receive, .ok = true),
+ SCENARIO_EVENT (cp_msg_cm_nw_stats_cnf_send_begin, .peer = peer,
+ .num_stats = 2),
+ SCENARIO_EVENT (cp_msg_cm_nw_stats_cnf_send,
+ .mac = mac_1, .phy_dr_tx = 69, .phy_dr_rx = 138),
+ SCENARIO_EVENT (cp_msg_cm_nw_stats_cnf_send,
+ .mac = mac_2, .phy_dr_tx = 18, .phy_dr_rx = 65),
+ SCENARIO_EVENT (cp_msg_cm_nw_stats_cnf_send_end),
+ SCENARIO_END
+ };
+ scenario_run (t, entries, &globals);
+ } test_end;
+
+ cp_sta_set_authenticated(cp, sta_1, false);
+
+ test_case_begin (t, "nw_stats_req with not all stations authenticated");
+ test_begin (t, "ok")
+ {
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (process_cm_nw_stats_req, .peer = peer),
+ SCENARIO_EVENT (cp_msg_cm_nw_stats_req_receive, .ok = true),
+ SCENARIO_EVENT (cp_msg_cm_nw_stats_cnf_send_begin, .peer = peer,
+ .num_stats = 1),
+ SCENARIO_EVENT (cp_msg_cm_nw_stats_cnf_send,
+ .mac = mac_2, .phy_dr_tx = 18, .phy_dr_rx = 65),
+ SCENARIO_EVENT (cp_msg_cm_nw_stats_cnf_send_end),
+ SCENARIO_END
+ };
+ scenario_run (t, entries, &globals);
+ } test_end;
+
+ /* Cleanup. */
+ mac_ntb_uninit ();
+ blk_release (sta1);
+ blk_release (sta2);
+ slab_release (sta_1);
+ slab_release (sta_2);
+ cp_sta_mgr_sta_remove_from_mac (cp, mac_1);
+ cp_sta_mgr_sta_remove_from_mac (cp, mac_2);
+ cp_sta_mgr_remove_avln (cp, 0xAB, my_tei);
+ test_sta_action_uninit (&ctx);
+}
+
+void
+misc_nw_info_test_case (test_t t)
+{
+ /* init test context */
+ test_sta_action_t ctx;
+ cp_t *cp = &ctx.cp;
+
+ /* init globals */
+ scenario_globals_t globals = {
+ .cp = &ctx.cp,
+ };
+
+ test_sta_action_init (&ctx);
+
+ cp_mme_peer_t peer = CP_MME_PEER (0x112233445577ull, 5);
+ cp_mme_tx_t mme_to_send;
+ globals.mme = &mme_to_send;
+
+ test_sta_action_init (&ctx);
+
+ test_case_begin (t, "nw_info_req when no avln");
+ test_begin (t, "ok")
+ {
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (process_cm_nw_info_req, .peer = peer),
+ SCENARIO_EVENT (cp_msg_cm_nw_info_req_receive, .ok = true),
+ SCENARIO_EVENT (cp_msg_cm_nw_info_cnf_send_begin, .peer = peer,
+ .num_nw = 0),
+ SCENARIO_EVENT (cp_msg_cm_nw_info_cnf_send_end),
+ SCENARIO_END
+ };
+ scenario_run (t, entries, &globals);
+ } test_end;
+
+ /* Create our net/AVLN. */
+ cp_snid_t snid = 0x34;
+ cp_nid_t nid = 0x111111111111ull;
+
+ test_sta_action_create_our_net (&ctx, nid, snid);
+
+ mac_t mac = 0x111111111111ull;
+ mac_t cco_mac = 0x111111111110ull;
+ cp_tei_t tei = 2;
+ cp_tei_t cco_tei = 1;
+ cp_net_t *my_net = cp_sta_mgr_get_our_avln (cp);
+
+ /* Set cco */
+ cp_sta_t *cco = cp_sta_mgr_sta_add (cp, my_net, cco_tei, cco_mac);
+ cp_net_set_cco (cp, my_net, cco_tei);
+ slab_release (cco);
+ cp_net_set_access (cp, my_net, HPAV_ACCESS_IN_HOME);
+
+ cp_sta_own_data_set_mac_address (cp, mac);
+ cp_sta_own_data_set_tei (cp, tei);
+ cp_sta_own_data_set_authenticated_status (cp, true);
+
+ test_case_begin (t, "nw_info_req with avln");
+ test_begin (t, "ok")
+ {
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (process_cm_nw_info_req, .peer = peer),
+ SCENARIO_EVENT (cp_msg_cm_nw_info_req_receive, .ok = true),
+ SCENARIO_EVENT (cp_msg_cm_nw_info_cnf_send_begin, .peer = peer,
+ .num_nw = 1),
+ SCENARIO_EVENT (cp_msg_cm_nw_info_cnf_send, .nid = nid,
+ .snid = snid, .tei = tei,
+ .sta_role = CM_NW_INFO_CNF_STA_ROLE_STA,
+ .cco_mac = cco_mac, .access = HPAV_ACCESS_IN_HOME,
+ .num_coord_nets = 0),
+ SCENARIO_EVENT (cp_msg_cm_nw_info_cnf_send_end),
+ SCENARIO_END
+ };
+ scenario_run (t, entries, &globals);
+ } test_end;
+
+ /* change the role of the station : the station is the cco
+ * change the access mode */
+ cco = cp_sta_mgr_sta_add (cp, my_net, tei, mac);
+ cp_net_set_cco (cp, my_net, tei);
+ slab_release (cco);
+ cp_net_set_access (cp, my_net, HPAV_ACCESS_ACCESS);
+
+ cp_sta_own_data_set_authenticated_status (cp, true);
+
+ test_case_begin (t, "nw_info_req with avln");
+ test_begin (t, "ok")
+ {
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (process_cm_nw_info_req, .peer = peer),
+ SCENARIO_EVENT (cp_msg_cm_nw_info_req_receive, .ok = true),
+ SCENARIO_EVENT (cp_msg_cm_nw_info_cnf_send_begin, .peer = peer,
+ .num_nw = 1),
+ SCENARIO_EVENT (cp_msg_cm_nw_info_cnf_send, .nid = nid,
+ .snid = snid, .tei = tei,
+ .sta_role = CM_NW_INFO_CNF_STA_ROLE_CCO,
+ .cco_mac = mac, .access = HPAV_ACCESS_ACCESS,
+ .num_coord_nets = 0),
+ SCENARIO_EVENT (cp_msg_cm_nw_info_cnf_send_end),
+ SCENARIO_END
+ };
+ scenario_run (t, entries, &globals);
+ } test_end;
+
+ /* Cleanup. */
+ cp_sta_mgr_remove_avln (cp, snid, nid);
+ test_sta_action_uninit (&ctx);
+}
+
+void
+misc_link_stats_test_case_common (test_t t,
+ cp_msg_cm_link_stats_tlflag_t transmit)
+{
+ test_sta_action_t ctx;
+ cp_t *cp = &ctx.cp;
+ char msg [10];
+ /* init globals */
+ scenario_globals_t globals = {
+ .cp = &ctx.cp,
+ };
+ cp_mme_peer_t peer = CP_MME_PEER (0x112233445577ull, 5);
+ cp_mme_tx_t mme_to_send;
+ globals.mme = &mme_to_send;
+ test_sta_action_init (&ctx);
+ cp_net_t *my_net = cp_sta_mgr_add_avln (cp, 1, 1);
+ cp_sta_mgr_set_our_avln (cp, my_net);
+ if (transmit == CM_LINK_STATS_TLFLAG_TRANSMIT)
+ strcpy (msg, "TX");
+ else
+ strcpy (msg, "RX");
+ test_begin (t, msg)
+ {
+ uint lid;
+ bool added;
+ cp_sta_t *my_sta = cp_sta_mgr_sta_add (cp, my_net, 254,
+ MAC_ADDRESS (0x00, 0x13, 0xd7, 0x01, 0x11, 0x12));
+ for (lid = 0; lid <= 0xff; lid++)
+ {
+ if (MAC_LID_IS_XLID (lid))
+ {
+ mfs_t *mfs = mac_store_mfs_add (
+ cp->mac_store, !transmit, false, false, lid,
+ cp_sta_get_tei (my_sta),
+ &added);
+ test_fail_unless (added);
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (process_cm_link_stats_req, .peer = peer),
+ SCENARIO_EVENT (cp_msg_cm_link_stats_req_receive,
+ .ok = true,
+ .req_type = CM_LINK_STATS_REQTYPE_GET,
+ .req_id = 0,
+ .nid = cp_net_get_nid (cp, my_net),
+ .lid = lid,
+ .transmit = transmit,
+ .mgmt_flag = CM_LINK_STATS_MGMT_NOT_MGMT,
+ .mac = cp_sta_get_mac_address (my_sta)),
+ SCENARIO_EVENT (cp_msg_cm_link_stats_cnf_send_begin,
+ .peer = peer, .req_id = 0,
+ .res_type = CM_LINK_STATS_RESTYPE_SUCCESS),
+ SCENARIO_EVENT (cp_msg_cm_link_stats_cnf_send,
+ .mfs = mfs,
+ .transmit = transmit),
+ SCENARIO_EVENT (cp_msg_cm_link_stats_cnf_send_end),
+ SCENARIO_END
+ };
+ scenario_run (t, entries, &globals);
+ mac_store_mfs_remove (cp->mac_store, mfs);
+ blk_release (mfs);
+ }
+ else
+ {
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (process_cm_link_stats_req, .peer = peer),
+ SCENARIO_EVENT (cp_msg_cm_link_stats_req_receive,
+ .ok = true,
+ .req_type = CM_LINK_STATS_REQTYPE_GET,
+ .req_id = 0,
+ .nid = cp_net_get_nid (cp, my_net),
+ .lid = lid,
+ .transmit = transmit,
+ .mgmt_flag = CM_LINK_STATS_MGMT_NOT_MGMT,
+ .mac = cp_sta_get_mac_address (my_sta)),
+ SCENARIO_EVENT (cp_msg_cm_link_stats_cnf_send_begin,
+ .peer = peer, .req_id = 0,
+ .res_type = CM_LINK_STATS_RESTYPE_FAILURE),
+ SCENARIO_EVENT (cp_msg_cm_link_stats_cnf_send_end),
+ SCENARIO_END
+ };
+ scenario_run (t, entries, &globals);
+ }
+ }
+ cp_sta_mgr_sta_remove (cp, my_sta);
+ slab_release (my_sta);
+ test_sta_action_uninit (&ctx);
+ }
+ test_end;
+}
+
+void
+misc_link_stats_test_case (test_t t)
+{
+ /* init test context */
+ test_sta_action_t ctx;
+ cp_t *cp = &ctx.cp;
+ const cp_tei_t tei_1 = 10;
+ const mac_t mac_1 = MAC_ADDRESS (0x00, 0x13, 0xd7, 0x00, 0x00, 0x01);
+ u8 lid_tx = 0;
+ u8 lid_rx = 1;
+ cp_nid_t our_nid = 0x4242;
+
+ /* init globals */
+ scenario_globals_t globals = {
+ .cp = &ctx.cp,
+ };
+ const cp_tei_t my_tei = 2;
+ cp_mme_peer_t peer = CP_MME_PEER (0x112233445577ull, 5);
+ cp_mme_tx_t mme_to_send;
+ globals.mme = &mme_to_send;
+
+ test_sta_action_init (&ctx);
+
+ test_case_begin (t, "link_stats_req invalid message");
+ test_begin (t, "nok")
+ {
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (process_cm_link_stats_req, .peer = peer),
+ SCENARIO_EVENT (cp_msg_cm_link_stats_req_receive, .ok = false,
+ .req_id = 1,
+ .req_type = CM_LINK_STATS_REQTYPE_GET),
+ SCENARIO_EVENT (cp_msg_cm_link_stats_cnf_send_begin,
+ .peer = peer, .req_id = 0,
+ .res_type = CM_LINK_STATS_RESTYPE_FAILURE),
+ SCENARIO_EVENT (cp_msg_cm_link_stats_cnf_send_end),
+ SCENARIO_END
+ };
+ scenario_run (t, entries, &globals);
+ } test_end;
+
+ /* Create our net/AVLN. */
+ test_sta_action_create_our_net (&ctx, our_nid, my_tei);
+ cp_net_t *my_net = cp_sta_mgr_get_our_avln (cp);
+
+ test_case_begin (t, "link_stats_req invalid nid");
+ test_begin (t, "ok")
+ {
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (process_cm_link_stats_req, .peer = peer),
+ SCENARIO_EVENT (cp_msg_cm_link_stats_req_receive, .ok = true,
+ .req_type = CM_LINK_STATS_REQTYPE_GET, .req_id = 1,
+ .nid = 42, .lid = lid_tx, .transmit = true,
+ .mgmt_flag = false, .mac = mac_1),
+ SCENARIO_EVENT (cp_msg_cm_link_stats_cnf_send_begin,
+ .peer = peer, .req_id = 1,
+ .res_type = CM_LINK_STATS_RESTYPE_FAILURE),
+ SCENARIO_EVENT (cp_msg_cm_link_stats_cnf_send_end),
+ SCENARIO_END
+ };
+ scenario_run (t, entries, &globals);
+ } test_end;
+
+ test_case_begin (t, "link_stats_req unknown mac");
+ test_begin (t, "ok")
+ {
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (process_cm_link_stats_req, .peer = peer),
+ SCENARIO_EVENT (cp_msg_cm_link_stats_req_receive, .ok = true,
+ .req_type = CM_LINK_STATS_REQTYPE_GET, .req_id = 2,
+ .nid = our_nid, .lid = lid_tx,
+ .transmit = CM_LINK_STATS_TLFLAG_TRANSMIT,
+ .mgmt_flag = CM_LINK_STATS_MGMT_NOT_MGMT, .mac = mac_1),
+ SCENARIO_EVENT (cp_msg_cm_link_stats_cnf_send_begin,
+ .peer = peer, .req_id = 2,
+ .res_type = CM_LINK_STATS_RESTYPE_FAILURE),
+ SCENARIO_EVENT (cp_msg_cm_link_stats_cnf_send_end),
+ SCENARIO_END
+ };
+ scenario_run (t, entries, &globals);
+ } test_end;
+
+ /* Create a station in the network */
+ cp_sta_t *sta_1 = cp_sta_mgr_sta_add (cp, my_net, tei_1, mac_1);
+
+ test_case_begin (t, "link_stats_req unknown link");
+ test_begin (t, "ok")
+ {
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (process_cm_link_stats_req, .peer = peer),
+ SCENARIO_EVENT (cp_msg_cm_link_stats_req_receive, .ok = true,
+ .req_type = CM_LINK_STATS_REQTYPE_GET, .req_id = 3,
+ .nid = our_nid, .lid = lid_tx,
+ .transmit = CM_LINK_STATS_TLFLAG_TRANSMIT,
+ .mgmt_flag = CM_LINK_STATS_MGMT_NOT_MGMT, .mac = mac_1),
+ SCENARIO_EVENT (cp_msg_cm_link_stats_cnf_send_begin,
+ .peer = peer, .req_id = 3,
+ .res_type = CM_LINK_STATS_RESTYPE_FAILURE),
+ SCENARIO_EVENT (cp_msg_cm_link_stats_cnf_send_end),
+ SCENARIO_END
+ };
+ scenario_run (t, entries, &globals);
+ } test_end;
+
+ /* Create a tx link (tx=true, broadcast=false, mme=false) */
+ bool added = false;
+ mfs_t *m_tx = mac_store_mfs_add (cp->mac_store, true, false, false,
+ lid_tx, tei_1, &added);
+
+ test_case_begin (t, "link_stats_req valid tx link req");
+ test_begin (t, "ok")
+ {
+ test_fail_unless (added == true);
+
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (process_cm_link_stats_req, .peer = peer),
+ SCENARIO_EVENT (cp_msg_cm_link_stats_req_receive, .ok = true,
+ .req_type = CM_LINK_STATS_REQTYPE_GET, .req_id = 4,
+ .nid = our_nid, .lid = lid_tx,
+ .transmit = CM_LINK_STATS_TLFLAG_TRANSMIT,
+ .mgmt_flag = CM_LINK_STATS_MGMT_NOT_MGMT, .mac = mac_1),
+ SCENARIO_EVENT (cp_msg_cm_link_stats_cnf_send_begin,
+ .peer = peer, .req_id = 4,
+ .res_type = CM_LINK_STATS_RESTYPE_SUCCESS),
+ SCENARIO_EVENT (cp_msg_cm_link_stats_cnf_send,
+ .mfs = m_tx, .transmit = CM_LINK_STATS_TLFLAG_TRANSMIT),
+ SCENARIO_EVENT (cp_msg_cm_link_stats_cnf_send_end),
+ SCENARIO_END
+ };
+ scenario_run (t, entries, &globals);
+ } test_end;
+ mac_store_mfs_remove (cp->mac_store, m_tx);
+ blk_release (m_tx);
+
+ /* Create a tx link (tx=true, broadcast=true, mme=false) */
+ added = false;
+ m_tx = mac_store_mfs_add (cp->mac_store, true, true, false,
+ 0, 0xff, &added);
+ dbg_check (added);
+
+ test_case_begin (t, "link_stats_req valid tx link req");
+ test_begin (t, "ok")
+ {
+ test_fail_unless (added == true);
+
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (process_cm_link_stats_req, .peer = peer),
+ SCENARIO_EVENT (cp_msg_cm_link_stats_req_receive, .ok = true,
+ .req_type = CM_LINK_STATS_REQTYPE_GET, .req_id = 4,
+ .nid = our_nid, .lid = 0,
+ .transmit = CM_LINK_STATS_TLFLAG_TRANSMIT,
+ .mgmt_flag = CM_LINK_STATS_MGMT_NOT_MGMT,
+ .mac = MAC_ADDRESS (0xff, 0xff, 0xff, 0xff, 0xff, 0xff)),
+ SCENARIO_EVENT (cp_msg_cm_link_stats_cnf_send_begin,
+ .peer = peer, .req_id = 4,
+ .res_type = CM_LINK_STATS_RESTYPE_FAILURE),
+ SCENARIO_EVENT (cp_msg_cm_link_stats_cnf_send_end),
+ SCENARIO_END
+ };
+ scenario_run (t, entries, &globals);
+ } test_end;
+ mac_store_mfs_remove (cp->mac_store, m_tx);
+ blk_release (m_tx);
+
+ /* Create a tx link (tx=true, broadcast=false, mme=true) */
+ added = false;
+ m_tx = mac_store_mfs_add (cp->mac_store, true, false, true,
+ MAC_LID_NONE, tei_1, &added);
+ dbg_check (added);
+
+ test_case_begin (t, "link_stats_req valid tx link req");
+ test_begin (t, "ok")
+ {
+ test_fail_unless (added == true);
+
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (process_cm_link_stats_req, .peer = peer),
+ SCENARIO_EVENT (cp_msg_cm_link_stats_req_receive, .ok = true,
+ .req_type = CM_LINK_STATS_REQTYPE_GET, .req_id = 4,
+ .nid = our_nid, .lid = MAC_LID_NONE,
+ .transmit = CM_LINK_STATS_TLFLAG_TRANSMIT,
+ .mgmt_flag = CM_LINK_STATS_MGMT_MGMT, .mac = mac_1),
+ SCENARIO_EVENT (cp_msg_cm_link_stats_cnf_send_begin,
+ .peer = peer, .req_id = 4,
+ .res_type = CM_LINK_STATS_RESTYPE_SUCCESS),
+ SCENARIO_EVENT (cp_msg_cm_link_stats_cnf_send,
+ .mfs = m_tx, .transmit = CM_LINK_STATS_TLFLAG_TRANSMIT),
+ SCENARIO_EVENT (cp_msg_cm_link_stats_cnf_send_end),
+ SCENARIO_END
+ };
+ scenario_run (t, entries, &globals);
+ } test_end;
+ mac_store_mfs_remove (cp->mac_store, m_tx);
+ blk_release (m_tx);
+
+ /* Create a rx link (tx=false, broadcast=false, mme=false) */
+ added = false;
+ mfs_t *m_rx = mac_store_mfs_add (cp->mac_store, false, false, false,
+ lid_rx, tei_1, &added);
+ dbg_check (added);
+ mfs_t *mme_rx = mac_store_mfs_add (cp->mac_store, false, false, true,
+ MAC_LID_NONE, tei_1, &added);
+ dbg_check (added);
+ mfs_t *bcast_rx = mac_store_mfs_add (cp->mac_store, false, true, false,
+ 0, tei_1, &added);
+ dbg_check (added);
+
+ test_case_begin (t, "link_stats_req valid rx link req");
+ test_begin (t, "multiple rx")
+ {
+ scenario_entry_t entries[] = {
+ /* Unicast link. */
+ SCENARIO_ACTION (process_cm_link_stats_req, .peer = peer),
+ SCENARIO_EVENT (cp_msg_cm_link_stats_req_receive, .ok = true,
+ .req_type = CM_LINK_STATS_REQTYPE_GET, .req_id = 5,
+ .nid = our_nid, .lid = lid_rx,
+ .transmit = CM_LINK_STATS_TLFLAG_RECEIVE,
+ .mgmt_flag = CM_LINK_STATS_MGMT_NOT_MGMT, .mac = mac_1),
+ SCENARIO_EVENT (cp_msg_cm_link_stats_cnf_send_begin,
+ .peer = peer, .req_id = 5,
+ .res_type = CM_LINK_STATS_RESTYPE_SUCCESS),
+ SCENARIO_EVENT (cp_msg_cm_link_stats_cnf_send,
+ .mfs = m_rx, .transmit = CM_LINK_STATS_TLFLAG_RECEIVE),
+ SCENARIO_EVENT (cp_msg_cm_link_stats_cnf_send_end),
+ /* Unicast MME link. */
+ SCENARIO_ACTION (process_cm_link_stats_req, .peer = peer),
+ SCENARIO_EVENT (cp_msg_cm_link_stats_req_receive, .ok = true,
+ .req_type = CM_LINK_STATS_REQTYPE_GET, .req_id = 5,
+ .nid = our_nid, .lid = 124,
+ .transmit = CM_LINK_STATS_TLFLAG_RECEIVE,
+ .mgmt_flag = CM_LINK_STATS_MGMT_MGMT, .mac = mac_1),
+ SCENARIO_EVENT (cp_msg_cm_link_stats_cnf_send_begin,
+ .peer = peer, .req_id = 5,
+ .res_type = CM_LINK_STATS_RESTYPE_SUCCESS),
+ SCENARIO_EVENT (cp_msg_cm_link_stats_cnf_send,
+ .mfs = mme_rx, .transmit = CM_LINK_STATS_TLFLAG_RECEIVE),
+ SCENARIO_EVENT (cp_msg_cm_link_stats_cnf_send_end),
+ /* Bcast link. */
+ SCENARIO_ACTION (process_cm_link_stats_req, .peer = peer),
+ SCENARIO_EVENT (cp_msg_cm_link_stats_req_receive, .ok = true,
+ .req_type = CM_LINK_STATS_REQTYPE_GET, .req_id = 5,
+ .nid = our_nid, .lid = 0,
+ .transmit = CM_LINK_STATS_TLFLAG_RECEIVE,
+ .mgmt_flag = CM_LINK_STATS_MGMT_NOT_MGMT,
+ .mac = MAC_BROADCAST),
+ SCENARIO_EVENT (cp_msg_cm_link_stats_cnf_send_begin,
+ .peer = peer, .req_id = 5,
+ .res_type = CM_LINK_STATS_RESTYPE_FAILURE),
+ SCENARIO_EVENT (cp_msg_cm_link_stats_cnf_send_end),
+ SCENARIO_END
+ };
+ scenario_run (t, entries, &globals);
+ } test_end;
+ mac_store_mfs_remove (cp->mac_store, mme_rx);
+ mac_store_mfs_remove (cp->mac_store, bcast_rx);
+ blk_release (mme_rx);
+ blk_release (bcast_rx);
+
+ added = false;
+ m_tx = mac_store_mfs_add (cp->mac_store, true, false, false,
+ lid_tx, tei_1, &added);
+
+ /* Force tx stats value with non-zero values */
+ m_tx->tx.stats.statistics_start_rtc_date = 0xFFFFFFFF;
+ m_tx->tx.stats.num_msdus = 0xFFFFFFFF;
+ m_tx->tx.stats.octets = 0xFFFFFFFF;
+ m_tx->tx.stats.num_segs = 0xFFFFFFFF;
+ m_tx->tx.stats.num_segs_suc = 0xFFFFFFFF;
+ m_tx->tx.stats.num_segs_dropped = 0xFFFFFFFF;
+ m_tx->tx.stats.num_pbs = 0xFFFFFFFF;
+ m_tx->tx.stats.num_mpdus = 0xFFFFFFFF;
+ m_tx->tx.stats.num_bursts = 0xFFFFFFFF;
+ m_tx->tx.stats.num_sacks = 0xFFFFFFFF;
+
+ test_case_begin (t, "link_stats_req valid tx link get and reset");
+ test_begin (t, "ok")
+ {
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (process_cm_link_stats_req, .peer = peer),
+ SCENARIO_EVENT (cp_msg_cm_link_stats_req_receive, .ok = true,
+ .req_type = CM_LINK_STATS_REQTYPE_GET_AND_RESET,
+ .req_id = 8, .nid = our_nid, .lid = lid_tx,
+ .transmit = CM_LINK_STATS_TLFLAG_TRANSMIT,
+ .mgmt_flag = CM_LINK_STATS_MGMT_NOT_MGMT, .mac = mac_1),
+ SCENARIO_EVENT (cp_msg_cm_link_stats_cnf_send_begin,
+ .peer = peer, .req_id = 8,
+ .res_type = CM_LINK_STATS_RESTYPE_SUCCESS),
+ SCENARIO_EVENT (cp_msg_cm_link_stats_cnf_send,
+ .mfs = m_tx, .transmit = CM_LINK_STATS_TLFLAG_TRANSMIT),
+ SCENARIO_EVENT (cp_msg_cm_link_stats_cnf_send_end),
+ SCENARIO_END
+ };
+ scenario_run (t, entries, &globals);
+
+ test_fail_unless (m_tx->tx.stats.statistics_start_rtc_date == 0);
+ test_fail_unless (m_tx->tx.stats.num_msdus == 0);
+ test_fail_unless (m_tx->tx.stats.octets == 0);
+ test_fail_unless (m_tx->tx.stats.num_segs == 0);
+ test_fail_unless (m_tx->tx.stats.num_segs_suc == 0);
+ test_fail_unless (m_tx->tx.stats.num_segs_dropped == 0);
+ test_fail_unless (m_tx->tx.stats.num_pbs == 0);
+ test_fail_unless (m_tx->tx.stats.num_mpdus == 0);
+ test_fail_unless (m_tx->tx.stats.num_bursts == 0);
+ test_fail_unless (m_tx->tx.stats.num_sacks == 0);
+ } test_end;
+
+ /* Force tx stats value with non-zero values */
+ m_tx->tx.stats.statistics_start_rtc_date = 0xFFFFFFFF;
+ m_tx->tx.stats.num_msdus = 0xFFFFFFFF;
+ m_tx->tx.stats.octets = 0xFFFFFFFF;
+ m_tx->tx.stats.num_segs = 0xFFFFFFFF;
+ m_tx->tx.stats.num_segs_suc = 0xFFFFFFFF;
+ m_tx->tx.stats.num_segs_dropped = 0xFFFFFFFF;
+ m_tx->tx.stats.num_pbs = 0xFFFFFFFF;
+ m_tx->tx.stats.num_mpdus = 0xFFFFFFFF;
+ m_tx->tx.stats.num_bursts = 0xFFFFFFFF;
+ m_tx->tx.stats.num_sacks = 0xFFFFFFFF;
+
+ test_case_begin (t, "link_stats_req valid tx link reset");
+ test_begin (t, "ok")
+ {
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (process_cm_link_stats_req, .peer = peer),
+ SCENARIO_EVENT (cp_msg_cm_link_stats_req_receive, .ok = true,
+ .req_type = CM_LINK_STATS_REQTYPE_RESET, .req_id = 9,
+ .nid = our_nid, .lid = lid_tx,
+ .transmit = CM_LINK_STATS_TLFLAG_TRANSMIT,
+ .mgmt_flag = CM_LINK_STATS_MGMT_NOT_MGMT, .mac = mac_1),
+ SCENARIO_EVENT (cp_msg_cm_link_stats_cnf_send_begin,
+ .peer = peer, .req_id = 9,
+ .res_type = CM_LINK_STATS_RESTYPE_SUCCESS),
+ SCENARIO_EVENT (cp_msg_cm_link_stats_cnf_send_end),
+ SCENARIO_END
+ };
+ scenario_run (t, entries, &globals);
+
+ test_fail_unless (m_tx->tx.stats.statistics_start_rtc_date == 0);
+ test_fail_unless (m_tx->tx.stats.num_msdus == 0);
+ test_fail_unless (m_tx->tx.stats.octets == 0);
+ test_fail_unless (m_tx->tx.stats.num_segs == 0);
+ test_fail_unless (m_tx->tx.stats.num_segs_suc == 0);
+ test_fail_unless (m_tx->tx.stats.num_segs_dropped == 0);
+ test_fail_unless (m_tx->tx.stats.num_pbs == 0);
+ test_fail_unless (m_tx->tx.stats.num_mpdus == 0);
+ test_fail_unless (m_tx->tx.stats.num_bursts == 0);
+ test_fail_unless (m_tx->tx.stats.num_sacks == 0);
+ } test_end;
+
+ /* Force rx stats value with non-zero values */
+ m_rx->rx.stats.statistics_start_rtc_date = 0xFFFFFFFF;
+ m_rx->rx.stats.num_msdus = 0xFFFFFFFF;
+ m_rx->rx.stats.octets = 0xFFFFFFFF;
+ m_rx->rx.stats.num_segs_suc = 0xFFFFFFFF;
+ m_rx->rx.stats.num_segs_missed = 0xFFFFFFFF;
+ m_rx->rx.stats.num_pbs = 0xFFFFFFFF;
+ m_rx->rx.stats.num_mpdus = 0xFFFFFFFF;
+ m_rx->rx.stats.num_bursts = 0xFFFFFFFF;
+ m_rx->rx.stats.num_icv_fails = 0xFFFFFFFF;
+
+ test_case_begin (t, "link_stats_req valid rx link get and reset");
+ test_begin (t, "ok")
+ {
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (process_cm_link_stats_req, .peer = peer),
+ SCENARIO_EVENT (cp_msg_cm_link_stats_req_receive, .ok = true,
+ .req_type = CM_LINK_STATS_REQTYPE_GET_AND_RESET,
+ .req_id = 6, .nid = our_nid, .lid = lid_rx,
+ .transmit = CM_LINK_STATS_TLFLAG_RECEIVE,
+ .mgmt_flag = CM_LINK_STATS_MGMT_NOT_MGMT, .mac = mac_1),
+ SCENARIO_EVENT (cp_msg_cm_link_stats_cnf_send_begin,
+ .peer = peer, .req_id = 6,
+ .res_type = CM_LINK_STATS_RESTYPE_SUCCESS),
+ SCENARIO_EVENT (cp_msg_cm_link_stats_cnf_send,
+ .mfs = m_rx, .transmit = CM_LINK_STATS_TLFLAG_RECEIVE),
+ SCENARIO_EVENT (cp_msg_cm_link_stats_cnf_send_end),
+ SCENARIO_END
+ };
+ scenario_run (t, entries, &globals);
+
+ test_fail_unless (m_rx->rx.stats.statistics_start_rtc_date == 0);
+ test_fail_unless (m_rx->rx.stats.num_msdus == 0);
+ test_fail_unless (m_rx->rx.stats.octets == 0);
+ test_fail_unless (m_rx->rx.stats.num_segs_suc == 0);
+ test_fail_unless (m_rx->rx.stats.num_segs_missed == 0);
+ test_fail_unless (m_rx->rx.stats.num_pbs == 0);
+ test_fail_unless (m_rx->rx.stats.num_mpdus == 0);
+ test_fail_unless (m_rx->rx.stats.num_bursts == 0);
+ test_fail_unless (m_rx->rx.stats.num_icv_fails == 0);
+ } test_end;
+
+ /* Force rx stats value with non-zero values */
+ m_rx->rx.stats.statistics_start_rtc_date = 0xFFFFFFFF;
+ m_rx->rx.stats.num_msdus = 0xFFFFFFFF;
+ m_rx->rx.stats.octets = 0xFFFFFFFF;
+ m_rx->rx.stats.num_segs_suc = 0xFFFFFFFF;
+ m_rx->rx.stats.num_segs_missed = 0xFFFFFFFF;
+ m_rx->rx.stats.num_pbs = 0xFFFFFFFF;
+ m_rx->rx.stats.num_mpdus = 0xFFFFFFFF;
+ m_rx->rx.stats.num_bursts = 0xFFFFFFFF;
+ m_rx->rx.stats.num_icv_fails = 0xFFFFFFFF;
+
+ test_case_begin (t, "link_stats_req valid rx link reset");
+ test_begin (t, "ok")
+ {
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (process_cm_link_stats_req, .peer = peer),
+ SCENARIO_EVENT (cp_msg_cm_link_stats_req_receive, .ok = true,
+ .req_type = CM_LINK_STATS_REQTYPE_RESET, .req_id = 7,
+ .nid = our_nid, .lid = lid_rx,
+ .transmit = CM_LINK_STATS_TLFLAG_RECEIVE,
+ .mgmt_flag = CM_LINK_STATS_MGMT_NOT_MGMT, .mac = mac_1),
+ SCENARIO_EVENT (cp_msg_cm_link_stats_cnf_send_begin,
+ .peer = peer, .req_id = 7,
+ .res_type = CM_LINK_STATS_RESTYPE_SUCCESS),
+ SCENARIO_EVENT (cp_msg_cm_link_stats_cnf_send_end),
+ SCENARIO_END
+ };
+ scenario_run (t, entries, &globals);
+
+ test_fail_unless (m_rx->rx.stats.statistics_start_rtc_date == 0);
+ test_fail_unless (m_rx->rx.stats.num_msdus == 0);
+ test_fail_unless (m_rx->rx.stats.octets == 0);
+ test_fail_unless (m_rx->rx.stats.num_segs_suc == 0);
+ test_fail_unless (m_rx->rx.stats.num_segs_missed == 0);
+ test_fail_unless (m_rx->rx.stats.num_pbs == 0);
+ test_fail_unless (m_rx->rx.stats.num_mpdus == 0);
+ test_fail_unless (m_rx->rx.stats.num_bursts == 0);
+ test_fail_unless (m_rx->rx.stats.num_icv_fails == 0);
+ } test_end;
+ /* Cleanup. */
+ mac_store_mfs_remove (cp->mac_store, m_rx);
+ blk_release (m_rx);
+ mac_store_mfs_remove (cp->mac_store, m_tx);
+ blk_release (m_tx);
+ cp_sta_mgr_sta_remove (cp, sta_1);
+ slab_release (sta_1);
+ test_sta_action_uninit (&ctx);
+}
+
+void
+misc_link_stats_test_case_all_lids (test_t t)
+{
+ test_case_begin (t, "All possible values");
+ misc_link_stats_test_case_common (t, CM_LINK_STATS_TLFLAG_TRANSMIT);
+ misc_link_stats_test_case_common (t, CM_LINK_STATS_TLFLAG_RECEIVE);
+}
+
+
+void
+misc_sta_cap_test_case (test_t t)
+{
+ /* init test context */
+ test_sta_action_t ctx;
+ cp_t *cp = &ctx.cp;
+
+ /* init globals */
+ scenario_globals_t globals = {
+ .cp = &ctx.cp,
+ };
+ const mac_t mac = 0x111111111111ull;
+ cp_mme_peer_t peer = CP_MME_PEER (0x112233445577ull, 5);
+ cp_mme_tx_t mme_to_send;
+ globals.mme = &mme_to_send;
+
+ test_sta_action_init (&ctx);
+ cp_sta_own_data_set_mac_address (cp, mac);
+
+ test_case_begin (t, "cm_sta_cap_req invalid message");
+ test_begin (t, "ok")
+ {
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (process_cm_sta_cap_req, .peer = peer),
+ SCENARIO_EVENT (cp_msg_cm_sta_cap_req_receive, .ok = false),
+ SCENARIO_END
+ };
+ scenario_run (t, entries, &globals);
+ } test_end;
+
+ test_case_begin (t, "valid cm_sta_cap_req");
+ test_begin (t, "ok")
+ {
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (process_cm_sta_cap_req, .peer = peer),
+ SCENARIO_EVENT (cp_msg_cm_sta_cap_req_receive, .ok = true),
+ SCENARIO_EVENT (cp_msg_cm_sta_cap_cnf_send, .peer = peer,
+ .av_version = CP_AV_VERSION,
+ .mac = mac, .oui = SPC_OUI, .auto_connect = CP_ACS_CAP,
+ .smoothing = CP_SMOOTHING_CAP, .cco_cap = CP_CCO_LEVEL,
+ .proxy_cap = CP_PCO_CAP,
+ .backup_cco_cap = CP_BACKUP_CCO_CAP,
+ .soft_handover = CP_SOFT_HANDOVER_CAP,
+ .two_sym_fc = CP_TWO_SYM_FC_CAP,
+ .max_fl_av = MAC_MAX_FL_MAX_FL,
+ .homeplug_11_cap = CP_HOMEPLUG_AV11,
+ .homeplug_101_int = CP_HOMEPLUG_AV101,
+ .regulatory_cap = CP_REGULATORY_CAP,
+ .bidir_burst = CP_BIDIRECTIONAL_BURSTING_CAP,
+ .implementation_version = BUILD_INFO_IMPLEMENTATION),
+ SCENARIO_END
+ };
+ scenario_run (t, entries, &globals);
+ } test_end;
+ /* Cleanup. */
+ test_sta_action_uninit (&ctx);
+}
+
+void
+misc_test_suite (test_t t)
+{
+ test_suite_begin (t, "misc");
+ misc_whoru_test_case (t);
+ misc_cc_discover_list_test_case (t);
+ misc_relay_test_case (t);
+ misc_hfid_test_case (t);
+ misc_mme_error_test_case (t);
+ misc_nw_stats_test_case (t);
+ misc_nw_info_test_case (t);
+ misc_link_stats_test_case (t);
+ misc_link_stats_test_case_all_lids (t);
+ misc_sta_cap_test_case (t);
+ test_case_begin (t, "memory");
+ test_begin (t, "memory")
+ {
+ test_fail_unless (blk_check_memory ());
+ } test_end;
+}
+
diff --git a/cesar/cp/eoc/sta/action/test/utest_eoc/src/msg_stub.c b/cesar/cp/eoc/sta/action/test/utest_eoc/src/msg_stub.c
new file mode 100644
index 0000000000..83e56bcf84
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/test/utest_eoc/src/msg_stub.c
@@ -0,0 +1,421 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/msg_stub.c
+ * \brief cp/msg module stub.
+ * \ingroup test
+ */
+#include "common/std.h"
+
+#include "lib/scenario/scenario.h"
+#include "mac/common/tonemap.h"
+
+#include "cp/inc/context.h"
+#include "cp/msg/msg.h"
+#include "hal/phy/defs.h"
+#include "cp/msg/inc/vs_get_tonemap.h"
+#include "cp/msg/inc/cc_discover_list.h"
+
+#include <string.h>
+
+#define __ptr_(TYPE) PASTE_EXPAND (__ptr__, TYPE)
+#define __ptr__assign *
+#define __ptr__string
+#define __ptr__array
+#define __ptr__string_or_null
+#define __ptr__tonemask
+#define __ptr__hash_key
+
+#define __dim_(TYPE, DIM...) PASTE_EXPAND (__dim__, TYPE) (DIM)
+#define __dim__assign()
+#define __dim__string()
+#define __dim__array(DIM) DIM
+#define __dim__string_or_null()
+#define __dim__tonemask()
+#define __dim__hash_key()
+
+/* Code for MME transmission. */
+#define __ms(EVENT, PARAMS...) \
+void \
+EVENT (cp_t *ctx, cp_mme_peer_t *peer \
+ PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __ms_pdecl_, ## PARAMS)) \
+{ \
+ dbg_assert (ctx); \
+ dbg_assert (peer); \
+ scenario_event (EVENT, param); \
+ __ms_test_peer \
+ PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __ms_test_, ## PARAMS) \
+}
+
+/* Code for MME transmission complex with a begin. */
+#define __mscb(EVENT, PARAMS...) \
+cp_mme_tx_t * \
+EVENT (cp_t *ctx, cp_mme_peer_t *peer \
+ PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __ms_pdecl_, ## PARAMS)) \
+{ \
+ dbg_assert (ctx); \
+ dbg_assert (peer); \
+ scenario_event (EVENT, param, global); \
+ PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __ms_test_, ## PARAMS) \
+ return global->mme; \
+}
+
+/* Code for MME transmission complex (with or without an end). */
+#define __msc(EVENT, PARAMS...) \
+void \
+EVENT (cp_t *ctx, cp_mme_tx_t *mme \
+ PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __ms_pdecl_, ## PARAMS)) \
+{ \
+ dbg_assert (ctx); \
+ dbg_assert (mme); \
+ scenario_event (EVENT, param); \
+ test_fail_unless (param); \
+ PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __ms_test_, ## PARAMS) \
+}
+
+#define __msdc(EVENT, DATA, PARAMS...) \
+void \
+EVENT (cp_t *ctx, cp_mme_tx_t *mme, const DATA *data) \
+{ \
+ dbg_assert (ctx); \
+ dbg_assert (mme); \
+ dbg_assert (data); \
+ scenario_event (EVENT, param); \
+ PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __msd_test_, ## PARAMS) \
+}
+
+#define __ms_pdecl_(TYPE, PARAM, KIND) , TYPE PARAM
+#define __ms_test_(TYPE, PARAM, KIND) \
+ PASTE_EXPAND (__ms_test__, KIND) (PARAM)
+#define __ms_test__assign(PARAM) \
+ test_fail_unless (PARAM == param->PARAM);
+#define __ms_test__ignore_pointer(PARAM)
+#define __ms_test__string(PARAM) \
+ test_fail_unless (strcmp (PARAM, param->PARAM) == 0);
+#define __ms_test_peer \
+ test_fail_unless (peer->mac == param->peer.mac); \
+ test_fail_unless (peer->eth_type == param->peer.eth_type); \
+ test_fail_unless (peer->vlan_tci == param->peer.vlan_tci); \
+ test_fail_unless (peer->tei == param->peer.tei); \
+
+/* Code for MME transmission with a data structure. */
+#define __msd(EVENT, DATA, PARAMS...) \
+void \
+EVENT (cp_t *ctx, cp_mme_peer_t *peer, const DATA *data) \
+{ \
+ dbg_assert (ctx); \
+ dbg_assert (peer); \
+ dbg_assert (data); \
+ scenario_event (EVENT, param); \
+ __ms_test_peer \
+ PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __msd_test_, ## PARAMS) \
+}
+
+#define __msd_test_(TYPE, PARAM, KIND) \
+ PASTE_EXPAND (__msd_test__, KIND) (PARAM)
+#define __msd_test__assign(PARAM) \
+ test_fail_unless (data->PARAM == param->PARAM);
+#define __msd_test__string(PARAM) \
+ test_fail_unless (strcmp (data->PARAM, param->PARAM) == 0);
+#define __msd_test__hash_key(PARAM) \
+ test_fail_unless (!param->PARAM || memcmp (data->PARAM, param->PARAM, \
+ CP_HASH_KEY_SIZE) == 0);
+#define __msd_test__key(PARAM) \
+ test_fail_unless (memcmp (&data->PARAM, &param->PARAM, \
+ sizeof (cp_key_t)) == 0);
+#define __ms_test__key(PARAM) \
+ test_fail_unless (memcmp (&PARAM, &param->PARAM, \
+ sizeof (cp_key_t)) == 0);
+#define __msd_test__sub_assign(PARAM) \
+ __msd_test__sub_assign_ PARAM
+#define __msd_test__sub_assign_(PARAM, SUBNAME) \
+ test_fail_unless (data->SUBNAME.PARAM == param->PARAM);
+#define __msd_test__ignore_pointer(PARAM) ;
+
+#define __msd_test__array(PARAM) \
+ __msd_test__array_ PARAM
+#define __msd_test__array_(PARAM, SIZE) \
+ test_fail_unless (memcmp (data->PARAM, param->PARAM, SIZE) == 0);
+
+/* Code for MME transmission with a data structure with encryption
+ * information. */
+#define __msk(EVENT, DATA, PARAMS...) \
+void \
+EVENT (cp_t *ctx, cp_mme_peer_t *peer, cp_mme_peks_t peks, \
+ const cp_secu_protocol_run_t *prun, const DATA *data) \
+{ \
+ dbg_assert (ctx); \
+ dbg_assert (peer); \
+ dbg_assert (data); \
+ scenario_event (EVENT, param, global); \
+ __ms_test_peer \
+ test_fail_unless (peks == param->peks); \
+ test_fail_unless (prun->pid == param->pid); \
+ test_fail_unless (prun->pmn == param->pmn); \
+ global->prn = prun->prn; \
+ global->my_nonce = prun->my_nonce; \
+ PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __msd_test_, ## PARAMS) \
+}
+
+/* Code for MME transmission for CC_RELAY.IND. */
+#define __msr(EVENT, PARAMS...) \
+void \
+EVENT (cp_t *ctx, cp_mme_rx_t *mme \
+ PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __ms_pdecl_, ## PARAMS)) \
+{ \
+ dbg_assert (ctx); \
+ dbg_assert (mme); \
+ scenario_event (EVENT, param); \
+ test_fail_unless (mme->relay.mac_fa == param->mac_fa); \
+ test_fail_unless (mme->relay.ftei == param->ftei); \
+ PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __ms_test_, ## PARAMS) \
+}
+
+
+/* Code for MME reception. */
+#define __mr(EVENT, PARAMS...) \
+bool \
+EVENT (cp_t *ctx, cp_mme_rx_t *mme \
+ PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __mr_pdecl_, ## PARAMS)) \
+{ \
+ dbg_assert (ctx); \
+ dbg_assert (mme); \
+ PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __mr_assert_, ## PARAMS) \
+ scenario_event (EVENT, param); \
+ if (param->ok) \
+ { \
+ PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __mr_copy_, ## PARAMS) \
+ return true; \
+ } \
+ else \
+ return false; \
+}
+
+#define __mr_pdecl_(TYPE, PARAM, KIND, DIM...) \
+ , TYPE __ptr_ (KIND) PARAM __dim_ (KIND, ## DIM)
+#define __mr_assert_(TYPE, PARAM, KIND, DIM...) dbg_assert_ptr (PARAM);
+#define __mr_copy_(TYPE, PARAM, KIND, DIM...) \
+ PASTE_EXPAND (__mr_copy__, KIND) (PARAM, TYPE, ## DIM)
+
+#define __mr_copy__assign(PARAM, TYPE) *PARAM = param->PARAM;
+#define __mr_copy__string(PARAM, TYPE) strcpy (PARAM, param->PARAM);
+#define __mr_copy__string_or_null(PARAM, TYPE) \
+ if (param->PARAM) strcpy (PARAM, param->PARAM);
+#define __mr_copy__tonemask(PARAM, TYPE) \
+ memcpy (PARAM, param->PARAM, PHY_TONEMASK_SIZE);
+#define __mr_copy__array(PARAM, TYPE, DIM) \
+ memcpy (PARAM, param->PARAM, sizeof(TYPE DIM));
+
+/* Code for MME reception with a data structure. */
+#define __mrd(EVENT, DATA, PARAMS...) \
+bool \
+EVENT (cp_t *ctx, cp_mme_rx_t *mme, DATA *data) \
+{ \
+ dbg_assert (ctx); \
+ dbg_assert (mme); \
+ dbg_assert (data); \
+ scenario_event (EVENT, param); \
+ if (param->ok) \
+ { \
+ PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __mrd_copy_, PARAMS) \
+ return true; \
+ } \
+ else \
+ return false; \
+}
+
+#define __mrd_copy_(TYPE, PARAM, KIND) \
+ PASTE_EXPAND (__mrd_copy__, KIND) (PARAM)
+
+#define __mrd_copy__assign(PARAM) data->PARAM = param->PARAM;
+#define __mrd_copy__string(PARAM) strcpy (data->PARAM, param->PARAM);
+#define __mrd_copy__tonemask(PARAM) \
+ memcpy (data->PARAM, param->PARAM, PHY_TONEMASK_SIZE);
+#define __mrd_copy__hash_key(PARAM) \
+ if (param->PARAM) memcpy (data->PARAM, param->PARAM, CP_HASH_KEY_SIZE);
+#define __mrd_copy__assign_deref(PARAM) \
+ if (param->PARAM) data->PARAM = *param->PARAM;
+
+/* Code for MME reception with a data structure with encryption
+ * information. */
+#define __mrk(EVENT, DATA, PARAMS...) \
+bool \
+EVENT (cp_t *ctx, cp_mme_rx_t *mme, DATA *data) \
+{ \
+ dbg_assert (ctx); \
+ dbg_assert (mme); \
+ dbg_assert (data); \
+ scenario_event (EVENT, param, g); \
+ if (param->ok) \
+ { \
+ mme->peks = param->peks; \
+ if (param->new_prn) g->prn = lib_rnd32 (&ctx->rnd) & 0xffff; \
+ if (param->new_my_nonce) g->my_nonce = lib_rnd32 (&ctx->rnd); \
+ if (param->new_your_nonce) g->your_nonce = lib_rnd32 (&ctx->rnd); \
+ mme->prun.pid = param->pid; \
+ mme->prun.pmn = param->pmn; \
+ mme->prun.prn = g->prn; \
+ mme->prun.my_nonce = g->my_nonce; \
+ mme->prun.your_nonce = g->your_nonce; \
+ PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __mrd_copy_, PARAMS) \
+ return true; \
+ } \
+ else \
+ return false; \
+}
+
+/* Code for MME reception for CC_RELAY.REQ. */
+#define __mrr(EVENT, PARAMS...) \
+bool \
+EVENT (cp_t *ctx, cp_mme_rx_t *mme \
+ PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __mr_pdecl_, ## PARAMS)) \
+{ \
+ dbg_assert (ctx); \
+ dbg_assert (mme); \
+ PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __mr_assert_, ## PARAMS) \
+ scenario_event (EVENT, param); \
+ if (param->ok) \
+ { \
+ mme->relay.mac_fa = param->mac_fa; \
+ mme->relay.ftei = param->ftei; \
+ PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, __mr_copy_, ## PARAMS) \
+ return true; \
+ } \
+ else \
+ return false; \
+}
+
+__mr (cp_msg_drv_sta_set_mac_addr_req_receive, (mac_t, mac, assign))
+__mr (cp_msg_drv_sta_set_cco_pref_req_receive, (bool, cco_pref, assign))
+__mr (cp_msg_drv_sta_set_was_cco_req_receive, (bool, was_cco, assign))
+__mr (cp_msg_drv_sta_set_npw_req_receive, (char *, npw, string))
+__mr (cp_msg_drv_sta_set_dpw_req_receive, (char *, dpw, string))
+__mr (cp_msg_drv_sta_set_sl_req_receive, (cp_security_level_t, sl, assign))
+__mr (cp_msg_drv_sta_set_nid_req_receive, (cp_nid_t, nid, assign))
+__mr (cp_msg_drv_sta_set_m_sta_hfid_req_receive, (char *, m_sta_hfid, string))
+__mr (cp_msg_drv_sta_set_u_sta_hfid_req_receive, (char *, u_sta_hfid, string))
+__mr (cp_msg_drv_sta_set_avln_hfid_req_receive, (char *, avln_hfid, string))
+__mr (cp_msg_drv_sta_set_tonemask_req_receive, (u32 *, tonemask, tonemask))
+__mr (cp_msg_drv_sta_mac_start_req_receive)
+__mr (cp_msg_drv_sta_mac_stop_req_receive)
+__mr (cp_msg_drv_sta_sc_req_receive, (bool, sc_join, assign))
+__mr (cp_msg_drv_sta_set_key_req_receive, (cp_key_t, nmk, assign),
+ (enum cp_msg_drv_sta_set_key_type_t, type, assign),
+ (cp_nid_t, nid, assign),
+ (cp_security_level_t, sl, assign))
+__ms (cp_msg_drv_sta_set_key_ind_send,
+ (cp_key_t, nmk, key),
+ (enum cp_msg_drv_sta_set_key_type_t, type, assign),
+ (cp_nid_t, nid, assign),
+ (cp_security_level_t, sl, assign))
+__mr (cp_msg_drv_sta_set_dak_req_receive, (cp_key_t, dak, assign))
+__ms (cp_msg_drv_any_cnf_send,
+ (mmtype_t, mmtype, assign),
+ (cp_msg_drv_result_t, result, assign))
+__mr (cp_msg_drv_sta_get_key_req_receive)
+__msd (cp_msg_drv_sta_get_key_cnf_send, cp_msg_drv_sta_get_key_t,
+ (uint, result, assign),
+ (cp_key_t, nmk, key),
+ (cp_nid_t, nid, assign),
+ (cp_security_level_t, sl, assign))
+__mr (cp_msg_drv_sta_status_req_receive)
+__msd (cp_msg_drv_sta_status_cnf_send, cp_msg_drv_sta_status_cnf_t,
+ (uint, result, assign),
+ (cp_msg_drv_sta_status_status_t, (status, status), sub_assign),
+ (cp_msg_drv_sta_status_cco_t, (cco, status), sub_assign),
+ (bool, (preferred_cco, status), sub_assign),
+ (bool, (backup_cco, status), sub_assign),
+ (bool, (simple_connect, status), sub_assign),
+ (bsu_aclf_frequency_t, (pwl_sync_frequency, status), sub_assign))
+__msd (cp_msg_drv_sta_status_ind_send, cp_msg_drv_sta_status_t,
+ (cp_msg_drv_sta_status_status_t, status, assign),
+ (cp_msg_drv_sta_status_cco_t, cco, assign),
+ (bool, preferred_cco, assign),
+ (bool, backup_cco, assign),
+ (bool, simple_connect, assign),
+ (bsu_aclf_frequency_t, pwl_sync_frequency, assign))
+__mr (cp_msg_drv_sta_set_config_req_receive,
+ (char *, config, string))
+__msd (cp_msg_cc_assoc_req_send, cp_msg_cc_assoc_req_t,
+ (enum cp_msg_cc_assoc_req_type_t, request_type, assign),
+ (cp_nid_t, nid, assign),
+ (u8, cco_cap, assign),
+ (u8, proxy_cap, assign))
+__mrd (cp_msg_cc_assoc_cnf_receive, cp_msg_cc_assoc_cnf_t,
+ (enum cp_msg_cc_assoc_cnf_result_t *, result, assign),
+ (cp_nid_t, nid, assign),
+ (cp_snid_t, snid, assign),
+ (cp_tei_t, sta_tei, assign),
+ (u16, lease_time_min, assign))
+__mr (cp_msg_cc_leave_ind_receive,
+ (enum cp_msg_cc_leave_ind_reason_t, reason, assign),
+ (cp_nid_t, nid, assign))
+__ms (cp_msg_cc_leave_rsp_send)
+__msk (cp_msg_cm_get_key_req_send, cp_msg_cm_get_key_req_t,
+ (bool, relayed, assign),
+ (enum cp_msg_key_type_t, key_type, assign),
+ (cp_nid_t, nid, assign),
+ (u32 *, hash_key, hash_key))
+__mrk (cp_msg_cm_get_key_cnf_receive, cp_msg_cm_get_key_cnf_t,
+ (enum cp_msg_cm_get_key_cnf_result_t, result, assign),
+ (enum cp_msg_key_type_t, key_type, assign),
+ (cp_nid_t, nid, assign),
+ (u8, eks, assign),
+ (u32 *, hash_key, hash_key),
+ (cp_key_t, key, assign_deref))
+__mr (cp_msg_vs_eoc_cco_get_info_req_receive,
+ (u8, internal_eoc_index, assign),
+ (u8, control, assign))
+__ms (cp_msg_vs_eoc_cco_get_info_cnf_send,
+ (cp_msg_vs_eoc_get_info_req_result_t, status, assign),
+ (u16, tei, assign),
+ (s8, attenuation, assign),
+ (u8, snr, assign),
+ (u16, phy_uplink_speed, assign),
+ (u16, phy_downlink_speed, assign),
+ (u8, output_power, assign),
+ (u32, tx_success_counter, assign),
+ (u32, tx_crc_error_counter, assign),
+ (u32, tx_other_error_counter, assign),
+ (u32, rx_success_counter, assign),
+ (u32, rx_crc_error_counter, assign),
+ (u32, rx_other_error_counter, assign))
+__mr (cp_msg_vs_eoc_cco_diagnostic_info_req_receive,
+ (u8, internal_eoc_index, assign),
+ (u8, control, assign))
+__ms (cp_msg_vs_eoc_cco_diagnostict_info_cnf_send,
+ (cp_msg_vs_eoc_diagnostic_info_req_result_t, status, assign),
+ (u8, assoc_stat, assign),
+ (u64, nid, assign),
+ (u8, num_slots, assign),
+ (mac_t, he_mac_address, assign),
+ (u16, est_avg_phy_rate, assign),
+ (u8, num_good_assoc_auth, assign),
+ (u16, num_bad_could_not_assoc, assign),
+ (u32, num_bad_assoc_failure, assign),
+ (u32, num_bad_could_not_auth, assign),
+ (u32, num_leave, assign))
+__mr (cp_msg_vs_eoc_cco_get_real_time_stats_req_receive,
+ (u8, control, assign))
+__ms (cp_msg_vs_eoc_cco_get_real_time_stats_cnf_send,
+ (cp_msg_vs_eoc_get_real_time_statistics_req_result_t, status, assign),
+ (real_time_stats_t *, rt_stats, assign))
+__mr (cp_msg_eoc_sta_vs_set_out_lev_ind_receive,
+ (uint, output_level, assign))
+__ms (cp_msg_vs_eoc_cco_set_out_lev_ind_send,
+ (uint, output_level, assign))
+
+__mr (cp_msg_vs_get_attenuation_list_req_receive)
+__mscb (cp_msg_vs_get_attenuation_list_cnf_send_begin,
+ (uint, nb, assign))
+__msc (cp_msg_vs_get_attenuation_list_cnf_send_entry,
+ (mac_t, mac, assign),
+ (cp_tei_t, tei, assign),
+ (vs_get_attenuation_list_att_status_t, status, assign),
+ (s8, attenuation_db, assign))
+__msc (cp_msg_vs_get_attenuation_list_cnf_send_end)
diff --git a/cesar/cp/eoc/sta/action/test/utest_eoc/src/scenario_actions.c b/cesar/cp/eoc/sta/action/test/utest_eoc/src/scenario_actions.c
new file mode 100644
index 0000000000..94e2d9ced6
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/test/utest_eoc/src/scenario_actions.c
@@ -0,0 +1,171 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/scenario_actions.c
+ * \brief Scenario actions.
+ * \ingroup test
+ */
+#include "common/std.h"
+
+#include "cp/eoc/sta/action/action.h"
+
+#include "lib/scenario/scenario.h"
+
+#define __m(ACTION) \
+void \
+scenario_action_ ## ACTION ## _cb (scenario_globals_t *globals, \
+ scenario_params_t *params) \
+{ \
+ static cp_mme_rx_t mme; \
+ mme.peer = params->action_ ## ACTION.peer; \
+ mme.peks = CP_MME_PEKS_SPC_NOT_EMBEDDED; \
+ cp_sta_action_ ## ACTION (globals->cp, &mme); \
+}
+
+#define __m_av(ACTION) \
+void \
+scenario_action_ ## ACTION ## _cb (scenario_globals_t *globals, \
+ scenario_params_t *params) \
+{ \
+ static cp_mme_rx_t mme; \
+ mme.peer = params->action_ ## ACTION.peer; \
+ mme.peks = CP_MME_PEKS_SPC_NOT_EMBEDDED; \
+ cp_av_sta_action_ ## ACTION (globals->cp, &mme); \
+}
+
+#define __m_eoc(ACTION) \
+void \
+scenario_action_ ## ACTION ## _cb (scenario_globals_t *globals, \
+ scenario_params_t *params) \
+{ \
+ static cp_mme_rx_t mme; \
+ mme.peer = params->action_ ## ACTION.peer; \
+ mme.peks = CP_MME_PEKS_SPC_NOT_EMBEDDED; \
+ cp_eoc_sta_action_ ## ACTION (globals->cp, &mme); \
+}
+
+#define __mp(ACTION) \
+void \
+scenario_action_ ## ACTION ## _cb (scenario_globals_t *globals, \
+ scenario_params_t *params) \
+{ \
+ static cp_mme_rx_t mme; \
+ mme.peer = params->action_ ## ACTION.peer; \
+ mme.prun.pid = params->action_ ## ACTION.pid; \
+ mme.peks = CP_MME_PEKS_SPC_NOT_EMBEDDED; \
+ cp_sta_action_ ## ACTION (globals->cp, &mme); \
+}
+
+#define __me(ACTION) \
+void \
+scenario_action_ ## ACTION ## _cb (scenario_globals_t *globals, \
+ scenario_params_t *params) \
+{ \
+ static cp_mme_rx_t mme; \
+ mme.peer = params->action_ ## ACTION.peer; \
+ mme.encrypt = params->action_ ## ACTION.encrypt; \
+ cp_sta_action_ ## ACTION (globals->cp, &mme); \
+}
+
+#define __0(ACTION) \
+void \
+scenario_action_ ## ACTION ## _cb (scenario_globals_t *globals, \
+ scenario_params_t *params) \
+{ \
+ cp_sta_action_ ## ACTION (globals->cp); \
+}
+
+#define __0_av(ACTION) \
+void \
+scenario_action_ ## ACTION ## _cb (scenario_globals_t *globals, \
+ scenario_params_t *params) \
+{ \
+ cp_av_sta_action_ ## ACTION (globals->cp); \
+}
+
+#define __0_eoc(ACTION) \
+ void \
+scenario_action_ ## ACTION ## _cb (scenario_globals_t *globals, \
+ scenario_params_t *params) \
+{ \
+ cp_eoc_sta_action_ ## ACTION (globals->cp); \
+}
+
+#define __n(ACTION, PARAMS...) \
+void \
+scenario_action_ ## ACTION ## _cb (scenario_globals_t *globals, \
+ scenario_params_t *params) \
+{ \
+ scenario_action_ ## ACTION ## _t *p = &params->action_ ## ACTION; \
+ cp_sta_action_ ## ACTION (globals->cp \
+ PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, \
+ __n_args, ## PARAMS) \
+ ); \
+}
+
+#define __n_av(ACTION, PARAMS...) \
+void \
+scenario_action_ ## ACTION ## _cb (scenario_globals_t *globals, \
+ scenario_params_t *params) \
+{ \
+ scenario_action_ ## ACTION ## _t *p = &params->action_ ## ACTION; \
+ cp_av_sta_action_ ## ACTION (globals->cp \
+ PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, \
+ __n_args, ## PARAMS) \
+ ); \
+}
+
+#define __n_eoc(ACTION, PARAMS...) \
+void \
+scenario_action_ ## ACTION ## _cb (scenario_globals_t *globals, \
+ scenario_params_t *params) \
+{ \
+ scenario_action_ ## ACTION ## _t *p = &params->action_ ## ACTION; \
+ cp_eoc_sta_action_ ## ACTION (globals->cp \
+ PREPROC_FOR_EACH_PARAM (PREPROC_CALL_UNPACK, \
+ __n_args, ## PARAMS) \
+ ); \
+}
+
+#define __n_args(TYPE, PARAM) \
+ , p->PARAM
+
+__m (drv__stopped__drv_sta_set_mac_addr_req)
+__m (drv__stopped__drv_sta_set_cco_pref_req)
+__m (drv__stopped__drv_sta_set_was_cco_req)
+__m (drv__stopped__drv_sta_set_dpw_req)
+__m (drv__stopped__drv_sta_set_npw_req)
+__m (drv__stopped__drv_sta_set_sl_req)
+__m (drv__stopped__drv_sta_set_nid_req)
+__m (drv__stopped__drv_sta_set_m_sta_hfid_req)
+__m (drv__stopped__drv_sta_set_u_sta_hfid_req)
+__m (drv__stopped__drv_sta_set_avln_hfid_req)
+__m (drv__stopped__drv_sta_set_tonemask_req)
+__m (drv__stopped__drv_sta_mac_start_req)
+__m (drv__started__drv_sta_mac_stop_req)
+__m (drv__stopped__drv_sta_set_key_req)
+__m (drv__stopped__drv_sta_set_dak_req)
+__0 (drv__stopping__stopped)
+__m (drv__drv_sta_get_key_req)
+__m (drv__drv_sta_status_req)
+__m (drv__drv_sta_set_config_req)
+
+__n_eoc (detect__beacon_received,
+ (bsu_beacon_t *, beacon),
+ (cp_net_t *, net),
+ (cp_sta_t *, sta))
+__0_eoc (assoc__detecting_no_beacons)
+__0_eoc (assoc__detecting_detected)
+__m_eoc (assoc__associating_cnf)
+__0_eoc (assoc__associating_timeout)
+__0_eoc (assoc__associating_no_beacons)
+__m_eoc (assoc__associated_key_cnf)
+__0_eoc (assoc__associated_no_beacons)
+__0_eoc (assoc__associated_timeout)
+__m_eoc (assoc__associated_leave)
+__m_eoc (auth__authenticated_key_cnf)
diff --git a/cesar/cp/eoc/sta/action/test/utest_eoc/src/secu.c b/cesar/cp/eoc/sta/action/test/utest_eoc/src/secu.c
new file mode 100644
index 0000000000..d053072477
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/test/utest_eoc/src/secu.c
@@ -0,0 +1,52 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2009 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/secu.c
+ * \brief Secu stubs.
+ * \ingroup cp_eoc_sta_action
+ */
+#include "common/std.h"
+#include "cp/secu/secu.h"
+
+void
+cp_secu_protocol_run_new (cp_secu_protocol_run_t *prun, u8 pid,
+ lib_rnd_t *rnd)
+{
+ memset (prun, 0, sizeof (cp_secu_protocol_run_t));
+ prun->pmn = 1;
+ prun->pid = pid;
+ prun->prn = lib_rnd32 (rnd);
+ prun->my_nonce = lib_rnd32 (rnd);
+}
+
+void
+cp_secu_protocol_next (cp_secu_protocol_run_t *prun, lib_rnd_t *rnd,
+ bool last)
+{
+ dbg_assert (prun);
+ dbg_assert (rnd);
+ if (prun->pmn == 1)
+ prun->my_nonce = lib_rnd32 (rnd);
+ if (last)
+ prun->pmn = 0xff;
+ else
+ {
+ dbg_assert (prun->pmn != 0xff);
+ prun->pmn++;
+ }
+}
+
+bool
+cp_secu_protocol_check (const cp_secu_protocol_run_t *prun,
+ const cp_secu_protocol_run_t *prun_recv,
+ const cp_secu_protocol_run_check_result_t expected_result)
+{
+ dbg_assert (prun_recv);
+ return true;
+}
+
diff --git a/cesar/cp/eoc/sta/action/test/utest_eoc/src/test_sta_action.c b/cesar/cp/eoc/sta/action/test/utest_eoc/src/test_sta_action.c
new file mode 100644
index 0000000000..3481cb0e37
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/test/utest_eoc/src/test_sta_action.c
@@ -0,0 +1,123 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/test_sta_action.c
+ * \brief Test sta/action.
+ * \ingroup test
+ */
+#include "common/std.h"
+
+#include "inc/test_sta_action.h"
+
+#include "lib/test.h"
+
+#include "mac/common/store.h"
+
+blk_t nsr_block;
+
+void
+assoc_test_suite (test_t t);
+
+void
+drv_test_suite (test_t t);
+
+void
+test_sta_action_init (test_sta_action_t *ctx)
+{
+#if CONFIG_TRACE
+ static trace_namespace_t namespace;
+ trace_buffer_add (&ctx->cp.trace, "cp", 8, 1, false, &namespace);
+#endif
+ memset (ctx, 0, sizeof (test_sta_action_t));
+ lib_rnd_init (&ctx->cp.rnd, 1234);
+ ctx->cp.mac_config = &ctx->mac_config;
+ ctx->cp.mac_store = mac_store_init ();
+ ctx->cp.sar = (void *) &ctx->cp;
+ ctx->cp.pbproc = NULL;
+ ctx->cp.cl = INVALID_PTR;
+ ctx->cp.bsu_aclf = &ctx->bsu_aclf;
+ cp_sta_mgr_init (&ctx->cp);
+}
+
+void
+test_sta_action_mfs_remove (mac_store_t *mac_store, mfs_t *mfs, void *user)
+{
+ mac_store_mfs_remove (mac_store, mfs);
+}
+
+void
+test_sta_action_uninit (test_sta_action_t *ctx)
+{
+ cp_sta_mgr_uninit (&ctx->cp);
+ /* Remove all the stations from the store. */
+ uint tei;
+ for (tei = MAC_TEI_STA_MIN; tei <= MAC_TEI_STA_MAX; tei++)
+ {
+ sta_t *sta = mac_store_sta_get (ctx->cp.mac_store, tei);
+ if (sta)
+ {
+ mac_store_mfs_travel_by_tei (ctx->cp.mac_store, tei,
+ test_sta_action_mfs_remove,
+ ctx);
+ dbg_check (mac_store_sta_remove (ctx->cp.mac_store, tei));
+ }
+ }
+ mac_store_mfs_travel (ctx->cp.mac_store, test_sta_action_mfs_remove, ctx);
+ mac_store_uninit (ctx->cp.mac_store);
+#if CONFIG_TRACE
+ trace_buffer_remove (&ctx->cp.trace);
+#endif
+}
+
+void
+test_sta_action_reset (test_sta_action_t *ctx)
+{
+ cp_sta_mgr_uninit (&ctx->cp);
+ cp_sta_mgr_init (&ctx->cp);
+}
+
+void
+test_sta_action_create_our_net (test_sta_action_t *ctx, cp_nid_t nid,
+ cp_snid_t snid)
+{
+ cp_t *cp = &ctx->cp;
+ cp_sta_own_data_set_nid (cp, nid);
+ cp_sta_own_data_set_snid (cp, snid);
+ cp_net_t *our_net = cp_sta_mgr_add_avln (cp, snid, nid);
+ cp_sta_mgr_set_our_avln (cp, our_net);
+}
+
+void
+test_sta_action_beacon_create (
+ bsu_beacon_t *beacon, cp_nid_t nid, cp_snid_t snid, cp_tei_t stei,
+ mac_t mac)
+{
+ memset (beacon, 0, sizeof (bsu_beacon_t));
+ beacon->vf.bt = BSU_BEACON_TYPE_CENTRAL;
+ beacon->vf.nid = nid;
+ beacon->params.rx_parameters.snid = snid;
+ beacon->vf.stei = stei;
+ beacon->bmis.mac_address.present = MAC_IS_VALID (mac);
+ beacon->bmis.mac_address.mac_address = mac;
+}
+
+int
+main (int argc, char **argv)
+{
+ test_t t;
+ test_init (t, argc, argv);
+ trace_init ();
+ lib_stats_init ();
+ drv_test_suite (t);
+ assoc_test_suite (t);
+ lib_stats_uninit ();
+ trace_uninit ();
+ test_result (t);
+ return test_nb_failed (t) == 0 ? 0 : 1;
+}
+
diff --git a/cesar/cp/eoc/sta/action/vs.h b/cesar/cp/eoc/sta/action/vs.h
new file mode 100644
index 0000000000..a8b2c5c95d
--- /dev/null
+++ b/cesar/cp/eoc/sta/action/vs.h
@@ -0,0 +1,38 @@
+#ifndef cp_eoc_sta_action_vs_h
+#define cp_eoc_sta_action_vs_h
+/* Cesar-EoC project {{{
+ *
+ * Copyright (C) 2009 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/sta/action/vs.h
+ * \brief sta action, Vendor Specific EoC MME related prototypes.
+ * \ingroup cp_eoc_sta_action
+ */
+#include "cp/cp.h"
+#include "cp/mme.h"
+
+/** Forward declaration. */
+typedef struct real_time_stats_t real_time_stats_t;
+
+BEGIN_DECLS
+
+void
+cp_eoc_sta_action_vs__vs_eoc_get_info_req (
+ cp_t *ctx, cp_mme_rx_t *mme);
+
+void
+cp_eoc_sta_action_vs__vs_eoc_diagnostic_info_req (
+ cp_t *ctx, cp_mme_rx_t *mme);
+
+void
+cp_eoc_sta_action_vs__vs_eoc_get_real_time_statistics_req (
+ cp_t *ctx, cp_mme_rx_t *mme);
+
+
+END_DECLS
+
+#endif /* cp_eoc_sta_action_vs_h */
diff --git a/cesar/cp/eoc/sta/mgr/Config b/cesar/cp/eoc/sta/mgr/Config
new file mode 100644
index 0000000000..b61f26f167
--- /dev/null
+++ b/cesar/cp/eoc/sta/mgr/Config
@@ -0,0 +1 @@
+CONFIG_CP_STA_MGR_CCO_EOC = n
diff --git a/cesar/cp/eoc/sta/mgr/Module b/cesar/cp/eoc/sta/mgr/Module
new file mode 100644
index 0000000000..ae884c7de9
--- /dev/null
+++ b/cesar/cp/eoc/sta/mgr/Module
@@ -0,0 +1,3 @@
+SOURCES := sta_mgr.c sta_own_data.c
+
+MODULES := cp/sta/mgr
diff --git a/cesar/cp/eoc/sta/mgr/doc/sta_manager.odt b/cesar/cp/eoc/sta/mgr/doc/sta_manager.odt
new file mode 100644
index 0000000000..63c28efa0f
--- /dev/null
+++ b/cesar/cp/eoc/sta/mgr/doc/sta_manager.odt
Binary files differ
diff --git a/cesar/cp/eoc/sta/mgr/doc/sta_mgr.xmi b/cesar/cp/eoc/sta/mgr/doc/sta_mgr.xmi
new file mode 100644
index 0000000000..000727a5bc
--- /dev/null
+++ b/cesar/cp/eoc/sta/mgr/doc/sta_mgr.xmi
@@ -0,0 +1,1832 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<XMI xmlns:UML="http://schema.omg.org/spec/UML/1.3" verified="false" timestamp="2008-11-13T17:12:40" xmi.version="1.2" >
+ <XMI.header>
+ <XMI.documentation>
+ <XMI.exporter>umbrello uml modeller http://uml.sf.net</XMI.exporter>
+ <XMI.exporterVersion>1.5.5</XMI.exporterVersion>
+ <XMI.exporterEncoding>UnicodeUTF8</XMI.exporterEncoding>
+ </XMI.documentation>
+ <XMI.metamodel xmi.name="UML" href="UML.xml" xmi.version="1.3" />
+ </XMI.header>
+ <XMI.content>
+ <UML:Model isSpecification="false" isLeaf="false" isRoot="false" xmi.id="m1" isAbstract="false" name="Modèle UML" >
+ <UML:Namespace.ownedElement>
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="folder" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="datatype" isRoot="false" isAbstract="false" name="datatype" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="enum" isRoot="false" isAbstract="false" name="enum" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="folder" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="datatype" isRoot="false" isAbstract="false" name="datatype" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="enum" isRoot="false" isAbstract="false" name="enum" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="folder" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="datatype" isRoot="false" isAbstract="false" name="datatype" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="enum" isRoot="false" isAbstract="false" name="enum" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="folder" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="datatype" isRoot="false" isAbstract="false" name="datatype" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="enum" isRoot="false" isAbstract="false" name="enum" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="folder" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="datatype" isRoot="false" isAbstract="false" name="datatype" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="enum" isRoot="false" isAbstract="false" name="enum" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="folder" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="datatype" isRoot="false" isAbstract="false" name="datatype" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="enum" isRoot="false" isAbstract="false" name="enum" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="folder" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="datatype" isRoot="false" isAbstract="false" name="datatype" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="enum" isRoot="false" isAbstract="false" name="enum" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="folder" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="datatype" isRoot="false" isAbstract="false" name="datatype" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="enum" isRoot="false" isAbstract="false" name="enum" />
+ <UML:Model stereotype="2" isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="Logical View" isRoot="false" isAbstract="false" name="Logical View" >
+ <UML:Namespace.ownedElement>
+ <UML:Package stereotype="2" isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="Datatypes" isRoot="false" isAbstract="false" name="Datatypes" >
+ <UML:Namespace.ownedElement>
+ <UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="WHsGhr6cL3qV" isRoot="false" isAbstract="false" name="int" />
+ <UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="1lLAIoXrLdtJ" isRoot="false" isAbstract="false" name="char" />
+ <UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="BsXuVmQldfSS" isRoot="false" isAbstract="false" name="bool" />
+ <UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="l2nnsImcbvsP" isRoot="false" isAbstract="false" name="float" />
+ <UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="Shk6a1xmtUeN" isRoot="false" isAbstract="false" name="double" />
+ <UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="G46rjYKTY5EP" isRoot="false" isAbstract="false" name="short" />
+ <UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="O01xtrLMY3S6" isRoot="false" isAbstract="false" name="long" />
+ <UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="5NqwrUH5XNxE" isRoot="false" isAbstract="false" name="unsigned int" />
+ <UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="tFhSKvrguqen" isRoot="false" isAbstract="false" name="unsigned short" />
+ <UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="hz7D2ZH5u80l" isRoot="false" isAbstract="false" name="unsigned long" />
+ <UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="aHp7fmMY11yJ" isRoot="false" isAbstract="false" name="string" />
+ <UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="vntVp1gw0ZB8" isRoot="false" isAbstract="false" name="cp_reassembly_ctx_t *" elementReference="nyW3ZjsRDxWm" />
+ <UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="oZHHg64PKBaq" isRoot="false" isAbstract="false" name="uint" />
+ <UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="DcaQZXHCYAUY" isRoot="false" isAbstract="false" name="cp_sta_t *" />
+ <UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="nnvOyvzkSE17" isRoot="false" isAbstract="false" name="u8" />
+ <UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="J5WdE6USg2qD" isRoot="false" isAbstract="false" name="u16" />
+ <UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="X7Q5Iud3fXPb" isRoot="false" isAbstract="false" name="u32" />
+ <UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="QPMsbNxuTUYh" isRoot="false" isAbstract="false" name="u64" />
+ <UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="TRzc3eNXqLr1" isRoot="false" isAbstract="false" name="cp_net_t *" />
+ <UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="Q4TYO2bRfXJq" isRoot="false" isAbstract="false" name="mac_t" />
+ <UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="RTeIWtKTDaZV" isRoot="false" isAbstract="false" name="cp_reassembly_ctx_t" />
+ <UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="yVCl3jm3PB1C" isRoot="false" isAbstract="false" name="cp_sta_own_data_t *" />
+ <UML:DataType stereotype="datatype" comment="This value is equal to 8 bytes." isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="sXqfrqwPid2x" isRoot="false" isAbstract="false" name="NPW_MIN_SIZE" />
+ <UML:DataType stereotype="datatype" comment="NPW max size. 64 bytes." isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="ZsN7qO5uod0W" isRoot="false" isAbstract="false" name="NPW_MAX_SIZE" />
+ <UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="LyzcKuBtjfar" isRoot="false" isAbstract="false" name="u8 *" />
+ <UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="2TKfUnESr7J6" isRoot="false" isAbstract="false" name="const u8 *" />
+ <UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="bdvfq1CcRFQV" isRoot="false" isAbstract="false" name="const u8" />
+ <UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="cignRXiUIpXF" isRoot="false" isAbstract="false" name="cp_net_list_t *" elementReference="nyW3ZjsRDxWm" />
+ <UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="nyW3ZjsRDxWm" isRoot="false" isAbstract="false" name="undef" />
+ <UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="OF2Sin3o242W" isRoot="false" isAbstract="false" name="set_t" />
+ <UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="6agIp7Rg7jXE" isRoot="false" isAbstract="false" name="cp_sta_mgr_t *" />
+ <UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="EhNquCdzHTzv" isRoot="false" isAbstract="false" name="cp_key_t" />
+ <UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="GXVTJzZt05VA" isRoot="false" isAbstract="false" name="cp_key_t *" />
+ <UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="F0y42ZDGGZ49" isRoot="false" isAbstract="false" name="const cp_key_t *" />
+ <UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="NMq7yPI15TF8" isRoot="false" isAbstract="false" name="const char" />
+ <UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="8MlMJZOa2gQQ" isRoot="false" isAbstract="false" name="const char *" />
+ <UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="m7hYSy5qW7Uv" isRoot="false" isAbstract="false" name="cp_t *" />
+ <UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="0mEev7QHu3Xw" isRoot="false" isAbstract="false" name="cp_snid_t" />
+ <UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="f1lxWwdNwvpr" isRoot="false" isAbstract="false" name="cp_nid_t" />
+ <UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="emAuInlIaxvV" isRoot="false" isAbstract="false" name="cp_tei_t" />
+ <UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="15653" isRoot="false" isAbstract="false" name="cp_mme_peer_t *" />
+ <UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="12443" isRoot="false" isAbstract="false" name="list_t" />
+ <UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="21195" isRoot="false" isAbstract="false" name="const cp_key_t" />
+ <UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="33858" isRoot="false" isAbstract="false" name="set_t" />
+ </UML:Namespace.ownedElement>
+ </UML:Package>
+ <UML:Class comment="Station own data." isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="dQQc692tOFUS" isRoot="false" isAbstract="false" name="cp_sta_own_data_t" >
+ <UML:Classifier.feature>
+ <UML:Attribute comment="station's TEI." isSpecification="false" visibility="private" xmi.id="hcbUh4JlIu5E" type="emAuInlIaxvV" name="tei" />
+ <UML:Attribute comment="Station's Mac address." isSpecification="false" visibility="private" xmi.id="MyhwT7zZG8oO" type="Q4TYO2bRfXJq" name="mac_addr" />
+ <UML:Attribute comment="Network Password, use by the station to crypt MMEs." isSpecification="false" visibility="private" xmi.id="x5HJsnaGxZDg" type="1lLAIoXrLdtJ" name="npw [NPW_MAX_SIZE + 1]" />
+ <UML:Attribute comment="AVLN's NMK." isSpecification="false" visibility="private" xmi.id="RrbeL3wI6BZy" type="EhNquCdzHTzv" name="nmk" />
+ <UML:Attribute comment="Device password." isSpecification="false" visibility="private" xmi.id="I16y7R8xSEes" type="1lLAIoXrLdtJ" name="dpw [DPW_MAX_SIZE + 1]" />
+ <UML:Attribute comment="Indicate if the station was CCo during the last use." isSpecification="false" visibility="private" xmi.id="VZjK8y2Pz9L4" type="BsXuVmQldfSS" name="was_cco" />
+ <UML:Attribute comment="Indicate if the station is CCo." isSpecification="false" visibility="private" xmi.id="20601" type="BsXuVmQldfSS" name="is_cco" />
+ <UML:Attribute comment="Security level. It can be changed by a specific message or by the HLE. See section 7.10.3.1.3 and section 13.3" isSpecification="false" visibility="private" xmi.id="0grlCK0Zd2kv" type="SsuRPlPUGZjG" name="security_level" />
+ <UML:Attribute comment="The PCO Glid." isSpecification="false" visibility="private" xmi.id="roOeP5mqSzsY" type="nnvOyvzkSE17" name="pco_glid" />
+ <UML:Attribute comment="Indicate if the station is authenticated or not." isSpecification="false" visibility="private" xmi.id="20651" type="1lLAIoXrLdtJ" name="authenticated" />
+ <UML:Attribute comment="The Station NID." isSpecification="false" visibility="private" xmi.id="20701" type="f1lxWwdNwvpr" name="nid" />
+ <UML:Attribute comment="The station SNID." isSpecification="false" visibility="private" xmi.id="20751" type="0mEev7QHu3Xw" name="snid" />
+ <UML:Attribute comment="Indicate if the station was CCo prefered." isSpecification="false" visibility="public" xmi.id="TO2c4YFuL4qQ" type="BsXuVmQldfSS" name="cco_prefered" />
+ <UML:Attribute comment="The user HFID." isSpecification="false" visibility="public" xmi.id="Rxzl1nBWMvpT" type="NMq7yPI15TF8" name="hfid_user [HFID_SIZE + 1]" />
+ <UML:Attribute comment="The manufacturer HFID." isSpecification="false" visibility="public" xmi.id="gBfRCRdglWVE" type="NMq7yPI15TF8" name="hfid_manufacturer [HFID_SIZE + 1]" />
+ <UML:Attribute comment="The AVLN HFID." isSpecification="false" visibility="public" xmi.id="3951" type="NMq7yPI15TF8" name="hfid_avln[HFID_SIZE + 1]" />
+ <UML:Attribute comment="Current hybrid mode." isSpecification="false" visibility="public" xmi.id="xAmypZKxOlvo" type="nnvOyvzkSE17" name="hybrid_mode" />
+ <UML:Attribute comment="The current snid being tracked for the ntb synchronization." isSpecification="false" visibility="public" xmi.id="919bTPKjqxKs" type="0mEev7QHu3Xw" name="snid_track" />
+ <UML:Attribute comment="The current nid being track for the ntb synchronization." isSpecification="false" visibility="public" xmi.id="MW7N3XqbJLli" type="f1lxWwdNwvpr" name="nid_track" />
+ <UML:Attribute comment="The PCo to discuss with." isSpecification="false" visibility="public" xmi.id="aTEnETRcBPSB" type="DcaQZXHCYAUY" name="pco" />
+ <UML:Operation comment="Initialise the station own data to default values." isSpecification="false" isLeaf="false" visibility="public" xmi.id="l9iApQ5k7p4V" isRoot="false" isAbstract="false" isQuery="false" name="init" />
+ <UML:Operation comment="Unitialise the station own data to default values." isSpecification="false" isLeaf="false" visibility="public" xmi.id="20899" isRoot="false" isAbstract="false" isQuery="false" name="uninit" />
+ <UML:Operation comment="Set the TEI of the station." isSpecification="false" isLeaf="false" visibility="public" xmi.id="PNzGVGMN7IZO" isRoot="false" isAbstract="false" isQuery="false" name="set_tei" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter comment="The the TEI station." isSpecification="false" visibility="private" xmi.id="IChxmt614D8Y" value="" type="emAuInlIaxvV" name="tei" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Get the value of the constante TEI." isSpecification="false" isLeaf="false" visibility="public" xmi.id="oS3q3CNSaLg5" isRoot="false" isAbstract="false" isQuery="false" name="get_tei" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" xmi.id="36644" type="emAuInlIaxvV" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Set the station Mac address." isSpecification="false" isLeaf="false" visibility="public" xmi.id="9tv3PTcwJuk2" isRoot="false" isAbstract="false" isQuery="false" name="set_mac_address" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter comment="The Mac address of the station." isSpecification="false" visibility="private" xmi.id="GmJdTFwP5LIE" value="" type="Q4TYO2bRfXJq" name="mac_addr" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Get the station mac address." isSpecification="false" isLeaf="false" visibility="public" xmi.id="DbAcS8Pc1KdP" isRoot="false" isAbstract="false" isQuery="false" name="get_mac_address" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" xmi.id="36645" type="Q4TYO2bRfXJq" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Set the Station NPW." isSpecification="false" isLeaf="false" visibility="public" xmi.id="lEJ2633MpMzJ" isRoot="false" isAbstract="false" isQuery="false" name="set_npw" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter comment="The new npw." isSpecification="false" visibility="private" xmi.id="99dfWsqi6SFH" value="" type="8MlMJZOa2gQQ" name="npw" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Return the pointer to the NPW as a constante data. The user shall call the set_npw function to modify the NPW." isSpecification="false" isLeaf="false" visibility="public" xmi.id="bLozAc1Tby5t" isRoot="false" isAbstract="false" isQuery="false" name="get_npw" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" xmi.id="36646" type="8MlMJZOa2gQQ" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Set the station NMK." isSpecification="false" isLeaf="false" visibility="public" xmi.id="QacAXGqLr88z" isRoot="false" isAbstract="false" isQuery="false" name="set_nmk" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter comment="The nmk to set." isSpecification="false" visibility="private" xmi.id="V67Yq0lvqWek" value="" type="21195" name="nmk" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Get the NMK of the AVLN." isSpecification="false" isLeaf="false" visibility="public" xmi.id="XBpdlbprByih" isRoot="false" isAbstract="false" isQuery="false" name="get_nmk" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" xmi.id="36647" type="F0y42ZDGGZ49" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Set the device password." isSpecification="false" isLeaf="false" visibility="public" xmi.id="x2pgMFGxFwzE" isRoot="false" isAbstract="false" isQuery="false" name="set_dpw" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter comment="The new device password." isSpecification="false" visibility="private" xmi.id="K4OvTT41dteO" value="" type="8MlMJZOa2gQQ" name="dpw" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Return the Device password." isSpecification="false" isLeaf="false" visibility="public" xmi.id="YWiBOMZqmmSC" isRoot="false" isAbstract="false" isQuery="false" name="get_dpw" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" xmi.id="36648" type="8MlMJZOa2gQQ" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Set the security level. And send a message to the HLE." isSpecification="false" isLeaf="false" visibility="public" xmi.id="gkXbpZt9r3e4" isRoot="false" isAbstract="false" isQuery="false" name="set_security_level" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter comment="The security level." isSpecification="false" visibility="private" xmi.id="DPaRU282XpEv" value="" type="SsuRPlPUGZjG" name="sl" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Return the security level." isSpecification="false" isLeaf="false" visibility="public" xmi.id="Cgo2iS6vpgKJ" isRoot="false" isAbstract="false" isQuery="false" name="get_security_level" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" xmi.id="36649" type="SsuRPlPUGZjG" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Set the CCo status of the station. It shall send a message to the Linux Driver." isSpecification="false" isLeaf="false" visibility="public" xmi.id="4vv3FEH8vlii" isRoot="false" isAbstract="false" isQuery="false" name="set_was_cco" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter comment="The current CCo status of the station." isSpecification="false" visibility="private" xmi.id="ZoePxqjuXWU6" value="" type="BsXuVmQldfSS" name="status" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Get the the CCo status of the station after a reboot." isSpecification="false" isLeaf="false" visibility="public" xmi.id="h933zRw1Mr2a" isRoot="false" isAbstract="false" isQuery="false" name="get_was_cco" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" xmi.id="36650" type="BsXuVmQldfSS" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Set the HFID value." isSpecification="false" isLeaf="false" visibility="public" xmi.id="Z2pjniRb4U5p" isRoot="false" isAbstract="false" isQuery="false" name="set_hfid" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter comment="The HFID to set (user or manufacturer)." isSpecification="false" visibility="private" xmi.id="EuSjWJa3LNm8" value="" type="8MlMJZOa2gQQ" name="hfid" />
+ <UML:Parameter comment="The new HFID value to set." isSpecification="false" visibility="private" xmi.id="VAPcPDExC4vS" value="" type="8MlMJZOa2gQQ" name="data" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Set thenew User HFID in the station own data." isSpecification="false" isLeaf="false" visibility="public" xmi.id="6Di8flw9tLlH" isRoot="false" isAbstract="true" isQuery="false" name="set_hfid_user" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter comment="Set the new User HFID." isSpecification="false" visibility="private" xmi.id="YxEj17BGzexV" value="" type="8MlMJZOa2gQQ" name="data" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Set the new manufacturer HFID." isSpecification="false" isLeaf="false" visibility="public" xmi.id="xXWGuINyU377" isRoot="false" isAbstract="true" isQuery="false" name="set_hfid_manufacturer" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter comment="The new Manufacturer HFID." isSpecification="false" visibility="private" xmi.id="m3GgO0xwx9fz" value="" type="8MlMJZOa2gQQ" name="data" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Set the GLID to send proxy data." isSpecification="false" isLeaf="false" visibility="public" xmi.id="b2NRxvTAG4Im" isRoot="false" isAbstract="false" isQuery="false" name="set_pco_glid" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter comment="The glid to use when a proxy beacon shall be sent." isSpecification="false" visibility="private" xmi.id="QRFWIDV91tnP" value="" type="nnvOyvzkSE17" name="glid" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Get the PCO GLID." isSpecification="false" isLeaf="false" visibility="public" xmi.id="wXFOX5u66GX3" isRoot="false" isAbstract="false" isQuery="false" name="get_pco_glid" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" xmi.id="36651" type="nnvOyvzkSE17" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Get the PCO status." isSpecification="false" isLeaf="false" visibility="public" xmi.id="4DPM1C2ZHS5c" isRoot="false" isAbstract="false" isQuery="false" name="get_pco_status" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" xmi.id="36652" type="BsXuVmQldfSS" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Set the PCO status." isSpecification="false" isLeaf="false" visibility="public" xmi.id="tS98bISnuM92" isRoot="false" isAbstract="false" isQuery="false" name="set_pco_status" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter comment="The PCO status." isSpecification="false" visibility="private" xmi.id="es20nPIqcgCb" value="" type="BsXuVmQldfSS" name="pco" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Set the CCo status of the station." isSpecification="false" isLeaf="false" visibility="public" xmi.id="21441" isRoot="false" isAbstract="false" isQuery="false" name="set_cco_status" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter comment="The status." isSpecification="false" visibility="private" xmi.id="21442" value="" type="BsXuVmQldfSS" name="cco" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Get the CCo status of the station." isSpecification="false" isLeaf="false" visibility="public" xmi.id="21541" isRoot="false" isAbstract="false" isQuery="false" name="get_cco_status" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" xmi.id="36653" type="BsXuVmQldfSS" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Set the authenticated status." isSpecification="false" isLeaf="false" visibility="public" xmi.id="4536" isRoot="false" isAbstract="false" isQuery="false" name="set_authenticated_status" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter comment="The authenfication status." isSpecification="false" visibility="private" xmi.id="4537" value="" type="BsXuVmQldfSS" name="authenticated" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Get the authentication status." isSpecification="false" isLeaf="false" visibility="public" xmi.id="4636" isRoot="false" isAbstract="false" isQuery="false" name="get_authenticated_status" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" xmi.id="36654" type="BsXuVmQldfSS" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Update the station NID." isSpecification="false" isLeaf="false" visibility="public" xmi.id="21592" isRoot="false" isAbstract="false" isQuery="false" name="set_nid" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter comment="The station NID." isSpecification="false" visibility="private" xmi.id="21593" value="" type="f1lxWwdNwvpr" name="nid" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Get the sstation NID." isSpecification="false" isLeaf="false" visibility="public" xmi.id="21694" isRoot="false" isAbstract="false" isQuery="false" name="get_nid" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" xmi.id="36655" type="f1lxWwdNwvpr" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Update the station SNID." isSpecification="false" isLeaf="false" visibility="public" xmi.id="21746" isRoot="false" isAbstract="false" isQuery="false" name="set_snid" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter comment="The station NID." isSpecification="false" visibility="private" xmi.id="21747" value="" type="0mEev7QHu3Xw" name="snid" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Get the station SNID." isSpecification="false" isLeaf="false" visibility="public" xmi.id="21851" isRoot="false" isAbstract="false" isQuery="false" name="get_snid" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" xmi.id="36656" type="0mEev7QHu3Xw" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="L2ASUCoHdFZ0" isRoot="false" isAbstract="false" name="cp_sta_mgr_t" >
+ <UML:Classifier.feature>
+ <UML:Attribute comment="List of released station. Use to keep the TEI and the connection to finalise the leave of the station." isSpecification="false" visibility="private" xmi.id="12890" type="12443" name="release_sta_list" />
+ <UML:Attribute comment="A set containing all the stations added to the station manager sorted by the mac addresses." isSpecification="false" visibility="private" xmi.id="33908" type="OF2Sin3o242W" name="stas" />
+ <UML:Operation comment="Add a AVLN to the manager list." isSpecification="false" isLeaf="false" visibility="public" xmi.id="QXnrJp4mc3nZ" isRoot="false" isAbstract="false" isQuery="false" name="add_avln" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" xmi.id="36657" type="TRzc3eNXqLr1" />
+ <UML:Parameter comment="The AVLN's SNID to add." isSpecification="false" visibility="private" xmi.id="xXla9cfmTC0K" value="" type="0mEev7QHu3Xw" name="snid" />
+ <UML:Parameter comment="The AVLN's nid to add." isSpecification="false" visibility="private" xmi.id="Dq4iCYzb5lSM" value="" type="f1lxWwdNwvpr" name="nid" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Remove an AVLN," isSpecification="false" isLeaf="false" visibility="public" xmi.id="bxBBvbAGs7Q5" isRoot="false" isAbstract="false" isQuery="false" name="remove_avln" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter comment="The AVLN's snid to remove." isSpecification="false" visibility="private" xmi.id="CwB2Bb8CvUZS" value="" type="0mEev7QHu3Xw" name="snid" />
+ <UML:Parameter comment="The AVLN's nid to remove." isSpecification="false" visibility="private" xmi.id="c8bNpTbQOlcJ" value="" type="f1lxWwdNwvpr" name="nid" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Get an AVLN from the net_list." isSpecification="false" isLeaf="false" visibility="public" xmi.id="vk7FSeQIaeIS" isRoot="false" isAbstract="false" isQuery="false" name="get_avln" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" xmi.id="36658" type="TRzc3eNXqLr1" />
+ <UML:Parameter comment="The AVLN's snid to get." isSpecification="false" visibility="private" xmi.id="5KU6Vjz8WLNP" value="" type="0mEev7QHu3Xw" name="snid" />
+ <UML:Parameter comment="The AVLN's nid to get." isSpecification="false" visibility="private" xmi.id="Jy7i8GX3ycIR" value="" type="f1lxWwdNwvpr" name="nid" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Initialise the sta manager." isSpecification="false" isLeaf="false" visibility="public" xmi.id="qHxkg2dtESUh" isRoot="false" isAbstract="false" isQuery="false" name="init" />
+ <UML:Operation comment="Uninitialise the sta manager." isSpecification="false" isLeaf="false" visibility="public" xmi.id="2gQknmKqTzYm" isRoot="false" isAbstract="false" isQuery="false" name="uninit" />
+ <UML:Operation comment="Lookup and return all the snids already in use in the different AVLN. The return data is a flag of 16 bits. The bit0 corresponds to the the snid 0, the bit1 to the snid 1 and so on." isSpecification="false" isLeaf="false" visibility="public" xmi.id="DC8mABArXbfX" isRoot="false" isAbstract="false" isQuery="false" name="get_present_snids" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" xmi.id="36659" type="J5WdE6USg2qD" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Call all the sub garbage functions." isSpecification="false" isLeaf="false" visibility="public" xmi.id="MulJvMHR2JsJ" isRoot="false" isAbstract="false" isQuery="false" name="garbage" />
+ <UML:Operation comment="Returns a reference on our own station data." isSpecification="false" isLeaf="false" visibility="public" xmi.id="i2znmIk8bVQ3" isRoot="false" isAbstract="false" isQuery="false" name="get_sta_own_data" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" xmi.id="36660" type="yVCl3jm3PB1C" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Get the network slot usage." isSpecification="false" isLeaf="false" visibility="public" xmi.id="o7bH8l102RHc" isRoot="false" isAbstract="false" isQuery="false" name="get_slot_usage" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" xmi.id="36661" type="nnvOyvzkSE17" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Get the number of discovered stations." isSpecification="false" isLeaf="false" visibility="public" xmi.id="NDGrlwJSDY8B" isRoot="false" isAbstract="false" isQuery="false" name="get_num_discovered_sta" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" xmi.id="36662" type="nnvOyvzkSE17" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Get the number of discovered networks." isSpecification="false" isLeaf="false" visibility="public" xmi.id="HwdXOmbaswch" isRoot="false" isAbstract="false" isQuery="false" name="get_num_discovered_net" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" xmi.id="36663" type="nnvOyvzkSE17" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Get our AVLN network." isSpecification="false" isLeaf="false" visibility="public" xmi.id="5SqO4seTjRSa" isRoot="false" isAbstract="false" isQuery="false" name="get_our_avln" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" xmi.id="36664" type="TRzc3eNXqLr1" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Set our network." isSpecification="false" isLeaf="false" visibility="public" xmi.id="7000" isRoot="false" isAbstract="false" isQuery="false" name="set_our_avln" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter comment="The network to be considered as our." isSpecification="false" visibility="private" xmi.id="7001" value="" type="TRzc3eNXqLr1" name="net" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Move the station to the release list." isSpecification="false" isLeaf="false" visibility="public" xmi.id="7802" isRoot="false" isAbstract="false" isQuery="false" name="release_station" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter comment="The station's TEI." isSpecification="false" visibility="private" xmi.id="7803" value="" type="emAuInlIaxvV" name="tei" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Add a station to the station manager." isSpecification="false" isLeaf="false" visibility="public" xmi.id="34154" isRoot="false" isAbstract="false" isQuery="false" name="sta_add" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter comment="The station's AVLN." isSpecification="false" visibility="private" xmi.id="34255" value="" type="TRzc3eNXqLr1" name="net" />
+ <UML:Parameter comment="The station TEI." isSpecification="false" visibility="private" xmi.id="34155" value="" type="emAuInlIaxvV" name="tei" />
+ <UML:Parameter comment="The station mac address." isSpecification="false" visibility="private" xmi.id="34205" value="" type="Q4TYO2bRfXJq" name="mac_addr" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Removes the station." isSpecification="false" isLeaf="false" visibility="public" xmi.id="34599" isRoot="false" isAbstract="false" isQuery="false" name="sta_remove" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter comment="The station to remove." isSpecification="false" visibility="private" xmi.id="34847" value="" type="DcaQZXHCYAUY" name="sta" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Remove a station from the net by its TEI." isSpecification="false" isLeaf="false" visibility="public" xmi.id="34897" isRoot="false" isAbstract="false" isQuery="false" name="sta_remove_assoc" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter comment="The station's AVLN." isSpecification="false" visibility="private" xmi.id="34898" value="" type="TRzc3eNXqLr1" name="net" />
+ <UML:Parameter comment="The station's TEI." isSpecification="false" visibility="private" xmi.id="34948" value="" type="emAuInlIaxvV" name="tei" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Removes a station by its mac address.
+The commit to dataplane function shall be called if the station is in our AVLN." isSpecification="false" isLeaf="false" visibility="public" xmi.id="35047" isRoot="false" isAbstract="false" isQuery="false" name="sta_remove_from_mac" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter comment="The station mac address." isSpecification="false" visibility="private" xmi.id="35048" value="" type="Q4TYO2bRfXJq" name="mac_addr" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Get the associated station by its TEI in the net." isSpecification="false" isLeaf="false" visibility="public" xmi.id="35147" isRoot="false" isAbstract="false" isQuery="false" name="sta_get_assoc" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" xmi.id="36665" type="DcaQZXHCYAUY" />
+ <UML:Parameter comment="The station's Network." isSpecification="false" visibility="private" xmi.id="35148" value="" type="TRzc3eNXqLr1" name="net" />
+ <UML:Parameter comment="The station's TEI." isSpecification="false" visibility="private" xmi.id="35198" value="" type="emAuInlIaxvV" name="tei" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Get the station using its mac address.
+If no station found, NULL value returned." isSpecification="false" isLeaf="false" visibility="public" xmi.id="35298" isRoot="false" isAbstract="false" isQuery="false" name="sta_get_from_mac" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" xmi.id="36666" type="DcaQZXHCYAUY" />
+ <UML:Parameter comment="The station's mac address." isSpecification="false" visibility="private" xmi.id="35299" value="" type="Q4TYO2bRfXJq" name="mac_addr" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Verify the net list status." isSpecification="false" isLeaf="false" visibility="public" xmi.id="35605" isRoot="false" isAbstract="false" isQuery="false" name="net_list_is_empty" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" xmi.id="36667" type="BsXuVmQldfSS" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Commit the modification of our AVLN to the dataplane." isSpecification="false" isLeaf="false" visibility="public" xmi.id="35866" isRoot="false" isAbstract="false" isQuery="false" name="commit_to_dataplane" />
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Class comment="Control plane station." isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="tftTuiZXSv4R" isRoot="false" isAbstract="false" name="cp_sta_t" >
+ <UML:Classifier.feature>
+ <UML:Attribute comment="Station's tei." isSpecification="false" visibility="private" xmi.id="w2lpqlcRNBky" type="emAuInlIaxvV" name="tei" />
+ <UML:Attribute comment="Station's mac address." isSpecification="false" visibility="private" xmi.id="KjxDjNipVmH6" type="Q4TYO2bRfXJq" name="mac_address" />
+ <UML:Attribute comment="Indicate if the station is Visible by our station." isSpecification="false" visibility="private" xmi.id="nJw1e6ulB8mV" type="BsXuVmQldfSS" name="visible" />
+ <UML:Attribute comment="Indicate if the station is CCo." isSpecification="false" visibility="private" xmi.id="9SydFFh3ENAt" type="BsXuVmQldfSS" name="is_cco" />
+ <UML:Attribute comment="GLID provided to the PCO to transmit a proxy beacon." isSpecification="false" visibility="private" xmi.id="76E3M1i7iJGy" type="nnvOyvzkSE17" name="pco_glid" />
+ <UML:Attribute comment="Indicate the state of the station." isSpecification="false" visibility="private" xmi.id="njbBHkqZRmmB" type="pBzpcllJMdsq" name="station_state" />
+ <UML:Attribute comment="The network whithin the station is associatied." isSpecification="false" visibility="private" xmi.id="30115" type="TRzc3eNXqLr1" name="net" />
+ <UML:Attribute comment="Indicate if the station is Backup CCo." isSpecification="false" visibility="public" xmi.id="15VSrGbyiZbv" type="BsXuVmQldfSS" name="is_backup_cco" />
+ <UML:Attribute comment="Last date seen in the AVLN." isSpecification="false" visibility="public" xmi.id="7SdojrmkwHBl" type="oZHHg64PKBaq" name="last_seen_ms" />
+ <UML:Attribute comment="The Reassembly context for the cl_interf." isSpecification="false" visibility="public" xmi.id="61vH7gnD8O1s" type="RTeIWtKTDaZV" name="reassembly_ctx" />
+ <UML:Attribute comment="The tei expiration date." isSpecification="false" visibility="public" xmi.id="O3jgPKW1znfn" type="oZHHg64PKBaq" name="tei_lease_ms" />
+ <UML:Attribute comment="The station CCo capability." isSpecification="false" visibility="public" xmi.id="uZ2PRCIQqOal" type="nnvOyvzkSE17" name="cco_cap" />
+ <UML:Attribute comment="Indicate if the station can be PCo." isSpecification="false" visibility="public" xmi.id="SKPVcXpzB5Y4" type="BsXuVmQldfSS" name="pco_cap" />
+ <UML:Attribute comment="Indicate if the stations can be backup CCo." isSpecification="false" visibility="public" xmi.id="FcAqRxkJWmhw" type="BsXuVmQldfSS" name="backup_cco_cap" />
+ <UML:Attribute comment="Number of discover stations." isSpecification="false" visibility="public" xmi.id="R3na9McOwmEN" type="nnvOyvzkSE17" name="numDisSta" />
+ <UML:Attribute comment="Number of discover networks." isSpecification="false" visibility="public" xmi.id="jwhEhOAeLWRh" type="nnvOyvzkSE17" name="numDisNet" />
+ <UML:Attribute comment="The Average BLE." isSpecification="false" visibility="public" xmi.id="27448" type="nnvOyvzkSE17" name="average_ble" />
+ <UML:Operation comment="Return a station object initialised." isSpecification="false" isLeaf="false" visibility="private" xmi.id="AaNPCwE5GYpL" isRoot="false" isAbstract="false" isQuery="false" name="init" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" xmi.id="36668" type="DcaQZXHCYAUY" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Uninitialise the station." isSpecification="false" isLeaf="false" visibility="private" xmi.id="1HLA3MQK09Yr" isRoot="false" isAbstract="false" isQuery="false" name="uninit" />
+ <UML:Operation comment="Get the station's TEI." isSpecification="false" isLeaf="false" visibility="public" xmi.id="BxTRzdcxFOCK" isRoot="false" isAbstract="false" isQuery="false" name="get_tei" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" xmi.id="36669" type="emAuInlIaxvV" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Get the station's mac address." isSpecification="false" isLeaf="false" visibility="public" xmi.id="feEeHoZUCjo5" isRoot="false" isAbstract="false" isQuery="false" name="get_mac_address" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" xmi.id="36670" type="Q4TYO2bRfXJq" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Get the station's cco status." isSpecification="false" isLeaf="false" visibility="public" xmi.id="MEr8fhvtbOQD" isRoot="false" isAbstract="false" isQuery="false" name="get_cco_status" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" xmi.id="36671" type="BsXuVmQldfSS" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Get the Proxy CCo status of the station." isSpecification="false" isLeaf="false" visibility="public" xmi.id="aCtLsOAUOvwU" isRoot="false" isAbstract="false" isQuery="false" name="get_pco_status" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" xmi.id="36672" type="BsXuVmQldfSS" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Set the visible status." isSpecification="false" isLeaf="false" visibility="public" xmi.id="28593" isRoot="false" isAbstract="false" isQuery="false" name="set_visible" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter comment="The visible status." isSpecification="false" visibility="private" xmi.id="28594" value="" type="7PSrs3lMwQVn" name="status" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Get the visible status of the station on the medium." isSpecification="false" isLeaf="false" visibility="public" xmi.id="OSlCnQfCxj2t" isRoot="false" isAbstract="false" isQuery="false" name="get_visible_status" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" xmi.id="36673" type="7PSrs3lMwQVn" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Return the PCO GLID." isSpecification="false" isLeaf="false" visibility="public" xmi.id="H29zTi1CMn0S" isRoot="false" isAbstract="false" isQuery="false" name="get_pco_glid" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" xmi.id="36674" type="nnvOyvzkSE17" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Set the station GLID to use as PCO." isSpecification="false" isLeaf="false" visibility="public" xmi.id="xjmXt0pRpbh7" isRoot="false" isAbstract="false" isQuery="false" name="set_pco_glid" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter comment="The station GLID." isSpecification="false" visibility="private" xmi.id="SNF25bArqwZ3" value="" type="nnvOyvzkSE17" name="glid" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Fill peer structure with station TEI and MAC address." isSpecification="false" isLeaf="false" visibility="public" xmi.id="19160" isRoot="false" isAbstract="false" isQuery="false" name="get_peer" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter comment="peer structure to fill." isSpecification="false" visibility="private" xmi.id="19161" value="" type="15653" name="peer" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Set the authenticated status." isSpecification="false" isLeaf="false" visibility="public" xmi.id="28699" isRoot="false" isAbstract="false" isQuery="false" name="set_authenticated" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter comment="The authentication status." isSpecification="false" visibility="private" xmi.id="28700" value="" type="BsXuVmQldfSS" name="auth" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Return the authenticated status of the station." isSpecification="false" isLeaf="false" visibility="public" xmi.id="28805" isRoot="false" isAbstract="false" isQuery="false" name="get_authenticated" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" xmi.id="36675" type="BsXuVmQldfSS" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="QCdiA5hU9IAb" isRoot="false" isAbstract="false" name="cp_net_t" >
+ <UML:Classifier.feature>
+ <UML:Attribute comment="AVLN's SNID." isSpecification="false" visibility="private" xmi.id="9PZYdnDFOfZz" type="0mEev7QHu3Xw" name="snid" />
+ <UML:Attribute comment="AVLN's NID." isSpecification="false" visibility="private" xmi.id="I2w0DZg3Mq2z" type="f1lxWwdNwvpr" name="nid" />
+ <UML:Attribute comment="The pointer to the CCo station." isSpecification="false" visibility="private" xmi.id="HiveU00Ud1Ud" type="DcaQZXHCYAUY" name="cco" />
+ <UML:Attribute comment="the pointer to the Pco station." isSpecification="false" visibility="private" xmi.id="tVZmk23YSl2D" type="DcaQZXHCYAUY" name="pco" />
+ <UML:Attribute comment="The pointer to the UCCo." isSpecification="false" visibility="private" xmi.id="4144" type="DcaQZXHCYAUY" name="ucco" />
+ <UML:Attribute comment="The expiration date at the one this AVLN should be removed from the list. This will be verified in the garbage function." isSpecification="false" visibility="private" xmi.id="fU07vNLGT9Ie" type="oZHHg64PKBaq" name="expiration_ms" />
+ <UML:Attribute comment="The list of associated stations in the AVLN." isSpecification="false" visibility="private" xmi.id="bJPnIIOxkO2f" type="OF2Sin3o242W" name="associated_stas" />
+ <UML:Attribute comment="The list of unassociated stations in the AVLN." isSpecification="false" visibility="private" xmi.id="kNvDWBsghjTC" type="OF2Sin3o242W" name="unassociated_stas" />
+ <UML:Attribute comment="AVLN slot id." isSpecification="false" visibility="private" xmi.id="AqQWPXxzCapd" type="nnvOyvzkSE17" name="avln_slot_id" />
+ <UML:Attribute comment="The slot usage read in the AVLN's central beacon." isSpecification="false" visibility="private" xmi.id="p8FRmwBNLQgP" type="nnvOyvzkSE17" name="avln_slot_usage" />
+ <UML:Attribute comment="Number of visible stations in the AVLN, correspond to the station visible or discovered by the station." isSpecification="false" visibility="private" xmi.id="kr6KLUaiRjIH" type="nnvOyvzkSE17" name="num_visible_stas" />
+ <UML:Attribute comment="The number of stations contained in the network." isSpecification="false" visibility="private" xmi.id="0qvffRz2S8ru" type="nnvOyvzkSE17" name="num_stas" />
+ <UML:Attribute comment="The network mode." isSpecification="false" visibility="private" xmi.id="S6pIWhJZQV41" type="cxkkcPlqeSGi" name="network_mode" />
+ <UML:Attribute comment="Present flag" isSpecification="false" visibility="private" xmi.id="17196" type="BsXuVmQldfSS" name="present" />
+ <UML:Attribute comment="The access status of the Network." isSpecification="false" visibility="private" xmi.id="29018" type="27023" name="access" />
+ <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="L8nWSpKOxfIH" isRoot="false" isAbstract="false" isQuery="false" name="init" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter comment="Indicate if it corresponds to the station's avln." isSpecification="false" visibility="private" xmi.id="GVgAWD6b5uCt" value="" type="BsXuVmQldfSS" name="station_avln" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Unitialise the network." isSpecification="false" isLeaf="false" visibility="public" xmi.id="025OblSx0TOi" isRoot="false" isAbstract="false" isQuery="false" name="uninit" />
+ <UML:Operation comment="Set the CCo in the Network list.
+Shall update the data bases." isSpecification="false" isLeaf="false" visibility="public" xmi.id="3UBqgc2KKU2C" isRoot="false" isAbstract="false" isQuery="false" name="set_cco" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter comment="The Station's TEI which is the CCo." isSpecification="false" visibility="private" xmi.id="tUrReG3DLDos" value="" type="emAuInlIaxvV" name="tei" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Get the CCo of this AVLN." isSpecification="false" isLeaf="false" visibility="public" xmi.id="3ABOLzFXlfcB" isRoot="false" isAbstract="false" isQuery="false" name="get_cco" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" xmi.id="36676" type="DcaQZXHCYAUY" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Get the peer structure of the CCo of this AVLN." isSpecification="false" isLeaf="false" visibility="public" xmi.id="15942" isRoot="false" isAbstract="false" isQuery="false" name="get_cco_peer" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter comment="peer structure pointer." isSpecification="false" visibility="private" xmi.id="15943" value="" type="15653" name="peer" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Set the PCo for this station." isSpecification="false" isLeaf="false" visibility="public" xmi.id="3tINqVucAXnG" isRoot="false" isAbstract="false" isQuery="false" name="set_pco" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter comment="PCo's tei." isSpecification="false" visibility="private" xmi.id="nQGtNqOhHcnd" value="" type="emAuInlIaxvV" name="tei" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Get the PCo of the AVLN." isSpecification="false" isLeaf="false" visibility="public" xmi.id="iaLbV3XXwoul" isRoot="false" isAbstract="false" isQuery="false" name="get_pco" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" xmi.id="36677" type="DcaQZXHCYAUY" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Get eh perr structure of the PCo of the AVLN." isSpecification="false" isLeaf="false" visibility="public" xmi.id="16040" isRoot="false" isAbstract="false" isQuery="false" name="get_pco_peer" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter comment="Peer structure pointer." isSpecification="false" visibility="private" xmi.id="16041" value="" type="15653" name="peer" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Returns the first station of an AVLN. The user has the responsibility to release the reference on the returned station." isSpecification="false" isLeaf="false" visibility="public" xmi.id="W8rOQJZys2Nh" isRoot="false" isAbstract="false" isQuery="false" name="sta_get_first" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" xmi.id="36678" type="DcaQZXHCYAUY" />
+ <UML:Parameter comment="to search in the associated stations or unassociated STAs." isSpecification="false" visibility="private" xmi.id="uegtnCaW6HvZ" value="" type="pBzpcllJMdsq" name="assoc" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Get the next station from the AVLN stating by the previous one already request. This function shall be call after get_first.
+The user have the responsibility to release the reference on both stations i.e. prev_sta and the returned sta." isSpecification="false" isLeaf="false" visibility="public" xmi.id="LSNW129OipWM" isRoot="false" isAbstract="false" isQuery="false" name="sta_get_next" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" xmi.id="36679" type="DcaQZXHCYAUY" />
+ <UML:Parameter comment="The previous station requested." isSpecification="false" visibility="private" xmi.id="QpgFnJlzqGcm" value="" type="DcaQZXHCYAUY" name="prev_sta" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Get the network SNID." isSpecification="false" isLeaf="false" visibility="public" xmi.id="ihLtnkq61iHr" isRoot="false" isAbstract="false" isQuery="false" name="get_snid" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" xmi.id="36680" type="0mEev7QHu3Xw" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Garbage function for the unassociated station list and the associated station list." isSpecification="false" isLeaf="false" visibility="public" xmi.id="17437" isRoot="false" isAbstract="false" isQuery="false" name="garbage_stations" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter comment="The current date in milliseconds." isSpecification="false" visibility="private" xmi.id="17438" value="" type="X7Q5Iud3fXPb" name="date_ms" />
+ <UML:Parameter comment="The station status." isSpecification="false" visibility="private" xmi.id="17487" value="" type="pBzpcllJMdsq" name="assoc" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Get the AVLN NID." isSpecification="false" isLeaf="false" visibility="public" xmi.id="ljJ5Ao4US5yj" isRoot="false" isAbstract="false" isQuery="false" name="get_nid" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" xmi.id="36681" type="f1lxWwdNwvpr" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Set the AVLN slot id." isSpecification="false" isLeaf="false" visibility="public" xmi.id="Nsj0r8ybFTqj" isRoot="false" isAbstract="false" isQuery="false" name="set_slot_id_and_usage" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter comment="The AVLN Slot id." isSpecification="false" visibility="private" xmi.id="YBDZ7f07dRHq" value="" type="nnvOyvzkSE17" name="slot_id" />
+ <UML:Parameter comment="The slot usage mask." isSpecification="false" visibility="private" xmi.id="A9M6Rbk9UhsU" value="" type="nnvOyvzkSE17" name="slot_usage" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Get the slot identifier of the network." isSpecification="false" isLeaf="false" visibility="public" xmi.id="tXX7yCe6ABln" isRoot="false" isAbstract="false" isQuery="false" name="get_slot_id" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" xmi.id="36682" type="nnvOyvzkSE17" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Return the slot usage mask of the AVLN read in the central beacon of the AVLN." isSpecification="false" isLeaf="false" visibility="public" xmi.id="po8WMv8qvmgP" isRoot="false" isAbstract="false" isQuery="false" name="get_slot_usage_mask" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" xmi.id="36683" type="nnvOyvzkSE17" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Get the number of station discovered in this AVLN." isSpecification="false" isLeaf="false" visibility="public" xmi.id="eOkr2PyKZULL" isRoot="false" isAbstract="false" isQuery="false" name="get_num_discovered_stas" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" xmi.id="36684" type="nnvOyvzkSE17" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Get the number of station of the AVLN." isSpecification="false" isLeaf="false" visibility="public" xmi.id="pq6Gp6gvxZjX" isRoot="false" isAbstract="false" isQuery="false" name="get_num_stas" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" xmi.id="36685" type="nnvOyvzkSE17" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Set the current network mode of the network." isSpecification="false" isLeaf="false" visibility="public" xmi.id="EQSO9Nrh7vtl" isRoot="false" isAbstract="false" isQuery="false" name="set_nm" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter comment="The current network mode of the network." isSpecification="false" visibility="private" xmi.id="0k5Hjgz6Os8M" value="" type="cxkkcPlqeSGi" name="nm" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Get the current network mode of the AVLN." isSpecification="false" isLeaf="false" visibility="public" xmi.id="z1wK2LaEl0as" isRoot="false" isAbstract="false" isQuery="false" name="get_nm" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" xmi.id="36686" type="cxkkcPlqeSGi" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Get the status of the network." isSpecification="false" isLeaf="false" visibility="public" xmi.id="16667" isRoot="false" isAbstract="false" isQuery="false" name="is_empty" />
+ <UML:Operation comment="Set the UCCo of the AVLN." isSpecification="false" isLeaf="false" visibility="public" xmi.id="16715" isRoot="false" isAbstract="false" isQuery="false" name="set_ucco" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter comment="The sation which is Ucco." isSpecification="false" visibility="private" xmi.id="16716" value="" type="DcaQZXHCYAUY" name="sta" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Get the UCCo of the AVLN." isSpecification="false" isLeaf="false" visibility="public" xmi.id="16811" isRoot="false" isAbstract="false" isQuery="false" name="get_ucco" />
+ <UML:Operation comment="Set the access of the AVLN," isSpecification="false" isLeaf="false" visibility="public" xmi.id="29723" isRoot="false" isAbstract="false" isQuery="false" name="set_access" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter comment="The access state of the station." isSpecification="false" visibility="private" xmi.id="29724" value="" type="27023" name="access" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Get the access type of the AVLN." isSpecification="false" isLeaf="false" visibility="public" xmi.id="29869" isRoot="false" isAbstract="false" isQuery="false" name="get_access" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" xmi.id="36687" type="27023" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="qIWnFzBd9oKJ" isRoot="false" isAbstract="false" name="cp_net_list_t" >
+ <UML:Classifier.feature>
+ <UML:Operation comment="Inititliase the network list." isSpecification="false" isLeaf="false" visibility="public" xmi.id="Qd9Ie0K9YadK" isRoot="false" isAbstract="false" isQuery="false" name="init" />
+ <UML:Operation comment="Unitialise the network list." isSpecification="false" isLeaf="false" visibility="public" xmi.id="fhhadu0Xv5sq" isRoot="false" isAbstract="false" isQuery="false" name="uninit" />
+ <UML:Operation comment="Calls the sub modules garbage to remove old data." isSpecification="false" isLeaf="false" visibility="public" xmi.id="qF2AzTzTvsRh" isRoot="false" isAbstract="false" isQuery="false" name="garbage_net" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter comment="The current date in milliseconds." isSpecification="false" visibility="private" xmi.id="YBhJPHujWWR7" value="" type="X7Q5Iud3fXPb" name="date_ms" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Add an AVLN to the list." isSpecification="false" isLeaf="false" visibility="public" xmi.id="dvGudEhkvNbD" isRoot="false" isAbstract="false" isQuery="false" name="add_avln" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" xmi.id="36688" type="TRzc3eNXqLr1" />
+ <UML:Parameter comment="The AVLN's SNID to add." isSpecification="false" visibility="private" xmi.id="k5UOGYbYkzwv" value="" type="0mEev7QHu3Xw" name="snid" />
+ <UML:Parameter comment="The AVLN's NID to add." isSpecification="false" visibility="private" xmi.id="WkkbSbh3Uxx8" value="" type="f1lxWwdNwvpr" name="nid" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Removes an AVLN from the sta manager." isSpecification="false" isLeaf="false" visibility="public" xmi.id="Ads5yTHiXj5l" isRoot="false" isAbstract="false" isQuery="false" name="remove_avln" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter comment="The AVLN's SNID to remove." isSpecification="false" visibility="private" xmi.id="FgKxfGs90bkR" value="" type="0mEev7QHu3Xw" name="snid" />
+ <UML:Parameter comment="The AVLN's NID to remove." isSpecification="false" visibility="private" xmi.id="5rhaamLoQfl3" value="" type="f1lxWwdNwvpr" name="nid" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Returns the AVLN corresponding to the snid and nid." isSpecification="false" isLeaf="false" visibility="public" xmi.id="vcDuDxLNPn0k" isRoot="false" isAbstract="false" isQuery="false" name="get_avln" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" xmi.id="36689" type="TRzc3eNXqLr1" />
+ <UML:Parameter comment="The AVLN's snid to get." isSpecification="false" visibility="private" xmi.id="DlHEPrDSht2F" value="" type="0mEev7QHu3Xw" name="snid" />
+ <UML:Parameter comment="The AVLN's NID to get." isSpecification="false" visibility="private" xmi.id="dN341p7uPKoa" value="" type="f1lxWwdNwvpr" name="nid" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Verify if the network list is empty and return true if it is." isSpecification="false" isLeaf="false" visibility="public" xmi.id="thTkEhFFV82W" isRoot="false" isAbstract="false" isQuery="false" name="is_empty" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" xmi.id="36690" type="BsXuVmQldfSS" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Create a 16 bits flag indicating which SNID are in use." isSpecification="false" isLeaf="false" visibility="public" xmi.id="fEG2VdimBUrx" isRoot="false" isAbstract="false" isQuery="false" name="get_snid_present" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" xmi.id="36691" type="J5WdE6USg2qD" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Get the slot usage of the AVLNs computed on the slots IDs of each AVLN present.
+It corresponds to a 8 bits field." isSpecification="false" isLeaf="false" visibility="public" xmi.id="dEIri7aEIlnP" isRoot="false" isAbstract="false" isQuery="false" name="get_slot_usage" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" xmi.id="36692" type="nnvOyvzkSE17" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Get the number of discovered station on all AVLNs." isSpecification="false" isLeaf="false" visibility="public" xmi.id="0swcx8FCE83L" isRoot="false" isAbstract="false" isQuery="false" name="get_num_discover_stas" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" xmi.id="36693" type="nnvOyvzkSE17" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation comment="Get the quantity of network discovered." isSpecification="false" isLeaf="false" visibility="public" xmi.id="iz4t8GAcZAqw" isRoot="false" isAbstract="false" isQuery="false" name="get_num_discovered_net" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" xmi.id="36694" type="nnvOyvzkSE17" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Enumeration stereotype="enum" isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="pBzpcllJMdsq" isRoot="false" isAbstract="false" name="cp_net_sta_status_t" >
+ <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" namespace="pBzpcllJMdsq" xmi.id="AYBjv2FiBCYl" isRoot="false" isAbstract="false" name="UNASSOC" />
+ <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" namespace="pBzpcllJMdsq" xmi.id="TS9huSQ4zbmu" isRoot="false" isAbstract="false" name="ASSOCIATED" />
+ </UML:Enumeration>
+ <UML:Enumeration stereotype="enum" isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="SsuRPlPUGZjG" isRoot="false" isAbstract="false" name="cp_security_level_t" >
+ <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" namespace="SsuRPlPUGZjG" xmi.id="YGOeDlDfb740" isRoot="false" isAbstract="false" name="CP_SECURITY_LEVEL_SC" />
+ <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" namespace="SsuRPlPUGZjG" xmi.id="8rMiHZwnqIP3" isRoot="false" isAbstract="false" name="CP_SECURITY_LEVEL_HS" />
+ </UML:Enumeration>
+ <UML:Enumeration stereotype="enum" isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="cxkkcPlqeSGi" isRoot="false" isAbstract="false" name="cp_net_network_mode_t" >
+ <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" namespace="cxkkcPlqeSGi" xmi.id="7AfLHTarQIb0" isRoot="false" isAbstract="false" name="CP_NET_NM_UNCOORDINATED" />
+ <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" namespace="cxkkcPlqeSGi" xmi.id="1IbnbOCiWr4l" isRoot="false" isAbstract="false" name="CP_NET_NM_COORDINATED" />
+ <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" namespace="cxkkcPlqeSGi" xmi.id="UsJ25EL4Uwr6" isRoot="false" isAbstract="false" name="CP_NET_NM_CSMA_ONLY" />
+ <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" namespace="cxkkcPlqeSGi" xmi.id="MWptygBQWUQa" isRoot="false" isAbstract="false" name="CP_NET_NM_ASSERT" />
+ </UML:Enumeration>
+ <UML:Enumeration stereotype="enum" isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="7PSrs3lMwQVn" isRoot="false" isAbstract="false" name="cp_sta_visible_state_t" >
+ <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" namespace="7PSrs3lMwQVn" xmi.id="200XB2ebUTRX" isRoot="false" isAbstract="false" name="CP_STA_VISIBLE_STATE_HIDDEN" />
+ <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" namespace="7PSrs3lMwQVn" xmi.id="v7wHq2ss2qNB" isRoot="false" isAbstract="false" name="CP_STA_VISIBLE_STATE_VISIBLE" />
+ <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" namespace="7PSrs3lMwQVn" xmi.id="VkDZ8Ke4QYJG" isRoot="false" isAbstract="false" name="CP_STA_VISIBLE_STATE_ASSERT" />
+ </UML:Enumeration>
+ <UML:Package stereotype="2" isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="rLUcIo7kRV6u" isRoot="false" isAbstract="false" name="sequences" >
+ <UML:Namespace.ownedElement/>
+ </UML:Package>
+ <UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="22789" isRoot="false" isAbstract="false" name="sta_mgr" />
+ <UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="22946" isRoot="false" isAbstract="false" name="net_list" />
+ <UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="22999" isRoot="false" isAbstract="false" name="sta_own_data" />
+ <UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="23052" isRoot="false" isAbstract="false" name="net" />
+ <UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="23105" isRoot="false" isAbstract="false" name="sta" />
+ <UML:Package stereotype="2" isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="25613" isRoot="false" isAbstract="false" name="Classes" >
+ <UML:Namespace.ownedElement/>
+ <XMI.extension xmi.extender="umbrello" >
+ <diagrams>
+ <diagram snapgrid="0" showattsig="1" fillcolor="#ffffc0" linewidth="0" zoom="100" showgrid="0" showopsig="1" usefillcolor="1" snapx="10" canvaswidth="972" snapy="10" showatts="1" xmi.id="25666" documentation="" type="1" showops="1" showpackage="0" name="manager" localid="900000" showstereotype="0" showscope="1" snapcsgrid="0" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="#ff0000" canvasheight="842" >
+ <widgets>
+ <classwidget usesdiagramfillcolour="0" width="352" showattsigs="601" usesdiagramusefillcolour="0" x="201" y="76" showopsigs="601" linewidth="none" fillcolour="#ffffc0" height="375" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="L2ASUCoHdFZ0" showoperations="1" showpackage="0" showscope="1" font="Sans Serif,9,-1,5,75,0,0,0,0,0" linecolor="#ff0000" />
+ </widgets>
+ <messages/>
+ <associations/>
+ </diagram>
+ <diagram snapgrid="0" showattsig="1" fillcolor="#ffffc0" linewidth="0" zoom="100" showgrid="0" showopsig="1" usefillcolor="1" snapx="10" canvaswidth="972" snapy="10" showatts="1" xmi.id="25979" documentation="" type="1" showops="1" showpackage="0" name="own_data" localid="900000" showstereotype="0" showscope="1" snapcsgrid="0" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="#ff0000" canvasheight="842" >
+ <widgets>
+ <classwidget usesdiagramfillcolour="1" width="296" showattsigs="601" usesdiagramusefillcolour="1" x="281" y="19" showopsigs="601" linewidth="none" fillcolour="none" height="780" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="dQQc692tOFUS" showoperations="1" showpackage="0" showscope="1" font="Sans Serif,9,-1,5,50,1,0,0,0,0" linecolor="none" />
+ </widgets>
+ <messages/>
+ <associations/>
+ </diagram>
+ <diagram snapgrid="0" showattsig="1" fillcolor="#ffffc0" linewidth="0" zoom="100" showgrid="0" showopsig="1" usefillcolor="1" snapx="10" canvaswidth="972" snapy="10" showatts="1" xmi.id="26240" documentation="" type="1" showops="1" showpackage="0" name="net_list" localid="900000" showstereotype="0" showscope="1" snapcsgrid="0" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="#ff0000" canvasheight="842" >
+ <widgets>
+ <classwidget usesdiagramfillcolour="1" width="324" showattsigs="601" usesdiagramusefillcolour="1" x="250" y="177" showopsigs="601" linewidth="none" fillcolour="none" height="187" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="qIWnFzBd9oKJ" showoperations="1" showpackage="0" showscope="1" font="Sans Serif,9,-1,5,75,0,0,0,0,0" linecolor="none" />
+ </widgets>
+ <messages/>
+ <associations/>
+ </diagram>
+ <diagram snapgrid="0" showattsig="1" fillcolor="#ffffc0" linewidth="0" zoom="100" showgrid="0" showopsig="1" usefillcolor="1" snapx="10" canvaswidth="972" snapy="10" showatts="1" xmi.id="26501" documentation="" type="1" showops="1" showpackage="0" name="net" localid="900000" showstereotype="0" showscope="1" snapcsgrid="0" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="#ff0000" canvasheight="842" >
+ <widgets>
+ <classwidget usesdiagramfillcolour="0" width="397" showattsigs="601" usesdiagramusefillcolour="0" x="179" y="30" showopsigs="601" linewidth="none" fillcolour="#ffffc0" height="615" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="QCdiA5hU9IAb" showoperations="1" showpackage="0" showscope="1" font="Sans Serif,9,-1,5,75,0,0,0,0,0" linecolor="#ff0000" />
+ </widgets>
+ <messages/>
+ <associations/>
+ </diagram>
+ <diagram snapgrid="0" showattsig="1" fillcolor="#ffffc0" linewidth="0" zoom="100" showgrid="0" showopsig="1" usefillcolor="1" snapx="10" canvaswidth="972" snapy="10" showatts="1" xmi.id="26710" documentation="" type="1" showops="1" showpackage="0" name="sta" localid="900000" showstereotype="0" showscope="1" snapcsgrid="0" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="#ff0000" canvasheight="842" >
+ <widgets>
+ <classwidget usesdiagramfillcolour="0" width="271" showattsigs="601" usesdiagramusefillcolour="0" x="317" y="139" showopsigs="601" linewidth="none" fillcolour="#ffffc0" height="465" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="tftTuiZXSv4R" showoperations="1" showpackage="0" showscope="1" font="Sans Serif,9,-1,5,75,0,0,0,0,0" linecolor="#ff0000" />
+ </widgets>
+ <messages/>
+ <associations/>
+ </diagram>
+ </diagrams>
+ </XMI.extension>
+ </UML:Package>
+ <UML:Enumeration stereotype="enum" isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="27023" isRoot="false" isAbstract="false" name="hpav_access_t" >
+ <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" namespace="27023" xmi.id="27076" isRoot="false" isAbstract="false" name="HPAV_IN_HOME" />
+ <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" namespace="27023" xmi.id="27129" isRoot="false" isAbstract="false" name="HPAV_ACCESS" />
+ </UML:Enumeration>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="BzDeGrof35i3" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="lQBEo3VLdIiB" aggregation="aggregate" type="qIWnFzBd9oKJ" name="" multiplicity="1" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="yIVQyeIGHNsQ" aggregation="none" type="QCdiA5hU9IAb" name="" multiplicity="8" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="DWwHbcINxulG" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="L3waWG7FgHRS" aggregation="aggregate" type="L2ASUCoHdFZ0" name="" multiplicity="1" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="KwlxER9BkcZg" aggregation="none" type="qIWnFzBd9oKJ" name="" multiplicity="1" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="UODsawo5TGgC" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="EqxWDnuWpq6J" aggregation="aggregate" type="QCdiA5hU9IAb" name="" multiplicity="1" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="4BZiS08nxui9" aggregation="none" type="tftTuiZXSv4R" name="" multiplicity="*" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="c6v3mGeXVqXR" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="LpI3SskggfAt" aggregation="none" type="L2ASUCoHdFZ0" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="S4PFsTZuc8c5" aggregation="none" type="QCdiA5hU9IAb" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="T1xzpUO46GR3" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="8lq3fWDyKT2m" aggregation="none" type="L2ASUCoHdFZ0" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="LkQ1PZspdF5U" aggregation="none" type="tftTuiZXSv4R" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="rvcDZX0ujXxy" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="g5L0YLks59tS" aggregation="aggregate" type="qIWnFzBd9oKJ" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="ikIJzLnexCvh" aggregation="none" type="QCdiA5hU9IAb" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="5IZpnXnsVu7G" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="BHXvPRI3Ud43" aggregation="aggregate" type="qIWnFzBd9oKJ" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="zmv2vmVbWlvU" aggregation="none" type="QCdiA5hU9IAb" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="5eDSOP8QymCv" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="6i63s1i3IFyh" aggregation="composite" type="qIWnFzBd9oKJ" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="fGk9smCpX5rQ" aggregation="none" type="QCdiA5hU9IAb" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="10345" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="10346" aggregation="composite" type="qIWnFzBd9oKJ" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="10347" aggregation="none" type="L2ASUCoHdFZ0" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="BzDeGrof35i3" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="lQBEo3VLdIiB" aggregation="aggregate" type="qIWnFzBd9oKJ" name="" multiplicity="1" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="yIVQyeIGHNsQ" aggregation="none" type="QCdiA5hU9IAb" name="" multiplicity="8" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="DWwHbcINxulG" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="L3waWG7FgHRS" aggregation="aggregate" type="L2ASUCoHdFZ0" name="" multiplicity="1" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="KwlxER9BkcZg" aggregation="none" type="qIWnFzBd9oKJ" name="" multiplicity="1" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="UODsawo5TGgC" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="EqxWDnuWpq6J" aggregation="aggregate" type="QCdiA5hU9IAb" name="" multiplicity="1" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="4BZiS08nxui9" aggregation="none" type="tftTuiZXSv4R" name="" multiplicity="*" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="c6v3mGeXVqXR" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="LpI3SskggfAt" aggregation="none" type="L2ASUCoHdFZ0" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="S4PFsTZuc8c5" aggregation="none" type="QCdiA5hU9IAb" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="T1xzpUO46GR3" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="8lq3fWDyKT2m" aggregation="none" type="L2ASUCoHdFZ0" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="LkQ1PZspdF5U" aggregation="none" type="tftTuiZXSv4R" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="rvcDZX0ujXxy" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="g5L0YLks59tS" aggregation="aggregate" type="qIWnFzBd9oKJ" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="ikIJzLnexCvh" aggregation="none" type="QCdiA5hU9IAb" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="5IZpnXnsVu7G" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="BHXvPRI3Ud43" aggregation="aggregate" type="qIWnFzBd9oKJ" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="zmv2vmVbWlvU" aggregation="none" type="QCdiA5hU9IAb" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="5eDSOP8QymCv" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="6i63s1i3IFyh" aggregation="composite" type="qIWnFzBd9oKJ" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="fGk9smCpX5rQ" aggregation="none" type="QCdiA5hU9IAb" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="10345" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="10346" aggregation="composite" type="qIWnFzBd9oKJ" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="10347" aggregation="none" type="L2ASUCoHdFZ0" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="12189" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="12190" aggregation="composite" type="L2ASUCoHdFZ0" name="" multiplicity="1" />
+ <UML:AssociationEnd isSpecification="false" visibility="private" changeability="changeable" isNavigable="true" xmi.id="12191" aggregation="none" type="dQQc692tOFUS" name="sta_own_data" multiplicity="1" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="13891" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="13892" aggregation="composite" type="L2ASUCoHdFZ0" name="" multiplicity="1" />
+ <UML:AssociationEnd isSpecification="false" visibility="private" changeability="changeable" isNavigable="true" xmi.id="13893" aggregation="none" type="qIWnFzBd9oKJ" name="network_list" multiplicity="1" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="14924" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="14925" aggregation="composite" type="qIWnFzBd9oKJ" name="" multiplicity="1" />
+ <UML:AssociationEnd isSpecification="false" visibility="private" changeability="changeable" isNavigable="true" xmi.id="14926" aggregation="none" type="QCdiA5hU9IAb" name="networks" multiplicity="8" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="18563" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="18564" aggregation="none" type="L2ASUCoHdFZ0" name="" multiplicity="1" />
+ <UML:AssociationEnd isSpecification="false" visibility="private" changeability="changeable" isNavigable="true" xmi.id="18565" aggregation="none" type="QCdiA5hU9IAb" name="our_net" multiplicity="1" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="BzDeGrof35i3" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="lQBEo3VLdIiB" aggregation="aggregate" type="qIWnFzBd9oKJ" name="" multiplicity="1" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="yIVQyeIGHNsQ" aggregation="none" type="QCdiA5hU9IAb" name="" multiplicity="8" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="DWwHbcINxulG" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="L3waWG7FgHRS" aggregation="aggregate" type="L2ASUCoHdFZ0" name="" multiplicity="1" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="KwlxER9BkcZg" aggregation="none" type="qIWnFzBd9oKJ" name="" multiplicity="1" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="UODsawo5TGgC" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="EqxWDnuWpq6J" aggregation="aggregate" type="QCdiA5hU9IAb" name="" multiplicity="1" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="4BZiS08nxui9" aggregation="none" type="tftTuiZXSv4R" name="" multiplicity="*" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="c6v3mGeXVqXR" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="LpI3SskggfAt" aggregation="none" type="L2ASUCoHdFZ0" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="S4PFsTZuc8c5" aggregation="none" type="QCdiA5hU9IAb" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="T1xzpUO46GR3" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="8lq3fWDyKT2m" aggregation="none" type="L2ASUCoHdFZ0" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="LkQ1PZspdF5U" aggregation="none" type="tftTuiZXSv4R" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="rvcDZX0ujXxy" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="g5L0YLks59tS" aggregation="aggregate" type="qIWnFzBd9oKJ" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="ikIJzLnexCvh" aggregation="none" type="QCdiA5hU9IAb" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="5IZpnXnsVu7G" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="BHXvPRI3Ud43" aggregation="aggregate" type="qIWnFzBd9oKJ" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="zmv2vmVbWlvU" aggregation="none" type="QCdiA5hU9IAb" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="5eDSOP8QymCv" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="6i63s1i3IFyh" aggregation="composite" type="qIWnFzBd9oKJ" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="fGk9smCpX5rQ" aggregation="none" type="QCdiA5hU9IAb" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="10345" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="10346" aggregation="composite" type="qIWnFzBd9oKJ" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="10347" aggregation="none" type="L2ASUCoHdFZ0" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="BzDeGrof35i3" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="lQBEo3VLdIiB" aggregation="aggregate" type="qIWnFzBd9oKJ" name="" multiplicity="1" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="yIVQyeIGHNsQ" aggregation="none" type="QCdiA5hU9IAb" name="" multiplicity="8" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="DWwHbcINxulG" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="L3waWG7FgHRS" aggregation="aggregate" type="L2ASUCoHdFZ0" name="" multiplicity="1" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="KwlxER9BkcZg" aggregation="none" type="qIWnFzBd9oKJ" name="" multiplicity="1" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="UODsawo5TGgC" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="EqxWDnuWpq6J" aggregation="aggregate" type="QCdiA5hU9IAb" name="" multiplicity="1" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="4BZiS08nxui9" aggregation="none" type="tftTuiZXSv4R" name="" multiplicity="*" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="c6v3mGeXVqXR" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="LpI3SskggfAt" aggregation="none" type="L2ASUCoHdFZ0" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="S4PFsTZuc8c5" aggregation="none" type="QCdiA5hU9IAb" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="T1xzpUO46GR3" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="8lq3fWDyKT2m" aggregation="none" type="L2ASUCoHdFZ0" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="LkQ1PZspdF5U" aggregation="none" type="tftTuiZXSv4R" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="rvcDZX0ujXxy" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="g5L0YLks59tS" aggregation="aggregate" type="qIWnFzBd9oKJ" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="ikIJzLnexCvh" aggregation="none" type="QCdiA5hU9IAb" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="5IZpnXnsVu7G" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="BHXvPRI3Ud43" aggregation="aggregate" type="qIWnFzBd9oKJ" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="zmv2vmVbWlvU" aggregation="none" type="QCdiA5hU9IAb" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="5eDSOP8QymCv" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="6i63s1i3IFyh" aggregation="composite" type="qIWnFzBd9oKJ" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="fGk9smCpX5rQ" aggregation="none" type="QCdiA5hU9IAb" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="10345" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="10346" aggregation="composite" type="qIWnFzBd9oKJ" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="10347" aggregation="none" type="L2ASUCoHdFZ0" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="12189" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="12190" aggregation="composite" type="L2ASUCoHdFZ0" name="" multiplicity="1" />
+ <UML:AssociationEnd isSpecification="false" visibility="private" changeability="changeable" isNavigable="true" xmi.id="12191" aggregation="none" type="dQQc692tOFUS" name="sta_own_data" multiplicity="1" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="13891" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="13892" aggregation="composite" type="L2ASUCoHdFZ0" name="" multiplicity="1" />
+ <UML:AssociationEnd isSpecification="false" visibility="private" changeability="changeable" isNavigable="true" xmi.id="13893" aggregation="none" type="qIWnFzBd9oKJ" name="network_list" multiplicity="1" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="14924" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="14925" aggregation="composite" type="qIWnFzBd9oKJ" name="" multiplicity="1" />
+ <UML:AssociationEnd isSpecification="false" visibility="private" changeability="changeable" isNavigable="true" xmi.id="14926" aggregation="none" type="QCdiA5hU9IAb" name="networks" multiplicity="8" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="18563" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="18564" aggregation="none" type="L2ASUCoHdFZ0" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="18565" aggregation="none" type="QCdiA5hU9IAb" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="19407" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="19408" aggregation="aggregate" type="QCdiA5hU9IAb" name="" multiplicity="1" />
+ <UML:AssociationEnd isSpecification="false" visibility="private" changeability="changeable" isNavigable="true" xmi.id="19409" aggregation="none" type="tftTuiZXSv4R" name="associated_stas" multiplicity="254" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="19563" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="19564" aggregation="aggregate" type="QCdiA5hU9IAb" name="" multiplicity="1" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="19565" aggregation="none" type="tftTuiZXSv4R" name="unassociated_stas" multiplicity="*" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="23366" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="23367" aggregation="composite" type="22789" name="" multiplicity="1" />
+ <UML:AssociationEnd isSpecification="false" visibility="private" changeability="changeable" isNavigable="true" xmi.id="23368" aggregation="none" type="22946" name="network_list" multiplicity="1" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="23473" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="23474" aggregation="composite" type="22789" name="" multiplicity="1" />
+ <UML:AssociationEnd isSpecification="false" visibility="private" changeability="changeable" isNavigable="true" xmi.id="23475" aggregation="none" type="22999" name="sta_own_data" multiplicity="1" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="23580" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="23581" aggregation="composite" type="22946" name="" multiplicity="1" />
+ <UML:AssociationEnd isSpecification="false" visibility="private" changeability="changeable" isNavigable="true" xmi.id="23582" aggregation="none" type="23052" name="networks" multiplicity="8" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="23687" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="23688" aggregation="aggregate" type="23052" name="" multiplicity="1" />
+ <UML:AssociationEnd isSpecification="false" visibility="private" changeability="changeable" isNavigable="true" xmi.id="23689" aggregation="none" type="23105" name="associated_stas" multiplicity="254" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="24650" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="24651" aggregation="aggregate" type="23052" name="" multiplicity="1" />
+ <UML:AssociationEnd isSpecification="false" visibility="private" changeability="changeable" isNavigable="true" xmi.id="24652" aggregation="none" type="23105" name="unassociated_stas" multiplicity="*" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="24913" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="24914" aggregation="composite" type="22946" name="" multiplicity="1" />
+ <UML:AssociationEnd isSpecification="false" visibility="private" changeability="changeable" isNavigable="true" xmi.id="24915" aggregation="none" type="23052" name="networks" multiplicity="1" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="25292" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="25293" aggregation="aggregate" type="23052" name="" multiplicity="1" />
+ <UML:AssociationEnd isSpecification="false" visibility="private" changeability="changeable" isNavigable="true" xmi.id="25294" aggregation="none" type="23105" name="associated_stas" multiplicity="254" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="BzDeGrof35i3" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="lQBEo3VLdIiB" aggregation="aggregate" type="qIWnFzBd9oKJ" name="" multiplicity="1" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="yIVQyeIGHNsQ" aggregation="none" type="QCdiA5hU9IAb" name="" multiplicity="8" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="DWwHbcINxulG" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="L3waWG7FgHRS" aggregation="aggregate" type="L2ASUCoHdFZ0" name="" multiplicity="1" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="KwlxER9BkcZg" aggregation="none" type="qIWnFzBd9oKJ" name="" multiplicity="1" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="UODsawo5TGgC" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="EqxWDnuWpq6J" aggregation="aggregate" type="QCdiA5hU9IAb" name="" multiplicity="1" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="4BZiS08nxui9" aggregation="none" type="tftTuiZXSv4R" name="" multiplicity="*" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="c6v3mGeXVqXR" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="LpI3SskggfAt" aggregation="none" type="L2ASUCoHdFZ0" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="S4PFsTZuc8c5" aggregation="none" type="QCdiA5hU9IAb" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="T1xzpUO46GR3" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="8lq3fWDyKT2m" aggregation="none" type="L2ASUCoHdFZ0" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="LkQ1PZspdF5U" aggregation="none" type="tftTuiZXSv4R" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="rvcDZX0ujXxy" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="g5L0YLks59tS" aggregation="aggregate" type="qIWnFzBd9oKJ" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="ikIJzLnexCvh" aggregation="none" type="QCdiA5hU9IAb" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="5IZpnXnsVu7G" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="BHXvPRI3Ud43" aggregation="aggregate" type="qIWnFzBd9oKJ" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="zmv2vmVbWlvU" aggregation="none" type="QCdiA5hU9IAb" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="5eDSOP8QymCv" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="6i63s1i3IFyh" aggregation="composite" type="qIWnFzBd9oKJ" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="fGk9smCpX5rQ" aggregation="none" type="QCdiA5hU9IAb" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="10345" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="10346" aggregation="composite" type="qIWnFzBd9oKJ" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="10347" aggregation="none" type="L2ASUCoHdFZ0" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="BzDeGrof35i3" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="lQBEo3VLdIiB" aggregation="aggregate" type="qIWnFzBd9oKJ" name="" multiplicity="1" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="yIVQyeIGHNsQ" aggregation="none" type="QCdiA5hU9IAb" name="" multiplicity="8" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="DWwHbcINxulG" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="L3waWG7FgHRS" aggregation="aggregate" type="L2ASUCoHdFZ0" name="" multiplicity="1" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="KwlxER9BkcZg" aggregation="none" type="qIWnFzBd9oKJ" name="" multiplicity="1" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="UODsawo5TGgC" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="EqxWDnuWpq6J" aggregation="aggregate" type="QCdiA5hU9IAb" name="" multiplicity="1" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="4BZiS08nxui9" aggregation="none" type="tftTuiZXSv4R" name="" multiplicity="*" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="c6v3mGeXVqXR" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="LpI3SskggfAt" aggregation="none" type="L2ASUCoHdFZ0" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="S4PFsTZuc8c5" aggregation="none" type="QCdiA5hU9IAb" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="T1xzpUO46GR3" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="8lq3fWDyKT2m" aggregation="none" type="L2ASUCoHdFZ0" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="LkQ1PZspdF5U" aggregation="none" type="tftTuiZXSv4R" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="rvcDZX0ujXxy" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="g5L0YLks59tS" aggregation="aggregate" type="qIWnFzBd9oKJ" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="ikIJzLnexCvh" aggregation="none" type="QCdiA5hU9IAb" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="5IZpnXnsVu7G" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="BHXvPRI3Ud43" aggregation="aggregate" type="qIWnFzBd9oKJ" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="zmv2vmVbWlvU" aggregation="none" type="QCdiA5hU9IAb" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="5eDSOP8QymCv" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="6i63s1i3IFyh" aggregation="composite" type="qIWnFzBd9oKJ" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="fGk9smCpX5rQ" aggregation="none" type="QCdiA5hU9IAb" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="10345" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="10346" aggregation="composite" type="qIWnFzBd9oKJ" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="10347" aggregation="none" type="L2ASUCoHdFZ0" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="12189" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="12190" aggregation="composite" type="L2ASUCoHdFZ0" name="" multiplicity="1" />
+ <UML:AssociationEnd isSpecification="false" visibility="private" changeability="changeable" isNavigable="true" xmi.id="12191" aggregation="none" type="dQQc692tOFUS" name="sta_own_data" multiplicity="1" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="13891" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="13892" aggregation="composite" type="L2ASUCoHdFZ0" name="" multiplicity="1" />
+ <UML:AssociationEnd isSpecification="false" visibility="private" changeability="changeable" isNavigable="true" xmi.id="13893" aggregation="none" type="qIWnFzBd9oKJ" name="network_list" multiplicity="1" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="14924" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="14925" aggregation="composite" type="qIWnFzBd9oKJ" name="" multiplicity="1" />
+ <UML:AssociationEnd isSpecification="false" visibility="private" changeability="changeable" isNavigable="true" xmi.id="14926" aggregation="none" type="QCdiA5hU9IAb" name="networks" multiplicity="8" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="18563" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="18564" aggregation="none" type="L2ASUCoHdFZ0" name="" multiplicity="1" />
+ <UML:AssociationEnd isSpecification="false" visibility="private" changeability="changeable" isNavigable="true" xmi.id="18565" aggregation="none" type="QCdiA5hU9IAb" name="our_net" multiplicity="1" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="BzDeGrof35i3" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="lQBEo3VLdIiB" aggregation="aggregate" type="qIWnFzBd9oKJ" name="" multiplicity="1" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="yIVQyeIGHNsQ" aggregation="none" type="QCdiA5hU9IAb" name="" multiplicity="8" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="DWwHbcINxulG" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="L3waWG7FgHRS" aggregation="aggregate" type="L2ASUCoHdFZ0" name="" multiplicity="1" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="KwlxER9BkcZg" aggregation="none" type="qIWnFzBd9oKJ" name="" multiplicity="1" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="UODsawo5TGgC" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="EqxWDnuWpq6J" aggregation="aggregate" type="QCdiA5hU9IAb" name="" multiplicity="1" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="4BZiS08nxui9" aggregation="none" type="tftTuiZXSv4R" name="" multiplicity="*" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="c6v3mGeXVqXR" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="LpI3SskggfAt" aggregation="none" type="L2ASUCoHdFZ0" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="S4PFsTZuc8c5" aggregation="none" type="QCdiA5hU9IAb" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="T1xzpUO46GR3" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="8lq3fWDyKT2m" aggregation="none" type="L2ASUCoHdFZ0" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="LkQ1PZspdF5U" aggregation="none" type="tftTuiZXSv4R" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="rvcDZX0ujXxy" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="g5L0YLks59tS" aggregation="aggregate" type="qIWnFzBd9oKJ" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="ikIJzLnexCvh" aggregation="none" type="QCdiA5hU9IAb" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="5IZpnXnsVu7G" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="BHXvPRI3Ud43" aggregation="aggregate" type="qIWnFzBd9oKJ" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="zmv2vmVbWlvU" aggregation="none" type="QCdiA5hU9IAb" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="5eDSOP8QymCv" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="6i63s1i3IFyh" aggregation="composite" type="qIWnFzBd9oKJ" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="fGk9smCpX5rQ" aggregation="none" type="QCdiA5hU9IAb" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="10345" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="10346" aggregation="composite" type="qIWnFzBd9oKJ" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="10347" aggregation="none" type="L2ASUCoHdFZ0" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="BzDeGrof35i3" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="lQBEo3VLdIiB" aggregation="aggregate" type="qIWnFzBd9oKJ" name="" multiplicity="1" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="yIVQyeIGHNsQ" aggregation="none" type="QCdiA5hU9IAb" name="" multiplicity="8" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="DWwHbcINxulG" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="L3waWG7FgHRS" aggregation="aggregate" type="L2ASUCoHdFZ0" name="" multiplicity="1" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="KwlxER9BkcZg" aggregation="none" type="qIWnFzBd9oKJ" name="" multiplicity="1" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="UODsawo5TGgC" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="EqxWDnuWpq6J" aggregation="aggregate" type="QCdiA5hU9IAb" name="" multiplicity="1" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="4BZiS08nxui9" aggregation="none" type="tftTuiZXSv4R" name="" multiplicity="*" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="c6v3mGeXVqXR" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="LpI3SskggfAt" aggregation="none" type="L2ASUCoHdFZ0" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="S4PFsTZuc8c5" aggregation="none" type="QCdiA5hU9IAb" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="T1xzpUO46GR3" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="8lq3fWDyKT2m" aggregation="none" type="L2ASUCoHdFZ0" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="LkQ1PZspdF5U" aggregation="none" type="tftTuiZXSv4R" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="rvcDZX0ujXxy" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="g5L0YLks59tS" aggregation="aggregate" type="qIWnFzBd9oKJ" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="ikIJzLnexCvh" aggregation="none" type="QCdiA5hU9IAb" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="5IZpnXnsVu7G" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="BHXvPRI3Ud43" aggregation="aggregate" type="qIWnFzBd9oKJ" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="zmv2vmVbWlvU" aggregation="none" type="QCdiA5hU9IAb" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="5eDSOP8QymCv" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="6i63s1i3IFyh" aggregation="composite" type="qIWnFzBd9oKJ" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="fGk9smCpX5rQ" aggregation="none" type="QCdiA5hU9IAb" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="10345" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="10346" aggregation="composite" type="qIWnFzBd9oKJ" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="10347" aggregation="none" type="L2ASUCoHdFZ0" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="12189" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="12190" aggregation="composite" type="L2ASUCoHdFZ0" name="" multiplicity="1" />
+ <UML:AssociationEnd isSpecification="false" visibility="private" changeability="changeable" isNavigable="true" xmi.id="12191" aggregation="none" type="dQQc692tOFUS" name="sta_own_data" multiplicity="1" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="13891" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="13892" aggregation="composite" type="L2ASUCoHdFZ0" name="" multiplicity="1" />
+ <UML:AssociationEnd isSpecification="false" visibility="private" changeability="changeable" isNavigable="true" xmi.id="13893" aggregation="none" type="qIWnFzBd9oKJ" name="network_list" multiplicity="1" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="14924" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="14925" aggregation="composite" type="qIWnFzBd9oKJ" name="" multiplicity="1" />
+ <UML:AssociationEnd isSpecification="false" visibility="private" changeability="changeable" isNavigable="true" xmi.id="14926" aggregation="none" type="QCdiA5hU9IAb" name="networks" multiplicity="8" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="18563" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="18564" aggregation="none" type="L2ASUCoHdFZ0" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="18565" aggregation="none" type="QCdiA5hU9IAb" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="19407" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="19408" aggregation="aggregate" type="QCdiA5hU9IAb" name="" multiplicity="1" />
+ <UML:AssociationEnd isSpecification="false" visibility="private" changeability="changeable" isNavigable="true" xmi.id="19409" aggregation="none" type="tftTuiZXSv4R" name="associated_stas" multiplicity="254" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="19563" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="19564" aggregation="aggregate" type="QCdiA5hU9IAb" name="" multiplicity="1" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="19565" aggregation="none" type="tftTuiZXSv4R" name="unassociated_stas" multiplicity="*" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="23366" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="23367" aggregation="composite" type="22789" name="" multiplicity="1" />
+ <UML:AssociationEnd isSpecification="false" visibility="private" changeability="changeable" isNavigable="true" xmi.id="23368" aggregation="none" type="22946" name="network_list" multiplicity="1" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="23473" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="23474" aggregation="composite" type="22789" name="" multiplicity="1" />
+ <UML:AssociationEnd isSpecification="false" visibility="private" changeability="changeable" isNavigable="true" xmi.id="23475" aggregation="none" type="22999" name="sta_own_data" multiplicity="1" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="23580" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="23581" aggregation="composite" type="22946" name="" multiplicity="1" />
+ <UML:AssociationEnd isSpecification="false" visibility="private" changeability="changeable" isNavigable="true" xmi.id="23582" aggregation="none" type="23052" name="networks" multiplicity="8" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="23687" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="23688" aggregation="aggregate" type="23052" name="" multiplicity="1" />
+ <UML:AssociationEnd isSpecification="false" visibility="private" changeability="changeable" isNavigable="true" xmi.id="23689" aggregation="none" type="23105" name="associated_stas" multiplicity="254" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="24650" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="24651" aggregation="aggregate" type="23052" name="" multiplicity="1" />
+ <UML:AssociationEnd isSpecification="false" visibility="private" changeability="changeable" isNavigable="true" xmi.id="24652" aggregation="none" type="23105" name="unassociated_stas" multiplicity="*" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="24913" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="24914" aggregation="composite" type="22946" name="" multiplicity="1" />
+ <UML:AssociationEnd isSpecification="false" visibility="private" changeability="changeable" isNavigable="true" xmi.id="24915" aggregation="none" type="23052" name="networks" multiplicity="1" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="25292" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="25293" aggregation="aggregate" type="23052" name="" multiplicity="1" />
+ <UML:AssociationEnd isSpecification="false" visibility="private" changeability="changeable" isNavigable="true" xmi.id="25294" aggregation="none" type="23105" name="associated_stas" multiplicity="254" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="32027" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="32028" aggregation="aggregate" type="22789" name="" multiplicity="1" />
+ <UML:AssociationEnd isSpecification="false" visibility="private" changeability="changeable" isNavigable="true" xmi.id="32029" aggregation="none" type="23105" name="stas" multiplicity="*" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="32575" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="32576" aggregation="none" type="23105" name="" multiplicity="1" />
+ <UML:AssociationEnd isSpecification="false" visibility="private" changeability="changeable" isNavigable="true" xmi.id="32577" aggregation="none" type="23052" name="net" multiplicity="1" />
+ </UML:Association.connection>
+ </UML:Association>
+ </UML:Namespace.ownedElement>
+ <XMI.extension xmi.extender="umbrello" >
+ <diagrams>
+ <diagram snapgrid="0" showattsig="1" fillcolor="#ffffc0" linewidth="0" zoom="100" showgrid="0" showopsig="1" usefillcolor="1" snapx="10" canvaswidth="972" snapy="10" showatts="1" xmi.id="22684" documentation="" type="1" showops="1" showpackage="0" name="Package_class" localid="900000" showstereotype="0" showscope="1" snapcsgrid="0" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="#ff0000" canvasheight="842" >
+ <widgets>
+ <classwidget usesdiagramfillcolour="0" width="71" showattsigs="601" usesdiagramusefillcolour="0" x="402" y="86" showopsigs="601" linewidth="none" fillcolour="#ffffc0" height="29" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="22789" showoperations="1" showpackage="0" showscope="1" font="Sans Serif,9,-1,5,75,0,0,0,0,0" linecolor="#ff0000" />
+ <classwidget usesdiagramfillcolour="1" width="57" showattsigs="601" usesdiagramusefillcolour="1" x="275" y="170" showopsigs="601" linewidth="none" fillcolour="none" height="29" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="22946" showoperations="1" showpackage="0" showscope="1" font="Sans Serif,9,-1,5,75,0,0,0,0,0" linecolor="none" />
+ <classwidget usesdiagramfillcolour="1" width="98" showattsigs="601" usesdiagramusefillcolour="1" x="552" y="173" showopsigs="601" linewidth="none" fillcolour="none" height="29" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="22999" showoperations="1" showpackage="0" showscope="1" font="Sans Serif,9,-1,5,75,0,0,0,0,0" linecolor="none" />
+ <classwidget usesdiagramfillcolour="1" width="32" showattsigs="601" usesdiagramusefillcolour="1" x="458" y="271" showopsigs="601" linewidth="none" fillcolour="none" height="32" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="23052" showoperations="1" showpackage="0" showscope="1" font="Sans Serif,9,-1,5,75,0,0,0,0,0" linecolor="none" />
+ <classwidget usesdiagramfillcolour="1" width="30" showattsigs="601" usesdiagramusefillcolour="1" x="459" y="378" showopsigs="601" linewidth="none" fillcolour="none" height="29" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="23105" showoperations="1" showpackage="0" showscope="1" font="Sans Serif,9,-1,5,75,0,0,0,0,0" linecolor="none" />
+ </widgets>
+ <messages/>
+ <associations>
+ <assocwidget totalcounta="3" indexa="1" totalcountb="2" indexb="1" linewidth="none" widgetbid="22946" widgetaid="22789" xmi.id="23366" linecolor="none" >
+ <linepath>
+ <startpoint startx="425" starty="115" />
+ <endpoint endx="303" endy="170" />
+ </linepath>
+ <floatingtext usesdiagramfillcolour="1" width="32" usesdiagramusefillcolour="1" x="411" y="115" linewidth="none" posttext="" role="701" fillcolour="none" height="32" usefillcolor="1" pretext="" isinstance="0" xmi.id="209" showstereotype="1" text="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
+ <floatingtext usesdiagramfillcolour="1" width="32" usesdiagramusefillcolour="1" x="284" y="138" linewidth="none" posttext="" role="702" fillcolour="none" height="32" usefillcolor="1" pretext="" isinstance="0" xmi.id="210" showstereotype="1" text="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
+ <floatingtext usesdiagramfillcolour="1" width="85" usesdiagramusefillcolour="1" x="305" y="149" linewidth="none" posttext="" role="710" fillcolour="none" height="19" usefillcolor="1" pretext="-" isinstance="0" xmi.id="209" showstereotype="1" text="network_list" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
+ </assocwidget>
+ <assocwidget totalcounta="3" indexa="2" totalcountb="2" indexb="1" linewidth="none" widgetbid="22999" widgetaid="22789" xmi.id="23473" linecolor="none" >
+ <linepath>
+ <startpoint startx="449" starty="115" />
+ <endpoint endx="601" endy="173" />
+ </linepath>
+ <floatingtext usesdiagramfillcolour="1" width="32" usesdiagramusefillcolour="1" x="431" y="115" linewidth="none" posttext="" role="701" fillcolour="none" height="32" usefillcolor="1" pretext="" isinstance="0" xmi.id="212" text="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
+ <floatingtext usesdiagramfillcolour="1" width="32" usesdiagramusefillcolour="1" x="587" y="140" linewidth="none" posttext="" role="702" fillcolour="none" height="32" usefillcolor="1" pretext="" isinstance="0" xmi.id="213" showstereotype="1" text="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
+ <floatingtext usesdiagramfillcolour="1" width="95" usesdiagramusefillcolour="1" x="504" y="152" linewidth="none" posttext="" role="710" fillcolour="none" height="19" usefillcolor="1" pretext="-" isinstance="0" xmi.id="211" text="sta_own_data" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
+ </assocwidget>
+ <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" linewidth="none" widgetbid="23105" widgetaid="23052" xmi.id="24650" linecolor="none" >
+ <linepath>
+ <startpoint startx="490" starty="287" />
+ <endpoint endx="489" endy="392" />
+ <point x="555" y="287" />
+ <point x="555" y="392" />
+ </linepath>
+ <floatingtext usesdiagramfillcolour="1" width="32" usesdiagramusefillcolour="1" x="492" y="253" linewidth="none" posttext="" role="701" fillcolour="none" height="32" usefillcolor="1" pretext="" isinstance="0" xmi.id="215" showstereotype="1" text="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
+ <floatingtext usesdiagramfillcolour="1" width="32" usesdiagramusefillcolour="1" x="491" y="358" linewidth="none" posttext="" role="702" fillcolour="none" height="32" usefillcolor="1" pretext="" isinstance="0" xmi.id="216" showstereotype="1" text="*" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
+ <floatingtext usesdiagramfillcolour="1" width="124" usesdiagramusefillcolour="1" x="491" y="394" linewidth="none" posttext="" role="710" fillcolour="none" height="19" usefillcolor="1" pretext="-" isinstance="0" xmi.id="214" text="unassociated_stas" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
+ </assocwidget>
+ <assocwidget totalcounta="2" indexa="1" totalcountb="3" indexb="1" linewidth="none" widgetbid="23052" widgetaid="22946" xmi.id="24913" linecolor="none" >
+ <linepath>
+ <startpoint startx="303" starty="199" />
+ <endpoint endx="458" endy="281" />
+ </linepath>
+ <floatingtext usesdiagramfillcolour="1" width="32" usesdiagramusefillcolour="1" x="282" y="202" linewidth="none" posttext="" role="701" fillcolour="none" height="32" usefillcolor="1" pretext="" isinstance="0" xmi.id="218" text="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
+ <floatingtext usesdiagramfillcolour="1" width="32" usesdiagramusefillcolour="1" x="446" y="246" linewidth="none" posttext="" role="702" fillcolour="none" height="32" usefillcolor="1" pretext="" isinstance="0" xmi.id="219" text="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
+ <floatingtext usesdiagramfillcolour="1" width="69" usesdiagramusefillcolour="1" x="387" y="260" linewidth="none" posttext="" role="710" fillcolour="none" height="19" usefillcolor="1" pretext="-" isinstance="0" xmi.id="217" text="networks" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
+ </assocwidget>
+ <assocwidget totalcounta="3" indexa="2" totalcountb="3" indexb="1" linewidth="none" widgetbid="23105" widgetaid="23052" xmi.id="25292" linecolor="none" >
+ <linepath>
+ <startpoint startx="458" starty="292" />
+ <endpoint endx="459" endy="387" />
+ <point x="392" y="292" />
+ <point x="392" y="387" />
+ </linepath>
+ <floatingtext usesdiagramfillcolour="1" width="32" usesdiagramusefillcolour="1" x="424" y="258" linewidth="none" posttext="" role="701" fillcolour="none" height="32" usefillcolor="1" pretext="" isinstance="0" xmi.id="221" showstereotype="1" text="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
+ <floatingtext usesdiagramfillcolour="1" width="32" usesdiagramusefillcolour="1" x="437" y="355" linewidth="none" posttext="" role="702" fillcolour="none" height="32" usefillcolor="1" pretext="" isinstance="0" xmi.id="222" showstereotype="1" text="254" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
+ <floatingtext usesdiagramfillcolour="1" width="110" usesdiagramusefillcolour="1" x="334" y="364" linewidth="none" posttext="" role="710" fillcolour="none" height="19" usefillcolor="1" pretext="-" isinstance="0" xmi.id="220" text="associated_stas" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
+ </assocwidget>
+ <assocwidget totalcounta="2" indexa="1" totalcountb="3" indexb="2" linewidth="none" widgetbid="23105" widgetaid="22789" xmi.id="32027" linecolor="none" >
+ <linepath>
+ <startpoint startx="402" starty="100" />
+ <endpoint endx="459" endy="397" />
+ <point x="225" y="100" />
+ <point x="225" y="397" />
+ </linepath>
+ <floatingtext usesdiagramfillcolour="1" width="32" usesdiagramusefillcolour="1" x="368" y="66" linewidth="none" posttext="" role="701" fillcolour="none" height="32" usefillcolor="1" pretext="" isinstance="0" xmi.id="224" text="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
+ <floatingtext usesdiagramfillcolour="1" width="32" usesdiagramusefillcolour="1" x="425" y="407" linewidth="none" posttext="" role="702" fillcolour="none" height="32" usefillcolor="1" pretext="" isinstance="0" xmi.id="225" text="*" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
+ <floatingtext usesdiagramfillcolour="1" width="42" usesdiagramusefillcolour="1" x="228" y="343" linewidth="none" posttext="" role="710" fillcolour="none" height="19" usefillcolor="1" pretext="-" isinstance="0" xmi.id="223" text="stas" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
+ </assocwidget>
+ <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" linewidth="none" widgetbid="23052" widgetaid="23105" xmi.id="32575" linecolor="none" >
+ <linepath>
+ <startpoint startx="474" starty="378" />
+ <endpoint endx="474" endy="303" />
+ </linepath>
+ <floatingtext usesdiagramfillcolour="1" width="32" usesdiagramusefillcolour="1" x="476" y="344" linewidth="none" posttext="" role="701" fillcolour="none" height="32" usefillcolor="1" pretext="" isinstance="0" xmi.id="227" text="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
+ <floatingtext usesdiagramfillcolour="1" width="32" usesdiagramusefillcolour="1" x="476" y="305" linewidth="none" posttext="" role="702" fillcolour="none" height="32" usefillcolor="1" pretext="" isinstance="0" xmi.id="228" text="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
+ <floatingtext usesdiagramfillcolour="1" width="35" usesdiagramusefillcolour="1" x="437" y="305" linewidth="none" posttext="" role="710" fillcolour="none" height="19" usefillcolor="1" pretext="-" isinstance="0" xmi.id="226" text="net" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
+ </assocwidget>
+ </associations>
+ </diagram>
+ </diagrams>
+ </XMI.extension>
+ </UML:Model>
+ <UML:Model stereotype="2" isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="Use Case View" isRoot="false" isAbstract="false" name="Use Case View" >
+ <UML:Namespace.ownedElement>
+ <UML:Actor isSpecification="false" isLeaf="false" visibility="public" namespace="Use Case View" xmi.id="g2RmQlkG6CqM" isRoot="false" isAbstract="false" name="CP" />
+ </UML:Namespace.ownedElement>
+ </UML:Model>
+ <UML:Model stereotype="2" isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="Component View" isRoot="false" isAbstract="false" name="Component View" >
+ <UML:Namespace.ownedElement/>
+ </UML:Model>
+ <UML:Model stereotype="2" isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="Deployment View" isRoot="false" isAbstract="false" name="Deployment View" >
+ <UML:Namespace.ownedElement/>
+ </UML:Model>
+ <UML:Model stereotype="2" isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="Entity Relationship Model" isRoot="false" isAbstract="false" name="Entity Relationship Model" >
+ <UML:Namespace.ownedElement/>
+ </UML:Model>
+ </UML:Namespace.ownedElement>
+ </UML:Model>
+ </XMI.content>
+ <XMI.extensions xmi.extender="umbrello" >
+ <docsettings viewid="26710" documentation="" uniqueid="36694" />
+ <listview>
+ <listitem open="1" type="800" label="Views" >
+ <listitem open="1" type="801" id="Logical View" >
+ <listitem open="1" type="803" id="25613" >
+ <listitem open="0" type="807" id="25666" label="manager" />
+ <listitem open="0" type="807" id="26501" label="net" />
+ <listitem open="0" type="807" id="26240" label="net_list" />
+ <listitem open="0" type="807" id="25979" label="own_data" />
+ <listitem open="0" type="807" id="26710" label="sta" />
+ </listitem>
+ <listitem open="0" type="803" id="rLUcIo7kRV6u" >
+ <listitem open="0" type="810" id="AP5TiteE7LRQ" label="add_avln" />
+ <listitem open="0" type="810" id="7H0owQzfSQY2" label="add_one_sta" />
+ <listitem open="0" type="810" id="RSnHUDavlWhS" label="add_some_stas" />
+ <listitem open="0" type="810" id="neR6JQh9hknw" label="get_avln" />
+ <listitem open="0" type="810" id="fx8vI9va2Fiw" label="get_sta" />
+ <listitem open="0" type="810" id="poqwIOBuIxHD" label="remove_avln" />
+ <listitem open="0" type="810" id="TXHwr69BCMDJ" label="remove_some_stas" />
+ <listitem open="0" type="810" id="m64ppNaUHAGt" label="remove_sta" />
+ </listitem>
+ <listitem open="0" type="807" id="22684" label="Package_class" />
+ <listitem open="0" type="807" id="bZ62yFKbgidF" label="diagramme de classes" />
+ <listitem open="0" type="813" id="qIWnFzBd9oKJ" >
+ <listitem open="0" type="815" id="Qd9Ie0K9YadK" />
+ <listitem open="0" type="815" id="fhhadu0Xv5sq" />
+ <listitem open="0" type="815" id="qF2AzTzTvsRh" />
+ <listitem open="0" type="815" id="dvGudEhkvNbD" />
+ <listitem open="0" type="815" id="Ads5yTHiXj5l" />
+ <listitem open="0" type="815" id="vcDuDxLNPn0k" />
+ <listitem open="0" type="815" id="thTkEhFFV82W" />
+ <listitem open="0" type="815" id="fEG2VdimBUrx" />
+ <listitem open="0" type="815" id="dEIri7aEIlnP" />
+ <listitem open="0" type="815" id="0swcx8FCE83L" />
+ <listitem open="0" type="815" id="iz4t8GAcZAqw" />
+ </listitem>
+ <listitem open="0" type="813" id="QCdiA5hU9IAb" >
+ <listitem open="0" type="814" id="9PZYdnDFOfZz" />
+ <listitem open="0" type="814" id="I2w0DZg3Mq2z" />
+ <listitem open="0" type="814" id="HiveU00Ud1Ud" />
+ <listitem open="0" type="814" id="tVZmk23YSl2D" />
+ <listitem open="0" type="814" id="4144" />
+ <listitem open="0" type="814" id="fU07vNLGT9Ie" />
+ <listitem open="0" type="814" id="bJPnIIOxkO2f" />
+ <listitem open="0" type="814" id="kNvDWBsghjTC" />
+ <listitem open="0" type="814" id="AqQWPXxzCapd" />
+ <listitem open="0" type="814" id="p8FRmwBNLQgP" />
+ <listitem open="0" type="814" id="kr6KLUaiRjIH" />
+ <listitem open="0" type="814" id="0qvffRz2S8ru" />
+ <listitem open="0" type="814" id="S6pIWhJZQV41" />
+ <listitem open="0" type="814" id="17196" />
+ <listitem open="0" type="814" id="29018" />
+ <listitem open="0" type="815" id="L8nWSpKOxfIH" />
+ <listitem open="0" type="815" id="025OblSx0TOi" />
+ <listitem open="0" type="815" id="3UBqgc2KKU2C" />
+ <listitem open="0" type="815" id="3ABOLzFXlfcB" />
+ <listitem open="0" type="815" id="15942" />
+ <listitem open="0" type="815" id="3tINqVucAXnG" />
+ <listitem open="0" type="815" id="iaLbV3XXwoul" />
+ <listitem open="0" type="815" id="16040" />
+ <listitem open="0" type="815" id="W8rOQJZys2Nh" />
+ <listitem open="0" type="815" id="LSNW129OipWM" />
+ <listitem open="0" type="815" id="ihLtnkq61iHr" />
+ <listitem open="0" type="815" id="17437" />
+ <listitem open="0" type="815" id="ljJ5Ao4US5yj" />
+ <listitem open="0" type="815" id="Nsj0r8ybFTqj" />
+ <listitem open="0" type="815" id="tXX7yCe6ABln" />
+ <listitem open="0" type="815" id="po8WMv8qvmgP" />
+ <listitem open="0" type="815" id="eOkr2PyKZULL" />
+ <listitem open="0" type="815" id="pq6Gp6gvxZjX" />
+ <listitem open="0" type="815" id="EQSO9Nrh7vtl" />
+ <listitem open="0" type="815" id="z1wK2LaEl0as" />
+ <listitem open="0" type="815" id="16667" />
+ <listitem open="0" type="815" id="16715" />
+ <listitem open="0" type="815" id="16811" />
+ <listitem open="0" type="815" id="29723" />
+ <listitem open="0" type="815" id="29869" />
+ </listitem>
+ <listitem open="1" type="813" id="L2ASUCoHdFZ0" >
+ <listitem open="0" type="814" id="12890" />
+ <listitem open="0" type="814" id="33908" />
+ <listitem open="0" type="815" id="QXnrJp4mc3nZ" />
+ <listitem open="0" type="815" id="bxBBvbAGs7Q5" />
+ <listitem open="0" type="815" id="vk7FSeQIaeIS" />
+ <listitem open="0" type="815" id="qHxkg2dtESUh" />
+ <listitem open="0" type="815" id="2gQknmKqTzYm" />
+ <listitem open="0" type="815" id="DC8mABArXbfX" />
+ <listitem open="0" type="815" id="MulJvMHR2JsJ" />
+ <listitem open="0" type="815" id="i2znmIk8bVQ3" />
+ <listitem open="0" type="815" id="o7bH8l102RHc" />
+ <listitem open="0" type="815" id="NDGrlwJSDY8B" />
+ <listitem open="0" type="815" id="HwdXOmbaswch" />
+ <listitem open="0" type="815" id="5SqO4seTjRSa" />
+ <listitem open="0" type="815" id="7000" />
+ <listitem open="0" type="815" id="7802" />
+ <listitem open="0" type="815" id="34154" />
+ <listitem open="0" type="815" id="34599" />
+ <listitem open="0" type="815" id="34897" />
+ <listitem open="0" type="815" id="35047" />
+ <listitem open="0" type="815" id="35147" />
+ <listitem open="0" type="815" id="35298" />
+ <listitem open="0" type="815" id="35605" />
+ <listitem open="0" type="815" id="35866" />
+ </listitem>
+ <listitem open="0" type="813" id="dQQc692tOFUS" >
+ <listitem open="0" type="814" id="hcbUh4JlIu5E" />
+ <listitem open="0" type="814" id="MyhwT7zZG8oO" />
+ <listitem open="0" type="814" id="x5HJsnaGxZDg" />
+ <listitem open="0" type="814" id="RrbeL3wI6BZy" />
+ <listitem open="0" type="814" id="I16y7R8xSEes" />
+ <listitem open="0" type="814" id="VZjK8y2Pz9L4" />
+ <listitem open="0" type="814" id="20601" />
+ <listitem open="0" type="814" id="0grlCK0Zd2kv" />
+ <listitem open="0" type="814" id="roOeP5mqSzsY" />
+ <listitem open="0" type="814" id="20651" />
+ <listitem open="0" type="814" id="20701" />
+ <listitem open="0" type="814" id="20751" />
+ <listitem open="0" type="814" id="TO2c4YFuL4qQ" />
+ <listitem open="0" type="814" id="Rxzl1nBWMvpT" />
+ <listitem open="0" type="814" id="gBfRCRdglWVE" />
+ <listitem open="0" type="814" id="3951" />
+ <listitem open="0" type="814" id="xAmypZKxOlvo" />
+ <listitem open="0" type="814" id="919bTPKjqxKs" />
+ <listitem open="0" type="814" id="MW7N3XqbJLli" />
+ <listitem open="0" type="814" id="aTEnETRcBPSB" />
+ <listitem open="0" type="815" id="l9iApQ5k7p4V" />
+ <listitem open="0" type="815" id="20899" />
+ <listitem open="0" type="815" id="PNzGVGMN7IZO" />
+ <listitem open="0" type="815" id="oS3q3CNSaLg5" />
+ <listitem open="0" type="815" id="9tv3PTcwJuk2" />
+ <listitem open="0" type="815" id="DbAcS8Pc1KdP" />
+ <listitem open="0" type="815" id="lEJ2633MpMzJ" />
+ <listitem open="0" type="815" id="bLozAc1Tby5t" />
+ <listitem open="0" type="815" id="QacAXGqLr88z" />
+ <listitem open="0" type="815" id="XBpdlbprByih" />
+ <listitem open="0" type="815" id="x2pgMFGxFwzE" />
+ <listitem open="0" type="815" id="YWiBOMZqmmSC" />
+ <listitem open="0" type="815" id="gkXbpZt9r3e4" />
+ <listitem open="0" type="815" id="Cgo2iS6vpgKJ" />
+ <listitem open="0" type="815" id="4vv3FEH8vlii" />
+ <listitem open="0" type="815" id="h933zRw1Mr2a" />
+ <listitem open="0" type="815" id="Z2pjniRb4U5p" />
+ <listitem open="0" type="815" id="6Di8flw9tLlH" />
+ <listitem open="0" type="815" id="xXWGuINyU377" />
+ <listitem open="0" type="815" id="b2NRxvTAG4Im" />
+ <listitem open="0" type="815" id="wXFOX5u66GX3" />
+ <listitem open="0" type="815" id="4DPM1C2ZHS5c" />
+ <listitem open="0" type="815" id="tS98bISnuM92" />
+ <listitem open="0" type="815" id="21441" />
+ <listitem open="0" type="815" id="21541" />
+ <listitem open="0" type="815" id="4536" />
+ <listitem open="0" type="815" id="4636" />
+ <listitem open="0" type="815" id="21592" />
+ <listitem open="0" type="815" id="21694" />
+ <listitem open="0" type="815" id="21746" />
+ <listitem open="0" type="815" id="21851" />
+ </listitem>
+ <listitem open="0" type="813" id="tftTuiZXSv4R" >
+ <listitem open="0" type="814" id="w2lpqlcRNBky" />
+ <listitem open="0" type="814" id="KjxDjNipVmH6" />
+ <listitem open="0" type="814" id="nJw1e6ulB8mV" />
+ <listitem open="0" type="814" id="9SydFFh3ENAt" />
+ <listitem open="0" type="814" id="76E3M1i7iJGy" />
+ <listitem open="0" type="814" id="njbBHkqZRmmB" />
+ <listitem open="0" type="814" id="30115" />
+ <listitem open="0" type="814" id="15VSrGbyiZbv" />
+ <listitem open="0" type="814" id="7SdojrmkwHBl" />
+ <listitem open="0" type="814" id="61vH7gnD8O1s" />
+ <listitem open="0" type="814" id="O3jgPKW1znfn" />
+ <listitem open="0" type="814" id="uZ2PRCIQqOal" />
+ <listitem open="0" type="814" id="SKPVcXpzB5Y4" />
+ <listitem open="0" type="814" id="FcAqRxkJWmhw" />
+ <listitem open="0" type="814" id="R3na9McOwmEN" />
+ <listitem open="0" type="814" id="jwhEhOAeLWRh" />
+ <listitem open="0" type="814" id="27448" />
+ <listitem open="0" type="815" id="AaNPCwE5GYpL" />
+ <listitem open="0" type="815" id="1HLA3MQK09Yr" />
+ <listitem open="0" type="815" id="BxTRzdcxFOCK" />
+ <listitem open="0" type="815" id="feEeHoZUCjo5" />
+ <listitem open="0" type="815" id="MEr8fhvtbOQD" />
+ <listitem open="0" type="815" id="aCtLsOAUOvwU" />
+ <listitem open="0" type="815" id="28593" />
+ <listitem open="0" type="815" id="OSlCnQfCxj2t" />
+ <listitem open="0" type="815" id="H29zTi1CMn0S" />
+ <listitem open="0" type="815" id="xjmXt0pRpbh7" />
+ <listitem open="0" type="815" id="19160" />
+ <listitem open="0" type="815" id="28699" />
+ <listitem open="0" type="815" id="28805" />
+ </listitem>
+ <listitem open="1" type="813" id="23052" />
+ <listitem open="1" type="813" id="22946" />
+ <listitem open="1" type="813" id="23105" />
+ <listitem open="1" type="813" id="22789" />
+ <listitem open="1" type="813" id="22999" />
+ <listitem open="1" type="830" id="Datatypes" >
+ <listitem open="1" type="829" id="ZsN7qO5uod0W" />
+ <listitem open="1" type="829" id="sXqfrqwPid2x" />
+ <listitem open="1" type="829" id="BsXuVmQldfSS" />
+ <listitem open="1" type="829" id="1lLAIoXrLdtJ" />
+ <listitem open="1" type="829" id="NMq7yPI15TF8" />
+ <listitem open="1" type="829" id="8MlMJZOa2gQQ" />
+ <listitem open="0" type="829" id="21195" />
+ <listitem open="1" type="829" id="F0y42ZDGGZ49" />
+ <listitem open="1" type="829" id="bdvfq1CcRFQV" />
+ <listitem open="1" type="829" id="2TKfUnESr7J6" />
+ <listitem open="1" type="829" id="EhNquCdzHTzv" />
+ <listitem open="1" type="829" id="GXVTJzZt05VA" />
+ <listitem open="0" type="829" id="15653" />
+ <listitem open="0" type="829" id="cignRXiUIpXF" />
+ <listitem open="1" type="829" id="TRzc3eNXqLr1" />
+ <listitem open="1" type="829" id="f1lxWwdNwvpr" />
+ <listitem open="1" type="829" id="RTeIWtKTDaZV" />
+ <listitem open="0" type="829" id="vntVp1gw0ZB8" />
+ <listitem open="1" type="829" id="0mEev7QHu3Xw" />
+ <listitem open="1" type="829" id="6agIp7Rg7jXE" />
+ <listitem open="1" type="829" id="yVCl3jm3PB1C" />
+ <listitem open="1" type="829" id="DcaQZXHCYAUY" />
+ <listitem open="1" type="829" id="m7hYSy5qW7Uv" />
+ <listitem open="1" type="829" id="emAuInlIaxvV" />
+ <listitem open="1" type="829" id="Shk6a1xmtUeN" />
+ <listitem open="1" type="829" id="l2nnsImcbvsP" />
+ <listitem open="1" type="829" id="WHsGhr6cL3qV" />
+ <listitem open="0" type="829" id="12443" />
+ <listitem open="1" type="829" id="O01xtrLMY3S6" />
+ <listitem open="1" type="829" id="Q4TYO2bRfXJq" />
+ <listitem open="0" type="829" id="33858" />
+ <listitem open="1" type="829" id="OF2Sin3o242W" />
+ <listitem open="1" type="829" id="G46rjYKTY5EP" />
+ <listitem open="1" type="829" id="aHp7fmMY11yJ" />
+ <listitem open="1" type="829" id="J5WdE6USg2qD" />
+ <listitem open="1" type="829" id="X7Q5Iud3fXPb" />
+ <listitem open="1" type="829" id="QPMsbNxuTUYh" />
+ <listitem open="1" type="829" id="nnvOyvzkSE17" />
+ <listitem open="1" type="829" id="LyzcKuBtjfar" />
+ <listitem open="1" type="829" id="oZHHg64PKBaq" />
+ <listitem open="0" type="829" id="nyW3ZjsRDxWm" />
+ <listitem open="1" type="829" id="5NqwrUH5XNxE" />
+ <listitem open="1" type="829" id="hz7D2ZH5u80l" />
+ <listitem open="1" type="829" id="tFhSKvrguqen" />
+ </listitem>
+ <listitem open="0" type="831" id="cxkkcPlqeSGi" >
+ <listitem open="0" type="839" id="7AfLHTarQIb0" />
+ <listitem open="0" type="839" id="1IbnbOCiWr4l" />
+ <listitem open="0" type="839" id="UsJ25EL4Uwr6" />
+ <listitem open="0" type="839" id="MWptygBQWUQa" />
+ </listitem>
+ <listitem open="0" type="831" id="pBzpcllJMdsq" >
+ <listitem open="0" type="839" id="AYBjv2FiBCYl" />
+ <listitem open="0" type="839" id="TS9huSQ4zbmu" />
+ </listitem>
+ <listitem open="0" type="831" id="SsuRPlPUGZjG" >
+ <listitem open="0" type="839" id="YGOeDlDfb740" />
+ <listitem open="0" type="839" id="8rMiHZwnqIP3" />
+ </listitem>
+ <listitem open="0" type="831" id="7PSrs3lMwQVn" >
+ <listitem open="0" type="839" id="200XB2ebUTRX" />
+ <listitem open="0" type="839" id="v7wHq2ss2qNB" />
+ <listitem open="0" type="839" id="VkDZ8Ke4QYJG" />
+ </listitem>
+ <listitem open="1" type="831" id="27023" >
+ <listitem open="0" type="839" id="27076" />
+ <listitem open="0" type="839" id="27129" />
+ </listitem>
+ </listitem>
+ <listitem open="1" type="802" id="Use Case View" >
+ <listitem open="1" type="811" id="g2RmQlkG6CqM" />
+ </listitem>
+ <listitem open="1" type="821" id="Component View" />
+ <listitem open="1" type="827" id="Deployment View" />
+ <listitem open="1" type="836" id="Entity Relationship Model" />
+ </listitem>
+ </listview>
+ <codegeneration>
+ <codegenerator language="Java" />
+ </codegeneration>
+ </XMI.extensions>
+</XMI>
diff --git a/cesar/cp/eoc/sta/mgr/src/sta_mgr.c b/cesar/cp/eoc/sta/mgr/src/sta_mgr.c
new file mode 100644
index 0000000000..b329855d21
--- /dev/null
+++ b/cesar/cp/eoc/sta/mgr/src/sta_mgr.c
@@ -0,0 +1,572 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008-2009 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/sta/mgr/src/sta_mgr.c
+ * \brief Station manager source.
+ * \ingroup cp_eoc_sta_mgr
+ *
+ */
+#include "common/std.h"
+#include "common/defs/eoc.h"
+
+/* Private headers. */
+#include "cp/inc/context.h"
+#include "cp/sta/mgr/inc/sta_mgr.h"
+#include "cp/sta/mgr/inc/sta.h"
+
+/* Public headers. */
+#include "lib/rnd.h"
+#include "cp/defs.h"
+#include "cp/eoc/sta/mgr/sta_mgr.h"
+#include "cp/sta/mgr/sta_own_data.h"
+#include "cp/sta/core/core.h"
+#include "cp/eoc/cco/action/cco_action.h"
+#include "cp/cco/action/cco_action.h"
+#include "cl/cl_mactotei.h"
+#include "cl/cl_eoc_mactotei.h"
+#include "mac/sar/sar.h"
+
+/* Config headers. */
+#include "config/cp/sta/mgr/cco/eoc.h"
+
+/**
+ * Add a station to the associated or unassociated list.
+ * \param ctx the CP context.
+ * \param net the network within the station exists.
+ * \param tei the station's TEI.
+ * \param mac_address the station's mac address.
+ * \param sta the station.
+ */
+static void
+cp_eoc_sta_mgr_sta_add_to_assoc_or_unassoc (
+ cp_t *ctx, cp_net_t *net, cp_tei_t tei, mac_t mac_address,
+ cp_sta_private_t *sta)
+{
+ bool state;
+
+ if (MAC_TEI_IS_STA (tei))
+ sta->net->num_associated_stas ++;
+
+ if (MAC_TEI_IS_STA (tei))
+ {
+ if (!((cp_eoc_sta_mgr_sta_is_assoc (ctx, net, tei))
+ || (cp_eoc_sta_mgr_sta_is_unassoc (ctx, net, mac_address))))
+ {
+ net->num_visible_stas ++;
+ net->num_stas ++;
+ sta->visible = true;
+ }
+ }
+ else if (!(cp_eoc_sta_mgr_sta_is_unassoc (ctx, net, mac_address)))
+ {
+ net->num_visible_stas ++;
+ net->num_stas ++;
+ sta->visible = true;
+ }
+
+ /* Add the station to the non unassociated list. */
+ if (tei == MAC_TEI_UNASSOCIATED)
+ {
+ if (cp_eoc_sta_mgr_sta_is_assoc (ctx, net, sta->tei))
+ {
+ set_remove (&net->associated_stas, &sta->public_data.node_net);
+ if (MAC_TEI_IS_STA (sta->tei))
+ sta->net->num_associated_stas--;
+ }
+
+ if (!(cp_eoc_sta_mgr_sta_is_unassoc (ctx, net, mac_address)))
+ {
+ state = set_insert (&net->unassociated_stas,
+ &sta->public_data.node_net);
+ dbg_check (state);
+ }
+ }
+ /* Add the station to the associated list. */
+ else
+ {
+ if (cp_eoc_sta_mgr_sta_is_unassoc (ctx, net, mac_address))
+ set_remove (&net->unassociated_stas, &sta->public_data.node_net);
+
+ dbg_assert (ctx->mac_store);
+
+ mac_store_sta_add (ctx->mac_store, tei);
+ state = set_insert (&net->associated_stas, &sta->public_data.node_net);
+ dbg_check (state);
+ cp_sta_set_assoc_confirmed (ctx, (cp_sta_t *) sta, true);
+ cp_sta_mgr_commit_to_dataplane (ctx);
+ }
+}
+
+void
+cp_eoc_sta_mgr_sta_insert_into_stas_list (cp_t *ctx, cp_sta_private_t *station)
+{
+ bool state;
+ state = set_insert (&ctx->sta_mgr.stas,
+ &station->public_data.node_sta_mgr);
+ dbg_check (state);
+}
+
+
+void
+cp_eoc_sta_mgr_init (cp_t *ctx)
+{
+ dbg_assert (ctx);
+
+ memset (&ctx->sta_mgr, 0, sizeof (cp_sta_mgr_t));
+
+ /* Initialise the station own data. */
+ cp_sta_own_data_init (ctx);
+
+ /* Initialise the list of releasing stations. */
+ list_init (&ctx->sta_mgr.release_sta_list);
+
+ /* Initialise the slab cache. */
+ slab_cache_init (&ctx->sta_mgr.sta_slab_cache,
+ "Station cache",
+ sizeof (cp_sta_private_t),
+ (slab_object_destructor_t) cp_sta_uninit);
+
+ /* Initialise the set of station sorted by mac addresses. */
+ set_init (&ctx->sta_mgr.stas, cp_sta_mgr_sta_mac_address_less);
+
+ lib_stats_set_stat_value_notype ("OUTPUT_LEVEL_ALL",
+ &ctx->sta_mgr.sta_own_data.output_level,
+ LIB_STATS_ACCESS_READ_WRITE,
+ LIB_STATS_DEBUG);
+}
+
+void
+cp_eoc_sta_mgr_garbage (cp_t *ctx)
+{
+ cp_sta_t *sta;
+ cp_net_t *net;
+ dbg_assert (ctx);
+ u32 now = cp_sta_core_get_date_ms (ctx);
+ for (net = cp_sta_mgr_get_first_avln (ctx);
+ net;
+ net = cp_sta_mgr_get_next_avln (ctx, net))
+ if (net != ctx->sta_mgr.our_avln)
+ cp_net_garbage_stations (ctx, net, now);
+ /* Release the release stations if possible. */
+ while ((sta = cp_sta_mgr_release_sta_get_first (ctx))
+ && (less_mod2p32 (sta->tei_lease_date_ms, now)))
+ {
+ /* remove the station from the list. */
+ list_remove (&ctx->sta_mgr.release_sta_list,
+ &sta->release_node);
+
+ sar_sta_remove (ctx->sar, cp_sta_get_tei (sta));
+
+ if (cp_sta_own_data_get_cco_status (ctx))
+ {
+ /* Clear EoC specific cl information. */
+ cl_eoc_mactotei_entry_remove (ctx->cl, cp_sta_get_tei (sta));
+ /* Request the CCo to release the TEI. */
+ cp_cco_action_tei_release (ctx, cp_sta_get_tei (sta));
+ }
+ slab_release (sta);
+ }
+ cp_sta_mgr_elects_sta_partial_ack (ctx);
+}
+
+void
+cp_eoc_sta_mgr_release_station (cp_t *ctx, cp_tei_t tei)
+{
+ cp_sta_t *sta;
+ cp_net_t *net;
+
+ dbg_assert (ctx);
+ dbg_assert (tei);
+ dbg_assert (cp_sta_own_data_get_cco_status (ctx));
+
+ net = cp_sta_mgr_get_our_avln (ctx);
+ sta = cp_sta_mgr_sta_get_assoc (ctx, net, tei);
+ dbg_assert (sta);
+
+ /* Remove the station from the set of the net. */
+ set_remove (&net->associated_stas, &sta->node_net);
+ set_insert (&net->unassociated_stas, &sta->node_net);
+ net->num_associated_stas --;
+ /* Remove the station from the sta mgr set. */
+ if (((cp_sta_private_t *)sta)->tei == MAC_TEI_UNASSOCIATED)
+ set_remove (&ctx->sta_mgr.stas, &sta->node_sta_mgr);
+ /* Remove the reference provided. */
+ slab_release (sta);
+}
+
+cp_sta_t *
+cp_eoc_sta_mgr_sta_add (cp_t *ctx, cp_net_t *net, cp_tei_t tei,
+ mac_t mac_address)
+{
+ cp_sta_private_t *sta = NULL;
+
+ dbg_assert (ctx);
+ dbg_assert (net);
+ dbg_assert ((tei && mac_address == MAC_BROADCAST)
+ || (mac_address & ~MAC_BROADCAST) == 0);
+
+ /* Try to get the station by the TEI. */
+ if (tei)
+ sta = (cp_sta_private_t *) cp_sta_mgr_sta_get_assoc (ctx, net, tei);
+
+ /* Try to get the station by the mac address. */
+ if (!sta && (mac_address != MAC_BROADCAST))
+ sta = (cp_sta_private_t *) cp_sta_mgr_sta_get_from_mac (
+ ctx, mac_address);
+
+ if (!sta)
+ {
+ sta = (cp_sta_private_t *) cp_sta_mgr_sta_add_realy (
+ ctx, net, tei, mac_address);
+ }
+ else
+ {
+ /* Last case. The network change. */
+ if (sta->net != net)
+ {
+ cp_sta_mgr_sta_remove (ctx, (cp_sta_t *) sta);
+ slab_release (sta);
+
+ sta = (cp_sta_private_t *) cp_sta_mgr_sta_add_realy (
+ ctx, net, tei, mac_address);
+ }
+ /* First case only the TEI change from the previous state. */
+ else if ((sta->tei == MAC_TEI_UNASSOCIATED)
+ && (tei != MAC_TEI_UNASSOCIATED)
+ && (sta->mac_address == mac_address))
+ {
+ /* Remove the station. */
+ cp_sta_mgr_sta_remove (ctx, (cp_sta_t *) sta);
+ slab_release (sta);
+
+ /* Add the station with the new TEI. */
+ sta = (cp_sta_private_t *) cp_sta_mgr_sta_add_realy (
+ ctx, net, tei, mac_address);
+ if (net == ctx->sta_mgr.our_avln)
+ mac_store_sta_add (ctx->mac_store, tei);
+ }
+ /* Second case,
+ * - station's TEI != TEI and != MAC_TEI_UNASSOCIATED.
+ * - station's Mac address was broadcast. */
+ else if ((sta->tei == tei)
+ && (tei != MAC_TEI_UNASSOCIATED)
+ && (sta->mac_address != mac_address)
+ && (sta->mac_address == MAC_BROADCAST))
+ {
+ /* Add the station mgr node to the set. */
+ sta->mac_address = mac_address;
+ set_insert (&ctx->sta_mgr.stas,
+ &sta->public_data.node_sta_mgr);
+ }
+ /* Third case, only the station's TEI change. */
+ else if ((sta->tei != tei)
+ && (tei != MAC_TEI_UNASSOCIATED)
+ && (sta->mac_address == mac_address)
+ && (mac_address != MAC_BROADCAST))
+ {
+ /* Only change the station's TEI. */
+ sta->tei = tei;
+ }
+ /* Fourth case, only the station's TEI change from a associated tei to
+ * the unassociated TEI.. */
+ else if ((sta->tei != tei)
+ && (tei == MAC_TEI_UNASSOCIATED)
+ && (sta->mac_address == mac_address)
+ && (mac_address != MAC_BROADCAST))
+ {
+ if (!((cp_eoc_sta_mgr_sta_is_assoc (ctx, net, sta->tei))
+ || (cp_eoc_sta_mgr_sta_is_unassoc (ctx, net, mac_address))))
+ cp_eoc_sta_mgr_sta_add_to_assoc_or_unassoc (
+ ctx, net, tei, mac_address, sta);
+ }
+ /* Fifth case, Same TEI only the mac address change from A to B
+ * without being null or broadcast. */
+ else if ((sta->mac_address != mac_address)
+ && (mac_address != MAC_BROADCAST)
+ && (mac_address != 0))
+ {
+ cp_sta_mgr_sta_remove (ctx, (cp_sta_t *) sta);
+ slab_release (sta);
+
+ sta = (cp_sta_private_t *) cp_sta_mgr_sta_add_realy (
+ ctx, net, tei, mac_address);
+ }
+ /* Sixth case, Same TEI, same mac address,
+ * but the sta is not in the associated list. First ASSOC_REQ. */
+ else if ((sta->mac_address == mac_address)
+ && (sta->tei == tei)
+ && (tei != MAC_TEI_UNASSOCIATED))
+ {
+ if (!(cp_eoc_sta_mgr_sta_is_assoc (ctx, net, tei)))
+ cp_eoc_sta_mgr_sta_add_to_assoc_or_unassoc (
+ ctx, net, tei, mac_address, sta);
+ }
+ }
+
+ /* Update the last seen value. */
+ if (CONFIG_CP_AV)
+ {
+ sta->public_data.expired_date_ms = cp_sta_core_get_date_ms (ctx)
+ + HPAV_STA_PRESENCE_TIMEOUT_INSIDE_AVLN_MS;
+ }
+ else if (CONFIG_CP_EOC)
+ {
+ sta->public_data.expired_date_ms = cp_sta_core_get_date_ms (ctx)
+ + EOC_STA_PRESENCE_TIMEOUT_INSIDE_AVLN_MS;
+ }
+ return &sta->public_data;
+}
+
+void
+cp_eoc_sta_mgr_sta_remove (cp_t *ctx, cp_sta_t * station)
+{
+ set_t *set;
+ cp_sta_private_t *sta = (cp_sta_private_t *) station;
+ cp_net_t *net;
+
+ dbg_assert (ctx);
+ dbg_assert (sta);
+ dbg_assert (sta->net);
+
+ net = sta->net;
+
+ /* If the station is CCo, modify the net CCo pointer to NULL. */
+ if (cp_sta_get_cco_status(station))
+ net->cco = NULL;
+
+ /* If the station is PCo to communicate with the CCo, modify the
+ * pointer in the net. */
+ if (net->pco == station)
+ net->pco = NULL;
+
+ if ((net == ctx->sta_mgr.our_avln)
+ && (MAC_TEI_IS_STA (sta->tei)))
+ sar_sta_remove (ctx->sar, sta->tei);
+
+ /* Remove the station from its net. */
+ if (cp_sta_get_tei (&sta->public_data))
+ {
+ if (cp_eoc_sta_mgr_sta_is_assoc (ctx, net, sta->tei))
+ {
+ set = &sta->net->associated_stas;
+ set_remove (set, &sta->public_data.node_net);
+ sta->net->num_associated_stas --;
+ sta->net->num_stas --;
+ }
+ else if (cp_eoc_sta_mgr_sta_is_unassoc(ctx, net, sta->mac_address))
+ {
+ set = &sta->net->unassociated_stas;
+ set_remove (set, &sta->public_data.node_net);
+ sta->net->num_stas --;
+ }
+ }
+ else
+ {
+ set = &sta->net->unassociated_stas;
+ if (cp_eoc_sta_mgr_sta_is_unassoc (ctx, net, sta->mac_address))
+ {
+ set_remove (set, &sta->public_data.node_net);
+ sta->net->num_stas --;
+ }
+ }
+
+ /* Remove the station from the station manager. If the mac address of the
+ * station is broadcast, the station is not in the set. */
+ if ((sta->mac_address != MAC_BROADCAST) && (!station->sta_in_wl))
+ set_remove (&ctx->sta_mgr.stas, &sta->public_data.node_sta_mgr);
+
+ /* decrease the visible counter. */
+ if (sta->visible)
+ sta->net->num_visible_stas --;
+
+ cp_sta_mgr_elects_sta_partial_ack (ctx);
+
+ /* Release the station if it was removed from the station manager. */
+ if ((sta->mac_address != MAC_BROADCAST) && (!station->sta_in_wl))
+ slab_release (sta);
+}
+
+bool
+cp_eoc_sta_mgr_sta_is_assoc (cp_t *ctx, cp_net_t *net, cp_tei_t tei)
+{
+ set_node_t *node = NULL;
+
+ dbg_assert (ctx);
+ dbg_assert (net);
+ dbg_assert (tei);
+
+ if (!set_empty (&net->associated_stas))
+ {
+ cp_sta_private_t sta_cmp;
+ memset (&sta_cmp, 0, sizeof (cp_sta_private_t));
+ sta_cmp.tei = tei;
+
+ node = set_find (&net->associated_stas,
+ &sta_cmp.public_data.node_net);
+ }
+
+ return (node);
+}
+
+bool
+cp_eoc_sta_mgr_sta_is_unassoc (cp_t *ctx, cp_net_t *net, mac_t mac)
+{
+ set_node_t *node = NULL;
+
+ dbg_assert (ctx);
+ dbg_assert (net);
+ dbg_assert (mac);
+
+ if (!set_empty (&net->unassociated_stas))
+ {
+ cp_sta_private_t sta_cmp;
+ memset (&sta_cmp, 0, sizeof (cp_sta_private_t));
+ sta_cmp.mac_address = mac;
+
+ node = set_find (&net->unassociated_stas,
+ &sta_cmp.public_data.node_net);
+ }
+
+ return (node);
+}
+
+void
+cp_eoc_sta_mgr_commit_to_dataplane (cp_t *ctx)
+{
+ cp_sta_t *sta;
+ cl_mactotei_blk_t *mactotei;
+
+ dbg_assert (ctx);
+ dbg_assert (ctx->cl);
+
+ /* If the net does not correspond to the AVLN, do not commit. */
+ if (!ctx->sta_mgr.our_avln)
+ return;
+
+ /* Get the first station from the set. */
+ if (set_empty (&ctx->sta_mgr.our_avln->associated_stas))
+ {
+ cl_mactotei_release_table (ctx->cl);
+ }
+ else
+ {
+ /* There is at least a station in the network list. */
+ mactotei = cl_mactotei_new ();
+
+ for (sta = cp_net_sta_get_first (ctx, ctx->sta_mgr.our_avln,
+ CP_NET_STA_ASSOC);
+ sta;
+ sta = cp_net_sta_get_next (ctx, ctx->sta_mgr.our_avln, sta))
+ {
+ cp_sta_private_t *sta_private = (cp_sta_private_t *) sta;
+ /* Copy all the bridge table from the previous list. */
+ cl_mactotei_copy_tei_and_tag (ctx->cl, mactotei, sta_private->tei,
+ sta_private->tei);
+ /* Add the current station. */
+ cl_mactotei_addr_add (mactotei, sta_private->mac_address,
+ sta_private->tei, MAC_TEI_UNASSOCIATED);
+
+ }
+
+ /* Request the CL to use the table. */
+ cl_mactotei_use_table (ctx->cl, mactotei);
+ }
+}
+
+#if CONFIG_CP_STA_MGR_CCO_EOC
+void
+cp_eoc_sta_mgr_get_wl (
+ cp_t *ctx, uint *numStas, cp_tei_t *stas_teis, mac_t *stas_macs,
+ u8 *stas_authorizations, u8 *stas_output_levels, u32 *stas_start_times,
+ u32 *stas_end_times, cp_key_t *stas_daks, cp_dpw_t *stas_dpws,
+ u8 *stas_actions)
+{
+ dbg_assert (ctx);
+ dbg_assert (numStas);
+ dbg_assert (stas_teis);
+ dbg_assert (stas_macs);
+ dbg_assert (stas_authorizations);
+ dbg_assert (stas_output_levels);
+ dbg_assert (stas_start_times);
+ dbg_assert (stas_end_times);
+ dbg_assert (stas_daks);
+ dbg_assert (stas_actions);
+
+ set_node_t *node;
+ cp_sta_t *sta = NULL;
+ uint i = 0;
+ (*numStas) = 0;
+
+ if (!set_empty (&ctx->sta_mgr.stas))
+ {
+ node = set_begin(&ctx->sta_mgr.stas);
+ while (node)
+ {
+ sta = PARENT_OF (cp_sta_t, node_sta_mgr, node);
+ if (((cp_sta_private_t *)sta)->tei != 0)
+ {
+ stas_authorizations[i] = sta->multi_sta.allowed;
+ stas_output_levels[i] = sta->multi_sta.output_level;
+ stas_start_times[i] = sta->multi_sta.start_time;
+ stas_end_times[i] = sta->multi_sta.end_time;
+ stas_daks[i] = sta->multi_sta.dak;
+ stas_dpws[i] = ((cp_sta_private_t *)sta)->dpw;
+ stas_actions[i] = sta->multi_sta.action;
+ stas_teis[i] = ((cp_sta_private_t *)sta)->tei;
+ stas_macs[i] = ((cp_sta_private_t *)sta)->mac_address;
+ i++;
+ }
+ node = set_next(&ctx->sta_mgr.stas, node);
+ }
+ (*numStas) = i;
+ }
+}
+
+void
+cp_eoc_sta_mgr_get_ports (
+ cp_t *ctx, uint *numStas, mac_t *stas_macs, bool stas_port_ed[][PORT_NB],
+ u8 stas_port_service[][PORT_NB])
+{
+ dbg_assert (ctx);
+ dbg_assert (numStas);
+ dbg_assert (stas_macs);
+ dbg_assert (stas_port_ed);
+ dbg_assert (stas_port_service);
+
+ set_node_t *node;
+ cp_sta_t *sta = NULL;
+ uint i = 0;
+ uint j = 0;
+ (*numStas) = 0;
+
+ if (!set_empty (&ctx->sta_mgr.stas))
+ {
+ node = set_begin(&ctx->sta_mgr.stas);
+ while (node)
+ {
+ sta = PARENT_OF (cp_sta_t, node_sta_mgr, node);
+ if (((cp_sta_private_t *)sta)->tei != 0)
+ {
+ stas_macs[i] = ((cp_sta_private_t *)sta)->mac_address;
+ for (j = 0; j < PORT_NB; j++)
+ {
+ stas_port_ed[i][j] = sta->multi_sta.ports.port[j].enabled;
+ stas_port_service[i][j] =
+ sta->multi_sta.ports.port[j].index_of_service;
+ }
+ i ++;
+ }
+ node = set_next(&ctx->sta_mgr.stas, node);
+ }
+ (*numStas) = i;
+
+ }
+}
+
+#endif /* CONFIG_CP_STA_MGR_CCO_EOC */
+
diff --git a/cesar/cp/eoc/sta/mgr/src/sta_own_data.c b/cesar/cp/eoc/sta/mgr/src/sta_own_data.c
new file mode 100644
index 0000000000..cb32182569
--- /dev/null
+++ b/cesar/cp/eoc/sta/mgr/src/sta_own_data.c
@@ -0,0 +1,89 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008-2009 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/sta/mgr/src/sta_own_data.c
+ * \brief Station data source.
+ * \ingroup cp_eoc_sta_mgr
+ *
+ */
+#include "common/std.h"
+
+/* Private headers. */
+#include "cp/inc/context.h"
+#include "cp/sta/mgr/inc/sta_own_data.h"
+
+/* Public headers. */
+#include "hal/gpio/gpio.h"
+#include "cp/eoc/sta/mgr/sta_own_data.h"
+#include "cp/msg/msg.h"
+
+/**
+ * Initialise the station own data to default values.
+ * \param ctx the module context.
+ */
+void
+cp_eoc_sta_own_data_init (cp_t *ctx)
+{
+ dbg_assert (ctx);
+
+ memset ((u8*) &ctx->sta_mgr.sta_own_data,
+ 0, sizeof (cp_sta_own_data_private_t));
+
+ /* Store the hybrid mode. */
+ ctx->sta_mgr.sta_own_data.public.hybrid_mode =
+ MAC_COEXISTENCE_AV_ONLY_MODE;
+
+ /* Take a random snid. */
+ ctx->sta_mgr.sta_own_data.snid =
+ lib_rnd_uniform (&ctx->rnd, HPAV_SNID_NB);
+
+ /* Debug only. */
+ GPIO_SETUP (LED_IS_CCO_GPIO, GPIO_DIRECTION_OUT);
+ GPIO_SET (LED_IS_CCO_GPIO, 0);
+}
+
+bool
+cp_eoc_sta_own_data_set_nmk (cp_t *ctx, const cp_key_t nmk,
+ cp_msg_drv_sta_set_key_type_t type)
+{
+ dbg_assert (ctx);
+ dbg_assert (type < CP_MSG_DRV_STA_SET_KEY_TYPE_NB);
+
+ uint i;
+ cp_key_t current_key = cp_sta_own_data_get_nmk (ctx);
+
+ for (i = 0; i < COUNT(nmk.key) ;i++)
+ if (nmk.key[i] != current_key.key[i])
+ break;
+
+ if (i < COUNT(nmk.key))
+ {
+ ctx->sta_mgr.sta_own_data.nmk = nmk;
+ return true;
+ }
+
+ return false;
+}
+
+void
+cp_eoc_sta_own_data_set_original_dak (cp_t *ctx, cp_key_t dak)
+{
+ uint i;
+ dbg_assert (ctx);
+
+ for (i = 0; i < COUNT (dak.key); i++)
+ ctx->sta_mgr.sta_own_data.original_dak.key[i] = dak.key[i];
+}
+
+cp_key_t
+cp_eoc_sta_own_data_get_original_dak (cp_t *ctx)
+{
+ dbg_assert (ctx);
+
+ return ctx->sta_mgr.sta_own_data.original_dak;
+}
diff --git a/cesar/cp/eoc/sta/mgr/sta_mgr.h b/cesar/cp/eoc/sta/mgr/sta_mgr.h
new file mode 100644
index 0000000000..574f8e1ebd
--- /dev/null
+++ b/cesar/cp/eoc/sta/mgr/sta_mgr.h
@@ -0,0 +1,75 @@
+#ifndef cp_eoc_sta_mgr_h
+#define cp_eoc_sta_mgr_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/sta/mgr/sta_mgr.h
+ * \brief Station Manager.
+ * \ingroup cp_eoc_sta_mgr
+ *
+ * Station and AVLN manager.
+ */
+#include "cp/cp.h"
+#include "config/cp/sta/mgr/cco/eoc.h"
+
+BEGIN_DECLS
+
+/* Declared in VARIANT :
+ * - cp_sta_mgr_init
+ * - cp_sta_mgr_garbage
+ * - cp_sta_mgr_release_station
+ * - cp_sta_mgr_sta_add
+ * - cp_sta_mgr_sta_remove
+ * - cp_sta_mgr_commit_to_dataplane
+ */
+
+/**
+ * Add a station to the stas list.
+ * \param ctx the CP context.
+ * \param station the station.
+ */
+void
+cp_eoc_sta_mgr_sta_insert_into_stas_list (
+ cp_t *ctx, cp_sta_private_t *station);
+
+/**
+ * TODO
+ */
+bool
+cp_eoc_sta_mgr_sta_is_assoc (cp_t *ctx, cp_net_t *net, cp_tei_t tei);
+
+/**
+ * TODO
+ */
+bool
+cp_eoc_sta_mgr_sta_is_unassoc (cp_t *ctx, cp_net_t *net, mac_t mac);
+
+
+#if CONFIG_CP_STA_MGR_CCO_EOC
+/**
+ * TODO
+ */
+void
+cp_eoc_sta_mgr_get_wl (
+ cp_t *ctx, uint *numStas, cp_tei_t *stas_teis, mac_t *stas_macs,
+ u8 *stas_authorizations, u8 *stas_output_levels, u32 *stas_start_times,
+ u32 *stas_end_times, cp_key_t *stas_daks, cp_dpw_t *stas_dpws,
+ u8 *stas_actions);
+
+/**
+ * TODO
+ */
+void
+cp_eoc_sta_mgr_get_ports (
+ cp_t *ctx, uint *numStas, mac_t *stas_macs, bool stas_port_ed[][PORT_NB],
+ u8 stas_port_service[][PORT_NB]);
+#endif /* CONFIG_CP_STA_MGR_CCO_EOC */
+
+END_DECLS
+
+#endif /* cp_sta_eoc_mgr_h */
diff --git a/cesar/cp/eoc/sta/mgr/sta_own_data.h b/cesar/cp/eoc/sta/mgr/sta_own_data.h
new file mode 100644
index 0000000000..62c03a32f1
--- /dev/null
+++ b/cesar/cp/eoc/sta/mgr/sta_own_data.h
@@ -0,0 +1,46 @@
+#ifndef cp_eoc_sta_mgr_sta_own_data_h
+#define cp_eoc_sta_mgr_sta_own_data_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2012 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/sta/mgr/sta_own_data.h
+ * \brief « brief description »
+ * \ingroup cp_eoc_sta_mgr
+ *
+ * « long description »
+ */
+#include "cp/cp.h"
+
+BEGIN_DECLS
+
+/* Declared in VARIANT :
+ * - cp_sta_own_data_init
+ * - cp_sta_own_data_set_nmk
+ */
+
+/**
+ * Set the original DAK in the station.
+ * \param ctx the control plane context.
+ * \param dak the DAK of the station.
+ *
+ * TODO : this function is not called, could we erase it ?
+ */
+void
+cp_eoc_sta_own_data_set_original_dak (cp_t *ctx, cp_key_t dak);
+
+/**
+ * Get the original DAK of the station.
+ * \param ctx the control plane context.
+ * \return the DAK of the station.
+ */
+cp_key_t
+cp_eoc_sta_own_data_get_original_dak (cp_t *ctx);
+
+END_DECLS
+
+#endif /* cp_eoc_sta_mgr_sta_own_data_h */
diff --git a/cesar/cp/eoc/sta/mgr/stub/Module b/cesar/cp/eoc/sta/mgr/stub/Module
new file mode 100644
index 0000000000..ebb6bc655e
--- /dev/null
+++ b/cesar/cp/eoc/sta/mgr/stub/Module
@@ -0,0 +1,3 @@
+SOURCES := sta_mgr.c sta_own_data.c
+
+MODULES := cp/sta/mgr/stub
diff --git a/cesar/cp/eoc/sta/mgr/stub/src/sta_mgr.c b/cesar/cp/eoc/sta/mgr/stub/src/sta_mgr.c
new file mode 100644
index 0000000000..f8eced0191
--- /dev/null
+++ b/cesar/cp/eoc/sta/mgr/stub/src/sta_mgr.c
@@ -0,0 +1,101 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2012 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/sta/mgr/stub/src/sta_mgr.h
+ * \brief « brief description »
+ * \ingroup cp_eoc_sta_mgr_stub
+ *
+ * « long description »
+ */
+#include "common/std.h"
+#include "cp/cp.h"
+#include "cp/sta/mgr/sta.h"
+#include "cp/sta/mgr/net.h"
+#include "cp/sta/mgr/inc/sta.h"
+#include "config/cp/sta/mgr/cco/eoc.h"
+
+void
+cp_eoc_sta_mgr_init (cp_t *ctx) __attribute__((weak));
+void
+cp_eoc_sta_mgr_init (cp_t *ctx) {}
+
+void
+cp_eoc_sta_mgr_garbage (cp_t *ctx) __attribute__((weak));
+void
+cp_eoc_sta_mgr_garbage (cp_t *ctx) {}
+
+void
+cp_eoc_sta_mgr_release_station (cp_t *ctx, cp_tei_t tei)
+ __attribute__((weak));
+void
+cp_eoc_sta_mgr_release_station (cp_t *ctx, cp_tei_t tei) {}
+
+cp_sta_t *
+cp_eoc_sta_mgr_sta_add (
+ cp_t *ctx, cp_net_t *net, cp_tei_t tei, mac_t mac_address)
+ __attribute__((weak));
+cp_sta_t *
+cp_eoc_sta_mgr_sta_add (
+ cp_t *ctx, cp_net_t *net, cp_tei_t tei, mac_t mac_address)
+{ return NULL; }
+
+void
+cp_eoc_sta_mgr_sta_remove (cp_t *ctx, cp_sta_t * sta) __attribute__((weak));
+void
+cp_eoc_sta_mgr_sta_remove (cp_t *ctx, cp_sta_t * sta) {}
+
+void
+cp_eoc_sta_mgr_commit_to_dataplane (cp_t *ctx) __attribute__((weak));
+void
+cp_eoc_sta_mgr_commit_to_dataplane (cp_t *ctx) {}
+
+void
+cp_eoc_sta_mgr_sta_insert_into_stas_list (
+ cp_t *ctx, cp_sta_private_t *station) __attribute__((weak));
+void
+cp_eoc_sta_mgr_sta_insert_into_stas_list (
+ cp_t *ctx, cp_sta_private_t *station) {}
+
+bool
+cp_eoc_sta_mgr_sta_is_assoc (cp_t *ctx, cp_net_t *net, cp_tei_t tei)
+ __attribute__((weak));
+bool
+cp_eoc_sta_mgr_sta_is_assoc (cp_t *ctx, cp_net_t *net, cp_tei_t tei)
+{ return true; }
+
+bool
+cp_eoc_sta_mgr_sta_is_unassoc (cp_t *ctx, cp_net_t *net, mac_t mac)
+ __attribute__((weak));
+bool
+cp_eoc_sta_mgr_sta_is_unassoc (cp_t *ctx, cp_net_t *net, mac_t mac)
+{ return true; }
+
+#if CONFIG_CP_STA_MGR_CCO_EOC
+void
+cp_eoc_sta_mgr_get_wl (
+ cp_t *ctx, uint *numStas, cp_tei_t *stas_teis, mac_t *stas_macs,
+ u8 *stas_authorizations, u8 *stas_output_levels, u32 *stas_start_times,
+ u32 *stas_end_times, cp_key_t *stas_daks, cp_dpw_t *stas_dpws,
+ u8 *stas_actions) __attribute__((weak));
+void
+cp_eoc_sta_mgr_get_wl (
+ cp_t *ctx, uint *numStas, cp_tei_t *stas_teis, mac_t *stas_macs,
+ u8 *stas_authorizations, u8 *stas_output_levels, u32 *stas_start_times,
+ u32 *stas_end_times, cp_key_t *stas_daks, cp_dpw_t *stas_dpws,
+ u8 *stas_actions) {}
+
+void
+cp_eoc_sta_mgr_get_ports (
+ cp_t *ctx, uint *numStas, mac_t *stas_macs, bool stas_port_ed[][PORT_NB],
+ u8 stas_port_service[][PORT_NB])
+ __attribute__((weak));
+void
+cp_eoc_sta_mgr_get_ports (
+ cp_t *ctx, uint *numStas, mac_t *stas_macs, bool stas_port_ed[][PORT_NB],
+ u8 stas_port_service[][PORT_NB]) {}
+#endif /* CONFIG_CP_STA_MGR_CCO_EOC */
diff --git a/cesar/cp/eoc/sta/mgr/stub/src/sta_own_data.c b/cesar/cp/eoc/sta/mgr/stub/src/sta_own_data.c
new file mode 100644
index 0000000000..9f9be6972a
--- /dev/null
+++ b/cesar/cp/eoc/sta/mgr/stub/src/sta_own_data.c
@@ -0,0 +1,48 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2012 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/sta/mgr/stub/src/sta_own_data.c
+ * \brief « brief description »
+ * \ingroup cp_eoc_sta_mgr_stub
+ *
+ * « long description »
+ */
+#include "common/std.h"
+#include "cp/cp.h"
+#include "cp/msg/inc/drv_sta_set_key.h"
+#include "string.h" /* For memset */
+
+void
+cp_eoc_sta_own_data_init (cp_t *ctx) __attribute__((weak));
+void
+cp_eoc_sta_own_data_init (cp_t *ctx) {}
+
+bool
+cp_eoc_sta_own_data_set_nmk (cp_t *ctx, const cp_key_t nmk,
+ cp_msg_drv_sta_set_key_type_t type)
+ __attribute__((weak));
+bool
+cp_eoc_sta_own_data_set_nmk (cp_t *ctx, const cp_key_t nmk,
+ cp_msg_drv_sta_set_key_type_t type)
+{ return true; }
+
+void
+cp_eoc_sta_own_data_set_original_dak (cp_t *ctx, cp_key_t dak)
+ __attribute__((weak));
+void
+cp_eoc_sta_own_data_set_original_dak (cp_t *ctx, cp_key_t dak) {}
+
+static cp_key_t stub_key;
+cp_key_t
+cp_eoc_sta_own_data_get_original_dak (cp_t *ctx) __attribute__((weak));
+cp_key_t
+cp_eoc_sta_own_data_get_original_dak (cp_t *ctx)
+{
+ memset (&stub_key, 0, sizeof (cp_key_t));
+ return stub_key;
+}
diff --git a/cesar/cp/eoc/sta/mgr/test/utest/Config b/cesar/cp/eoc/sta/mgr/test/utest/Config
new file mode 100644
index 0000000000..4f7d8c9cc7
--- /dev/null
+++ b/cesar/cp/eoc/sta/mgr/test/utest/Config
@@ -0,0 +1,5 @@
+CONFIG_CP_EOC = y
+CONFIG_DEBUG_FATAL_CATCH = y
+CONFIG_RESTRACK = y
+CONFIG_AV_ONLY_MODE = y
+CONFIG_CL_EOC_ROUTE = y
diff --git a/cesar/cp/eoc/sta/mgr/test/utest/Makefile b/cesar/cp/eoc/sta/mgr/test/utest/Makefile
new file mode 100644
index 0000000000..bb01377d50
--- /dev/null
+++ b/cesar/cp/eoc/sta/mgr/test/utest/Makefile
@@ -0,0 +1,14 @@
+BASE = ../../../../../..
+
+INCLUDES = cp/eoc/sta/mgr/test/utest/override
+
+HOST_PROGRAMS = test_sta_mgr
+
+test_sta_mgr_SOURCES = net_test.c sta_mgr.c \
+ sta-test.c station_test.c test_sta_mgr.c \
+ core_stub.c sar_stub.c
+test_sta_mgr_MODULES = lib cp/eoc/sta/mgr mac/common \
+ cp/eoc/fsm/stub cp/eoc/cco/action/stub cl/stub bsu/stub cp/msg/stub
+test_sta_mgr_CONFIG_MODULES = cp/eoc cl
+
+include $(BASE)/common/make/top.mk
diff --git a/cesar/cp/eoc/sta/mgr/test/utest/doc/Makefile b/cesar/cp/eoc/sta/mgr/test/utest/doc/Makefile
new file mode 100644
index 0000000000..25c6b6b03d
--- /dev/null
+++ b/cesar/cp/eoc/sta/mgr/test/utest/doc/Makefile
@@ -0,0 +1,20 @@
+PAGES= sta_mgr.txt sta.txt net.txt net_list.txt
+
+ODT=$(PAGES:%.txt=%.odt)
+HTML=$(PAGES:%.txt=%.html)
+
+all: $(ODT) $(HTML)
+
+odt: $(ODT)
+
+html: $(HTML)
+
+%.odt: %.txt
+ rst2odt.py $< $@
+
+%.html: %.txt
+ rst2html $< $@
+
+clean:
+ rm -f $(ODT)
+ rm -f $(HTML)
diff --git a/cesar/cp/eoc/sta/mgr/test/utest/doc/net.txt b/cesar/cp/eoc/sta/mgr/test/utest/doc/net.txt
new file mode 100644
index 0000000000..3424c2ba52
--- /dev/null
+++ b/cesar/cp/eoc/sta/mgr/test/utest/doc/net.txt
@@ -0,0 +1,190 @@
+Network test
+============
+
+Test the APIs available in the cp_net.
+
+sta_add
+-------
+
+Test 1 : Unassociated STAs
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Add some station to the net list and verify the data. The STA are added with a
+TEI null and a known mac address.
+
+The Station shall be added as unassociated stations and be added in the set of
+unassociated stations.
+
+Their status shall be equal to CP_STA_STATE_EXISTS.
+The Mac address shall be set.
+
+Test 2 : Associated STAs
+~~~~~~~~~~~~~~~~~~~~~~~~
+
+Add some stations to the net list and verify the data. The STA are added with
+a TEI different of any one already present in the Net list.
+
+The mac address is not necessary if the TEI is set, the station status shall
+be equal to CP_STA_STATE_ASSOCIATED.
+
+Test 3 : Authenticated STAs
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Add some authenticated stations to the net list. The STAs are added with a TEI
+different of any one already present in the Net list.
+
+The stations status shall be equal to CP_STA_STATE_AUTHENTICATED.
+
+Test 4 : Modifying the CCo in the NET
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Add a station authenticated and set it as a CCo in the AVLN.
+
+The station shall be in the CP_STA_STATE_AUTHENTICATED, and the AVLN shall
+have a pointer to this station in the cco variable.
+
+Test 5 : Modifying the PCo in the NET
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Add a station authenticated and set it as a PCo in the AVLN.
+
+The station shall be in the CP_STA_STATE_AUTHENTICATED, and the AVLN shall
+have a pointer to this station in the pco variable.
+
+Remove Sta
+----------
+
+Test 1 : Removing a Associated station (not CCo, not PCo)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Add some station and remove it.
+At the end the list must be empty.
+
+Test 2 : Removing the CCo station of the net.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Add some station in the net list as associated, one of those stations is the
+CCo (TEI = 3 for examples).
+
+At the beginning of the test, the station with the TEI = 3, shall have its
+status cco flag setted and the network has its cco pointer corresponding to
+this station.
+
+At the end, the station shall not exist in the network and the pointer to the
+CCo in the network shall be null.
+The other stations of the AVLN shall remain present.
+
+Test 3 : Removing the PCo Station of the net.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Add some station in the net list as associated, one of those stations is the
+PCo (TEI = 3 for examples).
+
+At the beginning of the test, the station with the TEI = 3, shall have its
+status pco flag setted and the network has its pco pointer corresponding to
+this station.
+
+At the end, the station shall not exist in the network and the pointer to the
+PCo in the network shall be null.
+The other stations of the AVLN shall remain present.
+
+Commit to data plane
+--------------------
+
+Add some station to the list and call the commit to data plane function.
+
+The function of the CL have been overwritten in the cl_stub.c file (see in the
+src directory).
+
+It will normally allocate a block and all the station present in the network
+list will be present in it.
+
++-----+-----+-------+
+| Tag | TEI | MAC @ |
++-----+-----+-------+
+
+Garbage
+-------
+
+Verify the expiration date of all the station in the network. It the network
+is empty it shall post an event in the FSM.
+
+Environment
+~~~~~~~~~~~
+
+Add an AVLN and some station with different status.
+
+Three associated and three not associated stations.
+
++-----+-------+-----+-------+-----------+
+| sta | assoc | tei | mac @ | last seen |
++-----+-------+-----+-------+-----------+
+| 1 | false | 0 | 1 | 5 |
++-----+-------+-----+-------+-----------+
+| 2 | false | 0 | 2 | 7 |
++-----+-------+-----+-------+-----------+
+| 3 | false | 0 | 3 | 9 |
++-----+-------+-----+-------+-----------+
+| 4 | true | 1 | 1 | 6 |
++-----+-------+-----+-------+-----------+
+| 5 | true | 2 | 5 | 8 |
++-----+-------+-----+-------+-----------+
+| 6 | true | 3 | 9 | 10 |
++-----+-------+-----+-------+-----------+
+
+Result
+~~~~~~
+
+The station 1 and the station 4 shall be expired and shall not appear in the
+list after the garbage.
+
+The others shall be still present.
+
+Set slot id
+-----------
+
+Add an AVLN and set the slot id to 5.
+
+Result
+ The slot id shall be equal to 5.
+
+Network mode
+------------
+
+This test case shall test the function to set and get the network mode of an
+AVLN.
+
+Net configuration
+ After the initialization of the network the network mode is CSMA-Only.
+ At the second modification the network mode shall be setted to coordinated mode.
+
+Result
+ The network shall be in CSMA only mode at the first read of the network mode.
+ The network shall be in Coordinated mode at the second read.
+
+Set sta visible
+---------------
+
+This function has for job to set the neighbour station as visible allowing to
+increase or decrease the counter of visible stations in the network.
+
+Test 1 : Adding a STA
+~~~~~~~~~~~~~~~~~~~~~
+
+Environment
+ Add a station to the network and set it as visible.
+
+Result
+ The network shall have one station as visible.
+
+Test 2 : Adding two STAs
+~~~~~~~~~~~~~~~~~~~~~~~~
+
+Environment
+ Add two station to the AVLN configured as followed :
+
+ * STA 1 : visible
+ * STA 2 : hidden
+
+Result
+ The network shall have two station and only one visible.
diff --git a/cesar/cp/eoc/sta/mgr/test/utest/doc/net_list.txt b/cesar/cp/eoc/sta/mgr/test/utest/doc/net_list.txt
new file mode 100644
index 0000000000..758b4754b5
--- /dev/null
+++ b/cesar/cp/eoc/sta/mgr/test/utest/doc/net_list.txt
@@ -0,0 +1,114 @@
+Network list
+============
+
+Initialise
+-----------
+
+Shall initialise all the networks list (index greater than 1, the index 0 corresponds to the station AVLN):
+ - present flag shall be false.
+ - snid = 0
+ - nid = 0
+ - cco = null
+ - pco = null
+ - expiration_ntb = CP_NET_EXPIRATION_DELAY (see defs file in cp)
+ - associated_stas shall be empty.
+ - unssociated_stas shall be empty.
+
+The AVLN with the index 0 (the Stations AVLN) shall be present, i.e. the present flag shall be setted.
+
+Uninitialise
+------------
+
+Shall reset all the networks and call on each one the uninit function.
+
+For that some station will be create in each AVLN.
+
+AVLN 0:
+ - Station 1, TEI = 1, Mac @ = 11, is_cco = true.
+ - Station 2, TEI = 2, Mac @ = 12, is_cco = false, is_pco = true.
+
+AVLN 1:
+ - Station 1, TEI = 1, Mac @ = 21, is_cco = true.
+ - Station 2, TEI = 2, Mac @ = 22, is_cco = false, is_pco = true.
+ - Station 3, TEI = 3, Mac @ = 23.
+ - Station 4, TEI = 4, Mac @ = 24.
+
+AVLN 2:
+ - Station 1, TEI = 1, Mac @ = 31, is_cco = true.
+ - Station 2, TEI = 2, Mac @ = 32.
+ - Station 3, TEI = 3, Mac @ = 33.
+ - Station 4, TEI = 4, Mac @ = 34.
+
+At the end of this test case, all the station list shall be empty and the CCo, PCo pointer reseted.
+
+
+Add an AVLN
+-----------
+
+Create the AVLN and verify that it is possible to get it back using the get
+AVLN function.
+
+AVLN data:
+ - SNID = 1
+ - NID = 1
+
+The AVLN returned by the add function shall be in the following state:
+ - SNID = 1
+ - NID = 1
+ - present = true
+ - station_avln = false
+ - cco = null
+ - pco = null
+ - expiration_ntb = CP_NET_EXPIRATION_DELAY (see cp/defs.h)
+ - associated_stas = empty (use set_empty function).
+ - unassociated_stas = empty (use set_empty function).
+
+Remove an AVLN
+--------------
+
+Same thing as uninitializing an AVLN.
+
+Add an AVLN and remove it only using the SNID and NID.
+
+AVLN Data:
+ - SNID = 1
+ - NID = 1.
+
+At the end of the test this AVLN shall not exists.
+
+Update Station's SNID
+---------------------
+
+Modify the AVLN's SNID.
+
+Is empty
+--------
+
+Verify the presence of others AVLN on the medium.
+
+SNID present
+------------
+
+Return a flag indicating which SNID is currently in use.
+
+Environment 3 AVLNs with SNID 1, 5, 10.
+
+At the end of the test the flag shall contain 0x211.
+
+Get slot usage
+--------------
+
+Environment
+
+Result
+ This function shall return 0x94.
+ Add three AVLN in the station manager configured as followed:
+
+ * AVLN 1 : Slot id = 4;
+ * AVLN 2 : Slot id = 7;
+ * AVLN 3 : Slot id = 2;
+
+ This makes a slot usage equal to 0x94.
+
+Result
+ This function shall return 0x94.
diff --git a/cesar/cp/eoc/sta/mgr/test/utest/doc/sta.txt b/cesar/cp/eoc/sta/mgr/test/utest/doc/sta.txt
new file mode 100644
index 0000000000..e711621277
--- /dev/null
+++ b/cesar/cp/eoc/sta/mgr/test/utest/doc/sta.txt
@@ -0,0 +1,44 @@
+Station
+=======
+
+Get tei
+-------
+
+Allow any user to get a copy of the station TEI.
+
+Result
+~~~~~~
+
+Returns the correct value.
+
+Get Mac address
+---------------
+
+Allow any user to get a copy of the Station's Mac address.
+
+Result
+~~~~~~
+
+Returns the correct value.
+
+Get CCo status
+--------------
+
+Allow any user to get a copy of the station CCo status.
+
+Result
+~~~~~~
+
+Returns the correct value.
+
+
+Get PCo status
+---------------
+
+Allow any user to get a copy of the Station's Pco.
+
+Result
+~~~~~~
+
+Returns the correct value.
+
diff --git a/cesar/cp/eoc/sta/mgr/test/utest/doc/sta_mgr.txt b/cesar/cp/eoc/sta/mgr/test/utest/doc/sta_mgr.txt
new file mode 100644
index 0000000000..6fcf407725
--- /dev/null
+++ b/cesar/cp/eoc/sta/mgr/test/utest/doc/sta_mgr.txt
@@ -0,0 +1,14 @@
+Station Manager
+===============
+
+Initialise
+----------
+
+This shall call the function init of the net_list and the init function of the
+STA own data.
+
+Uninitialise
+------------
+
+This will call the uninit function to the net_list and the station own data.
+
diff --git a/cesar/cp/eoc/sta/mgr/test/utest/doc/sta_own_data.txt b/cesar/cp/eoc/sta/mgr/test/utest/doc/sta_own_data.txt
new file mode 100644
index 0000000000..ab302bcdd0
--- /dev/null
+++ b/cesar/cp/eoc/sta/mgr/test/utest/doc/sta_own_data.txt
@@ -0,0 +1,111 @@
+Sta own data
+============
+
+Test the Sta own data private attributes which shall only be modified by the
+accessors.
+
+Status
+------
+
+Tested : under test.
+
+Initialise
+----------
+
+Initialise the private structure (this structure contains the public
+structure) and verify if all the data are setted to 0.
+
+Result
+~~~~~~
+
+- If all the values are equals to 0, the test succeed.
+- If any value is not equal to 0, the test fail.
+
+TEI
+---
+
+Shall update the STA own data to set the station TEI, and modified the Mac
+config structure data referenced in the CP to update the station TEI.
+
+Result
+~~~~~~
+
+- The mac config contains the correct TEI.
+- The station own data contains the correct TEI.
+
+Mac address
+-----------
+
+Shall update the sta own data to set the mac address and modified the mac
+config structure referenced in the CP to update the mac address.
+
+Result
+~~~~~~
+
+- The mac config contains the correct Mac address
+- The station own data contains the correct mac address.
+
+NPW
+---
+
+Shall set up the NPW in the station own data and request the module MSG to
+send a MME to the PLC Driver to store the modification in the flash memory.
+
+*TODO* : Add the API in the MSG module.
+
+Result
+~~~~~~
+
+- The NPW is stored correctly in the STA own data.
+
+NMK
+---
+
+Shall set up the NMK in the station own data and request the module MSG to
+send a MME to the PLC Driver to store the modification in the flash memory.
+
+*TODO* : Add the API in the MSG module.
+
+Result
+~~~~~~
+
+- The NMK is stored correctly in the STA own data.
+
+DPW
+---
+
+Shall set up the DPW in the station own data and request the module MSG to
+send a MME to the PLC Driver to store the modification in the flash memory.
+
+*TODO* : Add the API in the MSG module.
+
+Result
+~~~~~~
+
+- The DPW is stored correctly in the STA own data.
+
+Security level
+--------------
+
+Shall set the security level of the station and send a message to the PLC
+driver to store the SL in the flash memory.
+
+*TODO* : Add the API in the MSG module.
+
+Result
+~~~~~~
+
+- The security level is setted correctly in the station own data.
+
+Was CCo Status
+--------------
+
+Shall set the was CCo status and send a MME to the PLC driver to store the
+station cco status in the flash memory.
+
+*TODO* : Add the API in the MSG module.
+
+Result
+~~~~~~
+
+- The was_cco status is setted in the station own data.
diff --git a/cesar/cp/eoc/sta/mgr/test/utest/override/cp/cco/action/inc/context.h b/cesar/cp/eoc/sta/mgr/test/utest/override/cp/cco/action/inc/context.h
new file mode 100644
index 0000000000..ca3da3cf61
--- /dev/null
+++ b/cesar/cp/eoc/sta/mgr/test/utest/override/cp/cco/action/inc/context.h
@@ -0,0 +1,26 @@
+#ifndef overide_cp_cco_action_inc_context_h
+#define overide_cp_cco_action_inc_context_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file overide/cp/cco/action/inc/context.h
+ * \brief « brief description »
+ * \ingroup « module »
+ *
+ * « long description »
+ */
+
+#define CP_CCO_ACTION_TEI_FLAGS_ROW 8
+
+struct cp_cco_action_t
+{
+ /** TEI in use. */
+ uint tei_flags [CP_CCO_ACTION_TEI_FLAGS_ROW];
+};
+
+#endif /* overide_cp_cco_action_inc_context_h */
diff --git a/cesar/cp/eoc/sta/mgr/test/utest/override/cp/inc/context.h b/cesar/cp/eoc/sta/mgr/test/utest/override/cp/inc/context.h
new file mode 100644
index 0000000000..47d4eea571
--- /dev/null
+++ b/cesar/cp/eoc/sta/mgr/test/utest/override/cp/inc/context.h
@@ -0,0 +1,57 @@
+#ifndef cp_inc_cp_h
+#define cp_inc_cp_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/inc/cp_private.h
+ * \brief Control plane context.
+ * \ingroup cp
+ *
+ */
+#include "lib/rnd.h"
+
+/* Public interfaces. */
+#include "cp/sta/mgr/sta_mgr.h"
+#include "cp/eoc/cco/action/cco_action.h"
+#include "cl/cl.h"
+#include "mac/common/config.h"
+#include "mac/sar/sar.h"
+
+/* Private interfaces. */
+#include "cp/sta/mgr/inc/sta_mgr.h"
+
+/* Override ones. */
+#include "cp/eoc/cco/action/inc/cco_action.h"
+
+struct cp_t
+{
+ /** station manager context. */
+ cp_sta_mgr_t sta_mgr;
+
+ /** Cl context. */
+ cl_t *cl;
+
+ /** Mac config */
+ mac_config_t *mac_config;
+
+ /** Mac store. */
+ mac_store_t *mac_store;
+
+ /** SAR layer context pointer. */
+ sar_t *sar;
+
+ /** CCo action */
+ cp_cco_action_t cco_action;
+
+ /** Random context. */
+ lib_rnd_t rnd;
+
+ void *bsu;
+};
+
+#endif /* cp_inc_cp_h */
diff --git a/cesar/cp/eoc/sta/mgr/test/utest/override/cp/sta/core/core.h b/cesar/cp/eoc/sta/mgr/test/utest/override/cp/sta/core/core.h
new file mode 100644
index 0000000000..a00e59f744
--- /dev/null
+++ b/cesar/cp/eoc/sta/mgr/test/utest/override/cp/sta/core/core.h
@@ -0,0 +1,21 @@
+#ifndef overide_cp_sta_core_core_h
+#define overide_cp_sta_core_core_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file overide/cp/sta/core/core.h
+ * \brief « brief description »
+ * \ingroup « module »
+ *
+ * « long description »
+ */
+
+u32
+cp_sta_core_get_date_ms (cp_t *cp);
+
+#endif /* overide_cp_sta_core_core_h */
diff --git a/cesar/cp/eoc/sta/mgr/test/utest/override/cp/sta/core/defs.h b/cesar/cp/eoc/sta/mgr/test/utest/override/cp/sta/core/defs.h
new file mode 100644
index 0000000000..9698b44e93
--- /dev/null
+++ b/cesar/cp/eoc/sta/mgr/test/utest/override/cp/sta/core/defs.h
@@ -0,0 +1,57 @@
+#ifndef cp_sta_core_defs_h
+#define cp_sta_core_defs_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/sta/core/defs.h
+ * \brief Sta core defs.
+ * \ingroup cp/sta/core
+ *
+ */
+#include "cp/fsm/forward.h"
+
+/** Forward declaration. */
+typedef struct cp_sta_core_t cp_sta_core_t;
+
+/*
+ * the sta core event flags
+ * these are some flags, so take care to give a value with all bits set to 0 but one.
+ */
+enum cp_sta_core_event_flag_t
+{
+ CP_STA_CORE_EVENT_FLAG_RECV_BEACON = 0x1,
+ CP_STA_CORE_EVENT_FLAG_RECV_MME = 0x2,
+ CP_STA_CORE_EVENT_FLAG_FSM = 0x4,
+ CP_STA_CORE_EVENT_FLAG_GARBAGE = 0x8,
+ CP_STA_CORE_EVENT_FLAG_TERMINATE = 0x10
+};
+typedef enum cp_sta_core_event_flag_t cp_sta_core_event_flag_t;
+
+/** Definition of alarm info structure
+ * (applications should not use it directly but use "alias" defined just below) */
+struct cp_sta_core_timed_event_def_t
+{
+ /* eCos alarm. */
+ uint alarm;
+ /* eCos alarm handle. */
+ uint alarm_handle;
+ /* the sta core event flag to set
+ * (auto or user-specified when creating/launching timer alarm). */
+ cp_sta_core_event_flag_t event_flag;
+ /* FSM event specified when creating/launching timer alarm
+ * (set if the previous flag is CP_STA_CORE_EVENT_FLAG_FSM). */
+ cp_fsm_event_t *fsm_event;
+ /* flag indicating a periodic alarm (if set to true)
+ * or one-shot alarm (if set to false). */
+ bool cyclic_alarm;
+ /* pointer to CP context. */
+ cp_t *cp_ctx;
+};
+typedef struct cp_sta_core_timed_event_def_t cp_sta_core_timed_event_def_t;
+
+#endif /* cp_sta_core_defs_h */
diff --git a/cesar/cp/eoc/sta/mgr/test/utest/override/mac/sar/inc/context.h b/cesar/cp/eoc/sta/mgr/test/utest/override/mac/sar/inc/context.h
new file mode 100644
index 0000000000..9e7c6f07ca
--- /dev/null
+++ b/cesar/cp/eoc/sta/mgr/test/utest/override/mac/sar/inc/context.h
@@ -0,0 +1,23 @@
+#ifndef overide_mac_sar_inc_context_h
+#define overide_mac_sar_inc_context_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file overide/mac/sar/inc/context.h
+ * \brief « brief description »
+ * \ingroup « module »
+ *
+ * « long description »
+ */
+
+struct sar_t
+{
+ mac_store_t *mac_store;
+};
+
+#endif /* overide_mac_sar_inc_context_h */
diff --git a/cesar/cp/eoc/sta/mgr/test/utest/src/core_stub.c b/cesar/cp/eoc/sta/mgr/test/utest/src/core_stub.c
new file mode 100644
index 0000000000..c2dfaceccb
--- /dev/null
+++ b/cesar/cp/eoc/sta/mgr/test/utest/src/core_stub.c
@@ -0,0 +1,23 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/core_stub.c
+ * \brief « brief description »
+ * \ingroup « module »
+ *
+ * « long description »
+ */
+#include "common/std.h"
+#include "cp/cp.h"
+
+u32
+cp_sta_core_get_date_ms (cp_t *cp)
+{
+ return 1;
+}
+
diff --git a/cesar/cp/eoc/sta/mgr/test/utest/src/net_test.c b/cesar/cp/eoc/sta/mgr/test/utest/src/net_test.c
new file mode 100644
index 0000000000..c4ef480f26
--- /dev/null
+++ b/cesar/cp/eoc/sta/mgr/test/utest/src/net_test.c
@@ -0,0 +1,225 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/net_test.c
+ * \brief Test the net APIs
+ * \ingroup cp_sta_mgr
+ *
+ */
+#include "common/std.h"
+#include "test_sta_mgr.h"
+
+bool
+cp_net_station_assoc_less (set_node_t *left, set_node_t *right);
+
+bool
+cp_net_station_unassoc_less (set_node_t *left, set_node_t *right);
+
+void
+test_case_cp_net_init (test_t test)
+{
+ cp_t ctx;
+ cp_net_t net;
+ test_case_begin (test, "NET init");
+ test_begin (test, "init")
+ {
+ cp_net_init (&ctx, &net);
+ test_fail_unless (net.present == false);
+ }
+ test_end;
+}
+
+void
+test_case_cp_net_uninit (test_t test)
+{
+ cp_t cp;
+ test_sta_mgr_init (&cp);
+ test_case_begin (test, "uninit");
+ test_begin (test, "Net empty")
+ {
+ cp_net_t net;
+ cp_net_init (&cp, &net);
+ cp_net_uninit (&cp, &net);
+ test_fail_unless (set_empty (&net.associated_stas));
+ test_fail_unless (set_empty (&net.unassociated_stas));
+ test_fail_unless (!net.present);
+ }
+ test_end;
+
+ test_begin (test, "NET empty with NID SNID")
+ {
+ cp_net_t *net;
+ /* Initialise the comparison net. */
+ net = cp_sta_mgr_add_avln (&cp, 1, 1);
+ test_fail_unless (net->present);
+ cp_sta_mgr_remove_avln (&cp, net->snid, net->nid);
+ test_fail_unless (set_empty (&net->associated_stas));
+ test_fail_unless (set_empty (&net->unassociated_stas));
+ test_fail_unless (!net->present);
+ }
+ test_end;
+ test_sta_mgr_uninit (&cp);
+}
+
+void
+test_case_cp_net_get_snid_nid (test_t test)
+{
+ test_case_begin (test, "Get snid");
+
+ test_begin (test, "Get snid and nid from a NET")
+ {
+ cp_t cp;
+ cp_net_t net;
+
+ /* Configure the test. */
+ memset (&cp, 0, sizeof (cp_t));
+ memset (&net, 0, sizeof (cp_net_t));
+
+ net.snid = 0x1;
+ net.nid = 0x133456789ABCull;
+
+ test_fail_if (cp_net_get_snid (&cp, &net) != net.snid);
+ test_fail_if (cp_net_get_nid (&cp, &net) != net.nid);
+ }
+ test_end;
+}
+
+void
+test_case_cp_net_slot_usage (test_t test)
+{
+ test_case_begin (test, "Set, get slots and get slot mask");
+
+ test_begin (test, "Set slot id and mask")
+ {
+ cp_t cp;
+ cp_net_t net;
+
+ /* Configure the test. */
+ memset (&cp, 0, sizeof (cp_t));
+ memset (&net, 0, sizeof (cp_net_t));
+
+ cp_net_set_slot_id_and_usage (&cp, &net, 1, 2);
+
+ test_fail_if (cp_net_get_slot_id (&cp, &net) != 1);
+ test_fail_if (cp_net_get_slot_usage_mask (&cp, &net) != 2);
+ }
+ test_end;
+}
+
+void
+test_case_cp_net_nm (test_t test)
+{
+ test_case_begin (test, "Network mode");
+
+ test_begin (test, "Set the NM and GET it.")
+ {
+ cp_t cp;
+ cp_net_t net;
+
+ /* Configure the test. */
+ memset (&cp, 0, sizeof (cp_t));
+ memset (&net, 0, sizeof (cp_net_t));
+
+ cp_net_set_nm (&cp, &net, MAC_NM_COORDINATED);
+ test_fail_if (cp_net_get_nm (&cp, &net) != MAC_NM_COORDINATED);
+
+ cp_net_set_nm (&cp, &net, MAC_NM_CSMA_ONLY);
+ test_fail_if (cp_net_get_nm (&cp, &net) != MAC_NM_CSMA_ONLY);
+
+ cp_net_set_nm (&cp, &net, MAC_NM_UNCOORDINATED);
+ test_fail_if (cp_net_get_nm (&cp, &net) != MAC_NM_UNCOORDINATED);
+ }
+ test_end;
+}
+
+void
+test_case_cp_net_sta_visible (test_t test)
+{
+ test_case_begin (test, "visible stations");
+
+ test_begin (test, "Set")
+ {
+ cp_t cp;
+ cp_net_t *net;
+ cp_sta_t *sta;
+ /* Configure the test. */
+ test_sta_mgr_init (&cp);
+ net = cp_sta_mgr_add_avln (&cp, 1, 1);
+ sta = cp_sta_mgr_sta_add (&cp, net, 1, 1);
+ cp_sta_mgr_set_our_avln (&cp, net);
+ cp_sta_own_data_set_tei (&cp, 254);
+ /* the test. */
+ cp_sta_set_visible_status (
+ &cp, sta, CP_STA_VISIBLE_STATE_VISIBLE);
+ test_fail_unless (net->num_visible_stas == 1);
+ cp_sta_set_visible_status (
+ &cp, sta, CP_STA_VISIBLE_STATE_HIDDEN);
+ test_fail_unless (net->num_visible_stas == 0);
+ slab_release (sta);
+ test_sta_mgr_uninit (&cp);
+ }
+ test_end;
+}
+
+void
+test_case_cp_net_access (test_t test)
+{
+ test_case_begin (test, "Network Access type");
+
+ test_begin (test, "Network access type")
+ {
+ cp_t cp;
+ cp_net_t net;
+
+ /* Configuring the test. */
+ memset (&cp, 0, sizeof (cp_t));
+ memset (&net, 0, sizeof (cp_net_t));
+
+ /* Test. */
+ cp_net_set_access (&cp, &net, HPAV_ACCESS_ACCESS);
+ test_fail_if (net.access != HPAV_ACCESS_ACCESS);
+
+ cp_net_set_access (&cp, &net, HPAV_ACCESS_IN_HOME);
+ test_fail_if (net.access != HPAV_ACCESS_IN_HOME);
+ }
+ test_end;
+}
+
+void
+test_case_get_net (test_t test)
+{
+ test_case_begin (test, "Net of a STA");
+
+ test_begin (test, "Get the net of a STA")
+ {
+ cp_t cp;
+ cp_net_t *net;
+ cp_sta_t *sta;
+ /* Initialize. */
+ test_sta_mgr_init (&cp);
+ net = cp_sta_mgr_add_avln (&cp, 1, 1);
+ sta = cp_sta_mgr_sta_add (&cp, net, 1, 1);
+ test_fail_unless (cp_sta_get_net (sta) == net);
+ slab_release (sta);
+ test_sta_mgr_uninit (&cp);
+ }
+ test_end;
+}
+
+void
+test_suite_net (test_t test)
+{
+ test_suite_begin (test, "Net");
+ test_case_cp_net_init (test);
+ test_case_cp_net_uninit (test);
+ test_case_cp_net_get_snid_nid (test);
+ test_case_cp_net_slot_usage (test);
+ test_case_cp_net_nm (test);
+ test_case_cp_net_sta_visible (test);
+ test_case_cp_net_access (test);
+}
diff --git a/cesar/cp/eoc/sta/mgr/test/utest/src/sar_stub.c b/cesar/cp/eoc/sta/mgr/test/utest/src/sar_stub.c
new file mode 100644
index 0000000000..a9847bef57
--- /dev/null
+++ b/cesar/cp/eoc/sta/mgr/test/utest/src/sar_stub.c
@@ -0,0 +1,50 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/sar_stub.c
+ * \brief « brief description »
+ * \ingroup « module »
+ *
+ * « long description »
+ */
+#include "common/std.h"
+#include "mac/sar/sar.h"
+#include "mac/sar/inc/context.h"
+
+/**
+ * Remove a station from the SAR and the mac store.
+ * \param ctx the CP context.
+ * \param tei the station tei.
+ *
+ * Remove all the MFS from the expiration mechanism of the SAR and ends to
+ * remove the station from the mac store.
+ */
+void
+sar_sta_remove (sar_t *ctx, u8 tei)
+{
+ dbg_assert (ctx);
+ dbg_assert (ctx->mac_store);
+ dbg_assert (tei);
+
+ dbg_check (mac_store_sta_remove (ctx->mac_store, tei));
+}
+
+void
+sar_cleanup (sar_t *ctx)
+{
+ mfs_tx_t *mfs;
+ dbg_assert (ctx);
+
+ mfs = mac_store_mfs_get_tx (ctx->mac_store, true, false, 1,
+ MAC_TEI_BCAST);
+ if (mfs)
+ {
+ mac_store_mfs_remove (ctx->mac_store, (mfs_t *) mfs);
+ blk_release (mfs);
+ }
+}
diff --git a/cesar/cp/eoc/sta/mgr/test/utest/src/sta-test.c b/cesar/cp/eoc/sta/mgr/test/utest/src/sta-test.c
new file mode 100644
index 0000000000..dd1d4b80d4
--- /dev/null
+++ b/cesar/cp/eoc/sta/mgr/test/utest/src/sta-test.c
@@ -0,0 +1,689 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/sta-test.c
+ * \brief « brief description »
+ * \ingroup « module »
+ *
+ * « long description »
+ */
+#include "common/std.h"
+#include "lib/test.h"
+#include "lib/bitstream.h"
+
+#include "cp/sta/mgr/sta_own_data.h"
+
+#include "cp/inc/context.h"
+#include "cp/sta/mgr/inc/sta_own_data.h"
+
+#include "cl/inc/context.h"
+#include "mac/sar/inc/context.h"
+#include <string.h>
+#include "cp/fsm/fsm.h"
+
+static void
+test_sta_own_init (cp_t *cp)
+{
+ static mac_config_t mac_config;
+ static cl_t cl;
+ static sar_t sar;
+ memset (&mac_config, 0, sizeof (mac_config));
+ memset (&cl, 0, sizeof (cl_t));
+ memset (&sar, 0, sizeof (sar_t));
+ memset (cp, 0, sizeof (cp_t));
+ cp->mac_config = &mac_config;
+ cp->cl = &cl;
+ cp->sar = &sar;
+ cp->mac_store = sar.mac_store = mac_store_init ();
+ lib_rnd_init (&cp->rnd, 1234);
+ lib_stats_init ();
+ cp_eoc_sta_mgr_init (cp);
+}
+
+static void
+test_sta_own_uninit (cp_t *cp)
+{
+ cp_sta_mgr_uninit (cp);
+ mac_store_uninit (cp->mac_store);
+ lib_stats_uninit ();
+}
+
+void
+test_case_cp_sta_own_data_init (test_t test)
+{
+ test_case_begin (test, "init");
+
+ test_begin (test, "init")
+ {
+ cp_t cp;
+ cp_sta_own_data_private_t cmp;
+ cp_sta_own_data_private_t *real;
+
+ memset (&cmp, 0, sizeof (cp_sta_own_data_private_t));
+ cmp.public.hybrid_mode = MAC_COEXISTENCE_AV_ONLY_MODE; /* EoC spec. */
+
+ test_sta_own_init (&cp);
+ cmp.snid = cp_sta_own_data_get_snid (&cp);
+
+ real = (cp_sta_own_data_private_t*) cp_sta_mgr_get_sta_own_data(&cp);
+ test_fail_if (
+ memcmp(&cmp, real, sizeof (cp_sta_own_data_private_t)) != 0);
+
+ test_sta_own_uninit (&cp);
+ }
+ test_end;
+}
+
+void
+test_case_cp_sta_own_data__set_and_get_tei (test_t test)
+{
+ test_case_begin (test, "Set Get tei");
+
+ test_begin (test, "Set")
+ {
+ cp_t cp;
+ cp_net_t *net;
+ test_sta_own_init (&cp);
+ // Add an AVLN.
+ net = cp_sta_mgr_add_avln (&cp, 1, 1);
+ cp_sta_mgr_set_our_avln (&cp, net);
+
+ cp_sta_own_data_set_tei (&cp, 2);
+
+ test_fail_if (cp_sta_own_data_get_tei (&cp) != 2);
+
+ cp_sta_own_data_set_tei (&cp, 2);
+ test_fail_if (cp_sta_own_data_get_tei (&cp) != 2);
+
+ cp_sta_own_data_set_tei (&cp, MAC_TEI_UNASSOCIATED);
+ test_fail_unless (cp_sta_own_data_get_tei (&cp) ==
+ MAC_TEI_UNASSOCIATED);
+ test_sta_own_uninit (&cp);
+ }
+ test_end;
+}
+
+void
+test_case_cp_sta_own_data__mac_address (test_t test)
+{
+ test_case_begin (test, "Mac address");
+
+ test_begin (test, "Set and Get the mac address")
+ {
+ cp_t cp;
+
+ mac_config_t mac_config;
+ cp.mac_config = &mac_config;
+ lib_stats_init ();
+ lib_rnd_init (&cp.rnd, 0x432);
+
+ cp_eoc_sta_mgr_init (&cp);
+ cp_sta_own_data_set_mac_address (&cp, 0x123456789ABCull);
+
+ test_fail_if (cp_sta_own_data_get_mac_address (&cp) !=
+ 0x123456789ABCull);
+
+ cp_sta_mgr_uninit (&cp);
+ lib_stats_uninit ();
+ }
+ test_end;
+}
+
+void
+test_case_cp_sta_own_data__npw (test_t test)
+{
+ test_case_begin (test, "Set and get the NPW");
+
+ test_begin (test, "NPW")
+ {
+ cp_t cp;
+
+ lib_stats_init ();
+ lib_rnd_init (&cp.rnd, 0x432);
+ cp_eoc_sta_mgr_init (&cp);
+ cp_sta_own_data_set_npw (&cp, "Hello world");
+
+ test_fail_if (
+ strcmp (cp_sta_own_data_get_npw (&cp), "Hello world") != 0);
+
+ cp_sta_mgr_uninit (&cp);
+ lib_stats_uninit ();
+ }
+ test_end;
+}
+
+void
+test_case_cp_sta_own_data__nmk (test_t test)
+{
+ test_case_begin (test, "Set and get the NMK");
+
+ test_begin (test, "NMK")
+ {
+ cp_t cp;
+ cp_key_t key;
+ cp_key_t res;
+ bool changed;
+
+ key.key[0] = 0x1234;
+ key.key[1] = 0x5678;
+ key.key[2] = 0x9abc;
+ key.key[3] = 0xdef0;
+
+ lib_stats_init ();
+ lib_rnd_init (&cp.rnd, 0x432);
+ cp_eoc_sta_mgr_init (&cp);
+ changed = cp_sta_own_data_set_nmk (&cp, key, 0);
+
+ res = cp_sta_own_data_get_nmk (&cp);
+
+ test_fail_if (changed == false);
+ test_fail_if (memcmp (&res, &key, sizeof (cp_key_t)) != 0);
+
+ changed = cp_sta_own_data_set_nmk (&cp, key, 0);
+ test_fail_if (changed == true);
+
+ cp_sta_mgr_uninit (&cp);
+ lib_stats_uninit ();
+ }
+ test_end;
+}
+
+void
+test_case_cp_sta_own_data__dpw (test_t test)
+{
+ test_case_begin (test, "Set and get the DPW");
+
+ test_begin (test, "DPW")
+ {
+ cp_t cp;
+
+ lib_stats_init ();
+ lib_rnd_init (&cp.rnd, 0x432);
+ cp_eoc_sta_mgr_init (&cp);
+ cp_sta_own_data_set_dpw (&cp, "Hello world");
+
+ test_fail_if (
+ strcmp (cp_sta_own_data_get_dpw (&cp), "Hello world") != 0);
+
+ cp_sta_mgr_uninit (&cp);
+ lib_stats_uninit ();
+ }
+ test_end;
+}
+
+void
+test_case_cp_sta_own_data__security_level (test_t test)
+{
+ test_case_begin (test, "Set and get the SL");
+
+ test_begin (test, "SL")
+ {
+ cp_t cp;
+
+ lib_stats_init ();
+ lib_rnd_init (&cp.rnd, 0x432);
+ cp_eoc_sta_mgr_init (&cp);
+ cp_sta_own_data_set_security_level (&cp, CP_SECURITY_LEVEL_SC);
+
+ test_fail_if (cp_sta_own_data_get_security_level (&cp) !=
+ CP_SECURITY_LEVEL_SC);
+
+ cp_sta_own_data_set_security_level (&cp, CP_SECURITY_LEVEL_HS);
+
+ test_fail_if (cp_sta_own_data_get_security_level (&cp) !=
+ CP_SECURITY_LEVEL_HS);
+
+ cp_sta_mgr_uninit (&cp);
+ lib_stats_uninit ();
+ }
+ test_end;
+}
+
+void
+test_case_cp_sta_own_data__was_cco (test_t test)
+{
+ test_case_begin (test, "Set and get was_cco");
+
+ test_begin (test, "was_cco")
+ {
+ cp_t cp;
+
+ lib_stats_init ();
+ lib_rnd_init (&cp.rnd, 0x432);
+ cp_eoc_sta_mgr_init (&cp);
+ cp_sta_own_data_set_was_cco (&cp, true);
+ test_fail_if (cp_sta_own_data_get_was_cco(&cp) != true);
+ cp_sta_own_data_set_was_cco (&cp, false);
+ test_fail_if (cp_sta_own_data_get_was_cco (&cp) != false);
+
+ cp_sta_mgr_uninit (&cp);
+ lib_stats_uninit ();
+ }
+ test_end;
+
+}
+
+void
+test_case_cp_sta_own_data__hfid_avln (test_t test)
+{
+ test_case_begin (test, "Set and get the AVLN HFID");
+
+ test_begin (test, "AVLN HFID")
+ {
+ cp_t cp;
+ cp_sta_own_data_t *sta;
+
+ lib_stats_init ();
+ lib_rnd_init (&cp.rnd, 0x432);
+ cp_eoc_sta_mgr_init (&cp);
+ sta = cp_sta_mgr_get_sta_own_data (&cp);
+ cp_sta_own_data_set_hfid_avln (&cp, "Hello world");
+
+ test_fail_if (
+ strcmp (sta->hfid_avln, "Hello world") != 0);
+
+ cp_sta_mgr_uninit (&cp);
+ lib_stats_uninit ();
+ }
+ test_end;
+}
+
+void
+test_case_cp_sta_own_data__hfid_user (test_t test)
+{
+ test_case_begin (test, "Set and get the USER HFID");
+
+ test_begin (test, "USER HFID")
+ {
+ cp_t cp;
+ cp_sta_own_data_t *sta;
+
+ lib_stats_init ();
+ lib_rnd_init (&cp.rnd, 0x432);
+ cp_eoc_sta_mgr_init (&cp);
+ sta = cp_sta_mgr_get_sta_own_data (&cp);
+ cp_sta_own_data_set_hfid_user (&cp, "Hello world");
+
+ test_fail_if (
+ strcmp (sta->hfid_user, "Hello world") != 0);
+
+ cp_sta_mgr_uninit (&cp);
+ lib_stats_uninit ();
+ }
+ test_end;
+}
+
+void
+test_case_cp_sta_own_data__hfid_manufacturer (test_t test)
+{
+ test_case_begin (test, "Set and get the MANUFACTURER HFID");
+
+ test_begin (test, "MANUFACTURER HFID")
+ {
+ cp_t cp;
+ cp_sta_own_data_t *sta;
+
+ lib_stats_init ();
+ lib_rnd_init (&cp.rnd, 0x432);
+ cp_eoc_sta_mgr_init (&cp);
+ sta = cp_sta_mgr_get_sta_own_data (&cp);
+ cp_sta_own_data_set_hfid_manufacturer (&cp, "Hello world");
+
+ test_fail_if (
+ strcmp (sta->hfid_manufacturer, "Hello world") != 0);
+
+ cp_sta_mgr_uninit (&cp);
+ lib_stats_uninit ();
+ }
+ test_end;
+}
+
+void
+test_case_cp_sta_own_data__pco_glid (test_t test)
+{
+ test_case_begin (test, "Set and get the PCO glid");
+
+ test_begin (test, "PCo")
+ {
+ cp_t cp;
+ cp_sta_own_data_t *sta;
+
+ lib_stats_init ();
+ lib_rnd_init (&cp.rnd, 0x432);
+ cp_eoc_sta_mgr_init (&cp);
+ sta = cp_sta_mgr_get_sta_own_data (&cp);
+ cp_sta_own_data_set_pco_glid (&cp, 0x90);
+ test_fail_if (cp_sta_own_data_get_pco_glid (&cp) != 0x90);
+ cp_sta_own_data_set_pco_glid (&cp, 0x0);
+
+ cp_sta_mgr_uninit (&cp);
+ lib_stats_uninit ();
+ }
+ test_end;
+}
+
+void
+test_case_cp_sta_own_data__pco_status (test_t test)
+{
+ test_case_begin (test, "Set and get the PCO status");
+
+ test_begin (test, "PCo")
+ {
+ cp_t cp;
+ cp_sta_own_data_t *sta;
+
+ lib_stats_init ();
+ lib_rnd_init (&cp.rnd, 0x432);
+ cp_eoc_sta_mgr_init (&cp);
+ sta = cp_sta_mgr_get_sta_own_data (&cp);
+
+ cp_sta_own_data_set_pco_status (&cp, true);
+ test_fail_if (cp_sta_own_data_get_pco_status (&cp) != true);
+
+ cp_sta_own_data_set_pco_status (&cp, true);
+ test_fail_if (cp_sta_own_data_get_pco_status (&cp) != true);
+
+ cp_sta_own_data_set_pco_status (&cp, false);
+ test_fail_if (cp_sta_own_data_get_pco_status (&cp) != false);
+
+ cp_sta_mgr_uninit (&cp);
+ lib_stats_uninit ();
+ }
+ test_end;
+
+ test_begin (test, "PCo and glid")
+ {
+ cp_t cp;
+ cp_sta_own_data_t *sta;
+
+ lib_stats_init ();
+ lib_rnd_init (&cp.rnd, 0x432);
+ cp_eoc_sta_mgr_init (&cp);
+ sta = cp_sta_mgr_get_sta_own_data (&cp);
+ cp_sta_own_data_set_pco_status (&cp, true);
+ cp_sta_own_data_set_pco_glid (&cp, 0x85);
+
+ test_fail_if (cp_sta_own_data_get_pco_status (&cp) != true);
+ test_fail_if (cp_sta_own_data_get_pco_glid (&cp) != 0x85);
+
+ cp_sta_mgr_uninit (&cp);
+ lib_stats_uninit ();
+ }
+ test_end;
+}
+
+void
+test_case_cp_sta_own_data__cco_status (test_t test)
+{
+ test_case_begin (test, "Set and get the CCo status");
+
+ test_begin (test, "CCo")
+ {
+ cp_t cp;
+ cp_net_t *net;
+ mac_config_t mac_config;
+ cp_sta_own_data_t *sta;
+ cl_t cl;
+ sar_t sar;
+
+ cp.mac_config = &mac_config;
+ cl.mactotei = NULL;
+ cp.cl = &cl;
+ cp.sar = &sar;
+ cp.mac_store = mac_store_init ();
+ sar.mac_store = cp.mac_store;
+
+ lib_stats_init ();
+ lib_rnd_init (&cp.rnd, 0x432);
+ cp_eoc_sta_mgr_init (&cp);
+ net = cp_sta_mgr_add_avln (&cp, 1, 1);
+ cp_sta_mgr_set_our_avln (&cp, net);
+
+ sta = cp_sta_mgr_get_sta_own_data (&cp);
+ cp_sta_own_data_set_tei (&cp, 1);
+
+ cp_sta_own_data_set_cco_status (&cp, true);
+ test_fail_if (cp_sta_own_data_get_cco_status (&cp) != true);
+
+ cp_sta_own_data_set_cco_status (&cp, true);
+ test_fail_if (cp_sta_own_data_get_cco_status (&cp) != true);
+
+ cp_sta_own_data_set_cco_status (&cp, false);
+ test_fail_if (cp_sta_own_data_get_cco_status (&cp) != false);
+
+ cp_sta_mgr_uninit (&cp);
+ mac_store_uninit (cp.mac_store);
+ lib_stats_uninit ();
+ }
+ test_end;
+}
+
+void
+test_case_cp_sta_own_data__authenticated_status (test_t test)
+{
+ test_case_begin (test, "Set and get the CCo authenticated");
+
+ test_begin (test, "CCo")
+ {
+ cp_t cp;
+ cp_net_t *net;
+ mac_config_t mac_config;
+ cp_sta_own_data_t *sta;
+ cl_t cl;
+ sar_t sar;
+
+ cp.mac_config = &mac_config;
+ cl.mactotei = NULL;
+ cp.cl = &cl;
+ cp.sar = &sar;
+ cp.mac_store = mac_store_init ();
+ sar.mac_store = cp.mac_store;
+
+ lib_stats_init ();
+ lib_rnd_init (&cp.rnd, 0x432);
+ cp_eoc_sta_mgr_init (&cp);
+ net = cp_sta_mgr_add_avln (&cp, 1, 1);
+ cp_sta_mgr_set_our_avln (&cp, net);
+
+ sta = cp_sta_mgr_get_sta_own_data (&cp);
+ cp_sta_own_data_set_tei (&cp, 1);
+
+ cp_sta_own_data_set_authenticated_status (&cp, true);
+ test_fail_if (cp_sta_own_data_get_authenticated_status (&cp) != true);
+
+ cp_sta_own_data_set_authenticated_status (&cp, true);
+ test_fail_if (cp_sta_own_data_get_authenticated_status (&cp) != true);
+
+ cp_sta_own_data_set_authenticated_status (&cp, false);
+ test_fail_if (cp_sta_own_data_get_authenticated_status (&cp) != false);
+
+ cp_sta_mgr_uninit (&cp);
+ mac_store_uninit (cp.mac_store);
+ lib_stats_uninit ();
+ }
+ test_end;
+}
+
+void
+test_case_cp_sta_own_data__nid (test_t test)
+{
+ test_case_begin (test, "Set/Get NID & SL");
+
+ test_begin (test, "")
+ {
+ cp_t cp;
+
+ lib_stats_init ();
+ lib_rnd_init (&cp.rnd, 0x432);
+ cp_eoc_sta_mgr_init (&cp);
+
+ lib_rnd_t rnd;
+ lib_rnd_init (&rnd, 0x4224);
+
+ cp_security_level_t sl;
+ for (sl = CP_SECURITY_LEVEL_SC; sl < CP_SECURITY_LEVEL_NB; sl++)
+ {
+ uint i;
+ for (i = 0; i < 1234; i++)
+ {
+ cp_nid_t nid = ((u64) sl) << (HPAV_NID_SIZE_BITS - 2)
+ | lib_rnd_uniform (&rnd, -1);
+ cp_sta_own_data_set_nid (&cp, nid);
+ test_fail_if (cp_sta_own_data_get_nid (&cp) != nid);
+ test_fail_if (cp_sta_own_data_get_security_level (&cp) != sl);
+ }
+ }
+
+ cp_sta_mgr_uninit (&cp);
+ lib_stats_uninit ();
+ }
+ test_end;
+}
+
+void
+test_case_cp_sta_own_data__snid (test_t test)
+{
+ test_case_begin (test, "Set and GET SNID");
+
+ test_begin (test, "")
+ {
+ cp_t cp;
+
+ lib_stats_init ();
+ lib_rnd_init (&cp.rnd, 0x432);
+ cp_eoc_sta_mgr_init (&cp);
+
+ cp_sta_own_data_set_snid (&cp, 0x2);
+ test_fail_if (cp_sta_own_data_get_snid (&cp) != 0x2);
+ cp_sta_own_data_set_snid (&cp, 0x1);
+ test_fail_if (cp_sta_own_data_get_snid (&cp) != 0x1);
+
+ cp_sta_mgr_uninit (&cp);
+ lib_stats_uninit ();
+ }
+ test_end;
+}
+
+void
+test_case_cp_sta_own_data__tek (test_t test)
+{
+ test_case_begin (test, "Set the TEK");
+
+ test_begin (test, "TEK")
+ {
+ cp_t cp;
+ cp_key_t key;
+ cp_key_t tek;
+
+ lib_stats_init ();
+ lib_rnd_init (&cp.rnd, 0x432);
+ cp_eoc_sta_mgr_init (&cp);
+
+ key.key[0] = 0x12345678;
+ key.key[1] = 0x12345678;
+ key.key[2] = 0x12345678;
+ key.key[3] = 0x12345678;
+
+ cp_sta_own_data_set_tek (&cp, key);
+
+ tek = cp_sta_own_data_get_tek (&cp);
+
+ test_fail_unless (memcmp (&tek, &key, sizeof (cp_key_t)) == 0);
+ cp_sta_mgr_uninit (&cp);
+ lib_stats_uninit ();
+ }
+ test_end;
+}
+
+void
+test_case_cp_sta_own_data__dak (test_t test)
+{
+ test_case_begin (test, "DAK");
+
+ test_begin (test, "store dak")
+ {
+ cp_t cp;
+ uint i;
+ cp_key_t dak = { {0x11111111, 0x22222222, 0x33333333, 0x44444444} };
+ cp_key_t own_dak;
+
+ memset (&cp, 0, sizeof (cp_t));
+
+ lib_stats_init ();
+ lib_rnd_init (&cp.rnd, 0x432);
+ cp_eoc_sta_mgr_init (&cp);
+
+ cp_sta_own_data_set_dak (&cp, dak);
+ own_dak = cp_sta_own_data_get_dak (&cp);
+
+ for (i = 0; i < COUNT (dak.key); i++)
+ test_fail_unless (dak.key[i] == own_dak.key[i]);
+
+ cp_sta_mgr_uninit (&cp);
+ lib_stats_uninit ();
+ }
+ test_end;
+}
+
+void
+test_case_cp_sta_own_data__sc (test_t test)
+{
+ test_case_begin (test, "Simple connect");
+
+ test_begin (test, "")
+ {
+ cp_t cp;
+
+ memset (&cp, 0, sizeof (cp_t));
+ lib_stats_init ();
+ lib_rnd_init (&cp.rnd, 0x432);
+ cp_eoc_sta_mgr_init (&cp);
+
+ cp_sta_own_data_set_sc (&cp, true);
+ test_fail_unless (cp.sta_mgr.sta_own_data.sc == true);
+ test_fail_unless (cp_sta_own_data_get_sc (&cp) == true);
+
+ cp_sta_own_data_set_sc (&cp, true);
+ test_fail_unless (cp.sta_mgr.sta_own_data.sc == true);
+ test_fail_unless (cp_sta_own_data_get_sc (&cp) == true);
+
+ cp_sta_own_data_set_sc (&cp, false);
+ test_fail_unless (cp.sta_mgr.sta_own_data.sc == false);
+ test_fail_unless (cp_sta_own_data_get_sc (&cp) == false);
+
+ cp_sta_mgr_uninit (&cp);
+ lib_stats_uninit ();
+ }
+ test_end;
+}
+
+void
+test_suite_sta_own (test_t test)
+{
+ test_suite_begin (test, "station own data");
+ test_case_cp_sta_own_data_init (test);
+ test_case_cp_sta_own_data__set_and_get_tei (test);
+ test_case_cp_sta_own_data__mac_address (test);
+ test_case_cp_sta_own_data__npw (test);
+ test_case_cp_sta_own_data__nmk (test);
+ test_case_cp_sta_own_data__dpw (test);
+ test_case_cp_sta_own_data__security_level (test);
+ test_case_cp_sta_own_data__was_cco (test);
+ test_case_cp_sta_own_data__hfid_avln (test);
+ test_case_cp_sta_own_data__hfid_user (test);
+ test_case_cp_sta_own_data__hfid_manufacturer (test);
+ test_case_cp_sta_own_data__pco_glid (test);
+ test_case_cp_sta_own_data__pco_status (test);
+ test_case_cp_sta_own_data__cco_status (test);
+ test_case_cp_sta_own_data__authenticated_status (test);
+ test_case_cp_sta_own_data__nid (test);
+ test_case_cp_sta_own_data__snid (test);
+ test_case_cp_sta_own_data__tek (test);
+ test_case_cp_sta_own_data__dak (test);
+ test_case_cp_sta_own_data__sc (test);
+}
diff --git a/cesar/cp/eoc/sta/mgr/test/utest/src/sta_mgr.c b/cesar/cp/eoc/sta/mgr/test/utest/src/sta_mgr.c
new file mode 100644
index 0000000000..45154c8b47
--- /dev/null
+++ b/cesar/cp/eoc/sta/mgr/test/utest/src/sta_mgr.c
@@ -0,0 +1,1584 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/sta_mgr.c
+ * \brief « brief description »
+ * \ingroup « module »
+ *
+ * « long description »
+ */
+#include "common/std.h"
+#include "lib/test.h"
+#include "test_sta_mgr.h"
+
+#include "cp/eoc/sta/mgr/sta_mgr.h"
+#include "cp/sta/mgr/sta_mgr.h"
+
+void
+test_case__cp_sta_mgr_sta (test_t test)
+{
+ test_case_begin (test, "Station manager using stations");
+
+ test_begin (test, "Station Unassociated")
+ {
+ cp_t cp;
+ cl_t cl;
+ mac_t mac_addr;
+ mac_config_t mac_config;
+ cp_net_t *net;
+ cp_sta_t *sta;
+
+ /* configuring the test. */
+ memset (&cp, 0, sizeof (cp_t));
+ memset (&cl, 0, sizeof (cl_t));
+ memset (&mac_config, 0, sizeof (mac_config_t));
+
+ cp.mac_config= &mac_config;
+ cp.cl = &cl;
+ mac_addr = 0x12345678ABCull;
+
+ lib_stats_init ();
+ cp_eoc_sta_mgr_init (&cp);
+
+ net = cp_sta_mgr_add_avln (&cp, 1, 1);
+ dbg_check (net);
+
+ /* Add the station. */
+ sta = cp_sta_mgr_sta_add (&cp, net, 0, mac_addr);
+ test_fail_if (sta == NULL);
+ slab_release (sta);
+
+ /* Find the station by the mac address. */
+ sta = cp_sta_mgr_sta_get_from_mac (&cp, mac_addr);
+ test_fail_if (sta == NULL);
+ test_fail_if (cp_sta_get_mac_address (sta) != mac_addr);
+ slab_release (sta);
+
+ /* Remove the station. */
+ cp_sta_mgr_sta_remove_from_mac (&cp, mac_addr);
+ sta = cp_sta_mgr_sta_get_from_mac (&cp, mac_addr);
+ test_fail_if (sta != NULL);
+
+ cp_sta_mgr_uninit (&cp);
+ lib_stats_uninit ();
+ }
+ test_end;
+
+ test_begin (test, "Station associated")
+ {
+ cp_t cp;
+ cp_net_t *net;
+ cp_sta_t *sta;
+ mac_t mac_addr;
+ cp_tei_t sta_tei;
+ mac_config_t mac_config;
+
+ /* configuring the test. */
+ memset (&cp, 0, sizeof (cp_t));
+ memset (&mac_config, 0, sizeof (mac_config_t));
+
+ cp.mac_config = &mac_config;
+ mac_addr = 0x12345678ABCull;
+ sta_tei = 0xB;
+
+ lib_stats_init ();
+ cp_eoc_sta_mgr_init (&cp);
+
+ net = cp_sta_mgr_add_avln (&cp, 1, 1);
+ dbg_check (net);
+
+ /* Add a station associated. */
+ sta = cp_sta_mgr_sta_add (&cp, net, sta_tei, mac_addr);
+ test_fail_if (sta == NULL);
+ slab_release (sta);
+
+ /* Get the station by the TEI. */
+ sta = cp_sta_mgr_sta_get_assoc (&cp, net, sta_tei);
+ test_fail_if (sta == NULL);
+ slab_release (sta);
+
+ /* Get the station by the mac address. */
+ sta = cp_sta_mgr_sta_get_from_mac (&cp, mac_addr);
+ test_fail_if (sta == NULL);
+ slab_release (sta);
+
+ /* Remove the station by the TEI. */
+ cp_sta_mgr_sta_remove_assoc (&cp, net, sta_tei);
+
+ cp_sta_mgr_uninit (&cp);
+ lib_stats_uninit ();
+ }
+ test_end;
+
+ test_begin (test, "station Case 1: Nothing change")
+ {
+ cp_t cp;
+ cp_net_t *net;
+ cp_sta_t *sta;
+ cp_sta_t *sta2;
+ mac_t mac_addr;
+ mac_config_t mac_config;
+
+ /* configuring the test. */
+ memset (&cp, 0, sizeof (cp_t));
+ memset (&mac_config, 0, sizeof (mac_config_t));
+
+ cp.mac_config = &mac_config;
+ mac_addr = 0x12345678ABCull;
+
+ lib_stats_init ();
+ cp_eoc_sta_mgr_init (&cp);
+
+ net = cp_sta_mgr_add_avln (&cp, 1, 1);
+ dbg_check (net);
+
+ /* Add a station unassociated. */
+ sta = cp_sta_mgr_sta_add (&cp, net, 0, mac_addr);
+ test_fail_if (sta == NULL);
+
+ /* Add a station with the same mac address and TEI. */
+ sta2 = cp_sta_mgr_sta_add (&cp, net, 0, mac_addr);
+ test_fail_if (sta != sta2);
+
+ /* release the stations. */
+ slab_release (sta);
+ slab_release (sta2);
+
+ cp_sta_mgr_uninit (&cp);
+ lib_stats_uninit ();
+ }
+ test_end;
+
+ test_begin (test, "station Case 2: Same TEI, Mac address change from bcast to unique")
+ {
+ cp_t cp;
+ cp_net_t *net;
+ cp_sta_t *sta;
+ cp_sta_t *sta2;
+ mac_t mac_addr;
+ cp_tei_t sta_tei;
+ mac_config_t mac_config;
+
+ /* configuring the test. */
+ memset (&cp, 0, sizeof (cp_t));
+ memset (&mac_config, 0, sizeof (mac_config_t));
+
+ cp.mac_config = &mac_config;
+ mac_addr = 0x12345678ABCull;
+ sta_tei = 0xB;
+
+ lib_stats_init ();
+ cp_eoc_sta_mgr_init (&cp);
+
+ net = cp_sta_mgr_add_avln (&cp, 1, 1);
+ dbg_check (net);
+
+ /* Add a station unassociated. */
+ sta = cp_sta_mgr_sta_add (&cp, net, sta_tei, MAC_BROADCAST);
+ test_fail_if (sta == NULL);
+ test_fail_if (cp_sta_get_tei (sta) != sta_tei);
+ test_fail_if (cp_sta_get_mac_address (sta) != MAC_BROADCAST);
+
+ test_fail_if (set_empty(&cp.sta_mgr.stas) != true);
+
+ /* Add a station with the real mac address. */
+ sta2 = cp_sta_mgr_sta_add (&cp, net, sta_tei, mac_addr);
+ test_fail_if (sta != sta2);
+
+ test_fail_if (cp_sta_get_tei (sta2) != sta_tei);
+ test_fail_if (cp_sta_get_mac_address (sta2) != mac_addr);
+
+ test_fail_if (set_empty(&cp.sta_mgr.stas) != false);
+ test_fail_if (set_empty(&net->associated_stas) != false);
+
+ /* release the stations. */
+ slab_release (sta);
+ slab_release (sta2);
+
+ cp_sta_mgr_uninit (&cp);
+ lib_stats_uninit ();
+ }
+ test_end;
+
+ test_begin (test, "station Case 2: Same TEI, Mac address change from A to B")
+ {
+ cp_t cp;
+ cp_net_t *net;
+ cp_sta_t *sta;
+ cp_sta_t *sta2;
+ mac_t mac_addrA;
+ mac_t mac_addrB;
+ cp_tei_t sta_tei;
+ mac_config_t mac_config;
+
+ /* configuring the test. */
+ memset (&cp, 0, sizeof (cp_t));
+ memset (&mac_config, 0, sizeof (mac_config_t));
+
+ cp.mac_config=&mac_config;
+ mac_addrA = 0x12345678ABCull;
+ mac_addrB = 0x2345678ABCDull;
+ sta_tei = 0xB;
+
+ lib_stats_init ();
+ cp_eoc_sta_mgr_init (&cp);
+
+ net = cp_sta_mgr_add_avln (&cp, 1, 1);
+ dbg_check (net);
+
+ /* Add a station unassociated. */
+ sta = cp_sta_mgr_sta_add (&cp, net, sta_tei, mac_addrA);
+ test_fail_if (sta == NULL);
+ test_fail_if (cp_sta_get_tei (sta) != sta_tei);
+ test_fail_if (cp_sta_get_mac_address (sta) != mac_addrA);
+
+ test_fail_if (set_empty(&cp.sta_mgr.stas) != false);
+
+ /* Add a station with the real mac address. */
+ sta2 = cp_sta_mgr_sta_add (&cp, net, sta_tei, mac_addrB);
+ test_fail_if (sta == sta2);
+
+ test_fail_if (cp_sta_get_tei (sta2) != sta_tei);
+ test_fail_if (cp_sta_get_mac_address (sta2) != mac_addrB);
+
+ test_fail_if (set_empty(&cp.sta_mgr.stas) != false);
+ test_fail_if (set_empty(&net->associated_stas) != false);
+
+ /* release the stations. */
+ slab_release (sta);
+ slab_release (sta2);
+
+ cp_sta_mgr_uninit (&cp);
+ lib_stats_uninit ();
+ }
+ test_end;
+
+ test_begin (test, "station Case 2: Change the TEI, Mac address unchanged")
+ {
+ cp_t cp;
+ cp_net_t *net;
+ cp_sta_t *sta;
+ cp_sta_t *sta2;
+ mac_t mac_addr;
+ cp_tei_t sta_tei;
+ mac_config_t mac_config;
+
+ /* configuring the test. */
+ memset (&cp, 0, sizeof (cp_t));
+ memset (&mac_config, 0, sizeof (mac_config_t));
+
+ cp.mac_config=&mac_config;
+ mac_addr = 0x12345678ABCull;
+ sta_tei = 0xB;
+
+ lib_stats_init ();
+ cp_eoc_sta_mgr_init (&cp);
+
+ net = cp_sta_mgr_add_avln (&cp, 1, 1);
+ dbg_check (net);
+
+ /* Add a station unassociated. */
+ sta = cp_sta_mgr_sta_add (&cp, net, 0, mac_addr);
+ test_fail_if (sta == NULL);
+ test_fail_if (cp_sta_get_tei (sta) != 0);
+ test_fail_if (cp_sta_get_mac_address (sta) != mac_addr);
+
+ test_fail_if (set_empty(&cp.sta_mgr.stas) != false);
+ test_fail_if (set_empty(&net->associated_stas) != true);
+ test_fail_if (set_empty(&net->unassociated_stas) != false);
+
+ /* Add a station with the real TEI. */
+ sta2 = cp_sta_mgr_sta_add (&cp, net, sta_tei, mac_addr);
+ test_fail_if (sta == sta2);
+
+ test_fail_if (cp_sta_get_tei (sta2) != sta_tei);
+ test_fail_if (cp_sta_get_mac_address (sta2) != mac_addr);
+
+ test_fail_if (set_empty(&cp.sta_mgr.stas) != false);
+ test_fail_if (set_empty(&net->associated_stas) != false);
+ test_fail_if (set_empty(&net->unassociated_stas) != true);
+
+ /* release the stations. */
+ slab_release (sta);
+ slab_release (sta2);
+
+ cp_sta_mgr_uninit (&cp);
+ lib_stats_uninit ();
+ }
+ test_end;
+
+ test_begin (test, "station Case 2: Change the TEI A to B, Mac address unchanged")
+ {
+ cp_t cp;
+ cp_net_t *net;
+ cp_sta_t *sta;
+ cp_sta_t *sta2;
+ mac_t mac_addr;
+ cp_tei_t sta_tei_A;
+ cp_tei_t sta_tei_B;
+ mac_config_t mac_config;
+
+ /* configuring the test. */
+ memset (&cp, 0, sizeof (cp_t));
+ memset (&mac_config, 0, sizeof (mac_config_t));
+ cp.mac_config=&mac_config;
+ mac_addr = 0x12345678ABCull;
+
+ sta_tei_A = 0xB;
+ sta_tei_B = 0xF;
+
+ lib_stats_init ();
+ cp_eoc_sta_mgr_init (&cp);
+
+ net = cp_sta_mgr_add_avln (&cp, 1, 1);
+ dbg_check (net);
+
+ /* Add a station associated. */
+ sta = cp_sta_mgr_sta_add (&cp, net, sta_tei_A, mac_addr);
+ test_fail_if (sta == NULL);
+ test_fail_if (cp_sta_get_tei (sta) != sta_tei_A);
+ test_fail_if (cp_sta_get_mac_address (sta) != mac_addr);
+
+ test_fail_if (set_empty(&cp.sta_mgr.stas) != false);
+ test_fail_if (set_empty(&net->associated_stas) != false);
+ test_fail_if (set_empty(&net->unassociated_stas) != true);
+
+ /* Add a station with the real TEI. */
+ sta2 = cp_sta_mgr_sta_add (&cp, net, sta_tei_B, mac_addr);
+ test_fail_if (sta != sta2);
+
+ test_fail_if (cp_sta_get_tei (sta2) != sta_tei_B);
+ test_fail_if (cp_sta_get_mac_address (sta2) != mac_addr);
+
+ test_fail_if (set_empty(&cp.sta_mgr.stas) != false);
+ test_fail_if (set_empty(&net->associated_stas) != false);
+ test_fail_if (set_empty(&net->unassociated_stas) != true);
+
+ /* release the stations. */
+ slab_release (sta);
+ slab_release (sta2);
+
+ cp_sta_mgr_uninit (&cp);
+ lib_stats_uninit ();
+ }
+ test_end;
+
+ test_begin (test, "station Case 4: Change the Mac address from A to bcast")
+ {
+ cp_t cp;
+ cp_net_t *net;
+ cp_sta_t *sta;
+ cp_sta_t *sta2;
+ mac_t mac_addr;
+ cp_tei_t sta_tei;
+ mac_config_t mac_config;
+
+ /* configuring the test. */
+ memset (&cp, 0, sizeof (cp_t));
+ memset (&mac_config, 0, sizeof (mac_config_t));
+ cp.mac_config=&mac_config;
+ mac_addr = 0x12345678ABCull;
+
+ sta_tei = 0xB;
+
+ lib_stats_init ();
+ cp_eoc_sta_mgr_init (&cp);
+
+ net = cp_sta_mgr_add_avln (&cp, 1, 1);
+ dbg_check (net);
+
+ /* Add a station associated. */
+ sta = cp_sta_mgr_sta_add (&cp, net, sta_tei, mac_addr);
+ test_fail_if (sta == NULL);
+ test_fail_if (cp_sta_get_tei (sta) != sta_tei);
+ test_fail_if (cp_sta_get_mac_address (sta) != mac_addr);
+
+ test_fail_if (set_empty(&cp.sta_mgr.stas) != false);
+ test_fail_if (set_empty(&net->associated_stas) != false);
+ test_fail_if (set_empty(&net->unassociated_stas) != true);
+
+ /* Add a station with the new Mac address. */
+ sta2 = cp_sta_mgr_sta_add (&cp, net, sta_tei, MAC_BROADCAST);
+ test_fail_if (sta != sta2);
+
+ test_fail_if (cp_sta_get_tei (sta2) != sta_tei);
+ test_fail_if (cp_sta_get_mac_address (sta2) != mac_addr);
+
+ test_fail_if (set_empty(&cp.sta_mgr.stas) != false);
+ test_fail_if (set_empty(&net->associated_stas) != false);
+ test_fail_if (set_empty(&net->unassociated_stas) != true);
+
+ /* release the stations. */
+ slab_release (sta);
+ slab_release (sta2);
+
+ cp_sta_mgr_uninit (&cp);
+ lib_stats_uninit ();
+ }
+ test_end;
+
+ test_begin (test, "station Case 2: Change the network")
+ {
+ cp_t cp;
+ cp_net_t *net;
+ cp_net_t *net2;
+ cp_sta_t *sta;
+ cp_sta_t *sta2;
+ mac_t mac_addr;
+ cp_tei_t sta_tei;
+ mac_config_t mac_config;
+
+ /* configuring the test. */
+ memset (&cp, 0, sizeof (cp_t));
+ memset (&mac_config, 0, sizeof (mac_config_t));
+
+ cp.mac_config=&mac_config;
+ mac_addr = 0x12345678ABCull;
+
+ sta_tei = 0xB;
+
+ lib_stats_init ();
+ cp_eoc_sta_mgr_init (&cp);
+
+ net = cp_sta_mgr_add_avln (&cp, 1, 1);
+ dbg_check (net);
+ net2 = cp_sta_mgr_add_avln (&cp, 2, 2);
+ dbg_check (net2);
+
+ /* Add a station associated. */
+ sta = cp_sta_mgr_sta_add (&cp, net, sta_tei, mac_addr);
+ test_fail_if (sta == NULL);
+ test_fail_if (cp_sta_get_tei (sta) != sta_tei);
+ test_fail_if (cp_sta_get_mac_address (sta) != mac_addr);
+
+ test_fail_if (set_empty(&cp.sta_mgr.stas) != false);
+ test_fail_if (set_empty(&net->associated_stas) != false);
+ test_fail_if (set_empty(&net->unassociated_stas) != true);
+
+ /* Add a station in another network. */
+ sta2 = cp_sta_mgr_sta_add (&cp, net2, sta_tei, mac_addr);
+ test_fail_if (sta == sta2);
+
+ test_fail_if (cp_sta_get_tei (sta2) != sta_tei);
+ test_fail_if (cp_sta_get_mac_address (sta2) != mac_addr);
+
+ test_fail_if (set_empty(&cp.sta_mgr.stas) != false);
+ test_fail_if (set_empty(&net->associated_stas) != true);
+ test_fail_if (set_empty(&net->unassociated_stas) != true);
+
+ test_fail_if (set_empty(&net2->associated_stas) != false);
+ test_fail_if (set_empty(&net2->unassociated_stas) != true);
+
+ /* release the stations. */
+ slab_release (sta);
+ slab_release (sta2);
+
+ cp_sta_mgr_uninit (&cp);
+ lib_stats_uninit ();
+ }
+ test_end;
+
+ test_case_begin (test, "Sta Remove");
+
+ test_begin (test, "remove from mac")
+ {
+ cp_t cp;
+ cp_net_t *net;
+ cp_sta_t *sta;
+
+ test_sta_mgr_init (&cp);
+ net = cp_sta_mgr_add_avln (&cp, 1, 1);
+ sta = cp_sta_mgr_sta_add (&cp, net, 0, 1);
+ slab_release (sta);
+
+ cp_sta_mgr_sta_remove_from_mac (&cp, 1);
+
+ sta = cp_sta_mgr_sta_get_from_mac(&cp, 1);
+ test_fail_unless (sta == NULL);
+
+ /* set our avln. */
+ cp_sta_mgr_set_our_avln (&cp, net);
+ sta = cp_sta_mgr_sta_add (&cp, net, 0, 1);
+ slab_release (sta);
+
+ cp_sta_mgr_sta_remove_from_mac (&cp, 1);
+ sta = cp_sta_mgr_sta_get_from_mac(&cp, 1);
+ test_fail_unless (sta == NULL);
+
+ sta = cp_sta_mgr_sta_add (&cp, net, 1, 1);
+ slab_release (sta);
+
+ cp_sta_mgr_sta_remove_from_mac (&cp, 1);
+ sta = cp_sta_mgr_sta_get_from_mac(&cp, 1);
+ test_fail_unless (sta == NULL);
+ test_sta_mgr_uninit (&cp);
+ }
+ test_end;
+
+ test_begin (test, "remove from assoc")
+ {
+ cp_t cp;
+ cp_net_t *net;
+ cp_sta_t *sta;
+ test_sta_mgr_init (&cp);
+ net = cp_sta_mgr_add_avln (&cp, 1, 1);
+ sta = cp_sta_mgr_sta_add (&cp, net, 1, 1);
+ slab_release (sta);
+
+ cp_sta_mgr_sta_remove_assoc (&cp, net, 1);
+
+ sta = cp_sta_mgr_sta_get_from_mac(&cp, 1);
+ test_fail_unless (sta == NULL);
+
+ /* set our avln. */
+ cp_sta_mgr_set_our_avln (&cp, net);
+ sta = cp_sta_mgr_sta_add (&cp, net, 1, 1);
+ slab_release (sta);
+
+ cp_sta_mgr_sta_remove_assoc (&cp, net, 1);
+ sta = cp_sta_mgr_sta_get_from_mac(&cp, 1);
+ test_fail_unless (sta == NULL);
+ test_sta_mgr_uninit (&cp);
+ }
+ test_end;
+
+ test_begin (test, "remove")
+ {
+ cp_t cp;
+ cp_net_t *net;
+ cp_sta_t *sta;
+ test_sta_mgr_init (&cp);
+ net = cp_sta_mgr_add_avln (&cp, 1, 1);
+ sta = cp_sta_mgr_sta_add (&cp, net, 1, 1);
+
+ cp_sta_mgr_sta_remove (&cp, sta);
+ slab_release (sta);
+
+ sta = cp_sta_mgr_sta_get_from_mac(&cp, 1);
+ test_fail_unless (sta == NULL);
+
+ /* set our avln. */
+ cp_sta_mgr_set_our_avln (&cp, net);
+ sta = cp_sta_mgr_sta_add (&cp, net, 1, 1);
+ slab_release (sta);
+
+ cp_sta_mgr_sta_remove (&cp, sta);
+ sta = cp_sta_mgr_sta_get_from_mac(&cp, 1);
+ test_fail_unless (sta == NULL);
+ test_sta_mgr_uninit (&cp);
+ }
+ test_end;
+}
+
+void
+test_case__cp_net_uninit (test_t test)
+{
+ test_case_begin (test, "Uninitialise the network with some stations");
+
+ test_begin (test, "net")
+ {
+ cp_t cp;
+ cp_net_t *net;
+ cp_sta_t *sta;
+ mac_config_t mac_config;
+
+ /* configuring the test. */
+ memset (&cp, 0, sizeof (cp_t));
+ memset (&mac_config, 0, sizeof (mac_config_t));
+
+ cp.mac_config=&mac_config;
+ lib_stats_init ();
+ cp_eoc_sta_mgr_init (&cp);
+
+ /* Add an AVLN. */
+ net = cp_sta_mgr_add_avln (&cp, 1, 1);
+
+ test_fail_if (set_empty(&net->associated_stas) != true);
+ test_fail_if (set_empty(&net->unassociated_stas) != true);
+
+ /* Add some stations. */
+ sta = cp_sta_mgr_sta_add (&cp, net, 0, 1);
+ slab_release (sta);
+ sta = cp_sta_mgr_sta_add (&cp, net, 0, 2);
+ slab_release (sta);
+ sta = cp_sta_mgr_sta_add (&cp, net, 0, 3);
+ slab_release (sta);
+
+ sta = cp_sta_mgr_sta_add (&cp, net, 1, 4);
+ slab_release (sta);
+ sta = cp_sta_mgr_sta_add (&cp, net, 2, 5);
+ slab_release (sta);
+ sta = cp_sta_mgr_sta_add (&cp, net, 3, 6);
+ slab_release (sta);
+
+ test_fail_if (set_empty(&net->associated_stas) != false);
+ test_fail_if (set_empty(&net->unassociated_stas) != false);
+
+ cp_sta_mgr_uninit (&cp);
+ lib_stats_uninit ();
+
+ test_fail_if (set_empty(&net->associated_stas) != true);
+ test_fail_if (set_empty(&net->unassociated_stas) != true);
+ test_fail_if (set_empty(&cp.sta_mgr.stas) != true);
+ }
+ test_end;
+}
+
+void
+test_case__cp_sta_manager_garbage (test_t test)
+{
+ test_case_begin (test, "Garbage function");
+
+ test_begin (test, "Garbage outside our AVLN.")
+ {
+ cp_t cp;
+ cp_net_t *net1;
+ cp_net_t *net2;
+ cp_sta_t *sta;
+ cl_t cl;
+ uint i;
+ mac_config_t mac_config;
+
+ /* configuring the test. */
+ memset (&cp, 0, sizeof (cp_t));
+ memset (&cl, 0, sizeof (cl_t));
+ memset (&mac_config, 0, sizeof (mac_config_t));
+
+ cp.mac_config=&mac_config;
+ lib_stats_init ();
+ cp_eoc_sta_mgr_init (&cp);
+ cp.cl = &cl;
+
+ /* Add an AVLN. */
+ net1 = cp_sta_mgr_add_avln (&cp, 1, 1);
+ net2 = cp_sta_mgr_add_avln (&cp, 2, 2);
+
+ for (i = 0; i < 10; i++)
+ {
+ sta = cp_sta_mgr_sta_add (&cp, net1, i + 1, i + 1);
+ sta->expired_date_ms = cp_sta_core_get_date_ms (&cp)
+ - HPAV_DISCOVERED_LIST_EXPIRE_TIME_MS;
+ slab_release (sta);
+
+ sta = cp_sta_mgr_sta_add (&cp, net2, i + 1, (i + 1) * 20);
+ sta->expired_date_ms = cp_sta_core_get_date_ms (&cp)
+ - HPAV_DISCOVERED_LIST_EXPIRE_TIME_MS;
+ slab_release (sta);
+ }
+
+ /* Release the stations. */
+ cp_eoc_sta_mgr_garbage (&cp);
+ test_fail_unless (cp_sta_mgr_net_list_is_empty (&cp));
+
+ cp_sta_mgr_uninit (&cp);
+ lib_stats_uninit ();
+ }
+ test_end;
+
+ test_begin (test, "Associated stations")
+ {
+ cp_t cp;
+ cp_net_t *net;
+ cp_sta_t *sta;
+ mac_config_t mac_config;
+ cl_t cl;
+ sar_t sar;
+
+ /* configure the test.*/
+ memset (&cp, 0, sizeof (cp_t));
+ memset (&cl, 0, sizeof (cl_t));
+ memset (&sar, 0, sizeof (sar_t));
+ memset (&mac_config, 0, sizeof (mac_config_t));
+
+ cp.mac_config = &mac_config;
+ lib_stats_init ();
+ cp_eoc_sta_mgr_init (&cp);
+ mac_ntb_init (&mac_config);
+
+ net = cp_sta_mgr_add_avln (&cp, 1, 1);
+ cp.sta_mgr.our_avln = net;
+ cp.mac_store = mac_store_init ();
+ cp.mac_config = &mac_config;
+ cp.cl = &cl;
+ cp.sar = &sar;
+ sar.mac_store = cp.mac_store;
+
+ cp_sta_own_data_set_tei (&cp, 34);
+ cp_sta_own_data_set_cco_status (&cp, true);
+
+ /* Add some stations. */
+ sta = cp_sta_mgr_sta_add (&cp, net, 0x1, 123);
+ cp_sta_set_assoc_confirmed (&cp, sta, false);
+ sta->assoc_req_last_ms = 130000; /* > 2 min. */
+ slab_release (sta);
+
+ sta = cp_sta_mgr_sta_add (&cp, net, 0x3, 124);
+ cp_sta_set_assoc_confirmed (&cp, sta, false);
+ sta->assoc_req_last_ms = 60000; /* 1 min. */
+ slab_release (sta);
+
+ /* Test. */
+ cp_sta_mgr__assoc__timeout (&cp, 60000);
+
+ sta = cp_sta_mgr_sta_get_from_mac (&cp, 123);
+ test_fail_if (cp_sta_get_assoc_confirmed (&cp, sta) != false);
+ slab_release (sta);
+
+ sta = cp_sta_mgr_sta_get_from_mac (&cp, 124);
+ test_fail_if (cp_sta_get_assoc_confirmed (&cp, sta) != false);
+ slab_release (sta);
+
+ /* Test. */
+ cp_sta_mgr__assoc__timeout (&cp, 120000);
+
+ sta = cp_sta_mgr_sta_get_from_mac (&cp, 123);
+ test_fail_if (cp_sta_get_assoc_confirmed (&cp, sta) != false);
+ slab_release (sta);
+
+ sta = cp_sta_mgr_sta_get_from_mac (&cp, 124);
+ test_fail_if (cp_sta_get_assoc_confirmed (&cp, sta) != true);
+ slab_release (sta);
+
+ /* Station manager uninitialise. */
+ cp_sta_mgr_sta_remove_from_mac (&cp, 123);
+ cp_sta_mgr_sta_remove_from_mac (&cp, 124);
+ mac_store_uninit (cp.mac_store);
+ cp_sta_mgr_uninit (&cp);
+ lib_stats_uninit ();
+ }
+ test_end;
+
+ test_begin (test, "Garbage the network")
+ {
+ cp_t cp;
+ cp_net_t *net;
+ cp_sta_t *sta;
+ sar_t sar;
+ cl_t cl;
+ mac_config_t mac_config;
+
+ memset (&cp, 0, sizeof (cp_t));
+ memset (&sar, 0, sizeof (sar_t));
+ memset (&cl, 0, sizeof (cl_t));
+ memset (&mac_config, 0, sizeof (mac_config_t));
+
+ cp.sar = &sar;
+ cp.cl = &cl;
+ cp.mac_config = &mac_config;
+ cp.mac_store = mac_store_init ();
+ sar.mac_store = cp.mac_store;
+ lib_stats_init ();
+ cp_eoc_sta_mgr_init (&cp);
+ net = cp_sta_mgr_add_avln (&cp, 1, 1);
+ /* Add some stations in the first AVLN. */
+ sta = cp_sta_mgr_sta_add (&cp, net, 1, 1);
+ sta->expired_date_ms = cp_sta_core_get_date_ms (&cp)
+ - HPAV_DISCOVERED_LIST_EXPIRE_TIME_MS - 10;
+ slab_release (sta);
+ /* Set our AVLN. */
+ cp_sta_mgr_set_our_avln (&cp, net);
+ /* Launch the test. */
+ cp_eoc_sta_mgr_garbage (&cp);
+ /* Its our AVLN and the station is not CCo. It should not remove the
+ * station. */
+ test_fail_unless (!cp_net_is_empty (&cp, net));
+ /* Now the net is no more our AVLN. */
+ cp_sta_mgr_set_our_avln (&cp, NULL);
+ test_fail_unless (!cp_net_is_empty (&cp, net));
+ cp_eoc_sta_mgr_garbage (&cp);
+ test_fail_unless (cp_net_is_empty (&cp, net));
+ test_fail_unless (!net->present);
+ cp_sta_mgr_uninit (&cp);
+ lib_stats_uninit ();
+ mac_store_uninit (sar.mac_store);
+ }
+ test_end;
+}
+
+void
+test_case__cp_net_pco (test_t test)
+{
+ test_case_begin (test, "Net pco");
+
+ test_begin (test, "PCo on the net")
+ {
+ cp_t cp;
+ cp_net_t *net;
+ cp_sta_t *sta;
+ mac_config_t mac_config;
+
+ /* configuring the test. */
+ memset (&cp, 0, sizeof (cp_t));
+ memset (&mac_config, 0, sizeof (mac_config_t));
+
+ cp.mac_config=&mac_config;
+ lib_stats_init ();
+ cp_eoc_sta_mgr_init (&cp);
+
+ /* Add an AVLN. */
+ net = cp_sta_mgr_add_avln (&cp, 2, 2);
+
+ sta = cp_sta_mgr_sta_add (&cp, net, 1, 1);
+
+ /* Set the station as PCo. */
+ cp_net_set_pco (&cp, net, 1);
+
+ test_fail_if (cp_sta_get_pco_status (sta) != true);
+ test_fail_if (net->pco != sta);
+
+ /* Unset the PCo. */
+ cp_net_set_pco (&cp, net, 0);
+
+ test_fail_if (cp_sta_get_pco_status (sta) != false);
+ test_fail_if (net->pco != NULL);
+
+ slab_release (sta);
+ cp_sta_mgr_uninit (&cp);
+ lib_stats_uninit ();
+
+ }
+ test_end;
+}
+
+void
+test_case__cp_net_sta_get_first_next (test_t test)
+{
+ test_case_begin (test, "Get first and next");
+
+ test_begin (test, "Get the first and next station")
+ {
+ cp_t cp;
+ cp_net_t *net;
+ cp_sta_t *sta1;
+ cp_sta_t *sta2;
+ mac_config_t mac_config;
+
+ /* configuring the test. */
+ memset (&cp, 0, sizeof (cp_t));
+ memset (&mac_config, 0, sizeof (mac_config_t));
+
+ cp.mac_config=&mac_config;
+ lib_stats_init ();
+ cp_eoc_sta_mgr_init (&cp);
+
+ /* Add an AVLN. */
+ net = cp_sta_mgr_add_avln (&cp, 2, 2);
+
+ sta1 = cp_sta_mgr_sta_add (&cp, net, 1, 1);
+ sta2 = cp_sta_mgr_sta_add (&cp, net, 2, 2);
+ slab_release (sta1);
+ slab_release (sta2);
+
+ /* Get the first station. */
+ sta1 = cp_net_sta_get_first (&cp, net, CP_NET_STA_ASSOC);
+ test_fail_if (sta1 == NULL);
+ test_fail_if (cp_sta_get_tei (sta1) != 1);
+
+ /* Get the next station. */
+ sta2 = cp_net_sta_get_next (&cp, net, sta1);
+ test_fail_if (sta2 == NULL);
+ test_fail_if (cp_sta_get_tei (sta2) != 2);
+
+ slab_release (sta2);
+ cp_sta_mgr_uninit (&cp);
+ lib_stats_uninit ();
+ }
+ test_end;
+}
+
+void
+test_case__cp_sta_mgr_get_avln (test_t test)
+{
+ test_case_begin (test, "Get AVLN");
+
+ test_begin (test, "Get an AVLN")
+ {
+ cp_t cp;
+ uint i, j;
+ /* configuring the test. */
+ memset (&cp, 0, sizeof (cp_t));
+ lib_stats_init ();
+ cp_eoc_sta_mgr_init (&cp);
+ for (i = 0; i < HPAV_AVLNS_NB_MAX; i++)
+ cp_sta_mgr_add_avln (&cp, i, i);
+ for (i = 0; i < HPAV_AVLNS_NB_MAX; i++)
+ {
+ test_fail_unless (cp.sta_mgr.networks[i].present);
+ for (j = 0; j < HPAV_AVLNS_NB_MAX; j++)
+ {
+ if (i != j)
+ {
+ test_fail_unless (
+ cp.sta_mgr.networks[i].snid
+ != cp.sta_mgr.networks[j].snid);
+ test_fail_unless (
+ cp.sta_mgr.networks[i].nid
+ != cp.sta_mgr.networks[j].nid);
+ }
+ }
+ }
+ cp_sta_mgr_uninit (&cp);
+ lib_stats_uninit ();
+ }
+ test_end;
+}
+
+void
+test_case__cp_sta_mgr_get_first_next_avln (test_t test)
+{
+ test_case_begin (test, "Get first and next AVLN");
+
+ test_begin (test, "Get first and next AVLN")
+ {
+ cp_t cp;
+ cp_net_t *net_cmp[3];
+ cp_net_t *net;
+
+ /* configuring the test. */
+ memset (&cp, 0, sizeof (cp_t));
+
+ lib_stats_init ();
+ cp_eoc_sta_mgr_init (&cp);
+
+ /* Add AVLN. */
+ net_cmp[0] = cp_sta_mgr_add_avln (&cp, 2, 2);
+ net_cmp[1] = cp_sta_mgr_add_avln (&cp, 3, 3);
+ net_cmp[2] = cp_sta_mgr_add_avln (&cp, 4, 4);
+
+ /* Get the AVLN. */
+ net = cp_sta_mgr_get_first_avln (&cp);
+ test_fail_if (net_cmp[0] != net);
+ net = cp_sta_mgr_get_next_avln (&cp, net);
+ test_fail_if (net_cmp[1] != net);
+ net = cp_sta_mgr_get_next_avln (&cp, net);
+ test_fail_if (net_cmp[2] != net);
+ net = cp_sta_mgr_get_next_avln (&cp, net);
+ test_fail_if (NULL != net);
+
+ cp_sta_mgr_uninit (&cp);
+ lib_stats_uninit ();
+ }
+ test_end;
+}
+
+void
+test_case__cp_net_is_empty (test_t test)
+{
+ test_case_begin (test, "Network is empty");
+
+ test_begin (test, "Network is empty")
+ {
+ cp_t cp;
+ cl_t cl;
+ sar_t sar;
+ cp_net_t *net;
+ cp_sta_t *sta;
+ uint i;
+ mac_config_t mac_config;
+
+ /* configuring the test. */
+ memset (&cp, 0, sizeof (cp_t));
+ memset (&cl, 0, sizeof (cl_t));
+ memset (&mac_config, 0, sizeof (mac_config_t));
+
+ cp.mac_config=&mac_config;
+ cp.sar = &sar;
+ cp.cl = &cl;
+ cl.mactotei = NULL;
+ sar.mac_store = mac_store_init ();
+ cp.mac_store = sar.mac_store;
+ lib_stats_init ();
+ cp_eoc_sta_mgr_init (&cp);
+ test_fail_unless (cp_sta_mgr_net_list_is_empty (&cp) == true);
+ for (i = 0; i < HPAV_AVLNS_NB_MAX; i++)
+ {
+ net = cp_sta_mgr_add_avln (&cp, i, i);
+ test_fail_unless (net);
+ }
+ test_fail_unless (cp_sta_mgr_net_list_is_empty (&cp) == false);
+ /* Set our AVLN. */
+ cp_sta_mgr_set_our_avln (&cp, cp_sta_mgr_get_avln (&cp, 0, 0));
+ test_fail_unless (cp_sta_mgr_net_list_is_empty (&cp) == false);
+ /* add a station per AVLN. */
+ for (i = 0; i < HPAV_AVLNS_NB_MAX; i++)
+ {
+ net = cp_sta_mgr_get_avln (&cp, i, i);
+ test_fail_unless (net);
+ sta = cp_sta_mgr_sta_add (&cp, net, i+1, i+1);
+ slab_release (sta);
+ }
+ test_fail_unless (cp_sta_mgr_net_list_is_empty (&cp) == false);
+ /* Remove AVLN by AVLN unless our AVLN. */
+ for (i = 1; i < HPAV_AVLNS_NB_MAX; i++)
+ {
+ test_fail_unless (cp_sta_mgr_net_list_is_empty (&cp) == false);
+ cp_sta_mgr_remove_avln (&cp, i, i);
+ }
+ test_fail_unless (cp_sta_mgr_net_list_is_empty (&cp) == false);
+ /* Set present flag in our AVLN. This is just to verify that present
+ * flag in our AVLN is not used. */
+ net = cp_sta_mgr_get_our_avln (&cp);
+ net->present = false;
+ test_fail_unless (cp_sta_mgr_net_list_is_empty (&cp) == false);
+ /* Remove the station in this AVLN. */
+ cp_sta_mgr_sta_remove_from_mac (&cp, 1);
+ test_fail_unless (cp_sta_mgr_net_list_is_empty (&cp) == true);
+ net->present = true;
+ test_fail_unless (cp_sta_mgr_net_list_is_empty (&cp) == true);
+ cp_sta_mgr_uninit (&cp);
+ lib_stats_uninit ();
+ }
+ test_end;
+}
+
+void
+test_case__cp_sta_mgr_set_our_avln__no_net (test_t test)
+{
+ test_case_begin (test, "Set our AVLN, coming from unassociated state");
+
+ test_begin (test, "start")
+ {
+ cp_t cp;
+ memset (&cp, 0, sizeof (cp_t));
+
+ test_sta_mgr_init (&cp);
+ cp.cl->mactotei = NULL;
+ cp_net_t *net;
+ cp_sta_t *sta;
+ uint i;
+ sta_t *sta_store;
+ net = cp_sta_mgr_add_avln (&cp, 1, 1);
+ for (i = 1; i < 4; i ++)
+ {
+ sta = cp_sta_mgr_sta_add (&cp, net, i, i);
+ slab_release (sta);
+ }
+
+ cp_sta_mgr_set_our_avln (&cp, net);
+
+ /* The table of the CL mac to tei as been stubbed for this test, the
+ * real CL mactotei does not allow the user to get data as the
+ * following instructions. To do some, use the functions API's in the
+ * CL mactotei module. */
+ cl_mactotei_t *table;
+ table = (cl_mactotei_t*) cp.cl->mactotei;
+ for (i = 1; i < 4; i++)
+ {
+ sta_store = mac_store_sta_get (cp.mac_store, i);
+ sta = cp_sta_mgr_sta_get_assoc (&cp, net, i);
+ test_fail_if (table[i-1].tei != i);
+ test_fail_if (table[i-1].mac != i);
+ test_fail_if (sta_store == NULL);
+ test_fail_if (sta == NULL);
+ test_fail_if (cp_sta_get_tei (sta) != table[i-1].tei);
+ test_fail_if (cp_sta_get_mac_address (sta) != table[i-1].mac);
+
+ slab_release (sta);
+ blk_release (sta_store);
+ }
+ test_sta_mgr_uninit (&cp);
+ }
+ test_end;
+}
+
+void
+test_case__cp_sta_mgr_set_our_avln__with_net (test_t test)
+{
+ test_case_begin (test, "Set our AVLN, coming from associated state");
+
+ test_begin (test, "start")
+ {
+ cp_t cp;
+ cp_net_t *net;
+ cp_sta_t *sta;
+ uint i;
+ sta_t *sta_store;
+ mfs_tx_t *mfs;
+ bool added;
+
+ memset (&cp, 0, sizeof (cp_t));
+
+ test_sta_mgr_init (&cp);
+ /* Store a broadcast MFS. */
+ mfs = mac_store_mfs_add_tx (cp.mac_store, true, false, 1,
+ MAC_TEI_BCAST,
+ &added);
+ dbg_assert (added);
+ blk_release (mfs);
+
+ net = cp_sta_mgr_add_avln (&cp, 1, 1);
+
+ for (i = 1; i < 4; i ++)
+ {
+ sta = cp_sta_mgr_sta_add (&cp, net, i, i);
+ slab_release (sta);
+ }
+
+ cp_sta_mgr_set_our_avln (&cp, net);
+
+ /* The table of the CL mac to tei as been stubbed for this test, the
+ * real CL mactotei does not allow the user to get data as the
+ * following instructions. To do some, use the functions API's in the
+ * CL mactotei module. */
+ cl_mactotei_t *table;
+ table = (cl_mactotei_t*) cp.cl->mactotei;
+ for (i = 1; i < 4; i++)
+ {
+ sta_store = mac_store_sta_get (cp.mac_store, i);
+ sta = cp_sta_mgr_sta_get_assoc (&cp, net, i);
+ test_fail_if (table[i-1].tei != i);
+ test_fail_if (table[i-1].mac != i);
+ test_fail_if (sta_store == NULL);
+ test_fail_if (sta == NULL);
+ test_fail_if (cp_sta_get_tei (sta) != table[i-1].tei);
+ test_fail_if (cp_sta_get_mac_address (sta) != table[i-1].mac);
+
+ slab_release (sta);
+ blk_release (sta_store);
+ }
+
+ net = cp_sta_mgr_add_avln (&cp, 2, 2);
+
+ for (i = 1; i < 4; i ++)
+ {
+ sta = cp_sta_mgr_sta_add (&cp, net, i + 3, i + 3);
+ slab_release (sta);
+ }
+
+ cp_sta_mgr_set_our_avln (&cp, net);
+
+ /* The table of the CL mac to tei as been stubbed for this test, the
+ * real CL mactotei does not allow the user to get data as the
+ * following instructions. To do some, use the functions API's in the
+ * CL mactotei module. */
+ table = (cl_mactotei_t*) cp.cl->mactotei;
+ for (i = 1; i < 4; i++)
+ {
+ sta_store = mac_store_sta_get (cp.mac_store, i + 3);
+ sta = cp_sta_mgr_sta_get_assoc (&cp, net, i + 3);
+ test_fail_if (table[i-1].tei != i + 3);
+ test_fail_if (table[i-1].mac != i + 3);
+ test_fail_if (sta_store == NULL);
+ test_fail_if (sta == NULL);
+ test_fail_if (cp_sta_get_tei (sta) != table[i-1].tei);
+ test_fail_if (cp_sta_get_mac_address (sta) != table[i-1].mac);
+
+ slab_release (sta);
+ blk_release (sta_store);
+ }
+
+ for (i = 1; i < 4; i++)
+ {
+ sta_store = mac_store_sta_get (cp.mac_store, i);
+ test_fail_if (sta_store != NULL);
+ }
+ test_sta_mgr_uninit (&cp);
+ }
+ test_end;
+}
+
+void
+test_case__cp_sta_mgr_set_our_avln__with_net_to_unassoc (test_t test)
+{
+ test_case_begin (test, "Set our AVLN, coming from associated to unassoc");
+
+ test_begin (test, "start")
+ {
+ uint i;
+ cp_sta_t *sta;
+ sta_t *sta_store;
+ cp_net_t *net;
+ cp_t cp;
+
+ memset (&cp, 0, sizeof (cp_t));
+
+ test_sta_mgr_init (&cp);
+ net = cp_sta_mgr_add_avln (&cp, 1, 1);
+
+ for (i = 1; i < 4; i ++)
+ {
+ sta = cp_sta_mgr_sta_add (&cp, net, i, i);
+ slab_release (sta);
+ }
+
+ cp_sta_mgr_set_our_avln (&cp, net);
+
+ /* The table of the CL mac to tei as been stubbed for this test, the
+ * real CL mactotei does not allow the user to get data as the
+ * following instructions. To do some, use the functions API's in the
+ * CL mactotei module. */
+ cl_mactotei_t *table;
+ table = (cl_mactotei_t*) cp.cl->mactotei;
+ for (i = 1; i < 4; i++)
+ {
+ sta_store = mac_store_sta_get (cp.mac_store, i);
+ sta = cp_sta_mgr_sta_get_assoc (&cp, net, i);
+ test_fail_if (table[i-1].tei != i);
+ test_fail_if (table[i-1].mac != i);
+ test_fail_if (sta_store == NULL);
+ test_fail_if (sta == NULL);
+ test_fail_if (cp_sta_get_tei (sta) != table[i-1].tei);
+ test_fail_if (cp_sta_get_mac_address (sta) != table[i-1].mac);
+
+ slab_release (sta);
+ blk_release (sta_store);
+ }
+
+ dbg_fatal_try_begin
+ {
+ cp_sta_mgr_set_our_avln (&cp, NULL);
+
+ test_fail_if (cp.cl->mactotei != NULL);
+
+ for (i = 1; i < 4; i++)
+ {
+ sta_store = mac_store_sta_get (cp.mac_store, i);
+ test_fail_if (sta_store != NULL);
+ }
+ }
+ dbg_fatal_try_catch (const char *fatal_message)
+ {
+ test_verbose_print (fatal_message);
+ }
+ dbg_fatal_try_end;
+ test_sta_mgr_uninit (&cp);
+ }
+ test_end;
+}
+
+void
+test_case__cp_eoc_sta_mgr_release_station (test_t test)
+{
+ cp_t cp;
+ cp_net_t *net;
+ cp_sta_t *sta;
+ sta_t *sta_store;
+
+ memset (&cp, 0, sizeof (cp_t));
+
+ test_case_begin (test, "Release station");
+ test_begin (test, "No AVLN")
+ {
+ test_sta_mgr_init (&cp);
+ net = cp_sta_mgr_add_avln (&cp, 1, 1);
+ cp_sta_mgr_set_our_avln (&cp, net);
+
+ sta = cp_sta_mgr_sta_add (&cp, net, 1, 1);
+ dbg_fatal_try_begin
+ {
+ cp_eoc_sta_mgr_release_station (&cp, 1);
+ }
+ dbg_fatal_try_catch (const char *fail)
+ {
+ test_verbose_print (fail);
+ test_fail_if (cp_sta_own_data_get_cco_status (&cp) == true);
+ }
+ dbg_fatal_try_end;
+ // The same as CCo.
+ cp_sta_own_data_set_tei (&cp, 2);
+ cp_sta_own_data_set_cco_status (&cp, true);
+ cp_eoc_sta_mgr_release_station (&cp, 1);
+
+ /* Launch the garbage. */
+ cp_eoc_sta_mgr_garbage (&cp);
+ /* Station goes directly to unassoc. list. */
+ test_fail_if (set_empty (&net->unassociated_stas) == true);
+
+ /* modify the expired to force expiration. */
+ sta->expired_date_ms = 0;
+ slab_release (sta);
+
+ /* Check if unassociated sta is still in the network. */
+ cp_net_garbage_station_list (&cp, cp_sta_mgr_get_our_avln (&cp),
+ cp_sta_core_get_date_ms (&cp),
+ CP_NET_STA_UNASSOC);
+
+ /* Remove to public stations.*/
+ test_fail_if (set_empty (&net->unassociated_stas) == false);
+
+ /* Verify the store. */
+ sta_store = mac_store_sta_get (cp.mac_store, 1);
+ test_fail_if (sta_store != NULL);
+ test_sta_mgr_uninit (&cp);
+ }
+ test_end;
+
+ test_begin (test, "Change AVLN")
+ {
+ test_sta_mgr_init (&cp);
+ net = cp_sta_mgr_add_avln (&cp, 1, 1);
+ cp_sta_mgr_set_our_avln (&cp, net);
+
+ sta = cp_sta_mgr_sta_add (&cp, net, 1, 1);
+
+ // The same as CCo.
+ cp_sta_own_data_set_tei (&cp, 2);
+ cp_sta_own_data_set_cco_status (&cp, true);
+ cp_eoc_sta_mgr_release_station (&cp, 1);
+
+ sta->expired_date_ms = 0;
+ slab_release (sta);
+ /* Check if unassociated sta is still in the previous net.
+ * In EoC no change of AVLN. */
+ cp_net_garbage_station_list (&cp, net, cp_sta_core_get_date_ms (&cp),
+ CP_NET_STA_UNASSOC);
+ /* Change the AVLN. */
+ cp_sta_mgr_set_our_avln (&cp, NULL);
+ /* Verify the store. */
+ sta_store = mac_store_sta_get (cp.mac_store, 1);
+ test_fail_if (sta_store != NULL);
+ test_sta_mgr_uninit (&cp);
+ }
+ test_end;
+
+ test_begin (test, "AVLN1 to AVLN2")
+ {
+ test_sta_mgr_init (&cp);
+ net = cp_sta_mgr_add_avln (&cp, 1, 1);
+ cp_sta_mgr_set_our_avln (&cp, net);
+
+ sta = cp_sta_mgr_sta_add (&cp, net, 1, 1);
+ slab_release (sta);
+
+ // The same as CCo.
+ cp_sta_own_data_set_tei (&cp, 2);
+ cp_sta_own_data_set_cco_status (&cp, true);
+ cp_eoc_sta_mgr_release_station (&cp, 1);
+
+ net = cp_sta_mgr_add_avln (&cp, 2, 2);
+ cp_sta_mgr_set_our_avln (&cp, net);
+
+ sta = cp_sta_mgr_sta_add (&cp, net, 1, 1);
+
+ // The same as CCo.
+ cp_sta_own_data_set_tei (&cp, 2);
+ cp_sta_own_data_set_cco_status (&cp, true);
+ cp_eoc_sta_mgr_release_station (&cp, 1);
+
+ sta->expired_date_ms = 0;
+ slab_release (sta);
+ /* Check if unassociated sta is still in the previous net.
+ * In EoC no change of AVLN. */
+ cp_net_garbage_station_list (&cp, net, cp_sta_core_get_date_ms (&cp),
+ CP_NET_STA_UNASSOC);
+ cp_sta_mgr_set_our_avln (&cp, NULL);
+ /* Verify the store. */
+ sta_store = mac_store_sta_get (cp.mac_store, 1);
+ test_fail_if (sta_store != NULL);
+ test_sta_mgr_uninit (&cp);
+ }
+ test_end;
+}
+
+void
+test_case__cp_sta_mgr_change_snid (test_t test)
+{
+ test_case_begin (test, "Change snid");
+
+ test_begin (test, "CCo")
+ {
+ cp_t cp;
+ cp_net_t *net;
+ memset (&cp, 0, sizeof (cp_t));
+
+ test_sta_mgr_init (&cp);
+ net = cp_sta_mgr_add_avln (&cp, 1, 1);
+ cp_sta_mgr_set_our_avln (&cp, net);
+ cp_sta_own_data_set_tei (&cp, 1);
+ cp_sta_own_data_set_authenticated_status (&cp, true);
+ cp_sta_own_data_set_cco_status (&cp, true);
+
+ /* Change our AVLN. */
+ cp_sta_own_data_set_snid (&cp, 0x3);
+
+ test_fail_unless (cp_sta_own_data_get_snid (&cp) == 0x3);
+ test_fail_unless (net->snid == 0x3);
+ test_sta_mgr_uninit (&cp);
+ }
+ test_end;
+
+ test_begin (test, "Station")
+ {
+ cp_t cp;
+ cp_net_t *net;
+
+ memset (&cp, 0, sizeof (cp_t));
+
+ test_sta_mgr_init (&cp);
+ net = cp_sta_mgr_add_avln (&cp, 1, 1);
+
+ test_fail_unless (net->snid == 0x1);
+
+ /* Change our AVLN. */
+ cp_sta_own_data_set_snid (&cp, 0x3);
+
+ test_fail_unless (cp_sta_own_data_get_snid (&cp) == 0x3);
+ test_fail_unless (net->snid == 0x1);
+
+ cp_sta_own_data_set_snid (&cp, 0x1);
+ cp_sta_mgr_set_our_avln (&cp, net);
+
+ cp_sta_own_data_set_snid (&cp, 0x3);
+
+ test_fail_unless (cp_sta_own_data_get_snid (&cp) == 0x3);
+ test_fail_unless (net->snid == 0x3);
+ test_sta_mgr_uninit (&cp);
+ }
+ test_end;
+}
+
+/** SNID present
+ *
+ * \param test the test object.
+ *
+ * Return a flag indicating which SNID is currently in use.
+ * environment 3 AVLNs with SNID 1, 5, 10.
+ * At the end of the test the flag shall contain 0x211.
+ */
+void
+test_case_snid_present (test_t test)
+{
+ cp_t cp;
+ uint i;
+ u16 snidFlags, snidfcmp = 0;
+
+ memset (&cp, 0, sizeof (cp_t));
+
+ test_case_begin (test, "Getting present SNID");
+ cp_snid_t snid [] = {1, 5, 10};
+ for (i = 0; i < COUNT (snid); i++)
+ {
+ cp_sta_mgr_add_avln (&cp, snid[i], i);
+ snidfcmp = snidfcmp | ((u16) 1 << snid[i]);
+ }
+ snidFlags = cp_sta_mgr_get_present_snids (&cp);
+ test_begin (test, "Verifying the flags")
+ {
+ test_fail_unless (snidFlags == snidfcmp);
+ }
+ test_end;
+}
+
+/** Get slot usage
+ * \param test the test object.
+ *
+ * Environment
+ * Add three AVLN in the station manager configured as followed:
+ *
+ * * AVLN 1 : Slot id = 4;
+ * * AVLN 2 : Slot id = 7;
+ * * AVLN 3 : Slot id = 2;
+ *
+ * This makes a slot usage equal to 0x94.
+ *
+ * Result
+ * This function shall return 0x94.
+ */
+void
+test_case_slot_usage (test_t test)
+{
+ cp_t cp;
+ cp_net_t *net;
+
+ memset (&cp, 0, sizeof (cp_t));
+
+ lib_stats_init ();
+ cp_eoc_sta_mgr_init (&cp);
+ lib_rnd_init (&cp.rnd, 0x3421);
+
+ test_case_begin (test, "Getting the slot usage");
+
+ // Add the first AVLN.
+ net = cp_sta_mgr_add_avln (&cp, 1, 1);
+ cp_net_set_slot_id_and_usage (&cp, net, 4, 5);
+
+ net = cp_sta_mgr_add_avln (&cp, 2, 2);
+ cp_net_set_slot_id_and_usage (&cp, net, 7, 7);
+
+ net = cp_sta_mgr_add_avln (&cp, 3, 3);
+ cp_net_set_slot_id_and_usage (&cp, net, 2, 3);
+
+ test_begin (test, "Verify")
+ {
+ test_fail_if (cp_sta_mgr_get_slot_usage (&cp) != 0 /*0x94*/,
+ "Wrong Slot usage bit fields");
+ }
+ test_end;
+
+ cp_sta_mgr_uninit (&cp);
+ lib_stats_uninit ();
+}
+
+void
+test_case__cp_net_num_sta_associated (test_t test)
+{
+ test_case_begin (test, "Number of stations associated");
+
+ test_begin (test, "Add 10 STAs")
+ {
+ cp_t cp;
+ cp_net_t *net;
+ cp_sta_t *sta;
+ mac_config_t mac_config;
+
+ memset (&cp, 0, sizeof (cp_t));
+ memset (&mac_config, 0, sizeof (mac_config_t));
+
+ lib_stats_init ();
+ cp_eoc_sta_mgr_init (&cp);
+ cp.mac_config = &mac_config;
+
+ net = cp_sta_mgr_add_avln (&cp, 1, 1);
+
+ test_fail_unless (cp_net_num_sta_associated (&cp, net) == 0);
+
+ sta = cp_sta_mgr_sta_add (&cp, net, MAC_TEI_UNASSOCIATED, 1);
+ slab_release (sta);
+
+ test_fail_unless (cp_net_num_sta_associated (&cp, net) == 0);
+
+ sta = cp_sta_mgr_sta_add (&cp, net, 1, 1);
+ slab_release (sta);
+
+ test_fail_unless (cp_net_num_sta_associated (&cp, net) == 1);
+
+ sta = cp_sta_mgr_sta_add (&cp, net, 2, 1);
+ slab_release (sta);
+
+ test_fail_unless (cp_net_num_sta_associated (&cp, net) == 1);
+
+ cp_sta_mgr_sta_remove_from_mac (&cp, 1);
+ test_fail_unless (cp_net_num_sta_associated (&cp, net) == 0);
+
+ cp_sta_mgr_uninit (&cp);
+ lib_stats_uninit ();
+ }
+ test_end;
+}
+
+void
+test_suite_sta_mgr (test_t test)
+{
+ test_suite_begin (test, "sta mgr");
+ test_case__cp_sta_mgr_sta (test);
+ test_case__cp_net_uninit (test);
+ test_case__cp_sta_manager_garbage (test);
+ test_case__cp_net_pco (test);
+ test_case__cp_net_sta_get_first_next (test);
+ test_case__cp_sta_mgr_get_avln (test);
+ test_case__cp_sta_mgr_get_first_next_avln (test);
+ test_case__cp_net_is_empty (test);
+ test_case__cp_sta_mgr_set_our_avln__no_net (test);
+ test_case__cp_sta_mgr_set_our_avln__with_net (test);
+ test_case__cp_sta_mgr_set_our_avln__with_net_to_unassoc (test);
+ test_case__cp_eoc_sta_mgr_release_station (test);
+ test_case__cp_sta_mgr_change_snid (test);
+ test_case_snid_present (test);
+ test_case_slot_usage (test);
+ test_case__cp_net_num_sta_associated (test);
+}
diff --git a/cesar/cp/eoc/sta/mgr/test/utest/src/station_test.c b/cesar/cp/eoc/sta/mgr/test/utest/src/station_test.c
new file mode 100644
index 0000000000..d97cf8a890
--- /dev/null
+++ b/cesar/cp/eoc/sta/mgr/test/utest/src/station_test.c
@@ -0,0 +1,431 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/station_test.c
+ * \brief Test the station.
+ * \ingroup cp_sta_mgr
+ *
+ */
+#include "common/std.h"
+#include "test_sta_mgr.h"
+
+#include "cp/sta/mgr/inc/sta.h"
+
+/**
+ * Initialise a station.
+ *
+ */
+void
+test_case_station_init (test_t test)
+{
+ cp_sta_t *sta;
+ cp_sta_private_t station;
+ slab_cache_t sta_slab_cache;
+
+ test_case_begin (test, "Station init");
+ test_begin (test, "verify data")
+ {
+ slab_cache_init (&sta_slab_cache,
+ "Station cache",
+ sizeof (cp_sta_private_t),
+ (slab_object_destructor_t) cp_sta_uninit);
+
+
+ memset (&station, 0, sizeof (cp_sta_private_t));
+ station.association_confirmed = true;
+ station.visible = true;
+ sta = cp_sta_init (&sta_slab_cache);
+
+ test_fail_if (memcmp(sta, &station,
+ sizeof(cp_sta_private_t)) != 0,
+ "Wrong sta is not initialised");
+
+
+ slab_release (sta);
+ }
+ test_end;
+}
+
+/**
+ * Get the TEI of the station.
+ *
+ * \param test the test object.
+ */
+void
+test_case_get_tei (test_t test)
+{
+ cp_sta_private_t station;
+
+ memset (&station, '\0', sizeof (cp_sta_private_t));
+
+ test_case_begin (test, "get station TEI");
+
+ station.tei = 0xA;
+
+ test_begin (test, "Getting TEI")
+ {
+ test_fail_if (cp_sta_get_tei ((cp_sta_t *) &station) != 0xA,
+ "Wrong TEI");
+ }
+ test_end;
+}
+
+/**
+ * Get the Mac address of the station.
+ *
+ * \param test the test object.
+ */
+void
+test_case_get_mac_addr (test_t test)
+{
+ cp_sta_private_t station;
+
+ memset (&station, '\0', sizeof (cp_sta_private_t));
+
+ test_case_begin (test, "get station Mac address");
+
+ station.mac_address = 0x123456789abcull;
+
+ test_begin (test, "Getting Mac address")
+ {
+ test_fail_if (cp_sta_get_mac_address ((cp_sta_t *) &station)
+ != 0x123456789abcull,
+ "Wrong Mac address");
+ }
+ test_end;
+}
+
+/**
+ * Get the peer structure of the station.
+ *
+ * \param test the test object.
+ */
+void
+test_case_get_peer (test_t test)
+{
+ cp_sta_private_t station;
+
+ memset (&station, '\0', sizeof (cp_sta_private_t));
+
+ test_case_begin (test, "get station peer");
+
+ station.tei = 0xA;
+ station.mac_address = 0x123456789abcull;
+
+ test_begin (test, "Getting peer")
+ {
+ cp_mme_peer_t peer;
+ cp_sta_get_peer ((cp_sta_t *) &station, &peer);
+ test_fail_if (!cp_mme_peer_cmp (
+ &peer, &CP_MME_PEER (0x123456789abcull, 0xA)),
+ "Wrong peer");
+ }
+ test_end;
+}
+
+/**
+ * Get the CCo status of the station.
+ *
+ * \param test the test object.
+ */
+void
+test_case_get_cco_status (test_t test)
+{
+ cp_sta_private_t station;
+
+ memset (&station, '\0', sizeof (cp_sta_private_t));
+
+ test_case_begin (test, "get station CCo status");
+
+ test_begin (test, "Getting CCo status")
+ {
+ test_fail_if (cp_sta_get_cco_status ((cp_sta_t *) &station)
+ != false,
+ "Wrong CCo status");
+ }
+ test_end;
+
+ station.is_cco = true;
+
+ test_begin (test, "Getting CCo status true")
+ {
+ test_fail_if (cp_sta_get_cco_status ((cp_sta_t *) &station)
+ != true,
+ "Wrong CCo status");
+ }
+ test_end;
+}
+
+/**
+ * Get the PCo status of the station.
+ *
+ * \param test the test object.
+ */
+void
+test_case_get_pco_status (test_t test)
+{
+ cp_sta_private_t station;
+
+ memset (&station, '\0', sizeof (cp_sta_private_t));
+
+ test_case_begin (test, "get station PCo status");
+
+ test_begin (test, "Getting PCo status")
+ {
+ test_fail_if (cp_sta_get_pco_status ((cp_sta_t *) &station)
+ != false,
+ "Wrong PCo status");
+ }
+ test_end;
+
+ station.pco_glid = 0x80;
+
+ test_begin (test, "Getting PCo status true")
+ {
+ test_fail_if (cp_sta_get_pco_status ((cp_sta_t *) &station)
+ != true,
+ "Wrong PCo status");
+ }
+ test_end;
+}
+
+void
+test_case_authenticated (test_t test)
+{
+ test_case_begin (test, "Authentication");
+
+ test_begin (test, "set & get authentication")
+ {
+ cp_t cp;
+ cp_net_t net;
+ cp_sta_private_t station;
+ cp_sta_t *sta = (cp_sta_t *) &station;
+
+ memset (&station, 0, sizeof (cp_sta_private_t));
+ memset (&cp, 0, sizeof (cp_t));
+
+ /* configure the test. */
+ cp.mac_store = mac_store_init ();
+ cp.sta_mgr.our_avln = &net;
+ station.tei = 0xA;
+ station.net = &net;
+ mac_store_sta_add (cp.mac_store, station.tei);
+
+ cp_sta_set_authenticated (&cp, sta, true);
+ test_fail_if (cp_sta_get_authenticated (&cp, sta) != true);
+
+ cp_sta_set_authenticated (&cp, sta, false);
+ test_fail_if (cp_sta_get_authenticated (&cp, sta) != false);
+
+ dbg_check (mac_store_sta_remove (cp.mac_store, station.tei));
+
+ station.tei = MAC_TEI_UNASSOCIATED;
+ test_fail_if (cp_sta_get_authenticated (&cp, sta) != false);
+ mac_store_uninit (cp.mac_store);
+ }
+ test_end;
+
+ test_begin (test, "set authentication TEI = 0")
+ {
+ cp_t cp;
+ cp_net_t net;
+ cp_sta_private_t station;
+ cp_sta_t *sta = (cp_sta_t *) &station;
+
+ memset (&station, 0, sizeof (cp_sta_private_t));
+ memset (&cp, 0, sizeof (cp_t));
+
+ /* configure the test. */
+ cp.mac_store = mac_store_init ();
+ cp.sta_mgr.our_avln = &net;
+ station.tei = 0;
+ station.net = &net;
+
+ cp_sta_set_authenticated (&cp, sta, false);
+ mac_store_uninit (cp.mac_store);
+ }
+ test_end;
+}
+
+void
+test_case_visible_state (test_t test)
+{
+ test_case_begin (test, "Visible state");
+
+ test_begin (test, "station visible state")
+ {
+ cp_t cp;
+ cp_net_t net;
+ cp_sta_private_t sta;
+
+ memset (&cp, 0, sizeof (cp_t));
+ memset (&net, 0, sizeof (cp_net_t));
+ memset (&sta, 0, sizeof (cp_sta_private_t));
+
+ /* configure the stations. */
+ sta.net = &net;
+ sta.tei = 1;
+
+ cp_sta_set_visible_status (&cp, (cp_sta_t *) &sta,
+ CP_STA_VISIBLE_STATE_VISIBLE);
+ test_fail_if (cp_net_get_num_discovered_stas (&cp, &net) != 1);
+
+ cp_sta_set_visible_status (&cp, (cp_sta_t *) &sta,
+ CP_STA_VISIBLE_STATE_HIDDEN);
+ test_fail_if (cp_net_get_num_discovered_stas (&cp, &net) != 0);
+ test_fail_if (cp_sta_get_visible_status ((cp_sta_t *) &sta) !=
+ CP_STA_VISIBLE_STATE_HIDDEN);
+ }
+ test_end;
+
+ test_begin (test, "station visible state in our AVLN")
+ {
+ cp_t cp;
+ cp_net_t net;
+ cp_sta_private_t sta;
+ sta_t *sta_store;
+
+ memset (&cp, 0, sizeof (cp_t));
+ memset (&net, 0, sizeof (cp_net_t));
+ memset (&sta, 0, sizeof (cp_sta_private_t));
+
+ /* configure the stations. */
+ sta.net = &net;
+ sta.tei = 1;
+ cp.sta_mgr.our_avln = &net;
+ cp.mac_store = mac_store_init ();
+
+ mac_store_sta_add (cp.mac_store, sta.tei);
+ sta_store = mac_store_sta_get (cp.mac_store, 1);
+
+ cp_sta_set_assoc_confirmed (&cp, (cp_sta_t*) &sta, false);
+ test_fail_unless (sta_store->multi_unicast_receiver == false);
+
+ cp_sta_set_visible_status (&cp, (cp_sta_t *) &sta,
+ CP_STA_VISIBLE_STATE_VISIBLE);
+ test_fail_if (cp_net_get_num_discovered_stas (&cp, &net) != 1);
+ test_fail_unless (sta_store->multi_unicast_receiver == false);
+
+ cp_sta_set_assoc_confirmed (&cp, (cp_sta_t*) &sta, true);
+ test_fail_if (sta_store->multi_unicast_receiver != true);
+
+ cp_sta_set_visible_status (&cp, (cp_sta_t *) &sta,
+ CP_STA_VISIBLE_STATE_HIDDEN);
+ test_fail_if (cp_net_get_num_discovered_stas (&cp, &net) != 0);
+ test_fail_if (cp_sta_get_visible_status ((cp_sta_t *) &sta) !=
+ CP_STA_VISIBLE_STATE_HIDDEN);
+
+ test_fail_if (sta_store->multi_unicast_receiver != false);
+ blk_release (sta_store);
+
+ dbg_check (mac_store_sta_remove (cp.mac_store, 1));
+ mac_store_uninit (cp.mac_store);
+ }
+ test_end;
+
+}
+
+void
+test_case_pco_glid (test_t test)
+{
+ test_case_begin (test, "PCo GLID");
+
+ test_begin (test, "PCo GLID")
+ {
+ cp_sta_private_t sta;
+
+ memset (&sta, 0, sizeof (cp_sta_private_t));
+
+ cp_sta_set_pco_glid ((cp_sta_t *) &sta, 0x95);
+ test_fail_if (cp_sta_get_pco_glid ((cp_sta_t *) &sta) != 0x95);
+ test_fail_if (cp_sta_get_pco_status ((cp_sta_t *) &sta) != true);
+
+ cp_sta_set_pco_glid ((cp_sta_t *) &sta, 0x0);
+ test_fail_if (cp_sta_get_pco_glid ((cp_sta_t *) &sta) != 0x0);
+ test_fail_if (cp_sta_get_pco_status ((cp_sta_t *) &sta) != false);
+ }
+ test_end;
+}
+
+void
+test_case_multi_association_confirmed (test_t test)
+{
+ test_case_begin (test, "Association confirmed");
+ test_begin (test, "Visible station")
+ {
+ cp_t cp;
+ /* Configure the test. */
+ test_sta_mgr_init (&cp);
+ cp_net_t *net = cp_sta_mgr_add_avln (&cp, 1, 1);
+ cp_sta_t *sta = cp_sta_mgr_sta_add (&cp, net, 1, 1);
+ sta_t *sta_store;
+ cp_sta_mgr_set_our_avln (&cp, net);
+ cp_sta_own_data_set_tei (&cp, 2);
+ cp_sta_own_data_set_cco_status (&cp, true);
+ /* begin the test. */
+ cp_sta_set_visible_status (&cp, sta, CP_STA_VISIBLE_STATE_VISIBLE);
+ cp_sta_set_assoc_confirmed (&cp, sta, true);
+ sta_store = mac_store_sta_get (cp.mac_store, 1);
+ test_fail_unless (cp_sta_get_assoc_confirmed (&cp, sta));
+ test_fail_unless (sta_store->multi_unicast_receiver);
+ /* Change the state. */
+ cp_sta_set_assoc_confirmed (&cp, sta, false);
+ test_fail_unless (!cp_sta_get_assoc_confirmed (&cp, sta));
+ test_fail_unless (!sta_store->multi_unicast_receiver);
+ /* Uninitialise */
+ slab_release (sta);
+ blk_release (sta_store);
+ test_sta_mgr_uninit (&cp);
+ }
+ test_end;
+
+ test_begin (test, "Hidden station")
+ {
+ cp_t cp;
+ cp_net_t *net;
+ cp_sta_t *sta;
+ sta_t *sta_store;
+ /* Configure the test. */
+ test_sta_mgr_init (&cp);
+ net = cp_sta_mgr_add_avln (&cp, 1, 1);
+ sta = cp_sta_mgr_sta_add (&cp, net, 1, 1);
+ cp_sta_mgr_set_our_avln (&cp, net);
+ cp_sta_own_data_set_tei (&cp, 2);
+ /* begin the test. */
+ cp_sta_set_visible_status (&cp, sta, CP_STA_VISIBLE_STATE_HIDDEN);
+ cp_sta_set_assoc_confirmed (&cp, sta, true);
+ sta_store = mac_store_sta_get (cp.mac_store, 1);
+ test_fail_unless (cp_sta_get_assoc_confirmed (&cp, sta));
+ test_fail_unless (!sta_store->multi_unicast_receiver);
+ /* Change the state. */
+ cp_sta_set_assoc_confirmed (&cp, sta, false);
+ test_fail_unless (!cp_sta_get_assoc_confirmed (&cp, sta));
+ test_fail_unless (!sta_store->multi_unicast_receiver);
+ /* Uninitialise */
+ slab_release (sta);
+ blk_release (sta_store);
+ test_sta_mgr_uninit (&cp);
+ }
+ test_end;
+}
+
+void
+test_suite_station (test_t test)
+{
+ test_suite_begin (test, "station");
+ test_case_station_init (test);
+ test_case_get_tei (test);
+ test_case_get_mac_addr (test);
+ test_case_get_peer (test);
+ test_case_get_cco_status (test);
+ test_case_get_pco_status (test);
+ test_case_authenticated (test);
+ test_case_visible_state (test);
+ test_case_pco_glid (test);
+ test_case_multi_association_confirmed (test);
+}
diff --git a/cesar/cp/eoc/sta/mgr/test/utest/src/test_sta_mgr.c b/cesar/cp/eoc/sta/mgr/test/utest/src/test_sta_mgr.c
new file mode 100644
index 0000000000..a3af644711
--- /dev/null
+++ b/cesar/cp/eoc/sta/mgr/test/utest/src/test_sta_mgr.c
@@ -0,0 +1,142 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2011 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/sta/mgr/test/src/test_sta_mgr.c
+ * \brief Test environment.
+ * \ingroup cp_sta_mgr
+ */
+#include "common/std.h"
+#include "test_sta_mgr.h"
+
+#include "cl/cl_mactotei.h"
+
+static cl_mactotei_t table[10];
+static uint table_index;
+
+void
+test_sta_mgr_init (cp_t *cp)
+{
+ static mac_config_t mac_config;
+ static sar_t sar;
+ static cl_t cl;
+
+ memset (&mac_config, 0, sizeof (mac_config));
+ memset (&sar, 0, sizeof (sar_t));
+ memset (cp, 0, sizeof (cp_t));
+ memset (&cl, 0, sizeof (cl_t));
+
+ cp->mac_config = &mac_config;
+ cp->cl = &cl;
+ cp->sar = &sar;
+ cp->mac_store = sar.mac_store = mac_store_init ();
+ lib_rnd_init (&cp->rnd, 1234);
+ lib_stats_init ();
+ cp_eoc_sta_mgr_init (cp);
+}
+
+void
+test_sta_mgr_uninit (cp_t *cp)
+{
+ cp_sta_mgr_uninit (cp);
+ lib_stats_uninit ();
+ mac_store_uninit (cp->mac_store);
+}
+
+/**
+ * Create a new table to be filled by the CP.
+ *
+ * \return a pointer to the new block to be fill with the mac to tei table
+ * data
+ */
+cl_mactotei_blk_t *
+cl_mactotei_new (void)
+{
+ memset (table, 0, sizeof (table));
+ table_index = 0;
+ return (cl_mactotei_blk_t *) &table;
+}
+
+/**
+ * Add a new tupple of data to the table.
+ *
+ * \param table the table pointer to add a new mac to tei correspondance.
+ * \param mac_addr the mac addr to add
+ * \param tei the tei corresponding to the STA.
+ * \param tag the CP tag provide to indentifier a network.
+ */
+void cl_mactotei_addr_add (cl_mactotei_blk_t *table, mac_t mac_addr,
+ uint tei, uint tag)
+{
+ cl_mactotei_t *curr;
+
+ curr = (cl_mactotei_t*) table;
+ curr[table_index].tag = tag;
+ curr[table_index].tei = tei;
+ curr[table_index].mac = mac_addr;
+ table_index ++;
+}
+
+/**
+ * Request the CL to use the new table and remove the old one.
+ *
+ * \param ctx the CL context
+ * \param table the new table to use.
+ */
+void
+cl_mactotei_use_table (cl_t *ctx, cl_mactotei_blk_t *table)
+{
+ dbg_assert (table);
+ dbg_assert (ctx);
+
+ ctx->mactotei = (cl_mactotei_table_t *) table;
+}
+
+/**
+ * Release the complete table from the memory.
+ *
+ * \param ctx the convergence layer context
+ */
+void cl_mactotei_release_table (cl_t *ctx)
+{
+ dbg_assert (ctx);
+ memset (table, 0, sizeof (table));
+ ctx->mactotei = NULL;
+}
+
+void
+test_suite_sta_mgr (test_t test);
+
+void
+test_suite_net (test_t test);
+
+void
+test_suite_sta_own (test_t test);
+
+void
+test_suite_station (test_t test);
+
+int
+main (int argc, char **argv)
+{
+ test_t test;
+ test_init (test, argc, argv);
+ test_suite_sta_mgr (test);
+ test_suite_net (test);
+ test_suite_sta_own (test);
+ test_suite_station (test);
+
+ test_case_begin (test, "Memory allocation");
+ test_begin (test, "memory leaks")
+ {
+ test_fail_if (blk_check_memory () != true, "Memory leaks");
+ }
+ test_end;
+
+ test_result (test);
+ return test_nb_failed (test) == 0 ? 0 : 1;
+}
diff --git a/cesar/cp/eoc/sta/mgr/test/utest/test_sta_mgr.h b/cesar/cp/eoc/sta/mgr/test/utest/test_sta_mgr.h
new file mode 100644
index 0000000000..7faa31ddf9
--- /dev/null
+++ b/cesar/cp/eoc/sta/mgr/test/utest/test_sta_mgr.h
@@ -0,0 +1,50 @@
+#ifndef cp_sta_mgr_test_test_sta_mgr_h
+#define cp_sta_mgr_test_test_sta_mgr_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2011 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/eoc/sta/mgr/test/test_sta_mgr.h
+ * \brief Test environment.
+ * \ingroup cp_eoc_sta_mgr_test
+ */
+#include "lib/test.h"
+#include "cp/cp.h"
+#include "cp/sta/mgr/sta_mgr.h"
+
+#include "mac/common/ntb.h"
+#include "mac/common/timings.h"
+#include "cl/inc/context.h"
+
+#include "cp/inc/context.h"
+#include "cp/sta/mgr/inc/net.h"
+#include "mac/sar/inc/context.h"
+
+
+struct cl_mactotei_t
+{
+ mac_t mac;
+ cp_tei_t tei;
+ uint tag;
+};
+typedef struct cl_mactotei_t cl_mactotei_t;
+
+/**
+ * Initialise all necessary data for the station manager test.
+ * \param cp the control plane override structure.
+ */
+void
+test_sta_mgr_init (cp_t *cp);
+
+/**
+ * Uninitialise the environment of test for station manager.
+ * \param cp the control plane override structure.
+ */
+void
+test_sta_mgr_uninit (cp_t *cp);
+
+#endif /* cp_sta_mgr_test_test_sta_mgr_h */
diff --git a/cesar/cp/fsm/src/fsm.c b/cesar/cp/fsm/src/fsm.c
index 8086b0ee27..8622ac123a 100644
--- a/cesar/cp/fsm/src/fsm.c
+++ b/cesar/cp/fsm/src/fsm.c
@@ -18,6 +18,7 @@
#include "inc/tables.h"
#include "cp/sta/core/core.h"
+#include "hal/arch/arch.h"
void
cp_fsm_init (cp_t *ctx)
@@ -200,24 +201,32 @@ cp_fsm_process_urgent (cp_t *ctx)
uint i;
dbg_assert (ctx);
dbg_assert (!ctx->fsm.handling_urgent_event);
+ cp_fsm_event_t *e = NULL;
+ bool signal = false;
+ arch_dsr_lock ();
if (ctx->fsm.urgent_head)
{
/* Extract event from queue. */
- cp_fsm_event_t *e = ctx->fsm.urgent_head;
+ e = ctx->fsm.urgent_head;
ctx->fsm.urgent_head = e->next;
if (!e->next)
dbg_invalid_ptr (ctx->fsm.urgent_tail);
dbg_assert (e->type < CP_FSM_EVENT_TYPE_NB);
dbg_assert (e->handler);
- /* Handle event. */
+ /* Set flag again if there is another event pending. */
+ signal = (ctx->fsm.urgent_head);
+ }
+ arch_dsr_unlock ();
+ /* Handle event. */
+ if (e)
+ {
CP_TRACE (FSM_HANDLE_URGENT_EVENT, e->type);
for (i = 0; i < CP_FSM_INITIAL_NB; i++)
cp_fsm_handled_urgent_event (ctx, e, i);
/* Release event. */
slab_release (e);
}
- /* Set flag again if there is another event pending. */
- if (ctx->fsm.urgent_head)
+ if (signal)
cp_sta_core_signal_fsm_urgent_event (ctx);
}
diff --git a/cesar/cp/inc/context.h b/cesar/cp/inc/context.h
index a8bd13fcd8..e7073fb9af 100644
--- a/cesar/cp/inc/context.h
+++ b/cesar/cp/inc/context.h
@@ -54,6 +54,8 @@
#include "cp/msg/inc/context.h"
#include "cp/fsm/inc/context.h"
#include "ce/tx/inc/tx.h"
+#include "cp/eoc/cco/bw/inc/bw.h"
+#include "config/cp/eoc.h"
enum cp_handover_reason_t
{
@@ -163,6 +165,10 @@ struct cp_t
/** Context of the CE in RX. */
ce_rx_t *ce_rx;
+ /** EoC scheduling context */
+#if CONFIG_CP_EOC_SCHEDULER
+ cp_eoc_cco_bw_sched_t schedule;
+#endif
/** Context of the bsu. */
bsu_t *bsu;
diff --git a/cesar/cp/msg/inc/cc_assoc.h b/cesar/cp/msg/inc/cc_assoc.h
index f1f3708378..5d5e8a1ae1 100644
--- a/cesar/cp/msg/inc/cc_assoc.h
+++ b/cesar/cp/msg/inc/cc_assoc.h
@@ -28,6 +28,7 @@ enum cp_msg_cc_assoc_cnf_result_t
CP_MSG_CC_ASSOC_CNF_RESULT_FAILURE_TEMPORARY_RESSOURCE_EXHAUSTION,
CP_MSG_CC_ASSOC_CNF_RESULT_FAILURE_PERMANANT_RESSOURCE_EXHAUSTION,
CP_MSG_CC_ASSOC_CNF_RESULT_FAILURE_OTHER_REASON,
+ CP_MSG_CC_ASSOC_CNF_RESULT_SUCCESS_WL_ACCEPT_ALL,
CP_MSG_CC_ASSOC_CNF_RESULT_NB
};
@@ -61,4 +62,6 @@ struct cp_msg_cc_assoc_cnf_t
};
typedef struct cp_msg_cc_assoc_cnf_t cp_msg_cc_assoc_cnf_t;
+#define MASTER_GOLDEN_DPW "SPIDCOM-TEST-MASTER"
+
#endif /* cp_msg_inc_cc_assoc_h */
diff --git a/cesar/cp/msg/inc/msg_drv.h b/cesar/cp/msg/inc/msg_drv.h
index cbe12e043b..854b64f6ab 100644
--- a/cesar/cp/msg/inc/msg_drv.h
+++ b/cesar/cp/msg/inc/msg_drv.h
@@ -16,6 +16,7 @@
#include "cp/msg/inc/drv_sta_set_key.h"
#include "cp/msg/inc/drv_sta_status.h"
#include "cp/msg/inc/drv_sta_get_key.h"
+#include "cp/sta/mgr/sta.h"
#include "common/defs/homeplugAV.h"
#include "common/defs/igmp.h"
@@ -338,6 +339,19 @@ cp_msg_drv_sta_set_avln_hfid_ind_send (cp_t *ctx, cp_mme_peer_t *peer,
const char *avln_hfid);
/**
+ * Send a DRV_STA_STATUS_IND.
+ * \param ctx control plane context
+ * \param peer peer information
+ * \param mmtype MMTYPE to respond to
+ * \param state state of the station (unassociated, associated, authenticated)
+ */
+
+void
+cp_msg_drv_get_status_ind_send (cp_t *ctx, cp_mme_peer_t *peer,
+ mmtype_t mmtype,
+ cp_msg_drv_sta_status_status_t state);
+
+/**
* Receive DRV_MCAST_SET_LIST.REQ
* \param ctx control plane context
* \param mme MME to handle.
@@ -353,6 +367,30 @@ cp_msg_drv_mcast_set_list_req_receive (
mac_t groups[MCAST_GROUP_MAX_NB], uint nb_members[MCAST_GROUP_MAX_NB],
mac_t members[MCAST_GROUP_MAX_NB][MCAST_MEMBER_MAX_NB]);
+/**
+ * Receives a DRV_STA_SET_EOC.REQ
+ * \param ctx control plane context.
+ * \param mme MME to handle.
+ * \param exp output level exponent
+ * \param value output power value
+ * \return true on success.
+ */
+bool
+cp_msg_drv_sta_set_eoc_req_receive (cp_t *ctx, cp_mme_rx_t *mme, uint *exp,
+ uint *value);
+
+/**
+ * Receives a DRV_STA_SET_SLAVE.REQ
+ * \param ctx control plane context.
+ * \param mme MME to handle.
+ * \param config configuration string.
+ * \return true on success.
+ */
+bool
+cp_msg_drv_sta_set_slave_req_receive (cp_t *ctx, cp_mme_rx_t *mme,
+ char config[HPAV_MME_PAYLOAD_MAX_SIZE]);
+
+
END_DECLS
#endif /* cp_msg_inc_msg_drv_h */
diff --git a/cesar/cp/msg/msg.h b/cesar/cp/msg/msg.h
index 9d19ba28a6..711f01ea4a 100644
--- a/cesar/cp/msg/msg.h
+++ b/cesar/cp/msg/msg.h
@@ -29,6 +29,7 @@
#include "cp/msg/inc/msg_drv.h"
#include "cp/msg/inc/msg_vs.h"
+
enum cp_msg_avln_status_t
{
CP_MSG_AVLN_STATUS_UNASSOC_CCO_0,
diff --git a/cesar/cp/msg/src/msg.c b/cesar/cp/msg/src/msg.c
index 77078d060d..fe32d8be0f 100644
--- a/cesar/cp/msg/src/msg.c
+++ b/cesar/cp/msg/src/msg.c
@@ -36,6 +36,11 @@
#include "cp/msg/inc/allowed_mme.h"
+#if CONFIG_CP_EOC
+#include "config/cp/msg/eoc/multi/sta/mme.h"
+#include "config/cp/msg/eoc.h"
+#endif /* CONFIG_CP_EOC */
+
#include <stdio.h>
/**
@@ -93,9 +98,19 @@ cp_msg_mme_allowed_t cp_msg_mme_allowed[] =
CP_MSG_MME_ALLOWED_ENTRY (CC_LINK_REL_IND, STA_AUTH, NEK_ENC_YES, FROM_H1_NO, NO_EVENT),
CP_MSG_MME_ALLOWED_ENTRY (CC_DETECT_REPORT_REQ, STA_AUTH, NEK_ENC_YES, FROM_H1_NO, NO_EVENT),
CP_MSG_MME_ALLOWED_ENTRY (CC_DETECT_REPORT_CNF, STA_AUTH, NEK_ENC_YES, FROM_H1_NO, NO_EVENT),
+#if CONFIG_CP_EOC
+ CP_MSG_MME_ALLOWED_ENTRY (CC_WHO_RU_REQ, STA_UNASSOC, NEK_ENC_NO, FROM_H1_YES, CC_WHO_RU_REQ),
+ CP_MSG_MME_ALLOWED_ENTRY (CC_WHO_RU_CNF, STA_UNASSOC, NEK_ENC_NO, FROM_H1_NO, CC_WHO_RU_CNF),
+#if CONFIG_CP_MSG_EOC_MULTI_STA_MME
+ CP_MSG_MME_ALLOWED_ENTRY (CC_ASSOC_REQ, STA_UNASSOC, NEK_ENC_NO, FROM_H1_NO, MULTI_STA_MME),
+#else
+ CP_MSG_MME_ALLOWED_ENTRY (CC_ASSOC_REQ, STA_UNASSOC, NEK_ENC_NO, FROM_H1_NO, CC_ASSOC_REQ),
+#endif /* CONFIG_CP_MSG_EOC_MULTI_STA_MME */
+#else /* CONFIG_CP_EOC */
CP_MSG_MME_ALLOWED_ENTRY (CC_WHO_RU_REQ, STA_ASSOC, NEK_ENC_NO, FROM_H1_YES, CC_WHO_RU_REQ),
CP_MSG_MME_ALLOWED_ENTRY (CC_WHO_RU_CNF, STA_ASSOC, NEK_ENC_NO, FROM_H1_NO, CC_WHO_RU_CNF),
CP_MSG_MME_ALLOWED_ENTRY (CC_ASSOC_REQ, STA_UNASSOC, NEK_ENC_NO, FROM_H1_NO, CC_ASSOC_REQ),
+#endif /* CONFIG_CP_EOC */
CP_MSG_MME_ALLOWED_ENTRY (CC_ASSOC_CNF, STA_UNASSOC, NEK_ENC_NO, FROM_H1_NO, CC_ASSOC_CNF),
CP_MSG_MME_ALLOWED_ENTRY (CC_LEAVE_REQ, STA_ASSOC, NEK_ENC_NO, FROM_H1_NO, CC_LEAVE_REQ),
CP_MSG_MME_ALLOWED_ENTRY (CC_LEAVE_CNF, STA_ASSOC, NEK_ENC_NO, FROM_H1_NO, CC_LEAVE_CNF),
@@ -142,7 +157,15 @@ cp_msg_mme_allowed_t cp_msg_mme_allowed[] =
CP_MSG_MME_ALLOWED_ENTRY (CM_ENCRYPTED_PAYLOAD_RSP, STA_UNASSOC, NEK_ENC_NO, FROM_H1_YES, NO_EVENT),
CP_MSG_MME_ALLOWED_ENTRY (CM_SET_KEY_REQ, STA_ASSOC, NEK_ENC_YES, FROM_H1_YES, CM_SET_KEY_REQ),
CP_MSG_MME_ALLOWED_ENTRY (CM_SET_KEY_CNF, STA_ASSOC, NEK_ENC_YES, FROM_H1_YES, CM_SET_KEY_CNF),
+#if CONFIG_CP_EOC
+#if CONFIG_CP_MSG_EOC_MULTI_STA_MME
+ CP_MSG_MME_ALLOWED_ENTRY (CM_GET_KEY_REQ, STA_ASSOC, NEK_ENC_NO, FROM_H1_YES, MULTI_STA_MME),
+#else
CP_MSG_MME_ALLOWED_ENTRY (CM_GET_KEY_REQ, STA_ASSOC, NEK_ENC_NO, FROM_H1_YES, CM_GET_KEY_REQ),
+#endif /* CONFIG_CP_MSG_EOC_MULTI_STA_MME */
+#else /* CONFIG_CP_EOC */
+ CP_MSG_MME_ALLOWED_ENTRY (CM_GET_KEY_REQ, STA_ASSOC, NEK_ENC_NO, FROM_H1_YES, CM_GET_KEY_REQ),
+#endif /* CONFIG_CP_EOC */
CP_MSG_MME_ALLOWED_ENTRY (CM_GET_KEY_CNF, STA_ASSOC, NEK_ENC_NO, FROM_H1_YES, CM_GET_KEY_CNF),
CP_MSG_MME_ALLOWED_ENTRY (CM_SC_JOIN_REQ, STA_UNASSOC, NEK_ENC_NO, FROM_H1_NO, CM_SC_JOIN_REQ),
CP_MSG_MME_ALLOWED_ENTRY (CM_SC_JOIN_CNF, STA_UNASSOC, NEK_ENC_NO, FROM_H1_NO, CM_SC_JOIN_CNF),
@@ -205,6 +228,29 @@ cp_msg_mme_allowed_t cp_msg_mme_allowed[] =
CP_MSG_MME_ALLOWED_ENTRY (VS_GET_STATS_CNF, STA_UNASSOC, NEK_ENC_NO, FROM_H1_NO, NO_EVENT),
CP_MSG_MME_ALLOWED_ENTRY (VS_GET_CE_STATS_REQ, STA_UNASSOC, NEK_ENC_NO, FROM_H1_YES, VS_GET_CE_STATS_REQ),
CP_MSG_MME_ALLOWED_ENTRY (VS_GET_CE_STATS_CNF, STA_UNASSOC, NEK_ENC_NO, FROM_H1_NO, NO_EVENT),
+#if CONFIG_CP_EOC
+ CP_MSG_MME_ALLOWED_ENTRY (VS_EOC_GET_TOPO_REQ, STA_UNASSOC, NEK_ENC_NO, FROM_H1_YES, VS_EOC_GET_TOPO_REQ),
+ CP_MSG_MME_ALLOWED_ENTRY (VS_EOC_GET_TOPO_CNF, STA_UNASSOC, NEK_ENC_NO, FROM_H1_NO, NO_EVENT),
+ CP_MSG_MME_ALLOWED_ENTRY (VS_EOC_CCO_SET_WL_REQ, STA_UNASSOC, NEK_ENC_NO, FROM_H1_YES, VS_EOC_CCO_SET_WL_REQ),
+ CP_MSG_MME_ALLOWED_ENTRY (VS_EOC_CCO_SET_WL_CNF, STA_UNASSOC, NEK_ENC_NO, FROM_H1_NO, NO_EVENT),
+ CP_MSG_MME_ALLOWED_ENTRY (VS_EOC_CCO_GET_WL_REQ, STA_UNASSOC, NEK_ENC_NO, FROM_H1_YES, VS_EOC_CCO_GET_WL_REQ),
+ CP_MSG_MME_ALLOWED_ENTRY (VS_EOC_CCO_GET_WL_CNF, STA_UNASSOC, NEK_ENC_NO, FROM_H1_NO, NO_EVENT),
+ CP_MSG_MME_ALLOWED_ENTRY (VS_EOC_CCO_SET_OUT_LEV_IND, STA_UNASSOC, NEK_ENC_NO, FROM_H1_NO, VS_EOC_CCO_SET_OUT_LEV_IND),
+ CP_MSG_MME_ALLOWED_ENTRY (VS_EOC_CCO_SET_SERVICES_REQ, STA_UNASSOC, NEK_ENC_NO, FROM_H1_YES, VS_EOC_CCO_SET_SERVICES_REQ),
+ CP_MSG_MME_ALLOWED_ENTRY (VS_EOC_CCO_SET_SERVICES_CNF, STA_UNASSOC, NEK_ENC_NO, FROM_H1_NO, NO_EVENT),
+ CP_MSG_MME_ALLOWED_ENTRY (VS_EOC_CCO_GET_SERVICES_REQ, STA_UNASSOC, NEK_ENC_NO, FROM_H1_YES, VS_EOC_CCO_GET_SERVICES_REQ),
+ CP_MSG_MME_ALLOWED_ENTRY (VS_EOC_CCO_GET_SERVICES_CNF, STA_UNASSOC, NEK_ENC_NO, FROM_H1_NO, NO_EVENT),
+ CP_MSG_MME_ALLOWED_ENTRY (VS_EOC_SET_PORTS_REQ, STA_UNASSOC, NEK_ENC_NO, FROM_H1_YES, VS_EOC_SET_PORTS_REQ),
+ CP_MSG_MME_ALLOWED_ENTRY (VS_EOC_SET_PORTS_CNF, STA_UNASSOC, NEK_ENC_NO, FROM_H1_NO, NO_EVENT),
+ CP_MSG_MME_ALLOWED_ENTRY (VS_EOC_CCO_GET_PORTS_REQ, STA_UNASSOC, NEK_ENC_NO, FROM_H1_YES, VS_EOC_CCO_GET_PORTS_REQ),
+ CP_MSG_MME_ALLOWED_ENTRY (VS_EOC_CCO_GET_PORTS_CNF, STA_UNASSOC, NEK_ENC_NO, FROM_H1_NO, NO_EVENT),
+ CP_MSG_MME_ALLOWED_ENTRY (VS_EOC_GET_INFO_REQ, STA_UNASSOC, NEK_ENC_NO, FROM_H1_YES, VS_EOC_GET_INFO_REQ),
+ CP_MSG_MME_ALLOWED_ENTRY (VS_EOC_GET_INFO_CNF, STA_UNASSOC, NEK_ENC_NO, FROM_H1_NO, NO_EVENT),
+ CP_MSG_MME_ALLOWED_ENTRY (VS_EOC_DIAGNOSTIC_INFO_REQ, STA_UNASSOC, NEK_ENC_NO, FROM_H1_YES, VS_EOC_DIAGNOSTIC_INFO_REQ),
+ CP_MSG_MME_ALLOWED_ENTRY (VS_EOC_DIAGNOSTIC_INFO_CNF, STA_UNASSOC, NEK_ENC_NO, FROM_H1_NO, NO_EVENT),
+ CP_MSG_MME_ALLOWED_ENTRY (VS_EOC_GET_REAL_TIME_STATISTICS_REQ, STA_UNASSOC, NEK_ENC_NO, FROM_H1_YES, VS_EOC_GET_REAL_TIME_STATISTICS_REQ),
+ CP_MSG_MME_ALLOWED_ENTRY (VS_EOC_GET_REAL_TIME_STATISTICS_CNF, STA_UNASSOC, NEK_ENC_NO, FROM_H1_NO, NO_EVENT),
+#endif /* CONFIG_CP_EOC */
CP_MSG_MME_ALLOWED_ENTRY (VS_GET_PB_STATS_REQ, STA_UNASSOC, NEK_ENC_NO, FROM_H1_YES, VS_GET_PB_STATS_REQ),
CP_MSG_MME_ALLOWED_ENTRY (VS_GET_PB_STATS_CNF, STA_UNASSOC, NEK_ENC_NO, FROM_H1_NO, NO_EVENT),
CP_MSG_MME_ALLOWED_ENTRY (VS_GET_MACTOTEI_REQ, STA_UNASSOC, NEK_ENC_NO, FROM_H1_YES, VS_GET_MACTOTEI_REQ),
@@ -256,6 +302,12 @@ cp_msg_mme_allowed_t cp_msg_mme_allowed[] =
CP_MSG_MME_ALLOWED_ENTRY (DRV_STA_SET_CONFIG_CNF, STA_UNASSOC, NEK_ENC_NO, FROM_H1_NO, NO_EVENT),
CP_MSG_MME_ALLOWED_ENTRY (DRV_MCAST_SET_LIST_REQ, STA_UNASSOC, NEK_ENC_NO, FROM_H1_YES, DRV_MCAST_SET_LIST_REQ),
CP_MSG_MME_ALLOWED_ENTRY (DRV_MCAST_SET_LIST_CNF, STA_UNASSOC, NEK_ENC_NO, FROM_H1_NO, NO_EVENT),
+#if CONFIG_CP_EOC
+ CP_MSG_MME_ALLOWED_ENTRY (DRV_EOC_STA_SET_SLAVE_CONFIG_REQ, STA_UNASSOC, NEK_ENC_NO, FROM_H1_YES, DRV_EOC_STA_SET_SLAVE_CONFIG_REQ),
+ CP_MSG_MME_ALLOWED_ENTRY (DRV_EOC_STA_SET_SLAVE_CONFIG_CNF, STA_UNASSOC, NEK_ENC_NO, FROM_H1_NO, NO_EVENT),
+ CP_MSG_MME_ALLOWED_ENTRY (DRV_EOC_STA_SET_EOC_CONFIG_REQ, STA_UNASSOC, NEK_ENC_NO, FROM_H1_YES, DRV_EOC_STA_SET_EOC_CONFIG_REQ),
+ CP_MSG_MME_ALLOWED_ENTRY (DRV_EOC_STA_SET_EOC_CONFIG_CNF, STA_UNASSOC, NEK_ENC_NO, FROM_H1_NO, NO_EVENT),
+#endif /* CONFIG_CP_EOC */
CP_MSG_MME_ALLOWED_ENTRY (DRV_STA_FORCE_ROLE_REQ, STA_UNASSOC, NEK_ENC_NO, FROM_H1_YES, DRV_STA_FORCE_ROLE_REQ),
CP_MSG_MME_ALLOWED_ENTRY (DRV_STA_FORCE_ROLE_CNF, STA_UNASSOC, NEK_ENC_NO, FROM_H1_NO, NO_EVENT),
};
@@ -314,7 +366,7 @@ cp_msg_mme_header_length (cp_mme_peer_t *peer, mmtype_t mmtype)
/* If it's a Vendor Specific MME, so we have a OUI field added
* See Page 576 of HomePlugAV spec , version 1.1, may 21 2007.*/
- if (MMTYPE_IS_VS (mmtype))
+ if (MMTYPE_IS_VS (mmtype) || MMTYPE_IS_IMAC (mmtype))
header_length += OUI_SIZE;
return header_length;
@@ -336,7 +388,7 @@ cp_msg_mme_length (cp_mme_tx_t *mme)
h_size = cp_msg_mme_header_length (&mme->peer, mme->mmtype);
- if (MMTYPE_IS_VS (mme->mmtype))
+ if (MMTYPE_IS_VS (mme->mmtype) || MMTYPE_IS_IMAC (mme->mmtype))
p_capability = HPAV_VS_MME_PAYLOAD_MAX;
else
p_capability = HPAV_MME_PAYLOAD_MAX_SIZE;
@@ -393,6 +445,46 @@ cp_msg_peks_key_get (cp_t *ctx, cp_mme_peks_t peks)
dbg_assert_default ();
}
+#if CONFIG_CP_EOC
+#if CONFIG_CP_MSG_EOC_MULTI_STA_MME
+/**
+ * Provide the key for the peer using the PEKS to select it.
+ * \param ctx the module context.
+ * \param peer the peer to communicate with.
+ * \param peks the peks to use.
+ * \return the key to encrypt or decrypt.
+ *
+ * If the peks points to an invalid value the function asserts.
+ * PEKS_SPC_NOT_EMBEDDED is considered as a wrong value and causes an assert.
+ */
+static inline cp_key_t
+cp_msg_peer_peks_key_get (cp_t *ctx, cp_mme_peer_t peer, cp_mme_peks_t peks)
+{
+ dbg_assert (ctx);
+ dbg_assert (peks < CP_MME_PEKS_NONE);
+
+ if (peks == CP_MME_PEKS_NMK)
+ return cp_sta_own_data_get_nmk (ctx);
+ else if ((peks >= CP_MME_PEKS_TEK_MIN)
+ && (peks <= CP_MME_PEKS_TEK_MAX))
+ return cp_sta_own_data_get_tek (ctx);
+ else if (peks == CP_MME_PEKS_DAK)
+ {
+ cp_key_t key = {{0, 0, 0, 0}};
+ cp_sta_t *dest = cp_sta_mgr_sta_get_from_mac (ctx, peer.mac);
+ if (dest)
+ {
+ key = dest->multi_sta.dak;
+ slab_release (dest);
+ }
+ return key;
+ }
+ else
+ dbg_assert_default ();
+}
+#endif
+#endif
+
void
cp_msg_init (cp_t *ctx)
{
@@ -546,7 +638,7 @@ cp_msg_dispatch (cp_t *ctx, cp_mme_rx_t *mme)
cp_sta_core_checkpoint (ctx);
/* If the MME is a vendor specific. */
- if (MMTYPE_IS_VS (mme->mmtype))
+ if (MMTYPE_IS_VS (mme->mmtype) || MMTYPE_IS_IMAC (mme->mmtype))
{
uint oui = bitstream_read (&mme->bitstream, OUI_SIZE_BITS);
if (oui == SPC_OUI)
@@ -611,7 +703,7 @@ cp_msg_mme_init (cp_t *ctx, cp_mme_peer_t *peer, mmtype_t mmtype,
* 0x01 = MMENTRY is Fragmented into two parts
* 0x02 = MMENTRY is Fragmented into three parts, and so on
**/
- if (MMTYPE_IS_VS(mmtype))
+ if (MMTYPE_IS_VS(mmtype) || MMTYPE_IS_IMAC (mmtype))
p_capability = HPAV_VS_MME_PAYLOAD_MAX;
else
p_capability = HPAV_MME_PAYLOAD_MAX_SIZE;
@@ -906,7 +998,7 @@ cp_msg_mme_write_frag_header (cp_t *ctx, cp_mme_tx_t *msg, bitstream_t *bs,
bitstream_write (bs, msg->fmi_nbfrag, 4);
bitstream_write (bs, msg->fmi_nb, 4);
bitstream_write (bs, msg->fmi_fmsn, 8);
- if (MMTYPE_IS_VS (mmtype))
+ if (MMTYPE_IS_VS (mmtype) || MMTYPE_IS_IMAC (mmtype))
bitstream_write (bs, SPC_OUI, OUI_SIZE_BITS);
}
@@ -1046,8 +1138,12 @@ cp_msg_mme_send (cp_t *ctx, cp_mme_tx_t *mme)
/* Select the key indexed by the PEKS to encrypted the embedded MME. */
if (mme->peks != CP_MME_PEKS_NONE)
{
+#if CONFIG_CP_EOC && CONFIG_CP_MSG_EOC_MULTI_STA_MME
+ key = cp_msg_peer_peks_key_get (ctx, mme->peer, mme->peks);
+#else
key = cp_msg_peks_key_get (ctx, mme->peks);
+#endif /* CONFIG_CP_EOC */
/* AES encryption. */
enc_length = mme->length
+ mme->rf_len
@@ -1299,7 +1395,11 @@ cp_msg_mme_read_header_enc (cp_t *ctx, cp_mme_rx_t *mme)
/* Select the key to decrypt the embedded MME. */
if (mme->peks != CP_MME_PEKS_NONE)
{
+#if CONFIG_CP_EOC && CONFIG_CP_MSG_EOC_MULTI_STA_MME
+ key = cp_msg_peer_peks_key_get (ctx, mme->peer, mme->peks);
+#else
key = cp_msg_peks_key_get (ctx, mme->peks);
+#endif /* CONFIG_CP_MSG_EOC_MULTI_STA_MME */
cp_secu_aes_set_decrypt_key (&aes, key);
cp_secu_aes_cbc_decrypt (ctx, &aes, mme->iv_uuid.key,
(u32 *) (mme->p_mme + payload_offset),
diff --git a/cesar/cp/msg/src/msg_cm.c b/cesar/cp/msg/src/msg_cm.c
index a0401d0a08..d87716348d 100644
--- a/cesar/cp/msg/src/msg_cm.c
+++ b/cesar/cp/msg/src/msg_cm.c
@@ -591,10 +591,13 @@ cp_msg_cm_get_key_cnf_receive (cp_t *ctx, cp_mme_rx_t *mme,
/* Check EKS field is correctly set according to KEY_TYPE. */
switch (data->key_type)
{
+ /* In EoC TEK is used for auth confirm (request double key). */
+ /* EOC specific. */
+ case CP_MSG_KEY_TEK:
+ break;
/* DAK, TEK, Nonce are not permitted. */
case CP_MSG_KEY_DAK:
case CP_MSG_KEY_NONCE_ONLY:
- case CP_MSG_KEY_TEK:
return false;
break;
case CP_MSG_KEY_NEK:
diff --git a/cesar/cp/msg/src/msg_drv.c b/cesar/cp/msg/src/msg_drv.c
index 9427b26a6f..390af9b173 100644
--- a/cesar/cp/msg/src/msg_drv.c
+++ b/cesar/cp/msg/src/msg_drv.c
@@ -351,6 +351,7 @@ cp_msg_drv_sta_set_tonemask_req_receive (cp_t *ctx, cp_mme_rx_t *mme,
}
return false;
}
+// #endif
/**
* Receive a DRV_STA_MAC_START.REQ.
@@ -459,6 +460,47 @@ cp_msg_drv_sta_set_config_req_receive (
return false;
}
+bool
+cp_msg_drv_sta_set_slave_req_receive (cp_t *ctx, cp_mme_rx_t *mme,
+ char config[HPAV_MME_PAYLOAD_MAX_SIZE])
+{
+ /* Check parameters. */
+ dbg_assert (ctx);
+ dbg_assert (mme);
+ dbg_assert (config);
+
+ if (cp_msg_mme_read_error (ctx, mme))
+ {
+ /* Read configuration string. */
+ uint config_len =
+ bitstream_read_str (&mme->bitstream, config,
+ HPAV_MME_PAYLOAD_MAX_SIZE);
+ /* Message must be lower than HPAV_MME_PAYLOAD_MAX_SIZE. */
+ if (config_len != HPAV_MME_PAYLOAD_MAX_SIZE)
+ /* No check is done for the last character, bitstream_read_str
+ * will stop when it found it (or when there is no more space). */
+ return true;
+ }
+ return false;
+}
+
+bool
+cp_msg_drv_sta_set_eoc_req_receive (cp_t *ctx, cp_mme_rx_t *mme, uint *exp,
+ uint *value)
+{
+ dbg_assert (ctx);
+ dbg_assert (mme);
+
+ if (cp_msg_mme_read_error (ctx, mme))
+ {
+ *exp = bitstream_read (&mme->bitstream, 8);
+ *value = bitstream_read (&mme->bitstream, 16);
+ *exp = *exp & 0x0f;
+ return true;
+ }
+ return false;
+}
+
void
cp_msg_drv_sta_set_key_ind_send (
cp_t *ctx, cp_mme_peer_t *peer, cp_key_t nmk,
@@ -677,6 +719,40 @@ cp_msg_drv_sta_set_avln_hfid_ind_send (cp_t *ctx, cp_mme_peer_t *peer,
cp_msg_mme_send (ctx, msg);
}
+/**
+ * Send a DRV_STA_STATUS_IND.
+ * \param ctx control plane context
+ * \param peer peer information
+ * \param mmtype MMTYPE to respond to
+ * \param state state of the station (unassociated, associated, authenticated)
+ */
+void
+cp_msg_drv_get_status_ind_send (cp_t *ctx, cp_mme_peer_t *peer,
+ mmtype_t mmtype,
+ cp_msg_drv_sta_status_status_t state)
+{
+ cp_mme_tx_t *msg;
+
+ dbg_assert (peer);
+ dbg_assert (mmtype);
+
+ u8 cco = 0;
+ u8 prefered_cco = 0;
+ u8 backup_cco = 0;
+ u8 simple_connect = 0;
+
+ msg = cp_msg_mme_init_not_frag (ctx, peer, mmtype);
+ dbg_check (msg);
+
+ bitstream_access (&msg->bitstream, &state, 8);
+ bitstream_access (&msg->bitstream, &cco, 8);
+ bitstream_access (&msg->bitstream, &prefered_cco, 8);
+ bitstream_access (&msg->bitstream, &backup_cco, 8);
+ bitstream_access (&msg->bitstream, &simple_connect, 8);
+
+ cp_msg_mme_send (ctx, msg);
+}
+
bool
cp_msg_drv_mcast_set_list_req_receive (
cp_t *ctx, cp_mme_rx_t *mme, uint *nb_groups,
diff --git a/cesar/cp/msg/stub/src/msg_drv.c b/cesar/cp/msg/stub/src/msg_drv.c
index 6ad19721f5..6b7b01431b 100644
--- a/cesar/cp/msg/stub/src/msg_drv.c
+++ b/cesar/cp/msg/stub/src/msg_drv.c
@@ -16,6 +16,64 @@
#include "cp/cp.h"
#include "cp/msg/msg.h"
+/* TODO : Check that */
+bool
+cp_msg_drv_sta_string_recv (cp_t *ctx, cp_mme_rx_t *mme, char *buffer,
+ uint min_length, uint max_length) __attribute__((weak));
+
+
+bool
+cp_msg_drv_sta_string_recv (cp_t *ctx, cp_mme_rx_t *mme, char *buffer,
+ uint min_length, uint max_length)
+{
+ dbg_assert (ctx);
+ dbg_assert (mme);
+ dbg_assert (buffer);
+ return true;
+}
+
+void
+cp_msg_drv_get_status_ind_send (cp_t *ctx, cp_mme_peer_t *peer,
+ mmtype_t mmtype, cp_msg_drv_sta_status_status_t state)
+ __attribute__((weak));
+
+void
+cp_msg_drv_get_status_ind_send (cp_t *ctx, cp_mme_peer_t *peer,
+ mmtype_t mmtype,
+ cp_msg_drv_sta_status_status_t state)
+{
+ dbg_assert (peer);
+ dbg_assert (mmtype);
+}
+
+bool
+cp_msg_drv_sta_set_slave_req_receive (cp_t *ctx, cp_mme_rx_t *mme,
+ char config[HPAV_MME_PAYLOAD_MAX_SIZE]) __attribute__((weak));
+
+bool
+cp_msg_drv_sta_set_slave_req_receive (cp_t *ctx, cp_mme_rx_t *mme,
+ char config[HPAV_MME_PAYLOAD_MAX_SIZE])
+{
+ /* Check parameters. */
+ dbg_assert (ctx);
+ dbg_assert (mme);
+ dbg_assert (config);
+
+ return true;
+}
+
+bool
+cp_msg_drv_sta_set_eoc_req_receive (cp_t *ctx, cp_mme_rx_t *mme, uint *exp,
+ uint *value) __attribute__((weak));
+bool
+cp_msg_drv_sta_set_eoc_req_receive (cp_t *ctx, cp_mme_rx_t *mme, uint *exp,
+ uint *value)
+{
+ dbg_assert (ctx);
+ dbg_assert (mme);
+ return true;
+}
+
bool
cp_msg_drv_sta_set_mac_addr_req_receive (cp_t *ctx, cp_mme_rx_t *mme,
mac_t *mac) __attribute__((weak));
diff --git a/cesar/cp/secu/stub/src/secu.c b/cesar/cp/secu/stub/src/secu.c
index 9739b882f1..24a8e59b5c 100644
--- a/cesar/cp/secu/stub/src/secu.c
+++ b/cesar/cp/secu/stub/src/secu.c
@@ -58,7 +58,9 @@ cp_secu_generate_key (cp_t *ctx, uint num, uint nb_iteration, cp_key_t *output)
cp_nid_t
cp_secu_nmk2nid(cp_t *ctx, cp_key_t nmk, u8 security_level)
{
- return 1;
+ cp_nid_t nid = 1;
+ nid |= ((u64) security_level << 52);
+ return nid;
}
void
@@ -86,3 +88,15 @@ cp_secu_aes_cbc_decrypt (cp_t *ctx, cp_secu_aes_t *aes_ctx, u32 iv[4],
void
cp_secu_aes_cbc_decrypt (cp_t *ctx, cp_secu_aes_t *aes_ctx, u32 iv[4],
const u32 *input, u32 *output, int length){}
+
+void
+cp_secu_pbkdf1 (cp_t *ctx, const u8 input[], const uint input_length,
+ u8 *output, uint output_length,
+ cp_secu_salt_kind_t salt,
+ uint iteration) __attribute__((weak));
+
+void
+cp_secu_pbkdf1 (cp_t *ctx, const u8 input[], const uint input_length,
+ u8 *output, uint output_length,
+ cp_secu_salt_kind_t salt,
+ uint iteration) {}
diff --git a/cesar/cp/src/cp.c b/cesar/cp/src/cp.c
index f73a023866..a3d1581505 100644
--- a/cesar/cp/src/cp.c
+++ b/cesar/cp/src/cp.c
@@ -12,11 +12,12 @@
*
*/
#include "common/std.h"
-
#include "cp/cp.h"
-
#include "cp/inc/context.h"
-
+#include "config/cp/eoc.h"
+#if CONFIG_CP_EOC_SCHEDULER
+#include "cp/eoc/cco/bw/bw.h"
+#endif
/** Static data. */
static cp_t cp_global;
@@ -107,6 +108,12 @@ cp_init (bsu_t *bsu, bsu_aclf_t* aclf, mac_config_t * mac_config,
/* Init CE in TX. */
ce_tx_init (&cp_global);
+ /* watch dog refresh */
+ bsu_init_refresh_cb (bsu, CALLBACK (cp_sta_core_refresh_watch_dog),
+ &cp_global);
+#if CONFIG_CP_EOC_SCHEDULER && CONFIG_CP_EOC_IS_MASTER
+ cp_eoc_cco_bw_sched_init (&cp_global);
+#endif
return &cp_global;
}
@@ -126,6 +133,9 @@ cp_uninit (cp_t *ctx)
cp_cl_interf_uninit (ctx);
cp_msg_uninit (ctx);
cp_trace_uninit (ctx);
+#if CONFIG_CP_EOC_SCHEDULER && CONFIG_CP_EOC_IS_MASTER
+ cp_eoc_cco_bw_sched_uninit (ctx);
+#endif
}
/**
diff --git a/cesar/cp/src/trace.c b/cesar/cp/src/trace.c
index 538aaa1955..2dc990a1f7 100644
--- a/cesar/cp/src/trace.c
+++ b/cesar/cp/src/trace.c
@@ -59,7 +59,6 @@ const char *cp_trace_rx_mme_error_code_table[] =
"UNKNOWN"
};
-
/**
* Format a FSM state.
* \see trace_format_t.
@@ -257,4 +256,3 @@ cp_trace_uninit (cp_t *ctx)
trace_buffer_remove (&ctx->trace_verbose);
trace_buffer_remove (&ctx->trace);
}
-
diff --git a/cesar/cp/sta/action/Config b/cesar/cp/sta/action/Config
new file mode 100644
index 0000000000..c8185f667b
--- /dev/null
+++ b/cesar/cp/sta/action/Config
@@ -0,0 +1 @@
+CONFIG_CP_STA_ACTION_MISC_EOC = n
diff --git a/cesar/cp/sta/action/Module b/cesar/cp/sta/action/Module
index f1b9a87c9e..4e70aba504 100644
--- a/cesar/cp/sta/action/Module
+++ b/cesar/cp/sta/action/Module
@@ -1,2 +1,7 @@
-SOURCES := assoc.c drv.c misc.c poweron.c bridge.c vs.c
+SOURCES := drv.c misc.c poweron.c bridge.c vs.c
+
+ifneq ($(VARIANT),master)
+ SOURCES += assoc.c
+endif
+
MODULES := common/defs/mmtypes
diff --git a/cesar/cp/sta/action/inc/context.h b/cesar/cp/sta/action/inc/context.h
index fba7e34d5d..0d7e0ba2de 100644
--- a/cesar/cp/sta/action/inc/context.h
+++ b/cesar/cp/sta/action/inc/context.h
@@ -34,6 +34,10 @@ struct cp_sta_action_assoc_t
cp_sta_core_timed_event_def_t lease_timer;
/** Number of lost central beacons since the last beacon reception. */
uint beacon_loss;
+ /** Init count for randomization of first REQ . */
+ uint init_count;
+ /** Fast assoc retry, while no wl on cco side. */
+ bool fast_retry;
/** Retry TEI lease timeout, only used to program an event timer to resent
* the renew request in case the first request has not been confirmed. */
uint tei_renew_retry_timeout_ms;
diff --git a/cesar/cp/sta/action/src/bridge.c b/cesar/cp/sta/action/src/bridge.c
index 2d27454ee3..bef8ad5a1c 100644
--- a/cesar/cp/sta/action/src/bridge.c
+++ b/cesar/cp/sta/action/src/bridge.c
@@ -25,6 +25,8 @@
#include "cl/bridge_table.h" // bridge_table_*
#include "lib/utils.h" // less_mod2p32
#include "cp/sta/action/bridge.h"
+#include "config/cl/eoc.h"
+#include "cl/mcast.h"
/**
* Send a CM_BRG_INFO.CNF with the local bridge table of the CL.
diff --git a/cesar/cp/sta/action/src/drv.c b/cesar/cp/sta/action/src/drv.c
index 0e95aa02e0..36453f8ea4 100644
--- a/cesar/cp/sta/action/src/drv.c
+++ b/cesar/cp/sta/action/src/drv.c
@@ -20,6 +20,11 @@
#include "lib/stats.h"
#include "common/defs/igmp.h"
#include "cl/cl_mactotei.h"
+#include "cl/mcast.h"
+
+#if CONFIG_CP_EOC
+ #include "cp/eoc/sta/mgr/sta_own_data.h"
+#endif
void
cp_sta_action_drv__stopped__drv_sta_set_mac_addr_req (cp_t *ctx,
@@ -241,6 +246,9 @@ cp_sta_action_drv__stopped__drv_sta_set_dak_req (cp_t *ctx, cp_mme_rx_t *mme)
if (cp_msg_drv_sta_set_dak_req_receive (ctx, mme, &dak))
{
cp_sta_own_data_set_dak (ctx, dak);
+#if CONFIG_CP_EOC
+ cp_eoc_sta_own_data_set_original_dak (ctx, dak);
+#endif
cp_msg_drv_any_cnf_send (ctx, &mme->peer, DRV_STA_SET_DAK_CNF,
CP_MSG_DRV_RESULT_SUCCESS);
}
diff --git a/cesar/cp/sta/action/src/misc.c b/cesar/cp/sta/action/src/misc.c
index 54fb95618f..577424c6f2 100644
--- a/cesar/cp/sta/action/src/misc.c
+++ b/cesar/cp/sta/action/src/misc.c
@@ -24,6 +24,7 @@
#include "common/defs/spidcom.h"
#include "mac/common/timings.h"
+#include "config/cp/sta/action/misc/eoc.h"
#include "cp/fsm/fsm.h"
#include "cp/cco/action/cco_action.h"
#include "cp/sta/action/misc.h"
@@ -549,7 +550,11 @@ cp_sta_action_process_cm_nw_stats_req (cp_t *ctx, cp_mme_rx_t *rx_mme)
cp_sta_t* sta_list = NULL;
uint NumSTAs = 0;
+#if (!CONFIG_CP_STA_ACTION_MISC_EOC)
if (cp_msg_cm_nw_stats_req_receive (ctx, rx_mme))
+#else
+ if (true)
+#endif
{
/* Make sure we have an avln */
if (MAC_TEI_IS_STA (cp_sta_own_data_get_tei (ctx)))
diff --git a/cesar/cp/sta/action/src/vs.c b/cesar/cp/sta/action/src/vs.c
index d3050d9482..8e28f20fd3 100644
--- a/cesar/cp/sta/action/src/vs.c
+++ b/cesar/cp/sta/action/src/vs.c
@@ -23,8 +23,11 @@
#include "ce/rx/bitloading/nsr.h"
#include "mac/sar/sar_pb_stats.h"
#include "cl/cl_mactotei.h"
+#include "cl/cl_eoc_mactotei.h"
#include "ce/rx/rx.h"
+#include "config/cl/eoc.h"
+
/**
* Handle STARTED => VS_GET_TONEMAP.REQ.
* \param ctx control plane context
@@ -646,21 +649,41 @@ cp_sta_action_vs__started__vs_get_mactotei_req (cp_t *ctx, cp_mme_rx_t *mme)
if (cp_msg_vs_get_mactotei_req_receive (ctx, mme))
{
cp_mme_tx_t *mme_tx;
- uint nb_entry = cl_mactotei_table_size (ctx->cl);
+ uint nb_entry = 0;
+
+ if (CONFIG_CL_EOC_ROUTE)
+ {
+ nb_entry = cl_eoc_mactotei_snapshot_create (ctx->cl);
+ }
+ else
+ {
+ nb_entry = cl_mactotei_table_size (ctx->cl);
+ }
mme_tx = cp_msg_vs_get_mactotei_cnf_send_begin (ctx, &mme->peer,
nb_entry);
dbg_assert (mme_tx);
+
uint i;
for (i=0; i<nb_entry; i++)
{
cl_mactotei_entry_t data;
- cl_mactotei_table_get_entry (ctx->cl, i, &data);
+ if (CONFIG_CL_EOC_ROUTE)
+ {
+ cl_eoc_mactotei_snapshot_get_mac_tei (ctx->cl, i, &data.mac,
+ &data.tei);
+ data.tag = 0;
+ }
+ else
+ {
+ cl_mactotei_table_get_entry (ctx->cl, i, &data);
+ }
cp_msg_vs_get_mactotei_cnf_send_entry (ctx, mme_tx, data.mac,
(cp_tei_t) data.tei,
data.tag);
}
+
cp_msg_vs_get_mactotei_cnf_send_end (ctx, mme_tx);
}
}
diff --git a/cesar/cp/sta/core/core.h b/cesar/cp/sta/core/core.h
index 6778c540d3..2410b31a12 100644
--- a/cesar/cp/sta/core/core.h
+++ b/cesar/cp/sta/core/core.h
@@ -160,6 +160,16 @@ cp_sta_core_get_date_ms (cp_t *ctx);
void
cp_sta_core_checkpoint (cp_t *ctx);
+/**
+ * refresh watch dog.
+ * \param user_data CP context
+ *
+ * Update tracking variable and resfresh watch dog. reset if gc is not
+ * called for about 25 sec.
+ */
+void
+cp_sta_core_refresh_watch_dog (void * user_data);
+
END_DECLS
/**
diff --git a/cesar/cp/sta/core/inc/core.h b/cesar/cp/sta/core/inc/core.h
index 5b33b0026f..4803da54dd 100644
--- a/cesar/cp/sta/core/inc/core.h
+++ b/cesar/cp/sta/core/inc/core.h
@@ -81,6 +81,10 @@ struct cp_sta_core_t
/* Ticks per RTC. */
u32 tck_per_rtc;
+ /** Last GC update */
+ u32 gc_update_date_ms;
+ /** Tracking watch dog variable */
+ u32 watch_dog_refresh_count;
};
/** Definition for sta core array of (event , action function). */
diff --git a/cesar/cp/sta/core/src/core.c b/cesar/cp/sta/core/src/core.c
index eb82426e82..281fc576fc 100644
--- a/cesar/cp/sta/core/src/core.c
+++ b/cesar/cp/sta/core/src/core.c
@@ -56,6 +56,10 @@
#include "cp/beacon/beacon.h"
#include "cp/sta/core/inc/core.h"
+#include "hal/arch/arch.h"
+
+#define CP_STA_CORE_GARBAGE_COLLECTOR_TIMEOUT_MS 1000
+#define CP_STA_CORE_WATCH_DOG_REFRESH_COUNT_MAX 100*10
/** array of cp sta core events/actions. */
static const cp_sta_core_event_action_t cp_sta_core_event_action[] =
@@ -122,7 +126,7 @@ cp_sta_core_init(cp_t *ctx)
ce_rx_cp_set_cp_signal_work_callback (ctx->ce_rx,
cp_sta_core_signal_ce_rx_work_event,
ctx);
-
+ ctx->sta_core.gc_update_date_ms = cp_sta_core_get_date_ms (ctx);
#ifndef STA_CORE_UNIT_TEST
// create and launch the CP sta core thread
cyg_thread_create (
@@ -538,8 +542,11 @@ void
cp_sta_core_garbage_collector(cp_t *cp_ctx)
{
dbg_assert (cp_ctx);
- /* Reset watchdog. */
- hal_watchdog_reset ();
+ /* reset tracking variable */
+ arch_dsr_lock ();
+ cp_ctx->sta_core.watch_dog_refresh_count = 0;
+ arch_dsr_unlock ();
+ cp_ctx->sta_core.gc_update_date_ms = cp_sta_core_get_date_ms (cp_ctx);
/* Call garbage functions. */
cp_sta_action_garbage (cp_ctx);
if (cp_sta_own_data_get_cco_status (cp_ctx))
@@ -561,6 +568,16 @@ cp_sta_core_quit_wait_event_loop(cp_t *cp_ctx)
cp_ctx->sta_core.terminate_flag = true;
}
+void
+cp_sta_core_refresh_watch_dog (void * user_data)
+{
+ cp_t *cp_ctx = (cp_t *) user_data;
+ dbg_assert (cp_ctx);
+ dbg_assert (cp_ctx->sta_core.watch_dog_refresh_count++
+ < CP_STA_CORE_WATCH_DOG_REFRESH_COUNT_MAX);
+ hal_watchdog_reset ();
+}
+
/**
* station core main wait event loop.
*
@@ -599,8 +616,25 @@ cp_sta_core_wait_event_loop(cp_t *ctx)
{
// wait for a cp sta core event
flag_value = cyg_flag_wait (&ctx->sta_core.wait_event_core_flag, flag_mask, CYG_FLAG_WAITMODE_OR | CYG_FLAG_WAITMODE_CLR );
+ i = 0;
+ /* check GC urgent event */
+ if (flag_value & CP_STA_CORE_EVENT_FLAG_GARBAGE
+ && ctx->sta_core.gc_update_date_ms
+ + CP_STA_CORE_GARBAGE_COLLECTOR_TIMEOUT_MS
+ < cp_sta_core_get_date_ms (ctx))
+ {
+ uint j;
+ /* find position of GC event */
+ for (j = 0; j < COUNT (cp_sta_core_event_action); j++)
+ if (cp_sta_core_event_action[j].event_flag ==
+ CP_STA_CORE_EVENT_FLAG_GARBAGE)
+ {
+ i = j;
+ break;
+ }
+ }
// process the event(s) in respect of event category priority order
- for (i = 0; i < COUNT (cp_sta_core_event_action); i++)
+ for (; i < COUNT (cp_sta_core_event_action); i++)
{
if (flag_value & cp_sta_core_event_action[i].event_flag)
{
diff --git a/cesar/cp/sta/core/test/Makefile.mk b/cesar/cp/sta/core/test/Makefile.mk
index eb427d0820..3a9f6a4106 100644
--- a/cesar/cp/sta/core/test/Makefile.mk
+++ b/cesar/cp/sta/core/test/Makefile.mk
@@ -12,24 +12,25 @@ core_events_SOURCES = core_events.c cp_cl_interf_stub.c action_stub.c \
core_events_MODULES = lib cp/sta/core cp/av/fsm/stub cp/cco/action/stub \
ce/rx/cp/stub cp/beacon/stub \
$(SPARC_MODULES)
-core_events_CONFIG_MODULES = cp
+core_events_CONFIG_MODULES = mac/common cp/sta/mgr cp
core_SOURCES = core.c cp_cl_interf_stub.c action_stub.c\
sta_mgr_stub.c
core_MODULES = lib cp/sta/core cp/av/fsm/stub cp/cco/action/stub \
ce/rx/cp/stub cp/beacon/stub \
$(SPARC_MODULES)
-core_CONFIG_MODULES = cp
+core_CONFIG_MODULES = cp mac/common cp/sta/mgr
core_thread_SOURCES = core_thread.c
core_thread_MODULES = lib cp/sta/core cp/av/fsm/stub ce/rx/cp/stub \
cp/cco/action/stub \
$(SPARC_MODULES)
+core_thread_CONFIG_MODULES = mac/common cp/sta/mgr
core_timer_SOURCES = core_timer.c sta_mgr_stub.c
core_timer_MODULES = lib cp/sta/core cp/av/fsm/stub ce/rx/cp/stub \
cp/cco/action/stub \
$(SPARC_MODULES)
-core_timer_CONFIG_MODULES = cp
+core_timer_CONFIG_MODULES = cp mac/common cp/sta/mgr
include $(BASE)/common/make/top.mk
diff --git a/cesar/cp/sta/mgr/Config b/cesar/cp/sta/mgr/Config
new file mode 100644
index 0000000000..736b4b9a0c
--- /dev/null
+++ b/cesar/cp/sta/mgr/Config
@@ -0,0 +1,2 @@
+CONFIG_GPIO_LED_IS_CCO = n
+CONFIG_GPIO_LED_IS_CCO_GPIO = 0
diff --git a/cesar/cp/sta/mgr/inc/sta.h b/cesar/cp/sta/mgr/inc/sta.h
index a5abd5d831..8be75ca4b7 100644
--- a/cesar/cp/sta/mgr/inc/sta.h
+++ b/cesar/cp/sta/mgr/inc/sta.h
@@ -37,6 +37,11 @@ struct cp_sta_private_t
mac_t mac_address;
/**
+ * Device password.
+ */
+ cp_dpw_t dpw;
+
+ /**
* Indicate if the station is Visible by our station.
*/
bool visible;
diff --git a/cesar/cp/sta/mgr/inc/sta_mgr.h b/cesar/cp/sta/mgr/inc/sta_mgr.h
index ed65ba43bf..bd45007c26 100644
--- a/cesar/cp/sta/mgr/inc/sta_mgr.h
+++ b/cesar/cp/sta/mgr/inc/sta_mgr.h
@@ -18,6 +18,7 @@
#include "cp/sta/mgr/inc/net.h"
#define CP_STA_MGR_STATION_RELEASE_MS (5000 * 60)
+#define OUTPUT_LEVEL_ALL 80
struct cp_sta_mgr_t
{
diff --git a/cesar/cp/sta/mgr/inc/sta_own_data.h b/cesar/cp/sta/mgr/inc/sta_own_data.h
index 308c7672c8..ff405d0d5f 100644
--- a/cesar/cp/sta/mgr/inc/sta_own_data.h
+++ b/cesar/cp/sta/mgr/inc/sta_own_data.h
@@ -98,6 +98,16 @@ struct cp_sta_own_data_private_t
cp_key_t dak;
/**
+ * The station's original DAK.
+ */
+ cp_key_t original_dak;
+
+ /**
+ * The station's output level.
+ */
+ uint output_level;
+
+ /**
* Simple connect procedure status.
*/
bool sc;
diff --git a/cesar/cp/sta/mgr/net.h b/cesar/cp/sta/mgr/net.h
index 3f1334556f..d2a6e7a72f 100644
--- a/cesar/cp/sta/mgr/net.h
+++ b/cesar/cp/sta/mgr/net.h
@@ -166,6 +166,26 @@ cp_sta_t *
cp_net_sta_get_next (cp_t *ctx, cp_net_t *net, cp_sta_t *prev_sta);
/**
+ * Get the next station from the AVLN stating by the previous one already
+ * request.
+ * \param ctx the module context.
+ * \param net the network context.
+ * \param prev_sta the previous station requested, whose reference is
+ * released.
+ * \param status list status (CP_NET_STA_ASSOC, CP_NET_STA_UNASSOC)
+ * \return the next station.
+ *
+ * This function shall be call after get_first.
+ *
+ * Returns a reference to the next station, release a reference to the
+ * previous station. This is done to make this kind of loop easy:
+ *
+ */
+cp_sta_t *
+cp_net_sta_get_next_status (cp_t *ctx, cp_net_t *net, cp_sta_t *prev_sta,
+ cp_net_sta_status_t assoc);
+
+/**
* Get the network SNID.
* \param ctx the module context.
* \param net the network context.
diff --git a/cesar/cp/sta/mgr/src/net.c b/cesar/cp/sta/mgr/src/net.c
index da156b1b88..326c2b6097 100644
--- a/cesar/cp/sta/mgr/src/net.c
+++ b/cesar/cp/sta/mgr/src/net.c
@@ -98,7 +98,7 @@ cp_net_garbage_station_list (cp_t *ctx, cp_net_t *net, u32 date_ms,
for (sta = cp_net_sta_get_first (ctx, net, assoc); sta; sta = sta_next)
{
slab_addref (sta);
- sta_next = cp_net_sta_get_next (ctx, net, sta);
+ sta_next = cp_net_sta_get_next_status (ctx, net, sta, assoc);
if (less_mod2p32(sta->expired_date_ms, date_ms))
cp_sta_mgr_sta_remove (ctx, sta);
slab_release (sta);
@@ -336,6 +336,34 @@ cp_net_sta_get_next (cp_t *ctx, cp_net_t *net, cp_sta_t *prev_sta)
}
}
+cp_sta_t *
+cp_net_sta_get_next_status (cp_t *ctx, cp_net_t *net, cp_sta_t *prev_sta,
+ cp_net_sta_status_t assoc)
+{
+ set_t *set;
+ set_node_t *node;
+ cp_sta_t *sta;
+
+ dbg_assert (ctx);
+ dbg_assert (prev_sta);
+
+ set = (assoc == CP_NET_STA_UNASSOC) ? &net->unassociated_stas:
+ &net->associated_stas;
+
+ // Get the next node.
+ node = set_next (set, &prev_sta->node_net);
+ slab_release (prev_sta);
+
+ if (node)
+ {
+ sta = PARENT_OF (cp_sta_t, node_net, node);
+ slab_addref (sta);
+ return sta;
+ }
+ else
+ return NULL;
+}
+
cp_snid_t
cp_net_get_snid (cp_t *ctx, cp_net_t *net)
{
diff --git a/cesar/cp/sta/mgr/src/sta.c b/cesar/cp/sta/mgr/src/sta.c
index f021dcfab2..521070ff77 100644
--- a/cesar/cp/sta/mgr/src/sta.c
+++ b/cesar/cp/sta/mgr/src/sta.c
@@ -22,6 +22,12 @@
#include "cp/inc/context.h"
#include "cp/cp.h"
+#include "config/cp/eoc.h"
+
+#if CONFIG_CP_EOC
+#include "cp/eoc/sta/mgr/sta_mgr.h"
+#endif
+
cp_sta_t *
cp_sta_init (slab_cache_t *cache)
{
@@ -36,6 +42,15 @@ cp_sta_init (slab_cache_t *cache)
sta->association_confirmed = true;
sta->visible = CP_STA_VISIBLE_STATE_VISIBLE;
+#if CONFIG_CP_EOC && CONFIG_CP_EOC_IS_MASTER
+ /* Station authorization is initially set to false. It can be changed by adding the station
+ into the White List and setting the authorization to true. */
+ ((cp_sta_t *) sta)->multi_sta.allowed = false;
+ ((cp_sta_t *) sta)->multi_sta.ports.port[0].enabled = true;
+ ((cp_sta_t *) sta)->authenticated_to_unassociated = false;
+ ((cp_sta_t *) sta)->sta_in_wl = false;
+#endif /* CONFIG_CP_EOC && CONFIG_CP_EOC_IS_MASTER */
+
return (cp_sta_t *) sta;
}
@@ -164,7 +179,13 @@ cp_sta_get_authenticated (cp_t *ctx, cp_sta_t *sta)
if ((cp_sta_p->net == ctx->sta_mgr.our_avln)
&& (ctx->sta_mgr.our_avln))
{
- if (cp_sta_p->tei == MAC_TEI_UNASSOCIATED)
+ if (cp_sta_p->tei == MAC_TEI_UNASSOCIATED
+#if CONFIG_CP_EOC
+ || (CONFIG_CP_EOC_IS_MASTER
+ && !cp_eoc_sta_mgr_sta_is_assoc (ctx, ctx->sta_mgr.our_avln,
+ cp_sta_p->tei))
+#endif
+ )
state = false;
else
{
diff --git a/cesar/cp/sta/mgr/src/sta_mgr.c b/cesar/cp/sta/mgr/src/sta_mgr.c
index e91aa2a269..35423e7c46 100644
--- a/cesar/cp/sta/mgr/src/sta_mgr.c
+++ b/cesar/cp/sta/mgr/src/sta_mgr.c
@@ -27,9 +27,7 @@
#include "cp/inc/context.h"
#include "cp/sta/mgr/inc/sta.h"
-#include "cp/sta/mgr/inc/net.h"
#include "cp/sta/mgr/inc/sta_mgr.h"
-#include "cp/sta/mgr/inc/sta_own_data.h"
void
cp_sta_mgr_elects_sta_partial_ack (cp_t *ctx)
@@ -144,8 +142,10 @@ cp_sta_mgr_sta_add_realy (cp_t *ctx, cp_net_t *net, cp_tei_t tei,
if (MAC_TEI_IS_STA (tei))
sta->net->num_associated_stas ++;
+#if (CONFIG_CP_AV)
if (net == ctx->sta_mgr.our_avln && sta->net->num_associated_stas == 1)
cp_fsm_post_new_event (ctx, bare, sta_status_changed);
+#endif
net->num_visible_stas ++;
net->num_stas ++;
@@ -198,6 +198,7 @@ cp_sta_mgr_uninit (cp_t *ctx)
{
cp_net_t *net;
dbg_assert (ctx);
+
// Uninitialise the station contained in the release list.
if (ctx->sta_mgr.our_avln)
{
@@ -482,8 +483,10 @@ cp_sta_mgr_set_our_avln (cp_t *ctx, cp_net_t *net)
mac_store_sta_add (ctx->mac_store, cp_sta_get_tei (sta));
}
}
+#if (CONFIG_CP_AV)
/* Elects a partial acknowledger. */
cp_sta_mgr_elects_sta_partial_ack (ctx);
+#endif
}
void
@@ -563,6 +566,10 @@ cp_sta_mgr_sta_get_from_mac (cp_t *ctx, mac_t mac_addr)
dbg_assert (ctx);
dbg_assert (mac_addr);
+#if CONFIG_CP_EOC
+ dbg_assert (mac_addr < MAC_BROADCAST);
+#endif
+
if (!set_empty (&ctx->sta_mgr.stas))
{
sta.mac_address = mac_addr;
diff --git a/cesar/cp/sta/mgr/src/sta_own_data.c b/cesar/cp/sta/mgr/src/sta_own_data.c
index abed0aaf5b..c1d021ec41 100644
--- a/cesar/cp/sta/mgr/src/sta_own_data.c
+++ b/cesar/cp/sta/mgr/src/sta_own_data.c
@@ -28,6 +28,8 @@
#include "cp/inc/context.h"
#include "cp/sta/mgr/inc/sta_own_data.h"
+#include "config/av/only/mode.h"
+
/**
* Uninitialise the station own data to default values.
* \param ctx the module context.
@@ -49,14 +51,17 @@ void
cp_sta_own_data_set_tei (cp_t * ctx, u8 tei)
{
dbg_assert (ctx);
- dbg_assert (ctx->mac_config);
if (tei != ctx->sta_mgr.sta_own_data.tei)
{
+ dbg_assert (ctx->mac_config);
+
ctx->sta_mgr.sta_own_data.tei = tei;
ctx->mac_config->tei = tei;
+#if (CONFIG_CP_AV)
cp_fsm_post_new_event (ctx, bare, sta_status_changed);
+#endif
}
}
@@ -365,7 +370,9 @@ cp_sta_own_data_set_pco_status (cp_t *ctx, bool pco)
ctx->sta_mgr.sta_own_data.pco_glid = 0;
else
ctx->sta_mgr.sta_own_data.pco_glid |= (pco << 7);
+#if (CONFIG_CP_AV)
cp_fsm_post_new_event (ctx, bare, sta_status_changed);
+#endif
}
}
@@ -396,7 +403,9 @@ cp_sta_own_data_set_cco_status (cp_t *ctx, bool cco)
}
}
+#if (CONFIG_CP_AV)
cp_fsm_post_new_event (ctx, bare, sta_status_changed);
+#endif
}
}
@@ -429,7 +438,9 @@ cp_sta_own_data_set_authenticated_status (cp_t *ctx, bool authenticated)
{
ctx->sta_mgr.sta_own_data.authenticated = authenticated;
ctx->mac_config->authenticated = authenticated;
+#if (CONFIG_CP_AV)
cp_fsm_post_new_event (ctx, bare, sta_status_changed);
+#endif
}
}
@@ -565,7 +576,9 @@ cp_sta_own_data_set_sc (cp_t *ctx, bool status)
if (ctx->sta_mgr.sta_own_data.sc != status)
{
ctx->sta_mgr.sta_own_data.sc = status;
+#if (CONFIG_CP_AV)
cp_fsm_post_new_event (ctx, bare, sta_status_changed);
+#endif
}
}
@@ -576,3 +589,18 @@ cp_sta_own_data_get_sc (cp_t *ctx)
return ctx->sta_mgr.sta_own_data.sc;
}
+
+void
+cp_sta_own_data_set_output_level (cp_t *ctx, uint output_level)
+{
+ dbg_assert (ctx);
+ if (output_level)
+ ctx->sta_mgr.sta_own_data.output_level = output_level;
+}
+
+uint
+cp_sta_own_data_get_output_level (cp_t *ctx)
+{
+ dbg_assert (ctx);
+ return ctx->sta_mgr.sta_own_data.output_level;
+}
diff --git a/cesar/cp/sta/mgr/sta.h b/cesar/cp/sta/mgr/sta.h
index cb52df22b2..3d2488b246 100644
--- a/cesar/cp/sta/mgr/sta.h
+++ b/cesar/cp/sta/mgr/sta.h
@@ -20,6 +20,13 @@
#include "cp/mme.h"
#include "mac/common/store.h"
+#include "config/cp/eoc.h"
+#if CONFIG_CP_EOC && CONFIG_CP_EOC_IS_MASTER
+#include "cp/eoc/multi_sta_fsm/inc/context.h"
+#endif /* CONFIG_CP_EOC && CONFIG_CP_EOC_IS_MASTER */
+
+#define PORT_NB 5
+
/** Enum */
enum cp_sta_visible_status_t
{
@@ -63,6 +70,46 @@ struct cp_sta_reassembly_ctx_t
};
typedef struct cp_sta_reassembly_ctx_t cp_sta_reassembly_ctx_t;
+#if CONFIG_CP_EOC && CONFIG_CP_EOC_IS_MASTER
+
+/**
+ * Control plane EoC port structure
+ */
+struct cp_eoc_port_t
+{
+ bool enabled;
+ u8 index_of_service;
+};
+typedef struct cp_eoc_port_t cp_eoc_port_t;
+
+/**
+ * Control plane EoC ports structure
+ */
+struct cp_eoc_ports_t
+{
+ cp_eoc_port_t port[PORT_NB];
+};
+typedef struct cp_eoc_ports_t cp_eoc_ports_t;
+
+/**
+ * Control plane multi station structure
+ */
+struct cp_multi_sta_t
+{
+ bool allowed;
+ u8 output_level;
+ u32 start_time;
+ u32 end_time;
+ cp_key_t dak;
+ u8 action;
+ bool to_leave;
+ cp_eoc_ports_t ports;
+ /* TBD */
+};
+typedef struct cp_multi_sta_t cp_multi_sta_t;
+
+#endif /* CONFIG_CP_EOC && CONFIG_CP_EOC_IS_MASTER */
+
/**
* Control plane station.
*/
@@ -81,6 +128,11 @@ struct cp_sta_t
u32 expired_date_ms;
/**
+ * Date of association.
+ */
+ uint associated_date_ms;
+
+ /**
* The Reassembly context for the cl_interf.
*/
cp_sta_reassembly_ctx_t reassembly_ctx;
@@ -141,6 +193,14 @@ struct cp_sta_t
/** Heap CCo selection node. */
heap_node_t cco_selection_node;
+ bool authenticated_to_unassociated;
+ bool sta_in_wl;
+
+#if CONFIG_CP_EOC && CONFIG_CP_EOC_IS_MASTER
+ /** Multi STA FSM */
+ cp_eoc_multi_sta_fsm_t fsm;
+ cp_multi_sta_t multi_sta;
+#endif /* CONFIG_CP_EOC && CONFIG_CP_EOC_IS_MASTER */
};
typedef struct cp_sta_t cp_sta_t;
diff --git a/cesar/cp/sta/mgr/sta_mgr.h b/cesar/cp/sta/mgr/sta_mgr.h
index b3eb3f1eef..aca79ed4ad 100644
--- a/cesar/cp/sta/mgr/sta_mgr.h
+++ b/cesar/cp/sta/mgr/sta_mgr.h
@@ -17,6 +17,7 @@
#include "cp/inc/variant.h"
#include "cp/sta/mgr/net.h"
#include "cp/sta/mgr/sta_own_data.h"
+#include "cp/sta/mgr/inc/sta.h"
/* Forward declaration. */
typedef struct cp_sta_mgr_t cp_sta_mgr_t;
diff --git a/cesar/cp/sta/mgr/sta_own_data.h b/cesar/cp/sta/mgr/sta_own_data.h
index 6dcf1d9da7..c09f5c4d88 100644
--- a/cesar/cp/sta/mgr/sta_own_data.h
+++ b/cesar/cp/sta/mgr/sta_own_data.h
@@ -76,6 +76,37 @@ struct cp_sta_own_data_t
cp_sta_t * pco;
/**
+ * The station's number of successful associations and authentications. In CCo case, it is
+ * the number of successful associations and authentications for all the slaves in the network.
+ */
+ uint num_good_assoc_auth;
+
+ /**
+ * The station's number of association requests with no response. In CCo case, it is
+ * the number of associations requests with no response for all the slaves in the network (zero).
+ */
+ uint num_bad_could_not_assoc;
+
+ /**
+ * The station's number of refused association requests. In CCo case, it is
+ * the number of refused associations requests for all the slaves in the network.
+ */
+ uint num_bad_assoc_failure;
+
+ /**
+ * The station's number of authentication requests with no response. In CCo case, it is
+ * the number of authentication requests with no response for all the slaves in the network (zero).
+ */
+ uint num_bad_could_not_auth;
+
+ /**
+ * The station's number of being disconnected by master. In CCo case, it is the number of CC_LEAVE
+ * requests sent to all the slaves in the network.
+ */
+ uint num_leave;
+
+
+ /*
* Current Force Role
*/
mac_force_role_t force_role;
@@ -416,6 +447,22 @@ cp_sta_own_data_set_sc (cp_t *ctx, bool status);
bool
cp_sta_own_data_get_sc (cp_t *ctx);
+/**
+ * Set the output level of the station.
+ * \param ctx the module context
+ * \param output_level the output level power to use
+ */
+void
+cp_sta_own_data_set_output_level (cp_t *ctx, uint output_level);
+
+/**
+ * Get the output level of the station.
+ * \param ctx the module context
+ * \return the output level power to use
+ */
+uint
+cp_sta_own_data_get_output_level (cp_t *ctx);
+
END_DECLS
#endif /* cp_sta_data_sta_own_data_h */
diff --git a/cesar/cp/sta/mgr/stub/src/net.c b/cesar/cp/sta/mgr/stub/src/net.c
index 9db8a7f5e1..a874009143 100644
--- a/cesar/cp/sta/mgr/stub/src/net.c
+++ b/cesar/cp/sta/mgr/stub/src/net.c
@@ -216,3 +216,11 @@ cp_net_blacklisted_status_get (cp_t *ctx, cp_net_t *net)
{
return false;
}
+
+void
+cp_net_garbage_station_list (cp_t *ctx, cp_net_t *net, u32 date_ms,
+ cp_net_sta_status_t assoc)
+ __attribute__ ((weak));
+void
+cp_net_garbage_station_list (cp_t *ctx, cp_net_t *net, u32 date_ms,
+ cp_net_sta_status_t assoc) {}
diff --git a/cesar/cp/sta/mgr/stub/src/sta.c b/cesar/cp/sta/mgr/stub/src/sta.c
index 5c43612fa0..c589706de7 100644
--- a/cesar/cp/sta/mgr/stub/src/sta.c
+++ b/cesar/cp/sta/mgr/stub/src/sta.c
@@ -17,6 +17,14 @@
#include "cp/mme.h"
#include "cp/sta/mgr/sta.h"
+cp_sta_t *
+cp_sta_init (slab_cache_t *cache) __attribute__ ((weak));
+cp_sta_t *
+cp_sta_init (slab_cache_t *cache)
+{
+ return NULL;
+}
+
cp_tei_t
cp_sta_get_tei (cp_sta_t *ctx) __attribute__ ((weak));
cp_tei_t
diff --git a/cesar/cp/sta/mgr/stub/src/sta_mgr.c b/cesar/cp/sta/mgr/stub/src/sta_mgr.c
index 9f265cc187..0f68cd9523 100644
--- a/cesar/cp/sta/mgr/stub/src/sta_mgr.c
+++ b/cesar/cp/sta/mgr/stub/src/sta_mgr.c
@@ -15,6 +15,7 @@
#include "common/std.h"
#include "cp/sta/mgr/net.h"
#include "cp/sta/mgr/sta.h"
+#include "cp/sta/mgr/sta_own_data.h"
void
cp_sta_mgr_elects_sta_partial_ack (cp_t *ctx) __attribute__ ((weak));
diff --git a/cesar/cp/test/mme/Makefile b/cesar/cp/test/mme/Makefile
index cb32230ec3..ad11635c1b 100644
--- a/cesar/cp/test/mme/Makefile
+++ b/cesar/cp/test/mme/Makefile
@@ -7,8 +7,10 @@ TARGET_PROGRAMS = test_mme_target
test_mme_SOURCES = test_mme.c
test_mme_MODULES = lib common/defs/mmtypes
+test_mme_CONFIG_MODULES = mac/common
test_mme_target_SOURCES = test_mme.c
test_mme_target_MODULES = lib hal/arch common/defs/mmtypes
+test_mme_target_CONFIG_MODULES = mac/common
include $(BASE)/common/make/top.mk
diff --git a/cesar/cp/types.h b/cesar/cp/types.h
index 7572961f65..1fd37e06f0 100644
--- a/cesar/cp/types.h
+++ b/cesar/cp/types.h
@@ -34,6 +34,13 @@ struct cp_key_t
};
typedef struct cp_key_t cp_key_t;
+/** Device password. */
+struct cp_dpw_t
+{
+ char dpw[CP_DPW_MAX_SIZE + 1];
+};
+typedef struct cp_dpw_t cp_dpw_t;
+
/** Security level. */
enum cp_security_level_t
{
diff --git a/cesar/doc/tdma/MSTAR_eoc_tdma_solution.rst b/cesar/doc/tdma/MSTAR_eoc_tdma_solution.rst
new file mode 100644
index 0000000000..323a5eba90
--- /dev/null
+++ b/cesar/doc/tdma/MSTAR_eoc_tdma_solution.rst
@@ -0,0 +1,493 @@
+|Title| - |Version|
++++++++++++++++++++
+
+
+.. |Title| replace:: MSTAR TDMA solution for EoC
+.. |Version| replace:: A0
+
+.. include:: header.rst
+
+
+
+Introduction
+************
+
+Foreword
+========
+
+This document describes the basic principles used in MSTAR's TDMA implementation for EoC networks.
+
+This document will also provide some details in which the EoC implementation differs from the HPAV
+standard [REF_ 1].
+
+Main difference between the HPAV and EoC products is the fact that the EoC product
+is used not as "a mean" to connect the smaller number of devices inside the “homeâ€, but
+to distribute the data over a somewhat larger area, like an apartment building or a few
+buildings, for more devices.
+To achieve effective communication with larger number of devices and have a throughput
+as high as possible, master/slave configuration with the TDMA was chosen.
+Main target was to provide the best possible efficiency by reducing overhead channel
+usage to a minimum.
+
+To implement the TDMA allocations in the EoC network number of changes was done in
+beacon period and structure, frame control format and key exchange mechanism. Also
+some new functionalities like, scheduling were added.
+
+
+References
+==========
+
+.. _REF :
+
++----------+-----------------------------------------------------+
+|Reference |
++==========+=====================================================+
+| REF 1 | HomePlug AV Specification v1.0.10 |
++----------+-----------------------------------------------------+
+
+.. include:: glossary.rst
+
+Beacon period structure
+***********************
+
+We can consider the EoC network as a special case of an AVLN in uncoordinated mode with only one,
+predefined CCo (that is, the master). In this network only the central beacon is used while the
+discover and the proxy beacon are not used. The discover beacon is omitted because of the used
+configuration (master/slave), slaves do not have to communicate with each other, so, there is no
+need to know the exact network topology. The proxy beacon is not necessary because master should
+see all the slaves present in the network and there should be no hidden nodes.
+
+The content of the central beacon is relatively simple, it contains the allocations for the current
+beacon period. There are three allocations:
+
+ - for central beacon transmission
+ - for CSMA
+ - and for TDMA
+
+and they are conveyed inside one Non-Persistent Schedule BENTRY [REF_ 1] 4.4.3.15.4.1, as
+shown on the picture.
+
+
+.. figure:: beacon-alloc.png
+ :height: 140px
+ :width: 280 px
+ :scale: 50 %
+ :align: center
+
+ Central beacon period structure
+
+
+Global link identifiers and durations for used allocations are specified inside the
+Session Allocation Information [REF _1] 4.4.3.15.4.2.4. Total duration of the beacon
+period is 100 ms. The durations of each allocation as well as their GLIDs are in the
+table.
+
+
+ .. list-table:: GLID and duration of the allocations
+ :widths: 20 15 15
+ :header-rows: 1
+
+ * - Allocation
+ - GLID
+ - Duration (ms)
+
+ * - Beacon transmission
+ - 0xFB
+ - 1.3
+
+ * - Local CSMA
+ - 0xFF
+ - 3 or 25
+
+ * - TDMA (CFPI)
+ - 0xFB
+ - 73.7 or 95.7
+
+
+
+GLIDs for local CSMA and TDMA (CFPI) correspond to [REF_ 1] 5.2.1.4.1, while the value of
+the GLID for the beacon transmission is EoC specific. The CSMA period is only used for slaves,
+to send their association and authentication request MMEs. Two different durations of the CSMA
+allocation are related to start up period, which lasts 20 seconds. Start up period is a period
+after a master power on, when many slaves are expected to send their MMEs and try to associate.
+
+During the TDMA period master uses a polling mechanism and there is no information about the
+transmission plan inside the central beacon. Slaves have to respond to each polling frame. With
+this simple master polling, synchronization is automatically done by master at any poll no AC
+line cycle synchronization needs to be done.
+
+
+TDMA polling
+************
+
+Inside TDMA interval, master polls slaves according to scheduler data. In poll frame, master
+assigns allowed duration of frame which slave is going to send in response to poll. In slave's
+response, besides the data content of the frame, there is amount of buffered data on slave.
+Using the information about buffered data on slave and channel quality, master can chose the next
+slave to be polled.
+The TDMA poling in EoC, is organized in the way that master polls the slaves using the Start-of-Frame
+MPDU frame control (delimiter type, [REF _1] 4.4.1.2) and the slaves respond with Reverse Start-of-Frame
+frame. For that reason information about PBs received incorrectly must be primarily conveyed in these
+two messages. To achieve this goal frame controls of these two MPDUs were changed to get as much
+"space" as possible for conveying the PB reception information and are presented in `Frame control
+structure`_.
+The Channel Estimation Procedure [REF _1] 5.2.6.1, is also done in TDMA, so, the format of the Sound
+MPDU is also changed to enable it to carry the information about the PB transmission success. Because
+the modems decide arbitrarily when to update Tone Maps and this change allows the transmission in the
+other direction to go freely.
+
+Master polls the slaves according to scheduling data, which are updated after each frame is transmitted,
+received. Master decides which slave to poll next according to:
+
+- the data buffered on the master side for each slave,
+- the data buffered on each slave,
+- the time of the last poll made for a slave,
+- the number of empty polls.
+
+The poll is considered to be empty if there was no data exchanged neither in TX nor in RX. One possible
+polling sequence is shown in the picture below. In this case master polls the slave number 2, two times
+in a row, master has data to send to slave 2. Duration of SOF is larger then slave's reply in RSOF. In
+the second poll, slave 1 sends Sound frame in response. All three types of frames shown in the picture
+contain information related to previous frame's PB reception.
+
+
+.. figure:: polling.png
+ :height: 140px
+ :width: 350 px
+ :scale: 50 %
+ :align: center
+
+ EoC polling mechanism
+
+
+For each authenticated slave master keeps for transmission one data MAC frame stream and one MME MAC frame
+stream to store the MSDUs and management messages, respectively. The same is on the slaves side. Data kept
+in the MFSs are sent in the physical frame with the appropriate frame control. When new frame has to be
+sent in any direction, the priority is:
+
+- MME frame,
+- Sound frame,
+- Data frame.
+
+
+Frame control structure
+***********************
+
+EoC Start-of-Frame Variant Fields
+=================================
+
+
++-------------+--------------+------------+------------+---------------------------------------------+
+| Field | Octet Number | Bit Number | Field Size | Definition |
++=============+==============+============+============+=============================================+
+| **DT_AV** | 0 | 0-2 | 3 | 0b001 (Delimiter Type) |
++-------------+ +------------+------------+---------------------------------------------+
+| **ACCESS** | | 3 | 1 | 0b0 |
++-------------+ +------------+------------+---------------------------------------------+
+| **SNID** | | 4-7 | 4 | Short network ID |
++-------------+--------------+------------+------------+---------------------------------------------+
+| **DTEI** | 1 | 0-7 | 8 | Destination Terminal Equipment Identifier |
++-------------+--------------+------------+------------+---------------------------------------------+
+| LID_ | 2 | 0-3 | 4 | Link Identifier |
++-------------+ +------------+------------+---------------------------------------------+
+| EKS_ | | 4-5 | 2 | Encryption Key |
++-------------+ +------------+------------+---------------------------------------------+
+| Direction_ | | 6 | 1 | Direction (0 Master->Slave, 1 Slave->Master)|
++-------------+ +------------+------------+---------------------------------------------+
+| **PBSz** | | 7 | 1 | PB size, 1 for 136 |
++-------------+--------------+------------+------------+---------------------------------------------+
+| **NumSym** | 3 | 0-1 | 2 | Number of symbols |
++-------------+ +------------+------------+---------------------------------------------+
+| **TMI_AV** | | 2-6 | 5 | Tone map index |
++-------------+ +------------+------------+---------------------------------------------+
+| **MCF** | | 7 | 1 | Multicast Flag |
++-------------+--------------+------------+------------+---------------------------------------------+
+| **FL_AV** | 4 | 0-7 | 12 | Frame Length |
++ +--------------+------------+ | |
+| | 5 | 0-3 | | |
++-------------+ +------------+------------+---------------------------------------------+
+| **MPDUCnt** | | 4-5 | 2 | MPDU count |
++-------------+ +------------+------------+---------------------------------------------+
+| **BurstCnt**| | 6-7 | 2 | Burst count |
++-------------+--------------+------------+------------+---------------------------------------------+
+| MRDUR_FL_ | 6 | 0-7 | 12 | Maximum reverse transmission duration |
+| +--------------+------------+ | +
+| | 7 | 0-3 | | |
++-------------+ +------------+------------+---------------------------------------------+
+| **MNBF** | | 4 | 1 | Multi-network broadcast flag |
++-------------+ +------------+------------+---------------------------------------------+
+| **BBF** | | 5 | 1 | Bidirectional burst flag |
++-------------+ +------------+------------+---------------------------------------------+
+| SACKT_ | | 6-7 | 2 | SACK Type |
++-------------+--------------+------------+------------+---------------------------------------------+
+| SACKI_ | 8 | 0-7 | 40 | SACK Information |
+| +--------------+------------+ | |
+| | 9 | 0-7 | | |
+| +--------------+------------+ | |
+| | 10 | 0-7 | | |
+| +--------------+------------+ | |
+| | 11 | 0-7 | | |
+| +--------------+------------+ | |
+| | 12 | 0-7 | | |
++-------------+--------------+------------+------------+---------------------------------------------+
+| **FCCS** | 13 | 0-7 | 24 | Frame Control Check Sequence |
+| +--------------+------------+ | |
+| | 14 | 0-7 | | |
+| +--------------+------------+ | |
+| | 15 | 0-7 | | |
++-------------+--------------+------------+------------+---------------------------------------------+
+
+All the fields in bold in the table above correspond in size and definition to the ones of the Start of
+Frame Variant Fields as described in [REF_ 1] 4.4.1.5.2. Definitions for other fields are EoC specific
+`EoC Specific Variant Fields`_.
+
+
+EoC Sound Variant Fields
+========================
+
+
++------------+--------------+------------+------------+---------------------------------------------+
+| Field | Octet Number | Bit Number | Field Size | Definition |
++============+==============+============+============+=============================================+
+| **DT_AV** | 0 | 0-2 | 3 | 0b001 (Delimiter Type) |
++------------+ +------------+------------+---------------------------------------------+
+| **ACCESS** | | 3 | 1 | 0b0 |
++------------+ +------------+------------+---------------------------------------------+
+| **SNID** | | 4-7 | 4 | Short network ID |
++------------+--------------+------------+------------+---------------------------------------------+
+| **DTEI** | 1 | 0-7 | 8 | Destination Terminal Equipment Identifier |
++------------+--------------+------------+------------+---------------------------------------------+
+| **FL_AV** | 2 | 0-7 | 12 | Frame Length |
++ +--------------+------------+ | |
+| | 3 | 0-3 | | |
++------------+ +------------+------------+---------------------------------------------+
+| LID_ | | 4-7 | 4 | Link Identifier |
++------------+--------------+------------+------------+---------------------------------------------+
+| SACKT_ | 4 | 0-1 | 2 | SACK Type |
++------------+ +------------+------------+---------------------------------------------+
+| Direction_ | | 2 | 1 | Direction (0 Master->Slave, 1 Slave->Master)|
++------------+ +------------+------------+---------------------------------------------+
+| **PBSz** | | 3 | 1 | PB size, 1 for 136 |
++------------+ +------------+------------+---------------------------------------------+
+| **SAF** | | 4 | 1 | Sound ACK flag |
++------------+ +------------+------------+---------------------------------------------+
+| **SCF** | | 5 | 1 | Sound Complete flag |
++------------+ +------------+------------+---------------------------------------------+
+| **REQ_TM** | | 6-7 | 3 | Max tone maps requested |
+| +--------------+------------+ | |
+| | 5 | 0 | | |
++------------+ +------------+------------+---------------------------------------------+
+| **MPDUCnt**| | 1-2 | 2 | MPDU Count |
++------------+ +------------+------------+---------------------------------------------+
+| SACKI_ | | 3-7 | 53 | SACK Information |
+| +--------------+------------+ | |
+| | 6 | 0-7 | | |
+| +--------------+------------+ | |
+| | 7 | 0-7 | | |
+| +--------------+------------+ | |
+| | 8 | 0-7 | | |
+| +--------------+------------+ | |
+| | 9 | 0-7 | | |
+| +--------------+------------+ | |
+| | 10 | 0-7 | | |
+| +--------------+------------+ | |
+| | 11 | 0-7 | | |
++------------+--------------+------------+------------+---------------------------------------------+
+| **SRC** | 12 | 0-7 | 8 | Sound Reason Code |
++------------+--------------+------------+------------+---------------------------------------------+
+| **FCCS** | 13 | 0-7 | 24 | Frame Control Check Sequence |
+| +--------------+------------+ | |
+| | 14 | 0-7 | | |
+| +--------------+------------+ | |
+| | 15 | 0-7 | | |
++------------+--------------+------------+------------+---------------------------------------------+
+
+All the fields in bold in the table above correspond in size and definition to the ones of the Sound
+Variant Fields as described in [REF_ 1] 4.4.1.5.5. Definitions for other fields are EoC specific `EoC
+Specific Variant Fields`_.
+
+
+EoC Reverse SOF Variant Fields
+==============================
+
+
++------------+--------------+------------+------------+---------------------------------------------+
+| Field | Octet Number | Bit Number | Field Size | Definition |
++============+==============+============+============+=============================================+
+| **DT_AV** | 0 | 0-2 | 3 | 0b001 (Delimiter Type) |
++------------+ +------------+------------+---------------------------------------------+
+| **ACCESS** | | 3 | 1 | 0b0 |
++------------+ +------------+------------+---------------------------------------------+
+| **SNID** | | 4-7 | 4 | Short network ID |
++------------+--------------+------------+------------+---------------------------------------------+
+| **DTEI** | 1 | 0-7 | 8 | Destination Terminal Equipment Identifier |
++------------+--------------+------------+------------+---------------------------------------------+
+| SACKT_ | 2 | 0-1 | 2 | SACK TYPE |
++------------+ +------------+------------+---------------------------------------------+
+| **FL_AV** | | 2-7 | 12 | Frame Length |
+| +--------------+------------+ | |
+| | 3 | 0-5 | | |
++------------+ +------------+------------+---------------------------------------------+
+| **NumSym** | | 6-7 | 2 | Number of symbols |
++------------+--------------+------------+------------+---------------------------------------------+
+| SACKI_ | 4 | 0-7 | 53 | SACK Information |
+| +--------------+------------+ | |
+| | 5 | 0-7 | | |
+| +--------------+------------+ | |
+| | 6 | 0-7 | | |
+| +--------------+------------+ | |
+| | 7 | 0-7 | | |
+| +--------------+------------+ | |
+| | 8 | 0-7 | | |
+| +--------------+------------+ | |
+| | 9 | 0-7 | | |
+| +--------------+------------+ | |
+| | 10 | 0-4 | | |
++------------+ +------------+------------+---------------------------------------------+
+| LID_ | | 5-7 | 4 | Link Identifier |
+| +--------------+------------+ | |
+| | 11 | 0 | | |
++------------+ +------------+------------+---------------------------------------------+
+| **TMI_AV** | | 1-5 | 5 | Tone map index |
++------------+ +------------+------------+---------------------------------------------+
+| **BDF** | | 6 | 1 | Beacon detect flag |
++------------+ +------------+------------+---------------------------------------------+
+| **PBSz** | | 7 | 1 | PB size, 1 for 136 |
++------------+--------------+------------+------------+---------------------------------------------+
+| PPB_ | 12 | 0-7 | 8 | Number of pending PB |
++------------+--------------+------------+------------+---------------------------------------------+
+| **FCCS** | 13 | 0-7 | 24 | Frame Control Check Sequence |
+| +--------------+------------+ | |
+| | 14 | 0-7 | | |
+| +--------------+------------+ | |
+| | 15 | 0-7 | | |
++------------+--------------+------------+------------+---------------------------------------------+
+
+All the fields in bold in the table above correspond in size and definition to the ones of Reverse SOF
+Variant Fields as described in [REF_ 1] 4.4.1.5.6. Interpretation of other fields is EoC specific.
+
+
+EoC Specific Variant Fields
+===========================
+
+
+SACKT
+-----
+
+SACK Type field is present only once in the frame control. The values of SACKT are as defined in [REF _1]
+4.4.1.5.3.8.1. And in the following SACK Information field SACK content is interpreted only for one MPDU
+specified in SACKT field, no burst is allowed.
+
+SACKI
+-----
+
+SACK information in mixed or uniform interpretation as specified in SACKT.
+
+LID
+---
+
+Link identifier in EoC allows connectionless traffic links, Priority Link IDs, from 0x00 to 0x03.
+And twelve more Local Link for connection oriented traffic 0x04 to 0x0f. Global link are not used.
+
+PPB
+---
+
+Number of pending PB on slave side, which is an indication that the master uses when making the decision
+for the next poll. PPB includes PBs waiting for retransmission and the un-transmitted ones. This 8 bit
+value is interpreted as an integer.
+
+Direction
+---------
+
+Since Source Terminal Equipment Identifier variant field is not present in EoC frames this bit shows
+the direction of the frame.
+
+EKS
+---
+
+EoC product also uses Encryption Key Select as the Index of the Encryption Key used for encrypting
+segments.
+
+
+ .. list-table:: Encryption Key Select Table
+ :widths: 15 25
+ :header-rows: 1
+
+ * - EKS
+ - Interpretation
+
+ * - 0xb00 - 0xb01
+ - Master assigned NEKs
+
+ * - 0b10
+ - Reserved
+
+ * - 0xb11
+ - Unencrypted MPDU
+
+
+
+MRDUR_FL
+--------
+
+Maximum reverse frame duration, is the value set by master when polling the slave and indicates the
+maximum time duration of the reverse frame the slave is allowed to send in reply to poll. The actual
+value inside this field is interpreted in the same way as FL_AV in multiples of 1.28 us.
+
+
+Control Plane adaptation for EoC
+********************************
+
+In this paragraph changes related to Control Plane procedures [REF_ 1] Chapter 7, will be listed.
+
+
+Network Discovery Procedure
+===========================
+
+Changes were made in Control Plane to simplify association and authentication in master/slave
+configuration. Master modem is predefined and starts sending central beacon upon the power on.
+For that reason the network discovery on the slave modem comes to listening for a central beacon
+with the same NID and to synchronize to such central beacon when received. Upon the completion of
+the synchronization, slave can start the association procedure.
+
+
+Association
+===========
+
+Slave sends CC_ASSOC.REQ MME in CSMA. The MME is sent through the temporary MFS with the global LID
+of 0xf8. When it receives CC_ASOCC.REQ MME the master extracts the MAC address of a slave contained in
+the MME. Using this address master checks if that address is allowed in the white list of allowed
+MAC addresses. If slave's MAC address is allowed master sends positive reply in CC_ASSOC.CNF MME.
+White list is a configuration file, loaded during master's power on and contains the list of allowed
+MAC addresses as well as the TEIs and DPWs, that correspond to it. To send CC_ASSOC.CNF MME master
+creates the MME MFS with the global LID of 0xf8.
+
+On the slave side, when positive reply is received inside CC_ASSOC.CNF, slave keeps the TEI received
+and can try to authenticate. After successful association slave is not allowed to use CSMA any more
+for sending frames to the master, it waits to be polled.
+
+
+
+Authentication
+==============
+
+In order to authenticate slave sends CM_GET_KEY.REQ MME to master, the content of this MME is put in
+encrypted payload of CM_ENCRYPTED_PAYLOAD.IND. Initial CM_GET_KEY.REQ is encrypted using DAK, [REF_ 1]
+7.10.2.1., where DAK is calculated from the DPW [REF_ 1] 7.10.2.2. Format of the CM_GET_KEY.REQ MME is
+as defined in [REF _1] 11.5.6. The key request type used is NEK.
+
+Master retrieves slaves DPW from the white list, calculates DAK and tries to decrypt the MME. In case of
+the positive result it sends in response CM_GET_KEY.CNF with the Network Encryption Key and the current
+EKS. Content is also encrypted inside payload of CM_ENCRYPTED_PAYLOAD.IND. Having received the CM_GET_KEY.CNF
+slave saves the NEK. To verify key requested slave sends another CM_GET_KEY.REQ this time with key request
+type set to TEK again it is encapsulated in CM_ENCRYPTED_PAYLOAD.IND and encrypted with DAK. When master
+receives and decrypts the second request it verifies the NEK already sent by sending it again in the response.
+After this slave is considered to be authenticated on master.
+
+If authentication is finished with success master and slave create transmission data MFS with Local
+LID 0x04, where MSDU payload belonging to a given TEI are queued. Reception MFS for data are created
+once the first frame containing the data is received.
+
+In case of failed authentication slave will try again in 30 seconds. All the consequent attempts will be
+done with the same DAK, it will not be considered invalid, like it is expected for the NMK in case of
+failure, [REF_ 1] 7.3.3.
diff --git a/cesar/doc/tdma/Makefile b/cesar/doc/tdma/Makefile
new file mode 100644
index 0000000000..3dbd2e15a6
--- /dev/null
+++ b/cesar/doc/tdma/Makefile
@@ -0,0 +1,8 @@
+BASE = ../../..
+
+DOCS = MSTAR_eoc_tdma_solution
+
+GLOSSARY=y
+
+include $(BASE)/common/doc/template/doc.mk
+
diff --git a/cesar/doc/tdma/beacon-alloc.png b/cesar/doc/tdma/beacon-alloc.png
new file mode 100644
index 0000000000..82474ee5c5
--- /dev/null
+++ b/cesar/doc/tdma/beacon-alloc.png
Binary files differ
diff --git a/cesar/doc/tdma/polling.png b/cesar/doc/tdma/polling.png
new file mode 100644
index 0000000000..a34da296c8
--- /dev/null
+++ b/cesar/doc/tdma/polling.png
Binary files differ
diff --git a/cesar/ecos/packages/hal/common/current/cdl/interrupts.cdl b/cesar/ecos/packages/hal/common/current/cdl/interrupts.cdl
index 411ee163dd..2d2705af8b 100644
--- a/cesar/ecos/packages/hal/common/current/cdl/interrupts.cdl
+++ b/cesar/ecos/packages/hal/common/current/cdl/interrupts.cdl
@@ -75,7 +75,7 @@ cdl_option CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK {
cdl_option CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE {
display "Interrupt stack size"
flavor data
- default_value { CYGPKG_KERNEL ? 6144 : 32768 }
+ default_value { CYGPKG_KERNEL ? 5800 : 32768 }
legal_values 128 to 1048576
description "
This configuration option specifies the stack size in bytes
diff --git a/cesar/ecos/packages/kernel/current/src/common/thread.cxx b/cesar/ecos/packages/kernel/current/src/common/thread.cxx
index 7888c66307..962a912ce6 100644
--- a/cesar/ecos/packages/kernel/current/src/common/thread.cxx
+++ b/cesar/ecos/packages/kernel/current/src/common/thread.cxx
@@ -90,13 +90,13 @@ Cyg_HardwareThread::thread_entry( Cyg_Thread *thread )
Cyg_Scheduler::scheduler.set_current_thread(thread); // restore current thread pointer
CYG_INSTRUMENT_THREAD(ENTER,thread,0);
-
+
#ifdef CYGSEM_KERNEL_SCHED_TIMESLICE
// Reset the timeslice counter so that this thread gets a full
- // quantum.
+ // quantum.
Cyg_Scheduler::reset_timeslice_count();
#endif
-
+
// Zero the lock
HAL_REORDER_BARRIER (); // Prevent the compiler from moving
Cyg_Scheduler::zero_sched_lock(); // the assignment into the code above.
@@ -165,7 +165,7 @@ Cyg_Thread::remove_from_list( void )
}
prev = prev->list_next;
} while ( prev != thread_list );
-
+
Cyg_Scheduler::unlock();
}
@@ -200,7 +200,7 @@ Cyg_Thread::Cyg_Thread(
CYG_REPORT_FUNCTION();
CYG_INSTRUMENT_THREAD(CREATE,this,0);
-
+
// Start the thread in suspended state.
state = SUSPENDED;
suspend_count = 1;
@@ -229,10 +229,10 @@ Cyg_Thread::Cyg_Thread(
#ifdef CYGVAR_KERNEL_THREADS_LIST
// Add thread to housekeeping list
add_to_list();
-#endif
-
+#endif
+
Cyg_Scheduler::scheduler.register_thread(this);
-
+
init_context(this);
CYG_REPORT_RETURN();
@@ -269,14 +269,14 @@ Cyg_Thread::reinitialize()
#else
char * name_arg = NULL;
#endif
-
+
new(this) Cyg_Thread( pri,
entry_point, entry_data,
name_arg,
get_stack_base(), get_stack_size() );
// the constructor re-registers the thread with the scheduler.
- CYG_ASSERTCLASS( this, "Thread corrupted by reinitialize");
+ CYG_ASSERTCLASS( this, "Thread corrupted by reinitialize");
CYG_REPORT_RETURN();
}
@@ -293,11 +293,11 @@ Cyg_Thread::~Cyg_Thread()
#ifdef CYGVAR_KERNEL_THREADS_LIST
// Remove thread from housekeeping list.
remove_from_list();
-#endif
-
+#endif
+
// Zero the unique_id to render this thread inconsistent.
unique_id = 0;
-
+
CYG_REPORT_RETURN();
}
@@ -313,7 +313,7 @@ Cyg_Thread::check_this( cyg_assert_class_zeal zeal) const
// check that we have a non-NULL pointer first
if( this == NULL ) return false;
-
+
switch( zeal )
{
case cyg_system_test:
@@ -353,9 +353,9 @@ Cyg_Thread::sleep()
Cyg_Thread *current = Cyg_Scheduler::get_current_thread();
CYG_ASSERTCLASS( current, "Bad current thread" );
-
+
CYG_INSTRUMENT_THREAD(SLEEP,current,0);
-
+
// Prevent preemption
Cyg_Scheduler::lock();
@@ -381,7 +381,7 @@ Cyg_Thread::wake()
CYG_REPORT_FUNCTION();
CYG_INSTRUMENT_THREAD(WAKE,this,Cyg_Scheduler::current_thread);
-
+
// Prevent preemption
Cyg_Scheduler::lock();
@@ -398,7 +398,7 @@ Cyg_Thread::wake()
Cyg_Scheduler::scheduler.add_thread(this);
}
-
+
// Unlock the scheduler and maybe switch threads
Cyg_Scheduler::unlock();
@@ -418,9 +418,9 @@ Cyg_Thread::counted_sleep()
Cyg_Thread *current = Cyg_Scheduler::get_current_thread();
CYG_ASSERTCLASS( current, "Bad current thread" );
-
+
CYG_INSTRUMENT_THREAD(SLEEP,current,0);
-
+
// Prevent preemption
Cyg_Scheduler::lock();
@@ -439,10 +439,10 @@ Cyg_Thread::counted_sleep()
// and deal with anything we must do when we return
switch( current->wake_reason ) {
case DESTRUCT:
- case EXIT:
+ case EXIT:
current->exit();
break;
-
+
default:
break;
}
@@ -464,9 +464,9 @@ Cyg_Thread::counted_sleep( cyg_tick_count delay )
Cyg_Thread *current = Cyg_Scheduler::get_current_thread();
CYG_ASSERTCLASS( current, "Bad current thread" );
-
+
CYG_INSTRUMENT_THREAD(SLEEP,current,0);
-
+
// Prevent preemption
Cyg_Scheduler::lock();
@@ -478,7 +478,7 @@ Cyg_Thread::counted_sleep( cyg_tick_count delay )
// If the timeout is in the past, the wake reason will have been
// set to something other than NONE already.
-
+
if( current->get_wake_reason() == Cyg_Thread::NONE )
{
set_sleep_reason( Cyg_Thread::TIMEOUT );
@@ -486,7 +486,7 @@ Cyg_Thread::counted_sleep( cyg_tick_count delay )
current->state |= COUNTSLEEP; // Set the state
Cyg_Scheduler::reschedule();
-
+
// clear the timer; if it actually fired, no worries.
clear_timer();
}
@@ -501,10 +501,10 @@ Cyg_Thread::counted_sleep( cyg_tick_count delay )
// and deal with anything we must do when we return
switch( current->wake_reason ) {
case DESTRUCT:
- case EXIT:
+ case EXIT:
current->exit();
break;
-
+
default:
break;
}
@@ -522,7 +522,7 @@ Cyg_Thread::counted_wake()
CYG_REPORT_FUNCTION();
CYG_INSTRUMENT_THREAD(WAKE,this,Cyg_Scheduler::current_thread);
-
+
// Prevent preemption
Cyg_Scheduler::lock();
@@ -553,7 +553,7 @@ Cyg_Thread::cancel_counted_wake()
CYG_REPORT_FUNCTION();
CYG_INSTRUMENT_THREAD(WAKE,this,Cyg_Scheduler::current_thread);
-
+
// Prevent preemption
Cyg_Scheduler::lock();
@@ -577,12 +577,12 @@ Cyg_Thread::suspend()
CYG_REPORT_FUNCTION();
CYG_INSTRUMENT_THREAD(SUSPEND,this,Cyg_Scheduler::current_thread);
-
+
// Prevent preemption
Cyg_Scheduler::lock();
suspend_count++;
-
+
#ifdef CYGNUM_KERNEL_MAX_SUSPEND_COUNT_ASSERT
CYG_ASSERT( CYGNUM_KERNEL_MAX_SUSPEND_COUNT_ASSERT > suspend_count,
"suspend_count overflow" );
@@ -594,7 +594,7 @@ Cyg_Thread::suspend()
// Set the state
state |= SUSPENDED;
-
+
// Unlock the scheduler and maybe switch threads
Cyg_Scheduler::unlock();
@@ -611,19 +611,19 @@ Cyg_Thread::resume()
CYG_REPORT_FUNCTION();
CYG_INSTRUMENT_THREAD(RESUME,this,Cyg_Scheduler::current_thread);
-
+
// Prevent preemption
Cyg_Scheduler::lock();
// If we are about to zero the count, clear the state bit and
// reschedule the thread if possible.
-
+
if( suspend_count == 1 )
{
suspend_count = 0;
CYG_ASSERT( (state & SUSPENDED) != 0, "SUSPENDED bit not set" );
-
+
// Set the state
state &= ~SUSPENDED;
@@ -651,18 +651,18 @@ Cyg_Thread::force_resume()
CYG_REPORT_FUNCTION();
CYG_INSTRUMENT_THREAD(RESUME,this,Cyg_Scheduler::current_thread);
-
+
// Prevent preemption
Cyg_Scheduler::lock();
// If we are about to zero the count, clear the state bit and
// reschedule the thread if possible.
-
+
if ( 0 < suspend_count ) {
suspend_count = 0;
CYG_ASSERT( (state & SUSPENDED) != 0, "SUSPENDED bit not set" );
-
+
// Set the state
state &= ~SUSPENDED;
@@ -697,14 +697,14 @@ Cyg_Thread::release()
case NONE:
// The thread is not sleeping for any reason, do nothing.
// drop through...
-
+
case DESTRUCT:
case BREAK:
case EXIT:
case DONE:
// Do nothing in any of these cases. They are here to
// keep the compiler happy.
-
+
Cyg_Scheduler::unlock();
CYG_REPORT_RETURN();
return;
@@ -713,11 +713,11 @@ Cyg_Thread::release()
// The thread was waiting for some sync object to do
// something.
// drop through...
-
+
case TIMEOUT:
// The thread was waiting on a sync object with a timeout.
// drop through...
-
+
case DELAY:
// The thread was simply delaying, unless it has been
// woken up for some other reason, wake it now.
@@ -727,7 +727,7 @@ Cyg_Thread::release()
}
wake();
-
+
// Allow preemption
Cyg_Scheduler::unlock();
@@ -748,7 +748,7 @@ void
Cyg_Thread::exit()
{
CYG_REPORT_FUNCTION();
-
+
// The thread should never return from this function.
Cyg_Thread *self = Cyg_Thread::self();
@@ -760,7 +760,7 @@ Cyg_Thread::exit()
destructor_fn fn = self->destructors[i].fn;
CYG_ADDRWORD data = self->destructors[i].data;
fn(data);
- }
+ }
}
#endif
#ifdef CYGDBG_KERNEL_THREADS_STACK_MEASUREMENT_VERBOSE_EXIT
@@ -823,14 +823,14 @@ Cyg_Thread::kill()
if( state == RUNNING ) Cyg_Scheduler::scheduler.rem_thread(this);
state = EXITED;
break;
-
+
case DESTRUCT:
case BREAK:
case EXIT:
case DONE:
// Do nothing in any of these cases. They are here to
// keep the compiler happy.
-
+
Cyg_Scheduler::unlock();
CYG_REPORT_RETURN();
return;
@@ -839,11 +839,11 @@ Cyg_Thread::kill()
// The thread was waiting for some sync object to do
// something.
// drop through...
-
+
case TIMEOUT:
// The thread was waiting on a sync object with a timeout.
// drop through...
-
+
case DELAY:
// The thread was simply delaying, unless it has been
// woken up for some other reason, wake it now.
@@ -871,14 +871,14 @@ Cyg_Thread::set_priority( cyg_priority new_priority )
// CYG_ASSERT( new_priority >= CYG_THREAD_MAX_PRIORITY, "Priority out of range");
// CYG_ASSERT( new_priority <= CYG_THREAD_MIN_PRIORITY, "Priority out of range");
-
+
CYG_INSTRUMENT_THREAD(PRIORITY,this,new_priority);
-
+
// Prevent preemption
Cyg_Scheduler::lock();
Cyg_ThreadQueue *queue = NULL;
-
+
// If running, remove from run qs
if( state == RUNNING )
Cyg_Scheduler::scheduler.rem_thread(this);
@@ -888,20 +888,20 @@ Cyg_Thread::set_priority( cyg_priority new_priority )
queue = get_current_queue();
// if indeed we are on a queue
if ( NULL != queue ) {
- CYG_CHECK_DATA_PTR(queue, "Bad queue pointer");
+ CYG_CHECK_DATA_PTR(queue, "Bad queue pointer");
remove();
}
}
Cyg_Scheduler::scheduler.deregister_thread(this);
-
+
#if CYGINT_KERNEL_SCHEDULER_UNIQUE_PRIORITIES
// Check that there are no other threads at this priority.
// If so, leave is as it is.
CYG_ASSERT( Cyg_Scheduler::scheduler.unique(new_priority), "Priority not unique");
-
+
if( Cyg_Scheduler::scheduler.unique(new_priority) )
priority = new_priority;
@@ -914,24 +914,24 @@ Cyg_Thread::set_priority( cyg_priority new_priority )
// better than the current inherited one, then use that
// immediately. We remain in inherited state to avoid problems
// with multiple mutex inheritances.
-
+
if( priority_inherited )
{
original_priority = new_priority;
if( priority > new_priority ) priority = new_priority;
}
else priority = new_priority;
-
-#else
+
+#else
priority = new_priority;
#endif
-
+
#endif // CYGINT_KERNEL_SCHEDULER_UNIQUE_PRIORITIES
Cyg_Scheduler::scheduler.register_thread(this);
-
+
// Return thread to scheduler if runnable
if( state == RUNNING )
Cyg_Scheduler::scheduler.add_thread(this);
@@ -954,11 +954,11 @@ Cyg_Thread::set_priority( cyg_priority new_priority )
// If it is not the current thread then we need to see whether
// it is more worthy of execution than any current thread and
// rescheduled if necessary.
-
+
if( this == Cyg_Scheduler::get_current_thread() )
Cyg_Scheduler::set_need_reschedule();
else Cyg_Scheduler::set_need_reschedule(this);
-
+
// Unlock the scheduler and maybe switch threads
Cyg_Scheduler::unlock();
CYG_REPORT_RETURN();
@@ -981,7 +981,7 @@ Cyg_Thread::delay( cyg_tick_count delay)
// Prevent preemption
Cyg_Scheduler::lock();
-
+
sleep();
set_timer( Cyg_Clock::real_time_clock->current_value()+delay, DELAY );
@@ -996,10 +996,10 @@ Cyg_Thread::delay( cyg_tick_count delay)
// and deal with anything else we must do when we return
switch( wake_reason ) {
case DESTRUCT:
- case EXIT:
+ case EXIT:
exit();
break;
-
+
default:
break;
}
@@ -1026,7 +1026,7 @@ Cyg_Thread::deliver_exception(
exception_control.deliver_exception( exception_number, exception_info );
}
-#ifdef CYGIMP_EXCEPTION_ASYNC
+#ifdef CYGIMP_EXCEPTION_ASYNC
else
{
// Delivering to another thread, probably as a result of one thread
@@ -1041,9 +1041,9 @@ Cyg_Thread::deliver_exception(
// end of unlock_inner(). However this would add extra code to the scheduler,
// and require a way of storing pending exceptions. So for now this option is
// disabled and not yet implemented, it may never be.
-
+
}
-#endif
+#endif
}
#endif
@@ -1068,13 +1068,13 @@ Cyg_Thread::new_data_index()
if (0 == thread_data_map)
return -1;
-
+
// find ls set bit
HAL_LSBIT_INDEX( index, thread_data_map );
// clear the bit
thread_data_map &= ~(1<<index);
-
+
Cyg_Scheduler::unlock();
return index;
@@ -1085,8 +1085,8 @@ void Cyg_Thread::free_data_index( Cyg_Thread::cyg_data_index index )
Cyg_Scheduler::lock();
thread_data_map |= (1<<index);
-
- Cyg_Scheduler::unlock();
+
+ Cyg_Scheduler::unlock();
}
@@ -1123,7 +1123,7 @@ void *Cyg_HardwareThread::increment_stack_limit( cyg_ucount32 size )
// i.e. + sizeof(cyg_uint32)-1) & ~(sizeof(cyg_uint32)-1);
cyg_ucount32 i;
cyg_uint32 sig = (cyg_uint32)this;
-
+
for ( i = 0;
i < CYGNUM_KERNEL_THREADS_STACK_CHECK_DATA_SIZE/sizeof(cyg_uint32);
i++ ) {
@@ -1137,11 +1137,11 @@ void *Cyg_HardwareThread::increment_stack_limit( cyg_ucount32 size )
stack_limit += CYGNUM_KERNEL_THREADS_STACK_CHECK_DATA_SIZE;
Cyg_Scheduler::unlock();
-
+
return ret;
}
#endif
-
+
// =========================================================================
// Cyg_ThreadTimer member functions
@@ -1161,15 +1161,15 @@ Cyg_ThreadTimer::alarm(
Cyg_ThreadTimer *self = (Cyg_ThreadTimer *)data;
Cyg_Thread *thread = self->thread;
-
+
CYG_INSTRUMENT_THREAD(ALARM, 0, 0);
-
+
Cyg_Scheduler::lock();
Cyg_Thread::cyg_reason sleep_reason = thread->get_sleep_reason();
-
+
switch( sleep_reason ) {
-
+
case Cyg_Thread::DESTRUCT:
case Cyg_Thread::BREAK:
case Cyg_Thread::EXIT:
@@ -1225,6 +1225,9 @@ Cyg_ThreadTimer::alarm(
# endif // CYGNUM_KERNEL_THREADS_IDLE_STACK_SIZE
#endif // CYGNUM_HAL_STACK_SIZE_MINIMUM
+# undef CYGNUM_KERNEL_THREADS_IDLE_STACK_SIZE
+# define CYGNUM_KERNEL_THREADS_IDLE_STACK_SIZE 150000
+
static char idle_thread_stack[CYGNUM_KERNEL_CPU_MAX][CYGNUM_KERNEL_THREADS_IDLE_STACK_SIZE];
// Loop counter for debugging/housekeeping
@@ -1247,7 +1250,7 @@ idle_thread_main( CYG_ADDRESS data )
#if 0
// For testing, it is useful to be able to fake
// clock interrupts in the idle thread.
-
+
Cyg_Clock::real_time_clock->tick();
#endif
#ifdef CYGIMP_IDLE_THREAD_YIELD
@@ -1266,7 +1269,7 @@ class Cyg_IdleThread : public Cyg_Thread
{
public:
Cyg_IdleThread();
-
+
};
// -------------------------------------------------------------------------
@@ -1289,7 +1292,7 @@ Cyg_IdleThread::Cyg_IdleThread()
// Call into scheduler to set up this thread as the default
// current thread for its CPU.
-
+
Cyg_Scheduler::scheduler.set_idle_thread( this, this-&idle_thread[0] );
CYG_REPORT_RETURN();
diff --git a/cesar/hal/leon/watchdog.h b/cesar/hal/leon/watchdog.h
index 5c8ec347de..65e01343b5 100644
--- a/cesar/hal/leon/watchdog.h
+++ b/cesar/hal/leon/watchdog.h
@@ -19,8 +19,8 @@
/** Watchdog counter register. */
#define LEON_WATCHDOG_COUNTER (* (volatile u32 *) (LEON_WATCHDOG_BASE + 0x00))
-/** Watchdog counter reset value, about 2 sec. */
-#define LEON_WATCHDOG_RESET_VALUE (2 * 1024 * 1024)
+/** Watchdog counter reset value, about 10 sec. */
+#define LEON_WATCHDOG_RESET_VALUE (10 * 1024 * 1024)
extern inline void
leon_watchdog_reset (void)
diff --git a/cesar/hal/phy/defs.h b/cesar/hal/phy/defs.h
index 362fe3bbb5..663e01823b 100644
--- a/cesar/hal/phy/defs.h
+++ b/cesar/hal/phy/defs.h
@@ -23,7 +23,7 @@
#endif
/** Number of OFDM carrier, defined by the hardware. */
-#define PHY_CARRIER_NB 1155
+#define PHY_CARRIER_NB 1408
/** Number of first OFDM carrier, defined by the hardware. */
#define PHY_CARRIER_OFFSET 74
@@ -47,6 +47,9 @@
#define PHY_HP10_CARRIER_OFFSET \
CEIL_DIV (PHY_CARRIER_OFFSET, PHY_HP10_CARRIER_FACTOR)
+/** Last OFDM carrier number in EoC configuration. */
+#define PHY_LAST_EOC_CARRIER_NB 1439
+
/** Number of words needed to define a tonemask. */
#define PHY_TONEMASK_WORDS ((PHY_CARRIER_NB + 32 - 1) / 32)
diff --git a/cesar/hal/phy/inc/phy_params.txt b/cesar/hal/phy/inc/phy_params.txt
index 0cb2705ccc..125d897b11 100644
--- a/cesar/hal/phy/inc/phy_params.txt
+++ b/cesar/hal/phy/inc/phy_params.txt
@@ -1,7 +1,7 @@
resys_prog = http://gevrey:8080/svn/spidcom_digital_svn/branches/MARIA_RC_17/modules/resys/tb/prog_resys_tr_internal_fc10_attempt@10348
resys_offsettable = http://gevrey:8080/svn/spidcom_digital_svn/branches/MARIA_RC_17/modules/resys/tb/resys_offsettable.txt@10348
tx_scale_adapt = 0x10000
-tx_scale_adapt_blk_exp = 8
+tx_scale_adapt_blk_exp = 7
rx_fec_param__me10doi_max_it = 9
rx_fec_param__tcc_half_it_fc = 10
rx_fec_param__tcc_half_it_data_last_pb = 15
diff --git a/cesar/hal/phy/inc/regs.h b/cesar/hal/phy/inc/regs.h
index 042b300127..a87a5041c3 100644
--- a/cesar/hal/phy/inc/regs.h
+++ b/cesar/hal/phy/inc/regs.h
@@ -122,6 +122,10 @@ typedef u32 uint32_t;
| BF_MASK (PHY_DSPSS_TX_PARAM__USE_SHAKER) \
)
+/* TX_SCALE */
+#define PHY_DSPSS_TX_SCALE_ADAPT__GAIN 17, 0
+#define PHY_DSPSS_TX_SCALE_ADAPT_BLK_EXP__STEP 2, 0
+
/* TX_FC_10 */
#define PHY_DSPSS_TX_FC_10__FC 24, 0
#define PHY_DSPSS_TX_FC_10__CRC 31, 31
diff --git a/cesar/hal/phy/maximus/dur/test/Config b/cesar/hal/phy/maximus/dur/test/Config
new file mode 100644
index 0000000000..dd537c7602
--- /dev/null
+++ b/cesar/hal/phy/maximus/dur/test/Config
@@ -0,0 +1 @@
+CONFIG_ATU_FACTOR = 1
diff --git a/cesar/hal/phy/maximus/dur/test/Makefile b/cesar/hal/phy/maximus/dur/test/Makefile
index 1f78d505f5..c5b005b827 100644
--- a/cesar/hal/phy/maximus/dur/test/Makefile
+++ b/cesar/hal/phy/maximus/dur/test/Makefile
@@ -3,5 +3,6 @@ BASE = ../../../../..
HOST_PROGRAMS = test_dur
test_dur_SOURCES = test_dur.c
test_dur_MODULES = lib hal/phy/maximus/dur
+test_dur_CONFIG_MODULES = mac/common
include $(BASE)/common/make/top.mk
diff --git a/cesar/hal/phy/maximus/src/maximus_phy_ctrl.c b/cesar/hal/phy/maximus/src/maximus_phy_ctrl.c
index 0b3283b4c0..aa9d111a2e 100644
--- a/cesar/hal/phy/maximus/src/maximus_phy_ctrl.c
+++ b/cesar/hal/phy/maximus/src/maximus_phy_ctrl.c
@@ -2649,6 +2649,15 @@ phy_tx_cancel (phy_t *ctx)
maximus_phy_next_tx_frame_cancel(ctx);
}
+void
+phy_tx_scale_adapt_set (phy_t *ctx, u16 value)
+{
+}
+
+void
+phy_tx_scale_adapt_exp_set (phy_t *ctx, u8 exp)
+{
+}
/**
* set errno to:
@@ -3026,7 +3035,6 @@ phy_rx_fc10 (phy_t *ctx)
return fc_10;
}
-
u32
phy_rx_sysdate (phy_t *ctx)
{
diff --git a/cesar/hal/phy/phy.h b/cesar/hal/phy/phy.h
index 999a24c007..bf24f90dbc 100644
--- a/cesar/hal/phy/phy.h
+++ b/cesar/hal/phy/phy.h
@@ -467,6 +467,22 @@ u32
phy_rx_agc_gain (phy_t *ctx);
/**
+ * Set exponent for output level
+ * \param ctx phy context
+ * \param exp exponent
+ */
+void
+phy_tx_scale_adapt_exp_set (phy_t *ctx, u8 exp);
+
+/**
+ * Set value for output level
+ * \param ctx phy context
+ * \param value value
+ */
+void
+phy_tx_scale_adapt_set (phy_t *ctx, u16 value);
+
+/**
* Compute SPOC coefficients.
* \param rho_q30 frequency error, Q30 format
* \param coeff output coefficients
diff --git a/cesar/hal/phy/spoc/src/spoc.c b/cesar/hal/phy/spoc/src/spoc.c
index b04a0f06cb..9e37f3489a 100644
--- a/cesar/hal/phy/spoc/src/spoc.c
+++ b/cesar/hal/phy/spoc/src/spoc.c
@@ -131,6 +131,9 @@ phy_spoc_compute_m_matrix (s32 rho_q30, s32 *reg_alpha, s32 *reg_beta)
void
phy_spoc_compute_all (s32 rho_q30, phy_spoc_coeff_t *coeff)
{
+ if (!(rho_q30 >= -PHY_SPOC_RHO_MAX_Q30
+ && rho_q30 <= PHY_SPOC_RHO_MAX_Q30))
+ return;
dbg_assert (rho_q30 >= -PHY_SPOC_RHO_MAX_Q30
&& rho_q30 <= PHY_SPOC_RHO_MAX_Q30);
dbg_assert_ptr (coeff);
diff --git a/cesar/hal/phy/src/rx.c b/cesar/hal/phy/src/rx.c
index 2d5d6a33f9..f3e55ac69d 100644
--- a/cesar/hal/phy/src/rx.c
+++ b/cesar/hal/phy/src/rx.c
@@ -204,7 +204,7 @@ phy_rx_prepare_sound (phy_t *ctx, uint nb_pb, u32 mod_fecrate_pb_size,
symbol_nb);
}
-u32 ARCH_ILRAM
+u32 /*ARCH_ILRAM*/
phy_rx_fc10 (phy_t *ctx)
{
dbg_claim (ctx);
diff --git a/cesar/hal/phy/src/tx.c b/cesar/hal/phy/src/tx.c
index 1e6578534c..bcc1190bb6 100644
--- a/cesar/hal/phy/src/tx.c
+++ b/cesar/hal/phy/src/tx.c
@@ -17,7 +17,7 @@
#include "hal/leon/itc2.h"
#include "hal/arch/arch.h"
-void ARCH_ILRAM
+void /*ARCH_ILRAM*/
phy_tx_fc10 (phy_t *ctx, u32 date, u32 fc_10)
{
dbg_claim (ctx);
@@ -217,3 +217,19 @@ phy_tx_cancel (phy_t *ctx)
PHY_PRATIC_TIMER_6_CTRL = 0;
}
+void
+phy_tx_scale_adapt_exp_set (phy_t *ctx, u8 exp)
+{
+ dbg_claim (ctx);
+ PHY_DSPSS_TX_SCALE_ADAPT_BLK_EXP = BF_SET (PHY_DSPSS_TX_SCALE_ADAPT_BLK_EXP,
+ PHY_DSPSS_TX_SCALE_ADAPT_BLK_EXP__STEP,
+ exp);
+}
+
+void
+phy_tx_scale_adapt_set (phy_t *ctx, u16 value)
+{
+ dbg_claim (ctx);
+ PHY_DSPSS_TX_SCALE_ADAPT = BF_SET (PHY_DSPSS_TX_SCALE_ADAPT,
+ PHY_DSPSS_TX_SCALE_ADAPT__GAIN, value);
+}
diff --git a/cesar/hal/phy/test/bridgedma/Makefile.mk b/cesar/hal/phy/test/bridgedma/Makefile.mk
index e20fe69dec..c53d12e2eb 100644
--- a/cesar/hal/phy/test/bridgedma/Makefile.mk
+++ b/cesar/hal/phy/test/bridgedma/Makefile.mk
@@ -6,5 +6,6 @@ TARGET_PROGRAMS = bridgedma
bridgedma_SOURCES = bridgedma.c common.c bridgedma_tx.c bridgedma_rx.c \
bridgedma_tx_rx.c
bridgedma_MODULES = lib hal/arch $(TEST_MODULES)
+bridgedma_CONFIG_MODULES = mac/common
include $(BASE)/common/make/top.mk
diff --git a/cesar/host/sci/cesar/test/Makefile b/cesar/host/sci/cesar/test/Makefile
index 6a0853d9e0..6d7f75ab38 100644
--- a/cesar/host/sci/cesar/test/Makefile
+++ b/cesar/host/sci/cesar/test/Makefile
@@ -3,5 +3,6 @@ DEFS += -DUNIT_TEST
HOST_PROGRAMS = test_sci_cesar
test_sci_cesar_SOURCES = test_sci_cesar.c
test_sci_cesar_MODULES = lib host
+test_sci_cesar_CONFIG_MODULES = mac/common
include $(BASE)/common/make/top.mk
diff --git a/cesar/interface/fcall/test/Makefile b/cesar/interface/fcall/test/Makefile
index 239e4fb319..d5d5e439be 100644
--- a/cesar/interface/fcall/test/Makefile
+++ b/cesar/interface/fcall/test/Makefile
@@ -3,5 +3,6 @@ DEFS += -DUNIT_TEST
HOST_PROGRAMS = test_interface_fcall
test_interface_fcall_SOURCES = test_interface_fcall.c bufmgr_stub.c
test_interface_fcall_MODULES = lib interface/fcall host cl/stub cl/mbx/stub
+test_interface_fcall_CONFIG_MODULES = mac/common
include $(BASE)/common/make/top.mk
diff --git a/cesar/interface/sniffer/test/Makefile b/cesar/interface/sniffer/test/Makefile
index 29ad8b482b..1c43406401 100644
--- a/cesar/interface/sniffer/test/Makefile
+++ b/cesar/interface/sniffer/test/Makefile
@@ -4,5 +4,6 @@ HOST_PROGRAMS = test-sniffer
test-sniffer_SOURCES = test-sniffer.c bufmgr_stub.c
test-sniffer_MODULES = lib interface/sniffer bsu/beacon cl/stub \
cl/mbx/stub
+test-sniffer_CONFIG_MODULES = mac/common bsu
include $(BASE)/common/make/top.mk
diff --git a/cesar/interface/test/Makefile.mk b/cesar/interface/test/Makefile.mk
index a6c059816b..dd0e2124f6 100644
--- a/cesar/interface/test/Makefile.mk
+++ b/cesar/interface/test/Makefile.mk
@@ -7,3 +7,4 @@ test-interface_SOURCES = sar_stub.c test-interface.c bufmgr_stub.c
test-interface_MODULES = lib interface host bsu/beacon\
cl/stub cl/mbx/stub \
$(SPARC_MODULES) $(SYNTH_MODULES)
+test-interface_CONFIG_MODULES = mac/common bsu
diff --git a/cesar/lib/Config b/cesar/lib/Config
index 84fca05339..a4b4404fca 100644
--- a/cesar/lib/Config
+++ b/cesar/lib/Config
@@ -19,6 +19,7 @@ CONFIG_STATS = y
CONFIG_STATS_ON_FATAL = n
CONFIG_RESTRACK = n
CONFIG_RESTRACK_KEEP = n
+CONFIG_MAC_PBPROC_EOC_FC = n
CONFIG_GPIO_FATAL = n
CONFIG_GPIO_FATAL_GPIO = 0
CONFIG_GPIO_FATAL_BLINK = n
diff --git a/cesar/lib/blk.h b/cesar/lib/blk.h
index 428771580f..2e6eacf713 100644
--- a/cesar/lib/blk.h
+++ b/cesar/lib/blk.h
@@ -237,7 +237,7 @@ blk_print_memory (void);
uint
blk_slack (void);
-/**
+/*
* Query the total number of block usable for slack protected allocation.
* \return total number of block, minus the slack.
*
@@ -247,6 +247,14 @@ blk_slack (void);
uint
blk_slack_total (void);
+/**
+ * Get value of free blocks.
+ * \return value of free blocks.
+ *
+ */
+uint
+blk_free_nb (void);
+
END_DECLS
#endif /* lib_blk_h */
diff --git a/cesar/lib/src/blk.c b/cesar/lib/src/blk.c
index a2ac8fa543..88847ada83 100644
--- a/cesar/lib/src/blk.c
+++ b/cesar/lib/src/blk.c
@@ -557,3 +557,9 @@ blk_slack_total (void)
return blk_global.total_nb - CONFIG_BLK_SLACK;
}
+uint
+blk_free_nb (void)
+{
+ return blk_global.free_nb;
+}
+
diff --git a/cesar/lib/test/blk/Config b/cesar/lib/test/blk/Config
index 25502db4b8..783d3bb434 100644
--- a/cesar/lib/test/blk/Config
+++ b/cesar/lib/test/blk/Config
@@ -1,4 +1,4 @@
-CONFIG_BLK_SLACK=400
+CONFIG_BLK_SLACK= 400
CONFIG_BLAME = y
CONFIG_BLK_LOG = y
CONFIG_DEBUG_FATAL_CATCH = y
diff --git a/cesar/lib/test/stats/Makefile b/cesar/lib/test/stats/Makefile
index d4ccb36695..82a5e7258a 100644
--- a/cesar/lib/test/stats/Makefile
+++ b/cesar/lib/test/stats/Makefile
@@ -3,5 +3,6 @@ BASE = ../../..
HOST_PROGRAMS = test_stats
test_stats_SOURCES = test_stats.c
test_stats_MODULES = lib common/defs/mmtypes
+test_stats_CONFIG_MODULES = mac/common
include $(BASE)/common/make/top.mk
diff --git a/cesar/lib/test/trace/Makefile b/cesar/lib/test/trace/Makefile
index 7e08ff8563..5a392df01e 100644
--- a/cesar/lib/test/trace/Makefile
+++ b/cesar/lib/test/trace/Makefile
@@ -10,5 +10,6 @@ ECOS = y
TARGET_PROGRAMS = trace_perf
trace_perf_SOURCES = trace_perf.c
trace_perf_MODULES = lib hal/phy hal/arch
+trace_perf_CONFIG_MODULES = mac/common
include $(BASE)/common/make/top.mk
diff --git a/cesar/lib/utils.h b/cesar/lib/utils.h
index c88c7fd03b..14ebf9bfab 100644
--- a/cesar/lib/utils.h
+++ b/cesar/lib/utils.h
@@ -73,6 +73,14 @@ lesseq_mod2p16 (u16 a, u16 b)
#define MIN(a, b) ({ typeof (a) _a = (a); typeof (b) _b = (b); \
_a < _b ? _a : _b; })
+/** Return distance between \p a to \p b modulo 2^16. This only works iff
+ * \p a and \p b are distant no more than 2^15. */
+extern inline u16
+distance_mod2p16 (u16 a, u16 b)
+{
+ return ABS(((s16) (a - b)));
+}
+
/**
* Return the upper rounded integer value of a divided by b (a/b).
* \param a the numerator
diff --git a/cesar/mac/ca/ca.h b/cesar/mac/ca/ca.h
index ee8fbe40a1..dfee325bb4 100644
--- a/cesar/mac/ca/ca.h
+++ b/cesar/mac/ca/ca.h
@@ -124,6 +124,10 @@ struct ca_access_param_t
u32 cw_start_date;
/** Available time (valid if not AIFS). */
uint duration_tck;
+#if CONFIG_MAC_COMMON_EOC_SCHED
+ /* Polled for given TEI. */
+ u8 tei_poll;
+#endif
/** True for AIFS (allocation change, always valid). */
bool aifs;
/** Is there a PRP (valid if not unusable)? */
@@ -237,7 +241,24 @@ ca_access_vcs_restart (ca_t *ctx, u32 end_date);
void
ca_access_vcs_restart_eifs (ca_t *ctx, u32 start_date);
+#if CONFIG_MAC_COMMON_EOC_SCHED
/**
+ * Reprogram access structure.
+ * \param ctx ca context
+ * \param date expiration date
+ * \param duration_tck grant duration
+ * \param tei TEI fo find proper mfs
+ *
+ * Reprograme ca->access structure. This is done when you send RSOF instead
+ * of SOF. Use this artificial feeding of CA to bypass schedule structures in
+ * CA. After this FSM could behave as usual.
+ */
+void
+ca_access_reprogram (ca_t *ctx, u32 date, uint duration_tck, uint tei);
+#endif
+
+/**
+ * Update next ACCESS information for the given grant.
* Program hardware ACCESS timer.
* \param ctx ca context
* \param date expiration date
@@ -424,6 +445,30 @@ ca_mfs_hold_locked (ca_t *ctx, mfs_tx_t *mfs)
}
/**
+ * Update Channel Access after a STA state update.
+ * \param ctx ca context
+ * \param sta the updated STA
+ *
+ * This must be called when a polling condition change for a given station
+ * (pending segments, poll timer, or forced poll).
+ */
+void
+ca_sta_update (ca_t *ctx, sta_t *sta);
+
+/**
+ * Get the number of active stations.
+ * \param ctx ca context
+ * \return the number of active stations
+ */
+int
+ca_sta_active_nb (ca_t *ctx);
+
+#if !CONFIG_MAC_COMMON_EOC_SCHED
+extern inline void
+ca_sta_update (ca_t *ctx, sta_t *sta) { }
+#endif
+
+/**
* Retrieve a pointer to a schedule table entry.
* \param ctx ca context
* \param index schedule index in [0..CA_SCHEDULE_NB)
diff --git a/cesar/mac/ca/inc/alloc.h b/cesar/mac/ca/inc/alloc.h
index 59e8d89000..52afd4c819 100644
--- a/cesar/mac/ca/inc/alloc.h
+++ b/cesar/mac/ca/inc/alloc.h
@@ -19,9 +19,13 @@
|| (lid) == MAC_LID_LOCAL_CSMA)
/** Is the specified LID usable for transmission? */
-#define CA_ALLOC_IS_USABLE(lid) ((lid) != MAC_LID_SPC_HOLE \
- && (lid) != MAC_LID_CFPI)
+#define CA_ALLOC_IS_USABLE(lid) \
+ ((lid) != MAC_LID_SPC_HOLE \
+ && (CONFIG_MAC_COMMON_EOC_SCHED || (lid) != MAC_LID_CFPI))
+#if CONFIG_MAC_PBPROC_EOC_FC
+#define CA_ALLOC_IS_HYBRID(coex, lid) 0
+#else
/** Should transmissions in the specified allocation use hybrid frame
* controls according to the specified coexistence mode. */
#define CA_ALLOC_IS_HYBRID(coex, lid) \
@@ -30,7 +34,7 @@
|| ((lid) == MAC_LID_SHARED_CSMA \
&& (coex) == MAC_COEXISTENCE_SHARED_CSMA_HYBRID_MODE) \
|| MAC_LID_IS_BEACON (lid))
-
+#endif
/**
* Find the beacon period index corresponding to the given date.
* \param ctx ca context
@@ -65,4 +69,8 @@ ca_alloc_find (const ca_schedule_t *sched, uint offset_tck);
void
ca_alloc_prepare (ca_t *ctx);
+/* minimal anticip of ca_access_aifs function execution offset */
+#if CONFIG_MAC_COMMON_EOC_SCHED
+ #define CA_ACCESS_AIFS_ANTICIP_TCK MAC_US_TO_TCK (10)
+#endif
#endif /* mac_ca_inc_alloc_h */
diff --git a/cesar/mac/ca/inc/context.h b/cesar/mac/ca/inc/context.h
index 58d8b0d2f4..9959b74792 100644
--- a/cesar/mac/ca/inc/context.h
+++ b/cesar/mac/ca/inc/context.h
@@ -21,6 +21,8 @@
#include "hal/arch/arch.h"
+#include "config/mac/common.h"
+
/** Channel Access state. */
enum ca_state_t
{
@@ -49,6 +51,18 @@ struct ca_access_t
};
typedef struct ca_access_t ca_access_t;
+#if CONFIG_MAC_COMMON_EOC_SCHED
+
+/** Bit mask in poll table for TX depending on CAP/MME, set when there is
+ * segment to sent for this CAP/MME. */
+# define CA_POLL_TX(mme, cap) ((mme) ? 1 << 4 : 1 << (cap))
+
+/** Bit mask in poll table for RX, set when a station should be polled for a
+ * reason other than TX. */
+# define CA_POLL_RX (1 << 5)
+
+#endif
+
/** Channel Access context. */
struct ca_t
{
@@ -86,6 +100,21 @@ struct ca_t
list_t prio[MAC_CAP_NB];
/** List of MFS held until the next beacon period. */
list_t held;
+#if CONFIG_MAC_COMMON_EOC_SCHED
+ /** TDMA polling table, indexed by TEI. Every cell is composed of:
+ * - bit 0 to 3: 1 if there is something to send for this CAP,
+ * - bit 4: 1 if there is something to send for MME,
+ * - bit 5: 1 if the TEI should be polled. */
+ u8 poll[MAC_TEI_STA_MIN_EOC + MAC_TEI_STA_NB];
+ /** Poll table cache, for fast access. */
+ u32 poll_cache[CEIL_DIV (MAC_TEI_STA_MIN_EOC + MAC_TEI_STA_NB, 32)];
+ /** Current index in polling table. */
+ uint poll_current;
+ /** Last polled TEI used when nothing to send. */
+ uint empty_poll_current;
+ /** Number of active stations. */
+ int sta_active_nb;
+#endif
};
/* Forward declaration in mac/ca/ca.h. */
diff --git a/cesar/mac/ca/mfs.h b/cesar/mac/ca/mfs.h
index 47ca594d50..6858018135 100644
--- a/cesar/mac/ca/mfs.h
+++ b/cesar/mac/ca/mfs.h
@@ -19,6 +19,7 @@ enum ca_mfs_state_t
CA_MFS_STATE_UNKNOWN, /*< MFS unknown to CA or containing no PB. */
CA_MFS_STATE_PRIO_QUEUED, /*< MFS queued to CSMA CA MFS lists. */
CA_MFS_STATE_CFP_QUEUED, /*< MFS available for TDMA. */
+ CA_MFS_STATE_POLL_QUEUED, /*< MFS used for TDMA polling. */
CA_MFS_STATE_HELD, /*< MFS held until next beacon period. */
CA_MFS_STATE_REMOVED, /*< MFS was removed and should not be used
again. */
diff --git a/cesar/mac/ca/src/access.c b/cesar/mac/ca/src/access.c
index feca536310..baa89671b6 100644
--- a/cesar/mac/ca/src/access.c
+++ b/cesar/mac/ca/src/access.c
@@ -21,12 +21,24 @@
#include "mac/ca/inc/alloc.h"
#include "mac/ca/inc/mfs.h"
+#include "lib/bitqueue.h"
+
/** Anticipation delay for an access update. */
#define CA_ACCESS_UPDATE_ANTICIP_TCK MAC_US_TO_TCK (200)
+#if CONFIG_MAC_COMMON_EOC_SCHED
+
+/** EoC hack, TODO: remove this. */
+#define TDMA_EOC_TX_OFFSET_TCK MAC_US_TO_TCK (40)
+
+#endif
+
/** Minimum access duration. */
#define CA_ACCESS_MIN_TCK MAC_US_TO_TCK (150)
+/** Minimum number of PB to take priority. */
+#define CA_ACCESS_PRIO_MIN_PB 40
+
const ca_alloc_param_t *
ca_access_activate (ca_t *ctx, u32 date)
{
@@ -83,6 +95,17 @@ ca_access_hold (ca_t *ctx)
static mfs_tx_t *
ca_access_choose_mfs_tx (ca_t *ctx, uint glid);
+#if CONFIG_MAC_COMMON_EOC_SCHED
+/**
+ * Choose a MFS TX for a given poll.
+ * \param ctx ca context
+ * \param tei polled station TEI
+ * \return MFS or NULL if none match
+ */
+static mfs_tx_t *
+ca_access_choose_mfs_tx_poll (ca_t *ctx, uint tei);
+#endif
+
/**
* Compute access parameters.
* \param ctx ca context
@@ -95,7 +118,8 @@ ca_access_compute (ca_t *ctx, u32 end_date, bool eifs)
u32 allocation_end_date;
u32 access_date;
uint glid;
- mfs_tx_t *mfs = NULL;
+ bool valid = false;
+ mfs_tx_t *mfs;
dbg_claim (ctx && ctx->state != CA_STATE_IDLE);
CA_TRACE (ACCESS_VCS_RESTART, phy_date (), end_date, eifs);
/* Get current allocation. */
@@ -113,6 +137,32 @@ ca_access_compute (ca_t *ctx, u32 end_date, bool eifs)
ctx->access.param.prp = false;
ctx->access.param.cfp = false;
}
+#if CONFIG_MAC_COMMON_EOC_SCHED
+ /* Note: The TDMA EoC allocation use LID_CFPI. */
+ else if (glid == MAC_LID_CFPI)
+ {
+ ctx->access.unusable = false;
+ ctx->access.param.cw_start_date = access_date;
+ ctx->access.param.tei_poll = MAC_TEI_UNASSOCIATED;
+ ctx->access.param.prp = false;
+ ctx->access.param.cfp = true;
+ /* If CCo, schedule a poll. */
+ if (MAC_TEI_IS_EOC_CCO (ctx->config->tei))
+ {
+ valid = true;
+ /* EoC hack, TODO: remove this. */
+ access_date = access_date + TDMA_EOC_TX_OFFSET_TCK;
+ /* Set access duration. */
+ ctx->access.param.duration_tck =
+ allocation_end_date - access_date;
+ }
+ /* Reactivate RX only for slaves. */
+ else if (!eifs)
+ phy_rx_activate (ctx->phy, false, end_date, true);
+ /* Set access parameters, TODO: here because of TX offset. */
+ ctx->access.param.access_date = access_date;
+ }
+#endif
/* No overflow, ACCESS event. */
else
{
@@ -129,7 +179,10 @@ ca_access_compute (ca_t *ctx, u32 end_date, bool eifs)
/* Find a suitable MFS. */
mfs = ca_access_choose_mfs_tx (ctx, glid);
if (mfs)
+ {
cap = mfs->cap;
+ valid = true;
+ }
/* Choose backoff. */
if (csma)
{
@@ -150,8 +203,7 @@ ca_access_compute (ca_t *ctx, u32 end_date, bool eifs)
}
}
/* Program access timer, and trace result. */
- if (!ctx->access.unusable
- && mfs
+ if (valid
&& less_mod2p32 (access_date + CA_ACCESS_MIN_TCK,
allocation_end_date))
{
@@ -194,6 +246,24 @@ ca_access_vcs_restart_eifs (ca_t *ctx, u32 start_date)
ca_access_compute (ctx, start_date + eifs_tck, true);
}
+#if CONFIG_MAC_COMMON_EOC_SCHED
+/* This function is called only in slave config */
+void
+ca_access_reprogram (ca_t *ctx, u32 date, uint duration_tck, uint tei)
+{
+ dbg_claim (ctx && ctx->state != CA_STATE_IDLE);
+ ctx->access.unusable = false;
+ ctx->access.param.access_date = date;
+ ctx->access.param.cw_start_date = date;
+ ctx->access.param.duration_tck = duration_tck;
+ ctx->access.param.tei_poll = tei;
+ ctx->access.param.aifs = false;
+ ctx->access.param.prp = false;
+ ctx->access.param.cfp = true;
+ ca_access_program (ctx, date);
+}
+#endif
+
/**
* Update current access after a MFS or schedule change.
* \param ctx ca context
@@ -206,6 +276,10 @@ ca_access_compute_update (ca_t *ctx, u32 update_date)
bool aifs = true;
u32 access_date = ctx->access.param.access_date;
u32 allocation_end_date = ctx->current_allocation_param.end_date;
+ uint glid = ctx->current_allocation_param.glid;
+ /* Nothing for EoC TDMA. */
+ if (glid == MAC_LID_CFPI)
+ return;
/* Test whether an access is possible. */
if (!ctx->access.unusable)
{
@@ -353,7 +427,19 @@ ca_access_get_mfs (ca_t *ctx)
dbg_claim (!ctx->access.mfs);
/* Get an MFS for this access. */
uint glid = ctx->current_allocation_param.glid;
- mfs_tx_t *mfs = ca_access_choose_mfs_tx (ctx, glid);
+ mfs_tx_t *mfs;
+#if CONFIG_MAC_COMMON_EOC_SCHED
+ if (glid == MAC_LID_CFPI)
+ {
+ mfs = ca_access_choose_mfs_tx_poll (ctx, ctx->access.param.tei_poll);
+ }
+ else
+ {
+ mfs = ca_access_choose_mfs_tx (ctx, glid);
+ }
+#else
+ mfs = ca_access_choose_mfs_tx (ctx, glid);
+#endif
/* Keep MFS pointer. */
ctx->access.mfs = mfs;
/* Return this MFS. */
@@ -407,7 +493,8 @@ ca_access_choose_mfs_tx (ca_t *ctx, uint glid)
dbg_assert (!mfs || mfs->ca_state == CA_MFS_STATE_UNKNOWN
|| mfs->ca_state == CA_MFS_STATE_CFP_QUEUED
|| mfs->ca_state == CA_MFS_STATE_HELD
- || mfs->ca_state == CA_MFS_STATE_REMOVED);
+ || mfs->ca_state == CA_MFS_STATE_REMOVED
+ || CONFIG_MAC_COMMON_EOC_SCHED);
/* Reference is borrowed from the store. */
if (mfs)
blk_release (mfs);
@@ -433,3 +520,102 @@ ca_access_choose_mfs_tx (ca_t *ctx, uint glid)
}
}
+#if CONFIG_MAC_COMMON_EOC_SCHED
+
+static mfs_tx_t * ARCH_ILRAM
+ca_access_choose_mfs_tx_poll (ca_t *ctx, uint tei)
+{
+ dbg_claim (ctx);
+ mfs_tx_t *mfs;
+ /* Determine peer TEI if not polled. */
+ if (tei == MAC_TEI_UNASSOCIATED)
+ {
+ uint poll_i = ctx->poll_current;
+ int next;
+ next = bitqueue_find_next (ctx->poll_cache, COUNT (ctx->poll_cache),
+ poll_i);
+ if (next < 0)
+ {
+ /* No pollable TEI, choose one anyway. */
+ tei = mac_store_sta_next_loop (ctx->store,
+ ctx->empty_poll_current);
+ ctx->empty_poll_current = tei == MAC_TEI_BCAST ? 0 : tei;
+ }
+ else
+ {
+ /* Pollable TEI, reset RX poll. */
+ poll_i = next;
+ ctx->poll[poll_i] &= ~CA_POLL_RX;
+ if (!ctx->poll[poll_i])
+ bitqueue_reset (ctx->poll_cache, poll_i);
+ ctx->poll_current = poll_i;
+ if (poll_i < MAC_TEI_STA_MIN_EOC)
+ tei = MAC_TEI_BCAST;
+ else
+ tei = poll_i;
+ }
+ }
+ /* Broadcast has highest priority. */
+ mfs = mac_store_mfs_get_bcast_tx_mme_locked (ctx->store);
+ if (mfs && mfs->seg_nb)
+ {
+ /* Keep broadcast MME. */
+ }
+ else if (tei == MAC_TEI_BCAST)
+ {
+ mfs_tx_t *mfs_data = mac_store_mfs_get_bcast_tx_data_locked (
+ ctx->store, MAC_PLID_MIN);
+ if (mfs_data)
+ mfs = mfs_data;
+ }
+ else
+ {
+ mfs_tx_t *mfs_mme = mac_store_mfs_get_sta_tx_mme_locked (
+ ctx->store, tei);
+ if (mfs_mme && mfs_mme->seg_nb)
+ mfs = mfs_mme;
+ else
+ {
+ mfs_tx_t *fallback_mfs = NULL;
+ mfs_tx_t *best_mfs = NULL;
+ int cap;
+ for (cap = MAC_CAP_NB - 1; cap >= 0; cap--)
+ {
+ mfs = mac_store_mfs_get_sta_tx_data_locked (
+ ctx->store, MAC_LLID_MIN + cap, tei);
+ if (mfs && mfs->seg_nb)
+ {
+ if (mfs->seg_nb > CA_ACCESS_PRIO_MIN_PB
+ || mfs->deficit > CA_ACCESS_PRIO_MIN_PB)
+ {
+ if (best_mfs)
+ best_mfs->deficit += best_mfs->seg_nb;
+ best_mfs = mfs;
+ break;
+ }
+ else if (!best_mfs || best_mfs->seg_nb < mfs->seg_nb)
+ {
+ if (best_mfs)
+ best_mfs->deficit += best_mfs->seg_nb;
+ best_mfs = mfs;
+ }
+ }
+ else if (mfs)
+ fallback_mfs = mfs;
+ }
+ if (best_mfs)
+ {
+ best_mfs->deficit = 0;
+ mfs = best_mfs;
+ }
+ else if (fallback_mfs)
+ mfs = fallback_mfs;
+ else
+ mfs = mfs_mme;
+ }
+ }
+ return mfs;
+}
+
+#endif /* CONFIG_MAC_COMMON_EOC_SCHED */
+
diff --git a/cesar/mac/ca/src/alloc.c b/cesar/mac/ca/src/alloc.c
index b7c40a39b1..d7347879bf 100644
--- a/cesar/mac/ca/src/alloc.c
+++ b/cesar/mac/ca/src/alloc.c
@@ -177,15 +177,16 @@ ca_alloc_update_beacon_periods (ca_t *ctx,
ca_beacon_period_t *bp = ctx->beacon_periods;
ca_schedule_t *sched = &ctx->schedules[bp->schedule_index];
uint alloc_i = ca_alloc_find (sched, now + MAC_AIFS_TCK
+#if CONFIG_MAC_COMMON_EOC_SCHED
+ - CA_ACCESS_AIFS_ANTICIP_TCK
+#endif
- bp->start_date);
ctx->current_beacon_period = bp;
ctx->current_allocation_index = alloc_i;
ca_alloc_prepare (ctx);
- arch_isr_unlock (flags);
/* Update schedule. */
ca_access_update (ctx);
}
- else
- arch_isr_unlock (flags);
+ arch_isr_unlock (flags);
}
diff --git a/cesar/mac/ca/src/ca.c b/cesar/mac/ca/src/ca.c
index 557e523532..0f5cd7143e 100644
--- a/cesar/mac/ca/src/ca.c
+++ b/cesar/mac/ca/src/ca.c
@@ -18,6 +18,10 @@
#include "hal/phy/phy.h"
+#include "lib/bitqueue.h"
+
+#include "config/mac/common.h"
+
#if DEBUG
static void
ca_fatal_dump (dbg_dump_callback_t dump_cb, void *dump_cb_user);
@@ -55,6 +59,15 @@ ca_init (phy_t *phy, mac_config_t *config, mac_store_t *store,
for (cap = 0; cap < MAC_CAP_NB; cap++)
list_init (&ctx->prio[cap]);
list_init (&ctx->held);
+#if CONFIG_MAC_COMMON_EOC_SCHED
+ uint i;
+ for (i = 0; i < COUNT (ctx->poll); i++)
+ ctx->poll[i] = 0;
+ bitqueue_init (ctx->poll_cache, COUNT (ctx->poll_cache));
+ ctx->poll_current = 0;
+ ctx->empty_poll_current = 0;
+ ctx->sta_active_nb = 0;
+#endif
CA_TRACE (INIT);
dbg_do (dbg_register_fatal_dump_callback (2, ca_fatal_dump));
return ctx;
@@ -71,12 +84,40 @@ ca_uninit (ca_t *ctx)
ca_trace_uninit (ctx);
}
+#if CONFIG_MAC_COMMON_EOC_SCHED
+
+/**
+ * Update poll table for an MFS.
+ * \param ctx ca context
+ * \param mfs the updated MFS
+ * \param active whether this MFS is active or not
+ */
+static inline void
+ca_poll_update (ca_t *ctx, mfs_tx_t *mfs, bool active)
+{
+ dbg_claim (ctx);
+ dbg_claim (mfs);
+ uint poll_index = mfs->common.bcast ? 0 : mfs->common.tei;
+ u8 poll_bit = CA_POLL_TX (mfs->common.mme, mfs->cap);
+ if (active)
+ ctx->poll[poll_index] |= poll_bit;
+ else
+ ctx->poll[poll_index] &= ~poll_bit;
+ bitqueue_update (ctx->poll_cache, poll_index, ctx->poll[poll_index]);
+}
+
+#endif /* CONFIG_MAC_COMMON_EOC_SCHED */
+
void
ca_mfs_add (ca_t *ctx, mfs_tx_t *mfs)
{
dbg_assert (ctx);
dbg_assert (mfs);
CA_TRACE (MFS_ADD, mfs);
+#if CONFIG_MAC_COMMON_EOC_SCHED
+ if (mfs->cfp && !mfs->beacon)
+ mfs->ca_state = CA_MFS_STATE_POLL_QUEUED;
+#endif
ca_mfs_update (ctx, mfs);
}
@@ -94,6 +135,11 @@ ca_mfs_remove (ca_t *ctx, mfs_tx_t *mfs)
case CA_MFS_STATE_PRIO_QUEUED:
list_remove (&ctx->prio[mfs->cap], &mfs->ca_link);
break;
+#if CONFIG_MAC_COMMON_EOC_SCHED
+ case CA_MFS_STATE_POLL_QUEUED:
+ ca_poll_update (ctx, mfs, false);
+ break;
+#endif
case CA_MFS_STATE_HELD:
list_remove (&ctx->held, &mfs->ca_link);
break;
@@ -107,16 +153,42 @@ ca_mfs_remove (ca_t *ctx, mfs_tx_t *mfs)
ca_access_update (ctx);
}
-void ARCH_ILRAM_PRIO (3)
-ca_mfs_update_common (ca_t *ctx, mfs_tx_t *mfs, bool locked)
+#if CONFIG_MAC_COMMON_EOC_SCHED
+
+/**
+ * EoC part of MFS update, called with ISR locked.
+ * \param ctx ca context
+ * \param mfs the updated MFS
+ * \param flags saved ISR flags
+ */
+static inline void
+ca_mfs_update_common_eoc_sched (ca_t *ctx, mfs_tx_t *mfs, uint flags)
+{
+ dbg_claim (ctx);
+ dbg_claim (mfs);
+ /* Update poll table. */
+ ca_poll_update (ctx, mfs, mfs->seg_nb);
+ /* Unlock. */
+ arch_isr_unlock (flags);
+}
+
+#endif /* CONFIG_MAC_COMMON_EOC_SCHED */
+
+/**
+ * Default part of MFS update, called with ISR locked.
+ * \param ctx ca context
+ * \param mfs the updated MFS
+ * \param locked whether ISR was locked
+ * \param flags saved ISR flags
+ */
+static void
+#if CONFIG_MAC_COMMON_EOC_SCHED
+__attribute__ ((noinline))
+#endif
+ca_mfs_update_common_default (ca_t *ctx, mfs_tx_t *mfs, bool locked,
+ uint flags)
{
ca_mfs_state_t new_state;
- dbg_assert (ctx);
- dbg_assert_ptr (mfs);
- dbg_assert (mfs->ca_state != CA_MFS_STATE_REMOVED);
- CA_TRACE (MFS_UPDATE, mfs);
- /* Lock. */
- uint flags = arch_isr_lock ();
/* Ignore held MFS. */
if (mfs->ca_state != CA_MFS_STATE_HELD)
{
@@ -158,6 +230,23 @@ ca_mfs_update_common (ca_t *ctx, mfs_tx_t *mfs, bool locked)
}
}
+void ARCH_ILRAM_PRIO (1)
+ca_mfs_update_common (ca_t *ctx, mfs_tx_t *mfs, bool locked)
+{
+ dbg_claim (ctx);
+ dbg_claim_ptr (mfs);
+ dbg_claim (mfs->ca_state != CA_MFS_STATE_REMOVED);
+ CA_TRACE (MFS_UPDATE, mfs);
+ /* Lock. */
+ uint flags = arch_isr_lock ();
+#if CONFIG_MAC_COMMON_EOC_SCHED
+ if (mfs->ca_state == CA_MFS_STATE_POLL_QUEUED)
+ ca_mfs_update_common_eoc_sched (ctx, mfs, flags);
+ else
+#endif
+ ca_mfs_update_common_default (ctx, mfs, locked, flags);
+}
+
void ARCH_ILRAM_PRIO (3)
ca_mfs_hold_common (ca_t *ctx, mfs_tx_t *mfs, bool locked)
{
@@ -189,6 +278,36 @@ ca_mfs_hold_common (ca_t *ctx, mfs_tx_t *mfs, bool locked)
}
}
+#if CONFIG_MAC_COMMON_EOC_SCHED
+
+void
+ca_sta_update (ca_t *ctx, sta_t *sta)
+{
+ dbg_assert (ctx);
+ dbg_assert (sta);
+ /* Lock. */
+ uint flags;
+ flags = arch_isr_lock ();
+ /* Update STA poll entry. */
+ uint tei = sta->tei;
+ if (sta->tdma_poll
+ && (sta->sppb || !sta->bp_before_poll))
+ ctx->poll[tei] |= CA_POLL_RX;
+ else
+ ctx->poll[tei] &= ~CA_POLL_RX;
+ bitqueue_update (ctx->poll_cache, tei, ctx->poll[tei]);
+ /* Unlock. */
+ arch_isr_unlock (flags);
+}
+
+int
+ca_sta_active_nb (ca_t *ctx)
+{
+ return ctx->sta_active_nb;
+}
+
+#endif /* CONFIG_MAC_COMMON_EOC_SCHED */
+
void
ca_mfs_next_beacon_period (ca_t *ctx)
{
@@ -201,6 +320,37 @@ ca_mfs_next_beacon_period (ca_t *ctx)
mfs->ca_state = CA_MFS_STATE_UNKNOWN;
ca_mfs_update_locked (ctx, mfs);
}
+#if CONFIG_MAC_COMMON_EOC_SCHED
+ /* Update poll table. */
+ uint tei;
+ sta_t *sta;
+ ctx->sta_active_nb = 0;
+ for (tei = MAC_TEI_STA_MIN_EOC;
+ tei < MAC_TEI_STA_MIN_EOC + MAC_TEI_STA_NB;
+ tei++)
+ {
+ if (!(ctx->poll[tei] & CA_POLL_RX))
+ {
+ sta = mac_store_sta_get_noref (ctx->store, tei);
+ if (sta)
+ {
+ if (sta->tdma_poll &&
+ (sta->sppb || !sta->bp_before_poll))
+ {
+ ctx->poll[tei] |= CA_POLL_RX;
+ bitqueue_set (ctx->poll_cache, tei);
+ }
+ else
+ /* Decrease counter. */
+ sta->bp_before_poll--;
+ }
+ }
+ else
+ {
+ ctx->sta_active_nb++;
+ }
+ }
+#endif
}
#if DEBUG
diff --git a/cesar/mac/ca/stub/src/ca.c b/cesar/mac/ca/stub/src/ca.c
index f88683c50c..eddbd4cf67 100644
--- a/cesar/mac/ca/stub/src/ca.c
+++ b/cesar/mac/ca/stub/src/ca.c
@@ -58,3 +58,9 @@ ca_mfs_hold_common (ca_t *ctx, mfs_tx_t *mfs,
void
ca_mfs_hold_common (ca_t *ctx, mfs_tx_t *mfs, bool locked) { }
+
+void
+ca_sta_update (ca_t *ctx, sta_t *sta) __attribute__ ((weak));
+
+void
+ca_sta_update (ca_t *ctx, sta_t *sta) { }
diff --git a/cesar/mac/ca/test/ca/src/phy_stub.c b/cesar/mac/ca/test/ca/src/phy_stub.c
index d5626afcaa..1e86eb3e0a 100644
--- a/cesar/mac/ca/test/ca/src/phy_stub.c
+++ b/cesar/mac/ca/test/ca/src/phy_stub.c
@@ -54,6 +54,7 @@ phy_access_backoff_update (phy_t *ctx, uint cap)
void
phy_access_timer_program (phy_t *ctx, u32 date)
{
+ dbg_assert (lesseq_mod2p32(ctx->date, date));
dbg_assert (ctx);
}
diff --git a/cesar/mac/ca/test/ca/src/test_access.c b/cesar/mac/ca/test/ca/src/test_access.c
index 5ab9e251e9..b2d77c437a 100644
--- a/cesar/mac/ca/test/ca/src/test_access.c
+++ b/cesar/mac/ca/test/ca/src/test_access.c
@@ -307,6 +307,8 @@ access_basic_test_case (test_t t)
|| mfs->seg_nb == 0
|| fl_tck > ca->access.param.duration_tck)
{
+ if (mfs && mfs->seg_nb == 0)
+ test_fail_unless (!mfs->common.mme);
ca_access_done (ca);
ca_access_defer (ca, phy->date);
access_check_defer (t, ca);
diff --git a/cesar/mac/ca/test/ca_eoc/Config b/cesar/mac/ca/test/ca_eoc/Config
new file mode 100644
index 0000000000..6911585ee3
--- /dev/null
+++ b/cesar/mac/ca/test/ca_eoc/Config
@@ -0,0 +1,7 @@
+CONFIG_DEBUG_FATAL_CATCH = y
+CONFIG_TRACE = y
+CONFIG_RESTRACK = y
+CONFIG_MAC_COMMON_EOC_SCHED = y
+CONFIG_MAC_PBPROC_EOC_FC = y
+CONFIG_MAC_COMMON_EOC_MFS = y
+CONFIG_MAC_COMMON_EOC_TEI = y
diff --git a/cesar/mac/ca/test/ca_eoc/Makefile b/cesar/mac/ca/test/ca_eoc/Makefile
new file mode 100644
index 0000000000..e246399098
--- /dev/null
+++ b/cesar/mac/ca/test/ca_eoc/Makefile
@@ -0,0 +1,8 @@
+BASE = ../../../..
+
+HOST_PROGRAMS = test_ca
+test_ca_SOURCES = test_ca.c ../../ca/src/test_backoff.c test_alloc.c test_access.c \
+ ../../ca/src/phy_stub.c
+test_ca_MODULES = lib mac/ca mac/common
+
+include $(BASE)/common/make/top.mk
diff --git a/cesar/mac/ca/test/ca_eoc/inc/phy_stub.h b/cesar/mac/ca/test/ca_eoc/inc/phy_stub.h
new file mode 100644
index 0000000000..b1a4746d35
--- /dev/null
+++ b/cesar/mac/ca/test/ca_eoc/inc/phy_stub.h
@@ -0,0 +1,23 @@
+#ifndef inc_phy_stub_h
+#define inc_phy_stub_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2007 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file inc/phy_stub.h
+ * \brief HAL Phy stub.
+ * \ingroup test
+ */
+
+/** Stub phy structure. */
+struct phy_t
+{
+ u32 date;
+};
+/* Forward declaration in hal/phy/forward.h. */
+
+#endif /* inc_phy_stub_h */
diff --git a/cesar/mac/ca/test/ca_eoc/src/test_access.c b/cesar/mac/ca/test/ca_eoc/src/test_access.c
new file mode 100644
index 0000000000..d7c8a59db2
--- /dev/null
+++ b/cesar/mac/ca/test/ca_eoc/src/test_access.c
@@ -0,0 +1,1002 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2007 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/test_access.c
+ * \brief Test access code.
+ * \ingroup test
+ */
+#include "common/std.h"
+
+#include "mac/ca/inc/context.h"
+#include "mac/ca/inc/alloc.h"
+#include "mac/common/timings.h"
+
+#include "hal/phy/phy.h"
+#include "inc/phy_stub.h"
+
+#include "lib/test.h"
+
+#include <string.h>
+#include <stdarg.h>
+
+#define NB_ITER 100000
+#define NB_PEER 5
+#define NB_GLID 20
+#define RANDOM_START 0
+
+#define PEER_MIN 10
+#define MAX_SYMB 3
+
+void
+access_random_schedule (lib_rnd_t *rnd, ca_schedule_t *sched, uint length_tck)
+{
+ uint i;
+ const uint nb = lib_rnd_uniform (rnd, 10/*CA_SCHEDULE_SIZE*/ - 3) + 3;
+ /* Coexistence mode and encryption. */
+ sched->coexistence_mode = MAC_COEXISTENCE_SHARED_CSMA_HYBRID_MODE;
+ sched->snid = 5;
+ sched->nek_switch = 0;
+ /* Random allocations. */
+ uint zoffset_tck = 0;
+ uint avr_alloc_tck = length_tck/nb;
+ uint low_alloc_tck = avr_alloc_tck - (avr_alloc_tck>>2); /* 3/4 */
+ uint dif_alloc_tck = (avr_alloc_tck>>2); /* 1/4 */
+ sched->allocations_nb = nb;
+ for (i = 0; i < nb - 1; i++)
+ {
+ sched->allocations[i].end_offset_tck =
+ lib_rnd_uniform (rnd, dif_alloc_tck)
+ + zoffset_tck + low_alloc_tck;
+ zoffset_tck = sched->allocations[i].end_offset_tck;
+ }
+ sched->allocations[nb - 1].end_offset_tck = length_tck;
+ /* Random GLID. */
+ static const struct
+ {
+ u8 glid_min;
+ u8 glid_max;
+ uint prob;
+ } glid_prob[] = {
+ { MAC_LID_SPC_HOLE, MAC_LID_SPC_HOLE, 8 },
+ { MAC_GLID_MIN, MAC_GLID_MAX, 8 + 8 },
+ { MAC_LID_CFPI, MAC_LID_CFPI, 8 + 8 + 1 },
+ { MAC_LID_SHARED_CSMA, MAC_LID_SHARED_CSMA, 8 + 8 + 1 + 2 + 8 },
+ { MAC_LID_LOCAL_CSMA, MAC_LID_LOCAL_CSMA, 8 + 8 + 1 + 2 + 8 + 8 },
+ };
+ sched->allocations[0].glid = MAC_LID_SPC_CENTRAL;
+ for (i = 1; i < nb; i++)
+ {
+ uint r = lib_rnd_uniform (rnd, glid_prob[COUNT (glid_prob) - 1].prob);
+ uint j;
+ DICHOTOMY_SEARCH (0, COUNT (glid_prob), j, r < glid_prob[j].prob);
+ dbg_assert (j < COUNT (glid_prob));
+ sched->allocations[i].glid = glid_prob[j].glid_min
+ + lib_rnd_uniform (rnd, glid_prob[j].glid_max
+ - glid_prob[j].glid_min + 1);
+ }
+}
+
+/**
+ * Get allocation end date without AIFS.
+ * \param ca CA context
+ * \param date date in allocation
+ * \return allocation end date
+ */
+static uint
+access_allocation_end_date (ca_t *ca, uint date)
+{
+ dbg_assert (ca);
+ ca_beacon_period_t *bp = ca_alloc_find_beacon_period (ca, date);
+ dbg_assert (bp);
+ ca_schedule_t *sched = &ca->schedules[bp->schedule_index];
+ uint alloc_i = ca_alloc_find (sched, date - bp->start_date);
+ dbg_assert (alloc_i < sched->allocations_nb);
+ ca_allocation_t *alloc = &sched->allocations[alloc_i];
+ return bp->start_date + alloc->end_offset_tck;
+}
+
+/**
+ * Compute AIFS at given date.
+ * \param ca CA context
+ * \param date current date
+ * \return AIFS in tck
+ */
+static uint
+access_aifs_tck (ca_t *ca, uint date)
+{
+ dbg_assert (ca);
+ ca_beacon_period_t *bp = ca_alloc_find_beacon_period (ca, date);
+ dbg_assert (bp);
+ ca_schedule_t *sched = &ca->schedules[bp->schedule_index];
+ uint alloc_i = ca_alloc_find (sched, date - bp->start_date);
+ dbg_assert (alloc_i < sched->allocations_nb);
+ ca_allocation_t *alloc = &sched->allocations[alloc_i];
+ uint aifs_tck = MAC_LID_IS_BEACON (alloc->glid)
+ ? MAC_B2BIFS_TCK : MAC_AIFS_TCK;
+ if (alloc_i == sched->allocations_nb - 1
+ && MAC_LID_IS_BEACON (ca->schedules[bp[1].schedule_index]
+ .allocations[0].glid)
+ && MAC_B2BIFS_TCK > MAC_AIFS_TCK)
+ aifs_tck = MAC_B2BIFS_TCK;
+ return aifs_tck;
+}
+
+void
+access_check_vcs_restart (test_t t, ca_t *ca, u32 date, uint duration_tck,
+ bool eifs, const ca_alloc_param_t *ap)
+{
+ test_within (t);
+ dbg_assert (ca);
+ ca_beacon_period_t *bp = ca_alloc_find_beacon_period (ca, date);
+ dbg_assert (bp);
+ ca_schedule_t *sched = &ca->schedules[bp->schedule_index];
+ dbg_assert (sched->coexistence_mode < MAC_COEXISTENCE_NB);
+ dbg_assert (sched->snid < 16);
+ dbg_assert (sched->nek_switch < 2);
+ dbg_assert (sched->allocations_nb);
+ uint alloc_i = ca_alloc_find (sched, date - bp->start_date);
+ dbg_assert (alloc_i < sched->allocations_nb);
+ ca_allocation_t *alloc = &sched->allocations[alloc_i];
+ ca_access_param_t *a = &ca->access.param;
+ uint aifs_tck = access_aifs_tck (ca, date);
+ uint alloc_end_date = bp->start_date + alloc->end_offset_tck - aifs_tck;
+ if (ap)
+ {
+ /* Check current allocation parameters. */
+ test_fail_unless (ap->coexistence_mode == sched->coexistence_mode);
+ test_fail_unless (ap->snid == sched->snid);
+ test_fail_unless (ap->nek_switch == sched->nek_switch);
+ test_fail_unless (ap->end_date == alloc_end_date);
+ }
+ if (!ca->access.unusable)
+ {
+ /* Usable, the access should be prepared. */
+ test_fail_unless (lesseq_mod2p32 (date, a->access_date));
+ uint slot = CA_ALLOC_IS_CSMA (alloc->glid)
+ ? (eifs ? 0 : 2) + ca->backoff.bc
+ : 0;
+ bool prp = CA_ALLOC_IS_CSMA (alloc->glid) && !eifs;
+ test_fail_unless (a->access_date == date + duration_tck
+ + slot * MAC_SLOT_TCK
+ /* TODO: remove this: */
+ + (alloc->glid == MAC_LID_CFPI
+ ? MAC_US_TO_TCK (40) : 0));
+ test_fail_unless (a->cw_start_date == date + duration_tck
+ + (prp ? 2 * MAC_SLOT_TCK : 0));
+ test_fail_unless (a->aifs
+ || (a->duration_tck == alloc_end_date
+ - a->access_date));
+ test_fail_unless (a->prp == prp);
+ test_fail_unless (a->cfp == !CA_ALLOC_IS_CSMA (alloc->glid));
+ }
+ if (!a->aifs)
+ {
+ /* ACCESS scheduled. */
+ test_fail_unless (lesseq_mod2p32 (a->access_date, alloc_end_date));
+ test_fail_unless (ca->access.timer_date == a->access_date
+ - ca->anticipation_tck);
+ }
+ else
+ {
+ /* AIFS scheduled. */
+ test_fail_unless (ca->access.timer_date == alloc_end_date);
+ }
+}
+
+void
+access_check_vcs_restart_eifs (test_t t, ca_t *ca, u32 date,
+ const ca_alloc_param_t *ap)
+{
+ const ca_alloc_param_t *cap = &ca->current_allocation_param;
+ uint eifs_tck = ((cap->coexistence_mode
+ == MAC_COEXISTENCE_HYBRID_DELIMITERS_MODE)
+ || !cap->hybrid) ? MAC_EIFS_AV_TCK : MAC_EIFS_10_TCK;
+ access_check_vcs_restart (t, ca, date, eifs_tck, true, ap);
+}
+
+void
+access_check_defer (test_t t, ca_t *ca)
+{
+ test_within (t);
+ dbg_assert (ca);
+ test_fail_unless (ca->access.param.aifs);
+ test_fail_unless (ca->access.timer_date !=
+ ca->current_allocation_param.end_date
+ - access_aifs_tck (ca, ca->access.timer_date));
+}
+
+void
+access_check_aifs (test_t t, ca_t *ca, u32 date,
+ const ca_alloc_param_t *ap)
+{
+ dbg_assert_ptr (ap);
+ access_check_vcs_restart (t, ca, access_allocation_end_date (ca, date), 0,
+ false, ap);
+}
+
+void
+access_basic_test_case (test_t t)
+{
+ uint i, j;
+ lib_rnd_t rnd[1];
+ phy_t *phy;
+ mac_config_t config;
+ mac_store_t *store;
+ ca_t *ca;
+ test_case_begin (t, "basic");
+ /* Initialise. */
+ lib_rnd_init (rnd, 1234);
+ phy = phy_init (NULL, NULL, NULL, NULL, NULL, NULL, NULL);
+#if RANDOM_START
+ phy->date = lib_rnd32 (rnd);
+#else
+ phy->date = MAC_MS_TO_TCK (500 / 50);
+#endif
+ mac_config_init (&config);
+ config.tei = 1;
+ store = mac_store_init ();
+ ca = ca_init (phy, &config, store, 0);
+ /* Characteristics for null slots are determined as-is:
+ * - for index < NB_GLID: i = index
+ * - lid = i != 0 ? i + MAC_GLID_MIN : MAC_LID_SPC_CENTRAL
+ * - cap = i % 4
+ * - tei = i % NB_PEER + PEER_MIN
+ * - bcast = false
+ * - cfp = true
+ * - for index >= NB_GLID: i = index - NB_GLID
+ * - lid = i % MAC_PLID_NB + MAC_PLID_MIN
+ * - cap = lid - MAC_PLID_MIN
+ * - tei = i >= MAC_PLID_NB * NB_PEER
+ * ? MAC_TEI_BCAST
+ * : i / MAC_PLID_NB + PEER_MIN
+ * - bcast = i >= MAC_PLID_NB * NB_PEER
+ * - cfp = false
+ */
+ mfs_tx_t *mfses[NB_GLID + MAC_PLID_NB * NB_PEER + 1];
+ uint mfses_used = 0;
+ memset (mfses, 0, sizeof (mfses));
+ /* Now the big test.
+ * Create random schedules and random MFS for the STA with TEI = [2,3]. */
+ test_begin (t, "random test")
+ {
+ const int beacon_period_length_tck = MAC_MS_TO_TCK (1000 / 10);
+ ca_beacon_period_t bps[2];
+ /* Initialise first beacon period. */
+ access_random_schedule (rnd, ca_alloc_get_schedule (ca, 3),
+ beacon_period_length_tck);
+ bps[1].start_date = phy->date - beacon_period_length_tck / 2;
+ bps[1].schedule_index = 3;
+ for (i = 0; i < NB_ITER; i++)
+ {
+ /* Make new schedule. */
+ access_random_schedule (rnd, ca_alloc_get_schedule (ca, i % 4),
+ beacon_period_length_tck);
+ /* Make new beacon period. */
+ bps[0] = bps[1];
+ bps[1].start_date = bps[0].start_date + beacon_period_length_tck;
+ bps[1].schedule_index = i % 4;
+ /* Update beacon period. */
+ phy->date += CA_ACCESS_AIFS_ANTICIP_TCK;
+ ca_alloc_update_beacon_periods (ca, bps, COUNT (bps));
+ phy->date -= CA_ACCESS_AIFS_ANTICIP_TCK;
+ /* First schedule. */
+ if (i == 0)
+ {
+ const ca_alloc_param_t *ap =
+ ca_access_activate (ca, phy->date);
+ access_check_vcs_restart_eifs (t, ca, phy->date, ap);
+ }
+ while (less_mod2p32 (phy->date, bps[1].start_date))
+ {
+ if (phy->date == ca->access.timer_date
+ || lib_rnd_flip_coin (rnd, LIB_RND_RATIO (0.5)))
+ {
+ /* Next ACCESS. */
+ phy->date = ca->access.timer_date;
+ if (!ca->access.param.aifs)
+ {
+ mfs_tx_t *mfs = ca_access_get_mfs (ca);
+ int seg_sent;
+ uint fl_tck;
+ if (mfs)
+ {
+ /* Timings are completely approximated. */
+ seg_sent = mfs->seg_nb
+ ? lib_rnd_uniform (rnd, mfs->seg_nb) + 1 : 0;
+ fl_tck = MAC_PREAMBLE_TCK + MAC_FC_AV_TCK
+ + MAC_DX567_TCK * seg_sent;
+ }
+ if (!mfs
+ || mfs->seg_nb == 0
+ || fl_tck > ca->access.param.duration_tck)
+ {
+ if (mfs && mfs->seg_nb == 0
+ && ca->access.param.cfp)
+ {
+ test_fail_unless (!mfs->common.mme);
+ uint lid = mfs->common.lid;
+ test_fail_unless (lid >= MAC_LLID_MIN
+ && lid <= MAC_LLID_MAX);
+ /* Check this is the smallest LLID. */
+ while (lid-- > MAC_LLID_MIN)
+ test_fail_if (
+ mac_store_mfs_get_sta_tx_data_locked (
+ store, lid, mfs->common.tei));
+ }
+ ca_access_done (ca);
+ ca_access_defer (ca, phy->date);
+ access_check_defer (t, ca);
+ }
+ else
+ {
+ ca_access_vcs_restart_eifs (ca, phy->date);
+ access_check_vcs_restart_eifs (t, ca, phy->date,
+ NULL);
+ if (seg_sent)
+ {
+ mfs->seg_nb -= seg_sent;
+ ca_access_done (ca);
+ ca_access_vcs_restart (ca,
+ phy->date + fl_tck);
+ access_check_vcs_restart (t, ca, phy->date,
+ fl_tck, false,
+ NULL);
+ }
+ else
+ ca_access_done (ca);
+ }
+ }
+ else
+ {
+ const ca_alloc_param_t *ap = ca_access_aifs (ca);
+ access_check_aifs (t, ca, phy->date, ap);
+ }
+ }
+ else
+ {
+ /* Random event. */
+ dbg_assert (less_mod2p32 (phy->date,
+ ca->access.timer_date));
+ u32 next_date = phy->date + lib_rnd_uniform (
+ rnd, ca->access.timer_date - phy->date);
+ /* TODO: For the moment, avoid bad cases where date is in
+ * AIFS. */
+ u32 danger_date = bps[1].start_date + MAC_US_TO_TCK (100);
+ if (!less_mod2p32 (next_date, danger_date))
+ next_date = danger_date;
+ phy->date = next_date;
+ if (mfses_used == 0
+ || lib_rnd_flip_coin (rnd, LIB_RND_RATIO (0.2)))
+ {
+ j = lib_rnd_uniform (rnd, COUNT (mfses));
+ if (!mfses[j])
+ {
+ /* Create a new MFS. */
+ uint lid, cap, tei;
+ bool bcast, cfp;
+ if (j < NB_GLID)
+ {
+ lid = j != 0 ? j + MAC_GLID_MIN
+ : MAC_LID_SPC_CENTRAL;
+ cap = j % 4;
+ tei = j % NB_PEER + PEER_MIN;
+ bcast = false;
+ cfp = true;
+ }
+ else
+ {
+ uint sj = j - NB_GLID;
+ bcast = sj >= MAC_PLID_NB * NB_PEER;
+ cap = bcast ? 0: sj % MAC_PLID_NB;
+ lid = cap +
+ (bcast ? MAC_PLID_MIN : MAC_LLID_MIN);
+ tei = bcast ? MAC_TEI_BCAST
+ : sj / MAC_PLID_NB + PEER_MIN;
+ cfp = true;
+ }
+ bool added;
+ mfs_tx_t *mfs = mac_store_mfs_add_tx
+ (store, bcast, false, lid, tei, &added);
+ mfs->cfp = cfp;
+ dbg_assert (added);
+ mfs->seg_nb = lib_rnd_uniform (rnd, 100);
+ mfses[j] = mfs;
+ mfses_used++;
+ ca_mfs_add (ca, mfs);
+ }
+ else
+ {
+ /* Remove an MFS. */
+ mfs_tx_t *mfs = mfses[j];
+ ca_mfs_remove (ca, mfs);
+ mfs->seg_nb = 0;
+ mac_store_mfs_remove (store,
+ PARENT_OF (mfs_t, tx, mfs));
+ blk_release (mfs);
+ mfses[j] = NULL;
+ mfses_used--;
+ }
+ }
+ else
+ {
+ /* Modify an MFS. */
+ do {
+ j = lib_rnd_uniform (rnd, COUNT (mfses));
+ } while (!mfses[j]);
+ mfs_tx_t *mfs = mfses[j];
+ if (mfs->ca_state != CA_MFS_STATE_HELD)
+ {
+ mfs->seg_nb = lib_rnd_uniform (rnd, 100);
+ ca_mfs_update (ca, mfs);
+ }
+ }
+ }
+ }
+ }
+ ca_access_deactivate (ca);
+ } test_end;
+ /* Uninitialise. */
+ for (i = 0; i < COUNT (mfses); i++)
+ {
+ mfs_tx_t *mfs = mfses[i];
+ if (mfs)
+ {
+ ca_mfs_remove (ca, mfs);
+ mac_store_mfs_remove (store, PARENT_OF (mfs_t, tx, mfs));
+ blk_release (mfs);
+ }
+ }
+ for (i = 0; i < NB_PEER; i++)
+ {
+ bool ok = mac_store_sta_remove (store, PEER_MIN + i);
+ dbg_assert (ok);
+ }
+ ca_uninit (ca);
+ phy_uninit (phy);
+ mac_store_uninit (store);
+}
+
+/**
+ * Test TDMA poll.
+ * \param t test context
+ * \param sta_mask mask of present stations
+ * \param rx_mask mask of activated stations
+ * \param tx_mask mask of MFS with content
+ * \param ... list of polled STA TEI (uint), stop with 0
+ */
+void
+access_tdma_poll_test (test_t t, u64 sta_mask, u64 rx_mask, u64 tx_mask, ...)
+{
+ test_within (t);
+ int i;
+ phy_t *phy;
+ mac_config_t config;
+ mac_store_t *store;
+ ca_t *ca;
+ /* Initialise contexts. */
+ phy = phy_init (NULL, NULL, NULL, NULL, NULL, NULL, NULL);
+ phy->date = 0;
+ mac_config_init (&config);
+ config.tei = 1;
+ store = mac_store_init ();
+ ca = ca_init (phy, &config, store, 0);
+ /* Prepare schedule. */
+ ca_schedule_t *sched = ca_alloc_get_schedule (ca, 0);
+ sched->coexistence_mode = MAC_COEXISTENCE_AV_ONLY_MODE;
+ sched->snid = 5;
+ sched->nek_switch = 0;
+ sched->allocations_nb = 1;
+ sched->allocations[0].end_offset_tck = 1000000;
+ sched->allocations[0].glid = MAC_LID_CFPI;
+ /* Prepare beacon period. */
+ ca_beacon_period_t bps[1] = { { .start_date = 0, .schedule_index = 0 } };
+ ca_alloc_update_beacon_periods (ca, bps, COUNT (bps));
+ /* Prepare STA. */
+ bool added;
+ u64 bit;
+ for (i = 0, bit = 1; i < 64; i++, bit <<= 1)
+ {
+ bool bcast = i == 0;
+ uint tei = bcast ? MAC_TEI_BCAST : i;
+ uint lid = bcast ? MAC_PLID_MIN : MAC_LLID_MIN;
+ if (sta_mask & bit)
+ {
+ mfs_tx_t *mfs = mac_store_mfs_add_tx (
+ store, bcast, false, lid, tei, &added);
+ dbg_assert (added);
+ if (tx_mask & bit)
+ mfs->seg_nb = 1;
+ ca_mfs_add (ca, mfs);
+ blk_release (mfs);
+ if (rx_mask & bit)
+ {
+ sta_t *sta = mac_store_sta_get (store, i);
+ sta->sppb = 1;
+ ca_sta_update (ca, sta);
+ blk_release (sta);
+ }
+ }
+ }
+ /* Compute schedule and check result. */
+ ca_access_activate (ca, 0);
+ ca_access_reprogram (ca, 0, 25000, MAC_TEI_UNASSOCIATED);
+ va_list ap;
+ uint expected_tei;
+ va_start (ap, tx_mask);
+ for (i = 0; (expected_tei = va_arg (ap, uint)); i++)
+ {
+ mfs_tx_t *the_mfs;
+ the_mfs = ca_access_get_mfs (ca);
+ test_fail_unless (
+ the_mfs->common.tei == expected_tei,
+ "unexpected tei at iteration %d: got %d, expected %d", i,
+ the_mfs->common.tei, expected_tei);
+ ca_access_done (ca);
+ }
+ va_end (ap);
+ /* Remove MFS and STA. */
+ for (i = 0, bit = 1; i < 64; i++, bit <<= 1)
+ {
+ bool bcast = i == 0;
+ uint tei = bcast ? MAC_TEI_BCAST : i;
+ uint lid = bcast ? MAC_PLID_MIN : MAC_LLID_MIN;
+ if (sta_mask & bit)
+ {
+ mfs_t *mfs = mac_store_mfs_get (
+ store, true, bcast, false, lid, tei);
+ mac_store_mfs_remove (store, mfs);
+ if (!bcast)
+ dbg_check (mac_store_sta_remove (store, tei));
+ blk_release (mfs);
+ }
+ }
+ /* Cleanup. */
+ ca_access_deactivate (ca);
+ ca_uninit (ca);
+ phy_uninit (phy);
+ mac_store_uninit (store);
+ dbg_assert (blk_check_memory ());
+}
+
+void
+access_tdma_poll_test_case (test_t t)
+{
+ test_case_begin (t, "tdma poll");
+ test_begin (t, "no sta")
+ {
+ access_tdma_poll_test (t, 1, 0, 0, MAC_TEI_BCAST, 0);
+ } test_end;
+ test_begin (t, "no data")
+ {
+ access_tdma_poll_test (t, 0x330ull, 0x300ull, 0ull,
+ 8, 9, /* RX poll */
+ 4, 5, 8, 9, /* Empty poll. */
+ 4, 5, /* Empty poll... */
+ 0);
+ } test_end;
+ test_begin (t, "data")
+ {
+ access_tdma_poll_test (t, 0x331ull, 0x000ull, 0x31ull,
+ 4, 5, MAC_TEI_BCAST, /* TX poll. */
+ 4, 5, MAC_TEI_BCAST, /* Again... */
+ 0);
+ } test_end;
+ test_begin (t, "data rx tx")
+ {
+ access_tdma_poll_test (t, 0x11111ull, 0x01010ull, 0x10101ull,
+ 4, 8, 12, 16, MAC_TEI_BCAST, /* RX & TX poll. */
+ 8, 16, MAC_TEI_BCAST, /* TX poll only. */
+ 0);
+ } test_end;
+}
+
+/** TDMA test result, which MFS should be selected. */
+enum access_tdma_polled_test_result_t
+{
+ ACCESS_TDMA_TEST_BCAST_MME,
+ ACCESS_TDMA_TEST_BCAST_DATA,
+ ACCESS_TDMA_TEST_MME,
+ ACCESS_TDMA_TEST_DATA0,
+ ACCESS_TDMA_TEST_DATA1,
+ ACCESS_TDMA_TEST_DATA2,
+ ACCESS_TDMA_TEST_DATA3,
+ ACCESS_TDMA_TEST_NULL,
+};
+
+/** TDMA test MFS configuration. */
+struct access_tdma_polled_test_mfs_t
+{
+ /** MFS exists. */
+ bool present;
+ /** Number of segments. */
+ int seg_nb;
+};
+
+/** TDMA test configuration. */
+struct access_tdma_polled_test_t
+{
+ /** Result of the test. */
+ enum access_tdma_polled_test_result_t result;
+ /** Schedule TEI. */
+ uint tei;
+ /** Repeat scheduling to test deficit. */
+ uint repeat;
+ /** MFS test configuration. */
+ struct access_tdma_polled_test_mfs_t mfs[ACCESS_TDMA_TEST_NULL];
+};
+
+void
+access_tdma_polled_test (test_t t,
+ const struct access_tdma_polled_test_t *conf)
+{
+ test_within (t);
+ int i;
+ const uint sta_tei = 5;
+ phy_t *phy;
+ mac_config_t config;
+ mac_store_t *store;
+ ca_t *ca;
+ mfs_tx_t *mfs[ACCESS_TDMA_TEST_NULL];
+ /* Check configuration. */
+ dbg_assert (conf->tei == MAC_TEI_BCAST || conf->tei == sta_tei);
+ /* Initialise contexts. */
+ phy = phy_init (NULL, NULL, NULL, NULL, NULL, NULL, NULL);
+ phy->date = 0;
+ mac_config_init (&config);
+ config.tei = 1;
+ store = mac_store_init ();
+ ca = ca_init (phy, &config, store, 0);
+ /* Prepare schedule. */
+ ca_schedule_t *sched = ca_alloc_get_schedule (ca, 0);
+ sched->coexistence_mode = MAC_COEXISTENCE_AV_ONLY_MODE;
+ sched->snid = 5;
+ sched->nek_switch = 0;
+ sched->allocations_nb = 1;
+ sched->allocations[0].end_offset_tck = 1000000;
+ sched->allocations[0].glid = MAC_LID_CFPI;
+ /* Prepare beacon period. */
+ ca_beacon_period_t bps[1] = { { .start_date = 0, .schedule_index = 0 } };
+ ca_alloc_update_beacon_periods (ca, bps, COUNT (bps));
+ /* Prepare MFS. */
+ struct {
+ bool bcast;
+ bool mme;
+ uint lid;
+ uint tei;
+ } mfs_param[ACCESS_TDMA_TEST_NULL] = {
+ { true, true, MAC_LID_NONE, MAC_TEI_BCAST },
+ { true, false, MAC_PLID_MIN, MAC_TEI_BCAST },
+ { false, true, MAC_LID_NONE, sta_tei },
+ { false, false, MAC_LLID_MIN + 0, sta_tei },
+ { false, false, MAC_LLID_MIN + 1, sta_tei },
+ { false, false, MAC_LLID_MIN + 2, sta_tei },
+ { false, false, MAC_LLID_MIN + 3, sta_tei },
+ };
+ bool sta_added = false;
+ bool added;
+ for (i = 0; i < ACCESS_TDMA_TEST_NULL; i++)
+ {
+ if (conf->mfs[i].present)
+ {
+ mfs[i] = mac_store_mfs_add_tx (
+ store, mfs_param[i].bcast, mfs_param[i].mme, mfs_param[i].lid,
+ mfs_param[i].tei, &added);
+ if (mfs_param[i].tei != MAC_TEI_BCAST)
+ sta_added = true;
+ dbg_assert (added);
+ mfs[i]->seg_nb = conf->mfs[i].seg_nb;
+ ca_mfs_add (ca, mfs[i]);
+ }
+ else
+ mfs[i] = 0;
+ }
+ /* Compute schedule and check result. */
+ ca_access_activate (ca, 0);
+ ca_access_reprogram (ca, 0, 25000, conf->tei);
+ int repeat = conf->repeat;
+ mfs_tx_t *the_mfs;
+ the_mfs = ca_access_get_mfs (ca);
+ while (repeat--)
+ {
+ ca_access_done (ca);
+ the_mfs = ca_access_get_mfs (ca);
+ }
+ if (the_mfs)
+ {
+ test_fail_unless (conf->result != ACCESS_TDMA_TEST_NULL);
+ test_fail_unless (the_mfs == mfs[conf->result]);
+ }
+ else
+ test_fail_unless (conf->result == ACCESS_TDMA_TEST_NULL);
+ ca_access_done (ca);
+ /* Remove MFS. */
+ for (i = 0; i < ACCESS_TDMA_TEST_NULL; i++)
+ {
+ if (mfs[i])
+ {
+ ca_mfs_remove (ca, mfs[i]);
+ mac_store_mfs_remove (store, PARENT_OF (mfs_t, tx, mfs[i]));
+ blk_release (mfs[i]);
+ }
+ }
+ if (sta_added)
+ {
+ bool ok = mac_store_sta_remove (store, sta_tei);
+ dbg_assert (ok);
+ }
+ /* Cleanup. */
+ ca_access_deactivate (ca);
+ ca_uninit (ca);
+ phy_uninit (phy);
+ mac_store_uninit (store);
+ dbg_assert (blk_check_memory ());
+}
+
+void
+access_tdma_polled_test_case (test_t t)
+{
+ test_case_begin (t, "tdma polled");
+ test_begin (t, "bcast null")
+ {
+ access_tdma_polled_test (t, &(struct access_tdma_polled_test_t) {
+ .result = ACCESS_TDMA_TEST_NULL,
+ .tei = MAC_TEI_BCAST,
+ .mfs = {
+ { .present = false },
+ { .present = false },
+ { .present = false },
+ { .present = false },
+ },
+ });
+ } test_end;
+ test_begin (t, "bcast no seg")
+ {
+ access_tdma_polled_test (t, &(struct access_tdma_polled_test_t) {
+ .result = ACCESS_TDMA_TEST_BCAST_DATA,
+ .tei = MAC_TEI_BCAST,
+ .mfs = {
+ { .present = true },
+ { .present = true },
+ { .present = false },
+ { .present = false },
+ },
+ });
+ } test_end;
+ test_begin (t, "bcast mme")
+ {
+ access_tdma_polled_test (t, &(struct access_tdma_polled_test_t) {
+ .result = ACCESS_TDMA_TEST_BCAST_MME,
+ .tei = MAC_TEI_BCAST,
+ .mfs = {
+ { .present = true, .seg_nb = 1 },
+ { .present = true, .seg_nb = 0 },
+ { .present = false },
+ { .present = false },
+ },
+ });
+ access_tdma_polled_test (t, &(struct access_tdma_polled_test_t) {
+ .result = ACCESS_TDMA_TEST_BCAST_MME,
+ .tei = MAC_TEI_BCAST,
+ .mfs = {
+ { .present = true, .seg_nb = 1 },
+ { .present = true, .seg_nb = 1 },
+ { .present = false },
+ { .present = false },
+ },
+ });
+ access_tdma_polled_test (t, &(struct access_tdma_polled_test_t) {
+ .result = ACCESS_TDMA_TEST_BCAST_MME,
+ .tei = 5,
+ .mfs = {
+ { .present = true, .seg_nb = 1 },
+ { .present = false, .seg_nb = 1 },
+ { .present = true, .seg_nb = 1 },
+ { .present = true, .seg_nb = 1 },
+ },
+ });
+ } test_end;
+ test_begin (t, "bcast data")
+ {
+ access_tdma_polled_test (t, &(struct access_tdma_polled_test_t) {
+ .result = ACCESS_TDMA_TEST_BCAST_DATA,
+ .tei = MAC_TEI_BCAST,
+ .mfs = {
+ { .present = true, .seg_nb = 0 },
+ { .present = true, .seg_nb = 1 },
+ { .present = false },
+ { .present = false },
+ },
+ });
+ } test_end;
+ test_begin (t, "null")
+ {
+ access_tdma_polled_test (t, &(struct access_tdma_polled_test_t) {
+ .result = ACCESS_TDMA_TEST_NULL,
+ .tei = 5,
+ .mfs = {
+ { .present = false },
+ { .present = false },
+ { .present = false },
+ { .present = false },
+ },
+ });
+ } test_end;
+ test_begin (t, "no seg")
+ {
+ access_tdma_polled_test (t, &(struct access_tdma_polled_test_t) {
+ .result = ACCESS_TDMA_TEST_BCAST_MME,
+ .tei = 5,
+ .mfs = {
+ { .present = true, .seg_nb = 1 },
+ { .present = false },
+ { .present = true },
+ { .present = true },
+ },
+ });
+ access_tdma_polled_test (t, &(struct access_tdma_polled_test_t) {
+ .result = ACCESS_TDMA_TEST_DATA0,
+ .tei = 5,
+ .mfs = {
+ { .present = true },
+ { .present = false },
+ { .present = true },
+ { .present = true },
+ },
+ });
+ } test_end;
+ test_begin (t, "mme")
+ {
+ access_tdma_polled_test (t, &(struct access_tdma_polled_test_t) {
+ .result = ACCESS_TDMA_TEST_MME,
+ .tei = 5,
+ .mfs = {
+ { .present = true },
+ { .present = false },
+ { .present = true, .seg_nb = 1 },
+ { .present = true },
+ },
+ });
+ access_tdma_polled_test (t, &(struct access_tdma_polled_test_t) {
+ .result = ACCESS_TDMA_TEST_MME,
+ .tei = 5,
+ .mfs = {
+ { .present = true },
+ { .present = false },
+ { .present = true, .seg_nb = 1 },
+ { .present = true, .seg_nb = 1 },
+ },
+ });
+ } test_end;
+ test_begin (t, "data")
+ {
+ access_tdma_polled_test (t, &(struct access_tdma_polled_test_t) {
+ .result = ACCESS_TDMA_TEST_DATA0,
+ .tei = 5,
+ .mfs = {
+ { .present = true },
+ { .present = false },
+ { .present = true },
+ { .present = true, .seg_nb = 1 },
+ },
+ });
+ } test_end;
+ test_begin (t, "data hi prio")
+ {
+ access_tdma_polled_test (t, &(struct access_tdma_polled_test_t) {
+ .result = ACCESS_TDMA_TEST_DATA2, .tei = 5,
+ .mfs = {
+ { .present = true },
+ { .present = false },
+ { .present = true },
+ { .present = true, .seg_nb = 1 },
+ { .present = true },
+ { .present = true, .seg_nb = 1 },
+ { .present = true },
+ },
+ });
+ } test_end;
+ test_begin (t, "data low prio")
+ {
+ access_tdma_polled_test (t, &(struct access_tdma_polled_test_t) {
+ .result = ACCESS_TDMA_TEST_DATA0,
+ .tei = 5,
+ .mfs = {
+ { .present = true },
+ { .present = false },
+ { .present = true },
+ { .present = true, .seg_nb = 1 },
+ { .present = true },
+ { .present = true },
+ { .present = true },
+ },
+ });
+ } test_end;
+ test_begin (t, "data hi defer")
+ {
+ access_tdma_polled_test (t, &(struct access_tdma_polled_test_t) {
+ .result = ACCESS_TDMA_TEST_DATA0,
+ .tei = 5,
+ .mfs = {
+ { .present = true },
+ { .present = false },
+ { .present = true },
+ { .present = true, .seg_nb = 2 },
+ { .present = true },
+ { .present = true, .seg_nb = 1 },
+ { .present = true },
+ },
+ });
+ access_tdma_polled_test (t, &(struct access_tdma_polled_test_t) {
+ .result = ACCESS_TDMA_TEST_DATA1,
+ .tei = 5,
+ .mfs = {
+ { .present = true },
+ { .present = false },
+ { .present = true },
+ { .present = true, .seg_nb = 2 },
+ { .present = true, .seg_nb = 100 },
+ { .present = true, .seg_nb = 1 },
+ { .present = true },
+ },
+ });
+ } test_end;
+ test_begin (t, "data dwrr")
+ {
+ access_tdma_polled_test (t, &(struct access_tdma_polled_test_t) {
+ .result = ACCESS_TDMA_TEST_DATA0,
+ .tei = 5,
+ .mfs = {
+ { .present = true },
+ { .present = false },
+ { .present = true },
+ { .present = true, .seg_nb = 100 },
+ { .present = true },
+ { .present = true, .seg_nb = 10 },
+ { .present = true },
+ },
+ });
+ access_tdma_polled_test (t, &(struct access_tdma_polled_test_t) {
+ .result = ACCESS_TDMA_TEST_DATA0,
+ .tei = 5,
+ .mfs = {
+ { .present = true },
+ { .present = false },
+ { .present = true },
+ { .present = true, .seg_nb = 100 },
+ { .present = true },
+ { .present = true, .seg_nb = 10 },
+ { .present = true },
+ },
+ .repeat = 2,
+ });
+ access_tdma_polled_test (t, &(struct access_tdma_polled_test_t) {
+ .result = ACCESS_TDMA_TEST_DATA2,
+ .tei = 5,
+ .mfs = {
+ { .present = true },
+ { .present = false },
+ { .present = true },
+ { .present = true, .seg_nb = 100 },
+ { .present = true },
+ { .present = true, .seg_nb = 10 },
+ { .present = true },
+ },
+ .repeat = 5,
+ });
+ } test_end;
+}
+
+void
+access_test_suite (test_t t)
+{
+ test_suite_begin (t, "access");
+ access_basic_test_case (t);
+ access_tdma_poll_test_case (t);
+ access_tdma_polled_test_case (t);
+}
+
diff --git a/cesar/mac/ca/test/ca_eoc/src/test_alloc.c b/cesar/mac/ca/test/ca_eoc/src/test_alloc.c
new file mode 100644
index 0000000000..91aaa6f61c
--- /dev/null
+++ b/cesar/mac/ca/test/ca_eoc/src/test_alloc.c
@@ -0,0 +1,444 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2007 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/test_alloc.c
+ * \brief Test allocations code.
+ * \ingroup test
+ */
+#include "common/std.h"
+
+#include "mac/ca/inc/context.h"
+#include "mac/ca/inc/access.h"
+#include "mac/ca/inc/alloc.h"
+#include "mac/common/timings.h"
+
+#include "hal/phy/phy.h"
+#include "inc/phy_stub.h"
+
+#include "lib/test.h"
+
+#define NB_ITER 100000
+
+void
+alloc_basic_test_case (test_t t)
+{
+ uint i, j;
+ lib_rnd_t rnd[1];
+ phy_t *phy;
+ mac_config_t config;
+ mac_store_t *store;
+ ca_t *ca;
+ test_case_begin (t, "basic");
+ /* Initialise. */
+ phy = phy_init (NULL, NULL, NULL, NULL, NULL, NULL, NULL);
+ mac_config_init (&config);
+ config.tei = 1;
+ store = mac_store_init ();
+ ca = ca_init (phy, &config, store, 0);
+ lib_rnd_init (rnd, 1234);
+/*
+ test_begin (t, "is hybrid")
+ {
+ struct
+ {
+ u8 lid;
+ mac_coexistence_mode_t coex;
+ bool expect;
+ } is_hybrid_tab[] = {
+ { 0x80, MAC_COEXISTENCE_AV_ONLY_MODE, false },
+ { 0x8a, MAC_COEXISTENCE_SHARED_CSMA_HYBRID_MODE, false },
+ { 0xa2, MAC_COEXISTENCE_FULL_HYBRID_MODE, true },
+ { 0xcd, MAC_COEXISTENCE_HYBRID_DELIMITERS_MODE, true },
+ { MAC_LID_DISCOVER, MAC_COEXISTENCE_AV_ONLY_MODE, true },
+ { MAC_LID_DISCOVER, MAC_COEXISTENCE_SHARED_CSMA_HYBRID_MODE, true },
+ { MAC_LID_DISCOVER, MAC_COEXISTENCE_FULL_HYBRID_MODE, true },
+ { MAC_LID_DISCOVER, MAC_COEXISTENCE_HYBRID_DELIMITERS_MODE, true },
+ { MAC_LID_SHARED_CSMA, MAC_COEXISTENCE_AV_ONLY_MODE, false },
+ { MAC_LID_SHARED_CSMA, MAC_COEXISTENCE_SHARED_CSMA_HYBRID_MODE, true },
+ { MAC_LID_SHARED_CSMA, MAC_COEXISTENCE_FULL_HYBRID_MODE, true },
+ { MAC_LID_SHARED_CSMA, MAC_COEXISTENCE_HYBRID_DELIMITERS_MODE, true },
+ { MAC_LID_LOCAL_CSMA, MAC_COEXISTENCE_AV_ONLY_MODE, false },
+ { MAC_LID_LOCAL_CSMA, MAC_COEXISTENCE_SHARED_CSMA_HYBRID_MODE, false },
+ { MAC_LID_LOCAL_CSMA, MAC_COEXISTENCE_FULL_HYBRID_MODE, true },
+ { MAC_LID_LOCAL_CSMA, MAC_COEXISTENCE_HYBRID_DELIMITERS_MODE, true },
+ { MAC_LID_DISCOVER, MAC_COEXISTENCE_AV_ONLY_MODE, true },
+ { MAC_LID_DISCOVER, MAC_COEXISTENCE_SHARED_CSMA_HYBRID_MODE, true },
+ { MAC_LID_DISCOVER, MAC_COEXISTENCE_FULL_HYBRID_MODE, true },
+ { MAC_LID_DISCOVER, MAC_COEXISTENCE_HYBRID_DELIMITERS_MODE, true },
+ { MAC_LID_SPC_CENTRAL, MAC_COEXISTENCE_AV_ONLY_MODE, true },
+ { MAC_LID_SPC_CENTRAL, MAC_COEXISTENCE_SHARED_CSMA_HYBRID_MODE, true },
+ { MAC_LID_SPC_CENTRAL, MAC_COEXISTENCE_FULL_HYBRID_MODE, true },
+ { MAC_LID_SPC_CENTRAL, MAC_COEXISTENCE_HYBRID_DELIMITERS_MODE, true },
+ // { MAC_LID_CFPI, ? },
+ };
+ for (i = 0; i < COUNT (is_hybrid_tab); i++)
+ {
+ test_fail_unless (
+ CA_ALLOC_IS_HYBRID (is_hybrid_tab[i].coex,
+ is_hybrid_tab[i].lid) ==
+ is_hybrid_tab[i].expect, "is hybrid mismatch i=%d", i);
+ }
+ } test_end;
+*/
+ test_begin (t, "beacon periods")
+ {
+ const int beacon_period_length = MAC_MS_TO_TCK (1000 / 50);
+ ca_beacon_period_t periods[CA_BEACON_PERIOD_NB];
+ uint periods_nb = 0;
+ uint periods_nb_new;
+ uint used;
+ /* Create schedule to satisfy asserts. */
+ for (i = 0; i < CA_SCHEDULE_NB; i++)
+ {
+ ca_schedule_t *sched = ca_alloc_get_schedule (ca, i);
+ sched->coexistence_mode = MAC_COEXISTENCE_AV_ONLY_MODE;
+ sched->snid = 5;
+ sched->nek_switch = 0;
+ sched->allocations_nb = 1;
+ sched->allocations[0].end_offset_tck = beacon_period_length;
+ sched->allocations[0].glid = MAC_LID_SPC_HOLE;
+ }
+ /* Create beacon periods. */
+ for (i = 0; i < NB_ITER; i++)
+ {
+ phy->date = i * beacon_period_length + beacon_period_length / 3;
+ periods_nb_new =
+ lib_rnd_uniform (rnd, CA_BEACON_PERIOD_NB - 2) + 1;
+ for (j = 0; j < periods_nb_new; j++)
+ {
+ /* Change older periods, set new periods. */
+ if (j + 1 >= periods_nb
+ || lib_rnd_flip_coin (rnd, LIB_RND_RATIO (0.3)))
+ {
+ periods[j].start_date = (i + j) * beacon_period_length
+ + lib_rnd_uniform (rnd, beacon_period_length / 100)
+ - beacon_period_length / 200;
+ periods[j].schedule_index =
+ lib_rnd_uniform (rnd, CA_SCHEDULE_NB);
+ }
+ else
+ {
+ periods[j] = periods[j + 1];
+ }
+ }
+ periods_nb = periods_nb_new;
+ /* Update CA periods. */
+ ca_alloc_update_beacon_periods (ca, periods, periods_nb);
+ /* Check the update. */
+ test_fail_unless (periods_nb == ca->beacon_periods_nb);
+ for (j = 0; j < periods_nb; j++)
+ {
+ test_fail_unless ((ca->beacon_periods[j].start_date
+ == periods[j].start_date)
+ && (ca->beacon_periods[j].schedule_index
+ == periods[j].schedule_index));
+ }
+ /* Test get_schedule. */
+ used = 0;
+ for (j = 0; j < periods_nb; j++)
+ {
+ dbg_assert (periods[j].schedule_index < CA_SCHEDULE_NB);
+ used |= 1 << periods[j].schedule_index;
+ }
+ for (j = 0; used; j++, used >>= 1)
+ {
+ bool caught = false;
+ dbg_fatal_try_begin
+ {
+ ca_alloc_get_schedule (ca, j);
+ }
+ dbg_fatal_try_catch_void ()
+ {
+ caught = true;
+ }
+ dbg_fatal_try_end;
+ test_fail_unless (((used & 1) && caught)
+ || (!(used & 1) && !caught));
+ }
+ /* Test find_beacon_period. */
+ for (j = 0; j < periods_nb; j++)
+ {
+ test_fail_unless (ca_alloc_find_beacon_period (
+ ca, periods[j].start_date) == &ca->beacon_periods[j]);
+ test_fail_unless (ca_alloc_find_beacon_period (
+ ca, periods[j].start_date + beacon_period_length / 3)
+ == &ca->beacon_periods[j]);
+ }
+ }
+ } test_end;
+ test_begin (t, "alloc find")
+ {
+ ca_schedule_t schedule;
+ uint end;
+ for (i = 0; i < NB_ITER / CA_SCHEDULE_SIZE; i++)
+ {
+ schedule.coexistence_mode = MAC_COEXISTENCE_AV_ONLY_MODE;
+ schedule.snid = 5;
+ schedule.nek_switch = 0;
+ schedule.allocations_nb = lib_rnd_uniform (rnd, CA_SCHEDULE_SIZE);
+ end = 0;
+ for (j = 0; j < schedule.allocations_nb; j++)
+ {
+ end = end + 2 + lib_rnd_uniform (
+ rnd, (1 << 24)
+ - (schedule.allocations_nb - j) * 2
+ - end - 2);
+ schedule.allocations[j].end_offset_tck = end;
+ schedule.allocations[j].glid = 0;
+ }
+ end = 0;
+ for (j = 0; j < schedule.allocations_nb; j++)
+ {
+ test_fail_unless (ca_alloc_find (&schedule, end) == j);
+ test_fail_unless (ca_alloc_find (&schedule, end + 1) == j);
+ end = schedule.allocations[j].end_offset_tck;
+ test_fail_unless (ca_alloc_find (&schedule, end) == j + 1);
+ test_fail_unless (ca_alloc_find (&schedule, end + 1)
+ == j + 1);
+ }
+ }
+ } test_end;
+ /* Uninitialise. */
+ ca_uninit (ca);
+ phy_uninit (phy);
+ mac_store_uninit (store);
+}
+
+/**
+ * Helper function to prepare schedules.
+ * \param ca CA context
+ *
+ * Schedules is described with variable arguments:
+ *
+ * arguments: beacon_period* 0
+ * beacon_period: allocations_nb start_date coexistence_mode snid nek_switch
+ * allocations+
+ * allocations: end_offset_tck glid
+ */
+static void
+alloc_prepare_schedules (ca_t *ca, ...)
+{
+ ca_beacon_period_t periods[CA_BEACON_PERIOD_NB];
+ ca_schedule_t *sched = NULL;
+ uint allocs_nb = 0;
+ uint period_index = 0;
+ uint alloc_index = 0;
+ va_list ap;
+ va_start (ap, ca);
+ do
+ {
+ /* Fetch next allocation number for next beacon period. */
+ if (alloc_index == 0)
+ allocs_nb = va_arg (ap, uint);
+ if (allocs_nb)
+ {
+ /* If first allocation initialise schedule. */
+ if (alloc_index == 0)
+ {
+ periods[period_index].start_date = va_arg (ap, u32);
+ periods[period_index].schedule_index = period_index;
+ sched = ca_alloc_get_schedule (ca, period_index);
+ sched->coexistence_mode = va_arg (ap, uint);
+ sched->snid = va_arg (ap, uint);
+ sched->nek_switch = va_arg (ap, uint);
+ sched->allocations_nb = 0;
+ }
+ /* Set allocation from parameters. */
+ sched->allocations[alloc_index].end_offset_tck =
+ va_arg (ap, uint);
+ sched->allocations[alloc_index].glid = va_arg (ap, uint);
+ sched->allocations_nb++;
+ alloc_index++;
+ /* Next beacon period? */
+ if (alloc_index == allocs_nb)
+ {
+ period_index++;
+ alloc_index = 0;
+ }
+ }
+ } while (allocs_nb);
+ va_end (ap);
+ /* Program CA. */
+ ca_alloc_update_beacon_periods (ca, periods, period_index);
+}
+
+static void
+alloc_prepare_test_case (test_t t)
+{
+ phy_t *phy;
+ mac_config_t config;
+ mac_store_t *store;
+ ca_t *ca;
+ test_case_begin (t, "prepare");
+ /* Initialise. */
+ phy = phy_init (NULL, NULL, NULL, NULL, NULL, NULL, NULL);
+ mac_config_init (&config);
+ config.tei = 1;
+ store = mac_store_init ();
+ test_begin (t, "no shrink")
+ {
+ ca = ca_init (phy, &config, store, 0);
+ alloc_prepare_schedules (
+ ca,
+ 1, 0, MAC_COEXISTENCE_AV_ONLY_MODE, 1, 0,
+ 1000000, MAC_GLID_MIN + 10,
+ 1, 1000000, MAC_COEXISTENCE_AV_ONLY_MODE, 1, 0,
+ 1000000, MAC_GLID_MIN + 11,
+ 0);
+ ca_access_activate (ca, 0);
+ ca_alloc_param_t *ap = &ca->current_allocation_param;
+ test_fail_unless (ap->coexistence_mode
+ == MAC_COEXISTENCE_AV_ONLY_MODE);
+ test_fail_unless (ap->snid == 1);
+ test_fail_unless (!ap->hybrid);
+ test_fail_unless (!ap->merge);
+ test_fail_unless (ap->nek_switch == 0);
+ test_fail_unless (ap->end_date == 1000000 - MAC_AIFS_TCK);
+ test_fail_unless (ap->aifs_date == 1000000);
+ test_fail_unless (ap->beacon_period_start_date == 0);
+ test_fail_unless (ap->glid == MAC_GLID_MIN + 10);
+ ca_access_deactivate (ca);
+ ca_uninit (ca);
+ } test_end;
+ test_begin (t, "shrink")
+ {
+ ca = ca_init (phy, &config, store, 0);
+ alloc_prepare_schedules (
+ ca,
+ 1, 0, MAC_COEXISTENCE_AV_ONLY_MODE, 1, 0,
+ 1000000, MAC_GLID_MIN + 10,
+ 1, 900000, MAC_COEXISTENCE_AV_ONLY_MODE, 1, 0,
+ 1000000, MAC_GLID_MIN + 11,
+ 0);
+ ca_access_activate (ca, 0);
+ ca_alloc_param_t *ap = &ca->current_allocation_param;
+ test_fail_unless (ap->coexistence_mode
+ == MAC_COEXISTENCE_AV_ONLY_MODE);
+ test_fail_unless (ap->snid == 1);
+ test_fail_unless (!ap->hybrid);
+ test_fail_unless (!ap->merge);
+ test_fail_unless (ap->nek_switch == 0);
+ test_fail_unless (ap->end_date == 900000 - MAC_AIFS_TCK);
+ test_fail_unless (ap->aifs_date == 900000);
+ test_fail_unless (ap->beacon_period_start_date == 0);
+ test_fail_unless (ap->glid == MAC_GLID_MIN + 10);
+ ca_access_deactivate (ca);
+ ca_uninit (ca);
+ } test_end;
+ test_begin (t, "shrink beacon")
+ {
+ ca = ca_init (phy, &config, store, 0);
+ alloc_prepare_schedules (
+ ca,
+ 1, 0, MAC_COEXISTENCE_AV_ONLY_MODE, 1, 0,
+ 1000000, MAC_GLID_MIN + 10,
+ 1, 900000, MAC_COEXISTENCE_AV_ONLY_MODE, 1, 0,
+ 1000000, MAC_LID_SPC_CENTRAL,
+ 0);
+ ca_access_activate (ca, 0);
+ ca_alloc_param_t *ap = &ca->current_allocation_param;
+ test_fail_unless (ap->coexistence_mode
+ == MAC_COEXISTENCE_AV_ONLY_MODE);
+ test_fail_unless (ap->snid == 1);
+ test_fail_unless (!ap->hybrid);
+ test_fail_unless (!ap->merge);
+ test_fail_unless (ap->nek_switch == 0);
+ test_fail_unless (ap->end_date == 900000 - MAC_B2BIFS_TCK);
+ test_fail_unless (ap->aifs_date == 900000);
+ test_fail_unless (ap->beacon_period_start_date == 0);
+ test_fail_unless (ap->glid == MAC_GLID_MIN + 10);
+ ca_access_deactivate (ca);
+ ca_uninit (ca);
+ } test_end;
+ test_begin (t, "merge")
+ {
+ ca = ca_init (phy, &config, store, 0);
+ alloc_prepare_schedules (
+ ca,
+ 1, 0, MAC_COEXISTENCE_HYBRID_DELIMITERS_MODE, 1, 0,
+ 1000000, MAC_LID_SHARED_CSMA,
+ 1, 1000000, MAC_COEXISTENCE_HYBRID_DELIMITERS_MODE, 1, 0,
+ 1000000, MAC_LID_SHARED_CSMA,
+ 0);
+ ca_access_activate (ca, 0);
+ ca_alloc_param_t *ap = &ca->current_allocation_param;
+ test_fail_unless (ap->coexistence_mode
+ == MAC_COEXISTENCE_HYBRID_DELIMITERS_MODE);
+ test_fail_unless (ap->snid == 1);
+ test_fail_unless (ap->merge);
+ test_fail_unless (ap->nek_switch == 0);
+ test_fail_unless (ap->end_date == 1000000 - MAC_AIFS_TCK
+ + CA_ACCESS_MERGE_MARGIN_TCK);
+ test_fail_unless (ap->aifs_date == 1000000);
+ test_fail_unless (ap->beacon_period_start_date == 0);
+ test_fail_unless (ap->glid == MAC_LID_SHARED_CSMA);
+ ca_access_deactivate (ca);
+ ca_uninit (ca);
+ } test_end;
+ test_begin (t, "no merge, not last")
+ {
+ ca = ca_init (phy, &config, store, 0);
+ alloc_prepare_schedules (
+ ca,
+ 2, 0, MAC_COEXISTENCE_HYBRID_DELIMITERS_MODE, 1, 0,
+ 500000, MAC_LID_SHARED_CSMA,
+ 1000000, MAC_LID_SHARED_CSMA,
+ 1, 1000000, MAC_COEXISTENCE_HYBRID_DELIMITERS_MODE, 1, 0,
+ 1000000, MAC_LID_SHARED_CSMA,
+ 0);
+ ca_access_activate (ca, 0);
+ ca_alloc_param_t *ap = &ca->current_allocation_param;
+ test_fail_unless (ap->coexistence_mode
+ == MAC_COEXISTENCE_HYBRID_DELIMITERS_MODE);
+ test_fail_unless (ap->snid == 1);
+ test_fail_unless (!ap->merge);
+ test_fail_unless (ap->nek_switch == 0);
+ test_fail_unless (ap->end_date == 500000 - MAC_AIFS_TCK);
+ test_fail_unless (ap->aifs_date == 500000);
+ test_fail_unless (ap->beacon_period_start_date == 0);
+ test_fail_unless (ap->glid == MAC_LID_SHARED_CSMA);
+ ca_access_deactivate (ca);
+ ca_uninit (ca);
+ } test_end;
+ test_begin (t, "no merge, not csma")
+ {
+ ca = ca_init (phy, &config, store, 0);
+ alloc_prepare_schedules (
+ ca,
+ 1, 0, MAC_COEXISTENCE_HYBRID_DELIMITERS_MODE, 1, 0,
+ 1000000, MAC_LID_SHARED_CSMA,
+ 1, 1000000, MAC_COEXISTENCE_HYBRID_DELIMITERS_MODE, 1, 0,
+ 1000000, MAC_LID_SPC_PROXY,
+ 0);
+ ca_access_activate (ca, 0);
+ ca_alloc_param_t *ap = &ca->current_allocation_param;
+ test_fail_unless (ap->coexistence_mode
+ == MAC_COEXISTENCE_HYBRID_DELIMITERS_MODE);
+ test_fail_unless (ap->snid == 1);
+ test_fail_unless (!ap->merge);
+ test_fail_unless (ap->nek_switch == 0);
+ test_fail_unless (ap->end_date == 1000000 - MAC_AIFS_TCK);
+ test_fail_unless (ap->aifs_date == 1000000);
+ test_fail_unless (ap->beacon_period_start_date == 0);
+ test_fail_unless (ap->glid == MAC_LID_SHARED_CSMA);
+ ca_access_deactivate (ca);
+ ca_uninit (ca);
+ } test_end;
+ /* Uninitialise. */
+ phy_uninit (phy);
+ mac_store_uninit (store);
+}
+
+void
+alloc_test_suite (test_t t)
+{
+ test_suite_begin (t, "alloc");
+ alloc_basic_test_case (t);
+ alloc_prepare_test_case (t);
+}
+
diff --git a/cesar/mac/ca/test/ca_eoc/src/test_ca.c b/cesar/mac/ca/test/ca_eoc/src/test_ca.c
new file mode 100644
index 0000000000..ec9b6724ba
--- /dev/null
+++ b/cesar/mac/ca/test/ca_eoc/src/test_ca.c
@@ -0,0 +1,39 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2007 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/test_ca.c
+ * \brief Test Channel Access.
+ * \ingroup test
+ */
+#include "common/std.h"
+
+#include "lib/test.h"
+#include "lib/trace.h"
+
+void
+backoff_test_suite (test_t t);
+
+void
+alloc_test_suite (test_t t);
+
+void
+access_test_suite (test_t t);
+
+int
+main (int argc, char **argv)
+{
+ test_t t;
+ trace_init ();
+ test_init (t, argc, argv);
+ backoff_test_suite (t);
+ alloc_test_suite (t);
+ access_test_suite (t);
+ trace_uninit ();
+ test_result (t);
+ return test_nb_failed (t) == 0 ? 0 : 1;
+}
diff --git a/cesar/mac/common/Config b/cesar/mac/common/Config
new file mode 100644
index 0000000000..91efc6cb3f
--- /dev/null
+++ b/cesar/mac/common/Config
@@ -0,0 +1,6 @@
+CONFIG_ATU_FACTOR = 1
+CONFIG_AV_ONLY_MODE = n
+CONFIG_MAC_COMMON_EOC_MFS = n
+CONFIG_MAC_COMMON_EOC_SCHED = n
+CONFIG_MAC_COMMON_EOC_TONEMASK = n
+CONFIG_MAC_COMMON_EOC_TEI = n
diff --git a/cesar/mac/common/defs.h b/cesar/mac/common/defs.h
index 7e5600b942..d84851d82d 100644
--- a/cesar/mac/common/defs.h
+++ b/cesar/mac/common/defs.h
@@ -25,6 +25,9 @@
/** Maximum number of physical PHY blocks per MPDU. */
#define MAC_MAX_PB_PER_MPDU 236
+#include "config/mac/pbproc/eoc.h"
+#include "config/mac/common/eoc/tei.h"
+
/** Number of channel access priority. */
#define MAC_CAP_NB 4
@@ -79,29 +82,53 @@ enum mac_lid_t
/** Test if a LID is a beacon LID (vendor specific LID).
* \warning This is a macro, the argument may be evaluated several time. */
-#define MAC_LID_IS_BEACON(lid) ((lid) >= MAC_LID_BEACON_MIN \
- && (lid) <= MAC_LID_BEACON_MAX)
+#if CONFIG_MAC_PBPROC_EOC_FC
+#define MAC_LID_IS_BEACON(lid) ((lid) == MAC_LID_SPC_CENTRAL)
+#else
+#define MAC_LID_IS_BEACON(lid)\
+ ((lid) >= MAC_LID_BEACON_MIN && (lid) <= MAC_LID_BEACON_MAX)
+#endif
/** Terminal Equipment Identifier. */
enum mac_tei_t
{
MAC_TEI_UNASSOCIATED = 0,
- MAC_TEI_STA_MIN = 1,
- MAC_TEI_STA_MAX = 0xfe,
- MAC_TEI_STA_NB = MAC_TEI_STA_MAX - MAC_TEI_STA_MIN + 1,
MAC_TEI_BCAST = 0xff,
/** Used to request unicast transmission to all stations in the AVLN. */
MAC_TEI_MULTI_UNICAST = 0x100,
/** Used for peers not present on the medium (HLE driver or other bridged
* address). */
MAC_TEI_FOREIGN = 0x200,
+ MAC_TEI_STA_MIN = 1,
+#if CONFIG_MAC_COMMON_EOC_TEI
+ MAC_TEI_CCO_MIN = 1,
+ MAC_TEI_CCO_MAX = 2,
+ MAC_TEI_CCO_DEF = MAC_TEI_CCO_MIN,
+ MAC_TEI_STA_MIN_EOC = MAC_TEI_CCO_MAX + 1,
+ MAC_TEI_STA_NB = 128,
+ MAC_TEI_STA_MAX = 0xfe,
+ MAC_TEI_MCAST_MAX = MAC_TEI_BCAST - 1,
+ MAC_TEI_MCAST_NB = 5,
+ MAC_TEI_MCAST_MIN = MAC_TEI_MCAST_MAX - MAC_TEI_MCAST_NB + 1,
+#else
+ MAC_TEI_STA_MAX = 0xfe,
+ MAC_TEI_STA_NB = MAC_TEI_STA_MAX - MAC_TEI_STA_MIN + 1,
+#endif
};
/** Test if a TEI is between STA_MIN and STA_MAX.
* \warning This is a macro, the argument may be evaluated several time. */
+#if CONFIG_MAC_COMMON_EOC_TEI
+#define MAC_TEI_IS_EOC_CCO(tei) \
+ ((tei) >= MAC_TEI_CCO_MIN && (tei) <= MAC_TEI_CCO_MAX)
+#define MAC_TEI_IS_EOC_STA(tei) \
+ ((tei) >= MAC_TEI_STA_MIN_EOC && (tei) <= MAC_TEI_STA_MAX)
+#define MAC_TEI_IS_STA(tei) \
+ ((tei) >= MAC_TEI_CCO_MIN && (tei) <= MAC_TEI_MCAST_MAX)
+#else
#define MAC_TEI_IS_STA(tei) \
((tei) >= MAC_TEI_STA_MIN && (tei) <= MAC_TEI_STA_MAX)
-
+#endif
/** Coexistence modes.
* \warning Full Hybrid mode is also used in CSMA-Only with HomePlug 1.0
* compatible frame length. This maps directly to beacon HM field. */
@@ -140,9 +167,14 @@ typedef enum mac_network_mode_t mac_network_mode_t;
enum mac_eks_t
{
MAC_EKS_MIN = 0,
+#if CONFIG_MAC_PBPROC_EOC_FC
+ MAC_EKS_CLEAR = 0x3,
+ MAC_EKS_MAX = 1,
+#else
+ MAC_EKS_CLEAR = 0xf,
MAC_EKS_MAX = 7,
+#endif
MAC_EKS_NB = MAC_EKS_MAX - MAC_EKS_MIN + 1,
- MAC_EKS_CLEAR = 0xf,
};
typedef enum mac_eks_t mac_eks_t;
diff --git a/cesar/mac/common/mfs.h b/cesar/mac/common/mfs.h
index 49d864ef49..0ddb526231 100644
--- a/cesar/mac/common/mfs.h
+++ b/cesar/mac/common/mfs.h
@@ -18,6 +18,8 @@
#include "lib/list.h"
#include "mac/common/link_stats.h"
+#include "config/mac/common.h"
+
/** Default encoded RX window size for data (corresponding to 16). */
#define MFS_RX_WINDOW_SIZE_DATA_DEFAULT_ENCODED 0x2
/** Delay during the one the MFS TX is still active. */
@@ -27,9 +29,9 @@
/** Release timeout. */
#define MFS_RELEASE_DELAY_MS 1000
/** Delay TX PBs have to pass through MAC layer. */
-#define MFS_PB_TX_DELAY_MS 100
+#define MFS_PB_TX_DELAY_MS 3000
/** Delay RX PBs have to pass through MAC layer. */
-#define MFS_PB_RX_DELAY_MS 100
+#define MFS_PB_RX_DELAY_MS 3000
/** MFS FSM commands. WARNING: should match AV spec. */
enum mfs_fsm_cmd_t
@@ -197,6 +199,12 @@ struct mfs_tx_t
bool beacon;
/** link stats */
link_stats_tx_t stats;
+#if CONFIG_MAC_COMMON_EOC_MFS
+ /** Count number of consecutive frames without reply*/
+ u8 no_reply_count;
+ /** Deficit for DWRR scheduling. */
+ uint deficit;
+#endif
};
typedef struct mfs_tx_t mfs_tx_t;
diff --git a/cesar/mac/common/src/mfs.c b/cesar/mac/common/src/mfs.c
index f4fc7d78c1..59f2c05506 100644
--- a/cesar/mac/common/src/mfs.c
+++ b/cesar/mac/common/src/mfs.c
@@ -28,7 +28,8 @@
#define MFS_WINDOW_SIZE_DATA_RX MFS_WINDOW_SIZE_256
/** Default TX MFS DATA window size (actual value is fixed by the receiver). */
-#define MFS_DEFAULT_WINDOW_SIZE_DATA_TX MFS_WINDOW_SIZE_16
+#define MFS_DEFAULT_WINDOW_SIZE_DATA_TX CONFIG_MAC_COMMON_EOC_MFS ? \
+ MFS_WINDOW_SIZE_256 : MFS_WINDOW_SIZE_16
/** Default TX MFS segment limit. */
#define MFS_TX_MAX_SEG_NB_DEFAULT 1200
@@ -59,6 +60,12 @@ mfs_common_init (mfs_common_t *mfs_common, bool tx, bool bcast, bool mme, uint
list_init_node (&mfs_common->store_unassociated_link);
/* mfs_common->expiration_ntb */
if (tx)
+#if CONFIG_MAC_COMMON_EOC_MFS
+ if (mfs_common->mme)
+ mfs_common->expiration_delay_tck =
+ MAC_MS_TO_TCK (MFS_PB_TX_DELAY_MS << 1);
+ else
+#endif
mfs_common->expiration_delay_tck =
MAC_MS_TO_TCK (MFS_PB_TX_DELAY_MS);
else
@@ -103,6 +110,10 @@ mfs_tx_init (mfs_tx_t *mfs, bool bcast, bool mme, uint lid, uint tei)
|| (!bcast && mme && tei == MAC_TEI_UNASSOCIATED));
mfs_common_init (&mfs->common, true, bcast, mme, lid, tei);
mfs->cfp = false;
+ if (CONFIG_MAC_COMMON_EOC_MFS && (tei != MAC_TEI_UNASSOCIATED))
+ {
+ mfs->cfp = true;
+ }
mfs->burst_count = 0;
list_init_node (&mfs->ca_link);
mfs->ca_state = CA_MFS_STATE_UNKNOWN;
@@ -122,18 +133,24 @@ mfs_tx_init (mfs_tx_t *mfs, bool bcast, bool mme, uint lid, uint tei)
mfs->last_seg_offset = 0;
mfs->next_ssn = 0;
mfs->beacon = false;
+#if CONFIG_MAC_COMMON_EOC_MFS
+ mfs->no_reply_count = 0;
+ mfs->cap = 0;
+ mfs->deficit = 0;
+#endif
link_stats_tx_reset (&mfs->stats);
}
void
-mfs_tx_init_unassociated (mfs_tx_t *mfs, bool bcast, bool mme, uint lid,
- uint tei)
+mfs_tx_init_unassociated (mfs_tx_t *mfs, bool bcast, bool mme, uint lid, uint tei)
{
dbg_assert (mfs);
mfs_tx_init (mfs, bcast, mme, lid, tei);
mfs->common.unassociated = true;
mfs->fsm_state = MFS_FSM_CMD_NOP;
+ if (CONFIG_MAC_COMMON_EOC_MFS)
+ mfs->cfp = false;
}
void
diff --git a/cesar/mac/common/src/sta.c b/cesar/mac/common/src/sta.c
index c8d1dc2921..30adb0df17 100644
--- a/cesar/mac/common/src/sta.c
+++ b/cesar/mac/common/src/sta.c
@@ -33,6 +33,11 @@ sta_init (sta_t *sta, uint tei)
ce_rx_bitloading_init (&sta->ce_rx_bt);
sta->tx_data_rate.data_rate = CL_DATA_RATE_REQ_INIT;
sta->rx_data_rate.data_rate = CL_DATA_RATE_REQ_INIT;
+#if CONFIG_MAC_COMMON_EOC_SCHED
+ /** Should STA be regularly polled */
+ sta->tdma_poll = true;
+ sta->poll_off = 0;
+#endif
sta->intervals = NULL;
sta->agc_gain_valid = false;
sta->agc_gain = 0;
diff --git a/cesar/mac/common/src/store.c b/cesar/mac/common/src/store.c
index 4ae58c1290..ba5019bb3c 100644
--- a/cesar/mac/common/src/store.c
+++ b/cesar/mac/common/src/store.c
@@ -10,6 +10,7 @@
* \brief MFS and STA store, store pointers to MFS and STA information.
* \ingroup mac_common
*/
+#include "config.h"
#include "common/defs/homeplugAV.h"
#include "common/std.h"
#include "mac/common/store.h"
@@ -19,6 +20,8 @@
#include "lib/blk.h"
#include "lib/bitqueue.h"
+#include "config/mac/common.h"
+
/** Define index into MFS tables tables. */
enum mac_store_kind_t
{
@@ -47,6 +50,12 @@ struct mac_store_sta_t
mfs_t **rx_llid;
/** Maximum RX LLID ever created, used for optimization. */
uint rx_llid_max;
+#if CONFIG_MAC_COMMON_EOC_MFS
+ /** LLID MFS for tx to this station in EoC mode */
+ mfs_t **tx_llid;
+ /** Maximum TX LLID ever created, used for optimization. */
+ uint tx_llid_max;
+#endif /* CONFIG_MAC_COMMON_EOC_MFS */
};
typedef struct mac_store_sta_t mac_store_sta_t;
@@ -138,6 +147,9 @@ mac_store_mfs_slot_get (mac_store_t *ctx, bool tx, bool bcast, bool mme,
|| MAC_LID_IS_BEACON (lid)) && tei == 0)
|| (bcast && tx && tei == MAC_TEI_BCAST)
|| (!(bcast && tx) && MAC_TEI_IS_STA (tei)));
+ dbg_blame (!CONFIG_MAC_COMMON_EOC_MFS
+ || !bcast || MAC_LID_IS_PLID (lid)
+ || MAC_LID_IS_BEACON (lid) || (mme && (lid == MAC_LID_NONE)));
if (!mme && (lid >= MAC_GLID_MIN))
{
/* GLID table contains TX and RX MFS, check it is the requested
@@ -154,7 +166,7 @@ mac_store_mfs_slot_get (mac_store_t *ctx, bool tx, bool bcast, bool mme,
return &ctx->lglid[lid];
}
}
- else if (!mme && (tx && lid >= MAC_LLID_MIN))
+ else if (!mme && (tx && lid >= MAC_LLID_MIN) && !CONFIG_MAC_COMMON_EOC_MFS)
{
if (add)
ctx->tx_llid_max = MAX (ctx->tx_llid_max, lid);
@@ -176,22 +188,44 @@ mac_store_mfs_slot_get (mac_store_t *ctx, bool tx, bool bcast, bool mme,
{
if (!mme && lid >= MAC_LLID_MIN)
{
- dbg_blame (!tx && lid <= MAC_LLID_MAX);
- if (add)
- sta->rx_llid_max = MAX (sta->rx_llid_max, lid);
- if (!sta->rx_llid)
+ dbg_blame ((!tx || CONFIG_MAC_COMMON_EOC_MFS) && lid <= MAC_LLID_MAX);
+#if CONFIG_MAC_COMMON_EOC_MFS
+ if (tx)
{
if (add)
+ sta->tx_llid_max = MAX (sta->tx_llid_max, lid);
+ if (!sta->tx_llid)
{
- /* Allocate a new table. */
- sta->rx_llid = blk_alloc_zero_ (_fl);
- return &sta->rx_llid[lid];
+ if (add)
+ {
+ sta->tx_llid = blk_alloc_zero_ (_fl);
+ return &sta->tx_llid[lid];
+ }
+ else
+ return NULL;
}
else
- return NULL;
+ return &sta->tx_llid[lid];
}
else
- return &sta->rx_llid[lid];
+#endif /* CONFIG_MAC_COMMON_EOC_MFS */
+ {
+ if (add)
+ sta->rx_llid_max = MAX (sta->rx_llid_max, lid);
+ if (!sta->rx_llid)
+ {
+ if (add)
+ {
+ /* Allocate a new table. */
+ sta->rx_llid = blk_alloc_zero_ (_fl);
+ return &sta->rx_llid[lid];
+ }
+ else
+ return NULL;
+ }
+ else
+ return &sta->rx_llid[lid];
+ }
}
else
{
@@ -209,6 +243,50 @@ mac_store_mfs_slot_get (mac_store_t *ctx, bool tx, bool bcast, bool mme,
}
}
+#if CONFIG_MAC_COMMON_EOC_MFS
+
+mfs_tx_t * ARCH_ILRAM
+mac_store_mfs_get_sta_tx_data_locked (mac_store_t *ctx, uint lid, uint tei)
+{
+ dbg_claim (ctx);
+ dbg_claim (MAC_LID_IS_LLID (lid));
+ dbg_claim (MAC_TEI_IS_STA (tei));
+ mac_store_sta_t *sta = ctx->sta[tei];
+ if (sta && sta->sta.tdma_poll)
+ return &sta->tx_llid[lid]->tx;
+ else
+ return NULL;
+}
+
+mfs_tx_t * ARCH_ILRAM
+mac_store_mfs_get_sta_tx_mme_locked (mac_store_t *ctx, uint tei)
+{
+ dbg_claim (ctx);
+ dbg_claim (MAC_TEI_IS_STA (tei));
+ mac_store_sta_t *sta = ctx->sta[tei];
+ if (sta && sta->sta.tdma_poll)
+ return &sta->mme[MAC_STORE_KIND_TX]->tx;
+ else
+ return NULL;
+}
+
+mfs_tx_t * ARCH_ILRAM
+mac_store_mfs_get_bcast_tx_data_locked (mac_store_t *ctx, uint lid)
+{
+ dbg_claim (ctx);
+ dbg_claim (MAC_LID_IS_PLID (lid));
+ return &ctx->bcast_tx_plid[lid]->tx;
+}
+
+mfs_tx_t * ARCH_ILRAM
+mac_store_mfs_get_bcast_tx_mme_locked (mac_store_t *ctx)
+{
+ dbg_claim (ctx);
+ return &ctx->bcast_tx_mme->tx;
+}
+
+#endif
+
mfs_t * ARCH_ILRAM_PRIO (3)
mac_store_mfs_get_ (mac_store_t *ctx, bool tx, bool bcast, bool mme, uint lid,
uint tei __FL)
@@ -502,6 +580,31 @@ mac_store_mfs_travel_by_tei (mac_store_t *ctx, uint tei,
else
arch_dsr_unlock ();
}
+#if CONFIG_MAC_COMMON_EOC_MFS
+ if (sta->tx_llid)
+ {
+ mfs_t **tx_llid;
+ arch_dsr_lock ();
+ tx_llid = sta->tx_llid;
+ if (tx_llid)
+ {
+ blk_addref (tx_llid);
+ arch_dsr_unlock ();
+ for (i = MAC_LLID_MIN; i <= sta->tx_llid_max; i++)
+ {
+ if (tx_llid[i])
+ {
+ arch_dsr_lock ();
+ mac_store_mfs_travel_mfs_and_unlock (
+ ctx, tx_llid[i], travel, user);
+ }
+ }
+ blk_release (tx_llid);
+ }
+ else
+ arch_dsr_unlock ();
+ }
+#endif
blk_release (sta);
}
}
@@ -590,27 +693,39 @@ mac_store_mfs_travel_by_tei_locked (mac_store_t *ctx, uint tei,
}
}
}
+#if CONFIG_MAC_COMMON_EOC_MFS
+ if (sta->tx_llid)
+ {
+ mfs_t **tx_llid;
+ tx_llid = sta->tx_llid;
+ if (tx_llid)
+ {
+ for (i = MAC_LLID_MIN; i <= sta->tx_llid_max; i++)
+ {
+ if (tx_llid[i])
+ travel (ctx, tx_llid[i], user);
+ }
+ }
+ }
+#endif
}
}
-sta_t *
+sta_t * ARCH_ILRAM
mac_store_sta_get_ (mac_store_t *ctx, uint tei __FL)
{
- dbg_assert (ctx);
+ dbg_claim (ctx);
dbg_blame (MAC_TEI_IS_STA (tei));
arch_dsr_lock ();
mac_store_sta_t *sta = ctx->sta[tei];
+ sta_t * sta_sta = NULL;
if (sta)
{
blk_addref_ (sta __fl);
- arch_dsr_unlock ();
- return &sta->sta;
- }
- else
- {
- arch_dsr_unlock ();
- return NULL;
+ sta_sta = &sta->sta;
}
+ arch_dsr_unlock ();
+ return sta_sta;
}
sta_t * ARCH_ILRAM
@@ -648,6 +763,13 @@ mac_store_sta_add_ (mac_store_t *ctx, uint tei __FL)
}
sta->rx_llid = NULL;
sta->rx_llid_max = 0;
+#if CONFIG_MAC_COMMON_EOC_MFS
+ sta->tx_llid = NULL;
+ sta->tx_llid_max = 0;
+ /* add here to prevent additional checks */
+ sta->tx_llid = blk_alloc_zero_ (_fl);
+ sta->rx_llid = blk_alloc_zero_ (_fl);
+#endif /* CONFIG_MAC_COMMON_EOC_MFS */
/* Done, ready to be used (order is important). */
arch_reorder_barrier ();
ctx->sta[tei] = sta;
@@ -685,6 +807,14 @@ mac_store_sta_remove_ (mac_store_t *ctx, uint tei __FL)
if (sta->rx_llid[i])
ok = false;
}
+#if CONFIG_MAC_COMMON_EOC_MFS
+ if (ok && sta->tx_llid)
+ {
+ for (i = 0; ok && i < MAC_LLID_MAX; i++)
+ if (sta->tx_llid[i])
+ ok = false;
+ }
+#endif /* CONFIG_MAC_COMMON_EOC_MFS */
if (ok)
{
/* Can no longer be accessed by interrupts, order is important. */
@@ -698,6 +828,11 @@ mac_store_sta_remove_ (mac_store_t *ctx, uint tei __FL)
if (sta->rx_llid)
blk_release_ (sta->rx_llid __fl);
sta->rx_llid = NULL;
+#if CONFIG_MAC_COMMON_EOC_MFS
+ if (sta->tx_llid)
+ blk_release_ (sta->tx_llid __fl);
+ sta->tx_llid = NULL;
+#endif /* CONFIG_MAC_COMMON_EOC_MFS */
/* Release the STA information. */
blk_release_ (sta __fl);
}
diff --git a/cesar/mac/common/src/tonemap.c b/cesar/mac/common/src/tonemap.c
index 15a6cb9cfc..42cef0315d 100644
--- a/cesar/mac/common/src/tonemap.c
+++ b/cesar/mac/common/src/tonemap.c
@@ -462,6 +462,8 @@ tonemaps_alloc ()
tonemaps_t *tms = (tonemaps_t *) blk_alloc_zero ();
/* Set default values. */
tms->default_tmi = TONEMAP_INDEX_INITIAL_START;
+ /* This need to be done only when allocating tonemaps (see #1595). */
+ tms->sound_frame_counter = TONEMAP_SOUND_FRAME_COUNTER;
tonemaps_init (tms);
return tms;
}
diff --git a/cesar/mac/common/src/tonemask.c b/cesar/mac/common/src/tonemask.c
index 0a47a6979b..4652148eb3 100644
--- a/cesar/mac/common/src/tonemask.c
+++ b/cesar/mac/common/src/tonemask.c
@@ -11,9 +11,11 @@
* \ingroup mac_common
*/
#include "common/std.h"
+#include <stdio.h>
#include "tonemask.h"
#include "timings.h"
+#include "config/mac/common/eoc/tonemask.h"
uint
tonemask_carrier_nb (const u32 *tonemask)
@@ -98,6 +100,7 @@ tonemask_update (tonemask_info_t *ti)
uint
tonemask_default (u32 *tonemask)
{
+#if (!CONFIG_MAC_COMMON_EOC_TONEMASK)
/** HomePlug AV default tone mask carriers. */
static const uint carriers[] =
{
@@ -125,11 +128,26 @@ tonemask_default (u32 *tonemask)
};
/** HomePlug AV default tone mask carriers number. */
static const uint carriers_nb = 917;
+#else
+ /** EoC default tone mask carriers. */
+ static const uint carriers[] =
+ {
+ /* 0-73 are OFF */
+ PHY_LAST_EOC_CARRIER_NB, /* 74-1439 are ON */
+ 1535, /* 1440-1535 are OFF */
+ };
+ /** EoC default tone mask carriers number. */
+ static const uint carriers_nb = PHY_LAST_EOC_CARRIER_NB-PHY_CARRIER_OFFSET+1;
+#endif
uint i, j;
uint dtc_idx = 0;
dbg_assert (carriers[0] > PHY_CARRIER_OFFSET);
uint dtc_stop = carriers[dtc_idx] - PHY_CARRIER_OFFSET;
+#if (!CONFIG_MAC_COMMON_EOC_TONEMASK)
bool dtc_on = false;
+#else
+ bool dtc_on = true;
+#endif
dbg_assert_ptr (tonemask);
/* Slow loop, but only done at boot time. */
for (i = 0; i < PHY_TONEMASK_WORDS; i++)
diff --git a/cesar/mac/common/sta.h b/cesar/mac/common/sta.h
index b3dfa15161..c52f65efa5 100644
--- a/cesar/mac/common/sta.h
+++ b/cesar/mac/common/sta.h
@@ -19,6 +19,8 @@
#include "ce/rx/bitloading/bitloading.h"
#include "ce/rx/bitloading/intervals.h"
+#include "config/mac/common.h"
+
/** Station information. Must be < BLK_SIZE. */
struct sta_t
{
@@ -42,6 +44,18 @@ struct sta_t
cl_data_rate_t tx_data_rate;
/** Data rate for receive from this station to the local one. */
cl_data_rate_t rx_data_rate;
+#if CONFIG_MAC_COMMON_EOC_SCHED
+ /** Should STA be regularly polled. */
+ bool tdma_poll;
+ /** Beacon periods until next poll. */
+ u32 bp_before_poll;
+ /** Number of concesutive polls with no data exchange. */
+ u8 empty_poll;
+ /** STA is not replying. */
+ u16 poll_off;
+ /** Pending PB for this STA. */
+ uint sppb;
+#endif
/** Attenuation from the AGC status. */
u32 agc_gain_valid;
/** Attenuation from the AGC. */
diff --git a/cesar/mac/common/store.h b/cesar/mac/common/store.h
index c492e8f792..aabaa64fe9 100644
--- a/cesar/mac/common/store.h
+++ b/cesar/mac/common/store.h
@@ -405,6 +405,59 @@ mac_store_get_free_tx_llid (mac_store_t *ctx);
int
mac_store_get_free_tei (mac_store_t *ctx);
+#if CONFIG_MAC_COMMON_EOC_MFS
+
+/**
+ * Retrieve a TX data MFS.
+ * \param ctx store context
+ * \param lid link id
+ * \param tei peer terminal equipment id
+ * \return the MFS or NULL if it does not exist
+ * \context ISR, DSR
+ *
+ * This is an optimised version of mac_store_mfs_get for a limited scope.
+ *
+ * This is limited to EoC usage (LLID).
+ */
+mfs_tx_t *
+mac_store_mfs_get_sta_tx_data_locked (mac_store_t *ctx, uint lid, uint tei);
+
+/**
+ * Retrieve a TX MME MFS.
+ * \param ctx store context
+ * \param tei peer terminal equipment id
+ * \return the MFS or NULL if it does not exist
+ * \context ISR, DSR
+ *
+ * This is an optimised version of mac_store_mfs_get for a limited scope.
+ */
+mfs_tx_t *
+mac_store_mfs_get_sta_tx_mme_locked (mac_store_t *ctx, uint tei);
+
+/**
+ * Retrieve a TX broadcast data MFS.
+ * \param ctx store context
+ * \param lid link id
+ * \return the MFS or NULL if it does not exist
+ * \context ISR, DSR
+ *
+ * This is an optimised version of mac_store_mfs_get for a limited scope.
+ */
+mfs_tx_t *
+mac_store_mfs_get_bcast_tx_data_locked (mac_store_t *ctx, uint lid);
+
+/**
+ * Retrieve the TX broadcast MME MFS.
+ * \param ctx store context
+ * \return the MFS or NULL if it does not exist
+ * \context ISR, DSR
+ *
+ * This is an optimised version of mac_store_mfs_get for a limited scope.
+ */
+mfs_tx_t *
+mac_store_mfs_get_bcast_tx_mme_locked (mac_store_t *ctx);
+#endif
+
END_DECLS
#endif /* mac_common_store_h */
diff --git a/cesar/mac/common/test/store/Config b/cesar/mac/common/test/store/Config
index ad48be57b6..3d154e4594 100644
--- a/cesar/mac/common/test/store/Config
+++ b/cesar/mac/common/test/store/Config
@@ -1 +1,4 @@
CONFIG_BLK_NB = 16384
+CONFIG_MAC_COMMON_EOC_MFS = y
+CONFIG_MAC_PBPROC_EOC_FC = y
+CONFIG_MAC_COMMON_EOC_SCHED = y \ No newline at end of file
diff --git a/cesar/mac/common/test/store/override/mac/common/mfs.h b/cesar/mac/common/test/store/override/mac/common/mfs.h
index 576f9d6e0c..7ad47012a8 100644
--- a/cesar/mac/common/test/store/override/mac/common/mfs.h
+++ b/cesar/mac/common/test/store/override/mac/common/mfs.h
@@ -37,6 +37,7 @@ typedef struct mfs_rx_t mfs_rx_t;
struct mfs_tx_t
{
mfs_common_t common;
+ int seg_nb;
};
typedef struct mfs_tx_t mfs_tx_t;
diff --git a/cesar/mac/common/test/store/override/mac/common/sta.h b/cesar/mac/common/test/store/override/mac/common/sta.h
index 90fd84983e..56592c3967 100644
--- a/cesar/mac/common/test/store/override/mac/common/sta.h
+++ b/cesar/mac/common/test/store/override/mac/common/sta.h
@@ -17,6 +17,7 @@
struct sta_t
{
uint tei;
+ uint tdma_poll;
u8 *dyn;
};
typedef struct sta_t sta_t;
diff --git a/cesar/mac/common/test/store/src/test_store.c b/cesar/mac/common/test/store/src/test_store.c
index 3e024ce90d..d81ca25eb0 100644
--- a/cesar/mac/common/test/store/src/test_store.c
+++ b/cesar/mac/common/test/store/src/test_store.c
@@ -10,6 +10,7 @@
* \brief Test MAC store.
* \ingroup test
*/
+#include "config.h"
#include "common/std.h"
#include "common/defs/homeplugAV.h"
@@ -82,14 +83,15 @@ add_rnd_mfs (test_store_t *ctx, test_t t)
tx = lib_rnd_flip_coin (ctx->rnd, LIB_RND_RATIO (0.5));
bcast = lib_rnd_flip_coin (ctx->rnd, LIB_RND_RATIO (0.2));
mme = lib_rnd_flip_coin (ctx->rnd, LIB_RND_RATIO (0.1));
- lid = mme ? MAC_LID_NONE : lib_rnd_uniform (ctx->rnd, MAC_LID_NB + 2);
+ lid = mme ? MAC_LID_NONE : lib_rnd_uniform (ctx->rnd,
+ bcast ? MAC_PLID_NB : MAC_LID_NB + 2);
unassoc = lib_rnd_flip_coin (ctx->rnd, LIB_RND_RATIO (0.005));
- if (lid >= MAC_LID_NB && !unassoc)
+ if (!mme && lid >= MAC_LID_NB && !unassoc)
{
tx = true;
bcast = true;
- mme = false;
- lid = lid == MAC_LID_NB ? MAC_LID_DISCOVER : MAC_LID_SPC_CENTRAL;
+ lid = lid == MAC_LID_NB && !CONFIG_MAC_COMMON_EOC_MFS
+ ? MAC_LID_DISCOVER : MAC_LID_SPC_CENTRAL;
}
lid_alias = MAC_LID_IS_GLID (lid) && !unassoc
? lib_rnd_uniform (ctx->rnd, MAC_LLID_NB) + MAC_LLID_MIN
@@ -102,9 +104,9 @@ add_rnd_mfs (test_store_t *ctx, test_t t)
&& *used_mfs (ctx, tx, bcast, mme, lid_alias, tei)));
uint addlid = lid_alias == MAC_LID_NONE ? lid : lid_alias;
/* The STA will be automatically added if needed. */
+ /* CAUSION: In EoC LLID needs station! */
if (MAC_TEI_IS_STA (tei) && !ctx->used_tei[tei]
- && !(unassoc || (tx && bcast) || (tx && MAC_LID_IS_LLID (addlid))
- || MAC_LID_IS_GLID (addlid)))
+ && !(unassoc || (tx && bcast) || MAC_LID_IS_GLID (addlid)))
{
ctx->used_tei[tei] = true;
ctx->used_tei_nb++;
@@ -339,9 +341,11 @@ store_basic_test_case (test_t t)
}
}
}
+ /* LLID is always related to station in EoC
uint free_llid = mac_store_get_free_tx_llid (ctx->store);
test_fail_unless (ctx->used_mfs_set[true][false][false]
[free_llid][0] == false);
+ */
uint free_tei = mac_store_get_free_tei (ctx->store);
test_fail_unless (ctx->used_tei[free_tei] == false);
}
diff --git a/cesar/mac/common/test/tonemap/Config b/cesar/mac/common/test/tonemap/Config
new file mode 100644
index 0000000000..59b91c0839
--- /dev/null
+++ b/cesar/mac/common/test/tonemap/Config
@@ -0,0 +1 @@
+CONFIG_MAC_COMMON_EOC_TONEMASK = y
diff --git a/cesar/mac/common/test/tonemap/src/test_tonemap.c b/cesar/mac/common/test/tonemap/src/test_tonemap.c
index b85652fba9..7cfd2d2a6a 100644
--- a/cesar/mac/common/test/tonemap/src/test_tonemap.c
+++ b/cesar/mac/common/test/tonemap/src/test_tonemap.c
@@ -19,6 +19,7 @@
#include "mac/common/tonemask.h"
#include "mac/common/timings.h"
#include "ce/common/mod.h"
+#include "config/mac/common/eoc/tonemask.h"
void
tonemap_access_test (test_t t)
@@ -392,9 +393,14 @@ tonemap_tonemask_test_case (test_t t)
test_begin (t, "default")
{
carrier_nb = tonemask_default (ti.tonemask);
+#if (!CONFIG_MAC_COMMON_EOC_TONEMASK)
test_fail_unless (carrier_nb == 917);
+#else
+ test_fail_unless (carrier_nb == 1366);
+#endif
#define __(n) \
((ti.tonemask[((n) - 74) / 32] >> ((((n) - 74) % 32) / 8 * 8)) & 0xff)
+#if (!CONFIG_MAC_COMMON_EOC_TONEMASK)
test_fail_unless (__ (74) == 0xff); /* 74 */
test_fail_unless (__ (85) == 0x0f); /* 85 */
test_fail_unless (__ (419) == 0x03); /* 419 */
@@ -403,6 +409,16 @@ tonemap_tonemask_test_case (test_t t)
test_fail_unless (__ (1143) == 0xc0); /* 1143 */
test_fail_unless (__ (1144) == 0xc0); /* 1144 */
test_fail_unless (__ (1229) == 0xff); /* 1229 */
+#else
+ test_fail_unless (__ (74) == 0x00); /* 74 */
+ test_fail_unless (__ (85) == 0x00); /* 85 */
+ test_fail_unless (__ (419) == 0x00); /* 419 */
+ test_fail_unless (__ (569) == 0x00); /* 569 */
+ test_fail_unless (__ (856) == 0x00); /* 856 */
+ test_fail_unless (__ (1143) == 0x00); /* 1143 */
+ test_fail_unless (__ (1144) == 0x00); /* 1144 */
+ test_fail_unless (__ (1450) == 0xff); /* 1229 */
+#endif
#undef __
} test_end;
test_begin (t, "carrier nb")
diff --git a/cesar/mac/common/timings.h b/cesar/mac/common/timings.h
index 16d48302b4..04ec6cf51a 100644
--- a/cesar/mac/common/timings.h
+++ b/cesar/mac/common/timings.h
@@ -13,6 +13,8 @@
* \ingroup mac_common
*/
+#include "config/atu/factor.h"
+
/** Number of ticks per microsecond. */
#define MAC_TCK_PER_US 25
@@ -32,9 +34,9 @@
#define MAC_TCK_TO_US(tck) ((tck) / MAC_TCK_PER_US)
/** Convert ticks to allocation time unit.
* \warning returned value rounded up. */
-#define MAC_TCK_TO_ATU(tck) CEIL_DIV ((tck), 256)
+#define MAC_TCK_TO_ATU(tck) CEIL_DIV ((tck), (256 * CONFIG_ATU_FACTOR))
/** Convert allocation time unit to ticks. */
-#define MAC_ATU_TO_TCK(atu) ((atu) * 256)
+#define MAC_ATU_TO_TCK(atu) ((atu) * 256 * CONFIG_ATU_FACTOR)
/** Convert frame length unit to ticks. */
#define MAC_FL_TO_TCK(fl) ((fl) * MAC_TCK_PER_FL)
/** Convert ticks to frame length unit, round up. */
diff --git a/cesar/mac/common/tonemap.h b/cesar/mac/common/tonemap.h
index c459b569b5..3e492df2ef 100644
--- a/cesar/mac/common/tonemap.h
+++ b/cesar/mac/common/tonemap.h
@@ -80,7 +80,7 @@ typedef enum tonemap_sound_reason_code_t tonemap_sound_reason_code_t;
#define TONEMAP_BITS_PER_SYMBOL_MAX (10 * PHY_CARRIER_NB)
/** Tonemaps life duration since last refresh before it becomes stale */
-#define TONEMAPS_LIFE_DURATION_S 30
+#define TONEMAPS_LIFE_DURATION_S 3600
/**
* Position of the header of the tone map in the allocated data.
@@ -94,7 +94,7 @@ typedef enum tonemap_sound_reason_code_t tonemap_sound_reason_code_t;
* Number of frames sound to receive before the PBProc send a sound complete
* flag to the peer.
*/
-#define TONEMAP_SOUND_FRAME_COUNTER 22
+#define TONEMAP_SOUND_FRAME_COUNTER 4
/**
* Tone map in use flag.
diff --git a/cesar/mac/pbproc/Config b/cesar/mac/pbproc/Config
index 39ca0616a6..5459f97df6 100644
--- a/cesar/mac/pbproc/Config
+++ b/cesar/mac/pbproc/Config
@@ -1,5 +1,8 @@
+CONFIG_MAC_PBPROC_EOC_ILRAM = n
CONFIG_GPIO_LED_TRAFFIC = n
CONFIG_GPIO_LED_TRAFFIC_GPIO = 2
CONFIG_GPIO_LED_PBPROC_ALIVE = n
CONFIG_GPIO_LED_PBPROC_ALIVE_GPIO = 3
+CONFIG_GPIO_LED_PBPROC_WORKING = n
+CONFIG_GPIO_LED_PBPROC_WORKING_GPIO = 0
CONFIG_MAC_PBPROC_BEACON_RTSCTS = n
diff --git a/cesar/mac/pbproc/inc/context.h b/cesar/mac/pbproc/inc/context.h
index e0c294762c..d7cfcbc3ea 100644
--- a/cesar/mac/pbproc/inc/context.h
+++ b/cesar/mac/pbproc/inc/context.h
@@ -30,7 +30,8 @@
#define PBPROC_ANTICIP_TCK MAC_US_TO_TCK (80)
/** Anticipation for TX once MPDU is ready to be sent. */
-#define PBPROC_TX_ANTICIP_TCK MAC_US_TO_TCK (22 + 5)
+#define PBPROC_TX_ANTICIP_TCK \
+ (!CONFIG_MAC_PBPROC_EOC_FC ? MAC_US_TO_TCK (22 + 5) : MAC_US_TO_TCK (8))
/** If the total number of PB exceed this threshold, request an interrupt
* before the end of frame reception to compute SACKD. */
@@ -39,14 +40,22 @@
/** Number of PB before frame end for first step of SACKD computation (there
* can be only one PB in the last symbol, and at most three PB in the symbol
* before. */
-#define PBPROC_SACKD_ANTICIP_PB_NB 4
+#define PBPROC_SACKD_ANTICIP_PB_NB (!CONFIG_MAC_PBPROC_EOC_FC ? 4 : 8)
/** Maximum number of channel data retrieved after a frame reception. */
-#define PBPROC_CHANDATA_NB 11
+#define PBPROC_CHANDATA_NB (!CONFIG_MAC_PBPROC_EOC_FC ? 11 : 15)
/** Delay to keep detection valid for HP 1.0 and 1.1. */
#define PBPROC_HP_DETECT_DELAY_TCK MAC_MS_TO_TCK (2000)
+/** Constants for IFS-s, TODO: remove this! */
+#if CONFIG_MAC_PBPROC_EOC_FC
+/** IFS from SOF-RSOF. */
+#define MAC_CF_SOF_RSOF_IFS_TCK MAC_US_TO_TCK (100)
+/** IFS from RSOF-SOF. Also in CA + 40 uS is added to access time. */
+#define MAC_CF_RSOF_SOF_IFS_TCK MAC_US_TO_TCK (60)
+#endif
+
/** SACK data. */
struct pbproc_sackd_t
{
@@ -96,6 +105,10 @@ struct pbproc_recv_mpdu_t
bool drop;
/** SACK data. */
pbproc_sackd_t sackd;
+#if CONFIG_MAC_PBPROC_EOC_FC
+ /** Use infrastructure for ACK but not send */
+ bool send_sack;
+#endif
};
typedef struct pbproc_recv_mpdu_t pbproc_recv_mpdu_t;
@@ -184,6 +197,10 @@ struct pbproc_stat_t
uint aifs;
/** RX: out of an allocation or too near AIFS. */
uint rx_out_of_alloc;
+#if CONFIG_MAC_PBPROC_EOC_FC
+ /** RX: out of an allocation or too near AIFS for RSOF. */
+ uint rx_rsof_out_of_alloc;
+#endif
/** RX: no enough PB in pool. */
uint rx_pool_shortage;
/** RX: handle FC. */
@@ -248,6 +265,12 @@ struct pbproc_stat_t
uint tx_sound_ack;
/** TX: sound, no ack received (FIXME: this includes lost access). */
uint tx_sound_noack;
+#if CONFIG_MAC_PBPROC_EOC_FC
+ /** TX: number of packets sent empty. */
+ uint tx_data_empty;
+ /** TX: number of PB sent. */
+ uint tx_data_pb_total;
+#endif
};
typedef struct pbproc_stat_t pbproc_stat_t;
@@ -311,6 +334,10 @@ struct pbproc_t
phy_chandata_conf_t chandata_conf[PBPROC_CHANDATA_NB];
/** Number of channel data blocks to retrieve after reception. */
uint chandata_nb;
+#if CONFIG_MAC_PBPROC_EOC_FC
+ /** True if station is polled from CCO in current beacon period */
+ bool polled;
+#endif
/** Whether channel data should be collected for data MPDU. */
bool chandata_data;
};
diff --git a/cesar/mac/pbproc/inc/fc.h b/cesar/mac/pbproc/inc/fc.h
index 6c6b004307..686bfe10c5 100644
--- a/cesar/mac/pbproc/inc/fc.h
+++ b/cesar/mac/pbproc/inc/fc.h
@@ -14,11 +14,17 @@
*
* Be careful to bit order.
*/
+#include "common/module.h"
+#include "config/mac/pbproc/eoc.h"
+
+#if MODULE_INCLUDED(mac_common)
#include "mac/common/timings.h"
+#endif
#include "mac/pbproc/inc/sacki_dec.h"
+#if !CONFIG_MAC_PBPROC_EOC_FC
/* See §4.4.1.5.6.11 in HPAV specification for RSOF_FL_AV computation. */
/* Convert RSOF_FL_AV value to tick. */
#define PBPROC_FC_RSOF_FL_AV_TO_TCK(fl) \
@@ -29,6 +35,7 @@
((tck) > MAC_FL_TO_TCK (512) ? CEIL_DIV ((tck) - MAC_FL_TO_TCK (512), \
2 * MAC_TCK_PER_FL) + 512 \
: MAC_TCK_TO_FL (tck))
+#endif
/** Delimiter type. */
enum pbproc_fc_dt_t
@@ -120,6 +127,7 @@ typedef struct pbproc_fc_beacon_t pbproc_fc_beacon_t;
#define PBPROC_FC_BEACON_W3__BTO3_MSB8 7, 0
#define PBPROC_FC_BEACON_W3__FCCS_AV 31, 8
+#if !CONFIG_MAC_PBPROC_EOC_FC
/** Start Of Frame frame control. */
struct pbproc_fc_sof_t
{
@@ -192,6 +200,91 @@ struct pbproc_fc_sof_t
/** FCCS. */
uint fccs_av:24;)
};
+#else
+/** Start Of Frame EoC */
+struct pbproc_fc_sof_t
+{
+ BITFIELDS_WORD(
+ /** Delimiter type. */
+ pbproc_fc_dt_t dt_av:3;,
+ /** Access field. */
+ bool access:1;,
+ /** Short network identifier. */
+ uint snid:4;,
+ /** Destination terminal equipment identifier. */
+ uint dtei:8;,
+ /** Link identifier. */
+ uint lid:4;,
+ /** Encryption key select. */
+ uint eks:2;,
+ /** terminal equipment identifier
+ direction 0 C->S, 1 S->C. */
+ bool direction:1;,
+ /** PB size, true for 136. */
+ bool pbsz:1;,
+ /** Number of symbols. */
+ uint num_sym:2;,
+ /** Tone map index. */
+ uint tmi_av:5;,
+ /** Multicast flag. */
+ bool mcf:1;)
+ BITFIELDS_WORD(
+ /** Frame length. */
+ uint fl_av:12;,
+ /** MPDU count. */
+ uint mpdu_cnt:2;,
+ /** Burst count. */
+ uint burst_cnt:2;,
+ /** Max reverse transmission duration. */
+ uint mrdur_fl:12;,
+ /** Multi-network broadcast flag. */
+ bool mnbf:1;,
+ /** Bidirectional burst flag. */
+ bool bbf:1;,
+ uint sackt0:2;)
+ uint sacki0;
+ BITFIELDS_WORD(
+ uint sacki1:8;,
+ /** FCCS. */
+ uint fccs_av:24;)
+};
+
+/** EOC SACK Size. */
+enum pbproc_fc_sacki_eoc_size_t
+{
+ PBPROC_FC_SACKI_EOC_SOF_SIZE = 40, /* two fields: 32+8 */
+ PBPROC_FC_SACKI_EOC_RSOF_SIZE = 53,/* three fields: 32+21 */
+ PBPROC_FC_SACKI_EOC_SOUND_SIZE = 53, /* two fields: 32+21 */
+ PBPROC_FC_SACKI_EOC_SOF_LEFT = PBPROC_FC_SACKI_EOC_SOF_SIZE - 32,
+ PBPROC_FC_SACKI_EOC_RSOF_LEFT = PBPROC_FC_SACKI_EOC_RSOF_SIZE - 32,
+ PBPROC_FC_SACKI_EOC_SOUND_LEFT = PBPROC_FC_SACKI_EOC_SOUND_SIZE - 32,
+};
+
+#define PBPROC_FC_EOC_SOF_W0__DT_AV 2, 0
+#define PBPROC_FC_EOC_SOF_W0__ACCESS 3, 3
+#define PBPROC_FC_EOC_SOF_W0__SNID 7, 4
+#define PBPROC_FC_EOC_SOF_W0__DTEI 15, 8
+#define PBPROC_FC_EOC_SOF_W0__LID 19, 16
+#define PBPROC_FC_EOC_SOF_W0__EKS 21, 20
+#define PBPROC_FC_EOC_SOF_W0__DIRECTION 22, 22
+#define PBPROC_FC_EOC_SOF_W0__PBSZ 23, 23
+#define PBPROC_FC_EOC_SOF_W0__NUM_SYM 25, 24
+#define PBPROC_FC_EOC_SOF_W0__TMI_AV 30, 26
+#define PBPROC_FC_EOC_SOF_W0__MCF 31, 31
+
+#define PBPROC_FC_EOC_SOF_W1__FL_AV 11, 0
+#define PBPROC_FC_EOC_SOF_W1__MPDU_CNT 13, 12
+#define PBPROC_FC_EOC_SOF_W1__BURST_CNT 15, 14
+#define PBPROC_FC_EOC_SOF_W1__MRDUR_FL 27, 16
+#define PBPROC_FC_EOC_SOF_W1__MNBF 28, 28
+#define PBPROC_FC_EOC_SOF_W1__BBF 29, 29
+#define PBPROC_FC_EOC_SOF_W1__SACKT0 31, 30
+
+#define PBPROC_FC_EOC_SOF_W2__SACKI0 31, 0
+
+#define PBPROC_FC_EOC_SOF_W3__SACKI1 7, 0
+
+#endif
typedef struct pbproc_fc_sof_t pbproc_fc_sof_t;
#define PBPROC_FC_SOF_W0__DT_AV 2, 0
@@ -397,6 +490,7 @@ typedef struct pbproc_fc_rts_cts_t pbproc_fc_rts_cts_t;
#define PBPROC_FC_RTS_CTS_W3__RESERVED2 7, 0
#define PBPROC_FC_RTS_CTS_W3__FCCS_AV 31, 8
+#if !CONFIG_MAC_PBPROC_EOC_FC
/** Sound frame control. */
struct pbproc_fc_sound_t
{
@@ -445,6 +539,71 @@ struct pbproc_fc_sound_t
/** FCCS. */
uint fccs_av:24;)
};
+#else
+/** Sound frame control. EOC */
+struct pbproc_fc_sound_t
+{
+ BITFIELDS_WORD(
+ /** Delimiter type. */
+ pbproc_fc_dt_t dt_av:3;,
+ /** Access field. */
+ bool access:1;,
+ /** Short network identifier. */
+ uint snid:4;,
+ /** Destination terminal equipment identifier. */
+ uint dtei:8;,
+ /** Frame length. */
+ uint fl_av:12;,
+ /** Link identifier. */
+ uint lid:4;)
+ BITFIELDS_WORD(
+ /** Type of compression */
+ uint sackt0:2;,
+ /** Direction identifier. */
+ uint direction:1;,
+ /** PB size, true for 136. */
+ bool pbsz:1;,
+ /** Sound ACK flag. */
+ bool saf:1;,
+ /** Sound complete flag. */
+ bool scf:1;,
+ /** Max tone map requested. */
+ uint req_tm:3;,
+ /** MPDU count. */
+ uint mpdu_cnt:2;,
+ /** sacki 0 */
+ uint sacki0:21;)
+ /** sacki 1 */
+ uint sacki1;
+ BITFIELDS_WORD(
+ uint src:8;,
+ /** FCCS. */
+ uint fccs_av:24;)
+};
+
+#define PBPROC_FC_EOC_SOUND_W0__DT_AV 2, 0
+#define PBPROC_FC_EOC_SOUND_W0__ACCESS 3, 3
+#define PBPROC_FC_EOC_SOUND_W0__SNID 7, 4
+#define PBPROC_FC_EOC_SOUND_W0__DTEI 15, 8
+#define PBPROC_FC_EOC_SOUND_W0__FL_AV 27, 16
+#define PBPROC_FC_EOC_SOUND_W0__LID 31, 28
+
+#define PBPROC_FC_EOC_SOUND_W1__SACKT0 1, 0
+#define PBPROC_FC_EOC_SOUND_W1__DIRECTION 2, 2
+#define PBPROC_FC_EOC_SOUND_W1__PBSZ 3, 3
+#define PBPROC_FC_EOC_SOUND_W1__SAF 4, 4
+#define PBPROC_FC_EOC_SOUND_W1__SCF 5, 5
+#define PBPROC_FC_EOC_SOUND_W1__REQ_TM 8, 6
+#define PBPROC_FC_EOC_SOUND_W1__MPDU_CNT 10, 9
+#define PBPROC_FC_EOC_SOUND_W1__SACKI0 31, 11
+
+#define PBPROC_FC_EOC_SOUND_W2__SACKI1 31, 0
+
+#define PBPROC_FC_EOC_SOUND_W3__SRC 7, 0
+#define PBPROC_FC_EOC_SOUND_W3__FCCS_AV 31, 8
+
+
+#endif
typedef struct pbproc_fc_sound_t pbproc_fc_sound_t;
#define PBPROC_FC_SOUND_W0__DT_AV 2, 0
@@ -471,6 +630,7 @@ typedef struct pbproc_fc_sound_t pbproc_fc_sound_t;
#define PBPROC_FC_SOUND_W3__RESERVED2 7, 0
#define PBPROC_FC_SOUND_W3__FCCS_AV 31, 8
+#if !CONFIG_MAC_PBPROC_EOC_FC
/** Reverse SOF frame control. */
struct pbproc_fc_rsof_t
{
@@ -525,6 +685,67 @@ struct pbproc_fc_rsof_t
/** FCCS. */
uint fccs_av:24;)
};
+#else
+/** Reverse SOF frame control EoC. */
+struct pbproc_fc_rsof_t
+{
+ BITFIELDS_WORD(
+ /** Delimiter type. */
+ pbproc_fc_dt_t dt_av:3;,
+ /** Access field. */
+ bool access:1;,
+ /** Short network identifier. */
+ uint snid:4;,
+ /** Destination terminal equipment identifier. */
+ uint dtei:8;,
+ /** SACK type */
+ uint sackt0:2;,
+ /** Reverse SOF frame length. */
+ uint rsof_fl_av:12;,
+ /** Number of symbols. */
+ uint num_sym:2;)
+ /** ACK part 1 */
+ uint sacki0;
+ BITFIELDS_WORD(
+ /** ACK part 2 */
+ uint sacki1:21;,
+ /** LID. */
+ uint lid:4;
+ /** Tone map index. */
+ uint tmi_av:5;,
+ /** Beacon detect flag. */
+ bool bdf:1;,
+ /** PB size, true for 136. */
+ bool pbsz:1;
+ )
+ BITFIELDS_WORD(
+ /** Number of pending PBs in all MFS. */
+ uint sppb:8;,
+ /** FCCS. */
+ uint fccs_av:24;)
+};
+
+#define PBPROC_FC_EOC_RSOF_W0__DT_AV 2, 0
+#define PBPROC_FC_EOC_RSOF_W0__ACCESS 3, 3
+#define PBPROC_FC_EOC_RSOF_W0__SNID 7, 4
+#define PBPROC_FC_EOC_RSOF_W0__DTEI 15, 8
+#define PBPROC_FC_EOC_RSOF_W0__SACKT0 17, 16
+#define PBPROC_FC_EOC_RSOF_W0__RSOF_FL_AV 29, 18
+#define PBPROC_FC_EOC_RSOF_W0__NUM_SYM 31, 30
+
+#define PBPROC_FC_EOC_RSOF_W1__SACKI0 31, 0
+
+#define PBPROC_FC_EOC_RSOF_W2__SACKI1 20, 0
+#define PBPROC_FC_EOC_RSOF_W2__LID 24, 21
+#define PBPROC_FC_EOC_RSOF_W2__TMI_AV 29, 25
+#define PBPROC_FC_EOC_RSOF_W2__BDF 30, 30
+#define PBPROC_FC_EOC_RSOF_W2__PBSZ 31, 31
+
+#define PBPROC_FC_EOC_RSOF_W3__SPPB 7, 0
+#define PBPROC_FC_EOC_RSOF_W3__FCCS_AV 31, 8
+
+#endif
+
typedef struct pbproc_fc_rsof_t pbproc_fc_rsof_t;
#define PBPROC_FC_RSOF_W0__DT_AV 2, 0
diff --git a/cesar/mac/pbproc/inc/prep_mpdu.h b/cesar/mac/pbproc/inc/prep_mpdu.h
index 87eee1deef..d5d7848922 100644
--- a/cesar/mac/pbproc/inc/prep_mpdu.h
+++ b/cesar/mac/pbproc/inc/prep_mpdu.h
@@ -103,6 +103,12 @@ struct pbproc_prep_mpdu_t
bool bypass_aes;
/** AES network encryption key. */
u32 *nek;
+#if CONFIG_MAC_PBPROC_EOC_FC
+ /** Network encryption key select, info from RX SOF */
+ u8 eks;
+ /** bidirection transmission, info from RX SOF */
+ bool bbf;
+#endif
/** Data kept for each individual MPDU. */
pbproc_prep_mpdu_single_t mpdu[PBPROC_PREP_MPDU_NB_MAX];
/** Pointer to current MPDU data, should be synchronised with
@@ -251,6 +257,16 @@ pbproc_prep_mpdu_handle_sack (pbproc_t *ctx, pbproc_fc_ack_data_t *ack_data);
void
pbproc_prep_mpdu_commit_burst (pbproc_t *ctx);
+
+#if CONFIG_MAC_PBPROC_EOC_FC
+/**
+ * Track access timeout for prep mpdu/sound.
+ * \param ctx pbproc context
+ */
+void
+pbproc_prep_mpdu_access_track (pbproc_t *ctx);
+#endif
+
/**
* Acknowledge or cancel a SOUND frame.
* \param ctx pbproc context
diff --git a/cesar/mac/pbproc/pbproc.h b/cesar/mac/pbproc/pbproc.h
index 49e62d1063..755c55e938 100644
--- a/cesar/mac/pbproc/pbproc.h
+++ b/cesar/mac/pbproc/pbproc.h
@@ -71,8 +71,13 @@ struct pbproc_rx_params_t
u8 burst_cnt;
/** Bidirectional burst flag. */
bool bbf;
+#if !CONFIG_MAC_PBPROC_EOC_FC
/** Max reverse transmission frame length. */
u8 mrtfl;
+#else
+ /** Max reverse transmission duration. */
+ uint mrdur_tck;
+#endif
/** Different CP PHY clock flag. */
bool dcppcf;
/** Request SACK retransmission. */
@@ -418,6 +423,17 @@ pbproc_mfs_remove_all (mfs_tx_t *mfs);
int
pbproc_get_interval_group (sta_t *sta, uint offset_tck, uint flp_tck);
+/**
+ * Adjust PBProc parameters according to number of carriers
+ * \param ctx PBProc context
+ * \param adjust use 2 symbols in control and extend EIFS time period
+ *
+ */
+#if CONFIG_MAC_PBPROC_EOC_FC
+void
+pbproc_parameters_adjust (pbproc_t *ctx, bool adjust);
+#endif
+
END_DECLS
#endif /* mac_pbproc_pbproc_h */
diff --git a/cesar/mac/pbproc/src/fsm.c b/cesar/mac/pbproc/src/fsm.c
index b036768935..3af9db4559 100644
--- a/cesar/mac/pbproc/src/fsm.c
+++ b/cesar/mac/pbproc/src/fsm.c
@@ -12,6 +12,8 @@
*/
#include "common/std.h"
+#include "hal/gpio/gpio.h"
+
#include "mac/pbproc/pbproc.h"
#include "mac/pbproc/inc/fsm.h"
@@ -106,8 +108,10 @@ pbproc_fsm_handle_rx_fc_event (pbproc_t *ctx, u32 rx_date, const u32 *fc_av)
PBPROC_TRACE (FSM_RX_FC, phy_date (), rx_date,
fc_av ? fc_av[0] : (u32) -1, fc_av ? fc_av[1] : (u32) -1,
fc_av ? fc_av[2] : (u32) -1, fc_av ? fc_av[3] : (u32) -1);
+ GPIO_SET (LED_PBPROC_WORKING, 1);
ctx->fsm.states[ctx->fsm.current_state].
rx_fc_cb (ctx, rx_date, (const pbproc_fc_t *) fc_av);
+ GPIO_SET (LED_PBPROC_WORKING, 0);
if (ctx->fsm.schedule_deferred)
{
ctx->fsm.schedule_deferred = false;
@@ -123,7 +127,9 @@ pbproc_fsm_handle_access_event (pbproc_t *ctx)
dbg_claim (ctx);
dbg_claim (ctx->fsm.current_state < PBPROC_FSM_STATE_NB);
PBPROC_TRACE (FSM_ACCESS, phy_date ());
+ GPIO_SET (LED_PBPROC_WORKING, 1);
ctx->fsm.states[ctx->fsm.current_state].access_cb (ctx);
+ GPIO_SET (LED_PBPROC_WORKING, 0);
if (ctx->fsm.schedule_deferred)
{
ctx->fsm.schedule_deferred = false;
@@ -139,7 +145,9 @@ pbproc_fsm_handle_access_conf_event (pbproc_t *ctx)
dbg_claim (ctx);
dbg_claim (ctx->fsm.current_state < PBPROC_FSM_STATE_NB);
PBPROC_TRACE (FSM_ACCESS_CONF, phy_date ());
+ GPIO_SET (LED_PBPROC_WORKING, 1);
ctx->fsm.states[ctx->fsm.current_state].access_conf_cb (ctx);
+ GPIO_SET (LED_PBPROC_WORKING, 0);
if (ctx->fsm.schedule_deferred)
{
ctx->fsm.schedule_deferred = false;
@@ -156,7 +164,9 @@ pbproc_fsm_handle_pbdma_event (pbproc_t *ctx, u32 status_word)
dbg_claim (ctx->fsm.current_state < PBPROC_FSM_STATE_NB);
PBPROC_TRACE (FSM_PBDMA, phy_date (), status_word);
ctx->pbdma_status = PHY_PBDMA_STATUS (status_word);
+ GPIO_SET (LED_PBPROC_WORKING, 1);
ctx->fsm.states[ctx->fsm.current_state].pbdma_cb (ctx);
+ GPIO_SET (LED_PBPROC_WORKING, 0);
if (ctx->fsm.schedule_deferred)
{
ctx->fsm.schedule_deferred = false;
diff --git a/cesar/mac/pbproc/src/fsm_handle_fc.c b/cesar/mac/pbproc/src/fsm_handle_fc.c
index ece799b878..fbb2d75c88 100644
--- a/cesar/mac/pbproc/src/fsm_handle_fc.c
+++ b/cesar/mac/pbproc/src/fsm_handle_fc.c
@@ -10,6 +10,8 @@
* \brief FSM handle FC part.
* \ingroup mac_pbproc
*/
+#include "config/av.h"
+
#include "common/std.h"
#include "pbproc.h"
@@ -117,7 +119,8 @@ pbproc_fhfc_handle_fc (pbproc_t *ctx, u32 rx_date, const pbproc_fc_t *fc_av)
if (!fc_av)
{
/* Handle HP 1.0 detection. */
- bool crc_error = pbproc_fhfc_fc10 (ctx, rx_date,
+ bool crc_error = CONFIG_AV_ONLY_MODE
+ || pbproc_fhfc_fc10 (ctx, rx_date,
phy_rx_fc10 (ctx->phy));
if (crc_error)
{
@@ -168,12 +171,15 @@ pbproc_fhfc_beacon (pbproc_t *ctx, u32 rx_date,
static bool ARCH_ILRAM
pbproc_fhfc_parse_sof (pbproc_t *ctx, const pbproc_fc_t *fc_av)
{
+#if !CONFIG_MAC_PBPROC_EOC_FC
dbg_claim (fc_av->sof.clst == false);
/* TODO features. */
dbg_claim (fc_av->sof.dcppcf == false);
dbg_claim (fc_av->sof.rsr == false);
+#endif
pbproc_rx_params_t *rx_params = &ctx->recv_mpdu.rx_params;
bool fc_ok;
+#if !CONFIG_MAC_PBPROC_EOC_FC
u32 sof_w0 = fc_av->words[0];
rx_params->snid = BF_GET (PBPROC_FC_SOF_W0__SNID, sof_w0);
rx_params->dtei = BF_GET (PBPROC_FC_SOF_W0__DTEI, sof_w0);
@@ -222,6 +228,58 @@ pbproc_fhfc_parse_sof (pbproc_t *ctx, const pbproc_fc_t *fc_av)
BF_GET (PBPROC_FC_SOF_W2__MFS_CMD_DATA, sof_w2);
fc_ok = true;
}
+#else
+ u32 sof_w0 = fc_av->words[0];
+ bool direction = BF_GET (PBPROC_FC_EOC_SOF_W0__DIRECTION, sof_w0);
+ rx_params->snid = BF_GET (PBPROC_FC_EOC_SOF_W0__SNID, sof_w0);
+ rx_params->bcast = BF_GET (PBPROC_FC_EOC_SOF_W0__MCF, sof_w0);
+ u32 sof_w1 = fc_av->words[1];
+ u8 tei = ctx->config->tei;
+ rx_params->multi_net_bcast = BF_GET (PBPROC_FC_EOC_SOF_W1__MNBF, sof_w1);
+ if (direction)
+ {
+ rx_params->tei = BF_GET (PBPROC_FC_EOC_SOF_W0__DTEI, sof_w0);
+ rx_params->dtei = MAC_TEI_CCO_DEF;
+ }
+ else
+ {
+ rx_params->dtei = BF_GET (PBPROC_FC_EOC_SOF_W0__DTEI, sof_w0);
+ rx_params->tei = MAC_TEI_CCO_DEF;
+ }
+ /* frame is for us */
+ if (!BF_GET (PBPROC_FC_SOF_W0__ACCESS, sof_w0)
+ && ((rx_params->snid == ctx->alloc.snid) || rx_params->multi_net_bcast)
+ && ((rx_params->dtei && rx_params->dtei == tei)
+ || rx_params->bcast
+ || (direction && MAC_TEI_IS_EOC_CCO(tei))))
+ {
+ rx_params->sound = false;
+ rx_params->lid = BF_GET (PBPROC_FC_EOC_SOF_W0__LID, sof_w0);
+ rx_params->cfp = ctx->access.cfp;
+ rx_params->bdf = 0;
+ rx_params->hp10df = false;
+ rx_params->hp11df = false;
+ rx_params->eks = BF_GET (PBPROC_FC_EOC_SOF_W0__EKS, sof_w0);
+ rx_params->pending_seg_info = 0;
+ rx_params->ble = 0;
+ rx_params->pb_size = BF_GET (PBPROC_FC_EOC_SOF_W0__PBSZ, sof_w0)
+ ? PHY_PB_SIZE_136 : PHY_PB_SIZE_520;
+ rx_params->num_sym = BF_GET (PBPROC_FC_EOC_SOF_W0__NUM_SYM, sof_w0);
+ rx_params->tmi_av = BF_GET (PBPROC_FC_EOC_SOF_W0__TMI_AV, sof_w0);
+ rx_params->fl_tck = MAC_FL_TO_TCK (
+ BF_GET (PBPROC_FC_EOC_SOF_W1__FL_AV, sof_w1));
+ rx_params->mpdu_cnt = BF_GET (PBPROC_FC_EOC_SOF_W1__MPDU_CNT, sof_w1);
+ rx_params->burst_cnt = BF_GET (PBPROC_FC_EOC_SOF_W1__BURST_CNT, sof_w1);
+ rx_params->mrdur_tck = MAC_FL_TO_TCK (
+ BF_GET (PBPROC_FC_EOC_SOF_W1__MRDUR_FL, sof_w1));
+ rx_params->bbf = BF_GET (PBPROC_FC_EOC_SOF_W1__BBF, sof_w1);
+ rx_params->dcppcf = false;
+ rx_params->rsr = false;
+ rx_params->mfs_cmd_mme = MFS_FSM_CMD_NOP;
+ rx_params->mfs_cmd_data = MFS_FSM_CMD_NOP;
+ fc_ok = true;
+ }
+#endif
else
{
/** FC is not for us, it will be ignored. */
@@ -234,8 +292,55 @@ static bool ARCH_ILRAM
pbproc_fhfc_parse_rsof (pbproc_t *ctx, const pbproc_fc_t *fc_av)
{
bool fc_ok = false;
+#if CONFIG_MAC_PBPROC_EOC_FC
+ pbproc_rx_params_t *rx_params = &ctx->recv_mpdu.rx_params;
+ u32 sof_w0 = fc_av->words[0];
+ rx_params->snid = BF_GET (PBPROC_FC_EOC_RSOF_W0__SNID, sof_w0);
+ if (!BF_GET (PBPROC_FC_EOC_RSOF_W0__ACCESS, sof_w0)
+ && (rx_params->snid == ctx->alloc.snid)
+ && ctx->prep_mpdu.valid
+ && ctx->prep_mpdu.bbf
+ && (fc_av->rsof.dtei == ctx->prep_mpdu.dtei))
+ {
+ rx_params->tei = BF_GET (PBPROC_FC_EOC_RSOF_W0__DTEI, sof_w0);
+ rx_params->dtei = MAC_TEI_CCO_DEF;
+ u32 sof_w2 = fc_av->words[2];
+ rx_params->bcast = false;
+ rx_params->multi_net_bcast = false;
+ rx_params->eks = ctx->prep_mpdu.eks;
+ ctx->recv_mpdu.rx_params.fl_tck = MAC_FL_TO_TCK (
+ BF_GET (PBPROC_FC_EOC_RSOF_W0__RSOF_FL_AV, sof_w0));
+ rx_params->num_sym = BF_GET (PBPROC_FC_EOC_RSOF_W0__NUM_SYM, sof_w0);
+ rx_params->mpdu_cnt = 0;
+ rx_params->bdf = BF_GET (PBPROC_FC_EOC_RSOF_W2__BDF, sof_w2);
+ rx_params->hp10df = false;
+ rx_params->hp11df = false;
+ rx_params->mfs_cmd_data = MFS_FSM_CMD_NOP;
+ rx_params->mfs_cmd_mme = MFS_FSM_CMD_NOP;
+ rx_params->sound = false;
+ rx_params->ble = 0;
+ rx_params->pb_size = BF_GET (PBPROC_FC_EOC_RSOF_W2__PBSZ, sof_w2)
+ ? PHY_PB_SIZE_136 : PHY_PB_SIZE_520;;
+ rx_params->cfp = ctx->access.cfp;
+ rx_params->tmi_av = BF_GET (PBPROC_FC_EOC_RSOF_W2__TMI_AV, sof_w2);
+ rx_params->bbf = false;
+ rx_params->lid = BF_GET (PBPROC_FC_EOC_RSOF_W2__LID, sof_w2);
+ u32 sof_w3 = fc_av->words[3];
+ u8 sppb = BF_GET (PBPROC_FC_EOC_RSOF_W3__SPPB, sof_w3);
+ rx_params->pending_seg_info = sppb >> 4;
+ if ((sppb & 0xf) != 0xf)
+ {
+ /* Support old stations. */
+ rx_params->lid = ctx->prep_mpdu.lid != MAC_LID_NONE
+ ? ctx->prep_mpdu.lid : MAC_LLID_MIN;
+ rx_params->pending_seg_info = sppb ? 1 : 0;
+ }
+ fc_ok = true;
+ }
+#else
/* For the moment, this function returns an error everytime because we do
* not handle RSOFs. So they will be processed as frames not for us. */
+#endif
return fc_ok;
}
@@ -279,8 +384,13 @@ pbproc_fhfc_rsof (pbproc_t *ctx, u32 rx_date, const pbproc_fc_t *fc_av)
* it will be a SACK or a SOF. */
ctx->stats.rx_nfu++;
phy_rx_prepare_short (ctx->phy);
+#if CONFIG_MAC_PBPROC_EOC_FC
+ u32 next_date = rx_date + ctx->times.pre_fcs_tck
+ + MAC_FL_TO_TCK (fc_av->rsof.rsof_fl_av);
+#else
u32 next_date = rx_date + ctx->times.pre_fcs_tck
+ PBPROC_FC_RSOF_FL_AV_TO_TCK (fc_av->rsof.rsof_fl_av);
+#endif
ca_access_vcs_restart_eifs (ctx->ca, next_date);
phy_rx_activate (ctx->phy, false, next_date, true);
pbproc_fsm_change_state (ctx, PBPROC_FSM_STATE_IDLE);
@@ -349,7 +459,16 @@ pbproc_fhfc_sound (pbproc_t *ctx, u32 rx_date, const pbproc_fc_sound_t *sound)
{
if (sound->access == false
&& sound->snid == ctx->alloc.snid
+#if CONFIG_MAC_PBPROC_EOC_FC
+ && ((sound->dtei == ctx->config->tei && !sound->direction)
+ || (MAC_TEI_IS_EOC_CCO(ctx->config->tei)
+ && sound->direction
+ && ctx->prep_mpdu.valid
+ && ctx->prep_mpdu.bbf
+ && sound->dtei == ctx->prep_mpdu.dtei))
+#else
&& sound->dtei == ctx->config->tei
+#endif
&& !sound->saf
&& ((sound->src <= TONEMAP_SRC_TMI_MAX
&& sound->src >= TONEMAP_SRC_TMI_MIN)
@@ -389,7 +508,12 @@ pbproc_fhfc_bad (pbproc_t *ctx, u32 rx_date)
{
dbg_claim (ctx);
phy_rx_prepare_short (ctx->phy);
- ca_access_vcs_restart_eifs (ctx->ca, rx_date);
+ if (CONFIG_MAC_PBPROC_EOC_FC)
+ /* We call this function only to have a EoC reschedule.
+ * As scheduling is done in ca_access_compute. */
+ ca_access_vcs_restart (ctx->ca, rx_date + ctx->times.max_fl_tck);
+ else
+ ca_access_vcs_restart_eifs (ctx->ca, rx_date);
phy_rx_activate (ctx->phy, false, rx_date + ctx->times.pre_fcs_tck
+ PHY_RX_ACTIVATE_DELAY_AFTER_SHORT_TCK, true);
pbproc_fsm_change_state (ctx, PBPROC_FSM_STATE_IDLE);
diff --git a/cesar/mac/pbproc/src/fsm_rx_beacon.c b/cesar/mac/pbproc/src/fsm_rx_beacon.c
index c9caa57e48..9fa02a5638 100644
--- a/cesar/mac/pbproc/src/fsm_rx_beacon.c
+++ b/cesar/mac/pbproc/src/fsm_rx_beacon.c
@@ -26,7 +26,11 @@ pbproc_frbe_init (pbproc_t *ctx)
CALLBACK (pbproc_frbe__rx_beacon__pbdma);
}
+#if CONFIG_MAC_PBPROC_EOC_ILRAM
+void
+#else
void ARCH_ILRAM
+#endif
pbproc_frbe__handle (pbproc_t *ctx, u32 rx_date,
const pbproc_fc_beacon_t *beacon)
{
@@ -46,7 +50,8 @@ pbproc_frbe__handle (pbproc_t *ctx, u32 rx_date,
+ MAC_B2BIFS_TCK;
ctx->recv_mpdu.ack_date = rx_date + flp_tck;
/* Ignore frames ending after the allocation, handle pool exhaustion. */
- if ((!ctx->alloc.merge
+ if ((!CONFIG_MAC_PBPROC_EOC_FC
+ && !ctx->alloc.merge
&& less_mod2p32 (ctx->alloc.end_date + MAC_TOLERANCE_TCK,
ctx->recv_mpdu.ack_date - MAC_B2BIFS_TCK))
|| ctx->rx_pool_size < 1)
@@ -84,7 +89,11 @@ pbproc_frbe__handle (pbproc_t *ctx, u32 rx_date,
pbproc_fsm_change_state (ctx, PBPROC_FSM_STATE_RX_BEACON);
}
+#if CONFIG_MAC_PBPROC_EOC_ILRAM
+void
+#else
void ARCH_ILRAM
+#endif
pbproc_frbe__rx_beacon__pbdma (pbproc_t *ctx)
{
dbg_claim (ctx);
diff --git a/cesar/mac/pbproc/src/fsm_rx_data.c b/cesar/mac/pbproc/src/fsm_rx_data.c
index f54629f1ac..ba75a36321 100644
--- a/cesar/mac/pbproc/src/fsm_rx_data.c
+++ b/cesar/mac/pbproc/src/fsm_rx_data.c
@@ -33,7 +33,11 @@ pbproc_frda_vcs_restart (pbproc_t *ctx);
* Anticipate SACK sending for hybrid mode.
* \param ctx pbproc context
*/
+#if CONFIG_MAC_PBPROC_EOC_ILRAM
+static inline void
+#else
static void
+#endif
pbproc_frda_send_sack_anticip (pbproc_t *ctx);
/**
@@ -85,6 +89,56 @@ pbproc_frda_init (pbproc_t *ctx)
CALLBACK (pbproc_frda__rx_burst__access);
}
+#if CONFIG_MAC_COMMON_EOC_SCHED
+/**
+ * The number of active stations which change the poll behavior, under this
+ * value, all stations are polled at each new beacon period.
+ */
+#define PBPROC_STA_ACTIVE_CHANGE_POLL_ALGO 4
+#define PBPROC_EMPTY_POLL_SPC_ALGO 1
+
+static inline void
+pbproc_next_poll_update (pbproc_t *ctx)
+{
+ /* examine only unicast frames */
+ if (MAC_TEI_IS_STA (ctx->prep_mpdu.dtei))
+ {
+ sta_t *sta = mac_store_sta_get_noref (ctx->store,
+ ctx->prep_mpdu.dtei);
+ /* check last poll */
+ if (sta)
+ {
+ u32 bp_delay [] = {0, 0, 1, 1, 2, 2, 3};
+ if (!ctx->recv_mpdu.pb_nb && !ctx->prep_mpdu.burst_seg_nb)
+ {
+ if (sta->empty_poll < COUNT (bp_delay))
+ sta->empty_poll++;
+ }
+ else
+ {
+ sta->empty_poll = 0;
+ }
+ /* Poll now. */
+ sta->bp_before_poll = 0;
+ sta->sppb = ctx->recv_mpdu.rx_params.pending_seg_info;
+ if (ca_sta_active_nb (ctx->ca)
+ < PBPROC_STA_ACTIVE_CHANGE_POLL_ALGO
+ && sta->empty_poll > PBPROC_EMPTY_POLL_SPC_ALGO)
+ {
+ /* Wait one beacon period before polling. */
+ sta->bp_before_poll += 1;
+ }
+ else
+ {
+ /* Update bp_before_poll. */
+ sta->bp_before_poll += bp_delay [sta->empty_poll];
+ }
+ ca_sta_update (ctx->ca, sta);
+ }
+ }
+}
+#endif
+
void ARCH_ILRAM
pbproc_frda__handle (pbproc_t *ctx, u32 rx_date)
{
@@ -101,6 +155,9 @@ pbproc_frda__handle (pbproc_t *ctx, u32 rx_date)
&& rx_params->dtei == ctx->config->tei;
/* PB Size. */
pb_size = rx_params->pb_size;
+#if CONFIG_MAC_PBPROC_EOC_FC
+ ctx->recv_mpdu.send_sack = true;
+#endif
/* Ignore frames ending after the allocation. */
uint fl_tck = rx_params->fl_tck;
if (!ctx->alloc.merge
@@ -174,7 +231,7 @@ pbproc_frda__handle (pbproc_t *ctx, u32 rx_date)
pb_nb = ((symb_nb - 1) * tm->bits_per_symbol + bits_per_pb)
/ bits_per_pb;
/* Stop if no PB. */
- if (!pb_nb)
+ if ((!CONFIG_MAC_PBPROC_EOC_FC || symb_nb > 0) && !pb_nb)
{
ctx->stats.rx_data_empty++;
pbproc_frda_error (ctx, rx_date, wack,
@@ -247,8 +304,16 @@ pbproc_frda__handle (pbproc_t *ctx, u32 rx_date)
/* First thing to do: unblock the hardware. */
if (rx_params->tmi_av >= PHY_MOD_ROBO_NB)
phy_set_tonemap (ctx->phy, tm->tmdma_desc_head);
- phy_rx_prepare (ctx->phy, pb_nb, tm->phy_combo_params[pb_size],
- tm->gil, symb_nb, tm->tcc_halfit);
+ if (!CONFIG_MAC_PBPROC_EOC_FC || pb_nb)
+ {
+ phy_rx_prepare (ctx->phy, pb_nb, tm->phy_combo_params[pb_size],
+ tm->gil, symb_nb, tm->tcc_halfit);
+ }
+ else
+ {
+ phy_rx_prepare_short (ctx->phy);
+ ctx->stats.rx_data_empty++;
+ }
/* Save received MPDU parameters. */
ctx->recv_mpdu.rx_params.preamble_ntb = rx_date
+ ctx->config->ntb_offset_tck;
@@ -297,8 +362,36 @@ pbproc_frda__handle (pbproc_t *ctx, u32 rx_date)
else
pb_it = pb_nb;
ctx->recv_mpdu.pb_head = pool;
- phy_pbdma_start (ctx->phy, bypass_aes, key, pb_nb, pb_it, &pool->phy_pb,
- &ctx->recv_mpdu.chandata_head->phy_pb.chandata, true);
+ if (!CONFIG_MAC_PBPROC_EOC_FC || pb_nb)
+ phy_pbdma_start (ctx->phy, bypass_aes, key, pb_nb, pb_it, &pool->phy_pb,
+ &ctx->recv_mpdu.chandata_head->phy_pb.chandata, true);
+#if CONFIG_MAC_COMMON_EOC_SCHED
+ if (MAC_TEI_IS_EOC_CCO (ctx->config->tei))
+ pbproc_next_poll_update (ctx);
+ else if (ctx->config->tei == rx_params->dtei)
+ ctx->polled = true;
+#endif
+#if CONFIG_MAC_PBPROC_EOC_FC
+ rx_params->agc_gain = phy_rx_agc_gain (ctx->phy);
+ bool near_end_of_alloc = false;
+ /* Check SOF/RSOF do not overflow allocation. */
+ if (!ctx->alloc.merge
+ && less_mod2p32 (ctx->alloc.end_date, ctx->recv_mpdu.ack_date
+ + MAC_CF_SOF_RSOF_IFS_TCK
+ + (rx_params->bbf ? rx_params->mrdur_tck
+ : (2 * ctx->times.pre_fcs_tck
+ + MAC_RIFS_DEFAULT_TCK))))
+ {
+ near_end_of_alloc = true;
+ if (rx_params->bbf)
+ ctx->stats.rx_rsof_out_of_alloc++;
+ }
+ /* Determine if a SACK must be sent. */
+ ctx->recv_mpdu.send_sack = wack
+ && (!rx_params->cfp
+ || (!rx_params->bbf && MAC_TEI_IS_EOC_STA (rx_params->dtei))
+ || near_end_of_alloc);
+#endif
/* Get AGC gain value for this MPDU. */
rx_params->agc_gain = phy_rx_agc_gain (ctx->phy);
/* Program VCS. */
@@ -312,16 +405,27 @@ pbproc_frda__handle (pbproc_t *ctx, u32 rx_date)
pbproc_fsm_change_state (ctx, sack_last_pb
? PBPROC_FSM_STATE_RX_DATA_WACK
: PBPROC_FSM_STATE_RX_DATA_WACK_LAST_PB);
+ if (CONFIG_MAC_PBPROC_EOC_FC && !pb_nb)
+ {
+ u32 status_word = 0;
+ ctx->pbdma_status = PHY_PBDMA_STATUS (status_word);
+ pbproc_frda__rx_data_wack_last_pb__pbdma(ctx); /* simulation */
+ }
ctx->stats.rx_data_wack++;
}
else
{
/* Wait end of frame. */
pbproc_fsm_change_state (ctx, PBPROC_FSM_STATE_RX_DATA_WOACK);
+ if (CONFIG_MAC_PBPROC_EOC_FC && !pb_nb)
+ pbproc_frda__rx_data_woack__pbdma(ctx); /* simulation */
ctx->stats.rx_data_woack++;
}
- /* Signal received traffic. */
- GPIO_SET (LED_TRAFFIC, 1);
+ if (!CONFIG_MAC_PBPROC_EOC_FC)
+ {
+ /* Signal received traffic. */
+ GPIO_SET (LED_TRAFFIC, 1);
+ }
}
void ARCH_ILRAM
@@ -348,7 +452,11 @@ pbproc_frda__rx_data_wack_last_pb__pbdma (pbproc_t *ctx)
dbg_claim (ctx);
uint mpdu_cnt = ctx->recv_mpdu.rx_params.mpdu_cnt;
/* Prepare FC 1.0 in advance. */
+#if CONFIG_MAC_PBPROC_EOC_FC
+ if (ctx->recv_mpdu.send_sack && mpdu_cnt == 0)
+#else
if (mpdu_cnt == 0)
+#endif
pbproc_frda_send_sack_anticip (ctx);
/* Prepare SACKD. */
ctx->recv_mpdu.sackd.any_pb_crc_error =
@@ -391,7 +499,11 @@ pbproc_frda__rx_data_wack_last_pb__pbdma (pbproc_t *ctx)
}
/* TODO: Handle bidir. */
/* Send SACK if not a burst MPDU. */
+#if CONFIG_MAC_PBPROC_EOC_FC
+ if (ctx->recv_mpdu.send_sack && mpdu_cnt == 0)
+#else
if (mpdu_cnt == 0)
+#endif
pbproc_frda_send_sack (ctx);
/* Unchain and give received frame to upper layer. */
pbproc_frda_commit (ctx);
@@ -417,6 +529,11 @@ static void ARCH_ILRAM
pbproc_frda_commit (pbproc_t *ctx)
{
dbg_claim (ctx);
+ if (CONFIG_MAC_PBPROC_EOC_FC && !ctx->recv_mpdu.pb_nb)
+ {
+ /* Early return from empty message. */
+ return;
+ }
if (!ctx->recv_mpdu.drop)
{
pbproc_rx_desc_t *rx = ctx->recv_mpdu.rx_desc;
@@ -442,7 +559,11 @@ pbproc_frda_commit (pbproc_t *ctx)
dbg_invalid_ptr (ctx->recv_mpdu.chandata_head);
}
+#if CONFIG_MAC_PBPROC_EOC_ILRAM
+void
+#else
void ARCH_ILRAM
+#endif
pbproc_frda__rx_burst__rx_fc (pbproc_t *ctx, u32 rx_date,
const pbproc_fc_t *fc_av)
{
@@ -451,7 +572,11 @@ pbproc_frda__rx_burst__rx_fc (pbproc_t *ctx, u32 rx_date,
pbproc_fhfc_handle_fc (ctx, rx_date, fc_av);
}
+#if CONFIG_MAC_PBPROC_EOC_ILRAM
+void
+#else
void ARCH_ILRAM
+#endif
pbproc_frda__rx_burst__access (pbproc_t *ctx)
{
dbg_claim (ctx);
@@ -469,6 +594,7 @@ pbproc_frda_sackd_init (pbproc_t *ctx)
/* Clear current SACKD if this frame is not part of the previous burst. */
bool reinit = false;
pbproc_sackd_t *sackd = &ctx->recv_mpdu.sackd;
+ /* no burst, always reset sackd fields */
if (!sackd->valid
|| sackd->tei != rx_params->tei
|| sackd->lid != rx_params->lid
@@ -492,13 +618,21 @@ pbproc_frda_sackd_init (pbproc_t *ctx)
sackd->last_mpdu_cnt = rx_params->mpdu_cnt;
/* Initialise SACKD preparation. */
sackd->any_pb_crc_error = false;
- pbproc_sacki_enc_init (&sackd->sacki_enc,
- PBPROC_FC_SACK_SACKI_BITS
- - (MAC_LID_IS_PLID (rx_params->lid) ? 4 : 0),
- reinit);
+ if (!CONFIG_MAC_PBPROC_EOC_FC)
+ pbproc_sacki_enc_init (&sackd->sacki_enc,
+ PBPROC_FC_SACK_SACKI_BITS
+ - (MAC_LID_IS_PLID (rx_params->lid) ? 4 : 0),
+ reinit);
+ else
+ pbproc_sacki_enc_init (&sackd->sacki_enc, PBPROC_FC_SACK_SACKI_BITS,
+ reinit);
}
+#if CONFIG_MAC_PBPROC_EOC_ILRAM
+static void
+#else
static void ARCH_ILRAM
+#endif
pbproc_frda_error (pbproc_t *ctx, u32 rx_date,
bool wack, uint sacki_uniform)
{
@@ -509,6 +643,11 @@ pbproc_frda_error (pbproc_t *ctx, u32 rx_date,
/* ACK date. */
ctx->recv_mpdu.ack_date = rx_date + ctx->times.pre_fcs_tck
+ ctx->recv_mpdu.rx_params.fl_tck;
+ if (CONFIG_MAC_PBPROC_EOC_FC)
+ {
+ /* Prevent reverse response in error state. */
+ ctx->recv_mpdu.rx_params.bbf = false;
+ }
/* With acknowledge? */
uint mpdu_cnt = ctx->recv_mpdu.rx_params.mpdu_cnt;
if (wack)
@@ -535,7 +674,11 @@ pbproc_frda_error (pbproc_t *ctx, u32 rx_date,
ctx->stats.rx_data_error++;
}
+#if CONFIG_MAC_PBPROC_EOC_ILRAM
+static inline void
+#else
static void ARCH_ILRAM
+#endif
pbproc_frda_send_sack_anticip (pbproc_t *ctx)
{
dbg_claim (ctx);
@@ -610,9 +753,29 @@ pbproc_frda_vcs_restart (pbproc_t *ctx)
/* Burst? */
if (ctx->recv_mpdu.rx_params.mpdu_cnt == 0)
{
+#if CONFIG_MAC_PBPROC_EOC_FC
+ /* Check if this is a reverse transmission
+ * else do ordinary sack confirmation, only STA context could use */
+ if (ctx->recv_mpdu.rx_params.bbf && !ctx->recv_mpdu.send_sack)
+ {
+ u32 access_date = ctx->recv_mpdu.ack_date
+ + MAC_CF_SOF_RSOF_IFS_TCK;
+ ca_access_reprogram (ctx->ca, access_date,
+ ctx->recv_mpdu.rx_params.mrdur_tck,
+ ctx->recv_mpdu.rx_params.tei);
+ }
+ else
+ /* Prepare for next MPDU. */
+ /* if there is no SACK in tdma use shorter time */
+ ca_access_vcs_restart (ctx->ca, ctx->recv_mpdu.ack_date +
+ (!ctx->recv_mpdu.send_sack ?
+ MAC_CF_RSOF_SOF_IFS_TCK :
+ ctx->times.pre_fcs_tck + MAC_CIFS_TCK));
+#else
/* Prepare for next MPDU. */
ca_access_vcs_restart (ctx->ca, ctx->recv_mpdu.ack_date
+ ctx->times.pre_fcs_tck + MAC_CIFS_TCK);
+#endif
}
else
{
diff --git a/cesar/mac/pbproc/src/fsm_rx_sound.c b/cesar/mac/pbproc/src/fsm_rx_sound.c
index bcc2e22653..8b381b630f 100644
--- a/cesar/mac/pbproc/src/fsm_rx_sound.c
+++ b/cesar/mac/pbproc/src/fsm_rx_sound.c
@@ -41,6 +41,9 @@ pbproc_frso_init (pbproc_t *ctx)
* \return true if sound is completed
*/
static bool
+#if CONFIG_MAC_PBPROC_EOC_FC
+__attribute__ ((noinline))
+#endif
pbproc_frso_sound_complete (sta_t *sta, uint src, int int_group)
{
if (sta)
@@ -73,6 +76,25 @@ pbproc_frso__handle (pbproc_t *ctx, u32 rx_date,
{
dbg_claim (ctx);
dbg_claim (sound);
+#if !CONFIG_MAC_PBPROC_EOC_FC
+ uint tei = sound->stei;
+#else
+ uint tei = sound->direction ? sound->dtei : MAC_TEI_CCO_DEF;
+ if (MAC_TEI_IS_EOC_STA (ctx->config->tei))
+ ctx->polled = true;
+#if CONFIG_MAC_COMMON_EOC_SCHED
+ else /* cco */
+ {
+ sta_t *sta = mac_store_sta_get_noref (ctx->store, ctx->prep_mpdu.dtei);
+ if (sta)
+ {
+ sta->empty_poll = 0;
+ sta->bp_before_poll = 0;
+ ca_sta_update (ctx->ca, sta);
+ }
+ }
+#endif
+#endif
/* Update stats. */
ctx->stats.rx_sound++;
/* Get tonemap. */
@@ -118,7 +140,7 @@ pbproc_frso__handle (pbproc_t *ctx, u32 rx_date,
/* Unblock hardware. */
phy_rx_prepare_sound (ctx->phy, 1, tm->phy_combo_params[pb_size],
tm->gil, symb_nb);
- sta_t *sta = mac_store_sta_get_noref (ctx->store, sound->stei);
+ sta_t *sta = mac_store_sta_get_noref (ctx->store, tei);
/* Match the frame on the corresponding interval. */
int_group = pbproc_get_interval_group (sta,
rx_date + ctx->times.pre_fcs_tck
@@ -141,19 +163,26 @@ pbproc_frso__handle (pbproc_t *ctx, u32 rx_date,
ctx->recv_mpdu.rx_params.preamble_ntb = rx_date
+ ctx->config->ntb_offset_tck;
ctx->recv_mpdu.rx_params.fl_tck = fl_tck;
- ctx->recv_mpdu.rx_params.tei = sound->stei;
ctx->recv_mpdu.rx_params.lid = sound->lid;
ctx->recv_mpdu.rx_params.snid = sound->snid;
ctx->recv_mpdu.rx_params.bcast = false;
- ctx->recv_mpdu.rx_params.cfp = sound->cfs;
ctx->recv_mpdu.rx_params.multi_net_bcast = false;
ctx->recv_mpdu.rx_params.sound = true;
ctx->recv_mpdu.rx_params.eks = MAC_EKS_CLEAR;
- ctx->recv_mpdu.rx_params.pending_seg_info = sound->ppb;
ctx->recv_mpdu.rx_params.ble = 0;
ctx->recv_mpdu.rx_params.pb_size = pb_size;
ctx->recv_mpdu.rx_params.tmi_av = mod;
+#if !CONFIG_MAC_PBPROC_EOC_FC
+ ctx->recv_mpdu.rx_params.tei = sound->stei;
+ ctx->recv_mpdu.rx_params.pending_seg_info = sound->ppb;
ctx->recv_mpdu.rx_params.bdf = sound->bdf;
+ ctx->recv_mpdu.rx_params.cfp = sound->cfs;
+#else
+ ctx->recv_mpdu.rx_params.pending_seg_info = 0;
+ ctx->recv_mpdu.rx_params.bdf = true;
+ ctx->recv_mpdu.rx_params.cfp = true;
+ ctx->recv_mpdu.rx_params.tei = tei;
+#endif
ctx->recv_mpdu.rx_params.hp10df = false;
ctx->recv_mpdu.rx_params.hp11df = false;
ctx->recv_mpdu.rx_params.mfs_cmd_data = MFS_FSM_CMD_NOP;
@@ -213,6 +242,7 @@ pbproc_frso__rx_sound__pbdma (pbproc_t *ctx)
phy_tx_fc10 (ctx->phy, ctx->recv_mpdu.ack_date, 0);
/* Prepare SOUND acknowledgment. */
pbproc_fc_t fc;
+#if !CONFIG_MAC_PBPROC_EOC_FC
fc.words[0] = BF_FILL (
PBPROC_FC_SOUND_W0,
(DT_AV, PBPROC_FC_DT_SOUND),
@@ -240,6 +270,31 @@ pbproc_frso__rx_sound__pbdma (pbproc_t *ctx)
fc.words[3] = BF_FILL (
PBPROC_FC_SOUND_W3,
(RESERVED2, 0));
+#else
+ fc.words[0] = BF_FILL (
+ PBPROC_FC_EOC_SOUND_W0,
+ (DT_AV, PBPROC_FC_DT_SOUND),
+ (ACCESS, false),
+ (SNID, ctx->alloc.snid),
+ (DTEI, MAC_TEI_IS_EOC_CCO(ctx->config->tei)
+ ? ctx->recv_mpdu.rx_params.tei : ctx->config->tei),
+ (FL_AV, 0),
+ (LID, ctx->recv_mpdu.rx_params.lid));
+ fc.words[1] = BF_FILL (
+ PBPROC_FC_EOC_SOUND_W1,
+ (SACKT0, PBPROC_FC_SACKT_UNIFORM),
+ (DIRECTION, !MAC_TEI_IS_EOC_CCO(ctx->config->tei)),
+ (PBSZ, false),
+ (SAF, true),
+ (SCF, ctx->recv_mpdu.rx_params.sound_complete),
+ (REQ_TM, 0),
+ (MPDU_CNT, 0),
+ (SACKI0, PBPROC_FC_SACKI_UNIFORM_NOT_AVAILABLE));
+ fc.words[2] = BF_FILL (
+ PBPROC_FC_EOC_SOUND_W2,
+ (SACKI1, 0));
+ fc.words[3] = 0;
+#endif
/* Send it. */
phy_tx_param_short (ctx->phy,
PHY_FC_MODE (hybrid, ctx->config->fc_symbols_nb));
@@ -266,7 +321,11 @@ pbproc_frso__rx_sound__pbdma (pbproc_t *ctx)
pbproc_fsm_change_state (ctx, PBPROC_FSM_STATE_IDLE);
}
+#if CONFIG_MAC_PBPROC_EOC_ILRAM
+static void
+#else
static void ARCH_ILRAM_PRIO (2)
+#endif
pbproc_frso_vcs_restart (pbproc_t *ctx)
{
dbg_claim (ctx);
diff --git a/cesar/mac/pbproc/src/fsm_top.c b/cesar/mac/pbproc/src/fsm_top.c
index 23b7cf54d1..9416482d83 100644
--- a/cesar/mac/pbproc/src/fsm_top.c
+++ b/cesar/mac/pbproc/src/fsm_top.c
@@ -10,6 +10,8 @@
* \brief FSM top part, handle idle and generic transitions.
* \ingroup mac_pbproc
*/
+#include "config/av.h"
+
#include "common/std.h"
#include "hal/gpio/gpio.h"
@@ -74,11 +76,13 @@ pbproc_ftop_aifs (pbproc_t *ctx)
&& lesseq_mod2p32 (ctx->detect.beacon_detect_expiration_date,
now))
ctx->detect.beacon_detected = false;
- if (ctx->detect.hp10_detected
+ if (!CONFIG_AV_ONLY_MODE
+ && ctx->detect.hp10_detected
&& lesseq_mod2p32 (ctx->detect.hp10_detect_date
+ PBPROC_HP_DETECT_DELAY_TCK, now))
ctx->detect.hp10_detected = false;
- if (ctx->detect.hp11_detected
+ if (!CONFIG_AV_ONLY_MODE
+ && ctx->detect.hp11_detected
&& lesseq_mod2p32 (ctx->detect.hp11_detect_date
+ PBPROC_HP_DETECT_DELAY_TCK, now))
ctx->detect.hp11_detected = false;
@@ -163,6 +167,9 @@ pbproc_ftop__idle__access (pbproc_t *ctx)
if (!ctx->prep_mpdu.valid)
{
PBPROC_TRACE (FTOP_TX_INVALID);
+ if (CONFIG_MAC_PBPROC_EOC_FC)
+ ca_backoff_deferred (ctx->ca,
+ ctx->access.duration_tck / MAC_SLOT_TCK);
ca_access_done (ctx->ca);
ca_access_defer (ctx->ca, ctx->access.access_date);
ctx->stats.tx_invalid++;
diff --git a/cesar/mac/pbproc/src/fsm_tx_data.c b/cesar/mac/pbproc/src/fsm_tx_data.c
index 29cfad3506..a23b78a38a 100644
--- a/cesar/mac/pbproc/src/fsm_tx_data.c
+++ b/cesar/mac/pbproc/src/fsm_tx_data.c
@@ -49,15 +49,27 @@ pbproc_ftda__handle (pbproc_t *ctx)
dbg_claim (ctx);
if (PHY_FC_MODE_IS_HYBRID (ctx->prep_mpdu.fc_mode))
phy_tx_fc10 (ctx->phy, ctx->prep_mpdu.tx_date, ctx->prep_mpdu.fc10);
- phy_pbdma_start (ctx->phy, ctx->prep_mpdu.bypass_aes, ctx->prep_mpdu.nek,
- mpdu->pb_nb_total,
- ctx->prep_mpdu.wack ? 0 : mpdu->pb_nb_total,
- &mpdu->main_head->phy_pb, NULL, false);
- if (mpdu->tmi >= PHY_MOD_ROBO_NB)
- phy_set_tonemap (ctx->phy, ctx->prep_mpdu.tonemap);
- phy_tx_param (ctx->phy, ctx->prep_mpdu.fc_mode,
- ctx->prep_mpdu.phy_combo_params, ctx->prep_mpdu.gil,
- ctx->prep_mpdu.symb_nb);
+#if CONFIG_MAC_PBPROC_EOC_FC
+ if (mpdu->pb_nb_total)
+#endif
+ {
+ phy_pbdma_start (ctx->phy, ctx->prep_mpdu.bypass_aes,
+ ctx->prep_mpdu.nek, mpdu->pb_nb_total,
+ ctx->prep_mpdu.wack ? 0 : mpdu->pb_nb_total,
+ &mpdu->main_head->phy_pb, NULL, false);
+ if (mpdu->tmi >= PHY_MOD_ROBO_NB)
+ phy_set_tonemap (ctx->phy, ctx->prep_mpdu.tonemap);
+ phy_tx_param (ctx->phy, ctx->prep_mpdu.fc_mode,
+ ctx->prep_mpdu.phy_combo_params, ctx->prep_mpdu.gil,
+ ctx->prep_mpdu.symb_nb);
+ }
+#if CONFIG_MAC_PBPROC_EOC_FC
+ else
+ {
+ phy_tx_param_short (ctx->phy, ctx->prep_mpdu.fc_mode);
+ ctx->stats.tx_data_empty++;
+ }
+#endif
bool prp = ctx->access.prp && !ctx->prep_mpdu.rts_cts;
phy_tx_frame (ctx->phy, ctx->prep_mpdu.tx_date, true, prp,
ctx->prep_mpdu.fc_av.words);
@@ -84,12 +96,24 @@ pbproc_ftda__tx_wait_access_conf__rx_fc (pbproc_t *ctx, u32 rx_date,
ctx->stats.tx_data_cancel++;
}
+#if CONFIG_MAC_PBPROC_EOC_ILRAM
+void
+#else
void ARCH_ILRAM
+#endif
pbproc_ftda__tx_wait_access_conf__access (pbproc_t *ctx)
{
dbg_claim (ctx);
pbproc_prep_mpdu_cancel_burst (ctx);
- pbproc_ftop__idle__access (ctx);
+ if (CONFIG_MAC_PBPROC_EOC_FC)
+ {
+ /* Prepare next schedule, start access timer. */
+ ca_access_vcs_restart (ctx->ca, phy_date ()
+ + ctx->times.pre_fcs_tck + MAC_CIFS_TCK);
+ pbproc_fsm_change_state (ctx, PBPROC_FSM_STATE_IDLE);
+ }
+ else
+ pbproc_ftop__idle__access (ctx);
ctx->stats.prp_lost++;
ctx->stats.tx_data_cancel++;
}
@@ -98,11 +122,15 @@ void ARCH_ILRAM
pbproc_ftda__tx_wait_access_conf__access_conf (pbproc_t *ctx)
{
dbg_claim (ctx);
- /* Start DMA. */
- phy_tx_prepare (ctx->phy);
- /* Chain remaining PB. */
- pbproc_prep_mpdu_chain (ctx);
- uint stats_num_pbs = ctx->prep_mpdu.current->pb_nb_total;
+ uint pb_nb_total = ctx->prep_mpdu.current->pb_nb_total;
+ /* Check PB total. */
+ if (pb_nb_total || !CONFIG_MAC_PBPROC_EOC_FC)
+ {
+ /* Start DMA. */
+ phy_tx_prepare (ctx->phy);
+ /* Chain remaining PB. */
+ pbproc_prep_mpdu_chain (ctx);
+ }
if (ctx->prep_mpdu.mpdu_count != 0)
{
phy_access_timer_cancel (ctx->phy);
@@ -135,6 +163,7 @@ pbproc_ftda__tx_wait_access_conf__access_conf (pbproc_t *ctx)
}
else
{
+ ctx->prep_mpdu.main_mfs->stats.num_bursts++;
if (ctx->prep_mpdu.wack)
{
/* With ACK. */
@@ -157,17 +186,24 @@ pbproc_ftda__tx_wait_access_conf__access_conf (pbproc_t *ctx)
ctx->stats.tx_data_beacon++;
else
ctx->stats.tx_data_woack++;
+ if (CONFIG_MAC_PBPROC_EOC_FC && pb_nb_total == 0)
+ /* If Short SOF is sent goto tx end, but tx_end is here. */
+ pbproc_ftda__tx_wait_tx_end__pbdma(ctx);
}
- ctx->prep_mpdu.main_mfs->stats.num_bursts++;
}
- /* Update link stats. */
- ctx->prep_mpdu.main_mfs->stats.num_mpdus++;
- ctx->prep_mpdu.main_mfs->stats.num_pbs += stats_num_pbs;
- /* If there is a pending SPOC update and enough time, program it. */
- if (ctx->prep_mpdu.ifs_tck >= PHY_PREPARE_DELAY_TCK)
- pbproc_spoc_schedule_update (ctx, ctx->prep_mpdu.tx_date
- + ctx->prep_mpdu.flp_tck
- - ctx->prep_mpdu.ifs_tck);
+
+ /* in EoC it is possible to prematurely ack prep_mpdu, short msgs */
+ if (!CONFIG_MAC_PBPROC_EOC_FC || ctx->prep_mpdu.valid)
+ {
+ /* Update link stats. */
+ ctx->prep_mpdu.main_mfs->stats.num_mpdus++;
+ ctx->prep_mpdu.main_mfs->stats.num_pbs += pb_nb_total;
+ /* If there is a pending SPOC update and enough time, program it. */
+ if (ctx->prep_mpdu.ifs_tck >= PHY_PREPARE_DELAY_TCK)
+ pbproc_spoc_schedule_update (ctx, ctx->prep_mpdu.tx_date
+ + ctx->prep_mpdu.flp_tck
+ - ctx->prep_mpdu.ifs_tck);
+ }
}
static bool ARCH_ILRAM
@@ -229,6 +265,76 @@ pbproc_ftda_parse_sack (pbproc_t *ctx, const pbproc_fc_t *fc_av,
return fc_ok;
}
+#if CONFIG_MAC_PBPROC_EOC_FC
+
+PRIVATE bool ARCH_ILRAM
+pbproc_ftda_parse_sackd (pbproc_t *ctx, const pbproc_fc_t *fc_av,
+ pbproc_fc_ack_data_t *ack_data)
+{
+ dbg_claim (ack_data);
+ bool valid_ack = false;
+ /* Place for EOC SACKD encapsulated in next frame.
+ * Direction should be as expected; for CCO frame should be from
+ * expected station. STA shouldn't consider RSOF at all. */
+ if (fc_av
+ && fc_av->generic.access == false
+ && fc_av->generic.snid == ctx->alloc.snid
+ && ctx->prep_mpdu.valid)
+ {
+ uint direction = MAC_TEI_IS_EOC_CCO (ctx->config->tei);
+ uint tei = ctx->prep_mpdu.dtei;
+ uint type = fc_av->generic.dt_av;
+ if (type == PBPROC_FC_DT_SOUND)
+ valid_ack = (direction == fc_av->sound.direction)
+ && (!direction || fc_av->sound.dtei == tei);
+ else if (type == PBPROC_FC_DT_SOF)
+ valid_ack = (direction == fc_av->sof.direction)
+ && (!direction || fc_av->sof.dtei == tei);
+ else if (type == PBPROC_FC_DT_RSOF)
+ valid_ack = direction && (fc_av->rsof.dtei == tei);
+ }
+ if (valid_ack)
+ {
+ uint sackt0 = PBPROC_FC_SACKT_NOT_RECEIVED, si[3] = {0, 0, 0}, sil = 0;
+ /* Compute bitmap and size */
+ switch(fc_av->generic.dt_av)
+ {
+ case PBPROC_FC_DT_SOF:
+ sackt0 = fc_av->sof.sackt0;
+ si[0] = fc_av->sof.sacki0;
+ si[1] = fc_av->sof.sacki1;
+ sil = PBPROC_FC_SACKI_EOC_SOF_SIZE;
+ break;
+ case PBPROC_FC_DT_RSOF:
+ sackt0 = fc_av->rsof.sackt0;
+ si[0] = fc_av->rsof.sacki0;
+ si[1] = fc_av->rsof.sacki1;
+ sil = PBPROC_FC_SACKI_EOC_RSOF_SIZE;
+ break;
+ case PBPROC_FC_DT_SOUND:
+ sackt0 = fc_av->sound.sackt0;
+ si[0] = fc_av->sound.sacki0
+ | (fc_av->sound.sacki1 << PBPROC_FC_SACKI_EOC_SOUND_LEFT);
+ si[1] = fc_av->sound.sacki1 >> (32 - PBPROC_FC_SACKI_EOC_SOUND_LEFT);
+ sil = PBPROC_FC_SACKI_EOC_SOUND_SIZE;
+ break;
+ default:
+ dbg_assert_default ();
+ }
+ pbproc_sacki_dec_init (&ack_data->sacki_dec, si[0], si[1], si[2], sil);
+ ack_data->sackt[0] = sackt0;
+ ack_data->sackt[1] = PBPROC_FC_SACKT_NOT_RECEIVED;
+ ack_data->sackt[2] = PBPROC_FC_SACKT_NOT_RECEIVED;
+ ack_data->sackt[3] = PBPROC_FC_SACKT_NOT_RECEIVED;
+ ack_data->rrtl_tck = 0;
+ ack_data->mfs_rsp = MFS_FSM_RSP_NB;
+ ack_data->rxwsz = MFS_WINDOW_SIZE_NB;
+ }
+ return valid_ack;
+}
+
+#endif
+
void ARCH_ILRAM
pbproc_ftda__tx_wait_sackd__rx_fc (pbproc_t *ctx, u32 rx_date,
const pbproc_fc_t *fc_av)
@@ -253,24 +359,66 @@ pbproc_ftda__tx_wait_sackd__rx_fc (pbproc_t *ctx, u32 rx_date,
}
else
{
- //handle_access ();
+ if (CONFIG_MAC_PBPROC_EOC_FC)
+ {
+ ca_access_vcs_restart (ctx->ca, rx_date
+ + ctx->times.pre_fcs_tck
+ + MAC_CIFS_TCK);
+ pbproc_fsm_change_state (ctx, PBPROC_FSM_STATE_IDLE);
+ }
+ else
+ {
+ //handle_access ();
+ }
}
ctx->stats.tx_data_wack_ack++;
}
else
{
- pbproc_fhfc_handle_fc (ctx, rx_date, fc_av);
- pbproc_prep_mpdu_cancel_burst (ctx);
- ctx->stats.tx_data_wack_noack++;
+#if CONFIG_MAC_PBPROC_EOC_FC
+ /* Not our SACK, may contain our SACKD. */
+ if (less_mod2p32 (rx_date, ctx->prep_mpdu.tx_date /* TODO chk timeval*/
+ + ctx->prep_mpdu.flp_tck
+ + MAC_FL_TO_TCK (MAC_MAX_FL_MAX_FL))
+ && pbproc_ftda_parse_sackd (ctx, fc_av, &ack_data))
+ {
+ if (!ctx->access.cfp)
+ ca_backoff_success (ctx->ca);
+ pbproc_fhfc_handle_fc (ctx, rx_date, fc_av);
+ pbproc_prep_mpdu_ack (ctx, ack_data.sackt, &ack_data.sacki_dec);
+ ctx->stats.tx_data_wack_ack++;
+ }
+ else
+#endif
+ {
+ pbproc_fhfc_handle_fc (ctx, rx_date, fc_av);
+ pbproc_prep_mpdu_cancel_burst (ctx);
+ ctx->stats.tx_data_wack_noack++;
+ }
}
}
+#if CONFIG_MAC_PBPROC_EOC_ILRAM
+void
+#else
void ARCH_ILRAM
+#endif
pbproc_ftda__tx_wait_sackd__access (pbproc_t *ctx)
{
dbg_claim (ctx);
+#if CONFIG_MAC_COMMON_EOC_MFS
+ pbproc_prep_mpdu_access_track (ctx);
+#endif
pbproc_prep_mpdu_cancel_burst (ctx);
- pbproc_ftop__idle__access (ctx);
+ if (CONFIG_MAC_PBPROC_EOC_FC)
+ {
+ /* Prepare next schedule, start access timer. */
+ ca_access_vcs_restart (ctx->ca, phy_date ()
+ + ctx->times.pre_fcs_tck + MAC_CIFS_TCK);
+ pbproc_fsm_change_state (ctx, PBPROC_FSM_STATE_IDLE);
+ }
+ else
+ pbproc_ftop__idle__access (ctx);
ctx->stats.tx_data_wack_noack++;
}
@@ -287,7 +435,11 @@ pbproc_ftda__tx_wait_tx_end__pbdma (pbproc_t *ctx)
pbproc_fsm_change_state (ctx, PBPROC_FSM_STATE_IDLE);
}
+#if CONFIG_MAC_PBPROC_EOC_ILRAM
+void
+#else
void ARCH_ILRAM
+#endif
pbproc_ftda__tx_burst__access_conf (pbproc_t *ctx)
{
dbg_claim (ctx);
diff --git a/cesar/mac/pbproc/src/fsm_tx_sound.c b/cesar/mac/pbproc/src/fsm_tx_sound.c
index b43fed10ca..4381f88b28 100644
--- a/cesar/mac/pbproc/src/fsm_tx_sound.c
+++ b/cesar/mac/pbproc/src/fsm_tx_sound.c
@@ -63,12 +63,20 @@ pbproc_ftso__tx_sound_wait_ack__rx_fc (pbproc_t *ctx, u32 rx_date,
&& fc_av->generic.access == false
&& fc_av->generic.snid == ctx->alloc.snid
&& fc_av->sound.saf == true
+#if !CONFIG_MAC_PBPROC_EOC_FC
&& fc_av->sound.stei == prep->dtei
&& fc_av->sound.dtei == prep->stei
+#else
+ && ((fc_av->sound.dtei == prep->dtei && fc_av->sound.direction)
+ || (fc_av->sound.dtei == prep->stei && !fc_av->sound.direction))
+#endif
&& less_mod2p32 (rx_date, prep->tx_date + prep->flp_tck
+ MAC_TOLERANCE_TCK))
{
phy_rx_prepare_short (ctx->phy);
+#if CONFIG_MAC_COMMON_EOC_MFS
+ prep->main_mfs->no_reply_count = 0;
+#endif
/* Handle acknowledgement. */
pbproc_prep_mpdu_sound_ack (ctx, fc_av->sound.scf);
/* Next. */
@@ -82,6 +90,13 @@ pbproc_ftso__tx_sound_wait_ack__rx_fc (pbproc_t *ctx, u32 rx_date,
else
{
//handle_access ();
+ if (CONFIG_MAC_PBPROC_EOC_FC)
+ {
+ /* Prepare next schedule, start access timer. */
+ ca_access_vcs_restart (ctx->ca, rx_date
+ + ctx->times.pre_fcs_tck + MAC_CIFS_TCK);
+ pbproc_fsm_change_state (ctx, PBPROC_FSM_STATE_IDLE);
+ }
}
/* Update stats. */
ctx->stats.tx_sound_ack++;
@@ -99,16 +114,31 @@ pbproc_ftso__tx_sound_wait_ack__rx_fc (pbproc_t *ctx, u32 rx_date,
}
}
+#if CONFIG_MAC_PBPROC_EOC_ILRAM
+void
+#else
void ARCH_ILRAM_PRIO (2)
+#endif
pbproc_ftso__tx_sound_wait_ack__access (pbproc_t *ctx)
{
dbg_claim (ctx);
+#if CONFIG_MAC_COMMON_EOC_MFS
+ pbproc_prep_mpdu_access_track (ctx);
+#endif
/* Cancel transmission. */
pbproc_prep_mpdu_sound_ack (ctx, false);
/* Update backoff. */
pbproc_backoff_lost (ctx);
/* Handle ACCESS. */
- pbproc_ftop__idle__access (ctx);
+ if (CONFIG_MAC_PBPROC_EOC_FC)
+ {
+ /* Prepare next schedule, start access timer. */
+ ca_access_vcs_restart (ctx->ca, phy_date () + ctx->times.pre_fcs_tck
+ + MAC_CIFS_TCK);
+ pbproc_fsm_change_state (ctx, PBPROC_FSM_STATE_IDLE);
+ }
+ else
+ pbproc_ftop__idle__access (ctx);
/* Update stats. */
ctx->stats.tx_sound_noack++;
}
diff --git a/cesar/mac/pbproc/src/pbproc.c b/cesar/mac/pbproc/src/pbproc.c
index a20755b749..66881b7b0c 100644
--- a/cesar/mac/pbproc/src/pbproc.c
+++ b/cesar/mac/pbproc/src/pbproc.c
@@ -156,6 +156,9 @@ pbproc_stats_init (pbproc_t *ctx)
PBPROC_STAT (cw_lost);
PBPROC_STAT (aifs);
PBPROC_STAT (rx_out_of_alloc);
+#if CONFIG_MAC_PBPROC_EOC_FC
+ PBPROC_STAT (rx_rsof_out_of_alloc);
+#endif
PBPROC_STAT (rx_pool_shortage);
PBPROC_STAT (rx_handle_fc);
PBPROC_STAT (rx_beacon);
@@ -188,6 +191,10 @@ pbproc_stats_init (pbproc_t *ctx)
PBPROC_STAT (tx_sound);
PBPROC_STAT (tx_sound_ack);
PBPROC_STAT (tx_sound_noack);
+#if CONFIG_MAC_PBPROC_EOC_FC
+ PBPROC_STAT (tx_data_empty);
+ PBPROC_STAT (tx_data_pb_total);
+#endif
#endif /* CONFIG_STATS */
}
@@ -259,6 +266,8 @@ pbproc_init (mac_config_t *config, mac_store_t *store)
/* Setup live indicator. */
GPIO_SETUP (LED_PBPROC_ALIVE, GPIO_DIRECTION_OUT);
GPIO_SET (LED_PBPROC_ALIVE, 1);
+ GPIO_SETUP (LED_PBPROC_WORKING, GPIO_DIRECTION_OUT);
+ GPIO_SET (LED_PBPROC_WORKING, 0);
/* All done! */
PBPROC_TRACE (INIT);
return ctx;
@@ -521,3 +530,17 @@ pbproc_get_interval_group (sta_t *sta, uint offset_tck, uint flp_tck)
return interval_group;
}
+#if CONFIG_MAC_PBPROC_EOC_FC
+void
+pbproc_parameters_adjust (pbproc_t *ctx, bool adjust)
+{
+ dbg_assert (ctx);
+ /* adjust only non-hybrid time */
+ if (adjust)
+ {
+ ctx->times_array[0].max_fl_tck =
+ ctx->times_array[2].max_fl_tck = MAC_MS_TO_TCK (4);
+ }
+}
+#endif
+
diff --git a/cesar/mac/pbproc/src/prep_mpdu.c b/cesar/mac/pbproc/src/prep_mpdu.c
index 5452ae863f..3ab2470ebf 100644
--- a/cesar/mac/pbproc/src/prep_mpdu.c
+++ b/cesar/mac/pbproc/src/prep_mpdu.c
@@ -20,12 +20,13 @@
#include "inc/sacki_dec.h"
#include "inc/mfs.h"
+#include "hal/gpio/gpio.h"
#include "config/mac/pbproc.h"
#include <string.h>
/** Number of prepared PB before ACCESS_CONF. */
-#define PBPROC_PB_START_NB 4
+#define PBPROC_PB_START_NB (CONFIG_MAC_PBPROC_EOC_FC ? 16 : 4)
/**
* Commit MPDU.
@@ -52,8 +53,10 @@ pbproc_prep_mpdu_commit (pbproc_t *ctx, uint mpdu_count,
* Commit FSM changes.
* \param ctx pbproc context
*/
+#if !CONFIG_MAC_PBPROC_EOC_FC
static void
pbproc_prep_mpdu_commit_fsm (pbproc_t *ctx);
+#endif
/**
* Prepare a SOUND MPDU.
@@ -68,8 +71,10 @@ pbproc_prep_mpdu_sound (pbproc_t *ctx, mfs_tx_t *mfs, uint fl_tck);
* Prepare a SHORT MPDU for burst interruption.
* \param ctx pbproc context
*/
+#if !CONFIG_MAC_PBPROC_EOC_FC
static void
pbproc_prep_mpdu_short (pbproc_t *ctx);
+#endif
void
pbproc_prep_mpdu_init (pbproc_t *ctx)
@@ -86,6 +91,58 @@ pbproc_prep_mpdu_init (pbproc_t *ctx)
slist_init (prep->main_commit_return_);
}
+#if CONFIG_MAC_PBPROC_EOC_FC
+/* mfs window_size calculation on tx_side
+ * WARNING: mfs size is already checked against <=0 value.
+ * return value: distance between start PB and end PB in mfs.
+ */
+static inline u16
+pbproc_get_segments_nb (mfs_tx_t *mfs)
+{
+ int distance = mfs->window_size
+ - distance_mod2p16 (mfs->next_ssn, mfs->head->header.ssn)
+ + mfs->seg_nb;
+ /* send at least one segment to other side */
+ if (distance <= 0)
+ return 1;
+ else
+ return (u16)distance;
+}
+
+/**
+ * Compute SPPB value to be sent in FC.
+ * \param ctx pbproc context
+ * \param dtei destination TEI
+ * \param current_mfs MFS being sent
+ * \param current_seg_nb PB being sent on the current MFS
+ * \return SPPB value
+ */
+static u8 ARCH_ILRAM
+pbproc_prep_mpdu_sppb (pbproc_t *ctx, u8 dtei,
+ mfs_tx_t *current_mfs, uint current_seg_nb)
+{
+ int cap;
+ u8 sppb = 0x0f;
+ if (MAC_TEI_IS_STA (dtei))
+ {
+ for (cap = 0; cap < MAC_CAP_NB; cap++)
+ {
+ mfs_tx_t *mfs = mac_store_mfs_get_sta_tx_data_locked (
+ ctx->store, MAC_LLID_MIN + cap, dtei);
+ if (mfs)
+ {
+ int seg_nb = mfs->seg_nb;
+ if (mfs == current_mfs)
+ seg_nb -= current_seg_nb;
+ if (seg_nb)
+ sppb |= 0x10 << cap;
+ }
+ }
+ }
+ return sppb;
+}
+#endif
+
/**
* Prepare a RTS_CTS frame.
* \param ctx pbproc context
@@ -128,7 +185,11 @@ pbproc_prep_rts_cts_fc (pbproc_t *ctx, mfs_tx_t *mfs, uint ack_dtei,
(RESERVED2, 0));
}
+#if CONFIG_MAC_PBPROC_EOC_ILRAM
+void /*ARCH_ILRAM: TODO ugly */
+#else
void ARCH_ILRAM_PRIO (1)
+#endif
pbproc_prep_beacon (pbproc_t *ctx, mfs_tx_t *mfs)
{
ca_access_param_t *access;
@@ -153,7 +214,12 @@ pbproc_prep_beacon (pbproc_t *ctx, mfs_tx_t *mfs)
prep->burst_mpdu_nb = 1;
prep->mpdu_count = 0;
prep->current = &prep->mpdu[0];
+#if CONFIG_MAC_PBPROC_EOC_FC
+ prep->bbf = false;
+ prep->fc_mode = PHY_FC_MODE (false, ctx->config->fc_symbols_nb);
+#else
prep->fc_mode = PHY_FC_MODE (true, ctx->config->fc_symbols_nb);
+#endif
prep->sound_reason_code = TONEMAP_SRC_NULL;
prep->bypass_aes = true;
/* Modulation. */
@@ -193,8 +259,12 @@ pbproc_prep_beacon (pbproc_t *ctx, mfs_tx_t *mfs)
+ tm->bits_per_symbol - 1) / tm->bits_per_symbol;
u32 data_tck = MAC_PAYLOAD_TCK (symb_nb, ctx->symbol_tck[tm->gil]);
prep->ifs_tck = MAC_B2BIFS_TCK;
- uint pre_fcs_tck = ctx->times_array[PBPROC_TIMES_ARRAY_INDEX
- (true, MAC_COEXISTENCE_FULL_HYBRID_MODE)].pre_fcs_tck;
+ uint pre_fcs_tck;
+ if (CONFIG_MAC_PBPROC_EOC_FC)
+ pre_fcs_tck = ctx->times.pre_fcs_tck;
+ else
+ pre_fcs_tck = ctx->times_array[PBPROC_TIMES_ARRAY_INDEX
+ (true, MAC_COEXISTENCE_FULL_HYBRID_MODE)].pre_fcs_tck;
prep->flp_tck = pre_fcs_tck + data_tck + MAC_B2BIFS_TCK;
prep->symb_nb = symb_nb;
/* Does it fit? */
@@ -263,7 +333,11 @@ pbproc_prep_beacon (pbproc_t *ctx, mfs_tx_t *mfs)
prep->valid = true;
}
+#if (CONFIG_TRACE && CONFIG_MAC_PBPROC_EOC_ILRAM)
+void
+#else
void ARCH_ILRAM
+#endif
pbproc_prep_mpdu (pbproc_t *ctx, mfs_tx_t *mfs)
{
ca_access_param_t *access;
@@ -286,6 +360,9 @@ pbproc_prep_mpdu (pbproc_t *ctx, mfs_tx_t *mfs)
access_duration_tck = access->duration_tck;
/* If prepared frame is valid, this is a bursts continuation. */
uint ack_dtei;
+#if CONFIG_MAC_PBPROC_EOC_FC
+ bool rsof_fc = false, authenticated = false, mcf = false, mnbf = false;
+#endif
if (!prep->valid)
{
/* Fill easy fields. Work around Intellon behaviour: they do not
@@ -318,6 +395,26 @@ pbproc_prep_mpdu (pbproc_t *ctx, mfs_tx_t *mfs)
{
prep->tx_date = access->access_date;
}
+#if CONFIG_MAC_PBPROC_EOC_FC
+ rsof_fc = access->cfp && ctx->recv_mpdu.rx_params.bbf;
+ authenticated = true;
+ mcf = mfs->common.bcast;
+ mnbf = mfs->common.bcast && (mfs->common.mme || prep->unassociated);
+ /* No way to respect such a short schedule, give up. This is needed
+ * because later code will almost always send something in EoC. */
+ if (access_duration_tck < 2 * times->pre_fcs_tck
+ + MAC_RIFS_DEFAULT_TCK)
+ return;
+ /* dont create rsof while in unassoc state.
+ * avoid conflicts with station removal */
+ if (rsof_fc && ctx->config->tei == MAC_TEI_UNASSOCIATED)
+ {
+ /* set fields used in EoC for SACK + bidirectional */
+ ctx->recv_mpdu.rx_params.bbf = 0;
+ ctx->recv_mpdu.sackd.valid = false;
+ return;
+ }
+#endif
}
else
{
@@ -347,9 +444,16 @@ pbproc_prep_mpdu (pbproc_t *ctx, mfs_tx_t *mfs)
* instead and we always send them in ROBO (see #3988). */
if (!mfs->common.mme && MAC_TEI_IS_STA (prep->dtei))
{
+#if CONFIG_MAC_PBPROC_EOC_FC
+ sta_t *sta = mac_store_sta_get_noref (ctx->store, prep->dtei);
+#else
sta_t *sta = mac_store_sta_get (ctx->store, prep->dtei);
+#endif
if (sta)
{
+#if CONFIG_MAC_PBPROC_EOC_FC
+ authenticated = sta->authenticated;
+#endif
tonemaps_t *tms = sta->tx_tonemaps;
uint default_tmi = tms->default_tmi;
if (default_tmi == TONEMAP_INDEX_INITIAL_START)
@@ -358,7 +462,7 @@ pbproc_prep_mpdu (pbproc_t *ctx, mfs_tx_t *mfs)
sound_reason_code = TONEMAP_SRC_ERROR;
else if (default_tmi == TONEMAP_INDEX_INITIAL_SOUND_COMPLETE)
/* ROBO */;
- else
+ else if (!CONFIG_MAC_PBPROC_EOC_FC || mfs->seg_nb > 0)
{
uint offset_atu = MAC_TCK_TO_ATU (
prep->tx_date + times->pre_fcs_tck
@@ -446,12 +550,19 @@ pbproc_prep_mpdu (pbproc_t *ctx, mfs_tx_t *mfs)
if (tm_data_max_tck < tm->one_pb_data_tck)
tm_data_max_tck = tm->one_pb_data_tck;
}
- blk_release (sta);
+ if (!CONFIG_MAC_PBPROC_EOC_FC)
+ blk_release (sta);
}
}
+#if CONFIG_MAC_PBPROC_EOC_FC
+ /* No sound outside TDMA region in EoC, auth, CE run. */
+ if (!ctx->chandata_nb || !access->cfp || !authenticated)
+ sound_reason_code = TONEMAP_SRC_NULL;
+#else
/* No sound unless a CE is running. */
if (!ctx->chandata_nb)
sound_reason_code = TONEMAP_SRC_NULL;
+#endif
/* Prepare parameters. */
phy_gil_t previous_gil = prep->gil;
prep->phy_combo_params = tm->phy_combo_params[PHY_PB_SIZE_520];
@@ -479,6 +590,12 @@ pbproc_prep_mpdu (pbproc_t *ctx, mfs_tx_t *mfs)
}
else
{
+#if CONFIG_MAC_PBPROC_EOC_FC
+ if (mfs->seg_nb > 0)
+ max_seg_nb = MIN (mfs->seg_nb, pbproc_get_segments_nb (mfs));
+ else
+ max_seg_nb = 0;
+#else
if (mfs->ca_state == CA_MFS_STATE_REMOVED)
max_seg_nb = 0;
else if (mfs->fsm_state == MFS_FSM_CMD_RE_SYNC
@@ -489,7 +606,9 @@ pbproc_prep_mpdu (pbproc_t *ctx, mfs_tx_t *mfs)
max_seg_nb = MIN (mfs->seg_nb, (int) (mfs->window_size
- mfs->holes_seg_nb - prep->burst_seg_nb
- mfs->delta_between_ssn_min));
+#endif
}
+#if !CONFIG_MAC_PBPROC_EOC_FC
/* Early return if no segments. */
if (!max_seg_nb)
{
@@ -497,6 +616,7 @@ pbproc_prep_mpdu (pbproc_t *ctx, mfs_tx_t *mfs)
pbproc_prep_mpdu_short (ctx);
return;
}
+#endif
bits_per_pb = tm->bits_per_pb[PHY_PB_SIZE_520];
/* Do not put more than one segment in the last symbol. Add one symbol if
* this arise. */
@@ -591,6 +711,7 @@ pbproc_prep_mpdu (pbproc_t *ctx, mfs_tx_t *mfs)
&& symb_nb >= 2
&& tmi >= PHY_MOD_ROBO_NB
&& old_max_seg_nb > max_seg_nb + 1
+ && !CONFIG_MAC_PBPROC_EOC_FC
&& data_tck + 25 * 2000 < access_duration_tck)
{
dbg_claim (sound_reason_code == TONEMAP_SRC_NULL);
@@ -618,6 +739,7 @@ pbproc_prep_mpdu (pbproc_t *ctx, mfs_tx_t *mfs)
prep->ifs_tck = rifs_tck;
prep->flp_tck = times->pre_fcs_tck + data_tck + rifs_tck;
prep->symb_nb = symb_nb;
+#if !CONFIG_MAC_PBPROC_EOC_FC
/* Early return if no symbol. */
if (max_seg_nb == 0)
{
@@ -625,6 +747,13 @@ pbproc_prep_mpdu (pbproc_t *ctx, mfs_tx_t *mfs)
pbproc_prep_mpdu_short (ctx);
return;
}
+#else
+ /* Early return if no symbol only in CSMA region or bcast mfs,
+ * else wait for RSOF */
+ if (max_seg_nb == 0 && !access->cfp)
+ return;
+#endif
+#if !CONFIG_MAC_PBPROC_EOC_FC
/* Prepare RTS FC. */
if (prep->rts_cts)
{
@@ -634,8 +763,10 @@ pbproc_prep_mpdu (pbproc_t *ctx, mfs_tx_t *mfs)
/* Invalid FC 1.0, HP 1.0 stations will defer (20 symbols and ROBO). */
prep->rts_fc10 = 0x200000;
}
+#endif
/* Stop here for SOUND. */
- if (sound_reason_code != TONEMAP_SRC_NULL)
+ if (sound_reason_code != TONEMAP_SRC_NULL
+ && (!CONFIG_MAC_PBPROC_EOC_FC || symb_nb))
{
pbproc_prep_mpdu_sound (ctx, mfs, data_tck + rifs_tck);
return;
@@ -646,7 +777,8 @@ pbproc_prep_mpdu (pbproc_t *ctx, mfs_tx_t *mfs)
{
/* No encryption. */
}
- else if (mfs->common.bcast)
+ else if (mfs->common.bcast
+ && (!CONFIG_MAC_PBPROC_EOC_FC || !mfs->common.mme))
{
if (ctx->config->authenticated)
{
@@ -660,7 +792,11 @@ pbproc_prep_mpdu (pbproc_t *ctx, mfs_tx_t *mfs)
}
else if (MAC_TEI_IS_STA (prep->dtei))
{
+#if CONFIG_MAC_PBPROC_EOC_FC
+ sta_t *sta = mac_store_sta_get_noref (ctx->store, prep->dtei);
+#else
sta_t *sta = mac_store_sta_get (ctx->store, prep->dtei);
+#endif
if (sta)
{
if (sta->authenticated)
@@ -677,14 +813,35 @@ pbproc_prep_mpdu (pbproc_t *ctx, mfs_tx_t *mfs)
prep->nek = nek->nek_enc;
}
}
- blk_release (sta);
+ if (!CONFIG_MAC_PBPROC_EOC_FC)
+ blk_release (sta);
}
}
+#if CONFIG_MAC_PBPROC_EOC_FC
+ /* for rsof keep received key type */
+ if (rsof_fc)
+ {
+ eks = ctx->recv_mpdu.rx_params.eks;
+ if (eks != MAC_EKS_CLEAR)
+ {
+ mac_nek_t *nek = ctx->config->nek_mgr.use[0];
+ dbg_claim (nek);
+ if (nek->eks != eks)
+ nek = ctx->config->nek_mgr.use[1];
+ dbg_claim (nek);
+ dbg_claim (nek->in_use);
+ dbg_assert (nek->eks == eks);
+ prep->nek = nek->nek_enc;
+ }
+ }
+ prep->eks = eks; /* Easy life */
+#endif
prep->bypass_aes = eks == MAC_EKS_CLEAR;
// TODO: dbg_assert (mfs->common.mme || !prep->bypass_aes);
/* Data FC. */
prep->main_mfs_cmd = mfs->fsm_state;
prep->main_mfs_rsp = MFS_FSM_RSP_NB;
+#if !CONFIG_MAC_PBPROC_EOC_FC
if (1 /* TODO */)
{
mfs_fsm_cmd_t mfs_cmd_mgmt, mfs_cmd_data;
@@ -738,6 +895,109 @@ pbproc_prep_mpdu (pbproc_t *ctx, mfs_tx_t *mfs)
(MFS_RSP_DATA, MFS_FSM_RSP_ACK), /* TODO */
(BM_SACKI, 0xf)); /* TODO */
}
+#else
+ uint sackt0=PBPROC_FC_SACKT_UNIFORM, sacki0, sacki1=0;
+ if (ctx->recv_mpdu.sackd.valid)
+ {
+ sackt0 = ctx->recv_mpdu.sackd.sackt[0];
+ sacki0 = ctx->recv_mpdu.sackd.sacki_enc.si[0];
+ sacki1 = ctx->recv_mpdu.sackd.sacki_enc.si[1]
+ & BITS_ONES (rsof_fc ? PBPROC_FC_SACKI_EOC_RSOF_LEFT :
+ PBPROC_FC_SACKI_EOC_SOF_LEFT);
+ }
+ else
+ /* Could be also ALL_ERROR */
+ sacki0 = PBPROC_FC_SACKI_UNIFORM_NOT_AVAILABLE;
+ /* decision what to choose SOF or RSOF depend on position,
+ * SOF = cco or BCAST/MCAST, RSOF = sta only
+ * prepare RSOF/SOF by EOC specification */
+ if (rsof_fc)
+ {
+ prep->bbf = false;
+ dbg_assert(MAC_TEI_IS_EOC_STA(ctx->config->tei));
+ prep->fc_av.words[0] = BF_FILL (
+ PBPROC_FC_EOC_RSOF_W0,
+ (DT_AV, PBPROC_FC_DT_RSOF),
+ (ACCESS, false),
+ (SNID, ctx->alloc.snid),
+ (DTEI, prep->stei),
+ (RSOF_FL_AV, MAC_TCK_TO_FL (data_tck + rifs_tck)),
+ (NUM_SYM, symb_nb < 3 ? symb_nb : 3),
+ (SACKT0, sackt0));
+ prep->fc_av.words[1] = BF_FILL (
+ PBPROC_FC_EOC_RSOF_W1,
+ (SACKI0, sacki0));
+ prep->fc_av.words[2] = BF_FILL (
+ PBPROC_FC_EOC_RSOF_W2,
+ (SACKI1, sacki1),
+ (LID, prep->lid & 0xf),
+ (TMI_AV, tmi),
+ (BDF, true), /*TODO: status to be added */
+ (PBSZ, false));
+ prep->fc_av.words[3] = BF_FILL (
+ PBPROC_FC_EOC_RSOF_W3,
+ (SPPB, pbproc_prep_mpdu_sppb (ctx, prep->dtei, mfs, max_seg_nb)));
+ }
+ else
+ {
+ bool direction = !MAC_TEI_IS_EOC_CCO (ctx->config->tei);
+ prep->bbf = !mfs->common.bcast
+ && access->cfp
+ && !direction;
+ uint mrdur_tck = 0;
+ if (prep->bbf)
+ {
+ /* TODO: remove MAC_CF_SOF_RSOF_IFS_TCK, and therefore comparison
+ * with 0. */
+ mrdur_tck = MIN (2 * times->pre_fcs_tck + times->max_fl_tck
+ + MAC_TOLERANCE_TCK + MAC_TCK_PER_FL - 1,
+ (uint) MAX (0, (int) (access_duration_tck
+ - prep->flp_tck
+ - MAC_CF_SOF_RSOF_IFS_TCK)));
+ /* Include margin for reception date jitter, make sure slave will
+ * not send an out_of_alloc frame. */
+ if (mrdur_tck > MAC_TOLERANCE_TCK)
+ mrdur_tck -= MAC_TOLERANCE_TCK;
+ /* Cancel ridiculous durations. */
+ if (mrdur_tck < 2 * times->pre_fcs_tck + MAC_RIFS_DEFAULT_TCK)
+ {
+ prep->bbf = false;
+ mrdur_tck = 0;
+ }
+ }
+ prep->fc_av.words[0] = BF_FILL (
+ PBPROC_FC_EOC_SOF_W0,
+ (DT_AV, PBPROC_FC_DT_SOF),
+ (ACCESS, false),
+ (SNID, ctx->alloc.snid),
+ (DTEI, direction ? prep->stei : ack_dtei),
+ (LID, prep->lid & 0xF),
+ (EKS, eks),
+ (DIRECTION, direction),
+ (PBSZ, false),
+ (NUM_SYM, symb_nb < 3 ? symb_nb : 3),
+ (TMI_AV, tmi),
+ (MCF, mcf));
+ prep->fc_av.words[1] = BF_FILL (
+ PBPROC_FC_EOC_SOF_W1,
+ (FL_AV, MAC_TCK_TO_FL (data_tck + rifs_tck)),
+ (MPDU_CNT, 0),
+ (BURST_CNT, 0),
+ (MRDUR_FL, mrdur_tck / MAC_TCK_PER_FL),
+ (MNBF, mnbf),
+ (BBF, prep->bbf),
+ (SACKT0, sackt0));
+ prep->fc_av.words[2] = BF_FILL (
+ PBPROC_FC_EOC_SOF_W2,
+ (SACKI0, sacki0));
+ prep->fc_av.words[3] = BF_FILL (
+ PBPROC_FC_EOC_SOF_W3,
+ (SACKI1, sacki1));
+ }
+ /* Reset dangerous fields */
+ ctx->recv_mpdu.rx_params.bbf = 0;
+ ctx->recv_mpdu.sackd.valid = false;
+#endif
/* Invalid FC 1.0, HP 1.0 stations will defer (20 symbols and ROBO). */
prep->fc10 = 0x200000;
/* Prepare PB. */
@@ -748,7 +1008,7 @@ pbproc_prep_mpdu (pbproc_t *ctx, mfs_tx_t *mfs)
seg_nb_reserved = max_seg_nb - seg_nb;
/* Get head and tail. */
pb_t *seg;
- seg = mfs->head;
+ seg = (!CONFIG_MAC_PBPROC_EOC_FC || seg_nb) ? mfs->head : 0;
mpdu->main_head = seg;
for (i = 1; i < seg_nb; i++, seg = seg->next)
{
@@ -756,18 +1016,24 @@ pbproc_prep_mpdu (pbproc_t *ctx, mfs_tx_t *mfs)
}
mpdu->main_tail = seg;
/* Set Oldest Pending Segment Flag. */
- if (!prep->valid)
+ if (!prep->valid
+ && (!CONFIG_MAC_PBPROC_EOC_FC || mpdu->main_head))
mpdu->main_head->header.opsf = true;
/* Change MFS. */
mfs->seg_nb -= max_seg_nb;
- slist_slice (mfs->, seg, bare);
+ if (!CONFIG_MAC_PBPROC_EOC_FC || max_seg_nb)
+ slist_slice (mfs->, seg, bare);
mpdu->main_seg_nb = seg_nb;
prep->burst_seg_nb += seg_nb;
prep->main_seg_nb_reserved = seg_nb_reserved;
/* Prepare PB chain, simple one. */
mpdu->pb_nb_total = max_seg_nb + seg_nb_pending;
+#if CONFIG_MAC_PBPROC_EOC_FC
+ ctx->stats.tx_data_pb_total += mpdu->pb_nb_total;
+#endif
/* Loop over the last PB, PBDMA null PB is not working. */
- mpdu->main_tail->next = mpdu->main_tail;
+ if (!CONFIG_MAC_PBPROC_EOC_FC || mpdu->main_tail)
+ mpdu->main_tail->next = mpdu->main_tail;
/* Ok, ready to go! */
if (!prep->valid)
{
@@ -775,6 +1041,8 @@ pbproc_prep_mpdu (pbproc_t *ctx, mfs_tx_t *mfs)
blk_addref (mfs);
prep->valid = true;
}
+ if (CONFIG_MAC_PBPROC_EOC_FC)
+ GPIO_SET (LED_TRAFFIC, (seg_nb) ? 1 : 0);
}
static void __attribute__ ((noinline))
@@ -809,9 +1077,22 @@ pbproc_prep_mpdu_chain (pbproc_t *ctx)
pbproc_prep_mpdu_single_t *mpdu = prep->current;
dbg_claim (prep->valid);
dbg_claim_ptr (prep->main_mfs);
+#if !CONFIG_MAC_PBPROC_EOC_FC
dbg_claim_ptr (mpdu->main_head);
dbg_claim_ptr (mpdu->main_tail);
dbg_claim (mpdu->main_seg_nb);
+#else
+ if (mpdu->main_seg_nb)
+ {
+ dbg_claim_ptr (mpdu->main_head);
+ dbg_claim_ptr (mpdu->main_tail);
+ }
+ else
+ {
+ dbg_claim (!mpdu->main_head);
+ dbg_claim (!mpdu->main_tail);
+ }
+#endif
/* Already chained? */
if (prep->main_seg_nb_reserved != 0)
{
@@ -885,9 +1166,22 @@ pbproc_prep_mpdu_cancel (pbproc_t *ctx, uint mpdu_count)
pbproc_prep_mpdu_single_t *mpdu = &prep->mpdu[mpdu_count];
dbg_claim (prep->valid);
dbg_claim_ptr (prep->main_mfs);
+#if !CONFIG_MAC_PBPROC_EOC_FC
dbg_claim_ptr (mpdu->main_head);
dbg_claim_ptr (mpdu->main_tail);
- dbg_claim (mpdu->main_seg_nb);
+ dbg_claim (mpdu->main_seg_nb); /* possible on EoC */
+#else
+ if (mpdu->main_seg_nb)
+ {
+ dbg_claim_ptr (mpdu->main_head);
+ dbg_claim_ptr (mpdu->main_tail);
+ }
+ else
+ {
+ dbg_claim (!mpdu->main_head);
+ dbg_claim (!mpdu->main_tail);
+ }
+#endif
/* Commit. */
pbproc_prep_mpdu_commit (ctx, mpdu_count, NULL, NULL,
mpdu->main_head, mpdu->main_tail,
@@ -919,11 +1213,26 @@ pbproc_prep_mpdu_ack_all (pbproc_t *ctx, uint mpdu_count)
pbproc_prep_mpdu_single_t *mpdu = &prep->mpdu[mpdu_count];
dbg_claim (prep->valid);
dbg_claim_ptr (prep->main_mfs);
+#if !CONFIG_MAC_PBPROC_EOC_FC
dbg_claim_ptr (mpdu->main_head);
dbg_claim_ptr (mpdu->main_tail);
dbg_claim (mpdu->main_seg_nb);
dbg_claim (prep->main_seg_nb_reserved == 0);
dbg_claim (mpdu->pb_nb_total >= mpdu->main_seg_nb);
+#else
+ if (mpdu->main_seg_nb)
+ {
+ dbg_claim_ptr (mpdu->main_head);
+ dbg_claim_ptr (mpdu->main_tail);
+ }
+ else
+ {
+ dbg_claim (!mpdu->main_head);
+ dbg_claim (!mpdu->main_tail);
+ }
+ dbg_claim (prep->main_seg_nb_reserved == 0);
+ dbg_claim (mpdu->pb_nb_total >= mpdu->main_seg_nb);
+#endif
/* Commit. */
pbproc_prep_mpdu_commit (ctx, mpdu_count,
mpdu->main_head, mpdu->main_tail,
@@ -942,9 +1251,22 @@ pbproc_prep_mpdu_ack_bitmap (pbproc_t *ctx, uint mpdu_count,
pbproc_prep_mpdu_single_t *mpdu = &prep->mpdu[mpdu_count];
dbg_claim (prep->valid);
dbg_claim_ptr (prep->main_mfs);
+#if !CONFIG_MAC_PBPROC_EOC_FC
dbg_claim_ptr (mpdu->main_head);
dbg_claim_ptr (mpdu->main_tail);
dbg_claim (mpdu->main_seg_nb);
+#else
+ if (mpdu->main_seg_nb)
+ {
+ dbg_claim_ptr (mpdu->main_head);
+ dbg_claim_ptr (mpdu->main_tail);
+ }
+ else
+ {
+ dbg_claim (!mpdu->main_head);
+ dbg_claim (!mpdu->main_tail);
+ }
+#endif
dbg_claim (prep->main_seg_nb_reserved == 0);
dbg_claim (mpdu->pb_nb_total >= mpdu->main_seg_nb);
/* Read bitmap and collect acknowledged PB. */
@@ -1069,11 +1391,26 @@ pbproc_prep_mpdu_ack_encoded (pbproc_t *ctx, uint mpdu_count,
pbproc_prep_mpdu_single_t *mpdu = &prep->mpdu[mpdu_count];
dbg_claim (prep->valid);
dbg_claim_ptr (prep->main_mfs);
+#if !CONFIG_MAC_PBPROC_EOC_FC
dbg_claim_ptr (mpdu->main_head);
dbg_claim_ptr (mpdu->main_tail);
dbg_claim (mpdu->main_seg_nb);
dbg_claim (prep->main_seg_nb_reserved == 0);
dbg_claim (mpdu->pb_nb_total >= mpdu->main_seg_nb);
+#else
+ if (mpdu->main_seg_nb)
+ {
+ dbg_claim_ptr (mpdu->main_head);
+ dbg_claim_ptr (mpdu->main_tail);
+ }
+ else
+ {
+ dbg_claim (!mpdu->main_head);
+ dbg_claim (!mpdu->main_tail);
+ }
+ dbg_claim (prep->main_seg_nb_reserved == 0);
+ dbg_claim (mpdu->pb_nb_total >= mpdu->main_seg_nb);
+#endif
/* Uncompress. */
pbproc_prep_mpdu_ack_encoded_t enc =
{
@@ -1170,6 +1507,9 @@ pbproc_prep_mpdu_ack (pbproc_t *ctx, const u8 sackt[],
dbg_claim (sacki_dec);
pbproc_prep_mpdu_t *prep = &ctx->prep_mpdu;
dbg_claim (prep->valid);
+#if CONFIG_MAC_COMMON_EOC_MFS
+ prep->main_mfs->no_reply_count = 0;
+#endif
/* Handle SACKD for each MPDU. */
for (mpdu_count = prep->burst_mpdu_nb - 1; mpdu_count >= 0; mpdu_count--)
{
@@ -1316,6 +1656,29 @@ pbproc_prep_mpdu_commit_fsm (pbproc_t *ctx)
}
}
+#if CONFIG_MAC_PBPROC_EOC_FC
+
+/** Maximum number of transmissions toward STA which does not reply*/
+#define PBPROC_TX_ATTEMPTS_NB 5
+
+void
+pbproc_prep_mpdu_access_track (pbproc_t *ctx)
+{
+ dbg_claim (ctx);
+ pbproc_prep_mpdu_t * mpdu = &ctx->prep_mpdu;
+ if (mpdu->valid && !mpdu->main_mfs->common.bcast)
+ {
+ mfs_tx_t * mfs = mpdu->main_mfs;
+ if (++mfs->no_reply_count > PBPROC_TX_ATTEMPTS_NB)
+ {
+ sta_t *sta = mac_store_sta_get_noref (ctx->store, mfs->common.tei);
+ if (sta)
+ sta->poll_off |= 1;
+ }
+ }
+}
+#endif
+
void ARCH_ILRAM
pbproc_prep_mpdu_commit_burst (pbproc_t *ctx)
{
@@ -1401,8 +1764,10 @@ pbproc_prep_mpdu_commit_burst (pbproc_t *ctx)
u16 min_tx_ssn = mfs->head ? mfs->head->header.ssn : mfs->next_ssn;
mfs->delta_between_ssn_min += min_tx_ssn - prep->min_rx_ssn;
}
+#if !CONFIG_MAC_PBPROC_EOC_FC
/* Commit FSM change. */
pbproc_prep_mpdu_commit_fsm (ctx);
+#endif
/* Inform CA. */
ca_access_done (ctx->ca);
/* No longer valid. */
@@ -1413,6 +1778,7 @@ pbproc_prep_mpdu_commit_burst (pbproc_t *ctx)
prep->valid = false;
}
+#if !CONFIG_MAC_PBPROC_EOC_FC
static void
pbproc_prep_mpdu_short (pbproc_t *ctx)
{
@@ -1470,6 +1836,7 @@ pbproc_prep_mpdu_short (pbproc_t *ctx)
/* Invalid FC 1.0, HP 1.0 stations will defer (20 symbols and ROBO). */
prep->fc10 = 0x200000;
}
+#endif
static void
pbproc_prep_mpdu_sound (pbproc_t *ctx, mfs_tx_t *mfs, uint fl_tck)
@@ -1482,6 +1849,7 @@ pbproc_prep_mpdu_sound (pbproc_t *ctx, mfs_tx_t *mfs, uint fl_tck)
/* No encryption. */
prep->bypass_aes = true;
/* SOUND FC. */
+#if !CONFIG_MAC_PBPROC_EOC_FC
prep->fc_av.words[0] = BF_FILL (
PBPROC_FC_SOUND_W0,
(DT_AV, PBPROC_FC_DT_SOUND),
@@ -1509,12 +1877,55 @@ pbproc_prep_mpdu_sound (pbproc_t *ctx, mfs_tx_t *mfs, uint fl_tck)
prep->fc_av.words[3] = BF_FILL (
PBPROC_FC_SOUND_W3,
(RESERVED2, 0));
+#else
+ uint sackt0 = PBPROC_FC_SACKT_UNIFORM;
+ uint sacki0 = PBPROC_FC_SACKI_UNIFORM_NOT_AVAILABLE, sacki1 = 0;
+ /* Inject sacki data */
+ if (ctx->recv_mpdu.sackd.valid)
+ {
+ sackt0 = ctx->recv_mpdu.sackd.sackt[0];
+ sacki0 = ctx->recv_mpdu.sackd.sacki_enc.si[0]
+ & BITS_ONES (PBPROC_FC_SACKI_EOC_SOUND_LEFT);
+ sacki1 = (ctx->recv_mpdu.sackd.sacki_enc.si[0] >> PBPROC_FC_SACKI_EOC_SOUND_LEFT)
+ | (ctx->recv_mpdu.sackd.sacki_enc.si[1] << (32 - PBPROC_FC_SACKI_EOC_SOUND_LEFT));
+ }
+ prep->fc_av.words[0] = BF_FILL (
+ PBPROC_FC_EOC_SOUND_W0,
+ (DT_AV, PBPROC_FC_DT_SOUND),
+ (ACCESS, false),
+ (SNID, ctx->alloc.snid),
+ (DTEI, (MAC_TEI_IS_EOC_STA(ctx->config->tei))
+ ? prep->stei : prep->dtei),
+ (FL_AV, MAC_TCK_TO_FL (fl_tck)),
+ (LID, prep->lid));
+ prep->fc_av.words[1] = BF_FILL (
+ PBPROC_FC_EOC_SOUND_W1,
+ (SACKT0, sackt0),
+ (DIRECTION, MAC_TEI_IS_EOC_STA(ctx->config->tei)),
+ (PBSZ, false), /* TODO */
+ (SAF, false),
+ (SCF, false),
+ (REQ_TM, TONEMAP_MAX),
+ (MPDU_CNT, 0), /* TODO */
+ (SACKI0, sacki0));
+ prep->fc_av.words[2] = BF_FILL (
+ PBPROC_FC_EOC_SOUND_W2,
+ (SACKI1, sacki1));
+ prep->fc_av.words[3] = BF_FILL (
+ PBPROC_FC_EOC_SOUND_W3,
+ (SRC, prep->sound_reason_code));
+#endif
/* Invalid FC 1.0, HP 1.0 stations will defer (20 symbols and ROBO). */
prep->fc10 = 0x200000;
/* Ok, ready to go! */
prep->main_mfs = mfs;
blk_addref (mfs);
prep->valid = true;
+ if (CONFIG_MAC_PBPROC_EOC_FC)
+ {
+ /* reset sackd */
+ ctx->recv_mpdu.sackd.valid = false;
+ }
}
void
diff --git a/cesar/mac/pbproc/src/trace.c b/cesar/mac/pbproc/src/trace.c
index 21a1e5edb4..d15bc62682 100644
--- a/cesar/mac/pbproc/src/trace.c
+++ b/cesar/mac/pbproc/src/trace.c
@@ -26,11 +26,15 @@ static int
pbproc_trace_format_fc (char *text, uint text_size, const int *data,
uint size)
{
+#if !CONFIG_MAC_PBPROC_EOC_FC
static const char *mfs_cmd_str[] = { "INIT", "IN_SYNC", "RE_SYNC",
"RELEASE", "NOP", "RES=5", "RES=6", "RES=7" };
+ char mrtfl[sizeof ("bbf mrtfl=0xn ")];
+#else
+ char mrdur_fl[sizeof ("bbf mrdur_fl=0xnnn ")];
+#endif
static const char *mfs_rsp_str[] = { "ACK", "NACK", "FAIL", "HOLD" };
static const char *sackt[] = { "m", "mc", "nr", "u" };
- char mrtfl[sizeof ("bbf mrtfl=0xn ")];
char mpdu_cnt[sizeof ("mpdu_cnt=n ")];
char burst_cnt[sizeof ("burst_cnt=n ")];
dbg_assert (size == 4);
@@ -54,13 +58,38 @@ pbproc_trace_format_fc (char *text, uint text_size, const int *data,
| fc->beacon.bto3_msb8 << 8);
break;
case PBPROC_FC_DT_SOF:
+#if !CONFIG_MAC_PBPROC_EOC_FC
dbg_check (snprintf (mrtfl, sizeof (mrtfl), "bbf mrtfl=0x%x ",
fc->sof.mrtfl) < (int) sizeof (mrtfl));
+#else
+ dbg_check (snprintf (mrdur_fl, sizeof (mrdur_fl),
+ "bbf mrdur_fl=0x%x ",
+ fc->sof.mrdur_fl) < (int) sizeof (mrdur_fl));
+#endif
dbg_check (snprintf (mpdu_cnt, sizeof (mpdu_cnt), "mpdu_cnt=%d ",
fc->sof.mpdu_cnt) < (int) sizeof (mpdu_cnt));
dbg_check (snprintf (burst_cnt, sizeof (burst_cnt),
"burst_cnt=%d ", fc->sof.burst_cnt)
< (int) sizeof (burst_cnt));
+#if CONFIG_MAC_PBPROC_EOC_FC
+ r = snprintf (text, text_size,
+ "SOF snid=%s%d dir=%s dtei=0x%02x lid=0x%02x"
+ " %s%seks=%d"
+ " %snum_sym=%d tmi=%d fl_av=%d "
+ "%s%s%s"
+ "sackt0=0x%x sacki0=0x%x, sacki1=0x%x",
+ FC_ACCESS_SNID (fc),
+ fc->sof.direction ? "STA->CCO" : "CCO->STA",
+ fc->sof.dtei, fc->sof.lid,
+ fc->sof.mcf ? "mcf " : "",
+ fc->sof.mnbf ? "mnbf " : "", fc->sof.eks,
+ fc->sof.pbsz ? "pb136 " : "", fc->sof.num_sym,
+ fc->sof.tmi_av, fc->sof.fl_av,
+ fc->sof.mpdu_cnt ? mpdu_cnt : "",
+ fc->sof.burst_cnt ? burst_cnt : "",
+ fc->sof.bbf ? mrdur_fl : "",
+ fc->sof.sackt0, fc->sof.sacki0, fc->sof.sacki1);
+#else
r = snprintf (text, text_size,
"SOF snid=%s%d stei=0x%02x dtei=0x%02x lid=0x%02x"
" %s%s%s%s%s%seks=%d ppb=0x%02x ble=0x%02x"
@@ -88,6 +117,7 @@ pbproc_trace_format_fc (char *text, uint text_size, const int *data,
mfs_rsp_str[fc->sof.mfs_rsp_mgmt],
mfs_rsp_str[fc->sof.mfs_rsp_data],
fc->sof.bm_sacki);
+#endif
break;
case PBPROC_FC_DT_SACK:
r = snprintf (text, text_size,
@@ -127,6 +157,25 @@ pbproc_trace_format_fc (char *text, uint text_size, const int *data,
dbg_check (snprintf (mpdu_cnt, sizeof (mpdu_cnt), "mpdu_cnt=%d ",
fc->sound.mpdu_cnt)
< (int) sizeof (mpdu_cnt));
+#if CONFIG_MAC_PBPROC_EOC_FC
+ r = snprintf (text, text_size,
+ "SOUND snid=%s%d dir=%s dtei=0x%02x lid=0x%02x"
+ " %s%s%sreq_tm=%d fl_av=%d %s"
+ "src=0x%02x"
+ " sackt0=0x%x sacki0=0x%x, sacki1=0x%x",
+ FC_ACCESS_SNID (fc),
+ fc->sof.direction ? "STA->CCO" : "CCO->STA",
+ fc->sound.dtei,
+ fc->sound.lid,
+ fc->sound.pbsz ? "pb136 " : "",
+ fc->sound.saf ? "saf " : "",
+ fc->sound.scf ? "scf " : "",
+ fc->sound.req_tm, fc->sound.fl_av,
+ fc->sound.mpdu_cnt ? mpdu_cnt : "",
+ fc->sound.src,
+ fc->sound.sackt0, fc->sound.sacki0,
+ fc->sound.sacki1);
+#else
r = snprintf (text, text_size,
"SOUND snid=%s%d stei=0x%02x dtei=0x%02x lid=0x%02x"
" %s%s%s%s%sreq_tm=%d fl_av=%d %sppb=0x%02x"
@@ -141,8 +190,23 @@ pbproc_trace_format_fc (char *text, uint text_size, const int *data,
fc->sound.req_tm, fc->sound.fl_av,
fc->sound.mpdu_cnt ? mpdu_cnt : "", fc->sound.ppb,
fc->sound.src);
+#endif
break;
case PBPROC_FC_DT_RSOF:
+#if CONFIG_MAC_PBPROC_EOC_FC
+ r = snprintf (text, text_size,
+ "RSOF snid=%s%d dtei=0x%02x lid=0x%02x"
+ " %s%ssppb=0x%x"
+ " fl_av=%d tmi=%d num_sym=%d"
+ " sackt0=0x%x sacki0=0x%x sacki1=0x%x",
+ FC_ACCESS_SNID (fc), fc->rsof.dtei,
+ fc->rsof.lid,
+ fc->rsof.bdf ? "bdf " : "",
+ fc->rsof.pbsz ? "pb136 " : "", fc->rsof.sppb,
+ fc->rsof.rsof_fl_av, fc->rsof.tmi_av,
+ fc->rsof.num_sym,
+ fc->rsof.sackt0, fc->rsof.sacki0, fc->rsof.sacki1);
+#else
r = snprintf (text, text_size,
"RSOF snid=%s%d dtei=0x%02x"
" %s%s%s%smfs=m%s,%s,%s,m%s sackt=%s,%s,%s,%s"
@@ -165,6 +229,7 @@ pbproc_trace_format_fc (char *text, uint text_size, const int *data,
: fc->rsof.rsof_fl_av * 2 - 0x200, fc->rsof.tmi_av,
fc->rsof.pbsz ? "pb136 " : "",
fc->rsof.num_sym);
+#endif
break;
default:
r = snprintf (text, text_size, "UNKNOWN dt=%d snid=%s%d",
diff --git a/cesar/mac/pbproc/stub/Module b/cesar/mac/pbproc/stub/Module
new file mode 100644
index 0000000000..6faf57c78a
--- /dev/null
+++ b/cesar/mac/pbproc/stub/Module
@@ -0,0 +1 @@
+SOURCES := pbproc_stub.c
diff --git a/cesar/mac/pbproc/stub/src/pbproc_stub.c b/cesar/mac/pbproc/stub/src/pbproc_stub.c
new file mode 100644
index 0000000000..22f77358ec
--- /dev/null
+++ b/cesar/mac/pbproc/stub/src/pbproc_stub.c
@@ -0,0 +1,26 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2011 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cesar/mac/pbproc/stub/src/pbproc_stub.c
+ * \brief PBproc stubs.
+ * \ingroup mac_pbproc
+ */
+#include "common/std.h"
+#include "mac/pbproc/pbproc.h"
+
+void
+pbproc_parameters_adjust (pbproc_t *ctx, bool adjust) __attribute__ ((weak));
+
+void
+pbproc_parameters_adjust (pbproc_t *ctx, bool adjust) {}
+
+void
+pbproc_activate (pbproc_t *ctx, bool flag) __attribute__((weak));
+
+void
+pbproc_activate (pbproc_t *ctx, bool flag) {}
diff --git a/cesar/mac/pbproc/test/fsm/Makefile b/cesar/mac/pbproc/test/fsm/Makefile
index ee1f48266a..232d57ced5 100644
--- a/cesar/mac/pbproc/test/fsm/Makefile
+++ b/cesar/mac/pbproc/test/fsm/Makefile
@@ -4,5 +4,6 @@ HOST_PROGRAMS = test_fsm
test_fsm_SOURCES = test_fsm.c
test_fsm_MODULES = lib mac/pbproc
mac_pbproc_MODULE_SOURCES = fsm.c
+test_fsm_CONFIG_MODULES = mac/common
include $(BASE)/common/make/top.mk
diff --git a/cesar/mac/pbproc/test/int/Config b/cesar/mac/pbproc/test/int/Config
index 2fad84bb33..8c0f945778 100644
--- a/cesar/mac/pbproc/test/int/Config
+++ b/cesar/mac/pbproc/test/int/Config
@@ -4,3 +4,10 @@ CONFIG_STATS = n
CONFIG_DEBUG_CLAIM[target] = n
CONFIG_INTERFACE_SNIFFER[target] = n
CONFIG_ARCH_ILRAM_PRIO_LOW[target] = 0
+
+CONFIG_AV_ONLY_MODE = y
+CONFIG_MAC_COMMON_EOC_SCHED = y
+CONFIG_MAC_COMMON_EOC_MFS = y
+CONFIG_MAC_COMMON_EOC_TEI = y
+CONFIG_MAC_PBPROC_EOC_FC = y
+CONFIG_MAC_PBPROC_EOC_ILRAM = y
diff --git a/cesar/mac/pbproc/test/int/Makefile b/cesar/mac/pbproc/test/int/Makefile
index 0a04d4c852..0d15643383 100644
--- a/cesar/mac/pbproc/test/int/Makefile
+++ b/cesar/mac/pbproc/test/int/Makefile
@@ -16,9 +16,11 @@ common_MODULES = lib hal host mac/pbproc mac/ca mac/common \
TARGET_PROGRAMS = test_pbproc
test_pbproc_SOURCES = $(common_SOURCES) dataplane_stub.c
test_pbproc_MODULES = $(common_MODULES) hle/tools interface cl/stub bufmgr
+#test_pbproc_CONFIG_MODULES = cp/sta/mgr
TARGET_maximus_PROGRAMS = test_pbproc_maximus
test_pbproc_maximus_SOURCES = $(common_SOURCES)
test_pbproc_maximus_MODULES = $(common_MODULES)
+#test_pbproc_maximus_CONFIG_MODULES = cp/sta/mgr
include $(BASE)/common/make/top.mk
diff --git a/cesar/mac/pbproc/test/int/src/add_seg.c b/cesar/mac/pbproc/test/int/src/add_seg.c
index 9537ed820a..d6e7f63a8d 100644
--- a/cesar/mac/pbproc/test/int/src/add_seg.c
+++ b/cesar/mac/pbproc/test/int/src/add_seg.c
@@ -48,7 +48,11 @@ test_pbproc_add_seg (test_pbproc_t *ctx, bool mme, uint lid, uint tei,
mfs = mac_store_mfs_add_tx (ctx->store, tei == MAC_TEI_BCAST, mme,
mme ? MAC_LID_NONE : lid, tei, &added);
if (added)
+ {
+ if (CONFIG_MAC_PBPROC_EOC_FC)
+ mfs->cfp = false;
ca_mfs_add (ctx->ca, mfs);
+ }
/* Generate segments. */
blk_t *blk_first, *blk_last;
blk_first = blk_alloc_desc_range (seg_nb, &blk_last);
diff --git a/cesar/mac/pbproc/test/int/src/test_pbproc.c b/cesar/mac/pbproc/test/int/src/test_pbproc.c
index 199c2119ab..fec62542e7 100644
--- a/cesar/mac/pbproc/test/int/src/test_pbproc.c
+++ b/cesar/mac/pbproc/test/int/src/test_pbproc.c
@@ -508,3 +508,12 @@ cyg_user_start (void)
test_pbproc_init (&test_pbproc_global, fcall);
}
+void
+phy_freq_error_set (phy_t *ctx, bool sync, s32 rho_q30) __attribute__ ((weak));
+
+void
+phy_freq_error_set (phy_t *ctx, bool sync, s32 rho_q30)
+{
+ dbg_assert_ptr (ctx);
+ /* Ignored. */
+}
diff --git a/cesar/mac/pbproc/test/pbproc/src/test_pbproc.c b/cesar/mac/pbproc/test/pbproc/src/test_pbproc.c
index e3d6b412cd..23238d271a 100644
--- a/cesar/mac/pbproc/test/pbproc/src/test_pbproc.c
+++ b/cesar/mac/pbproc/test/pbproc/src/test_pbproc.c
@@ -148,6 +148,9 @@ test_pbproc_check_stats_ (test_t t, test_pbproc_t *ctx,
TEST_PBPROC_CHECK_STAT(cw_lost);
TEST_PBPROC_CHECK_STAT(aifs);
TEST_PBPROC_CHECK_STAT(rx_out_of_alloc);
+#if CONFIG_MAC_PBPROC_EOC_FC
+ TEST_PBPROC_CHECK_STAT(rx_rsof_out_of_alloc);
+#endif
TEST_PBPROC_CHECK_STAT(rx_pool_shortage);
TEST_PBPROC_CHECK_STAT(rx_handle_fc);
TEST_PBPROC_CHECK_STAT(rx_beacon);
diff --git a/cesar/mac/pbproc/test/pbproc_eoc/Config b/cesar/mac/pbproc/test/pbproc_eoc/Config
new file mode 100644
index 0000000000..016152a6d0
--- /dev/null
+++ b/cesar/mac/pbproc/test/pbproc_eoc/Config
@@ -0,0 +1,7 @@
+CONFIG_TRACE = y
+CONFIG_STATS = n
+CONFIG_AV_ONLY_MODE = y
+CONFIG_MAC_PBPROC_EOC_FC = y
+CONFIG_MAC_COMMON_EOC_MFS = y
+CONFIG_MAC_COMMON_EOC_SCHED = y
+CONFIG_MAC_COMMON_EOC_TEI = y
diff --git a/cesar/mac/pbproc/test/pbproc_eoc/Makefile b/cesar/mac/pbproc/test/pbproc_eoc/Makefile
new file mode 100644
index 0000000000..eebb4a2252
--- /dev/null
+++ b/cesar/mac/pbproc/test/pbproc_eoc/Makefile
@@ -0,0 +1,15 @@
+BASE = ../../../..
+
+DEFS = -DNO_PRIVATE
+
+INCLUDES = mac/pbproc/test/pbproc/override mac/pbproc/test/pbproc_eoc
+
+HOST_PROGRAMS = test_pbproc
+test_pbproc_SOURCES = test_pbproc.c prep_mpdu.c tx_data.c tx_sound.c \
+ rx_data.c rx_sound.c \
+ scenario_defs.c ca.c phy.c hal.c utils.c
+test_pbproc_MODULES = lib lib/scenario mac/pbproc mac/common hal/watchdog
+test_pbproc_MODULES_CONFIG = cp/sta/mgr cl
+hal_watchdog_MODULE_SOURCES =
+
+include $(BASE)/common/make/top.mk
diff --git a/cesar/mac/pbproc/test/pbproc_eoc/inc/scenario_defs.h b/cesar/mac/pbproc/test/pbproc_eoc/inc/scenario_defs.h
new file mode 100644
index 0000000000..37f88e5ce0
--- /dev/null
+++ b/cesar/mac/pbproc/test/pbproc_eoc/inc/scenario_defs.h
@@ -0,0 +1,349 @@
+#ifndef inc_scenario_defs_h
+#define inc_scenario_defs_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2007 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file inc/scenario_defs.h
+ * \brief Scenario entries definition.
+ * \ingroup test
+ */
+
+#include "inc/test_pbproc.h"
+
+/* Scenario globals. */
+#define SCENARIO_DEFS_GLOBALS \
+ test_pbproc_t *tp;
+
+/* Scenario actions. */
+#define SCENARIO_DEFS_ACTIONS \
+ phy_rx_fc, \
+ phy_access, \
+ phy_access_conf, \
+ phy_pbdma, \
+ phy_deferred, \
+ phy_extra_timer, \
+ pbproc_activate
+
+typedef struct
+{
+ u32 rx_date;
+ u32 rx_sysdate;
+ u32 *fc_av;
+ bool prp_won;
+ uint slot_count;
+ u32 fc10;
+} scenario_action_phy_rx_fc_t;
+
+void
+scenario_action_phy_rx_fc_cb (scenario_globals_t *globals,
+ scenario_params_t *params);
+
+typedef struct
+{
+ mfs_tx_t *mfs;
+ ca_access_param_t *access_param;
+ bool prp_won;
+ uint slot_count;
+ uint delay_tck;
+} scenario_action_phy_access_t;
+
+void
+scenario_action_phy_access_cb (scenario_globals_t *globals,
+ scenario_params_t *params);
+
+typedef scenario_empty_t scenario_action_phy_access_conf_t;
+
+void
+scenario_action_phy_access_conf_cb (scenario_globals_t *globals,
+ scenario_params_t *params);
+
+typedef struct
+{
+ bool pb_null;
+ bool pb_crc_error;
+ bool pb_it;
+ bool end_rx_pb;
+ bool end_tx_pb;
+ bool end_chandata;
+ uint null_pb_index;
+ u32 *crc_bitmap;
+ uint crc_bitmap_bits;
+} scenario_action_phy_pbdma_t;
+
+void
+scenario_action_phy_pbdma_cb (scenario_globals_t *globals,
+ scenario_params_t *params);
+
+typedef scenario_empty_t scenario_action_phy_deferred_t;
+
+void
+scenario_action_phy_deferred_cb (scenario_globals_t *globals,
+ scenario_params_t *params);
+
+typedef scenario_empty_t scenario_action_phy_extra_timer_t;
+
+void
+scenario_action_phy_extra_timer_cb (scenario_globals_t *globals,
+ scenario_params_t *params);
+
+typedef struct
+{
+ bool flag;
+} scenario_action_pbproc_activate_t;
+
+void
+scenario_action_pbproc_activate_cb (scenario_globals_t *globals,
+ scenario_params_t *params);
+
+/* Scenario events. */
+#define SCENARIO_DEFS_EVENTS \
+ phy_prepare, \
+ phy_deferred_schedule, \
+ phy_set_tonemap, \
+ phy_freq_error_set, \
+ phy_tx_fc10, \
+ phy_tx_param, \
+ phy_tx_param_short, \
+ phy_tx_param_sound, \
+ phy_tx_frame, \
+ phy_tx_prepare, \
+ phy_tx_cancel, \
+ phy_rx_param, \
+ phy_rx_activate, \
+ phy_rx_prepare, \
+ phy_rx_prepare_short, \
+ phy_rx_prepare_sound, \
+ phy_access_timer_cancel, \
+ phy_extra_timer_program, \
+ phy_pbdma_start, \
+ phy_pbdma_update, \
+ phy_pbdma_start_chandata, \
+ phy_spoc_tx_set, \
+ phy_spoc_rx_set, \
+ ca_access_activate, \
+ ca_access_deactivate, \
+ ca_access_hold, \
+ ca_access_vcs_restart, \
+ ca_access_vcs_restart_eifs, \
+ ca_access_program, \
+ ca_access_reprogram, \
+ ca_access_defer, \
+ ca_access_aifs, \
+ ca_access_get_mfs, \
+ ca_access_done, \
+ ca_backoff_deferred, \
+ ca_backoff_success, \
+ ca_backoff_cancel, \
+ pbproc_rx_cb, \
+ pbproc_rx_beacon_cb
+
+typedef struct
+{
+ phy_prepare_type_t type;
+ bool wait;
+} scenario_event_phy_prepare_t;
+
+typedef scenario_empty_t scenario_event_phy_deferred_schedule_t;
+
+typedef scenario_empty_t scenario_event_phy_set_tonemap_t;
+
+typedef struct
+{
+ bool sync;
+ s32 rho_q30;
+} scenario_event_phy_freq_error_set_t;
+
+typedef struct
+{
+ u32 date;
+ u32 fc10;
+} scenario_event_phy_tx_fc10_t;
+
+typedef struct
+{
+ phy_fc_mode_t fc_mode;
+ phy_mod_t mod;
+ phy_fecrate_t fecrate;
+ phy_pb_size_t pb_size;
+ phy_gil_t gil;
+ uint symbol_nb;
+} scenario_event_phy_tx_param_t;
+
+typedef struct
+{
+ phy_fc_mode_t fc_mode;
+} scenario_event_phy_tx_param_short_t;
+
+typedef struct
+{
+ phy_fc_mode_t fc_mode;
+ uint nb_pb;
+ phy_mod_t mod;
+ phy_fecrate_t fecrate;
+ phy_pb_size_t pb_size;
+ phy_gil_t gil;
+ uint symbol_nb;
+} scenario_event_phy_tx_param_sound_t;
+
+typedef struct
+{
+ u32 date;
+ bool want_conf;
+ bool stop_tx_on_prp_lost;
+} scenario_event_phy_tx_frame_t;
+
+typedef scenario_empty_t scenario_event_phy_tx_prepare_t;
+
+typedef scenario_empty_t scenario_event_phy_tx_cancel_t;
+
+typedef struct
+{
+ phy_fc_mode_t fc_mode;
+} scenario_event_phy_rx_param_t;
+
+typedef struct
+{
+ bool now;
+ u32 date;
+ bool pre_detection;
+} scenario_event_phy_rx_activate_t;
+
+typedef struct
+{
+ uint nb_pb;
+ phy_mod_t mod;
+ phy_fecrate_t fecrate;
+ phy_pb_size_t pb_size;
+ phy_gil_t gil;
+ uint symbol_nb;
+ uint tcc_halfit;
+} scenario_event_phy_rx_prepare_t;
+
+typedef scenario_empty_t scenario_event_phy_rx_prepare_short_t;
+
+typedef struct
+{
+ uint nb_pb;
+ phy_mod_t mod;
+ phy_fecrate_t fecrate;
+ phy_pb_size_t pb_size;
+ phy_gil_t gil;
+ uint symbol_nb;
+} scenario_event_phy_rx_prepare_sound_t;
+
+typedef scenario_empty_t scenario_event_phy_access_timer_cancel_t;
+
+typedef struct
+{
+ u32 date;
+} scenario_event_phy_extra_timer_program_t;
+
+typedef struct
+{
+ bool bypass_aes;
+ uint nb_total;
+ uint nb_pb_it;
+ bool chandata;
+ bool now;
+} scenario_event_phy_pbdma_start_t;
+
+typedef struct
+{
+ uint nb_pb_it;
+} scenario_event_phy_pbdma_update_t;
+
+typedef scenario_empty_t scenario_event_phy_pbdma_start_chandata_t;
+
+typedef scenario_empty_t scenario_event_phy_spoc_tx_set_t;
+
+typedef scenario_empty_t scenario_event_phy_spoc_rx_set_t;
+
+typedef struct
+{
+ u32 date;
+ mac_coexistence_mode_t coexistence_mode;
+ u8 snid;
+ bool hybrid;
+ bool merge;
+ uint nek_switch;
+} scenario_event_ca_access_activate_t;
+
+typedef scenario_empty_t scenario_event_ca_access_deactivate_t;
+
+typedef scenario_empty_t scenario_event_ca_access_hold_t;
+
+typedef struct
+{
+ u32 end_date;
+} scenario_event_ca_access_vcs_restart_t;
+
+typedef struct
+{
+ u32 start_date;
+} scenario_event_ca_access_vcs_restart_eifs_t;
+
+typedef struct
+{
+ u32 date;
+} scenario_event_ca_access_program_t;
+
+typedef struct
+{
+ u32 date;
+ uint duration_tck;
+ uint tei;
+} scenario_event_ca_access_reprogram_t;
+
+typedef struct
+{
+ u32 date;
+} scenario_event_ca_access_defer_t;
+
+typedef struct
+{
+ mac_coexistence_mode_t coexistence_mode;
+ u8 snid;
+ bool hybrid;
+ bool merge;
+ uint nek_switch;
+} scenario_event_ca_access_aifs_t;
+
+typedef scenario_empty_t scenario_event_ca_access_get_mfs_t;
+
+typedef scenario_empty_t scenario_event_ca_access_done_t;
+
+typedef struct
+{
+ uint slot_count;
+} scenario_event_ca_backoff_deferred_t;
+
+typedef scenario_empty_t scenario_event_ca_backoff_success_t;
+
+typedef scenario_empty_t scenario_event_ca_backoff_cancel_t;
+
+typedef struct
+{
+ uint pb_nb;
+ uint chandata_nb;
+ u32 beacon_period_start_date;
+ uint lid;
+ uint fl_tck;
+ u8 pending_seg_info;
+ uint pb_size;
+ uint mpdu_cnt;
+ mfs_fsm_cmd_t mfs_cmd_data;
+ mfs_fsm_cmd_t mfs_cmd_mme;
+ uint duration_tck;
+} scenario_event_pbproc_rx_cb_t;
+
+typedef struct
+{
+ uint duration_tck;
+} scenario_event_pbproc_rx_beacon_cb_t;
+
+#endif /* inc_scenario_defs_h */
diff --git a/cesar/mac/pbproc/test/pbproc_eoc/inc/test_pbproc.h b/cesar/mac/pbproc/test/pbproc_eoc/inc/test_pbproc.h
new file mode 100644
index 0000000000..db29992dbb
--- /dev/null
+++ b/cesar/mac/pbproc/test/pbproc_eoc/inc/test_pbproc.h
@@ -0,0 +1,96 @@
+#ifndef inc_test_pbproc_h
+#define inc_test_pbproc_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2007 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file inc/test_pbproc.h
+ * \brief PBProc test.
+ * \ingroup test
+ */
+#include "lib/test.h"
+#include "lib/rnd.h"
+#include "mac/common/config.h"
+#include "mac/common/ntb.h"
+#include "mac/common/store.h"
+#include "mac/ca/ca.h"
+#include "mac/pbproc/pbproc.h"
+#include "mac/pbproc/inc/context.h"
+
+/** Default NTB offset value. */
+#define TEST_PBPROC_NTB_OFFSET_TCK 0x12345
+
+/** Date offset for expiration tests. */
+#define TEST_PBPROC_EXPIRATION_DATE_OFFSET 1000000000
+
+/** End date of default allocation. */
+#define TEST_PBPROC_ALLOC_END_DATE 0x80000000
+
+/** Test pbproc context. */
+struct test_pbproc_t
+{
+ /** Random context. */
+ lib_rnd_t rnd[1];
+ /** Mac configuration. */
+ mac_config_t config;
+ /** Short network identifier. */
+ u8 snid;
+ /** Mac MFS and STA store. */
+ mac_store_t *store;
+ /** PB Processing context. */
+ pbproc_t *pbproc;
+ /** Channel Access context. */
+ ca_t *ca;
+ /** Recorded stats before test. */
+ pbproc_stat_t recorded_stats;
+};
+typedef struct test_pbproc_t test_pbproc_t;
+
+BEGIN_DECLS
+
+void
+test_pbproc_init (test_pbproc_t *ctx);
+
+/**
+ * Setup allocation in PBProc.
+ * \param ctx test context
+ * \param hybrid whether to use hybrid mode
+ * \param beacon_period_start_date start date of the beacon period
+ *
+ * This is to be done by PBProc on activate or AIFS, but this is a shortcut
+ * for tests.
+ */
+void
+test_pbproc_alloc (test_pbproc_t *ctx, bool hybrid,
+ u32 beacon_period_start_date);
+
+/**
+ * Check stats have been incremented.
+ * \param t test context
+ * \param ctx test pbproc context
+ * \param stats expected stats increment
+ */
+void
+test_pbproc_check_stats_ (test_t t, test_pbproc_t *ctx,
+ const pbproc_stat_t *stats);
+
+#define test_pbproc_check_stats(t, ctx, params...) \
+ test_pbproc_check_stats_ ((t), (ctx), & (pbproc_stat_t) { params })
+
+/**
+ * Reset stats.
+ * \param ctx test pbproc context
+ */
+void
+test_pbproc_check_stats_reset (test_pbproc_t *ctx);
+
+void
+test_pbproc_uninit (test_pbproc_t *ctx);
+
+END_DECLS
+
+#endif /* inc_test_pbproc_h */
diff --git a/cesar/mac/pbproc/test/pbproc_eoc/inc/utils.h b/cesar/mac/pbproc/test/pbproc_eoc/inc/utils.h
new file mode 100644
index 0000000000..8de5d1f8b5
--- /dev/null
+++ b/cesar/mac/pbproc/test/pbproc_eoc/inc/utils.h
@@ -0,0 +1,82 @@
+#ifndef inc_utils_h
+#define inc_utils_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2007 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file inc/utils.h
+ * \brief Utilities.
+ * \ingroup test
+ */
+#include "mac/common/mfs.h"
+#include "mac/common/tonemap.h"
+#include "mac/common/store.h"
+#include "inc/test_pbproc.h"
+
+/** Step between created PBs' expiration date. Needed, because of the hysteresis
+ * offset used in the expiration process, to have some control on the number of
+ * expired PBs. */
+#define UTILS_MFS_EXPIRATION_NTB_STEP PBPROC_EXPIRATION_HYSTERESIS_OFFSET
+
+/** Define interval properties. */
+struct utils_interval_t
+{
+ /** Interval end offset, 0 to stop. */
+ uint end_offset_tck;
+ /** TMI for this interval. */
+ u8 tmi;
+ /** Number of bits in this tonemap if it has to be created, else 0. */
+ uint tm_mod;
+};
+typedef struct utils_interval_t utils_interval_t;
+
+BEGIN_DECLS
+
+mfs_tx_t *
+utils_mfs_tx_prepare (bool bcast, bool mme, uint lid, uint tei, int seg_nb);
+
+mfs_tx_t *
+utils_mfs_tx_holes_prepare (bool bcast, bool mme, uint lid, uint tei,
+ int seg_nb, u64 holes_bmp, mac_store_t *store);
+
+void
+utils_mfs_tx_cleanup (mfs_tx_t *mfs);
+
+tonemap_t *
+utils_sta_prepare_default_tonemap (test_pbproc_t *tp, bool tx, uint tei,
+ uint tmi, uint tm_mod, uint tm_max_fl_tck,
+ uint *dx);
+
+/**
+ * Prepare tonemaps intervals.
+ * \param tp test context
+ * \param tei STA TEI
+ * \param intervals list of intervals to prepare
+ * \param default_tmi new default TMI
+ * \return intervals version
+ *
+ * utils_sta_prepare_default_tonemap should have been called before.
+ */
+uint
+utils_sta_prepare_intervals (test_pbproc_t *tp, uint tei,
+ utils_interval_t *intervals, uint default_tmi);
+
+void
+utils_prepare_encryption (test_pbproc_t *tp, bool encrypted, bool sta_auth,
+ uint tei, uint nek_switch);
+
+void
+utils_delete_mfs_saved(void);
+
+mfs_tx_t *
+utils_mfs_tx_prepare_save (bool bcast, bool mme, uint lid, uint tei,
+ uint seg_nb);
+
+
+END_DECLS
+
+#endif /* inc_utils_h */
diff --git a/cesar/mac/pbproc/test/pbproc_eoc/src/ca.c b/cesar/mac/pbproc/test/pbproc_eoc/src/ca.c
new file mode 100644
index 0000000000..34df951f67
--- /dev/null
+++ b/cesar/mac/pbproc/test/pbproc_eoc/src/ca.c
@@ -0,0 +1,179 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2007 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/ca.c
+ * \brief Override CA functions.
+ * \ingroup test
+ */
+#include "common/std.h"
+#include "mac/ca/ca.h"
+
+#include "mac/ca/inc/context.h"
+
+#include "lib/scenario/scenario.h"
+#include "inc/utils.h"
+
+ca_t *
+ca_init (phy_t *phy, mac_config_t *config, mac_store_t *store,
+ uint anticipation_tck)
+{
+ static ca_t ca_ctx;
+ ca_t *ctx = &ca_ctx;
+ ctx->mfs = NULL;
+ dbg_assert (anticipation_tck);
+ return ctx;
+}
+
+void
+ca_uninit (ca_t *ctx)
+{
+}
+
+void
+ca_mfs_hold_common (ca_t *ctx, mfs_tx_t *mfs, bool locked)
+{
+ dbg_assert (mfs);
+ dbg_assert (locked);
+ mfs->ca_state = CA_MFS_STATE_HELD;
+}
+
+void
+ca_sta_update (ca_t *ctx, sta_t *sta)
+{
+ dbg_assert (sta);
+}
+
+const ca_alloc_param_t *
+ca_access_activate (ca_t *ctx, u32 date)
+{
+ scenario_event (ca_access_activate, params);
+ test_fail_unless (date == params->date);
+ ctx->current_allocation_param.coexistence_mode = params->coexistence_mode;
+ ctx->current_allocation_param.snid = params->snid;
+ ctx->current_allocation_param.hybrid = params->hybrid;
+ ctx->current_allocation_param.merge = params->merge;
+ ctx->current_allocation_param.nek_switch = params->nek_switch;
+ ctx->current_allocation_param.end_date = TEST_PBPROC_ALLOC_END_DATE;
+ ctx->current_allocation_param.aifs_date = TEST_PBPROC_ALLOC_END_DATE;
+ return &ctx->current_allocation_param;
+}
+
+void
+ca_access_deactivate (ca_t *ctx)
+{
+ scenario_event (ca_access_deactivate);
+}
+
+void
+ca_access_hold (ca_t *ctx)
+{
+ scenario_event (ca_access_hold);
+}
+
+void
+ca_access_vcs_restart (ca_t *ctx, u32 end_date)
+{
+ scenario_event (ca_access_vcs_restart, params);
+ test_fail_unless (end_date == params->end_date);
+}
+
+void
+ca_access_vcs_restart_eifs (ca_t *ctx, u32 start_date)
+{
+ scenario_event (ca_access_vcs_restart_eifs, params);
+ test_fail_unless (start_date == params->start_date);
+}
+
+void
+ca_access_program (ca_t *ctx, u32 date)
+{
+ scenario_event (ca_access_program, params);
+ test_fail_unless (date == params->date);
+}
+
+void
+ca_access_reprogram (ca_t *ctx, u32 date, uint duration_tck, uint tei)
+{
+ scenario_event (ca_access_reprogram, params);
+ test_fail_unless (date == params->date);
+ test_fail_unless (duration_tck == params->duration_tck);
+ test_fail_unless (tei == params->tei);
+ ctx->access_param.access_date = date;
+ ctx->access_param.duration_tck = duration_tck;
+ ctx->access_param.prp = false;
+ ctx->access_param.cfp = true;
+}
+
+void
+ca_access_defer (ca_t *ctx, u32 date)
+{
+ scenario_event (ca_access_defer, params);
+ test_fail_unless (date == params->date);
+}
+
+const ca_alloc_param_t *
+ca_access_aifs (ca_t *ctx)
+{
+ scenario_event (ca_access_aifs, params);
+ ctx->current_allocation_param.coexistence_mode = params->coexistence_mode;
+ ctx->current_allocation_param.snid = params->snid;
+ ctx->current_allocation_param.hybrid = params->hybrid;
+ ctx->current_allocation_param.merge = params->merge;
+ ctx->current_allocation_param.nek_switch = params->nek_switch;
+ ctx->current_allocation_param.end_date = TEST_PBPROC_ALLOC_END_DATE;
+ ctx->current_allocation_param.aifs_date = TEST_PBPROC_ALLOC_END_DATE;
+ return &ctx->current_allocation_param;
+}
+
+const ca_access_param_t *
+ca_access_get_param (ca_t *ctx)
+{
+ return &ctx->access_param;
+}
+
+mfs_tx_t *
+ca_access_get_mfs (ca_t *ctx)
+{
+ scenario_event (ca_access_get_mfs);
+ return ctx->mfs;
+}
+
+void
+ca_access_done (ca_t *ctx)
+{
+ if (scenario.current)
+ {
+ scenario_event (ca_access_done);
+ }
+}
+
+void
+ca_backoff_deferred (ca_t *ctx, int slot_counter)
+{
+ scenario_event (ca_backoff_deferred, params);
+ test_fail_unless (slot_counter == (int) params->slot_count);
+}
+
+void
+ca_backoff_success (ca_t *ctx)
+{
+ scenario_event (ca_backoff_success);
+}
+
+void
+ca_backoff_cancel (ca_t *ctx)
+{
+ scenario_event (ca_backoff_cancel);
+}
+
+int
+ca_sta_active_nb (ca_t *ctx)
+{
+ /* default value to not activate the specific algorithm. */
+ return 256;
+}
diff --git a/cesar/mac/pbproc/test/pbproc_eoc/src/hal.c b/cesar/mac/pbproc/test/pbproc_eoc/src/hal.c
new file mode 100644
index 0000000000..0c727a126c
--- /dev/null
+++ b/cesar/mac/pbproc/test/pbproc_eoc/src/hal.c
@@ -0,0 +1,27 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2009 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/hal.c
+ * \brief HAL stub.
+ * \ingroup test
+ */
+#include "common/std.h"
+#include "hal/watchdog/watchdog.h"
+
+void
+hal_watchdog_activate (uint event, bool active)
+{
+ dbg_claim (event == HAL_WATCHDOG_EVENT_PBPROC);
+}
+
+void
+hal_watchdog_trigger (uint event)
+{
+ dbg_claim (event == HAL_WATCHDOG_EVENT_PBPROC);
+}
+
diff --git a/cesar/mac/pbproc/test/pbproc_eoc/src/phy.c b/cesar/mac/pbproc/test/pbproc_eoc/src/phy.c
new file mode 100644
index 0000000000..a25696b83b
--- /dev/null
+++ b/cesar/mac/pbproc/test/pbproc_eoc/src/phy.c
@@ -0,0 +1,400 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2007 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/phy.c
+ * \brief Override HAL Phy functions.
+ * \ingroup test
+ */
+#include "common/std.h"
+
+#include "hal/phy/phy.h"
+#include "hal/phy/pbdma.h"
+
+#include "hal/phy/inc/context.h"
+
+#include "lib/scenario/scenario.h"
+
+static phy_t phy_global;
+
+phy_t *
+phy_init (void *user_data, phy_rx_fc_cb_t rx_fc_cb, phy_access_cb_t access_cb,
+ phy_access_conf_cb_t access_conf_cb, phy_pbdma_cb_t pbdma_cb,
+ phy_tx_false_alarm_cb_t tx_false_alarm_cb,
+ phy_deferred_cb_t deferred_cb)
+{
+ phy_t *ctx = &phy_global;
+ ctx->current_date = 0;
+ ctx->user_data = user_data;
+ ctx->rx_fc_cb = rx_fc_cb;
+ ctx->access_cb = access_cb;
+ ctx->access_conf_cb = access_conf_cb;
+ ctx->pbdma_cb = pbdma_cb;
+ ctx->tx_false_alarm_cb = tx_false_alarm_cb;
+ ctx->deferred_cb = deferred_cb;
+ ctx->prp_won = false;
+ ctx->slot_count = 0;
+ ctx->pbdma_nb_total = 0;
+ ctx->pbdma_first_pb = NULL;
+ uint i;
+ for (i = 0; i < COUNT (ctx->tx_fc); i++)
+ ctx->tx_fc[i] = 0;
+ for (i = 0; i < COUNT (ctx->crc_bitmap); i++)
+ ctx->crc_bitmap[i] = 0;
+ return ctx;
+}
+
+void
+phy_check_hardware (phy_t *ctx)
+{
+}
+
+void
+phy_uninit (phy_t *ctx)
+{
+}
+
+void
+phy_prepare (phy_t *ctx, phy_prepare_type_t type, bool wait)
+{
+ scenario_event (phy_prepare, params);
+ dbg_assert (ctx);
+ test_fail_unless (type == params->type);
+ test_fail_unless (wait == params->wait);
+}
+
+void
+phy_deferred_schedule (phy_t *ctx)
+{
+ scenario_event (phy_deferred_schedule);
+ dbg_assert (ctx);
+ ctx->dsr_scheduled = true;
+}
+
+u32
+phy_date (void)
+{
+ return phy_global.current_date;
+}
+
+void
+phy_set_tonemask (phy_t *ctx, u32 *tonemask, uint carrier_nb)
+{
+}
+
+void
+phy_set_tonemap (phy_t *ctx, blk_t *tonemap)
+{
+ scenario_event (phy_set_tonemap);
+ /* Test tonemap? */
+}
+
+void
+phy_freq_error_set (phy_t *ctx, bool sync, s32 rho_q30)
+{
+ scenario_event (phy_freq_error_set, params);
+ test_fail_unless (sync == params->sync);
+ test_fail_unless (rho_q30 == params->rho_q30);
+}
+
+void
+phy_tx_fc10 (phy_t *ctx, u32 date, u32 fc_10)
+{
+ scenario_event (phy_tx_fc10, params);
+ test_fail_unless (date == params->date);
+ test_fail_unless (fc_10 == params->fc10);
+}
+
+void
+phy_tx_param_ (phy_t *ctx, phy_fc_mode_t fc_mode, u32 mod_fecrate_pb_size,
+ phy_gil_t gil PHY_TRACE_SYMBOL_NB (uint symbol_nb))
+{
+ phy_mod_t mod = BF_GET (PHY_COMBO_PARAMS__MOD, mod_fecrate_pb_size);
+ phy_fecrate_t fecrate = BF_GET (PHY_COMBO_PARAMS__FECRATE,
+ mod_fecrate_pb_size);
+ phy_pb_size_t pb_size = BF_GET (PHY_COMBO_PARAMS__PB_SIZE,
+ mod_fecrate_pb_size);
+ scenario_event (phy_tx_param, params);
+ test_fail_unless (fc_mode == params->fc_mode);
+ test_fail_unless (mod == params->mod);
+ test_fail_unless (fecrate == params->fecrate);
+ test_fail_unless (pb_size == params->pb_size);
+ test_fail_unless (gil == params->gil);
+#if CONFIG_TRACE
+ test_fail_unless (symbol_nb == params->symbol_nb);
+#endif
+}
+
+void
+phy_tx_param_short (phy_t *ctx, phy_fc_mode_t fc_mode)
+{
+ scenario_event (phy_tx_param_short, params);
+ test_fail_unless (fc_mode == params->fc_mode);
+}
+
+void
+phy_tx_param_sound_ (phy_t *ctx, phy_fc_mode_t fc_mode, uint nb_pb,
+ u32 mod_fecrate_pb_size, phy_gil_t gil
+ PHY_TRACE_SYMBOL_NB (uint symbol_nb))
+{
+ phy_mod_t mod = BF_GET (PHY_COMBO_PARAMS__MOD, mod_fecrate_pb_size);
+ phy_fecrate_t fecrate = BF_GET (PHY_COMBO_PARAMS__FECRATE,
+ mod_fecrate_pb_size);
+ phy_pb_size_t pb_size = BF_GET (PHY_COMBO_PARAMS__PB_SIZE,
+ mod_fecrate_pb_size);
+ scenario_event (phy_tx_param_sound, params);
+ test_fail_unless (fc_mode == params->fc_mode);
+ test_fail_unless (nb_pb == params->nb_pb);
+ test_fail_unless (mod == params->mod);
+ test_fail_unless (fecrate == params->fecrate);
+ test_fail_unless (pb_size == params->pb_size);
+ test_fail_unless (gil == params->gil);
+#if CONFIG_TRACE
+ test_fail_unless (symbol_nb == params->symbol_nb);
+#endif
+}
+
+void
+phy_tx_frame_ (phy_t *ctx, u32 date, u32 want_conf__stop_tx_on_prp_lost,
+ const u32 fc_av[4])
+{
+ bool want_conf = (want_conf__stop_tx_on_prp_lost & PHY_WANT_CONF)
+ ? true : false;
+ bool stop_tx_on_prp_lost = (want_conf__stop_tx_on_prp_lost
+ & PHY_STOP_ON_PRP_LOST) ? true : false;
+ scenario_event (phy_tx_frame, params);
+ test_fail_unless (date == params->date);
+ test_fail_unless (want_conf == params->want_conf);
+ test_fail_unless (stop_tx_on_prp_lost == params->stop_tx_on_prp_lost);
+ ctx->tx_fc[0] = fc_av[0];
+ ctx->tx_fc[1] = fc_av[1];
+ ctx->tx_fc[2] = fc_av[2];
+ ctx->tx_fc[3] = fc_av[3];
+}
+
+void
+phy_tx_prepare (phy_t *ctx)
+{
+ scenario_event (phy_tx_prepare);
+ test_fail_unless (ctx->pbdma_nb_total != 0);
+}
+
+void
+phy_tx_cancel (phy_t *ctx)
+{
+ scenario_event (phy_tx_cancel);
+}
+
+void
+phy_rx_param (phy_t *ctx, phy_fc_mode_t fc_mode)
+{
+ scenario_event (phy_rx_param, params);
+ test_fail_unless (fc_mode == params->fc_mode);
+}
+
+void
+phy_rx_activate (phy_t *ctx, bool now, u32 date, bool pre_detection)
+{
+ scenario_event (phy_rx_activate, params);
+ test_fail_unless (now == params->now);
+ test_fail_unless (date == params->date);
+ test_fail_unless (pre_detection == params->pre_detection);
+}
+
+void
+phy_rx_prepare (phy_t *ctx, uint nb_pb, u32 mod_fecrate_pb_size,
+ phy_gil_t gil, uint symbol_nb, uint tcc_halfit)
+{
+ phy_mod_t mod = BF_GET (PHY_COMBO_PARAMS__MOD, mod_fecrate_pb_size);
+ phy_fecrate_t fecrate = BF_GET (PHY_COMBO_PARAMS__FECRATE,
+ mod_fecrate_pb_size);
+ phy_pb_size_t pb_size = BF_GET (PHY_COMBO_PARAMS__PB_SIZE,
+ mod_fecrate_pb_size);
+ scenario_event (phy_rx_prepare, params);
+ test_fail_unless (nb_pb == params->nb_pb);
+ test_fail_unless (mod == params->mod);
+ test_fail_unless (fecrate == params->fecrate);
+ test_fail_unless (pb_size == params->pb_size);
+ test_fail_unless (gil == params->gil);
+ test_fail_unless (symbol_nb == params->symbol_nb);
+ test_fail_unless (tcc_halfit == params->tcc_halfit);
+}
+
+void
+phy_rx_prepare_short (phy_t *ctx)
+{
+ scenario_event (phy_rx_prepare_short);
+}
+
+void
+phy_rx_prepare_sound (phy_t *ctx, uint nb_pb, u32 mod_fecrate_pb_size,
+ phy_gil_t gil, uint symbol_nb)
+{
+ phy_mod_t mod = BF_GET (PHY_COMBO_PARAMS__MOD, mod_fecrate_pb_size);
+ phy_fecrate_t fecrate = BF_GET (PHY_COMBO_PARAMS__FECRATE,
+ mod_fecrate_pb_size);
+ phy_pb_size_t pb_size = BF_GET (PHY_COMBO_PARAMS__PB_SIZE,
+ mod_fecrate_pb_size);
+ scenario_event (phy_rx_prepare_sound, params);
+ test_fail_unless (nb_pb == params->nb_pb);
+ test_fail_unless (mod == params->mod);
+ test_fail_unless (fecrate == params->fecrate);
+ test_fail_unless (pb_size == params->pb_size);
+ test_fail_unless (gil == params->gil);
+ test_fail_unless (symbol_nb == params->symbol_nb);
+}
+
+u32
+phy_rx_fc10 (phy_t *ctx)
+{
+ dbg_assert (ctx);
+ return ctx->fc10;
+}
+
+u32
+phy_rx_sysdate (phy_t *ctx)
+{
+ dbg_assert (ctx);
+ return ctx->rx_sysdate;
+}
+
+void
+phy_access_timer_cancel (phy_t *ctx)
+{
+ dbg_assert (ctx);
+ scenario_event (phy_access_timer_cancel);
+}
+
+void
+phy_extra_timer_init (phy_t *ctx, void *extra_timer_user_data,
+ phy_extra_timer_cb_t extra_timer_cb)
+{
+ dbg_assert (ctx);
+ dbg_assert (extra_timer_user_data == ctx->user_data);
+ ctx->extra_timer_cb = extra_timer_cb;
+}
+
+void
+phy_extra_timer_program (phy_t *ctx, u32 date)
+{
+ dbg_assert (ctx);
+ scenario_event (phy_extra_timer_program, params);
+ test_fail_unless (date == params->date);
+}
+
+void
+phy_access_timer_program (phy_t *ctx, u32 date)
+{
+ dbg_assert (ctx);
+}
+
+uint
+phy_access_backoff_slot_count (phy_t *ctx)
+{
+ dbg_assert (ctx);
+ return ctx->slot_count;
+}
+
+bool
+phy_access_backoff_prp_won (phy_t *ctx)
+{
+ dbg_assert (ctx);
+ return ctx->prp_won;
+}
+
+void
+phy_pbdma_start (phy_t *ctx, bool bypass_aes, const u32 nek[4], uint nb_total,
+ uint nb_pb_it, phy_pb_t *first_pb,
+ phy_chandata_t *first_chandata, bool now)
+{
+ scenario_event (phy_pbdma_start, params);
+ test_fail_unless (bypass_aes == params->bypass_aes);
+ test_fail_unless (nb_total == params->nb_total);
+ test_fail_unless (nb_pb_it == params->nb_pb_it);
+ test_fail_unless ((first_chandata ? true : false) == params->chandata);
+ test_fail_unless (now == params->now);
+ ctx->pbdma_nb_total = nb_total;
+ ctx->pbdma_first_pb = first_pb;
+}
+
+void
+phy_pbdma_update (phy_t *ctx, uint nb_pb_it)
+{
+ scenario_event (phy_pbdma_update, params);
+ test_fail_unless (nb_pb_it == params->nb_pb_it);
+}
+
+phy_pb_t *
+phy_pbdma_get_tail (phy_t *ctx)
+{
+ dbg_assert (ctx);
+ uint i;
+ phy_pb_t *pb;
+ for (i = 1, pb = ctx->pbdma_first_pb;
+ i < ctx->pbdma_nb_total;
+ i++, pb = PARENT_OF (phy_pb_t, blk, pb->blk.next))
+ ;
+ return pb;
+}
+
+volatile const u32 *
+phy_pbdma_get_crc_bitmap (phy_t *ctx)
+{
+ return ctx->crc_bitmap;
+}
+
+void
+phy_pbdma_start_chandata (phy_t *ctx, phy_chandata_t *first_chandata)
+{
+ scenario_event (phy_pbdma_start_chandata);
+}
+
+void
+phy_spoc_tx_set (phy_t *ctx, phy_spoc_coeff_t *coeff)
+{
+ scenario_event (phy_spoc_tx_set);
+ dbg_assert (ctx);
+ dbg_assert (coeff);
+ dbg_assert (coeff->part2);
+}
+
+void
+phy_spoc_rx_set (phy_t *ctx, phy_spoc_coeff_t *coeff)
+{
+ scenario_event (phy_spoc_rx_set);
+ dbg_assert (ctx);
+ dbg_assert (coeff);
+ dbg_assert (coeff->part2);
+}
+
+u32
+phy_rx_agc_gain (phy_t *ctx)
+{
+ dbg_assert (ctx);
+ return 0;
+}
+
+void
+phy_debug_unexpected (phy_t *ctx, uint expected_event_mask,
+ uint unexpected_event)
+{
+ ctx->expected_event_mask = expected_event_mask;
+ ctx->unexpected_event = unexpected_event;
+}
+
+void
+phy_compute_spoc_coeff (s32 rho_q30, phy_spoc_coeff_t *coeff)
+{
+ dbg_assert (coeff);
+ coeff->rho_q30 = rho_q30;
+}
+
+void
+phy_compute_spoc_initial_coeff (phy_spoc_coeff_t *coeff)
+{
+ phy_compute_spoc_coeff (0, coeff);
+}
diff --git a/cesar/mac/pbproc/test/pbproc_eoc/src/prep_mpdu.c b/cesar/mac/pbproc/test/pbproc_eoc/src/prep_mpdu.c
new file mode 100644
index 0000000000..fc650759d6
--- /dev/null
+++ b/cesar/mac/pbproc/test/pbproc_eoc/src/prep_mpdu.c
@@ -0,0 +1,1925 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2007 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/prep_mpdu.c
+ * \brief PBProc prep_mpdu test.
+ * \ingroup test
+ */
+#include "common/std.h"
+
+#include "inc/test_pbproc.h"
+#include "inc/utils.h"
+
+#include "mac/common/timings.h"
+
+#include "hal/phy/inc/context.h"
+
+/* Maximum number of bits usable in a CRC bitmap. */
+#define PREP_MPDU_TEST_CRC_BITMAP_SIZE 72u
+
+/** Test parameters. */
+struct prep_mpdu_test_t
+{
+ /** Multicast. */
+ bool bcast;
+ /** MME. */
+ bool mme;
+ /** LID. */
+ uint lid;
+ /** Partial acknowledgement. */
+ bool partial_ack;
+ /** Number of MFS segments. */
+ int mfs_seg_nb;
+ /** Duration of the access, measured as a number of symbol. */
+ uint duration_symb_nb;
+ /** Expected number of symbols. */
+ uint symb_nb;
+ /** Expected total number of segments for the main MFS. */
+ uint main_seg_nb_total;
+ /** Expected pending segments. */
+ uint seg_nb_pending;
+ /** Expected MPDU count (non zero for bursts). */
+ uint mpdu_count;
+ /** If set, CRC checking is done. */
+ bool crc;
+ /** If set (and crc not set), acknowledge all, else cancel
+ * transmission. */
+ bool all_ok;
+ /** If not zero and crc not set, uniform SACK information. */
+ uint sacki;
+ /** Updated default TMI after SACKI handling. */
+ uint tmi_sacki;
+ /** Indicate PBs with bad CRC. */
+ u32 crc_error[3];
+ /** Encoded SACK information, or 0 for bitmap. */
+ u64 encoded_sack;
+ /** Length of encoded SACK (to be eaten). */
+ uint encoded_sack_length;
+ /** Tonemap index. */
+ uint tmi;
+ /** Tonemap updated during transmission (by CE). */
+ uint tmi_update;
+ /** Tonemap number of bits per carrier. */
+ uint tm_mod;
+ /** Maximum frame length limited by the tonemap. */
+ uint tm_max_fl_tck;
+ /** Table of intervals. */
+ utils_interval_t *intervals;
+ /** Used interval. */
+ uint interval;
+ /** Updated interval TMI after SACKI handling. */
+ uint interval_tmi_sacki;
+ /** If not 0, override sound_reason_code. */
+ tonemap_sound_reason_code_t sound_reason_code;
+ /** Wether encryption is done. */
+ bool encrypted;
+ /** True for unassociated TX (unassociated unicast or multi network
+ * broadcast). */
+ bool unassociated;
+ /** Remove the MFS during preparation:
+ * - 1: before first call (obsolete).
+ * - 2: before chaining remaining segments.
+ * - 3: before acknowledge or cancel. */
+ uint remove;
+ /** True to simulate that ACCESS_CONF event has never been received. */
+ bool no_access_conf;
+ /** Sound completed flag. */
+ bool scf;
+ /** Beacon detected. */
+ bool beacon_detected;
+ /** HP 1.0 detected. */
+ bool hp10_detected;
+ /** HP 1.1 detected. */
+ bool hp11_detected;
+ /** STA pending PB (or 0 for default value). */
+ u8 sppb;
+ /** Current date for expiration tests. */
+ uint expiration_date;
+ /** Receiver window size. */
+ uint window_size;
+ /** Bitmap used to create holes in the generated MFS. */
+ u64 mfs_holes_bitmap;
+ /* If set, MFS FSM state test is done. */
+ bool mfs_fsm_state_test;
+ /* Expected MFS FSM state after SACK reception. */
+ mfs_fsm_cmd_t expected_mfs_fsm_state;
+ /* Force contention free period to test reverse duration. */
+ bool cfp;
+ /* for RSOF */
+ bool bbf;
+ /* Piggy back sacki */
+ bool pg_sacki;
+};
+
+#define prep_mpdu_test(t, tp, date, params...) \
+ prep_mpdu_test_f ((t), (tp), (date), \
+ &(struct prep_mpdu_test_t) { params })
+
+void
+prep_mpdu_test_f (test_t t, test_pbproc_t *tp, u32 date,
+ const struct prep_mpdu_test_t *params)
+{
+ uint i;
+ tp->pbproc->config->tei = params->bbf ? 31 : 1;
+ const uint stei = (!params->bcast && params->unassociated
+ ? 0 : tp->config.tei);
+ const uint dtei = (params->bcast ? MAC_TEI_BCAST : params->bbf ? 1 : 31);
+ const uint ack_dtei = params->partial_ack ? 3 : dtei;
+ const uint lid = params->mme ? MAC_LID_NONE : params->lid;
+ const uint fclid = params->mme ? MAC_LID_NO_DATA : lid;
+ pb_t *seg;
+ test_within (t);
+ uint nack_count;
+ if (!params->crc)
+ nack_count = params->all_ok ? 0 : params->main_seg_nb_total;
+ else
+ {
+ nack_count = 0;
+ for (i = 0; i < COUNT (params->crc_error); i++)
+ {
+ u32 x = params->crc_error[i];
+ nack_count += BITS_ONES_COUNT (x);
+ }
+ nack_count = MIN (params->main_seg_nb_total, nack_count);
+ }
+ uint seg_nb_pending = params->seg_nb_pending;
+ tp->config.partial_ack_tei_default =
+ params->partial_ack || params->unassociated ? 3 : MAC_TEI_BCAST;
+ /* Ask for channel data to enable sound transmission. */
+ u32 chandata_conf[1] = { 0 };
+ pbproc_set_chandata_conf (
+ tp->pbproc, (phy_chandata_conf_t *) chandata_conf, 1, false);
+ /* Prepare tone map. */
+ tonemap_t *tm = &tp->config.tonemask_info.tonemap_robo[PHY_MOD_ROBO];
+ uint dx = MAC_DX417_TCK;
+ bool sta_created = false;
+ if (params->tmi != PHY_MOD_ROBO
+ || (params->encrypted && !params->bcast)
+ || params->intervals)
+ {
+ tm = utils_sta_prepare_default_tonemap (tp, true, dtei, params->tmi,
+ params->tm_mod,
+ params->tm_max_fl_tck, &dx);
+ sta_created = true;
+ }
+ uint interval = TONEMAP_INTERVAL_NB;
+ uint intervals_version;
+ if (params->intervals)
+ {
+ intervals_version = utils_sta_prepare_intervals (
+ tp, dtei, params->intervals, PHY_MOD_ROBO);
+ interval = params->interval;
+ }
+ tonemap_sound_reason_code_t sound_reason_code =
+ params->sound_reason_code ? params->sound_reason_code :
+ params->mme ? TONEMAP_SRC_NULL :
+ params->tmi == TONEMAP_INDEX_INITIAL_START ? TONEMAP_SRC_INITIAL :
+ params->tmi == TONEMAP_INDEX_INITIAL_ERROR ? TONEMAP_SRC_ERROR :
+ TONEMAP_SRC_NULL;
+ uint tmi = params->tmi < TONEMAP_INDEX_NB && !sound_reason_code
+ ? params->tmi : PHY_MOD_ROBO;
+ phy_mod_t mod = tmi < PHY_MOD_ROBO_NB ? tmi : PHY_MOD_TM;
+ uint rifs_tck = params->symb_nb == 0 || tmi < PHY_MOD_ROBO_NB
+ ? MAC_RIFS_DEFAULT_TCK : MAC_RIFS_SPC_ANY_TCK;
+ uint eff_rifs_tck = params->mpdu_count ? MAC_BIFS_TCK : rifs_tck;
+ /* Create an MFS. */
+ bool mfs_in_store = !!params->sppb;
+ sta_created = sta_created ||
+ (mfs_in_store && MAC_LID_IS_LLID (params->lid));
+ mfs_tx_t *mfs = utils_mfs_tx_holes_prepare (
+ params->bcast, params->mme, lid, dtei, params->mfs_seg_nb,
+ params->mfs_holes_bitmap, mfs_in_store ? tp->store : NULL);
+ mfs->last_seg_offset = 1;
+ if (params->unassociated)
+ mfs->common.unassociated = true;
+ pb_t *seg_first = mfs->head;
+ /* Setup receiver window size */
+ if (params->window_size)
+ mfs->window_size = mfs_window_size[params->window_size];
+ /* Encrypted? */
+ utils_prepare_encryption (tp, params->encrypted, !params->bcast, dtei, 0);
+ /* Setup an access. */
+ const uint beacon_tck = MAC_MS_TO_TCK (1000) / 25;
+ test_pbproc_alloc (tp, false, date / beacon_tck * beacon_tck);
+ ca_access_param_t *access = &tp->pbproc->access;
+ access->access_date = date;
+ access->duration_tck = MAC_PREAMBLE_TCK + MAC_FC_AV_TCK
+ + MAC_PAYLOAD_TCK (params->duration_symb_nb, MAC_DX417_TCK)
+ + rifs_tck + MAC_PREAMBLE_TCK + MAC_FC_AV_TCK;
+ bool cfp = (tmi != PHY_MOD_ROBO && params->tm_max_fl_tck) || params->bbf
+ || params->cfp;
+ /* in Eoc sounds in TDMA period */
+ if (sound_reason_code != TONEMAP_SRC_NULL)
+ {
+ /* sound frame in authenticated state cco & sta */
+ cfp = true;
+ tp->config.authenticated = true;
+ sta_t * sta = mac_store_sta_get(tp->store, dtei);
+ if (sta)
+ { /* need authenticated sta to send sound frames */
+ sta->authenticated = true;
+ blk_release (sta);
+ }
+ }
+ access->prp = false;
+ access->cfp = cfp;
+ tp->pbproc->detect.beacon_detected = params->beacon_detected;
+ tp->pbproc->detect.hp10_detected = params->hp10_detected;
+ tp->pbproc->detect.hp11_detected = params->hp11_detected;
+ /* Set the current date for expiration tests. */
+ if (params->expiration_date)
+ tp->pbproc->phy->current_date = params->expiration_date
+ + TEST_PBPROC_EXPIRATION_DATE_OFFSET;
+ else
+ tp->pbproc->phy->current_date = 0;
+ if (params->remove == 1)
+ mfs->ca_state = CA_MFS_STATE_REMOVED;
+ if (params->bbf)
+ {
+ tp->pbproc->prep_mpdu.bbf = false;
+ tp->pbproc->recv_mpdu.rx_params.bbf = true;
+ tp->pbproc->recv_mpdu.rx_params.eks = (params->encrypted ?
+ tp->pbproc->config->nek_mgr.use[tp->pbproc->alloc.nek_switch]->eks
+ : MAC_EKS_CLEAR);
+ }
+ if (params->pg_sacki)
+ {
+ pbproc_sackd_t *sackd = &tp->pbproc->recv_mpdu.sackd;
+ sackd->valid = true;
+ sackd->sackt[0] = PBPROC_FC_SACKT_MIXED;
+ sackd->sackt[1] = PBPROC_FC_SACKT_NOT_RECEIVED;
+ sackd->sackt[2] = PBPROC_FC_SACKT_NOT_RECEIVED;
+ sackd->sackt[3] = PBPROC_FC_SACKT_NOT_RECEIVED;
+ sackd->any_pb_crc_error = true;
+ pbproc_sacki_enc_init (&sackd->sacki_enc, 64, true);
+ /* Warning: actually crc_error was intended to be used as CRC status
+ * to acknowledge the prepared frame. Here it is used as the
+ * acknowledge data to put in the prepared frame, which is a
+ * completely different meaning! */
+ pbproc_sacki_enc_copy (&sackd->sacki_enc, params->crc_error, 64);
+ }
+ /* Prepare MPDU. */
+ pbproc_prep_mpdu (tp->pbproc, params->remove != 1 ? mfs : NULL);
+ /* Check result. */
+ pbproc_prep_mpdu_t *prep = &tp->pbproc->prep_mpdu;
+ if (params->remove != 1)
+ {
+ test_fail_unless (prep->stei == stei);
+ test_fail_unless (prep->dtei == dtei);
+ test_fail_unless (prep->lid == fclid);
+ test_fail_unless (prep->wack
+ == (!params->bcast || params->partial_ack));
+ test_fail_unless (prep->unassociated == params->unassociated);
+ test_fail_unless (!prep->rts_cts);
+ test_fail_unless (prep->burst_mpdu_nb == params->mpdu_count + 1);
+ test_fail_unless (prep->mpdu_count == params->mpdu_count);
+ test_fail_unless (prep->current == &prep->mpdu[prep->mpdu_count]);
+ test_fail_unless (prep->tx_date == date);
+ }
+ if (sound_reason_code != TONEMAP_SRC_NULL)
+ {
+ test_fail_unless (prep->valid);
+ test_fail_unless (prep->main_mfs == mfs);
+ test_fail_unless (prep->fc_mode == PHY_FC_MODE_AV_1);
+ test_fail_unless (prep->current->tmi == tmi);
+ test_fail_unless (prep->phy_combo_params == PHY_COMBO_PARAMS (
+ mod, tm->fecrate, PHY_PB_SIZE_520));
+ test_fail_unless (prep->gil == tm->gil);
+ test_fail_unless (prep->tonemap == tm->tmdma_desc_head);
+ test_fail_unless (prep->current->interval == interval);
+ test_fail_unless (interval == TONEMAP_INTERVAL_NB
+ || (prep->current->intervals_version
+ == intervals_version));
+ test_fail_unless (prep->sound_reason_code == sound_reason_code);
+ test_fail_unless (prep->current->pb_nb_total == 0);
+ test_fail_unless (prep->current->main_seg_nb == 0);
+ test_fail_unless (prep->main_seg_nb_reserved == 0);
+ test_fail_unless (prep->ifs_tck == eff_rifs_tck);
+ test_fail_unless (prep->flp_tck == MAC_PREAMBLE_TCK + MAC_FC_AV_TCK
+ + MAC_PAYLOAD_TCK (params->symb_nb, dx)
+ + eff_rifs_tck);
+ test_fail_unless (prep->bypass_aes);
+ /* Check FC. */
+ pbproc_fc_sound_t fc = prep->fc_av.sound;
+ test_fail_unless (fc.dt_av = PBPROC_FC_DT_SOUND
+ && !fc.access
+ && fc.snid == tp->snid);
+ test_fail_unless (fc.dtei == fc.direction ? dtei : stei);
+ test_fail_unless (fc.lid == fclid);
+ test_fail_unless (!fc.pbsz);
+ test_fail_unless (!fc.saf);
+ test_fail_unless (!fc.scf);
+ test_fail_unless (fc.req_tm == TONEMAP_MAX);
+ test_fail_unless (fc.fl_av ==
+ MAC_TCK_TO_FL (MAC_PAYLOAD_TCK (params->symb_nb, dx)
+ + eff_rifs_tck));
+ test_fail_unless (fc.mpdu_cnt == params->mpdu_count);
+ test_fail_unless (fc.src == sound_reason_code);
+ test_fail_unless (prep->fc10 == 0x200000);
+ /* Acknowledge preparation. */
+ pbproc_prep_mpdu_sound_ack (tp->pbproc, params->scf);
+ test_fail_unless (!prep->valid);
+ test_fail_unless (!prep->main_mfs);
+ sta_t *sta = mac_store_sta_get (tp->store, dtei);
+ dbg_assert (sta);
+ tonemaps_t *tms = sta->tx_tonemaps;
+ if (!params->scf)
+ {
+ test_fail_unless (tms->default_tmi == params->tmi);
+ }
+ else
+ {
+ if (sound_reason_code == TONEMAP_SRC_INITIAL
+ || sound_reason_code == TONEMAP_SRC_ERROR)
+ {
+ test_fail_unless (tms->default_tmi
+ == TONEMAP_INDEX_INITIAL_SOUND_COMPLETE);
+ }
+ else
+ {
+ test_fail_unless (tms->default_tmi == params->tmi);
+ }
+ if (sound_reason_code == TONEMAP_SRC_INTERVAL_UNAVAILABLE
+ || sound_reason_code == TONEMAP_SRC_INTERVAL_UNUSABLE)
+ {
+ test_fail_unless (
+ tms->intervals->interval[params->interval].tmi
+ == TONEMAP_INDEX_INTERVAL_SOUND_COMPLETE);
+ }
+ }
+ blk_release (sta);
+ }
+ else if (params->main_seg_nb_total == 0)
+ {
+ test_fail_unless (!prep->valid);
+ test_fail_unless (prep->main_mfs == NULL);
+ test_fail_unless (prep->current->main_seg_nb == 0);
+ test_fail_unless (prep->main_seg_nb_reserved == 0);
+ test_fail_unless (prep->current->pb_nb_total == 0);
+ }
+ else
+ {
+ test_fail_unless (prep->valid);
+ test_fail_unless (prep->main_mfs == mfs);
+ test_fail_unless (prep->main_mfs_cmd
+ == (params->bcast ? MFS_FSM_CMD_NOP
+ : MFS_FSM_CMD_INIT));
+ test_fail_unless (prep->main_mfs_rsp == MFS_FSM_RSP_NB);
+ test_fail_unless (prep->fc_mode == PHY_FC_MODE_AV_1);
+ test_fail_unless (prep->current->tmi == tmi);
+ test_fail_unless (prep->phy_combo_params == PHY_COMBO_PARAMS (
+ mod, tm->fecrate, PHY_PB_SIZE_520));
+ test_fail_unless (prep->gil == tm->gil);
+ test_fail_unless (prep->tonemap == tm->tmdma_desc_head);
+ test_fail_unless (prep->current->interval == interval);
+ test_fail_unless (interval == TONEMAP_INTERVAL_NB
+ || (prep->current->intervals_version
+ == intervals_version));
+ test_fail_unless (prep->sound_reason_code == sound_reason_code);
+ test_fail_unless (prep->current->main_head == seg_first);
+ uint main_seg_nb = MIN (params->main_seg_nb_total, 16u);
+ uint main_seg_nb_reserved = params->main_seg_nb_total - main_seg_nb;
+ test_fail_unless (prep->current->main_seg_nb == main_seg_nb);
+ for (seg = seg_first, i = 1; i < main_seg_nb; seg = seg->next, i++)
+ test_fail_unless (seg->header.opsf == (i == 1));
+ test_fail_unless (seg->next == seg);
+ test_fail_unless (seg->header.opsf == (i == 1));
+ test_fail_unless (prep->current->main_tail == seg);
+ test_fail_unless (prep->main_seg_nb_reserved == main_seg_nb_reserved);
+ test_fail_unless (prep->current->pb_nb_total
+ == params->main_seg_nb_total + seg_nb_pending);
+ test_fail_unless (prep->ifs_tck == eff_rifs_tck);
+ test_fail_unless (prep->flp_tck == MAC_PREAMBLE_TCK + MAC_FC_AV_TCK
+ + MAC_PAYLOAD_TCK (params->symb_nb, dx)
+ + eff_rifs_tck);
+ if (params->encrypted)
+ {
+ test_fail_if (prep->bypass_aes);
+ test_fail_unless (prep->nek == tp->config.nek_mgr.use[0]->nek_enc);
+ }
+ else
+ test_fail_unless (prep->bypass_aes);
+ /* Check FC. */
+ if (prep->fc_av.generic.dt_av == PBPROC_FC_DT_SOF)
+ {
+ pbproc_fc_sof_t fc = prep->fc_av.sof;
+ test_fail_unless (fc.dt_av = PBPROC_FC_DT_SOF
+ && !fc.access
+ && fc.snid == tp->snid);
+ test_fail_unless (fc.dtei == ack_dtei);
+ test_fail_unless (fc.lid == (fclid & 0x0F));
+ test_fail_unless (fc.eks == (params->encrypted ? 0 : 0x3));
+ test_fail_unless (!fc.pbsz);
+ test_fail_unless (fc.num_sym == MIN (params->symb_nb, 3u));
+ test_fail_unless (fc.tmi_av == tmi);
+ test_fail_unless (fc.fl_av ==
+ MAC_TCK_TO_FL (MAC_PAYLOAD_TCK (params->symb_nb, dx)
+ + eff_rifs_tck));
+ test_fail_unless (fc.mpdu_cnt == params->mpdu_count);
+ test_fail_unless (fc.burst_cnt == 0);
+ test_fail_unless (fc.bbf == params->cfp);
+ if (params->cfp)
+ {
+ /* TODO: remove extra 100 µs. */
+ int access_left_fl = (access->duration_tck - prep->flp_tck -
+ MAC_US_TO_TCK (100) - MAC_TOLERANCE_TCK)
+ / MAC_TCK_PER_FL;
+ int access_max_fl = MAC_TCK_TO_FL (
+ 2 * (MAC_PREAMBLE_TCK + MAC_FC_AV_TCK)
+ + MAC_FL_TO_TCK (MAC_MAX_FL_MIN_FL));
+ test_fail_unless (fc.mrdur_fl ==
+ MIN (access_left_fl, access_max_fl));
+ }
+ else
+ test_fail_unless (fc.mrdur_fl == 0);
+ test_fail_unless (fc.mcf == params->bcast);
+ test_fail_unless (fc.mnbf == (params->bcast && params->unassociated));
+ test_fail_unless (prep->fc10 == 0x200000);
+ }
+ else if (prep->fc_av.generic.dt_av == PBPROC_FC_DT_RSOF)
+ {
+ pbproc_fc_rsof_t fc = prep->fc_av.rsof;
+ test_fail_unless (fc.dt_av = PBPROC_FC_DT_RSOF
+ && !fc.access
+ && fc.snid == tp->snid);
+ test_fail_unless (fc.dtei == stei);
+ test_fail_unless (fc.num_sym == MIN (params->symb_nb, 3u));
+ test_fail_unless (fc.lid == fclid);
+ test_fail_unless (fc.tmi_av == tmi);
+ test_fail_unless (fc.rsof_fl_av ==
+ MAC_TCK_TO_FL (MAC_PAYLOAD_TCK (params->symb_nb, dx)
+ + eff_rifs_tck));
+ test_fail_unless (fc.bdf);
+ test_fail_unless (!fc.pbsz);
+ test_fail_unless (fc.sppb == (params->sppb ? params->sppb : 0xf));
+ test_fail_unless (prep->fc10 == 0x200000);
+ }
+ /* Chain remaining segments. */
+ if (params->remove == 2 || params->no_access_conf)
+ seg_nb_pending += params->main_seg_nb_total - main_seg_nb;
+ else
+ main_seg_nb = params->main_seg_nb_total;
+ if (params->remove == 2)
+ mfs->ca_state = CA_MFS_STATE_REMOVED;
+ if (!params->no_access_conf)
+ pbproc_prep_mpdu_chain (tp->pbproc);
+ /* Check result. */
+ test_fail_unless (prep->valid);
+ test_fail_unless (prep->main_mfs == mfs);
+ test_fail_unless (prep->current->main_head == seg_first);
+ test_fail_unless (prep->current->main_seg_nb == main_seg_nb);
+ test_fail_unless (prep->main_seg_nb_reserved ==
+ (params->no_access_conf ? main_seg_nb_reserved : 0));
+ test_fail_unless (prep->current->pb_nb_total == main_seg_nb
+ + seg_nb_pending);
+ for (seg = seg_first, i = 1; i < main_seg_nb; seg = seg->next, i++)
+ test_fail_unless (seg->header.opsf == (i == 1));
+ test_fail_unless (seg->next == seg);
+ test_fail_unless (seg->header.opsf == (i == 1));
+ test_fail_unless (prep->current->main_tail == seg);
+ test_fail_unless (mfs->last_seg_offset ==
+ (main_seg_nb == (uint) params->mfs_seg_nb ? 0 : 1));
+ /* Cancel or acknowledge preparation. */
+ if (params->remove == 3)
+ mfs->ca_state = CA_MFS_STATE_REMOVED;
+ uint acked = params->main_seg_nb_total;
+ if (!params->remove)
+ acked -= nack_count;
+ uint mfs_seg_nb_after = params->mfs_seg_nb - acked;
+ /* Expired PBs */
+ if (!params->no_access_conf)
+ {
+ if (params->expiration_date
+ >= params->main_seg_nb_total * UTILS_MFS_EXPIRATION_NTB_STEP)
+ mfs_seg_nb_after -= (params->main_seg_nb_total - acked);
+ if ((uint) params->mfs_seg_nb > params->main_seg_nb_total)
+ {
+ uint expected_expired_nb = params->expiration_date
+ > params->main_seg_nb_total * UTILS_MFS_EXPIRATION_NTB_STEP
+ + PBPROC_EXPIRATION_HYSTERESIS_OFFSET
+ ? params->expiration_date / UTILS_MFS_EXPIRATION_NTB_STEP
+ - params->main_seg_nb_total : 0;
+ uint mfs_remaining_seg_nb = params->mfs_seg_nb
+ - params->main_seg_nb_total;
+ if (expected_expired_nb > mfs_remaining_seg_nb)
+ expected_expired_nb = mfs_remaining_seg_nb;
+ if (expected_expired_nb > PBPROC_CURRENT_TX_MFS_EXPIRE_BUDGET)
+ expected_expired_nb = PBPROC_CURRENT_TX_MFS_EXPIRE_BUDGET;
+ mfs_seg_nb_after -= expected_expired_nb;
+ }
+ }
+ else
+ {
+ if (params->expiration_date
+ >= main_seg_nb * UTILS_MFS_EXPIRATION_NTB_STEP)
+ mfs_seg_nb_after -= main_seg_nb;
+ }
+ if (!params->crc)
+ {
+ if (params->sacki)
+ {
+ if (params->tmi != PHY_MOD_ROBO || params->intervals)
+ {
+ sta_t *sta = mac_store_sta_get (tp->store, dtei);
+ dbg_assert (sta);
+ tonemaps_t *tms = sta->tx_tonemaps;
+ if (params->tmi_update)
+ tms->default_tmi = params->tmi_update;
+ pbproc_prep_mpdu_ack_uniform (
+ tp->pbproc, prep->mpdu_count, params->sacki);
+ test_fail_unless (
+ tms->default_tmi == params->tmi_sacki);
+ if (params->intervals)
+ test_fail_unless (
+ tms->intervals->interval[params->interval].tmi
+ == params->interval_tmi_sacki);
+ blk_release (sta);
+ }
+ else
+ pbproc_prep_mpdu_ack_uniform (
+ tp->pbproc, prep->mpdu_count, params->sacki);
+ }
+ else if (!params->all_ok)
+ pbproc_prep_mpdu_cancel (tp->pbproc, prep->mpdu_count);
+ else
+ pbproc_prep_mpdu_ack_all (tp->pbproc, prep->mpdu_count);
+ }
+ else
+ {
+ if (!params->encoded_sack)
+ {
+ pbproc_sacki_dec_t sacki_dec;
+ pbproc_sacki_dec_init (&sacki_dec, params->crc_error[0],
+ params->crc_error[1],
+ params->crc_error[2] & 0xff,
+ PREP_MPDU_TEST_CRC_BITMAP_SIZE);
+ pbproc_prep_mpdu_ack_bitmap (tp->pbproc, prep->mpdu_count,
+ &sacki_dec);
+ uint eaten = MIN (main_seg_nb + seg_nb_pending,
+ PREP_MPDU_TEST_CRC_BITMAP_SIZE);
+ test_fail_unless (sacki_dec.sil
+ == PREP_MPDU_TEST_CRC_BITMAP_SIZE - eaten);
+ }
+ else
+ {
+ pbproc_sacki_dec_t sacki_dec;
+ pbproc_sacki_dec_init (
+ &sacki_dec, params->encoded_sack & 0xffffffff,
+ (params->encoded_sack >> 32) & 0xffffffff, 0, 64);
+ pbproc_prep_mpdu_ack_encoded (tp->pbproc, prep->mpdu_count,
+ &sacki_dec);
+ test_fail_unless (sacki_dec.sil
+ == 64 - params->encoded_sack_length);
+ }
+ }
+ /* Set MFS_RSP and MFS_CMD to allow test of MFS fsm state in case of
+ * expiration. */
+ mfs->fsm_state = MFS_FSM_CMD_IN_SYNC;
+ tp->pbproc->prep_mpdu.main_mfs_cmd = MFS_FSM_CMD_IN_SYNC;
+ tp->pbproc->prep_mpdu.main_mfs_rsp = MFS_FSM_RSP_ACK;
+ pbproc_prep_mpdu_commit_burst (tp->pbproc);
+ u16 expected_holes_nb = 0;
+ if (mfs->ca_state != CA_MFS_STATE_REMOVED && mfs->seg_nb)
+ {
+ pb_t *mfs_seg;
+ for (mfs_seg = mfs->head; mfs_seg != mfs->tail; mfs_seg = mfs_seg->next)
+ expected_holes_nb += (mfs_seg->next->header.ssn - mfs_seg->header.ssn - 1);
+ expected_holes_nb += (mfs->next_ssn - mfs->tail->header.ssn - 1);
+ }
+ /* Test update of number of holes in the MFS. */
+ test_fail_unless (mfs->holes_seg_nb == expected_holes_nb);
+ /* Test update of MFS FSM state in case of expiration. */
+ if (params->mfs_fsm_state_test)
+ test_fail_unless (mfs->fsm_state == params->expected_mfs_fsm_state);
+ /* Call DSR if requested. */
+ if (tp->pbproc->fsm.schedule_deferred)
+ pbproc_fsm_handle_deferred (tp->pbproc);
+ /* Check result. */
+ test_fail_unless (mfs->seg_nb == (int) mfs_seg_nb_after);
+ if (!params->mfs_holes_bitmap && !params->expiration_date)
+ {
+ seg = mfs->head;
+ for (i = 0; i < (uint) params->mfs_seg_nb; i++)
+ {
+ bool bad_crc = !params->crc ? !params->all_ok
+ : (params->crc_error[i / 32] & (1u << (i % 32))) != 0;
+ if (i >= main_seg_nb || (!params->remove && bad_crc))
+ {
+ test_fail_unless (seg->header.ssn == i
+ && seg->header.mfbo == 0
+ && seg->header.vpbf == true
+ && seg->header.mmqf == params->mme
+ && seg->header.mfbf == false
+ && seg->header.opsf == (i == 0)
+ && seg->header.rsvd == 0);
+ seg = seg->next;
+ }
+ }
+ }
+ }
+ /* Information stored in frame control */
+ if (params->pg_sacki)
+ {
+ dbg_assert (params->crc_error[2] == 0);
+ uint sil;
+ u32 sackt0, sacki0, sacki1;
+ if (prep->fc_av.generic.dt_av == PBPROC_FC_DT_SOUND)
+ {
+ sil = PBPROC_FC_SACKI_EOC_SOUND_SIZE;
+ pbproc_fc_sound_t *fc = &prep->fc_av.sound;
+ sackt0 = fc->sackt0;
+ sacki0 = fc->sacki0 | fc->sacki1 << PBPROC_FC_SACKI_EOC_SOUND_LEFT;
+ sacki1 = fc->sacki1 >> (32 - PBPROC_FC_SACKI_EOC_SOUND_LEFT);
+ }
+ else if (prep->fc_av.generic.dt_av == PBPROC_FC_DT_SOF)
+ {
+ sil = PBPROC_FC_SACKI_EOC_SOF_SIZE;
+ pbproc_fc_sof_t *fc = &prep->fc_av.sof;
+ sackt0 = fc->sackt0;
+ sacki0 = fc->sacki0;
+ sacki1 = fc->sacki1;
+ }
+ else if (prep->fc_av.generic.dt_av == PBPROC_FC_DT_RSOF)
+ {
+ sil = PBPROC_FC_SACKI_EOC_RSOF_SIZE;
+ pbproc_fc_rsof_t *fc = &prep->fc_av.rsof;
+ sackt0 = fc->sackt0;
+ sacki0 = fc->sacki0;
+ sacki1 = fc->sacki1;
+ }
+ else
+ dbg_assert_default ();
+ test_fail_unless (sackt0 == PBPROC_FC_SACKT_MIXED);
+ test_fail_unless (sacki0 == params->crc_error[0]);
+ test_fail_unless ((sacki1 & BITS_ONES (sil - 32))
+ == (params->crc_error[1] & BITS_ONES (sil - 32)));
+ }
+ /* Cleanup. */
+ if (mfs_in_store)
+ mac_store_mfs_remove (tp->store, PARENT_OF (mfs_t, tx, mfs));
+ utils_mfs_tx_cleanup (mfs);
+ if (sta_created)
+ dbg_check (mac_store_sta_remove (tp->store, dtei));
+ pbproc_set_chandata_conf (tp->pbproc, NULL, 0, false);
+ tp->pbproc->detect.beacon_detected = false;
+ tp->pbproc->detect.hp10_detected = false;
+ tp->pbproc->detect.hp11_detected = false;
+ tp->config.authenticated = false;
+ tp->config.partial_ack_tei_default = false;
+}
+
+void
+prep_mpdu_basic_test_case (test_t t)
+{
+ test_pbproc_t tp;
+ test_case_begin (t, "basic");
+ test_pbproc_init (&tp);
+ test_begin (t, "robo unicast data limit dur")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .duration_symb_nb = 25,
+ .symb_nb = 19, .main_seg_nb_total = 1);
+ } test_end;
+ test_begin (t, "cfp limited reverse")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .duration_symb_nb = 28,
+ .symb_nb = 19, .main_seg_nb_total = 1, .cfp = true);
+ } test_end;
+ test_begin (t, "cfp max reverse")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 1, .duration_symb_nb = 1000,
+ .symb_nb = 19, .main_seg_nb_total = 1, .cfp = true);
+ } test_end;
+ test_begin (t, "rsof robo unicast data limit dur")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .duration_symb_nb = 25,
+ .symb_nb = 19, .main_seg_nb_total = 1, .bbf = true);
+ } test_end;
+ test_begin (t, "robo unicast mme limit dur")
+ {
+ prep_mpdu_test (t, &tp, 0, .mme = true, .mfs_seg_nb = 30,
+ .duration_symb_nb = 25, .symb_nb = 19,
+ .main_seg_nb_total = 1);
+ } test_end;
+ test_begin (t, "robo unicast data limit dur max")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .duration_symb_nb = 95,
+ .symb_nb = 38, .main_seg_nb_total = 2);
+ } test_end;
+ test_begin (t, "robo unicast data limit seg")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 1, .duration_symb_nb = 95,
+ .symb_nb = 19, .main_seg_nb_total = 1);
+ } test_end;
+ test_begin (t, "robo unicast data limit no seg")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 0, .duration_symb_nb = 95,
+ .main_seg_nb_total = 0);
+ } test_end;
+ test_begin (t, "robo unicast data limit dur zero")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .duration_symb_nb = 16,
+ .symb_nb = 0, .main_seg_nb_total = 0);
+ } test_end;
+ test_begin (t, "robo multicast data limit dur")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .duration_symb_nb = 25,
+ .symb_nb = 19, .main_seg_nb_total = 1,
+ .bcast = true);
+ } test_end;
+ test_begin (t, "robo multicast data limit dur partial ack")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .duration_symb_nb = 25,
+ .symb_nb = 19, .main_seg_nb_total = 1,
+ .bcast = true, .partial_ack = true);
+ } test_end;
+ test_begin (t, "robo multicast data limit dur max")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .duration_symb_nb = 95,
+ .symb_nb = 38, .main_seg_nb_total = 2,
+ .bcast = true);
+ } test_end;
+ test_begin (t, "robo unassociated unicast data limit dur")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .duration_symb_nb = 25,
+ .symb_nb = 19, .main_seg_nb_total = 1,
+ .unassociated = true);
+ } test_end;
+ test_begin (t, "robo unassociated multicast data limit dur")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .duration_symb_nb = 25,
+ .symb_nb = 19, .main_seg_nb_total = 1,
+ .bcast = true, .unassociated = true);
+ } test_end;
+ test_begin (t, "hs-robo unicast data limit seg")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 3, .duration_symb_nb = 95,
+ .symb_nb = 30, .main_seg_nb_total = 3,
+ .tmi = PHY_MOD_HS_ROBO);
+ } test_end;
+ test_begin (t, "tm unicast data limit dur")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .duration_symb_nb = 10,
+ .symb_nb = 10, .main_seg_nb_total = 10,
+ .tmi = 5, .tm_mod = 6);
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .duration_symb_nb = 10,
+ .symb_nb = 10, .main_seg_nb_total = 16,
+ .tmi = 5, .tm_mod = 10);
+ } test_end;
+ test_begin (t, "tm unicast data limit seg with null")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 13, .duration_symb_nb = 8,
+ .symb_nb = 8, .main_seg_nb_total = 12,
+ .seg_nb_pending = 0,
+ .tmi = 5, .tm_mod = 10);
+ } test_end;
+ test_begin (t, "tm unicast data limit dur bis")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 13, .duration_symb_nb = 8,
+ .symb_nb = 8, .main_seg_nb_total = 12,
+ .tmi = 5, .tm_mod = 10);
+ } test_end;
+ /* Bursting is not supported yet */
+ /*
+ test_begin (t, "tm unicast data limit dur tm")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 60, .duration_symb_nb = 91,
+ .symb_nb = 30, .main_seg_nb_total = 49,
+ .tmi = 5, .tm_mod = 10,
+ .tm_max_fl_tck = MAC_PAYLOAD_TCK (30, MAC_DX417_TCK)
+ + MAC_RIFS_SPC_ANY_TCK,
+ .mpdu_count = 1);
+ } test_end;
+ test_begin (t, "tm unicast data limit dur max")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 100, .duration_symb_nb = 100,
+ .symb_nb = 50, .main_seg_nb_total = 83,
+ .tmi = 5, .tm_mod = 10,
+ .mpdu_count = 1);
+ } test_end;
+ */
+ test_begin (t, "tm unicast data limit dur zero")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 5, .duration_symb_nb = 0,
+ .symb_nb = 0, .main_seg_nb_total = 0,
+ .tmi = 5, .tm_mod = 10);
+ } test_end;
+ test_begin (t, "tm unicast data limit dur one")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 5, .duration_symb_nb = 1,
+ .symb_nb = 1, .main_seg_nb_total = 1,
+ .tmi = 5, .tm_mod = 10);
+ } test_end;
+ test_begin (t, "tm unicast data limit dur two")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 5, .duration_symb_nb = 2,
+ .symb_nb = 2, .main_seg_nb_total = 2,
+ .tmi = 5, .tm_mod = 10);
+ } test_end;
+ test_begin (t, "robo unicast data limit dur encrypted")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .duration_symb_nb = 25,
+ .symb_nb = 19, .main_seg_nb_total = 1,
+ .encrypted = true);
+ } test_end;
+ test_begin (t, "robo multicast data limit dur encrypted")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .duration_symb_nb = 25,
+ .symb_nb = 19, .main_seg_nb_total = 1,
+ .bcast = true, .encrypted = true);
+ } test_end;
+ test_begin (t, "hs-robo unicast data limit dur remove 2")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .duration_symb_nb = 50,
+ .symb_nb = 50, .main_seg_nb_total = 5,
+ .remove = 2, .tmi = PHY_MOD_HS_ROBO);
+ } test_end;
+ test_begin (t, "hs-robo unicast data limit dur remove 3")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .duration_symb_nb = 50,
+ .symb_nb = 50, .main_seg_nb_total = 5,
+ .remove = 3, .tmi = PHY_MOD_HS_ROBO);
+ } test_end;
+ test_begin (t, "no sound for mme")
+ {
+ prep_mpdu_test (t, &tp, 0, .mme = true, .mfs_seg_nb = 30,
+ .duration_symb_nb = 25, .symb_nb = 19,
+ .main_seg_nb_total = 1,
+ .tmi = TONEMAP_INDEX_INITIAL_START);
+ } test_end;
+ test_begin (t, "sound initial")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .duration_symb_nb = 95,
+ .symb_nb = 19,
+ .tmi = TONEMAP_INDEX_INITIAL_START);
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .duration_symb_nb = 95,
+ .symb_nb = 19,
+ .tmi = TONEMAP_INDEX_INITIAL_START, .scf = true);
+ } test_end;
+ test_begin (t, "sound error")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .duration_symb_nb = 95,
+ .symb_nb = 19,
+ .tmi = TONEMAP_INDEX_INITIAL_ERROR);
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .duration_symb_nb = 95,
+ .symb_nb = 19,
+ .tmi = TONEMAP_INDEX_INITIAL_ERROR, .scf = true);
+ } test_end;
+ test_begin (t, "sound complete")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .duration_symb_nb = 50,
+ .symb_nb = 38, .main_seg_nb_total = 2,
+ .tmi = TONEMAP_INDEX_INITIAL_SOUND_COMPLETE);
+ } test_end;
+ test_begin (t, "sound tmi")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .duration_symb_nb = 95,
+ .symb_nb = 19, .tmi = 6, .sound_reason_code = 6);
+ } test_end;
+ test_begin (t, "beacon detection")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .duration_symb_nb = 25,
+ .symb_nb = 19, .main_seg_nb_total = 1,
+ .beacon_detected = true);
+ } test_end;
+ test_begin (t, "hp detection")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .duration_symb_nb = 25,
+ .symb_nb = 19, .main_seg_nb_total = 1,
+ .hp10_detected = true);
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .duration_symb_nb = 25,
+ .symb_nb = 19, .main_seg_nb_total = 1,
+ .hp11_detected = true);
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .duration_symb_nb = 25,
+ .symb_nb = 19, .main_seg_nb_total = 1,
+ .hp10_detected = true, .hp11_detected = true);
+ } test_end;
+ test_pbproc_uninit (&tp);
+}
+
+void
+prep_mpdu_ack_test_case (test_t t)
+{
+ test_pbproc_t tp;
+ test_case_begin (t, "ack");
+ test_pbproc_init (&tp);
+ test_begin (t, "acked all")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .duration_symb_nb = 50,
+ .symb_nb = 50, .main_seg_nb_total = 5,
+ .all_ok = true, .tmi = PHY_MOD_HS_ROBO);
+ } test_end;
+ test_begin (t, "acked bitmap")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .duration_symb_nb = 50,
+ .symb_nb = 50, .main_seg_nb_total = 5,
+ .crc = true, .crc_error = { 0 },
+ .tmi = PHY_MOD_HS_ROBO);
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .duration_symb_nb = 50,
+ .symb_nb = 50, .main_seg_nb_total = 5,
+ .crc = true, .crc_error = { 0x15 },
+ .tmi = PHY_MOD_HS_ROBO);
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 41, .duration_symb_nb = 30,
+ .symb_nb = 25, .main_seg_nb_total = 41,
+ .crc = true, .crc_error = { 0x0fa5c03a, 0x15 },
+ .tmi = 5, .tm_mod = 10);
+ } test_end;
+ test_begin (t, "acked bitmap overflow")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 81, .duration_symb_nb = 55,
+ .symb_nb = 49, .main_seg_nb_total = 81,
+ .crc = true,
+ .crc_error = { 0xaa55aa55, 0x5a5a5a5a, 0x1ff5a },
+ .tmi = 5, .tm_mod = 10);
+ } test_end;
+ test_begin (t, "acked bitmap with null")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 13, .duration_symb_nb = 9,
+ .symb_nb = 9, .main_seg_nb_total = 13,
+ .seg_nb_pending = 1,
+ .crc = true, .crc_error = { 0x1a5a },
+ .tmi = 5, .tm_mod = 10);
+ } test_end;
+ test_begin (t, "acked encoded bitmap")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .duration_symb_nb = 50,
+ .symb_nb = 50, .main_seg_nb_total = 5,
+ .crc = true, .crc_error = { 0x15 },
+ .encoded_sack = 0x6f,
+ .encoded_sack_length = 9,
+ .tmi = PHY_MOD_HS_ROBO);
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 41, .duration_symb_nb = 30,
+ .symb_nb = 25, .main_seg_nb_total = 41,
+ .crc = true, .crc_error = { 0x0fa5c03a, 0x15 },
+ .encoded_sack = 0x066bffc9fd3f9ull,
+ .encoded_sack_length = 49,
+ .tmi = 5, .tm_mod = 10);
+ } test_end;
+ test_begin (t, "acked encoded bitmap overflow")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 32, .duration_symb_nb = 30,
+ .symb_nb = 20, .main_seg_nb_total = 32,
+ .crc = true, .crc_error = { 0xf9ffffff },
+ .encoded_sack = 0xbfffffffffffffffull,
+ .encoded_sack_length = 64,
+ .tmi = 5, .tm_mod = 10);
+ } test_end;
+ test_begin (t, "acked encoded bitmap with null extra symbol")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 3, .duration_symb_nb = 3,
+ .symb_nb = 3, .main_seg_nb_total = 3,
+ .seg_nb_pending = 1,
+ .crc = true, .crc_error = { 0x4 },
+ .encoded_sack = 0x5, .encoded_sack_length = 4,
+ .tmi = 5, .tm_mod = 10);
+ } test_end;
+ test_begin (t, "acked encoded bitmap with null same symbol")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 3, .duration_symb_nb = 3,
+ .symb_nb = 3, .main_seg_nb_total = 3,
+ .seg_nb_pending = 1,
+ .crc = true, .crc_error = { 0x0 },
+ .encoded_sack = 0x0, .encoded_sack_length = 1,
+ .tmi = 5, .tm_mod = 10);
+ } test_end;
+ test_begin (t, "acked encoded bitmap with null extra symbol bad")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 3, .duration_symb_nb = 3,
+ .symb_nb = 3, .main_seg_nb_total = 3,
+ .seg_nb_pending = 1,
+ .crc = true, .crc_error = { 0x4 },
+ .encoded_sack = 0x1d, .encoded_sack_length = 6,
+ .tmi = 5, .tm_mod = 10);
+ } test_end;
+ test_begin (t, "acked encoded bitmap with null same symbol bad")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 3, .duration_symb_nb = 3,
+ .symb_nb = 3, .main_seg_nb_total = 3,
+ .seg_nb_pending = 1,
+ .crc = true, .crc_error = { 0x0 },
+ .encoded_sack = 0x7, .encoded_sack_length = 4,
+ .tmi = 5, .tm_mod = 10);
+ } test_end;
+ test_begin (t, "acked encoded bitmap with null overflow")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .duration_symb_nb = 29,
+ .symb_nb = 19, .main_seg_nb_total = 30,
+ .seg_nb_pending = 1,
+ .crc = true, .crc_error = { 0x39ffffff },
+ .encoded_sack = 0xbfffffffffffffffull,
+ .encoded_sack_length = 64,
+ .tmi = 5, .tm_mod = 10);
+ } test_end;
+ test_begin (t, "acked uniform basic")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .duration_symb_nb = 50,
+ .symb_nb = 38, .main_seg_nb_total = 2,
+ .all_ok = true,
+ .sacki = PBPROC_FC_SACKI_UNIFORM_ALL_OK);
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .duration_symb_nb = 50,
+ .symb_nb = 38, .main_seg_nb_total = 2,
+ .all_ok = false,
+ .sacki = PBPROC_FC_SACKI_UNIFORM_NOT_AVAILABLE);
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .duration_symb_nb = 50,
+ .symb_nb = 38, .main_seg_nb_total = 2,
+ .all_ok = false,
+ .sacki = PBPROC_FC_SACKI_UNIFORM_NEK_ERROR);
+ } test_end;
+ test_begin (t, "acked uniform tmi error no sta")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .duration_symb_nb = 50,
+ .symb_nb = 38, .main_seg_nb_total = 2,
+ .tmi = PHY_MOD_ROBO,
+ .sacki = PBPROC_FC_SACKI_UNIFORM_TMI_DEFAULT_ROBO);
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .duration_symb_nb = 50,
+ .symb_nb = 38, .main_seg_nb_total = 2,
+ .tmi = PHY_MOD_ROBO,
+ .sacki = PBPROC_FC_SACKI_UNIFORM_TMI_DEFAULT_RESTART);
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .duration_symb_nb = 50,
+ .symb_nb = 38, .main_seg_nb_total = 2,
+ .tmi = PHY_MOD_ROBO,
+ .sacki = PBPROC_FC_SACKI_UNIFORM_TMI_RESTART);
+ } test_end;
+ test_begin (t, "acked uniform tmi error robo")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 3, .duration_symb_nb = 95,
+ .symb_nb = 30, .main_seg_nb_total = 3,
+ .tmi = PHY_MOD_HS_ROBO,
+ .sacki = PBPROC_FC_SACKI_UNIFORM_TMI_DEFAULT_ROBO,
+ .tmi_sacki = PHY_MOD_ROBO);
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 3, .duration_symb_nb = 95,
+ .symb_nb = 30, .main_seg_nb_total = 3,
+ .tmi = PHY_MOD_HS_ROBO,
+ .sacki = PBPROC_FC_SACKI_UNIFORM_TMI_DEFAULT_RESTART,
+ .tmi_sacki = TONEMAP_INDEX_INITIAL_START);
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 3, .duration_symb_nb = 95,
+ .symb_nb = 30, .main_seg_nb_total = 3,
+ .tmi = PHY_MOD_HS_ROBO,
+ .sacki = PBPROC_FC_SACKI_UNIFORM_TMI_RESTART,
+ .tmi_sacki = TONEMAP_INDEX_INITIAL_START);
+ } test_end;
+ test_begin (t, "acked uniform tmi error tm")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .duration_symb_nb = 10,
+ .symb_nb = 10, .main_seg_nb_total = 10,
+ .tmi = 5, .tm_mod = 6,
+ .sacki = PBPROC_FC_SACKI_UNIFORM_TMI_DEFAULT_ROBO,
+ .tmi_sacki = PHY_MOD_ROBO);
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .duration_symb_nb = 10,
+ .symb_nb = 10, .main_seg_nb_total = 10,
+ .tmi = 5, .tm_mod = 6,
+ .sacki = PBPROC_FC_SACKI_UNIFORM_TMI_DEFAULT_RESTART,
+ .tmi_sacki = TONEMAP_INDEX_INITIAL_START);
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .duration_symb_nb = 10,
+ .symb_nb = 10, .main_seg_nb_total = 10,
+ .tmi = 5, .tm_mod = 6,
+ .sacki = PBPROC_FC_SACKI_UNIFORM_TMI_RESTART,
+ .tmi_sacki = TONEMAP_INDEX_INITIAL_START);
+ } test_end;
+ test_begin (t, "acked uniform tmi error ce update")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .duration_symb_nb = 10,
+ .symb_nb = 10, .main_seg_nb_total = 10,
+ .tmi = 5, .tm_mod = 6,
+ .tmi_update = TONEMAP_INDEX_INITIAL_SOUND_COMPLETE,
+ .sacki = PBPROC_FC_SACKI_UNIFORM_TMI_DEFAULT_ROBO,
+ .tmi_sacki = TONEMAP_INDEX_INITIAL_SOUND_COMPLETE);
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .duration_symb_nb = 10,
+ .symb_nb = 10, .main_seg_nb_total = 10,
+ .tmi = 5, .tm_mod = 6,
+ .tmi_update = TONEMAP_INDEX_INITIAL_SOUND_COMPLETE,
+ .sacki = PBPROC_FC_SACKI_UNIFORM_TMI_DEFAULT_RESTART,
+ .tmi_sacki = TONEMAP_INDEX_INITIAL_SOUND_COMPLETE);
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .duration_symb_nb = 10,
+ .symb_nb = 10, .main_seg_nb_total = 10,
+ .tmi = 5, .tm_mod = 6,
+ .tmi_update = TONEMAP_INDEX_INITIAL_SOUND_COMPLETE,
+ .sacki = PBPROC_FC_SACKI_UNIFORM_TMI_RESTART,
+ .tmi_sacki = TONEMAP_INDEX_INITIAL_SOUND_COMPLETE);
+ } test_end;
+ test_pbproc_uninit (&tp);
+}
+
+void
+prep_mpdu_intervals_test_case (test_t t)
+{
+ test_pbproc_t tp;
+ test_case_begin (t, "intervals");
+ test_pbproc_init (&tp);
+ utils_interval_t intervals[] =
+ {
+ { 100000, TONEMAP_INDEX_INTERVAL_UNAVAILABLE, 0 },
+ { 200000, TONEMAP_INDEX_INTERVAL_UNUSABLE, 0 },
+ { 300000, 6, 0 },
+ { 400000, TONEMAP_INDEX_INTERVAL_SOUND_COMPLETE, 0 },
+ { 0, 0, 0 }
+ };
+ test_begin (t, "interval tmi")
+ {
+ prep_mpdu_test (t, &tp, 210000,
+ .mfs_seg_nb = 14, .duration_symb_nb = 9,
+ .symb_nb = 9, .main_seg_nb_total = 14,
+ .tmi = 6, .tm_mod = 10,
+ .intervals = intervals, .interval = 2);
+ } test_end;
+ test_begin (t, "no interval default tmi")
+ {
+ prep_mpdu_test (t, &tp, 910000,
+ .mfs_seg_nb = 1, .duration_symb_nb = 95,
+ .symb_nb = 19, .main_seg_nb_total = 1,
+ .intervals = intervals,
+ .interval = TONEMAP_INTERVAL_NB);
+ } test_end;
+ test_begin (t, "unavailable interval")
+ {
+ prep_mpdu_test (t, &tp, 10000,
+ .mfs_seg_nb = 1, .duration_symb_nb = 95,
+ .symb_nb = 19,
+ .intervals = intervals, .interval = 0,
+ .sound_reason_code = TONEMAP_SRC_INTERVAL_UNAVAILABLE);
+ prep_mpdu_test (t, &tp, 10000,
+ .mfs_seg_nb = 1, .duration_symb_nb = 95,
+ .symb_nb = 19,
+ .intervals = intervals, .interval = 0,
+ .sound_reason_code = TONEMAP_SRC_INTERVAL_UNAVAILABLE,
+ .scf = true);
+ } test_end;
+ test_begin (t, "unusable interval")
+ {
+ prep_mpdu_test (t, &tp, 110000,
+ .mfs_seg_nb = 1, .duration_symb_nb = 95,
+ .symb_nb = 19,
+ .intervals = intervals, .interval = 1,
+ .sound_reason_code = TONEMAP_SRC_INTERVAL_UNUSABLE);
+ prep_mpdu_test (t, &tp, 110000,
+ .mfs_seg_nb = 1, .duration_symb_nb = 95,
+ .symb_nb = 19,
+ .intervals = intervals, .interval = 1,
+ .sound_reason_code = TONEMAP_SRC_INTERVAL_UNUSABLE,
+ .scf = true);
+ } test_end;
+ test_begin (t, "sound complete interval")
+ {
+ prep_mpdu_test (t, &tp, 310000,
+ .mfs_seg_nb = 1, .duration_symb_nb = 95,
+ .symb_nb = 19, .main_seg_nb_total = 1,
+ .intervals = intervals, .interval = 3);
+ } test_end;
+ test_begin (t, "acked uniform tmi error")
+ {
+ prep_mpdu_test (t, &tp, 210000,
+ .mfs_seg_nb = 14, .duration_symb_nb = 9,
+ .symb_nb = 9, .main_seg_nb_total = 14,
+ .tmi = 6, .tm_mod = 10,
+ .intervals = intervals, .interval = 2,
+ .sacki = PBPROC_FC_SACKI_UNIFORM_TMI_DEFAULT_ROBO,
+ .tmi_sacki = PHY_MOD_ROBO, .interval_tmi_sacki =
+ TONEMAP_INDEX_INTERVAL_UNAVAILABLE);
+ prep_mpdu_test (t, &tp, 210000,
+ .mfs_seg_nb = 14, .duration_symb_nb = 9,
+ .symb_nb = 9, .main_seg_nb_total = 14,
+ .tmi = 6, .tm_mod = 10,
+ .intervals = intervals, .interval = 2,
+ .sacki = PBPROC_FC_SACKI_UNIFORM_TMI_DEFAULT_RESTART,
+ .tmi_sacki = PHY_MOD_ROBO, .interval_tmi_sacki =
+ TONEMAP_INDEX_INTERVAL_UNAVAILABLE);
+ } test_end;
+ test_begin (t, "acked uniform tmi error restart")
+ {
+ prep_mpdu_test (t, &tp, 210000,
+ .mfs_seg_nb = 14, .duration_symb_nb = 9,
+ .symb_nb = 9, .main_seg_nb_total = 14,
+ .tmi = 6, .tm_mod = 10,
+ .intervals = intervals, .interval = 2,
+ .sacki = PBPROC_FC_SACKI_UNIFORM_TMI_RESTART,
+ .tmi_sacki = TONEMAP_INDEX_INITIAL_START,
+ .interval_tmi_sacki = 6);
+ } test_end;
+ test_pbproc_uninit (&tp);
+}
+
+void
+prep_mpdu_expiration_test_case (test_t t)
+{
+ test_pbproc_t tp;
+ test_case_begin (t, "expiration");
+ test_pbproc_init (&tp);
+ test_begin (t, "expiration on sack return")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 40, .duration_symb_nb = 50,
+ .symb_nb = 25, .main_seg_nb_total = 40, .seg_nb_pending = 1,
+ .expiration_date = 20 * UTILS_MFS_EXPIRATION_NTB_STEP,
+ .tmi = 5, .tm_mod = 10);
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 40, .duration_symb_nb = 50,
+ .symb_nb = 25, .main_seg_nb_total = 40, .seg_nb_pending = 1,
+ .expiration_date = 50 * UTILS_MFS_EXPIRATION_NTB_STEP,
+ .tmi = 5, .tm_mod = 10);
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 40, .duration_symb_nb = 50,
+ .symb_nb = 25, .main_seg_nb_total = 40, .seg_nb_pending = 1,
+ .crc = true, .crc_error = { 0x0fa5c03a, 0x15 },
+ .expiration_date = 50 * UTILS_MFS_EXPIRATION_NTB_STEP,
+ .tmi = 5, .tm_mod = 10);
+ } test_end;
+ test_begin (t, "expiration on chaining")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 200, .duration_symb_nb = 50,
+ .symb_nb = 50, .main_seg_nb_total = 83, .seg_nb_pending = 0,
+ .expiration_date = 80 * UTILS_MFS_EXPIRATION_NTB_STEP,
+ .tmi = 5, .tm_mod = 10);
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 200, .duration_symb_nb = 50,
+ .symb_nb = 50, .main_seg_nb_total = 83, .seg_nb_pending = 0,
+ .expiration_date = 150 * UTILS_MFS_EXPIRATION_NTB_STEP,
+ .tmi = 5, .tm_mod = 10);
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 200, .duration_symb_nb = 50,
+ .symb_nb = 50, .main_seg_nb_total = 83, .seg_nb_pending = 0,
+ .expiration_date = 250 * UTILS_MFS_EXPIRATION_NTB_STEP,
+ .tmi = 5, .tm_mod = 10);
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 200, .duration_symb_nb = 50,
+ .symb_nb = 50, .main_seg_nb_total = 83, .seg_nb_pending = 0,
+ .crc = true, .crc_error = { 0x0fa5c03a, 0x15, 0x7ff00 },
+ .expiration_date = 150 * UTILS_MFS_EXPIRATION_NTB_STEP,
+ .tmi = 5, .tm_mod = 10);
+ } test_end;
+ test_begin (t, "expiration with cancel")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 40, .duration_symb_nb = 50,
+ .symb_nb = 25, .main_seg_nb_total = 40, .seg_nb_pending = 1,
+ .expiration_date = 3 * UTILS_MFS_EXPIRATION_NTB_STEP,
+ .no_access_conf = true, .tmi = 5, .tm_mod = 10);
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 40, .duration_symb_nb = 50,
+ .symb_nb = 25, .main_seg_nb_total = 40, .seg_nb_pending = 1,
+ .expiration_date = 50 * UTILS_MFS_EXPIRATION_NTB_STEP,
+ .no_access_conf = true, .tmi = 5, .tm_mod = 10);
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 40, .duration_symb_nb = 50,
+ .symb_nb = 25, .main_seg_nb_total = 40, .seg_nb_pending = 1,
+ .expiration_date = 200 * UTILS_MFS_EXPIRATION_NTB_STEP,
+ .no_access_conf = true, .tmi = 5, .tm_mod = 10);
+ } test_end;
+ test_pbproc_uninit (&tp);
+}
+
+void
+prep_mpdu_window_size_test_case (test_t t)
+{
+ test_pbproc_t tp;
+ test_case_begin (t, "window size");
+ test_pbproc_init (&tp);
+ test_begin (t, "no holes no ack")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 40, .mfs_holes_bitmap = 0,
+ .window_size = MFS_WINDOW_SIZE_32, .duration_symb_nb = 50,
+ .symb_nb = 20, .main_seg_nb_total = 32, .tmi = 5, .tm_mod = 10);
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 20, .mfs_holes_bitmap = 0,
+ .window_size = MFS_WINDOW_SIZE_32, .duration_symb_nb = 50,
+ .symb_nb = 13, .main_seg_nb_total = 20, .seg_nb_pending = 1,
+ .tmi = 5, .tm_mod = 10);
+ } test_end;
+ test_begin (t, "holes no ack")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .mfs_holes_bitmap = 0x55,
+ .window_size = MFS_WINDOW_SIZE_24, .duration_symb_nb = 50,
+ .symb_nb = 13, .main_seg_nb_total = 21, .seg_nb_pending = 0,
+ .tmi = 5, .tm_mod = 10);
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .mfs_holes_bitmap = 0xAA,
+ .window_size = MFS_WINDOW_SIZE_24, .duration_symb_nb = 50,
+ .symb_nb = 13, .main_seg_nb_total = 20, .seg_nb_pending = 1,
+ .tmi = 5, .tm_mod = 10);
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 16, .mfs_holes_bitmap = 0xAA,
+ .window_size = MFS_WINDOW_SIZE_24, .duration_symb_nb = 50,
+ .symb_nb = 10, .main_seg_nb_total = 16, .seg_nb_pending = 0,
+ .tmi = 5, .tm_mod = 10);
+ } test_end;
+ test_begin (t, "holes ack all")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .mfs_holes_bitmap = 0xAA,
+ .window_size = MFS_WINDOW_SIZE_24, .duration_symb_nb = 50,
+ .symb_nb = 13, .main_seg_nb_total = 20, .seg_nb_pending = 1,
+ .all_ok = true, .tmi = 5, .tm_mod = 10);
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .mfs_holes_bitmap = 0x000100AA,
+ .window_size = MFS_WINDOW_SIZE_24, .duration_symb_nb = 50,
+ .symb_nb = 12, .main_seg_nb_total = 19, .seg_nb_pending = 0,
+ .all_ok = true, .tmi = 5, .tm_mod = 10);
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .mfs_holes_bitmap = 0x100000AA,
+ .window_size = MFS_WINDOW_SIZE_24, .duration_symb_nb = 50,
+ .symb_nb = 12, .main_seg_nb_total = 19, .seg_nb_pending = 0,
+ .all_ok = true, .tmi = 5, .tm_mod = 10);
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .mfs_holes_bitmap = 0x200000AA,
+ .window_size = MFS_WINDOW_SIZE_24, .duration_symb_nb = 50,
+ .symb_nb = 12, .main_seg_nb_total = 19, .seg_nb_pending = 0,
+ .all_ok = true, .tmi = 5, .tm_mod = 10);
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .mfs_holes_bitmap = 0x300000AA,
+ .window_size = MFS_WINDOW_SIZE_24, .duration_symb_nb = 50,
+ .symb_nb = 12, .main_seg_nb_total = 18, .seg_nb_pending = 1,
+ .all_ok = true, .tmi = 5, .tm_mod = 10);
+ } test_end;
+ test_begin (t, "holes ack bitmap")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .mfs_holes_bitmap = 0xAA,
+ .window_size = MFS_WINDOW_SIZE_24, .duration_symb_nb = 50,
+ .symb_nb = 13, .main_seg_nb_total = 20, .seg_nb_pending = 1,
+ .crc = true, .crc_error = { 0x00021084 },
+ .tmi = 5, .tm_mod = 10);
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .mfs_holes_bitmap = 0x100000AA,
+ .window_size = MFS_WINDOW_SIZE_24, .duration_symb_nb = 50,
+ .symb_nb = 12, .main_seg_nb_total = 19, .seg_nb_pending = 0,
+ .crc = true, .crc_error = { 0x00021084 },
+ .tmi = 5, .tm_mod = 10);
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .mfs_holes_bitmap = 0xAA,
+ .window_size = MFS_WINDOW_SIZE_24, .duration_symb_nb = 50,
+ .symb_nb = 13, .main_seg_nb_total = 20, .seg_nb_pending = 1,
+ .crc = true, .crc_error = { 0x000C4261 },
+ .tmi = 5, .tm_mod = 10);
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .mfs_holes_bitmap = 0xAA,
+ .window_size = MFS_WINDOW_SIZE_24, .duration_symb_nb = 50,
+ .symb_nb = 13, .main_seg_nb_total = 20, .seg_nb_pending = 1,
+ .crc = true, .crc_error = { 0x000C4000 },
+ .tmi = 5, .tm_mod = 10);
+ } test_end;
+ test_begin (t, "expiration")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .mfs_holes_bitmap = 0x200000AA,
+ .window_size = MFS_WINDOW_SIZE_24, .duration_symb_nb = 50,
+ .symb_nb = 12, .main_seg_nb_total = 19, .seg_nb_pending = 0,
+ .expiration_date = 22 * UTILS_MFS_EXPIRATION_NTB_STEP,
+ .all_ok = true, .tmi = 5, .tm_mod = 10);
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .mfs_holes_bitmap = 0xAA,
+ .window_size = MFS_WINDOW_SIZE_24, .duration_symb_nb = 50,
+ .symb_nb = 13, .main_seg_nb_total = 20, .seg_nb_pending = 1,
+ .crc = true, .crc_error = { 0x00021084 },
+ .expiration_date = 15 * UTILS_MFS_EXPIRATION_NTB_STEP,
+ .tmi = 5, .tm_mod = 10);
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .mfs_holes_bitmap = 0xAA,
+ .window_size = MFS_WINDOW_SIZE_24, .duration_symb_nb = 50,
+ .symb_nb = 13, .main_seg_nb_total = 20, .seg_nb_pending = 1,
+ .crc = true, .crc_error = { 0x00021084 },
+ .expiration_date = 22 * UTILS_MFS_EXPIRATION_NTB_STEP,
+ .tmi = 5, .tm_mod = 10);
+ /* No fsm state testing */
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .mfs_holes_bitmap = 0xAA,
+ .window_size = MFS_WINDOW_SIZE_24, .duration_symb_nb = 50,
+ .symb_nb = 13, .main_seg_nb_total = 20, .seg_nb_pending = 1,
+ .crc = true, .crc_error = { 0x00021084 },
+ .expiration_date = 50 * UTILS_MFS_EXPIRATION_NTB_STEP,
+ .expected_mfs_fsm_state = MFS_FSM_CMD_RE_SYNC,
+ .mfs_fsm_state_test = false, .tmi = 5, .tm_mod = 10);
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 200, .mfs_holes_bitmap = 0xAA,
+ .window_size = MFS_WINDOW_SIZE_24, .duration_symb_nb = 50,
+ .symb_nb = 13, .main_seg_nb_total = 20, .seg_nb_pending = 1,
+ .crc = true, .crc_error = { 0x00021084 },
+ .expiration_date = 100 * UTILS_MFS_EXPIRATION_NTB_STEP,
+ .expected_mfs_fsm_state = MFS_FSM_CMD_RE_SYNC,
+ .mfs_fsm_state_test = false, .tmi = 5, .tm_mod = 10);
+ } test_end;
+ test_begin (t, "no access conf")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 40, .mfs_holes_bitmap = 0,
+ .window_size = MFS_WINDOW_SIZE_32, .duration_symb_nb = 50,
+ .symb_nb = 20, .main_seg_nb_total = 32, .seg_nb_pending = 0,
+ .no_access_conf = true, .tmi = 5, .tm_mod = 10);
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .mfs_holes_bitmap = 0xAA,
+ .window_size = MFS_WINDOW_SIZE_24, .duration_symb_nb = 50,
+ .symb_nb = 13, .main_seg_nb_total = 20, .seg_nb_pending = 1,
+ .no_access_conf = true, .tmi = 5, .tm_mod = 10);
+ } test_end;
+ test_pbproc_uninit (&tp);
+}
+
+void
+prep_beacon_test (test_t t, test_pbproc_t *tp, u32 date, bool prepared,
+ uint duration_symb_nb, uint symb_nb)
+{
+ test_within (t);
+ dbg_assert (tp);
+ const uint beacon_tck = MAC_MS_TO_TCK (1000) / 50;
+ const u32 beacon_period_start_date = date / beacon_tck * beacon_tck;
+ /* Create a beacon MFS. */
+ mfs_tx_t *mfs = utils_mfs_tx_prepare (true, false, MAC_LID_SPC_CENTRAL,
+ MAC_TEI_BCAST, 0);
+ mfs->cfp = true;
+ mfs->beacon = true;
+ pb_t *seg = NULL;
+ pbproc_tx_beacon_params_t params =
+ { { 0x0123, 0x4242, 0xabab, 0x5555 }, NULL };
+ if (prepared)
+ {
+ pb_beacon_t *pb = PARENT_OF (pb_beacon_t, blk, blk_alloc_desc ());
+ seg = (pb_t *) pb;
+ params.bpsto = pb->data + 123;
+ pbproc_mfs_beacon_prepare (tp->pbproc, mfs, pb, &params);
+ }
+ /* To be cleared by pbproc_prep_beacon. */
+ tp->pbproc->prep_mpdu.bbf = true;
+ /* Setup an access. */
+ test_pbproc_alloc (tp, false, beacon_period_start_date);
+ ca_access_param_t *access = &tp->pbproc->access;
+ access->access_date = date;
+ access->duration_tck = MAC_PREAMBLE_TCK
+ + MAC_FC_AV_TCK + MAC_PAYLOAD_TCK (duration_symb_nb, MAC_DX567_TCK)
+ + MAC_B2BIFS_TCK;
+ access->prp = false;
+ access->cfp = true;
+ /* Prepare beacon. */
+ pbproc_prep_beacon (tp->pbproc, mfs);
+ /* Check result. */
+ pbproc_prep_mpdu_t *prep = &tp->pbproc->prep_mpdu;
+ test_fail_unless (prep->stei == tp->config.tei);
+ test_fail_unless (prep->dtei == MAC_TEI_BCAST);
+ test_fail_unless (prep->lid == MAC_LID_NONE);
+ test_fail_unless (!prep->wack);
+ test_fail_unless (!prep->unassociated);
+ test_fail_unless (!prep->rts_cts);
+ test_fail_unless (prep->burst_mpdu_nb == 1);
+ test_fail_unless (prep->mpdu_count == 0);
+ test_fail_unless (prep->current == &prep->mpdu[0]);
+ if (symb_nb)
+ {
+ test_fail_unless (prep->valid);
+ test_fail_unless (prep->main_mfs == mfs);
+ test_fail_unless (prep->tx_date == date);
+ test_fail_unless (prep->fc_mode == PHY_FC_MODE_AV_1);
+ test_fail_unless (prep->sound_reason_code == TONEMAP_SRC_NULL);
+ test_fail_unless (prep->mpdu[0].tmi == PHY_MOD_MINI_ROBO);
+ test_fail_unless (prep->phy_combo_params == PHY_COMBO_PARAMS (
+ PHY_MOD_MINI_ROBO, PHY_FEC_RATE_1_2, PHY_PB_SIZE_136));
+ test_fail_unless (prep->gil == PHY_GIL_567);
+ test_fail_unless (prep->tonemap == NULL);
+ test_fail_unless (prep->ifs_tck == MAC_B2BIFS_TCK);
+ test_fail_unless (prep->flp_tck == MAC_PREAMBLE_TCK + MAC_FC_AV_TCK
+ + MAC_PAYLOAD_TCK (symb_nb, MAC_DX567_TCK)
+ + MAC_B2BIFS_TCK);
+ test_fail_unless (prep->mpdu[0].main_head == seg);
+ test_fail_unless (prep->mpdu[0].main_tail == seg);
+ test_fail_unless (prep->mpdu[0].main_seg_nb == 1);
+ test_fail_unless (prep->main_seg_nb_reserved == 0);
+ test_fail_unless (prep->main_mfs_cmd == MFS_FSM_CMD_NOP);
+ test_fail_unless (prep->main_mfs_rsp == MFS_FSM_RSP_NB);
+ test_fail_unless (prep->mpdu[0].pb_nb_total == 1);
+ test_fail_unless (prep->bypass_aes);
+ test_fail_unless (!prep->bbf);
+ /* Check FC. */
+ pbproc_fc_beacon_t *fc = &prep->fc_av.beacon;
+ test_fail_unless (fc->dt_av == PBPROC_FC_DT_BEACON);
+ test_fail_unless (fc->access == false
+ && fc->snid == tp->snid);
+ uint bts = fc->bts_msb8 << 24 | fc->bts_lsb24;
+ uint bto[4] = {
+ fc->bto0,
+ fc->bto1_msb8 << 8 | fc->bto1_lsb8,
+ fc->bto2,
+ fc->bto3_msb8 << 8 | fc->bto3_lsb8
+ };
+ test_fail_unless (bts == date + tp->config.ntb_offset_tck);
+ test_fail_unless (bto[0] == params.bto[0]);
+ test_fail_unless (bto[1] == params.bto[1]);
+ test_fail_unless (bto[2] == params.bto[2]);
+ test_fail_unless (bto[3] == params.bto[3]);
+ test_fail_unless (prep->fc10 == 0x2f00);
+ /* Check payload (BPSTO). */
+ uint bpsto = params.bpsto[0]
+ | params.bpsto[1] << 8
+ | params.bpsto[2] << 16;
+ test_fail_unless (bpsto == date - beacon_period_start_date);
+ /* Cancel preparation. */
+ pbproc_prep_mpdu_cancel_burst (tp->pbproc);
+ /* Check result. */
+ test_fail_unless (mfs->seg_nb == 1);
+ test_fail_unless (mfs->head == seg);
+ test_fail_unless (mfs->tail == seg);
+ test_fail_unless (!mfs->holes_seg_nb);
+ }
+ else
+ {
+ test_fail_unless (!prep->valid);
+ test_fail_unless (prep->main_mfs == NULL);
+ test_fail_unless (prep->mpdu[0].main_seg_nb == 0);
+ test_fail_unless (prep->main_seg_nb_reserved == 0);
+ test_fail_unless (prep->mpdu[0].pb_nb_total == 0);
+ /* Check MFS. */
+ if (prepared)
+ {
+ test_fail_unless (mfs->seg_nb == 1);
+ test_fail_unless (mfs->head == seg);
+ test_fail_unless (mfs->tail == seg);
+ }
+ else
+ {
+ test_fail_unless (mfs->seg_nb == 0);
+ test_fail_unless (mfs->head == NULL);
+ }
+ }
+ /* Cleanup. */
+ utils_mfs_tx_cleanup (mfs);
+}
+
+void
+prep_mpdu_beacon_test_case (test_t t)
+{
+ test_pbproc_t tp;
+ test_case_begin (t, "beacon");
+ test_pbproc_init (&tp);
+ test_begin (t, "valid")
+ {
+ prep_beacon_test (t, &tp, 123456, true, 6, 6);
+ } test_end;
+ test_begin (t, "unvalid")
+ {
+ prep_beacon_test (t, &tp, 54321, true, 5, 0);
+ } test_end;
+ test_begin (t, "no seg")
+ {
+ prep_beacon_test (t, &tp, 54321, false, 6, 0);
+ } test_end;
+ test_pbproc_uninit (&tp);
+}
+
+void
+prep_mpdu_fsm_test (test_t t, test_pbproc_t *tp, mfs_fsm_cmd_t cmd,
+ mfs_fsm_rsp_t rsp, bool release, bool empty,
+ bool opsf, mfs_fsm_cmd_t expect_cmd, bool expect_hold)
+{
+ test_within (t);
+ /* Create an MFS. */
+ mfs_tx_t *mfs = utils_mfs_tx_prepare (false, false, 2, 2, empty ? 0 : 1);
+ if (!empty && opsf)
+ mfs->head->header.opsf = true;
+ mfs->fsm_state = release ? MFS_FSM_CMD_RELEASE : cmd;
+ /* Prepare MPDU. */
+ pbproc_prep_mpdu_t *prep = &tp->pbproc->prep_mpdu;
+ prep->valid = true;
+ prep->main_mfs = mfs;
+ blk_addref (mfs);
+ pb_t *pb = PARENT_OF (pb_t, blk, blk_alloc_desc ());
+ prep->burst_mpdu_nb = 1;
+ prep->mpdu[0].main_head = prep->mpdu[0].main_tail = pb;
+ prep->mpdu[0].main_seg_nb = 1;
+ prep->main_seg_nb_reserved = 0;
+ prep->mpdu[0].pb_nb_total = 1;
+ prep->main_mfs_cmd = cmd;
+ /* Test. */
+ prep->main_mfs_rsp = rsp;
+ pbproc_prep_mpdu_ack_all_burst (tp->pbproc);
+ /* Call DSR if requested. */
+ if (tp->pbproc->fsm.schedule_deferred)
+ pbproc_fsm_handle_deferred (tp->pbproc);
+ /* Check result. */
+ test_fail_unless (mfs->fsm_state == expect_cmd);
+ test_fail_unless (
+ (expect_hold && mfs->ca_state == CA_MFS_STATE_HELD)
+ || (!expect_hold && mfs->ca_state == CA_MFS_STATE_UNKNOWN));
+ /* Cleanup. */
+ utils_mfs_tx_cleanup (mfs);
+ prep->main_mfs = NULL;
+ prep->valid = false;
+}
+
+void
+prep_mpdu_fsm_test_case (test_t t)
+{
+ test_pbproc_t tp;
+ test_case_begin (t, "fsm");
+ test_pbproc_init (&tp);
+ test_begin (t, "unicast init ack")
+ {
+ prep_mpdu_fsm_test (t, &tp, MFS_FSM_CMD_INIT, MFS_FSM_RSP_ACK,
+ false, true, false, MFS_FSM_CMD_IN_SYNC, false);
+ prep_mpdu_fsm_test (t, &tp, MFS_FSM_CMD_INIT, MFS_FSM_RSP_ACK,
+ false, false, false, MFS_FSM_CMD_IN_SYNC, false);
+ prep_mpdu_fsm_test (t, &tp, MFS_FSM_CMD_INIT, MFS_FSM_RSP_ACK,
+ false, false, true, MFS_FSM_CMD_IN_SYNC, false);
+ } test_end;
+ test_begin (t, "unicast init nack (invalid)")
+ {
+ prep_mpdu_fsm_test (t, &tp, MFS_FSM_CMD_INIT, MFS_FSM_RSP_NACK,
+ false, true, false, MFS_FSM_CMD_INIT, false);
+ prep_mpdu_fsm_test (t, &tp, MFS_FSM_CMD_INIT, MFS_FSM_RSP_NACK,
+ false, false, false, MFS_FSM_CMD_INIT, false);
+ prep_mpdu_fsm_test (t, &tp, MFS_FSM_CMD_INIT, MFS_FSM_RSP_NACK,
+ false, false, true, MFS_FSM_CMD_INIT, false);
+ } test_end;
+ test_begin (t, "unicast in_sync ack")
+ {
+ prep_mpdu_fsm_test (t, &tp, MFS_FSM_CMD_IN_SYNC, MFS_FSM_RSP_ACK,
+ false, true, false, MFS_FSM_CMD_IN_SYNC, false);
+ prep_mpdu_fsm_test (t, &tp, MFS_FSM_CMD_IN_SYNC, MFS_FSM_RSP_ACK,
+ false, false, false, MFS_FSM_CMD_IN_SYNC, false);
+ prep_mpdu_fsm_test (t, &tp, MFS_FSM_CMD_IN_SYNC, MFS_FSM_RSP_ACK,
+ false, false, true, MFS_FSM_CMD_IN_SYNC, false);
+ } test_end;
+ test_begin (t, "unicast in_sync nack")
+ {
+ prep_mpdu_fsm_test (t, &tp, MFS_FSM_CMD_IN_SYNC, MFS_FSM_RSP_NACK,
+ false, true, false, MFS_FSM_CMD_RE_SYNC, false);
+ prep_mpdu_fsm_test (t, &tp, MFS_FSM_CMD_IN_SYNC, MFS_FSM_RSP_NACK,
+ false, false, false, MFS_FSM_CMD_RE_SYNC, false);
+ prep_mpdu_fsm_test (t, &tp, MFS_FSM_CMD_IN_SYNC, MFS_FSM_RSP_NACK,
+ false, false, true, MFS_FSM_CMD_RE_SYNC, false);
+ } test_end;
+ test_begin (t, "unicast re_sync ack")
+ {
+ prep_mpdu_fsm_test (t, &tp, MFS_FSM_CMD_RE_SYNC, MFS_FSM_RSP_ACK,
+ false, true, false, MFS_FSM_CMD_IN_SYNC, false);
+ prep_mpdu_fsm_test (t, &tp, MFS_FSM_CMD_RE_SYNC, MFS_FSM_RSP_ACK,
+ false, false, false, MFS_FSM_CMD_IN_SYNC, false);
+ prep_mpdu_fsm_test (t, &tp, MFS_FSM_CMD_RE_SYNC, MFS_FSM_RSP_ACK,
+ false, false, true, MFS_FSM_CMD_RE_SYNC, false);
+ } test_end;
+ test_begin (t, "unicast re_sync nack")
+ {
+ prep_mpdu_fsm_test (t, &tp, MFS_FSM_CMD_RE_SYNC, MFS_FSM_RSP_NACK,
+ false, true, false, MFS_FSM_CMD_RE_SYNC, false);
+ prep_mpdu_fsm_test (t, &tp, MFS_FSM_CMD_RE_SYNC, MFS_FSM_RSP_NACK,
+ false, false, false, MFS_FSM_CMD_RE_SYNC, false);
+ prep_mpdu_fsm_test (t, &tp, MFS_FSM_CMD_RE_SYNC, MFS_FSM_RSP_NACK,
+ false, false, true, MFS_FSM_CMD_RE_SYNC, false);
+ } test_end;
+ test_begin (t, "multicast ack")
+ {
+ prep_mpdu_fsm_test (t, &tp, MFS_FSM_CMD_NOP, MFS_FSM_RSP_ACK,
+ false, true, false, MFS_FSM_CMD_NOP, false);
+ prep_mpdu_fsm_test (t, &tp, MFS_FSM_CMD_NOP, MFS_FSM_RSP_ACK,
+ false, false, false, MFS_FSM_CMD_NOP, false);
+ prep_mpdu_fsm_test (t, &tp, MFS_FSM_CMD_NOP, MFS_FSM_RSP_ACK,
+ false, false, true, MFS_FSM_CMD_NOP, false);
+ } test_end;
+ test_begin (t, "multicast nack (invalid)")
+ {
+ prep_mpdu_fsm_test (t, &tp, MFS_FSM_CMD_NOP, MFS_FSM_RSP_NACK,
+ false, true, false, MFS_FSM_CMD_NOP, false);
+ prep_mpdu_fsm_test (t, &tp, MFS_FSM_CMD_NOP, MFS_FSM_RSP_NACK,
+ false, false, false, MFS_FSM_CMD_NOP, false);
+ prep_mpdu_fsm_test (t, &tp, MFS_FSM_CMD_NOP, MFS_FSM_RSP_NACK,
+ false, false, true, MFS_FSM_CMD_NOP, false);
+ } test_end;
+ test_begin (t, "hold")
+ {
+ prep_mpdu_fsm_test (t, &tp, MFS_FSM_CMD_INIT, MFS_FSM_RSP_HOLD,
+ false, true, false, MFS_FSM_CMD_INIT, true);
+ prep_mpdu_fsm_test (t, &tp, MFS_FSM_CMD_IN_SYNC, MFS_FSM_RSP_HOLD,
+ false, true, false, MFS_FSM_CMD_IN_SYNC, true);
+ prep_mpdu_fsm_test (t, &tp, MFS_FSM_CMD_RE_SYNC, MFS_FSM_RSP_HOLD,
+ false, true, false, MFS_FSM_CMD_RE_SYNC, true);
+ prep_mpdu_fsm_test (t, &tp, MFS_FSM_CMD_NOP, MFS_FSM_RSP_HOLD,
+ false, true, false, MFS_FSM_CMD_NOP, false);
+ } test_end;
+ test_begin (t, "released")
+ {
+ prep_mpdu_fsm_test (t, &tp, MFS_FSM_CMD_INIT, MFS_FSM_RSP_ACK,
+ true, true, false, MFS_FSM_CMD_RELEASE, false);
+ prep_mpdu_fsm_test (t, &tp, MFS_FSM_CMD_IN_SYNC, MFS_FSM_RSP_ACK,
+ true, true, false, MFS_FSM_CMD_RELEASE, false);
+ prep_mpdu_fsm_test (t, &tp, MFS_FSM_CMD_RE_SYNC, MFS_FSM_RSP_ACK,
+ true, true, false, MFS_FSM_CMD_RELEASE, false);
+ prep_mpdu_fsm_test (t, &tp, MFS_FSM_CMD_NOP, MFS_FSM_RSP_ACK,
+ true, true, false, MFS_FSM_CMD_RELEASE, false);
+ prep_mpdu_fsm_test (t, &tp, MFS_FSM_CMD_INIT, MFS_FSM_RSP_NACK,
+ true, true, false, MFS_FSM_CMD_RELEASE, false);
+ prep_mpdu_fsm_test (t, &tp, MFS_FSM_CMD_IN_SYNC, MFS_FSM_RSP_NACK,
+ true, true, false, MFS_FSM_CMD_RELEASE, false);
+ prep_mpdu_fsm_test (t, &tp, MFS_FSM_CMD_RE_SYNC, MFS_FSM_RSP_NACK,
+ true, true, false, MFS_FSM_CMD_RELEASE, false);
+ prep_mpdu_fsm_test (t, &tp, MFS_FSM_CMD_NOP, MFS_FSM_RSP_NACK,
+ true, true, false, MFS_FSM_CMD_RELEASE, false);
+ } test_end;
+ test_pbproc_uninit (&tp);
+}
+
+void
+prep_mpdu_basic_rsof_test_case (test_t t)
+{
+ test_pbproc_t tp;
+ test_case_begin (t, "basic rsof");
+ test_pbproc_init (&tp);
+ test_begin (t, "robo unicast data limit dur")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .duration_symb_nb = 25,
+ .symb_nb = 19, .main_seg_nb_total = 1, .bbf = true);
+ } test_end;
+ test_begin (t, "robo unicast mme limit dur")
+ {
+ prep_mpdu_test (t, &tp, 0, .mme = true, .mfs_seg_nb = 30,
+ .duration_symb_nb = 25, .symb_nb = 19,
+ .main_seg_nb_total = 1, .bbf = true);
+ } test_end;
+ test_begin (t, "robo unicast data limit dur max")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .duration_symb_nb = 95,
+ .symb_nb = 38, .main_seg_nb_total = 2, .bbf = true);
+ } test_end;
+ test_begin (t, "robo unicast data limit seg")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 1, .duration_symb_nb = 95,
+ .symb_nb = 19, .main_seg_nb_total = 1, .bbf = true);
+ } test_end;
+ test_begin (t, "hs-robo unicast data limit seg")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 3, .duration_symb_nb = 95,
+ .symb_nb = 30, .main_seg_nb_total = 3,
+ .tmi = PHY_MOD_HS_ROBO, .bbf = true);
+ } test_end;
+ test_begin (t, "tm unicast data limit dur")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .duration_symb_nb = 10,
+ .symb_nb = 10, .main_seg_nb_total = 10,
+ .tmi = 5, .tm_mod = 6, .bbf = true);
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .duration_symb_nb = 10,
+ .symb_nb = 10, .main_seg_nb_total = 16,
+ .tmi = 5, .tm_mod = 10, .bbf = true);
+ } test_end;
+ test_begin (t, "tm unicast data limit seg with null")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 13, .duration_symb_nb = 8,
+ .symb_nb = 8, .main_seg_nb_total = 12,
+ .seg_nb_pending = 0,
+ .tmi = 5, .tm_mod = 10, .bbf = true);
+ } test_end;
+ test_begin (t, "tm unicast data limit dur bis")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 13, .duration_symb_nb = 8,
+ .symb_nb = 8, .main_seg_nb_total = 12,
+ .tmi = 5, .tm_mod = 10, .bbf = true);
+ } test_end;
+ test_begin (t, "tm unicast data limit dur one")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 5, .duration_symb_nb = 1,
+ .symb_nb = 1, .main_seg_nb_total = 1,
+ .tmi = 5, .tm_mod = 10, .bbf = true);
+ } test_end;
+ test_begin (t, "tm unicast data limit dur two")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 5, .duration_symb_nb = 2,
+ .symb_nb = 2, .main_seg_nb_total = 2,
+ .tmi = 5, .tm_mod = 10, .bbf = true);
+ } test_end;
+ test_begin (t, "robo unicast data limit dur encrypted")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .duration_symb_nb = 25,
+ .symb_nb = 19, .main_seg_nb_total = 1,
+ .encrypted = true, .bbf = true);
+ } test_end;
+ test_begin (t, "hs-robo unicast data limit dur remove 2")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .duration_symb_nb = 50,
+ .symb_nb = 50, .main_seg_nb_total = 5,
+ .remove = 2, .tmi = PHY_MOD_HS_ROBO, .bbf = true);
+ } test_end;
+ test_begin (t, "hs-robo unicast data limit dur remove 3")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .duration_symb_nb = 50,
+ .symb_nb = 50, .main_seg_nb_total = 5,
+ .remove = 3, .tmi = PHY_MOD_HS_ROBO, .bbf = true);
+ } test_end;
+ test_begin (t, "sppb non zero cap 0")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .duration_symb_nb = 25,
+ .symb_nb = 19, .main_seg_nb_total = 1, .bbf = true,
+ .lid = MAC_LLID_MIN, .sppb = 0x1f);
+ } test_end;
+ test_begin (t, "sppb non zero cap 3")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .duration_symb_nb = 25,
+ .symb_nb = 19, .main_seg_nb_total = 1, .bbf = true,
+ .lid = MAC_LLID_MIN + 3, .sppb = 0x8f);
+ } test_end;
+ test_begin (t, "sppb zero cap 0")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 1, .duration_symb_nb = 25,
+ .symb_nb = 19, .main_seg_nb_total = 1, .bbf = true,
+ .lid = MAC_LLID_MIN, .sppb = 0x0f);
+ } test_end;
+ test_pbproc_uninit (&tp);
+}
+
+void
+prep_mpdu_pg_ack_test_case (test_t t)
+{
+ test_pbproc_t tp;
+ test_case_begin (t, "pg_ack");
+ test_pbproc_init (&tp);
+ test_begin (t, "acked bitmap")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .duration_symb_nb = 50,
+ .symb_nb = 50, .main_seg_nb_total = 5,
+ .crc_error = { 0 },
+ .pg_sacki = true,
+ .tmi = PHY_MOD_HS_ROBO);
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .duration_symb_nb = 50,
+ .symb_nb = 50, .main_seg_nb_total = 5,
+ .crc_error = { 0x15 },
+ .pg_sacki = true,
+ .tmi = PHY_MOD_HS_ROBO);
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 41, .duration_symb_nb = 30,
+ .symb_nb = 25, .main_seg_nb_total = 41,
+ .crc_error = { 0x0fa5c03a, 0x15 },
+ .pg_sacki = true,
+ .tmi = 5, .tm_mod = 10);
+ } test_end;
+ test_begin (t, "acked bitmap overflow")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 81, .duration_symb_nb = 55,
+ .symb_nb = 49, .main_seg_nb_total = 81,
+ .crc_error = { 0xaa55aa55, 0x5a5a5a5a },
+ .pg_sacki = true,
+ .tmi = 5, .tm_mod = 10);
+ } test_end;
+ test_begin (t, "acked bitmap rsof")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .duration_symb_nb = 50,
+ .symb_nb = 50, .main_seg_nb_total = 5,
+ .crc_error = { 0 },
+ .pg_sacki = true, .bbf = true,
+ .tmi = PHY_MOD_HS_ROBO);
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 30, .duration_symb_nb = 50,
+ .symb_nb = 50, .main_seg_nb_total = 5,
+ .crc_error = { 0x15 },
+ .pg_sacki = true, .bbf = true,
+ .tmi = PHY_MOD_HS_ROBO);
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 41, .duration_symb_nb = 30,
+ .symb_nb = 25, .main_seg_nb_total = 41,
+ .crc_error = { 0x0fa5c03a, 0x15 },
+ .pg_sacki = true, .bbf = true,
+ .tmi = 5, .tm_mod = 10);
+ } test_end;
+ test_begin (t, "acked bitmap overflow rsof")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 81, .duration_symb_nb = 55,
+ .symb_nb = 49, .main_seg_nb_total = 81,
+ .crc_error = { 0xaa55aa55, 0x5a5a5a5a },
+ .pg_sacki = true, .bbf = true,
+ .tmi = 5, .tm_mod = 10);
+ } test_end;
+ test_begin (t, "acked bitmap sound")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 5, .duration_symb_nb = 95,
+ .symb_nb = 19,
+ .crc_error = { 0 },
+ .pg_sacki = true,
+ .tmi = TONEMAP_INDEX_INITIAL_START);
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 5, .duration_symb_nb = 95,
+ .symb_nb = 19,
+ .crc_error = { 0x15 },
+ .pg_sacki = true,
+ .tmi = TONEMAP_INDEX_INITIAL_START);
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 5, .duration_symb_nb = 95,
+ .symb_nb = 19,
+ .crc_error = { 0x0fa5c03a, 0x15 },
+ .pg_sacki = true,
+ .tmi = TONEMAP_INDEX_INITIAL_START);
+ } test_end;
+ test_begin (t, "acked bitmap sound bbf")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 5, .duration_symb_nb = 95,
+ .symb_nb = 19,
+ .crc_error = { 0 },
+ .pg_sacki = true, .bbf = true,
+ .tmi = TONEMAP_INDEX_INITIAL_START);
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 5, .duration_symb_nb = 95,
+ .symb_nb = 19,
+ .crc_error = { 0x15 },
+ .pg_sacki = true, .bbf = true,
+ .tmi = TONEMAP_INDEX_INITIAL_START);
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 5, .duration_symb_nb = 95,
+ .symb_nb = 19,
+ .crc_error = { 0x0fa5c03a, 0x15 },
+ .pg_sacki = true, .bbf = true,
+ .tmi = TONEMAP_INDEX_INITIAL_START);
+ } test_end;
+ test_begin (t, "acked bitmap overflow sound")
+ {
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 5, .duration_symb_nb = 95,
+ .symb_nb = 19,
+ .crc_error = { 0xaa55aa55, 0x5a5a5a5a },
+ .pg_sacki = true,
+ .tmi = TONEMAP_INDEX_INITIAL_START);
+ prep_mpdu_test (t, &tp, 0, .mfs_seg_nb = 5, .duration_symb_nb = 95,
+ .symb_nb = 19,
+ .crc_error = { 0xaa55aa55, 0x5a5a5a5a },
+ .pg_sacki = true, .bbf = true,
+ .tmi = TONEMAP_INDEX_INITIAL_START);
+ } test_end;
+ test_pbproc_uninit (&tp);
+}
+
+void
+prep_mpdu_test_suite (test_t t)
+{
+ test_suite_begin (t, "prepare mpdu");
+ prep_mpdu_basic_test_case (t);
+ prep_mpdu_basic_rsof_test_case (t);
+ prep_mpdu_ack_test_case (t);
+ prep_mpdu_pg_ack_test_case (t);
+ prep_mpdu_intervals_test_case (t);
+ prep_mpdu_expiration_test_case (t);
+ prep_mpdu_window_size_test_case (t);
+ prep_mpdu_beacon_test_case (t);
+/* prep_mpdu_fsm_test_case (t);*/
+ test_case_begin (t, "memory");
+ test_begin (t, "memory")
+ {
+ test_fail_unless (blk_check_memory ());
+ } test_end;
+}
+
diff --git a/cesar/mac/pbproc/test/pbproc_eoc/src/rx_data.c b/cesar/mac/pbproc/test/pbproc_eoc/src/rx_data.c
new file mode 100644
index 0000000000..2d9affd0a1
--- /dev/null
+++ b/cesar/mac/pbproc/test/pbproc_eoc/src/rx_data.c
@@ -0,0 +1,1932 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2007 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/rx_data.c
+ * \brief RX Data automaton test.
+ * \ingroup test
+ */
+#include "common/std.h"
+
+#include "lib/scenario/scenario.h"
+#include "inc/utils.h"
+
+#include "inc/test_pbproc.h"
+
+#include "mac/common/timings.h"
+#include "hal/phy/inc/context.h"
+
+#include <stdarg.h>
+
+/** RX data burst test MPDU description. */
+struct rx_data_burst_mpdu_t
+{
+ /** Number of symbols. */
+ uint symb_nb;
+ /** Real number of symbols, or 0 if not different. */
+ uint real_symb_nb;
+ /** Number of PB. */
+ uint pb_nb;
+ /** PB Size: false for 520 octets, true for 136 octets. **/
+ bool pb_size_136;
+ /** Tonemap index. */
+ uint tmi;
+ /** Tonemap uniform modulation, or 0 to reuse previous one. */
+ uint tm_mod;
+ /** Payload is encrypted. */
+ bool encrypted;
+ /** NEK switch value (0-1) or STA own NEK (2). */
+ uint nek_switch;
+ /** Use an unknown NEK. */
+ bool bad_nek;
+ /** MPDU count (for bursts). */
+ uint mpdu_cnt;
+ /** Array of CRC error bits. */
+ u32 *crc_error;
+ /** Number of symbols for reverse transmission (RSOF). */
+ uint rev_symb_nb;
+ /** Number of PB for RSOF. */
+ uint rev_pb_nb;
+ /** bbf - prepare for RSOF */
+ bool bbf;
+ /** Time allocated for reverse transmission. */
+ uint mrdur_tck;
+};
+typedef struct rx_data_burst_mpdu_t rx_data_burst_mpdu_t;
+
+/** RX data burst test description. */
+struct rx_data_burst_desc_t
+{
+ /** Wether PRP was won before this reception. */
+ bool prp_won;
+ /** Transmission from an unassociated STA. */
+ bool unassociated;
+ /** Transmission from a STA known to be authenticated. */
+ bool authenticated;
+ /** Link ID. */
+ uint lid;
+ /** Acknowledgment expected. */
+ bool wack;
+ /** Multicast. */
+ bool bcast;
+ /** Multi-network broadcast. */
+ bool multi_net_bcast;
+ /** Window size. */
+ uint window_size_encoded;
+ /** Number of PB in the PB pool. */
+ uint pool_pb_nb;
+ /** Number of channel data. */
+ uint chandata_nb;
+ /** Reception of rsof */
+ bool rsof;
+ /** Table of individual MPDU. */
+ rx_data_burst_mpdu_t *mpdu;
+ /** Number of MPDU. */
+ uint mpdu_nb;
+ /** Test with RSOF out of allocation. */
+ bool rsof_out_of_alloc;
+ /** Test with SOF out of allocation. */
+ bool sof_out_of_alloc;
+ /** Test compatibility with old software. */
+ bool compat;
+};
+typedef struct rx_data_burst_desc_t rx_data_burst_desc_t;
+
+/** RX data burst test context. */
+struct rx_data_burst_t
+{
+ /** Source TEI. */
+ uint stei;
+ /** Whether the STA was added to MAC store. */
+ bool sta_added;
+ /** Link ID. */
+ uint lid;
+ /** Encoded window size. */
+ u8 window_size_encoded;
+ /** SACKT. */
+ uint sackt[4];
+ /** SACKI encoder. */
+ pbproc_sacki_enc_t sacki_enc;
+ /** Set to false after first MPDU. */
+ bool first;
+ /** Number of block left in pool. */
+ uint pool_size;
+};
+typedef struct rx_data_burst_t rx_data_burst_t;
+
+/** Build a call to rx_data_burst_test_f, see usage below. */
+#define rx_data_burst_test(t, tp, params...) \
+ rx_data_burst_test_f ((t), (tp), \
+ &(rx_data_burst_desc_t) { params })
+#define _one_MPDU_(mpdu...) { mpdu }
+#define _one_MPDU(mpdu) _one_MPDU_ mpdu
+#define MPDU(_mpdu...) \
+ .mpdu = (rx_data_burst_mpdu_t[]) { \
+ PREPROC_FOR_EACH_COMMA (_one_MPDU, _mpdu) }, \
+ .mpdu_nb = PREPROC_NARG (_mpdu)
+
+void
+rx_data_burst_test_mpdu (test_t t, test_pbproc_t *tp,
+ rx_data_burst_desc_t *burst, rx_data_burst_mpdu_t *m,
+ rx_data_burst_t *ctx)
+{
+ test_within (t);
+ dbg_assert (!burst->multi_net_bcast || burst->unassociated);
+ dbg_assert (!burst->multi_net_bcast || burst->bcast);
+ dbg_assert (!burst->authenticated || m->encrypted);
+ u32 date = 123456;
+ tp->config.tei = burst->rsof ? 1 : 5; /* TODO put in different place */
+ /* Prepare tone map. */
+ tonemap_t *tm = &tp->config.tonemask_info.tonemap_robo[PHY_MOD_ROBO];
+ uint dx = MAC_DX417_TCK;
+ if (m->tmi != PHY_MOD_ROBO || m->encrypted)
+ {
+ tm = utils_sta_prepare_default_tonemap (tp, false, ctx->stei, m->tmi,
+ m->tm_mod, 0, &dx);
+ ctx->sta_added = true;
+ }
+ uint rifs_tck = m->symb_nb == 0 || m->tmi < PHY_MOD_ROBO_NB
+ ? MAC_RIFS_DEFAULT_TCK : MAC_RIFS_SPC_ANY_TCK;
+ if (m->mpdu_cnt)
+ rifs_tck = MAC_BIFS_TCK;
+ /* Encrypted? */
+ utils_prepare_encryption (tp, m->encrypted, burst->authenticated,
+ ctx->stei, m->nek_switch);
+ /* Prepare FC. */
+ const uint fl_tck = MAC_PAYLOAD_TCK (m->symb_nb, dx)
+ + rifs_tck;
+ pbproc_fc_sof_t sof_fc = {
+ .dt_av = PBPROC_FC_DT_SOF,
+ .access = false,
+ .snid = tp->snid + (burst->multi_net_bcast ? 1 : 0),
+ .direction = 0,
+ .dtei = burst->wack ? tp->config.tei : 0xff,
+ .lid = burst->lid,
+ .eks = m->bad_nek ? 1 : (m->encrypted ? 0 : 0x3),
+ .pbsz = m->pb_size_136,
+ .num_sym = MIN (m->symb_nb, 3u),
+ .tmi_av = m->tmi,
+ .fl_av = MAC_TCK_TO_FL (fl_tck),
+ .mpdu_cnt = m->mpdu_cnt,
+ .burst_cnt = 0,
+ .bbf = m->bbf,
+ .mrdur_fl = m->mrdur_tck / MAC_TCK_PER_FL,
+ .mcf = burst->bcast,
+ .mnbf = burst->multi_net_bcast,
+ .fccs_av = 0,
+ };
+ pbproc_fc_rsof_t rsof_fc = {
+ .dt_av = PBPROC_FC_DT_RSOF,
+ .access = false,
+ .snid = tp->snid,
+ .dtei = ctx->stei,
+ .pbsz = m->pb_size_136,
+ .bdf = true,
+ .num_sym = MIN (m->symb_nb, 3u),
+ .lid = burst->compat ? MAC_LID_NONE : burst->lid,
+ .tmi_av = m->tmi,
+ .rsof_fl_av = MAC_TCK_TO_FL (fl_tck),
+ .sppb = burst->compat ? 0x50 : 0x2f,
+ .fccs_av = 0,
+ };
+ const u8 pending_seg_info = !burst->rsof ? 0 : (burst->compat ? 1 : 2);
+ const uint rx_fl_tck = MAC_FL_TO_TCK (MAC_TCK_TO_FL (fl_tck));
+ const uint pre_fc_fl_tck = MAC_PREAMBLE_TCK + MAC_FC_AV_TCK + rx_fl_tck;
+ /* Scenario. */
+ const phy_pb_size_t pb_size = m->pb_size_136 ? PHY_PB_SIZE_136 : PHY_PB_SIZE_520;
+ bool drop = m->symb_nb == 0
+ || (burst->bcast && burst->wack && m->bad_nek);
+ uint chandata_nb = burst->chandata_nb && !drop && !burst->unassociated
+ ? burst->chandata_nb : 0;
+ uint nb_pb_it = burst->wack
+ && m->pb_nb > PBPROC_SACKD_ANTICIP_PB_THRESHOLD
+ ? m->pb_nb - PBPROC_SACKD_ANTICIP_PB_NB : m->pb_nb;
+ bool pb_crc_error_first, pb_crc_error_last;
+ pb_crc_error_first = pb_crc_error_last = false;
+ mfs_tx_t *mfs = NULL;
+ if (m->crc_error)
+ {
+ /* Read CRC bitmap to compute CRC status returned by hardware. */
+ u32 *p = m->crc_error;
+ u32 b = 1;
+ uint i;
+ bool *pb_crc_error = &pb_crc_error_first;
+ /* If no intermediary interrupt, go direct to last one. */
+ if (nb_pb_it == m->pb_nb)
+ pb_crc_error = &pb_crc_error_last;
+ /* Read all bits. */
+ for (i = 0; i < m->pb_nb; i++)
+ {
+ /* Second part? */
+ if (i == nb_pb_it)
+ pb_crc_error = &pb_crc_error_last;
+ /* bad CRC? */
+ if (*p & b)
+ *pb_crc_error = true;
+ /* Next bit. */
+ b <<= 1;
+ if (!b)
+ {
+ p++;
+ b = 1;
+ }
+ }
+ }
+ bool send_sack = ((!m->bbf || burst->rsof_out_of_alloc) && !burst->rsof)
+ || burst->sof_out_of_alloc;
+ if (burst->rsof_out_of_alloc)
+ date = tp->pbproc->alloc.end_date
+ - (2 * pre_fc_fl_tck + m->mrdur_tck) / 2;
+ /* TODO: change this when MAC_CF_RSOF_SOF_IFS_TCK is removed. */
+ if (burst->sof_out_of_alloc)
+ date = tp->pbproc->alloc.end_date
+ - pre_fc_fl_tck - 2 * (MAC_PREAMBLE_TCK + MAC_FC_AV_TCK)
+ - MAC_RIFS_DEFAULT_TCK - MAC_US_TO_TCK (42);
+ /* Prepare reception. Only allow ordinary frames to be acked with RSOF. */
+ test_fail_unless (!burst->rsof || burst->wack);
+ bool valid = burst->rsof && burst->wack;
+ pbproc_prep_mpdu_t *prep = &tp->pbproc->prep_mpdu;
+ prep->valid = valid;
+ if (valid)
+ {
+ prep->bbf = burst->rsof;
+ prep->dtei = 25;
+ prep->lid = burst->lid;
+ prep->eks = 0;
+ prep->tx_date = date;
+ prep->flp_tck = 0;
+ /* prepare false mpdu */
+ prep->main_commit_return_head = 0;
+ prep->main_commit_return_seg_nb = 0;
+ prep->burst_head_ssn = prep->burst_seg_nb =
+ prep->expired_segments_nb = 0;
+ prep->mpdu_count = 1;
+ prep->mpdu[0].pb_nb_total = 0;
+ bool added;
+ prep->main_mfs = mfs = mac_store_mfs_add_tx (tp->store, false, false,
+ MAC_LLID_MIN, ctx->stei, &added);
+ dbg_assert (added);
+ blk_addref (mfs);
+ test_fail_unless (prep->main_mfs);
+ ctx->sta_added = true;
+ /* Set fsm to wait for SACKD. */
+ tp->pbproc->fsm.current_state = PBPROC_FSM_STATE_TX_WAIT_SACKD;
+ }
+ scenario_entry_t entries_long[] = {
+ SCENARIO_ACTION (phy_rx_fc, .rx_date = date,
+ .prp_won = burst->prp_won,
+ .slot_count = 2,
+ .fc_av = burst->rsof
+ ? PARENT_OF (pbproc_fc_t, rsof, &rsof_fc)->words
+ : PARENT_OF (pbproc_fc_t, sof, &sof_fc)->words),
+ SCENARIO_EVENT_COND (ctx->first && burst->prp_won && !burst->rsof,
+ ca_backoff_deferred, .slot_count = 0),
+ SCENARIO_EVENT_COND (ctx->first && !burst->prp_won && !burst->rsof,
+ ca_backoff_cancel),
+ SCENARIO_EVENT (phy_tx_cancel),
+ SCENARIO_EVENT (ca_access_hold),
+ SCENARIO_EVENT_COND (m->tmi >= PHY_MOD_ROBO_NB, phy_set_tonemap),
+ SCENARIO_EVENT_COND (m->pb_nb, phy_rx_prepare, .nb_pb = m->pb_nb,
+ .mod = m->tmi < PHY_MOD_ROBO_NB ? m->tmi : PHY_MOD_TM,
+ .fecrate = tm->fecrate, .pb_size = pb_size,
+ .gil = tm->gil, .symbol_nb = m->real_symb_nb
+ ? m->real_symb_nb : m->symb_nb,
+ .tcc_halfit = tm->tcc_halfit),
+ SCENARIO_EVENT_COND (!m->pb_nb, phy_rx_prepare_short),
+ SCENARIO_EVENT_COND (m->pb_nb, phy_pbdma_start,
+ .bypass_aes = !m->encrypted || drop,
+ .nb_total = m->pb_nb,
+ .nb_pb_it = m->pb_nb == nb_pb_it && chandata_nb ? 0
+ : nb_pb_it, .chandata = chandata_nb ? true : false,
+ .now = true),
+ SCENARIO_EVENT_COND (m->mpdu_cnt == 0 && (!m->bbf || send_sack),
+ ca_access_vcs_restart,
+ .end_date = date + pre_fc_fl_tck
+ + ((burst->rsof || !burst->wack)
+ && !burst->sof_out_of_alloc
+ ? MAC_US_TO_TCK (60)
+ : MAC_PREAMBLE_TCK + MAC_FC_AV_TCK
+ + MAC_CIFS_TCK)),
+ SCENARIO_EVENT_COND (m->mpdu_cnt == 0 && m->bbf && !send_sack,
+ ca_access_reprogram,
+ .date = date + pre_fc_fl_tck + MAC_US_TO_TCK (100),
+ .duration_tck = m->mrdur_tck, .tei = 1),
+ SCENARIO_EVENT_COND (m->mpdu_cnt != 0, ca_access_vcs_restart_eifs,
+ .start_date = date + pre_fc_fl_tck),
+ SCENARIO_EVENT_COND (m->mpdu_cnt != 0, phy_rx_activate,
+ .now = false, .date = date + pre_fc_fl_tck
+ + PHY_RX_ACTIVATE_DELAY_AFTER_BURST_TCK,
+ .pre_detection = true),
+ SCENARIO_EVENT_COND (valid && m->pb_nb, ca_access_done),
+ SCENARIO_ACTION_COND (m->pb_nb != nb_pb_it, phy_pbdma, .pb_it = true,
+ .pb_crc_error = pb_crc_error_first,
+ .crc_bitmap = m->crc_error,
+ .crc_bitmap_bits = nb_pb_it),
+ SCENARIO_EVENT_COND (m->pb_nb != nb_pb_it, phy_pbdma_update,
+ .nb_pb_it = chandata_nb ? 0 : m->pb_nb),
+ SCENARIO_ACTION_COND (m->pb_nb, phy_pbdma, .pb_it = true, .end_rx_pb = true,
+ .pb_crc_error = pb_crc_error_last,
+ .crc_bitmap = m->crc_error,
+ .crc_bitmap_bits = m->pb_nb),
+ SCENARIO_EVENT_COND (burst->wack && m->mpdu_cnt == 0 && send_sack,
+ phy_tx_param_short,
+ .fc_mode = PHY_FC_MODE_AV_1),
+ SCENARIO_EVENT_COND (burst->wack && m->mpdu_cnt == 0 && send_sack,
+ phy_tx_frame,
+ .date = date + pre_fc_fl_tck,
+ .want_conf = false,
+ .stop_tx_on_prp_lost = true),
+ SCENARIO_EVENT_COND (valid && !m->pb_nb, ca_access_done),
+ SCENARIO_EVENT_COND (!drop, pbproc_rx_cb, .pb_nb = m->pb_nb,
+ .chandata_nb = chandata_nb,
+ .lid = burst->lid,
+ .fl_tck = rx_fl_tck,
+ .pending_seg_info = pending_seg_info,
+ .pb_size = pb_size,
+ .mpdu_cnt = m->mpdu_cnt,
+ .mfs_cmd_data = !burst->bcast ? MFS_FSM_CMD_INIT
+ : MFS_FSM_CMD_NOP,
+ .mfs_cmd_mme = MFS_FSM_CMD_NOP),
+ SCENARIO_END
+ };
+ /*
+ scenario_entry_t entries_short[] = {
+ SCENARIO_ACTION (phy_rx_fc, .rx_date = date,
+ .prp_won = burst->prp_won,
+ .slot_count = 2,
+ .fc_av = PARENT_OF (pbproc_fc_t, sof,
+ &sof_fc)->words),
+ SCENARIO_EVENT_COND (ctx->first && burst->prp_won,
+ ca_backoff_deferred, .slot_count = 0),
+ SCENARIO_EVENT_COND (ctx->first && !burst->prp_won,
+ ca_backoff_cancel),
+ SCENARIO_EVENT (phy_tx_cancel),
+ SCENARIO_EVENT (ca_access_hold),
+ SCENARIO_EVENT (phy_rx_prepare_short),
+ SCENARIO_EVENT_COND (burst->wack && m->mpdu_cnt == 0,
+ phy_tx_param_short,
+ .fc_mode = PHY_FC_MODE_AV_1),
+ SCENARIO_EVENT_COND (burst->wack && m->mpdu_cnt == 0,
+ phy_tx_frame,
+ .date = date + pre_fc_fl_tck,
+ .want_conf = false,
+ .stop_tx_on_prp_lost = true),
+ SCENARIO_EVENT_COND (m->mpdu_cnt == 0, ca_access_vcs_restart,
+ .end_date = date + pre_fc_fl_tck
+ + MAC_PREAMBLE_TCK + MAC_FC_AV_TCK
+ + MAC_CIFS_TCK),
+ SCENARIO_EVENT_COND (m->mpdu_cnt != 0, ca_access_vcs_restart_eifs,
+ .start_date = date + pre_fc_fl_tck),
+ SCENARIO_EVENT_COND (m->mpdu_cnt != 0, phy_rx_activate,
+ .now = false, .date = date + pre_fc_fl_tck
+ + PHY_RX_ACTIVATE_DELAY_AFTER_BURST_TCK,
+ .pre_detection = true),
+ SCENARIO_END
+ };
+ */
+ scenario_globals_t globals = {
+ .tp = tp,
+ };
+ /* Run scenario. */
+ scenario_run (t, entries_long, &globals);
+ /* Check pool. */
+ test_fail_unless (tp->pbproc->rx_pool_size == ctx->pool_size
+ - (!drop ? 1 + m->pb_nb + chandata_nb : 0));
+ ctx->pool_size = tp->pbproc->rx_pool_size;
+ /* Build SACK to check. */
+ if (burst->wack)
+ {
+ dbg_assert (m->mpdu_cnt < COUNT (ctx->sackt));
+ if (m->symb_nb == 0)
+ {
+ ctx->sackt[m->mpdu_cnt] = PBPROC_FC_SACKT_UNIFORM;
+ uint sacki_uniform = PBPROC_FC_SACKI_UNIFORM_ALL_OK; /* EoC */
+ pbproc_sacki_enc_copy (&ctx->sacki_enc, &sacki_uniform,
+ PBPROC_FC_SACKI_UNIFORM_SIZE);
+ }
+ else if (!pb_crc_error_first && !pb_crc_error_last)
+ {
+ ctx->sackt[m->mpdu_cnt] = PBPROC_FC_SACKT_UNIFORM;
+ uint sacki_uniform = PBPROC_FC_SACKI_UNIFORM_ALL_OK;
+ pbproc_sacki_enc_copy (&ctx->sacki_enc, &sacki_uniform,
+ PBPROC_FC_SACKI_UNIFORM_SIZE);
+ }
+ else
+ {
+ ctx->sackt[m->mpdu_cnt] = PBPROC_FC_SACKT_MIXED;
+ /* Do not check SACKI, it was checked in its own test. */
+ uint sacki = 0xdead;
+ pbproc_sacki_enc_copy (&ctx->sacki_enc, &sacki, 16);
+ }
+ }
+ /* Check SACK. */
+ if (burst->wack && m->mpdu_cnt == 0 && send_sack)
+ {
+ pbproc_fc_sack_t sack = PARENT_OF (pbproc_fc_t, words,
+ tp->pbproc->phy->tx_fc)->sack;
+ test_fail_unless (sack.dt_av == PBPROC_FC_DT_SACK);
+ test_fail_unless (sack.access == false);
+ test_fail_unless (sack.snid == tp->snid);
+ test_fail_unless (sack.dtei == ctx->stei);
+ test_fail_unless (sack.cfs == true);
+ test_fail_unless (sack.bdf == false);
+ test_fail_unless (sack.svn == 0);
+ test_fail_unless (sack.rrtf == 0);
+ test_fail_unless (sack.mfs_rsp_data == MFS_FSM_RSP_ACK);
+ test_fail_unless (sack.mfs_rsp_mgmt == MFS_FSM_RSP_ACK);
+ uint sackt[COUNT (ctx->sackt)] = {
+ sack.sackt0, sack.sackt1, sack.sackt2, sack.sackt3
+ };
+ bool mixed = false;
+ uint i;
+ for (i = 0; i < COUNT (ctx->sackt); i++)
+ {
+ if (ctx->sackt[i] == PBPROC_FC_SACKT_MIXED)
+ {
+ test_fail_unless (
+ sackt[i] == PBPROC_FC_SACKT_MIXED
+ || sackt[i] == PBPROC_FC_SACKT_MIXED_COMPRESSED);
+ mixed = true;
+ }
+ else
+ test_fail_unless (sackt[i] == ctx->sackt[i]);
+ }
+ if (!mixed)
+ {
+ test_fail_unless (sack.sacki[0] == ctx->sacki_enc.si[0]);
+ test_fail_unless (sack.sacki[1] == ctx->sacki_enc.si[1]);
+ if (MAC_LID_IS_PLID (burst->lid))
+ test_fail_unless ((sack.sacki_last & 0xf)
+ == ctx->sacki_enc.si[2]);
+ else
+ test_fail_unless (sack.sacki_last == ctx->sacki_enc.si[2]);
+ }
+ if (MAC_LID_IS_PLID (burst->lid))
+ test_fail_unless (sack.sacki_last >> 4
+ == ctx->window_size_encoded);
+ }
+ /* Check SACK. */
+ if (burst->wack && m->mpdu_cnt == 0 && (m->bbf && !send_sack))
+ {
+ pbproc_sackd_t *sackd = &tp->pbproc->recv_mpdu.sackd;
+ test_fail_if (MAC_LID_IS_PLID (sackd->lid));
+ test_fail_unless (sackd->tei == MAC_TEI_CCO_DEF);
+ test_fail_unless (sackd->sacki_enc.sil + sackd->sacki_enc.sis
+ == PBPROC_FC_SACK_SACKI_BITS);
+ test_fail_unless (tp->pbproc->recv_mpdu.rx_params.bbf);
+ test_fail_unless (tp->pbproc->recv_mpdu.rx_params.mrdur_tck
+ == m->mrdur_tck);
+ }
+ /* Prepared mpdu should be released.*/
+ if (burst->rsof)
+ {
+ test_fail_unless (prep->valid == false);
+ }
+ /* Release allocated mfs for false prepared mpdu */
+ if (mfs)
+ {
+ mac_store_mfs_remove (tp->store, PARENT_OF (mfs_t, tx, mfs));
+ blk_release (mfs);
+ }
+ ctx->first = false;
+}
+
+void
+rx_data_burst_test_f (test_t t, test_pbproc_t *tp,
+ rx_data_burst_desc_t *burst)
+{
+ test_within (t);
+ uint i, mpdu_i;
+ rx_data_burst_t ctx;
+ /* 1 default CCO, even in not assoc state stei = 1 */
+ ctx.stei = burst->rsof ? 25 : 1;
+ ctx.lid = 1;
+ ctx.sta_added = false;
+ ctx.sackt[0] = PBPROC_FC_SACKT_NOT_RECEIVED;
+ ctx.sackt[1] = PBPROC_FC_SACKT_NOT_RECEIVED;
+ ctx.sackt[2] = PBPROC_FC_SACKT_NOT_RECEIVED;
+ ctx.sackt[3] = PBPROC_FC_SACKT_NOT_RECEIVED;
+ ctx.first = true;
+ pbproc_sacki_enc_init (&ctx.sacki_enc, PBPROC_FC_SACK_SACKI_BITS - 4,
+ true);
+ /* Prepare channel data configuration. */
+ u32 chandata_conf[burst->chandata_nb];
+ if (burst->chandata_nb)
+ {
+ for (i = 0; i < burst->chandata_nb; i++)
+ chandata_conf[i] = i;
+ pbproc_set_chandata_conf (tp->pbproc,
+ (phy_chandata_conf_t *) chandata_conf,
+ burst->chandata_nb, true);
+ }
+ /* Allocate PB pool. */
+ blk_t *first, *last;
+ ctx.pool_size = burst->mpdu_nb + burst->pool_pb_nb;
+ first = blk_alloc_desc_range (ctx.pool_size, &last);
+ pbproc_rx_segment_refill (tp->pbproc, PARENT_OF (pb_t, blk, first),
+ PARENT_OF (pb_t, blk, last), ctx.pool_size);
+ /* Create an MFS if window_size is not default. */
+ mfs_rx_t *mfs = NULL;
+ if (burst->window_size_encoded)
+ {
+ bool added;
+ mfs = mac_store_mfs_add_rx (tp->store, burst->bcast, false,
+ burst->lid, ctx.stei, &added);
+ dbg_assert (added);
+ mfs->window_size_encoded = burst->window_size_encoded;
+ mfs->window_size = mfs_window_size[burst->window_size_encoded];
+ ctx.window_size_encoded = mfs->window_size_encoded;
+ }
+ else
+ ctx.window_size_encoded = MFS_RX_WINDOW_SIZE_DATA_DEFAULT_ENCODED;
+ /* Reset stats. */
+ test_pbproc_check_stats_reset (tp);
+ uint bad_symb_nb = 0, null_symb_nb = 0, empty_nb = 0;
+ /* Receive every MPDU. */
+ test_pbproc_alloc (tp, false, 0);
+ for (mpdu_i = 0; mpdu_i < burst->mpdu_nb; mpdu_i++)
+ {
+ rx_data_burst_mpdu_t *m = &burst->mpdu[mpdu_i];
+ /* Run scenario. */
+ rx_data_burst_test_mpdu (t, tp, burst, m, &ctx);
+ if (m->real_symb_nb)
+ bad_symb_nb++;
+ if (m->symb_nb > 0 && m->pb_nb == 0)
+ null_symb_nb++;
+ if (m->symb_nb == 0 && m->pb_nb == 0)
+ empty_nb++;
+ }
+ /* Check stats. */
+ test_pbproc_check_stats (
+ t, tp,
+ .prp_lost = burst->rsof ? 0 : burst->prp_won ? 0 : 1,
+ .cw_lost = burst->rsof ? 0 : burst->prp_won ? 1 : 0,
+ .rx_handle_fc = burst->mpdu_nb,
+ .rx_data = burst->mpdu_nb,
+ .rx_data_wack = burst->wack ? burst->mpdu_nb - null_symb_nb : 0,
+ .rx_data_woack = !burst->wack ? burst->mpdu_nb - null_symb_nb : 0,
+ .rx_data_error = null_symb_nb,
+ .rx_data_empty = empty_nb,
+ .rx_data_bad_symb_nb = bad_symb_nb,
+ .rx_rsof_out_of_alloc = burst->rsof_out_of_alloc ? 1 : 0,
+ .tx_data_wack_ack = burst->rsof ? 1 : 0);
+ /* Check return to IDLE state. */
+ test_fail_unless (tp->pbproc->fsm.current_state == PBPROC_FSM_STATE_IDLE);
+ /* Cleanup. */
+ if (tp->pbproc->rx_pool_size)
+ {
+ blk_release_desc_range (&tp->pbproc->rx_pool_head->blk,
+ &tp->pbproc->rx_pool_tail->blk);
+ slist_init (tp->pbproc->rx_pool_, paste_size);
+ }
+ if (mfs)
+ {
+ mac_store_mfs_remove (tp->store, PARENT_OF (mfs_t, rx, mfs));
+ blk_release (mfs);
+ }
+ if (ctx.sta_added)
+ dbg_check (mac_store_sta_remove (tp->store, ctx.stei));
+ tp->config.authenticated = false;
+ if (burst->chandata_nb)
+ pbproc_set_chandata_conf (tp->pbproc, NULL, 0, false);
+}
+
+void
+rx_beacon_test (test_t t, test_pbproc_t *tp, u32 date, uint symb_nb)
+{
+ test_within (t);
+ pbproc_fc_beacon_t beacon_fc = {
+ .dt_av = PBPROC_FC_DT_BEACON,
+ .access = false,
+ .snid = tp->snid,
+ .bts_lsb24 = 0x345678,
+ .bts_msb8 = 0x12,
+ .bto0 = 0x0123,
+ .bto1_lsb8 = 0x34,
+ .bto1_msb8 = 0x12,
+ .bto2 = 0x2345,
+ .bto3_lsb8 = 0x56,
+ .bto3_msb8 = 0x34,
+ .fccs_av = 0,
+ };
+ const uint pre_fc_fl_tck = MAC_PREAMBLE_HYBRID_TCK + MAC_FC_10_TCK
+ + MAC_FC_AV_TCK + MAC_PAYLOAD_TCK (symb_nb, MAC_DX567_TCK)
+ + MAC_B2BIFS_TCK;
+ test_pbproc_check_stats_reset (tp);
+ test_pbproc_alloc (tp, true, 0);
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (phy_rx_fc, .rx_date = date, .rx_sysdate = date / 2,
+ .prp_won = false,
+ .fc_av = PARENT_OF (pbproc_fc_t, beacon,
+ &beacon_fc)->words),
+ SCENARIO_EVENT (ca_backoff_cancel),
+ SCENARIO_EVENT (phy_tx_cancel),
+ SCENARIO_EVENT (ca_access_hold),
+ SCENARIO_EVENT (phy_rx_prepare, .nb_pb = 1,
+ .mod = PHY_MOD_MINI_ROBO,
+ .fecrate = PHY_FEC_RATE_1_2,
+ .pb_size = PHY_PB_SIZE_136, .gil = PHY_GIL_567,
+ .symbol_nb = symb_nb, .tcc_halfit = 1),
+ SCENARIO_EVENT (phy_pbdma_start, .bypass_aes = true,
+ .nb_total = 1, .nb_pb_it = 1, .chandata = false,
+ .now = true),
+ SCENARIO_ACTION (phy_pbdma, .pb_it = true, .end_rx_pb = true),
+ SCENARIO_EVENT (ca_access_vcs_restart,
+ .end_date = date + pre_fc_fl_tck),
+ SCENARIO_EVENT (pbproc_rx_beacon_cb, .duration_tck = 0),
+ SCENARIO_END
+ };
+ scenario_globals_t globals = {
+ .tp = tp,
+ };
+ blk_t *pb;
+ pb = blk_alloc_desc ();
+ uint old_pool_size = tp->pbproc->rx_pool_size;
+ pbproc_rx_segment_refill (tp->pbproc, PB_FROM_BLK (pb), PB_FROM_BLK (pb),
+ 1);
+ scenario_run (t, entries, &globals);
+ test_pbproc_check_stats (t, tp,
+ .prp_lost = 1,
+ .rx_handle_fc = 1,
+ .rx_beacon = 1);
+ test_fail_unless (tp->pbproc->rx_pool_size == old_pool_size);
+ test_fail_unless (old_pool_size != 0 || tp->pbproc->rx_pool_head == NULL);
+ test_fail_unless (tp->pbproc->fsm.current_state == PBPROC_FSM_STATE_IDLE);
+}
+
+void
+rx_data_basic_test_case (test_t t)
+{
+ test_pbproc_t tp;
+ test_case_begin (t, "basic");
+ test_pbproc_init (&tp);
+ test_begin (t, "robo unicast reverse")
+ {
+ rx_data_burst_test (
+ t, &tp, .prp_won = false, .pool_pb_nb = 5, .wack = true,
+ .lid = 4,
+ MPDU ((.symb_nb = 95, .pb_nb = 5, .tmi = PHY_MOD_ROBO,
+ .bbf = true,
+ .mrdur_tck = MAC_FL_TO_TCK (MAC_TCK_TO_FL (50000)))));
+ } test_end;
+ test_begin (t, "robo unicast encrypted rsof")
+ {
+ rx_data_burst_test (
+ t, &tp, .prp_won = false, .pool_pb_nb = 5, .wack = true,
+ .rsof = true,
+ MPDU ((.symb_nb = 95, .pb_nb = 5, .tmi = PHY_MOD_ROBO,
+ .encrypted = true, .nek_switch = 0)));
+ } test_end;
+ test_begin (t, "robo unicast reverse, RSOF out of alloc")
+ {
+ rx_data_burst_test (
+ t, &tp, .prp_won = false, .pool_pb_nb = 5, .wack = true,
+ .lid = 4, .rsof_out_of_alloc = true,
+ MPDU ((.symb_nb = 95, .pb_nb = 5, .tmi = PHY_MOD_ROBO,
+ .bbf = true,
+ .mrdur_tck = MAC_FL_TO_TCK (MAC_TCK_TO_FL (50000)))));
+ } test_end;
+ test_begin (t, "robo unicast encrypted rsof, SOF out of alloc")
+ {
+ rx_data_burst_test (
+ t, &tp, .prp_won = false, .pool_pb_nb = 5, .wack = true,
+ .rsof = true, .sof_out_of_alloc = true,
+ MPDU ((.symb_nb = 95, .pb_nb = 5, .tmi = PHY_MOD_ROBO,
+ .encrypted = true, .nek_switch = 0)));
+ } test_end;
+ test_begin (t, "robo unicast encrypted rsof compat")
+ {
+ rx_data_burst_test (
+ t, &tp, .prp_won = false, .pool_pb_nb = 5, .wack = true,
+ .rsof = true, .compat = true, .lid = MAC_LLID_MIN,
+ MPDU ((.symb_nb = 95, .pb_nb = 5, .tmi = PHY_MOD_ROBO,
+ .encrypted = true, .nek_switch = 0)));
+ } test_end;
+ test_begin (t, "robo unicast")
+ {
+ rx_data_burst_test (
+ t, &tp, .prp_won = false, .pool_pb_nb = 5, .wack = true,
+ MPDU ((.symb_nb = 95, .pb_nb = 5, .tmi = PHY_MOD_ROBO)));
+ rx_data_burst_test (
+ t, &tp, .prp_won = true, .pool_pb_nb = 7, .wack = true,
+ MPDU ((.symb_nb = 95, .pb_nb = 5, .tmi = PHY_MOD_ROBO)));
+ } test_end;
+ test_begin (t, "robo unicast no seg")
+ {
+ rx_data_burst_test (
+ t, &tp, .prp_won = false, .pool_pb_nb = 5, .wack = true,
+ MPDU ((.symb_nb = 0, .pb_nb = 0, .tmi = PHY_MOD_ROBO)));
+ } test_end;
+ test_begin (t, "robo window size")
+ {
+ rx_data_burst_test (
+ t, &tp, .prp_won = false, .pool_pb_nb = 5, .wack = true,
+ .lid = 1,
+ MPDU ((.symb_nb = 95, .pb_nb = 5, .tmi = PHY_MOD_ROBO)));
+ rx_data_burst_test (
+ t, &tp, .prp_won = false, .pool_pb_nb = 5, .wack = true,
+ .lid = 5,
+ MPDU ((.symb_nb = 95, .pb_nb = 5, .tmi = PHY_MOD_ROBO)));
+ rx_data_burst_test (
+ t, &tp, .prp_won = false, .pool_pb_nb = 5, .wack = true,
+ .lid = 1, .window_size_encoded = MFS_WINDOW_SIZE_160,
+ MPDU ((.symb_nb = 95, .pb_nb = 5, .tmi = PHY_MOD_ROBO)));
+ rx_data_burst_test (
+ t, &tp, .prp_won = false, .pool_pb_nb = 5, .wack = true,
+ .lid = 5, .window_size_encoded = MFS_WINDOW_SIZE_160,
+ MPDU ((.symb_nb = 95, .pb_nb = 5, .tmi = PHY_MOD_ROBO)));
+ } test_end;
+ test_begin (t, "robo unicast chandata")
+ {
+ rx_data_burst_test (
+ t, &tp, .prp_won = false, .pool_pb_nb = 16, .wack = true,
+ .chandata_nb = 11,
+ MPDU ((.symb_nb = 95, .pb_nb = 5, .tmi = PHY_MOD_ROBO)));
+ rx_data_burst_test (
+ t, &tp, .prp_won = true, .pool_pb_nb = 18, .wack = true,
+ .chandata_nb = 11,
+ MPDU ((.symb_nb = 95, .pb_nb = 5, .tmi = PHY_MOD_ROBO)));
+ } test_end;
+ test_begin (t, "robo multicast")
+ {
+ rx_data_burst_test (
+ t, &tp, .pool_pb_nb = 5, .bcast = true,
+ MPDU ((.symb_nb = 95, .pb_nb = 5, .tmi = PHY_MOD_ROBO)));
+ } test_end;
+ test_begin (t, "robo multicast partial ack")
+ {
+ rx_data_burst_test (
+ t, &tp, .pool_pb_nb = 5, .wack = true, .bcast = true,
+ MPDU ((.symb_nb = 95, .pb_nb = 5, .tmi = PHY_MOD_ROBO)));
+ } test_end;
+ test_begin (t, "robo unicast unassociated")
+ {
+ rx_data_burst_test (
+ t, &tp, .pool_pb_nb = 5, .wack = true, .unassociated = true,
+ MPDU ((.symb_nb = 95, .pb_nb = 5, .tmi = PHY_MOD_ROBO)));
+ } test_end;
+ /* No chandata in unassoc state in EoC
+ test_begin (t, "robo unicast unassociated chandata")
+ {
+ rx_data_burst_test (
+ t, &tp, .pool_pb_nb = 16, .wack = true, .unassociated = true,
+ .chandata_nb = 11,
+ MPDU ((.symb_nb = 95, .pb_nb = 5, .tmi = PHY_MOD_ROBO)));
+ } test_end;
+ */
+ test_begin (t, "robo multicast unassociated")
+ {
+ rx_data_burst_test (
+ t, &tp, .pool_pb_nb = 5, .bcast = true, .unassociated = true,
+ MPDU ((.symb_nb = 95, .pb_nb = 5, .tmi = PHY_MOD_ROBO)));
+ } test_end;
+ test_begin (t, "robo multi network multicast")
+ {
+ rx_data_burst_test (
+ t, &tp, .pool_pb_nb = 5, .bcast = true, .unassociated = true,
+ .multi_net_bcast = true,
+ MPDU ((.symb_nb = 95, .pb_nb = 5, .tmi = PHY_MOD_ROBO)));
+ } test_end;
+ test_begin (t, "hs-robo unicast")
+ {
+ rx_data_burst_test (
+ t, &tp, .pool_pb_nb = 5, .wack = true,
+ MPDU ((.symb_nb = 50, .pb_nb = 5, .tmi = PHY_MOD_HS_ROBO)));
+ } test_end;
+ test_begin (t, "mini robo unicast PB136")
+ {
+ rx_data_burst_test (
+ t, &tp, .pool_pb_nb = 1, .wack = true,
+ MPDU ((.symb_nb = 6, .pb_nb = 1, .pb_size_136 = true,
+ .tmi = PHY_MOD_MINI_ROBO)));
+ } test_end;
+ test_begin (t, "tm unicast")
+ {
+ rx_data_burst_test (
+ t, &tp, .pool_pb_nb = 6, .wack = true,
+ MPDU ((.symb_nb = 4, .pb_nb = 6, .tmi = 5, .tm_mod = 10)));
+ rx_data_burst_test (
+ t, &tp, .pool_pb_nb = 1, .wack = true,
+ MPDU ((.symb_nb = 1, .pb_nb = 1, .tmi = 5, .tm_mod = 10)));
+ rx_data_burst_test (
+ t, &tp, .pool_pb_nb = 2, .wack = true,
+ MPDU ((.symb_nb = 2, .pb_nb = 2, .tmi = 5, .tm_mod = 10)));
+ } test_end;
+ test_begin (t, "tm unicast no seg")
+ {
+ rx_data_burst_test (
+ t, &tp, .pool_pb_nb = 6, .wack = true,
+ MPDU ((.symb_nb = 0, .pb_nb = 0, .tmi = 5, .tm_mod = 10)));
+ } test_end;
+ test_begin (t, "tm unicast PB136")
+ {
+ rx_data_burst_test (
+ t, &tp, .pool_pb_nb = 1, .wack = true,
+ MPDU ((.symb_nb = 2, .pb_nb = 1, .pb_size_136 = true,
+ .tmi = 5, .tm_mod = 1)));
+ rx_data_burst_test (
+ t, &tp, .pool_pb_nb = 1, .wack = true,
+ MPDU ((.symb_nb = 1, .pb_nb = 1, .pb_size_136 = true,
+ .tmi = 5, .tm_mod = 10)));
+ } test_end;
+ test_begin (t, "tm unicast large")
+ {
+ rx_data_burst_test (
+ t, &tp, .pool_pb_nb = 41, .wack = true,
+ MPDU ((.symb_nb = 25, .pb_nb = 41, .tmi = 5, .tm_mod = 10)));
+ } test_end;
+ test_begin (t, "tm unicast large chandata")
+ {
+ rx_data_burst_test (
+ t, &tp, .pool_pb_nb = 46, .wack = true, .chandata_nb = 5,
+ MPDU ((.symb_nb = 25, .pb_nb = 41, .tmi = 5, .tm_mod = 10)));
+ } test_end;
+ test_begin (t, "robo unicast encrypted sta unknown")
+ {
+ rx_data_burst_test (
+ t, &tp, .pool_pb_nb = 5, .wack = true,
+ MPDU ((.symb_nb = 95, .pb_nb = 5, .tmi = PHY_MOD_ROBO,
+ .encrypted = true, .nek_switch = 0)));
+ rx_data_burst_test (
+ t, &tp, .pool_pb_nb = 5, .wack = true,
+ MPDU ((.symb_nb = 95, .pb_nb = 5, .tmi = PHY_MOD_ROBO,
+ .encrypted = true, .nek_switch = 0)));
+ } test_end;
+ test_begin (t, "robo unicast encrypted sta known")
+ {
+ rx_data_burst_test (
+ t, &tp, .pool_pb_nb = 5, .wack = true, .authenticated = true,
+ MPDU ((.symb_nb = 95, .pb_nb = 5, .tmi = PHY_MOD_ROBO,
+ .encrypted = true, .nek_switch = 0)));
+ rx_data_burst_test (
+ t, &tp, .pool_pb_nb = 5, .wack = true, .authenticated = true,
+ MPDU ((.symb_nb = 95, .pb_nb = 5, .tmi = PHY_MOD_ROBO,
+ .encrypted = true, .nek_switch = 0)));
+ } test_end;
+ test_begin (t, "robo unicast encrypted subavln")
+ {
+ rx_data_burst_test (
+ t, &tp, .pool_pb_nb = 5, .wack = true, .authenticated = true,
+ MPDU ((.symb_nb = 95, .pb_nb = 5, .tmi = PHY_MOD_ROBO,
+ .encrypted = true, .nek_switch = 0)));
+ } test_end;
+ test_begin (t, "robo unicast crc error none")
+ {
+ u32 crc_error[8] = { 0x00, };
+ rx_data_burst_test (
+ t, &tp, .pool_pb_nb = 5, .wack = true,
+ MPDU ((.symb_nb = 95, .pb_nb = 5, .tmi = PHY_MOD_ROBO,
+ .crc_error = crc_error)));
+ } test_end;
+ test_begin (t, "robo unicast crc error one")
+ {
+ u32 crc_error[8] = { 0x01, };
+ rx_data_burst_test (
+ t, &tp, .pool_pb_nb = 5, .wack = true,
+ MPDU ((.symb_nb = 95, .pb_nb = 5, .tmi = PHY_MOD_ROBO,
+ .crc_error = crc_error)));
+ } test_end;
+ test_begin (t, "robo unicast crc error many")
+ {
+ u32 crc_error[8] = { 0x1d, };
+ rx_data_burst_test (
+ t, &tp, .pool_pb_nb = 5, .wack = true,
+ MPDU ((.symb_nb = 95, .pb_nb = 5, .tmi = PHY_MOD_ROBO,
+ .crc_error = crc_error)));
+ } test_end;
+ test_begin (t, "tm unicast large crc error few")
+ {
+ u32 crc_error[8] = { 0x10000001, 0x010 };
+ rx_data_burst_test (
+ t, &tp, .pool_pb_nb = 41, .wack = true,
+ MPDU ((.symb_nb = 25, .pb_nb = 41, .tmi = 5, .tm_mod = 10,
+ .crc_error = crc_error)));
+ } test_end;
+ test_begin (t, "tm unicast large crc error many")
+ {
+ u32 crc_error[8] = { 0xffefdff7, 0x1fb };
+ rx_data_burst_test (
+ t, &tp, .pool_pb_nb = 41, .wack = true,
+ MPDU ((.symb_nb = 25, .pb_nb = 41, .tmi = 5, .tm_mod = 10,
+ .crc_error = crc_error)));
+ } test_end;
+ test_begin (t, "robo multicast partial ack unauthenticated encrypted")
+ {
+ rx_data_burst_test (
+ t, &tp, .pool_pb_nb = 5, .wack = true, .bcast = true,
+ MPDU ((.symb_nb = 95, .pb_nb = 5, .tmi = PHY_MOD_ROBO,
+ .bad_nek = true)));
+ rx_data_burst_test (
+ t, &tp, .pool_pb_nb = 16, .wack = true, .bcast = true,
+ .chandata_nb = 11,
+ MPDU ((.symb_nb = 95, .pb_nb = 5, .tmi = PHY_MOD_ROBO,
+ .bad_nek = true)));
+ } test_end;
+ test_begin (t, "beacon")
+ {
+ rx_beacon_test (t, &tp, 123654, 6);
+ blk_t *pb;
+ pb = blk_alloc_desc ();
+ pbproc_rx_segment_refill (tp.pbproc, PB_FROM_BLK (pb),
+ PB_FROM_BLK (pb), 1);
+ rx_beacon_test (t, &tp, 123654, 6);
+ } test_end;
+ test_pbproc_uninit (&tp);
+}
+
+void
+rx_data_burst_test_case (test_t t)
+{
+ test_pbproc_t tp;
+ test_case_begin (t, "burst");
+ test_pbproc_init (&tp);
+ test_begin (t, "robo unicast burst 2")
+ {
+ rx_data_burst_test (
+ t, &tp, .pool_pb_nb = 10, .wack = true,
+ MPDU ((.symb_nb = 95, .pb_nb = 5, .tmi = PHY_MOD_ROBO,
+ .mpdu_cnt = 1),
+ (.symb_nb = 95, .pb_nb = 5, .tmi = PHY_MOD_ROBO,
+ .mpdu_cnt = 0)));
+ } test_end;
+ test_begin (t, "robo unicast burst 3")
+ {
+ rx_data_burst_test (
+ t, &tp, .pool_pb_nb = 15, .wack = true,
+ MPDU ((.symb_nb = 95, .pb_nb = 5, .tmi = PHY_MOD_ROBO,
+ .mpdu_cnt = 2),
+ (.symb_nb = 95, .pb_nb = 5, .tmi = PHY_MOD_ROBO,
+ .mpdu_cnt = 1),
+ (.symb_nb = 95, .pb_nb = 5, .tmi = PHY_MOD_ROBO,
+ .mpdu_cnt = 0)));
+ } test_end;
+ test_begin (t, "robo unicast burst 4")
+ {
+ rx_data_burst_test (
+ t, &tp, .pool_pb_nb = 20, .wack = true,
+ MPDU ((.symb_nb = 95, .pb_nb = 5, .tmi = PHY_MOD_ROBO,
+ .mpdu_cnt = 3),
+ (.symb_nb = 95, .pb_nb = 5, .tmi = PHY_MOD_ROBO,
+ .mpdu_cnt = 2),
+ (.symb_nb = 95, .pb_nb = 5, .tmi = PHY_MOD_ROBO,
+ .mpdu_cnt = 1),
+ (.symb_nb = 95, .pb_nb = 5, .tmi = PHY_MOD_ROBO,
+ .mpdu_cnt = 0)));
+ } test_end;
+ test_begin (t, "robo unicast chandata")
+ {
+ rx_data_burst_test (
+ t, &tp, .pool_pb_nb = 4 * 16, .wack = true, .chandata_nb = 11,
+ MPDU ((.symb_nb = 95, .pb_nb = 5, .tmi = PHY_MOD_ROBO,
+ .mpdu_cnt = 3),
+ (.symb_nb = 95, .pb_nb = 5, .tmi = PHY_MOD_ROBO,
+ .mpdu_cnt = 2),
+ (.symb_nb = 95, .pb_nb = 5, .tmi = PHY_MOD_ROBO,
+ .mpdu_cnt = 1),
+ (.symb_nb = 95, .pb_nb = 5, .tmi = PHY_MOD_ROBO,
+ .mpdu_cnt = 0)));
+ } test_end;
+ test_begin (t, "robo multicast")
+ {
+ rx_data_burst_test (
+ t, &tp, .pool_pb_nb = 4 * 5, .bcast = true,
+ MPDU ((.symb_nb = 95, .pb_nb = 5, .tmi = PHY_MOD_ROBO,
+ .mpdu_cnt = 3),
+ (.symb_nb = 95, .pb_nb = 5, .tmi = PHY_MOD_ROBO,
+ .mpdu_cnt = 2),
+ (.symb_nb = 95, .pb_nb = 5, .tmi = PHY_MOD_ROBO,
+ .mpdu_cnt = 1),
+ (.symb_nb = 95, .pb_nb = 5, .tmi = PHY_MOD_ROBO,
+ .mpdu_cnt = 0)));
+ } test_end;
+ test_begin (t, "tm unicast")
+ {
+ rx_data_burst_test (
+ t, &tp, .pool_pb_nb = 50, .wack = true,
+ MPDU ((.symb_nb = 4, .pb_nb = 6, .tmi = 5, .tm_mod = 10,
+ .mpdu_cnt = 3),
+ (.symb_nb = 1, .pb_nb = 1, .tmi = 5,
+ .mpdu_cnt = 2),
+ (.symb_nb = 2, .pb_nb = 2, .tmi = 5,
+ .mpdu_cnt = 1),
+ (.symb_nb = 25, .pb_nb = 41, .tmi = 5,
+ .mpdu_cnt = 0)));
+ } test_end;
+ test_begin (t, "robo/tm unicast crc error")
+ {
+ u32 crc_error[][8] = {
+ { 0x00, },
+ { 0x01, },
+ { 0x1d, },
+ { 0x10000001, 0x010 },
+ };
+ rx_data_burst_test (
+ t, &tp, .pool_pb_nb = 56, .wack = true,
+ MPDU ((.symb_nb = 95, .pb_nb = 5, .tmi = PHY_MOD_ROBO,
+ .mpdu_cnt = 3),
+ (.symb_nb = 95, .pb_nb = 5, .tmi = PHY_MOD_ROBO,
+ .mpdu_cnt = 2, .crc_error = crc_error[1]),
+ (.symb_nb = 95, .pb_nb = 5, .tmi = PHY_MOD_ROBO,
+ .mpdu_cnt = 1, .crc_error = crc_error[2]),
+ (.symb_nb = 25, .pb_nb = 41, .tmi = 5, .tm_mod = 10,
+ .mpdu_cnt = 0, .crc_error = crc_error[3])));
+ } test_end;
+ test_begin (t, "robo unicast hole")
+ {
+ rx_data_burst_test (
+ t, &tp, .pool_pb_nb = 20, .wack = true,
+ MPDU ((.symb_nb = 95, .pb_nb = 5, .tmi = PHY_MOD_ROBO,
+ .mpdu_cnt = 3),
+ (.symb_nb = 95, .pb_nb = 5, .tmi = PHY_MOD_ROBO,
+ .mpdu_cnt = 0)));
+ } test_end;
+ test_begin (t, "robo multicast partial ack unauthenticated encrypted"
+ " hole")
+ {
+ rx_data_burst_test (
+ t, &tp, .pool_pb_nb = 15, .wack = true, .bcast = true,
+ MPDU ((.symb_nb = 95, .pb_nb = 5, .tmi = PHY_MOD_ROBO,
+ .mpdu_cnt = 2),
+ (.symb_nb = 95, .pb_nb = 5, .tmi = PHY_MOD_ROBO,
+ .mpdu_cnt = 1, .bad_nek = true),
+ (.symb_nb = 95, .pb_nb = 5, .tmi = PHY_MOD_ROBO,
+ .mpdu_cnt = 0)));
+ } test_end;
+ test_begin (t, "burst interruption")
+ {
+ rx_data_burst_test (
+ t, &tp, .pool_pb_nb = 10, .wack = true,
+ MPDU ((.symb_nb = 95, .pb_nb = 5, .tmi = PHY_MOD_ROBO,
+ .mpdu_cnt = 1),
+ (.symb_nb = 0, .pb_nb = 0, .mpdu_cnt = 0)));
+ } test_end;
+ test_pbproc_uninit (&tp);
+}
+
+enum rx_data_nfu_t
+{
+ NFU_SACK,
+ NFU_SOF_ACCESS,
+ NFU_SOF_SNID,
+ NFU_SOF_TEI,
+ NFU_SOF_UNASSOC_SNID,
+ NFU_OUT_OF_ALLOC,
+ NFU_POOL_SHORTAGE,
+ NFU_RSOF_WRONG_STATION,
+};
+typedef enum rx_data_nfu_t rx_data_nfu_t;
+
+void
+rx_data_nfu_test (test_t t, test_pbproc_t *tp, u32 date, rx_data_nfu_t nfu)
+{
+ test_within (t);
+ u32 restart_date;
+ uint length_tck;
+ mfs_tx_t *mfs = NULL;
+ const uint lid = MAC_LLID_MIN;
+ pbproc_fc_t fc;
+ const uint sof_fl_tck = MAC_PAYLOAD_TCK (45, MAC_DX417_TCK)
+ + MAC_RIFS_DEFAULT_TCK;
+ pbproc_fc_sof_t sof_fc = {
+ .dt_av = PBPROC_FC_DT_SOF,
+ .access = nfu == NFU_SOF_ACCESS,
+ .snid = nfu != NFU_SOF_SNID ? tp->snid : tp->snid + 1,
+ .direction = 0,
+ .dtei = nfu != NFU_SOF_TEI ? tp->config.tei : tp->config.tei + 8,
+ .lid = 1,
+ .eks = 0x2,
+ .pbsz = false,
+ .num_sym = MIN (45u, 3u),
+ .tmi_av = PHY_MOD_ROBO,
+ .fl_av = MAC_TCK_TO_FL (sof_fl_tck),
+ .mpdu_cnt = 0,
+ .burst_cnt = 0,
+ .bbf = false,
+ .mrdur_fl = 0,
+ .mcf = false,
+ .mnbf = false,
+ .fccs_av = 0,
+ };
+ pbproc_fc_sack_t sack_fc = {
+ .dt_av = PBPROC_FC_DT_SACK,
+ .access = false,
+ .snid = tp->snid,
+ .dtei = 1/*tp->config.tei*/,
+ .cfs = false,
+ .bdf = true,
+ .svn = 0,
+ .rrtf = false,
+ .mfs_rsp_data = MFS_FSM_RSP_ACK,
+ .mfs_rsp_mgmt = MFS_FSM_RSP_ACK,
+ .sackt3 = 0,
+ .sackt2 = 0,
+ .sackt1 = 0,
+ .sackt0 = 0,
+ .sacki = { 0, 0 },
+ .sacki_last = 0,
+ .fccs_av = 0,
+ };
+ pbproc_fc_rsof_t rsof_fc = {
+ .dt_av = PBPROC_FC_DT_RSOF,
+ .access = false,
+ .snid = tp->snid,
+ .dtei = 24,
+ .pbsz = 0,
+ .bdf = true,
+ .num_sym = 3u,
+ .tmi_av = PHY_MOD_ROBO,
+ .rsof_fl_av = MAC_TCK_TO_FL (sof_fl_tck),
+ .fccs_av = 0,
+ };
+ fc.sof = sof_fc;
+ pbproc_prep_mpdu_t *prep = &tp->pbproc->prep_mpdu;
+ bool valid = (nfu == NFU_RSOF_WRONG_STATION);
+ prep->valid = valid;
+ if (valid)
+ {
+ fc.rsof = rsof_fc;
+ prep->valid = true;
+ prep->bbf = true;
+ prep->dtei = 25;
+ prep->lid = MAC_LLID_MIN;
+ prep->eks = 0;
+ prep->tx_date = date;
+ prep->flp_tck = 0;
+ /* prepare false mpdu */
+ prep->main_commit_return_head = 0;
+ prep->main_commit_return_seg_nb = 0;
+ prep->burst_head_ssn = prep->burst_seg_nb = 0;
+ prep->expired_segments_nb = 0;
+ prep->mpdu_count = 1;
+ prep->mpdu[0].pb_nb_total = 0;
+ bool added;
+ prep->main_mfs = mfs = mac_store_mfs_add_tx (tp->store, false, false,
+ lid, 25, &added);
+ dbg_assert (added);
+ test_fail_unless (mfs);
+ blk_addref (mfs);
+ tp->pbproc->fsm.current_state = PBPROC_FSM_STATE_TX_WAIT_SACKD;
+ }
+ if (nfu == NFU_SACK)
+ {
+ fc.sack = sack_fc;
+ length_tck = MAC_PREAMBLE_TCK + MAC_FC_AV_TCK + MAC_CIFS_TCK;
+ }
+ else if (nfu == NFU_RSOF_WRONG_STATION)
+ {
+ length_tck = MAC_PREAMBLE_TCK + MAC_FC_AV_TCK
+ + MAC_FL_TO_TCK (MAC_TCK_TO_FL (sof_fl_tck));
+ }
+ else
+ {
+ length_tck = MAC_PREAMBLE_TCK + MAC_FC_AV_TCK
+ + MAC_FL_TO_TCK (MAC_TCK_TO_FL (sof_fl_tck))
+ + MAC_PREAMBLE_TCK + MAC_FC_AV_TCK + MAC_CIFS_TCK;
+ }
+ if (nfu == NFU_OUT_OF_ALLOC)
+ {
+ date = TEST_PBPROC_ALLOC_END_DATE + MAC_TOLERANCE_TCK
+ - length_tck + MAC_CIFS_TCK + 1;
+ restart_date = date + length_tck - MAC_PREAMBLE_TCK - MAC_FC_AV_TCK -
+ MAC_CIFS_TCK;
+ length_tck = MAC_PREAMBLE_TCK + MAC_FC_AV_TCK + MAC_CIFS_TCK;
+ }
+ else
+ {
+ restart_date = date;
+ }
+ uint our_tei_saved = tp->config.tei;
+ if (nfu == NFU_SOF_UNASSOC_SNID)
+ tp->config.tei = 0;
+ test_pbproc_check_stats_reset (tp);
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (phy_rx_fc, .rx_date = date, .prp_won = false,
+ .slot_count = 2, .fc_av = fc.words),
+ SCENARIO_EVENT_COND (!valid, ca_backoff_cancel),
+ SCENARIO_EVENT (phy_tx_cancel),
+ SCENARIO_EVENT (ca_access_hold),
+ SCENARIO_EVENT (phy_rx_prepare_short),
+ SCENARIO_EVENT (ca_access_vcs_restart,
+ .end_date = restart_date + length_tck),
+ SCENARIO_EVENT_COND (valid, ca_access_done),
+ SCENARIO_END
+ };
+ scenario_entry_t rsof_entries[] = {
+ SCENARIO_ACTION (phy_rx_fc, .rx_date = date, .prp_won = false,
+ .slot_count = 2, .fc_av = fc.words),
+ SCENARIO_EVENT (phy_tx_cancel),
+ SCENARIO_EVENT (ca_access_hold),
+ SCENARIO_EVENT (phy_rx_prepare_short),
+ SCENARIO_EVENT (ca_access_vcs_restart_eifs,
+ .start_date = restart_date + length_tck),
+ SCENARIO_EVENT (phy_rx_activate, .now = false,
+ .date = restart_date + length_tck,
+ .pre_detection = true),
+ SCENARIO_EVENT (ca_access_done),
+ SCENARIO_END
+ };
+ scenario_globals_t globals = {
+ .tp = tp,
+ };
+ scenario_run (t, nfu == NFU_RSOF_WRONG_STATION ? rsof_entries : entries,
+ &globals);
+ test_pbproc_check_stats (
+ t, tp,
+ .prp_lost = valid ? 0 : 1,
+ .tx_data_wack_noack = valid ? 1 : 0,
+ .rx_handle_fc = 1,
+ .rx_nfu = nfu == NFU_OUT_OF_ALLOC ? 0 : 1,
+ .rx_data = nfu == NFU_OUT_OF_ALLOC ? 1 : 0,
+ .rx_data_error = nfu == NFU_OUT_OF_ALLOC ? 1 : 0,
+ .rx_out_of_alloc = nfu == NFU_OUT_OF_ALLOC ? 1 : 0);
+ test_fail_unless (tp->pbproc->fsm.current_state == PBPROC_FSM_STATE_IDLE);
+ tp->config.tei = our_tei_saved;
+ if (valid)
+ {
+ mac_store_mfs_remove (tp->store, PARENT_OF (mfs_t, tx, mfs));
+ blk_release (mfs);
+ dbg_check (mac_store_sta_remove (tp->store, 25));
+ }
+}
+
+/**
+ * Test beacon to be ignored.
+ * \param t test context
+ * \param tp test_pbproc context
+ * \param nfu NFU kind
+ */
+static void
+rx_beacon_nfu_test (test_t t, test_pbproc_t *tp, rx_data_nfu_t nfu)
+{
+ test_within (t);
+ /* Prepare FC. */
+ pbproc_fc_beacon_t beacon_fc = {
+ .dt_av = PBPROC_FC_DT_BEACON,
+ .access = false,
+ .snid = tp->snid,
+ .bts_lsb24 = 0x345678,
+ .bts_msb8 = 0x12,
+ .bto0 = 0x0123,
+ .bto1_lsb8 = 0x34,
+ .bto1_msb8 = 0x12,
+ .bto2 = 0x2345,
+ .bto3_lsb8 = 0x56,
+ .bto3_msb8 = 0x34,
+ .fccs_av = 0,
+ };
+ u32 date = 12345;
+ const uint pre_fc_fl_tck = MAC_PREAMBLE_HYBRID_TCK + MAC_FC_10_TCK
+ + MAC_FC_AV_TCK + MAC_PAYLOAD_TCK (6, MAC_DX567_TCK)
+ + MAC_B2BIFS_TCK;
+ if (nfu == NFU_OUT_OF_ALLOC)
+ /* Date to overshoot allocation. */
+ date = TEST_PBPROC_ALLOC_END_DATE + MAC_TOLERANCE_TCK
+ - pre_fc_fl_tck + MAC_B2BIFS_TCK + 1;
+ if (nfu != NFU_POOL_SHORTAGE)
+ tp->pbproc->rx_pool_size = 1;
+ /* Use another state to test return to IDLE. */
+ tp->pbproc->fsm.current_state = PBPROC_FSM_STATE_RX_BURST;
+ /* Reset stats. */
+ test_pbproc_check_stats_reset (tp);
+ /* Scenario. */
+ test_pbproc_alloc (tp, true, 0);
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (phy_rx_fc, .rx_date = date, .prp_won = false,
+ .fc_av = PARENT_OF (pbproc_fc_t, beacon,
+ &beacon_fc)->words),
+ SCENARIO_EVENT (phy_tx_cancel),
+ SCENARIO_EVENT (ca_access_hold),
+ SCENARIO_EVENT (phy_rx_prepare_short),
+ SCENARIO_EVENT (ca_access_vcs_restart,
+ .end_date = date + pre_fc_fl_tck),
+ SCENARIO_END
+ };
+ scenario_globals_t globals = {
+ .tp = tp,
+ };
+ scenario_run (t, entries, &globals);
+ /* Check stats. */
+ test_pbproc_check_stats (
+ t, tp,
+ .rx_handle_fc = 1,
+ .rx_beacon = 1,
+ .rx_out_of_alloc = nfu == NFU_OUT_OF_ALLOC ? 1 : 0,
+ .rx_pool_shortage = nfu == NFU_POOL_SHORTAGE ? 1 : 0);
+ /* Check PBProc state. */
+ test_fail_unless (tp->pbproc->fsm.current_state == PBPROC_FSM_STATE_IDLE);
+ test_fail_unless (tp->pbproc->rx_pool_size == (nfu != NFU_POOL_SHORTAGE
+ ? 1 : 0));
+ tp->pbproc->rx_pool_size = 0;
+}
+
+enum rx_data_sack_error_t
+{
+ SACK_ERROR_TM_TMI_UNAVAILABLE,
+ SACK_ERROR_TM_STA_UNAVAILABLE,
+ SACK_ERROR_TM_UNASSOCIATED,
+ SACK_ERROR_TM_BCAST,
+ SACK_ERROR_ENC_STA_NO_NEK,
+ SACK_ERROR_ENC_NO_EKS,
+ SACK_ERROR_ENC_UNASSOCIATED,
+ SACK_ERROR_POOL_SHORTAGE,
+ SACK_ERROR_EMPTY,
+ WOACK_ERROR_TM,
+ WOACK_ERROR_ENC,
+};
+typedef enum rx_data_sack_error_t rx_data_sack_error_t;
+
+void
+rx_data_sack_error_test (test_t t, test_pbproc_t *tp,
+ rx_data_sack_error_t sack_error, ...)
+{
+ uint date = 123456;
+ test_within (t);
+ uint sack_uniform[] = {
+ PBPROC_FC_SACKI_UNIFORM_TMI_RESTART,
+ PBPROC_FC_SACKI_UNIFORM_TMI_RESTART,
+ PBPROC_FC_SACKI_UNIFORM_TMI_DEFAULT_ROBO,
+ PBPROC_FC_SACKI_UNIFORM_TMI_DEFAULT_ROBO,
+ PBPROC_FC_SACKI_UNIFORM_NEK_ERROR,
+ PBPROC_FC_SACKI_UNIFORM_NEK_ERROR,
+ PBPROC_FC_SACKI_UNIFORM_NEK_ERROR,
+ PBPROC_FC_SACKI_UNIFORM_ALL_ERROR,
+ PBPROC_FC_SACKI_UNIFORM_ALL_ERROR,
+ };
+ uint symb_nb;
+ if (sack_error == SACK_ERROR_EMPTY)
+ {
+ va_list ap;
+ va_start (ap, sack_error);
+ symb_nb = va_arg (ap, uint);
+ va_end (ap);
+ }
+ else
+ symb_nb = 38;
+ const uint fl_tck = MAC_PAYLOAD_TCK (symb_nb, MAC_DX417_TCK)
+ + MAC_RIFS_DEFAULT_TCK;
+ bool sta = false;
+ if (sack_error == SACK_ERROR_TM_TMI_UNAVAILABLE
+ || sack_error == SACK_ERROR_ENC_STA_NO_NEK)
+ {
+ mac_store_sta_add (tp->store, 5);
+ sta = true;
+ }
+ uint tmi, eks;
+ if (sack_error == SACK_ERROR_TM_TMI_UNAVAILABLE
+ || sack_error == SACK_ERROR_TM_STA_UNAVAILABLE
+ || sack_error == SACK_ERROR_TM_UNASSOCIATED
+ || sack_error == SACK_ERROR_TM_BCAST
+ || sack_error == WOACK_ERROR_TM)
+ {
+ tmi = 5;
+ eks = 0xf;
+ }
+ else if (sack_error == SACK_ERROR_POOL_SHORTAGE)
+ {
+ tmi = PHY_MOD_ROBO;
+ eks = 0xf;
+ }
+ else
+ {
+ tmi = PHY_MOD_ROBO;
+ eks = 2;
+ }
+ bool wack = !(sack_error == WOACK_ERROR_TM
+ || sack_error == WOACK_ERROR_ENC);
+ bool unassociated = sack_error == SACK_ERROR_TM_UNASSOCIATED
+ || sack_error == SACK_ERROR_ENC_UNASSOCIATED;
+ tp->config.tei = (wack)?1:5;
+ pbproc_fc_sof_t fc = {
+ .dt_av = PBPROC_FC_DT_SOF,
+ .access = false,
+ .snid = tp->snid,
+ .direction = wack,
+ .dtei = wack ? (unassociated ? 0 : 5) : 0xff,
+ .lid = 1,
+ .eks = eks,
+ .pbsz = false,
+ .num_sym = MIN (symb_nb, 3u),
+ .tmi_av = tmi,
+ .fl_av = MAC_TCK_TO_FL (fl_tck),
+ .mpdu_cnt = 0,
+ .burst_cnt = 0,
+ .bbf = false,
+ .mrdur_fl = 0,
+ .mcf = !wack || sack_error == SACK_ERROR_TM_BCAST,
+ .mnbf = false,
+ .fccs_av = 0,
+ };
+ uint pre_fc_fl_tck = MAC_PREAMBLE_TCK + MAC_FC_AV_TCK
+ + MAC_FL_TO_TCK (MAC_TCK_TO_FL (fl_tck));
+ test_pbproc_check_stats_reset (tp);
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (phy_rx_fc, .rx_date = date, .prp_won = false,
+ .slot_count = 2,
+ .fc_av = PARENT_OF (pbproc_fc_t, sof, &fc)->words),
+ SCENARIO_EVENT (ca_backoff_cancel),
+ SCENARIO_EVENT (phy_tx_cancel),
+ SCENARIO_EVENT (ca_access_hold),
+ SCENARIO_EVENT (phy_rx_prepare_short),
+ SCENARIO_EVENT_COND (wack, phy_tx_param_short,
+ .fc_mode = PHY_FC_MODE_AV_1),
+ SCENARIO_EVENT_COND (wack, phy_tx_frame, .date = date + pre_fc_fl_tck,
+ .want_conf = false,
+ .stop_tx_on_prp_lost = true),
+ SCENARIO_EVENT (ca_access_vcs_restart,
+ .end_date = date + pre_fc_fl_tck + MAC_PREAMBLE_TCK
+ + MAC_FC_AV_TCK + MAC_CIFS_TCK),
+ SCENARIO_END
+ };
+ scenario_globals_t globals = {
+ .tp = tp,
+ };
+ scenario_run (t, entries, &globals);
+ /* Check stats. */
+ test_pbproc_check_stats (
+ t, tp,
+ .prp_lost = 1,
+ .rx_handle_fc = 1,
+ .rx_data = 1,
+ .rx_data_error = 1,
+ .rx_data_empty = sack_error == SACK_ERROR_EMPTY ? 1 : 0,
+ .rx_pool_shortage = sack_error == SACK_ERROR_POOL_SHORTAGE ? 1 : 0);
+ /* Check SACK. */
+ if (wack)
+ {
+ pbproc_fc_sack_t sack = PARENT_OF (pbproc_fc_t, words,
+ tp->pbproc->phy->tx_fc)->sack;
+ test_fail_unless (sack.dt_av == PBPROC_FC_DT_SACK);
+ test_fail_unless (sack.access == false);
+ test_fail_unless (sack.snid == tp->snid);
+ test_fail_unless (sack.dtei == (unassociated ? 0 : 5));
+ test_fail_unless (sack.cfs == tp->pbproc->access.cfp);
+ test_fail_unless (sack.bdf == false);
+ test_fail_unless (sack.svn == 0);
+ test_fail_unless (sack.rrtf == 0);
+ test_fail_unless (sack.mfs_rsp_data == MFS_FSM_RSP_ACK);
+ test_fail_unless (sack.mfs_rsp_mgmt == MFS_FSM_RSP_ACK);
+ test_fail_unless (sack.sackt3 == PBPROC_FC_SACKT_NOT_RECEIVED);
+ test_fail_unless (sack.sackt2 == PBPROC_FC_SACKT_NOT_RECEIVED);
+ test_fail_unless (sack.sackt1 == PBPROC_FC_SACKT_NOT_RECEIVED);
+ test_fail_unless (sack.sackt0 == PBPROC_FC_SACKT_UNIFORM);
+ test_fail_unless (sack.sacki[0] == sack_uniform[sack_error]);
+ test_fail_unless (sack.sacki[1] == 0);
+ test_fail_unless (sack.sacki_last
+ == MFS_RX_WINDOW_SIZE_DATA_DEFAULT_ENCODED << 4);
+ }
+ /* Cleanup. */
+ if (sta)
+ dbg_check (mac_store_sta_remove (tp->store, 5));
+ test_fail_unless (tp->pbproc->fsm.current_state == PBPROC_FSM_STATE_IDLE);
+}
+
+void
+rx_data_fc10 (test_t t, test_pbproc_t *tp, u32 fc10, bool crc_error,
+ uint length, bool hp10_detected, bool hp11_detected)
+{
+ test_within (t);
+ uint date = 12345678;
+ test_pbproc_check_stats_reset (tp);
+ bool hp10_was_detected = tp->pbproc->detect.hp10_detected;
+ bool hp11_was_detected = tp->pbproc->detect.hp11_detected;
+ tp->pbproc->detect.hp10_detect_date = 0x12345678;
+ tp->pbproc->detect.hp11_detect_date = 0x01234567;
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (phy_rx_fc, .rx_date = date, .prp_won = false,
+ .fc_av = NULL, .fc10 = fc10),
+ SCENARIO_EVENT (ca_backoff_cancel),
+ SCENARIO_EVENT (phy_tx_cancel),
+ SCENARIO_EVENT (ca_access_hold),
+ SCENARIO_EVENT (phy_rx_prepare_short),
+ SCENARIO_EVENT_COND (length, ca_access_vcs_restart,
+ .end_date = date + length
+ + MAC_HP10_PREAMBLE_DELTA_TCK),
+ SCENARIO_EVENT_COND (!length, ca_access_vcs_restart_eifs,
+ .start_date = date),
+ SCENARIO_EVENT_COND (!length, phy_rx_activate, .now = false,
+ .date = date + MAC_PREAMBLE_TCK + MAC_FC_AV_TCK
+ + PHY_RX_ACTIVATE_DELAY_AFTER_SHORT_TCK,
+ .pre_detection = true),
+ SCENARIO_END
+ };
+ scenario_globals_t globals = {
+ .tp = tp,
+ };
+ scenario_run (t, entries, &globals);
+ test_pbproc_check_stats (
+ t, tp,
+ .prp_lost = 1,
+ .rx_handle_fc = 1,
+ .rx_nfu = crc_error ? 0 : 1,
+ .rx_crc_error = crc_error ? 1 : 0,
+ );
+ test_fail_unless (!hp10_detected
+ || tp->pbproc->detect.hp10_detect_date == date);
+ test_fail_unless (tp->pbproc->detect.hp10_detected == (hp10_detected ||
+ hp10_was_detected));
+ test_fail_unless (!hp11_detected
+ || tp->pbproc->detect.hp11_detect_date == date);
+ test_fail_unless (tp->pbproc->detect.hp11_detected == (hp11_detected ||
+ hp11_was_detected));
+ tp->pbproc->detect.hp10_detected = false;
+ tp->pbproc->detect.hp11_detected = false;
+ test_fail_unless (tp->pbproc->fsm.current_state == PBPROC_FSM_STATE_IDLE);
+}
+
+void
+rx_data_errors_test_case (test_t t)
+{
+ test_pbproc_t tp;
+ test_case_begin (t, "errors");
+ test_pbproc_init (&tp);
+ tp.config.tei = 1; /* Test STA->CCO direction */
+ test_begin (t, "crc error")
+ {
+ uint date = 12345678;
+ test_pbproc_check_stats_reset (&tp);
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (phy_rx_fc, .rx_date = date,
+ .rx_sysdate = date * 21 / 20,
+ .prp_won = false, .fc_av = NULL),
+ SCENARIO_EVENT (ca_backoff_cancel),
+ SCENARIO_EVENT (phy_tx_cancel),
+ SCENARIO_EVENT (ca_access_hold),
+ SCENARIO_EVENT (phy_rx_prepare_short),
+ SCENARIO_EVENT (ca_access_vcs_restart, .
+ end_date = date + MAC_FL_TO_TCK (MAC_MAX_FL_MIN_FL)),
+ SCENARIO_EVENT (phy_rx_activate, .now = false,
+ .date = date + MAC_PREAMBLE_TCK + MAC_FC_AV_TCK
+ + PHY_RX_ACTIVATE_DELAY_AFTER_SHORT_TCK,
+ .pre_detection = true),
+ SCENARIO_END
+ };
+ scenario_globals_t globals = {
+ .tp = &tp,
+ };
+ scenario_run (t, entries, &globals);
+ test_pbproc_check_stats (
+ t, &tp,
+ .prp_lost = 1,
+ .rx_handle_fc = 1,
+ .rx_crc_error = 1,
+ );
+ test_fail_unless (tp.pbproc->fsm.current_state
+ == PBPROC_FSM_STATE_IDLE);
+ } test_end;
+ /* SOF with response: wait for EOF.
+ * SOF without response: wait for EOF unless hp1x is detected yet, in this
+ * case use frame length to resynchronise. */
+ /*
+ test_begin (t, "fc10 sof")
+ {
+ rx_data_fc10 (t, &tp, 0x0000a0ab, true, 0, false, false);
+ rx_data_fc10 (t, &tp, 0x0020a0ab, true, 0, false, false);
+ } test_end;
+ test_begin (t, "fc10 sof, hp1x detected")
+ {
+ tp.pbproc->detect.hp10_detected = true;
+ rx_data_fc10 (t, &tp, 0x0000a0ab, false, MAC_HP10_DELIMITER_TCK
+ + (20 + 5 * 20) * MAC_HP10_SYMBOL_TCK + MAC_HP10_EFG_TCK
+ + MAC_HP10_DELIMITER_TCK + MAC_HP10_CIFS_TCK, false,
+ false);
+ tp.pbproc->detect.hp10_detected = true;
+ rx_data_fc10 (t, &tp, 0x0020a0ab, true, 0, false, false);
+ tp.pbproc->detect.hp11_detected = true;
+ rx_data_fc10 (t, &tp, 0x0000a0ab, false, MAC_HP10_DELIMITER_TCK
+ + (20 + 5 * 20) * MAC_HP10_SYMBOL_TCK + MAC_HP10_EFG_TCK
+ + MAC_HP10_DELIMITER_TCK + MAC_HP10_CIFS_TCK, false,
+ false);
+ tp.pbproc->detect.hp11_detected = true;
+ rx_data_fc10 (t, &tp, 0x0020a0ab, true, 0, false, false);
+ } test_end;
+ */
+ /* EOF with response, detect and synchronise. */
+ /*
+ test_begin (t, "fc10 hp10 eof with response")
+ {
+ rx_data_fc10 (t, &tp, 0x006000ab, false, MAC_HP10_DELIMITER_TCK
+ + MAC_HP10_RIFS_TCK + MAC_HP10_DELIMITER_TCK
+ + MAC_HP10_CIFS_TCK, true, false);
+ } test_end;
+ test_begin (t, "fc10 hp11 eof with response")
+ {
+ rx_data_fc10 (t, &tp, 0x006001ab, false, MAC_HP10_DELIMITER_TCK
+ + MAC_HP10_RIFS_TCK + MAC_HP10_DELIMITER_TCK
+ + MAC_HP10_CIFS_TCK, false, true);
+ rx_data_fc10 (t, &tp, 0x006011ab, false, MAC_HP10_DELIMITER_TCK
+ + MAC_HP10_RIFS_TCK + MAC_HP10_DELIMITER_TCK
+ + MAC_HP10_CIFS_TCK, false, true);
+ } test_end;
+ */
+ /* EOF without response, detect and EIFS (too late to synchronise). */
+ /*
+ test_begin (t, "fc10 hp10 eof without response")
+ {
+ rx_data_fc10 (t, &tp, 0x004800ab, false, 0, true, false);
+ } test_end;
+ test_begin (t, "fc10 hp11 eof without response")
+ {
+ rx_data_fc10 (t, &tp, 0x005811ab, false, 0, false, true);
+ } test_end;
+ */
+ /* Other FC10. */
+ /*
+ test_begin (t, "fc10 none")
+ {
+ rx_data_fc10 (t, &tp, 0x004400ab, true, 0, false, false);
+ rx_data_fc10 (t, &tp, 0x004401ab, true, 0, false, false);
+ rx_data_fc10 (t, &tp, 0x002000ab, true, 0, false, false);
+ rx_data_fc10 (t, &tp, 0, true, 0, false, false);
+ } test_end;
+ */
+ test_begin (t, "unknown fc")
+ {
+ uint date = 654879;
+ pbproc_fc_generic_t fc = {
+ .dt_av = 0x7,
+ .access = false,
+ .snid = tp.snid,
+ };
+ test_pbproc_check_stats_reset (&tp);
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (phy_rx_fc, .rx_date = date,
+ .rx_sysdate = date * 21 / 20,
+ .prp_won = false,
+ .fc_av = PARENT_OF (pbproc_fc_t, generic,
+ &fc)->words),
+ SCENARIO_EVENT (ca_backoff_cancel),
+ SCENARIO_EVENT (phy_tx_cancel),
+ SCENARIO_EVENT (ca_access_hold),
+ SCENARIO_EVENT (phy_rx_prepare_short),
+ SCENARIO_EVENT (ca_access_vcs_restart, .
+ end_date = date + MAC_FL_TO_TCK (MAC_MAX_FL_MIN_FL)),
+ SCENARIO_EVENT (phy_rx_activate, .now = false,
+ .date = date + MAC_PREAMBLE_TCK + MAC_FC_AV_TCK
+ + PHY_RX_ACTIVATE_DELAY_AFTER_SHORT_TCK,
+ .pre_detection = true),
+ SCENARIO_END
+ };
+ scenario_globals_t globals = {
+ .tp = &tp,
+ };
+ scenario_run (t, entries, &globals);
+ test_pbproc_check_stats (
+ t, &tp,
+ .prp_lost = 1,
+ .rx_handle_fc = 1,
+ .rx_fc_unknown = 1,
+ );
+ test_fail_unless (tp.pbproc->fsm.current_state
+ == PBPROC_FSM_STATE_IDLE);
+ } test_end;
+ test_begin (t, "nfu sack")
+ {
+ rx_data_nfu_test (t, &tp, 123546, NFU_SACK);
+ } test_end;
+ test_begin (t, "nfu sof")
+ {
+ rx_data_nfu_test (t, &tp, 12354, NFU_SOF_ACCESS);
+ rx_data_nfu_test (t, &tp, 1235, NFU_SOF_SNID);
+ rx_data_nfu_test (t, &tp, 123, NFU_SOF_TEI);
+ } test_end;
+ test_begin (t, "nfu sof unassoc")
+ {
+ rx_data_nfu_test (t, &tp, 123, NFU_SOF_UNASSOC_SNID);
+ } test_end;
+ test_begin (t, "nfu out of alloc")
+ {
+ rx_data_nfu_test (t, &tp, 12354, NFU_OUT_OF_ALLOC);
+ } test_end;
+ test_begin (t, "nfu rsof wrong station")
+ {
+ rx_data_nfu_test (t, &tp, 12354, NFU_RSOF_WRONG_STATION);
+ } test_end;
+ test_begin (t, "sack error invalid tm")
+ {
+ rx_data_sack_error_test (t, &tp, SACK_ERROR_TM_TMI_UNAVAILABLE);
+ rx_data_sack_error_test (t, &tp, SACK_ERROR_TM_STA_UNAVAILABLE);
+ rx_data_sack_error_test (t, &tp, SACK_ERROR_TM_UNASSOCIATED);
+ rx_data_sack_error_test (t, &tp, SACK_ERROR_TM_BCAST);
+ } test_end;
+ test_begin (t, "sack error encryption")
+ {
+ rx_data_sack_error_test (t, &tp, SACK_ERROR_ENC_STA_NO_NEK);
+ rx_data_sack_error_test (t, &tp, SACK_ERROR_ENC_NO_EKS);
+ rx_data_sack_error_test (t, &tp, SACK_ERROR_ENC_UNASSOCIATED);
+ } test_end;
+ test_begin (t, "pool shortage")
+ {
+ rx_data_sack_error_test (t, &tp, SACK_ERROR_POOL_SHORTAGE);
+ } test_end;
+ test_begin (t, "woack error invalid tm")
+ {
+ rx_data_sack_error_test (t, &tp, WOACK_ERROR_TM);
+ } test_end;
+ test_begin (t, "woack error encryption")
+ {
+ rx_data_sack_error_test (t, &tp, WOACK_ERROR_ENC);
+ } test_end;
+ test_begin (t, "beacon nfu pool shortage")
+ {
+ rx_beacon_nfu_test (t, &tp, NFU_POOL_SHORTAGE);
+ } test_end;
+ test_pbproc_uninit (&tp);
+}
+
+void
+rx_data_fl_av_test_case (test_t t)
+{
+ test_pbproc_t tp;
+ test_case_begin (t, "fl_av");
+ test_pbproc_init (&tp);
+ test_begin (t, "robo classic")
+ {
+ rx_data_burst_test (
+ t, &tp, .prp_won = false, .pool_pb_nb = 5, .wack = true,
+ MPDU ((.symb_nb = 19, .pb_nb = 1, .tmi = PHY_MOD_ROBO)));
+ rx_data_burst_test (
+ t, &tp, .prp_won = false, .pool_pb_nb = 5, .wack = true,
+ MPDU ((.symb_nb = 38, .pb_nb = 2, .tmi = PHY_MOD_ROBO)));
+ rx_data_burst_test (
+ t, &tp, .prp_won = false, .pool_pb_nb = 5, .wack = true,
+ MPDU ((.symb_nb = 57, .pb_nb = 3, .tmi = PHY_MOD_ROBO)));
+ rx_data_burst_test (
+ t, &tp, .prp_won = false, .pool_pb_nb = 5, .wack = true,
+ MPDU ((.symb_nb = 76, .pb_nb = 4, .tmi = PHY_MOD_ROBO)));
+ rx_data_burst_test (
+ t, &tp, .prp_won = false, .pool_pb_nb = 5, .wack = true,
+ MPDU ((.symb_nb = 95, .pb_nb = 5, .tmi = PHY_MOD_ROBO)));
+ } test_end;
+ test_begin (t, "robo weird")
+ {
+ uint symb_nb;
+ for (symb_nb = 20; symb_nb < 110; symb_nb++)
+ {
+ if (symb_nb % 19 == 0)
+ continue;
+ rx_data_burst_test (
+ t, &tp, .prp_won = false, .pool_pb_nb = 5, .wack = true,
+ MPDU ((.symb_nb = symb_nb, .real_symb_nb = symb_nb / 19 * 19,
+ .pb_nb = symb_nb / 19, .tmi = PHY_MOD_ROBO)));
+ }
+ } test_end;
+ test_begin (t, "robo weird no seg")
+ {
+ uint symb_nb;
+ for (symb_nb = 1; symb_nb < 19; symb_nb++)
+ rx_data_sack_error_test (t, &tp, SACK_ERROR_EMPTY, symb_nb);
+ } test_end;
+ test_begin (t, "hs-robo classic")
+ {
+ rx_data_burst_test (
+ t, &tp, .pool_pb_nb = 5, .wack = true,
+ MPDU ((.symb_nb = 10, .pb_nb = 1, .tmi = PHY_MOD_HS_ROBO)));
+ rx_data_burst_test (
+ t, &tp, .pool_pb_nb = 5, .wack = true,
+ MPDU ((.symb_nb = 20, .pb_nb = 2, .tmi = PHY_MOD_HS_ROBO)));
+ rx_data_burst_test (
+ t, &tp, .pool_pb_nb = 5, .wack = true,
+ MPDU ((.symb_nb = 30, .pb_nb = 3, .tmi = PHY_MOD_HS_ROBO)));
+ rx_data_burst_test (
+ t, &tp, .pool_pb_nb = 5, .wack = true,
+ MPDU ((.symb_nb = 40, .pb_nb = 4, .tmi = PHY_MOD_HS_ROBO)));
+ rx_data_burst_test (
+ t, &tp, .pool_pb_nb = 5, .wack = true,
+ MPDU ((.symb_nb = 50, .pb_nb = 5, .tmi = PHY_MOD_HS_ROBO)));
+ } test_end;
+ test_begin (t, "hs-robo weird")
+ {
+ uint symb_nb;
+ for (symb_nb = 11; symb_nb < 59; symb_nb++)
+ {
+ if (symb_nb % 10 == 0)
+ continue;
+ rx_data_burst_test (
+ t, &tp, .prp_won = false, .pool_pb_nb = 5, .wack = true,
+ MPDU ((.symb_nb = symb_nb, .real_symb_nb = symb_nb / 10 * 10,
+ .pb_nb = symb_nb / 10, .tmi = PHY_MOD_HS_ROBO)));
+ }
+ } test_end;
+ test_begin (t, "tm classic")
+ {
+ rx_data_burst_test (
+ t, &tp, .pool_pb_nb = 5, .wack = true,
+ MPDU ((.symb_nb = 2, .pb_nb = 1, .tmi = 5, .tm_mod = 4)));
+ rx_data_burst_test (
+ t, &tp, .pool_pb_nb = 5, .wack = true,
+ MPDU ((.symb_nb = 3, .pb_nb = 2, .tmi = 5, .tm_mod = 4)));
+ rx_data_burst_test (
+ t, &tp, .pool_pb_nb = 5, .wack = true,
+ MPDU ((.symb_nb = 5, .pb_nb = 3, .tmi = 5, .tm_mod = 4)));
+ rx_data_burst_test (
+ t, &tp, .pool_pb_nb = 5, .wack = true,
+ MPDU ((.symb_nb = 6, .pb_nb = 4, .tmi = 5, .tm_mod = 4)));
+ rx_data_burst_test (
+ t, &tp, .pool_pb_nb = 5, .wack = true,
+ MPDU ((.symb_nb = 8, .pb_nb = 5, .tmi = 5, .tm_mod = 4)));
+ } test_end;
+ test_begin (t, "tm weird")
+ {
+ rx_data_burst_test (
+ t, &tp, .pool_pb_nb = 5, .wack = true,
+ MPDU ((.symb_nb = 4, .real_symb_nb = 3, .pb_nb = 2,
+ .tmi = 5, .tm_mod = 4)));
+ rx_data_burst_test (
+ t, &tp, .pool_pb_nb = 5, .wack = true,
+ MPDU ((.symb_nb = 7, .real_symb_nb = 6, .pb_nb = 4,
+ .tmi = 5, .tm_mod = 4)));
+ } test_end;
+ test_pbproc_uninit (&tp);
+}
+
+void
+rx_data_budget_test_case (test_t t)
+{
+ test_pbproc_t tp;
+ test_case_begin (t, "budget");
+ test_pbproc_init (&tp);
+ test_begin (t, "overflow")
+ {
+ int i;
+ /* Fill RX queue. */
+ for (i = 0; i < 3; i++)
+ {
+ pb_beacon_t *pbb = PARENT_OF (pb_beacon_t, blk,
+ blk_alloc_desc ());
+ slist_push_back (tp.pbproc->commit.rx_beacon_, pbb);
+ }
+ for (i = 0; i < 3; i++)
+ {
+ pbproc_rx_desc_t *rx = PARENT_OF (pbproc_rx_desc_t, blk,
+ blk_alloc_desc ());
+ rx->rx->pb_nb = 0;
+ rx->rx->pb_first = rx->rx->pb_last = NULL;
+ rx->rx->chandata_nb = 0;
+ rx->rx->chandata_first = NULL;
+ rx->rx->params.lid = 0;
+ rx->rx->params.fl_tck = 0;
+ rx->rx->params.pending_seg_info = 0;
+ rx->rx->params.pb_size = 0;
+ rx->rx->params.mpdu_cnt = 0;
+ rx->rx->params.mfs_cmd_data = 0;
+ rx->rx->params.mfs_cmd_mme = 0;
+ slist_push_back (tp.pbproc->commit.rx_, rx);
+ }
+ /* Trigger a deferred callback. */
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (phy_deferred),
+ SCENARIO_EVENT (pbproc_rx_beacon_cb,
+ .duration_tck = MAC_MS_TO_TCK (2)),
+ SCENARIO_EVENT (pbproc_rx_beacon_cb,
+ .duration_tck = MAC_MS_TO_TCK (2)),
+ SCENARIO_EVENT (pbproc_rx_cb, .pb_nb = 0, .chandata_nb = 0,
+ .lid = 0, .fl_tck = 0, .pending_seg_info = 0,
+ .pb_size = 0, .mpdu_cnt = 0,
+ .mfs_cmd_data = 0, .mfs_cmd_mme = 0,
+ .duration_tck = MAC_MS_TO_TCK (7)),
+ SCENARIO_EVENT (pbproc_rx_cb, .pb_nb = 0, .chandata_nb = 0,
+ .lid = 0, .fl_tck = 0, .pending_seg_info = 0,
+ .pb_size = 0, .mpdu_cnt = 0,
+ .mfs_cmd_data = 0, .mfs_cmd_mme = 0,
+ .duration_tck = MAC_MS_TO_TCK (7)),
+ SCENARIO_EVENT (phy_deferred_schedule),
+ SCENARIO_EVENT (pbproc_rx_beacon_cb,
+ .duration_tck = MAC_MS_TO_TCK (2)),
+ SCENARIO_EVENT (pbproc_rx_cb, .pb_nb = 0, .chandata_nb = 0,
+ .lid = 0, .fl_tck = 0, .pending_seg_info = 0,
+ .pb_size = 0, .mpdu_cnt = 0,
+ .mfs_cmd_data = 0, .mfs_cmd_mme = 0,
+ .duration_tck = MAC_MS_TO_TCK (7)),
+ SCENARIO_END
+ };
+
+ scenario_globals_t globals = {
+ .tp = &tp,
+ };
+ scenario_run (t, entries, &globals);
+ test_fail_unless (tp.pbproc->fsm.current_state
+ == PBPROC_FSM_STATE_IDLE);
+ } test_end;
+ test_pbproc_uninit (&tp);
+}
+
+void
+rx_data_test_suite (test_t t)
+{
+ test_suite_begin (t, "rx data");
+ rx_data_basic_test_case (t);
+ /* rx_data_burst_test_case (t); */
+ rx_data_errors_test_case (t);
+ rx_data_fl_av_test_case (t);
+ rx_data_budget_test_case (t);
+ test_case_begin (t, "memory");
+ test_begin (t, "memory")
+ {
+ test_fail_unless (blk_check_memory ());
+ } test_end;
+}
+
diff --git a/cesar/mac/pbproc/test/pbproc_eoc/src/rx_sound.c b/cesar/mac/pbproc/test/pbproc_eoc/src/rx_sound.c
new file mode 100644
index 0000000000..d61c8b35c0
--- /dev/null
+++ b/cesar/mac/pbproc/test/pbproc_eoc/src/rx_sound.c
@@ -0,0 +1,353 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2009 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/rx_sound.c
+ * \brief RX SOUND automaton test
+ * \ingroup test
+ */
+#include "common/std.h"
+
+#include "lib/scenario/scenario.h"
+#include "inc/utils.h"
+
+#include "inc/test_pbproc.h"
+
+#include "mac/common/timings.h"
+#include "hal/phy/inc/context.h"
+
+void
+rx_sound_test (test_t t, test_pbproc_t *tp, u32 date, uint chandata_nb,
+ uint pool_pb_nb, uint tmi, uint burst, bool scf)
+{
+ uint i;
+ test_within (t);
+ const uint lid = 1;
+ /* Prepare ctx reception status. */
+ pbproc_prep_mpdu_t *prep = &tp->pbproc->prep_mpdu;
+ prep->valid = true;
+ prep->bbf = true;
+ prep->dtei = 25;
+ /* Prepare tone map. */
+ dbg_assert (tmi == PHY_MOD_ROBO || tmi == PHY_MOD_MINI_ROBO);
+ tonemap_t *tm = &tp->config.tonemask_info.tonemap_robo[tmi];
+ dbg_assert (tm->gil == PHY_GIL_417 || tm->gil == PHY_GIL_567);
+ uint dx = tm->gil == PHY_GIL_417 ? MAC_DX417_TCK : MAC_DX567_TCK;
+ uint rifs_tck = burst ? MAC_BIFS_TCK : MAC_RIFS_DEFAULT_TCK;
+ phy_pb_size_t pb_size = tmi == PHY_MOD_ROBO ? PHY_PB_SIZE_520
+ : PHY_PB_SIZE_136;
+ /* Prepare channel data configuration. */
+ u32 chandata_conf[chandata_nb];
+ bool chandata = false;
+ if (chandata_nb)
+ {
+ for (i = 0; i < chandata_nb; i++)
+ chandata_conf[i] = i;
+ pbproc_set_chandata_conf (tp->pbproc,
+ (phy_chandata_conf_t *) chandata_conf,
+ chandata_nb, false);
+ if (pool_pb_nb >= chandata_nb)
+ chandata = true;
+ }
+ /* Compute frame size. */
+ uint symb_nb = (1 * tm->bits_per_pb[pb_size] + tm->bits_per_symbol - 1)
+ / tm->bits_per_symbol;
+ /* Prepare FC. */
+ const uint fl_tck = MAC_PAYLOAD_TCK (symb_nb, dx)
+ + rifs_tck;
+ pbproc_fc_sound_t sound_fc = {
+ .dt_av = PBPROC_FC_DT_SOUND,
+ .access = false,
+ .snid = tp->snid,
+ .direction = 1,
+ .dtei = 25,
+ .lid = lid,
+ .pbsz = pb_size == PHY_PB_SIZE_136,
+ .saf = false,
+ .scf = false,
+ .req_tm = 7,
+ .fl_av = MAC_TCK_TO_FL (fl_tck),
+ .mpdu_cnt = burst,
+ .src = TONEMAP_SRC_INITIAL,
+ .fccs_av = 0,
+ };
+ const uint rx_fl_tck = MAC_FL_TO_TCK (MAC_TCK_TO_FL (fl_tck));
+ const uint pre_fc_fl_tck = MAC_PREAMBLE_TCK + MAC_FC_AV_TCK + rx_fl_tck;
+ /* Reset stats. */
+ test_pbproc_check_stats_reset (tp);
+ /* Scenario. */
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (phy_rx_fc, .rx_date = date, .prp_won = false,
+ .slot_count = 2,
+ .fc_av = PARENT_OF (pbproc_fc_t, sound,
+ &sound_fc)->words),
+ SCENARIO_EVENT (ca_backoff_cancel),
+ SCENARIO_EVENT (phy_tx_cancel),
+ SCENARIO_EVENT (ca_access_hold),
+ SCENARIO_EVENT_COND (chandata, phy_rx_prepare_sound, .nb_pb = 1,
+ .mod = tmi, .fecrate = tm->fecrate,
+ .pb_size = pb_size, .gil = tm->gil,
+ .symbol_nb = symb_nb),
+ SCENARIO_EVENT_COND (chandata, phy_pbdma_start_chandata),
+ SCENARIO_EVENT_COND (!chandata, phy_rx_prepare_short),
+ SCENARIO_EVENT_COND (!burst, ca_access_vcs_restart,
+ .end_date = date + pre_fc_fl_tck
+ + MAC_PREAMBLE_TCK + MAC_FC_AV_TCK
+ + MAC_CIFS_TCK),
+ SCENARIO_EVENT_COND (burst, ca_access_vcs_restart_eifs,
+ .start_date = date + pre_fc_fl_tck),
+ SCENARIO_EVENT_COND (burst, phy_rx_activate, .now = false,
+ .date = date + pre_fc_fl_tck
+ + PHY_RX_ACTIVATE_DELAY_AFTER_BURST_TCK,
+ .pre_detection = true),
+ SCENARIO_ACTION_COND (chandata, phy_pbdma, .end_chandata = true),
+ SCENARIO_EVENT_COND (!burst, phy_tx_param_short,
+ .fc_mode = PHY_FC_MODE_AV_1),
+ SCENARIO_EVENT_COND (!burst, phy_tx_frame,
+ .date = date + pre_fc_fl_tck, .want_conf = false,
+ .stop_tx_on_prp_lost = true),
+ SCENARIO_EVENT_COND (chandata, pbproc_rx_cb, .pb_nb = 0,
+ .chandata_nb = chandata ? chandata_nb : 0,
+ .lid = lid,
+ .fl_tck = rx_fl_tck,
+ .pending_seg_info = 0,
+ .pb_size = pb_size,
+ .mpdu_cnt = burst,
+ .mfs_cmd_data = MFS_FSM_CMD_NOP,
+ .mfs_cmd_mme = MFS_FSM_CMD_NOP),
+ SCENARIO_END
+ };
+ scenario_globals_t globals = {
+ .tp = tp,
+ };
+ /* Allocate PB pool. */
+ blk_t *first, *last;
+ first = blk_alloc_desc_range (1 + pool_pb_nb, &last);
+ pbproc_rx_segment_refill (tp->pbproc, PARENT_OF (pb_t, blk, first),
+ PARENT_OF (pb_t, blk, last), 1 + pool_pb_nb);
+ /* Run scenario. */
+ scenario_run (t, entries, &globals);
+ /* Check pool. */
+ test_fail_unless (tp->pbproc->rx_pool_size == 1 + pool_pb_nb
+ - (chandata ? 1 + chandata_nb : 0));
+ /* Check SOUND ACK. */
+ if (!burst)
+ {
+ pbproc_fc_sound_t ack = PARENT_OF (pbproc_fc_t, words,
+ tp->pbproc->phy->tx_fc)->sound;
+ test_fail_unless (ack.dt_av == PBPROC_FC_DT_SOUND);
+ test_fail_unless (ack.access == false);
+ test_fail_unless (ack.snid == tp->snid);
+ test_fail_unless (ack.dtei == sound_fc.dtei);
+ test_fail_unless (ack.direction == 0);
+ test_fail_unless (ack.lid == lid);
+ test_fail_unless (ack.pbsz == false);
+ test_fail_unless (ack.saf == true);
+ test_fail_unless (ack.scf == scf);
+ test_fail_unless (ack.req_tm == 0);
+ test_fail_unless (ack.fl_av == 0);
+ test_fail_unless (ack.mpdu_cnt == 0);
+ test_fail_unless (ack.src == 0);
+ }
+ /* Check stats. */
+ test_pbproc_check_stats (t, tp,
+ .prp_lost = 1,
+ .rx_handle_fc = 1,
+ .rx_sound = 1,
+ .rx_sound_complete = scf && chandata ? 1 : 0,
+ .rx_sound_drop = chandata ? 0 : 1);
+ /* Check return to IDLE state. */
+ test_fail_unless (tp->pbproc->fsm.current_state == PBPROC_FSM_STATE_IDLE);
+ /* Cleanup. */
+ if (tp->pbproc->rx_pool_size)
+ {
+ blk_release_desc_range (&tp->pbproc->rx_pool_head->blk,
+ &tp->pbproc->rx_pool_tail->blk);
+ slist_init (tp->pbproc->rx_pool_, paste_size);
+ }
+ if (chandata_nb)
+ pbproc_set_chandata_conf (tp->pbproc, NULL, 0, false);
+}
+
+void
+rx_sound_basic_test_case (test_t t)
+{
+ test_pbproc_t tp;
+ test_case_begin (t, "basic");
+ test_pbproc_init (&tp);
+ test_begin (t, "robo")
+ {
+ rx_sound_test (t, &tp, 123456, 11, 11, PHY_MOD_ROBO, 0, true);
+ rx_sound_test (t, &tp, 123456, 11, 12, PHY_MOD_ROBO, 0, true);
+ } test_end;
+ test_begin (t, "mini-robo")
+ {
+ rx_sound_test (t, &tp, 1234567, 6, 6, PHY_MOD_MINI_ROBO, 0, true);
+ rx_sound_test (t, &tp, 1234567, 6, 7, PHY_MOD_MINI_ROBO, 0, true);
+ } test_end;
+ test_begin (t, "sound complete")
+ {
+ uint i;
+ utils_sta_prepare_default_tonemap (&tp, false, 25, PHY_MOD_ROBO, 0, 0,
+ NULL);
+ for (i = 0; i < TONEMAP_SOUND_FRAME_COUNTER - 1; i++)
+ rx_sound_test (t, &tp, 123456, 11, 11, PHY_MOD_ROBO, 0, false);
+ rx_sound_test (t, &tp, 123456, 11, 11, PHY_MOD_ROBO, 0, true);
+ rx_sound_test (t, &tp, 123456, 11, 11, PHY_MOD_ROBO, 0, true);
+ dbg_check (mac_store_sta_remove (tp.store, 25));
+ } test_end;
+ /*
+ test_begin (t, "burst")
+ {
+ rx_sound_test (t, &tp, 123456, 11, 11, PHY_MOD_ROBO, 1, true);
+ rx_sound_test (t, &tp, 123456, 11, 11, PHY_MOD_MINI_ROBO, 1, true);
+ } test_end;
+ */
+ test_begin (t, "no chandata")
+ {
+ rx_sound_test (t, &tp, 123456, 0, 1, PHY_MOD_ROBO, 0, true);
+ rx_sound_test (t, &tp, 123456, 0, 1, PHY_MOD_MINI_ROBO, 0, true);
+ } test_end;
+ test_begin (t, "woack no chandata")
+ {
+ rx_sound_test (t, &tp, 123456, 0, 1, PHY_MOD_ROBO, 1, true);
+ rx_sound_test (t, &tp, 123456, 0, 1, PHY_MOD_MINI_ROBO, 1, true);
+ } test_end;
+ test_pbproc_uninit (&tp);
+}
+
+enum rx_sound_nfu_t
+{
+ NFU_OUT_OF_ALLOC,
+ NFU_POOL_SHORTAGE,
+ NFU_WRONG_STATION,
+};
+typedef enum rx_sound_nfu_t rx_sound_nfu_t;
+
+void
+rx_sound_nfu_test (test_t t, test_pbproc_t *tp, u32 date, rx_sound_nfu_t nfu)
+{
+ test_within (t);
+ u32 restart_date;
+ uint length_tck;
+ /* Prepare context. */
+ pbproc_prep_mpdu_t *prep = &tp->pbproc->prep_mpdu;
+ prep->valid = true;
+ prep->bbf = true;
+ prep->dtei = nfu == NFU_WRONG_STATION ? 100 : 25;
+ /* Use another state to test return to IDLE. */
+ tp->pbproc->fsm.current_state = PBPROC_FSM_STATE_RX_BURST;
+ /* Prepare channel data configuration. */
+ const uint chandata_nb = 3;
+ u32 chandata_conf[chandata_nb];
+ uint i;
+ for (i = 0; i < chandata_nb; i++)
+ chandata_conf[i] = i;
+ pbproc_set_chandata_conf (tp->pbproc,
+ (phy_chandata_conf_t *) chandata_conf,
+ chandata_nb, false);
+ /* Compute frame size. */
+ tonemap_t *tm = &tp->config.tonemask_info.tonemap_robo[PHY_MOD_ROBO];
+ uint symb_nb = (1 * tm->bits_per_pb[PHY_PB_SIZE_520]
+ + tm->bits_per_symbol - 1) / tm->bits_per_symbol;
+ const uint fl_tck = MAC_PAYLOAD_TCK (symb_nb, MAC_DX417_TCK)
+ + MAC_RIFS_DEFAULT_TCK;
+ /* Prepare FC. Direction is STA->CCO. */
+ pbproc_fc_sound_t sound_fc = {
+ .dt_av = PBPROC_FC_DT_SOUND,
+ .access = false,
+ .snid = tp->snid,
+ .dtei = 25,
+ .direction = 1,
+ .lid = 1,
+ .pbsz = false,
+ .saf = false,
+ .scf = false,
+ .req_tm = 7,
+ .fl_av = MAC_TCK_TO_FL (fl_tck),
+ .mpdu_cnt = 0,
+ .src = TONEMAP_SRC_INITIAL,
+ .fccs_av = 0,
+ };
+ /* Late set of date. */
+ prep->tx_date = date;
+ length_tck = MAC_PREAMBLE_TCK + MAC_FC_AV_TCK
+ + MAC_FL_TO_TCK (MAC_TCK_TO_FL (fl_tck))
+ + MAC_PREAMBLE_TCK + MAC_FC_AV_TCK + MAC_CIFS_TCK;
+ if (nfu == NFU_OUT_OF_ALLOC)
+ date = TEST_PBPROC_ALLOC_END_DATE + MAC_TOLERANCE_TCK
+ - length_tck + MAC_CIFS_TCK + 1;
+ restart_date = date + length_tck - MAC_PREAMBLE_TCK - MAC_FC_AV_TCK
+ - MAC_CIFS_TCK;
+ length_tck = MAC_PREAMBLE_TCK + MAC_FC_AV_TCK + MAC_CIFS_TCK;
+ tp->pbproc->rx_pool_size = nfu != NFU_POOL_SHORTAGE ? 4 : 3;
+ test_pbproc_check_stats_reset (tp);
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (phy_rx_fc, .rx_date = date, .prp_won = false,
+ .slot_count = 2,
+ .fc_av = PARENT_OF (pbproc_fc_t, sound,
+ &sound_fc)->words),
+ SCENARIO_EVENT (phy_tx_cancel),
+ SCENARIO_EVENT (ca_access_hold),
+ SCENARIO_EVENT (phy_rx_prepare_short),
+ SCENARIO_EVENT (ca_access_vcs_restart,
+ .end_date = restart_date + length_tck),
+ SCENARIO_END
+ };
+ scenario_globals_t globals = {
+ .tp = tp,
+ };
+ scenario_run (t, entries, &globals);
+ test_pbproc_check_stats (
+ t, tp,
+ .prp_lost = 0,
+ .rx_handle_fc = 1,
+ .rx_sound = nfu == NFU_WRONG_STATION ? 0 : 1,
+ .rx_nfu = nfu == NFU_WRONG_STATION ? 1 : 0,
+ .rx_out_of_alloc = nfu == NFU_OUT_OF_ALLOC ? 1 : 0,
+ .rx_pool_shortage = nfu == NFU_POOL_SHORTAGE ? 1 : 0);
+ test_fail_unless (tp->pbproc->fsm.current_state == PBPROC_FSM_STATE_IDLE);
+ test_fail_unless (tp->pbproc->rx_pool_size == (nfu != NFU_POOL_SHORTAGE
+ ? 4 : 3));
+ tp->pbproc->rx_pool_size = 0;
+ pbproc_set_chandata_conf (tp->pbproc, NULL, 0, false);
+}
+
+void
+rx_sound_error_test_case (test_t t)
+{
+ test_pbproc_t tp;
+ test_case_begin (t, "error");
+ test_pbproc_init (&tp);
+ test_begin (t, "nfu out of alloc")
+ {
+ rx_sound_nfu_test (t, &tp, 123456, NFU_OUT_OF_ALLOC);
+ } test_end;
+ test_begin (t, "nfu pool shortage")
+ {
+ rx_sound_nfu_test (t, &tp, 123456, NFU_POOL_SHORTAGE);
+ } test_end;
+ test_begin (t, "nfu wrong station")
+ {
+ rx_sound_nfu_test (t, &tp, 123456, NFU_WRONG_STATION);
+ } test_end;
+ test_pbproc_uninit (&tp);
+}
+
+void
+rx_sound_test_suite (test_t t)
+{
+ test_suite_begin (t, "rx sound");
+ rx_sound_basic_test_case (t);
+ rx_sound_error_test_case (t);
+ test_case_begin (t, "memory");
+ test_begin (t, "memory")
+ {
+ test_fail_unless (blk_check_memory ());
+ } test_end;
+}
+
diff --git a/cesar/mac/pbproc/test/pbproc_eoc/src/scenario_defs.c b/cesar/mac/pbproc/test/pbproc_eoc/src/scenario_defs.c
new file mode 100644
index 0000000000..a024f336ed
--- /dev/null
+++ b/cesar/mac/pbproc/test/pbproc_eoc/src/scenario_defs.c
@@ -0,0 +1,166 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2007 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/scenario_defs.c
+ * \brief Scenario actions.
+ * \ingroup test
+ */
+#include "common/std.h"
+
+#include "lib/scenario/scenario.h"
+#include "hal/phy/inc/context.h"
+#include "mac/ca/inc/context.h"
+
+void
+scenario_action_phy_rx_fc_cb (scenario_globals_t *globals,
+ scenario_params_t *params)
+{
+ scenario_action_phy_rx_fc_t *p = &params->action_phy_rx_fc;
+ ca_t *ca = globals->tp->ca;
+ phy_t *phy = globals->tp->pbproc->phy;
+ phy->rx_sysdate = p->rx_sysdate;
+ phy->prp_won = p->prp_won;
+ if (!p->prp_won)
+ ca->access_param.prp = true;
+ phy->slot_count = p->slot_count;
+ phy->fc10 = p->fc10 ? p->fc10 : (u32) -1;
+ /* Call callbacks. */
+ if (phy->rx_fc_cb (phy->user_data, p->rx_date, p->fc_av))
+ phy->deferred_cb (phy->user_data);
+ while (phy->dsr_scheduled)
+ {
+ phy->dsr_scheduled = false;
+ phy->deferred_cb (phy->user_data);
+ }
+}
+
+void
+scenario_action_phy_access_cb (scenario_globals_t *globals,
+ scenario_params_t *params)
+{
+ scenario_action_phy_access_t *p = &params->action_phy_access;
+ ca_t *ca = globals->tp->ca;
+ phy_t *phy = globals->tp->pbproc->phy;
+ /* Prepare parameters. */
+ ca->mfs = p->mfs;
+ if (p->access_param)
+ {
+ ca->access_param = *p->access_param;
+ phy->current_date = ca->access_param.access_date - PBPROC_ANTICIP_TCK
+ + p->delay_tck;
+ }
+ phy->prp_won = p->prp_won;
+ phy->slot_count = p->slot_count;
+ /* Call callbacks. */
+ if (phy->access_cb (phy->user_data))
+ phy->deferred_cb (phy->user_data);
+ while (phy->dsr_scheduled)
+ {
+ phy->dsr_scheduled = false;
+ phy->deferred_cb (phy->user_data);
+ }
+}
+
+void
+scenario_action_phy_access_conf_cb (scenario_globals_t *globals,
+ scenario_params_t *params)
+{
+ phy_t *phy = globals->tp->pbproc->phy;
+ /* Call callbacks. */
+ if (phy->access_conf_cb (phy->user_data))
+ phy->deferred_cb (phy->user_data);
+ while (phy->dsr_scheduled)
+ {
+ phy->dsr_scheduled = false;
+ phy->deferred_cb (phy->user_data);
+ }
+}
+
+void
+scenario_action_phy_pbdma_cb (scenario_globals_t *globals,
+ scenario_params_t *params)
+{
+ scenario_action_phy_pbdma_t *p = &params->action_phy_pbdma;
+ phy_t *phy = globals->tp->pbproc->phy;
+ /* Prepare parameters. */
+ phy_pbdma_status_t status;
+ *(u32 *) &status = 0;
+ status.pb_null = p->pb_null;
+ status.pb_crc_error = p->pb_crc_error;
+ status.pb_it = p->pb_it;
+ status.end_rx_pb = p->end_rx_pb;
+ status.end_tx_pb = p->end_tx_pb;
+ status.end_chandata = p->end_chandata;
+ status.null_pb_index = p->null_pb_index;
+ uint i;
+ if (p->crc_bitmap)
+ {
+ dbg_assert (p->crc_bitmap_bits < 256);
+ for (i = 0; i < p->crc_bitmap_bits / 32; i++)
+ phy->crc_bitmap[i] = p->crc_bitmap[i];
+ if (p->crc_bitmap_bits % 32 != 0)
+ {
+ phy->crc_bitmap[i] =
+ p->crc_bitmap[i] & BITS_ONES (p->crc_bitmap_bits % 32);
+ i++;
+ }
+ for (; i < COUNT (phy->crc_bitmap); i++)
+ phy->crc_bitmap[i] = 0;
+ }
+ else
+ for (i = 0; i < COUNT (phy->crc_bitmap); i++)
+ phy->crc_bitmap[i] = 0;
+ /* Call callbacks. */
+ if (phy->pbdma_cb (phy->user_data, *(u32 *) &status))
+ phy->deferred_cb (phy->user_data);
+ while (phy->dsr_scheduled)
+ {
+ phy->dsr_scheduled = false;
+ phy->deferred_cb (phy->user_data);
+ }
+}
+
+void
+scenario_action_phy_deferred_cb (scenario_globals_t *globals,
+ scenario_params_t *params)
+{
+ phy_t *phy = globals->tp->pbproc->phy;
+ /* Call callbacks. */
+ phy->deferred_cb (phy->user_data);
+ while (phy->dsr_scheduled)
+ {
+ phy->dsr_scheduled = false;
+ phy->deferred_cb (phy->user_data);
+ }
+}
+
+void
+scenario_action_phy_extra_timer_cb (scenario_globals_t *globals,
+ scenario_params_t *params)
+{
+ phy_t *phy = globals->tp->pbproc->phy;
+ /* Call callbacks. */
+ if (phy->extra_timer_cb (phy->user_data))
+ phy->deferred_cb (phy->user_data);
+ while (phy->dsr_scheduled)
+ {
+ phy->dsr_scheduled = false;
+ phy->deferred_cb (phy->user_data);
+ }
+}
+
+void
+scenario_action_pbproc_activate_cb (scenario_globals_t *globals,
+ scenario_params_t *params)
+{
+ scenario_action_pbproc_activate_t *p = &params->action_pbproc_activate;
+ pbproc_t *pbproc = globals->tp->pbproc;
+ /* Call function. */
+ pbproc_activate (pbproc, p->flag);
+}
+
diff --git a/cesar/mac/pbproc/test/pbproc_eoc/src/test_pbproc.c b/cesar/mac/pbproc/test/pbproc_eoc/src/test_pbproc.c
new file mode 100644
index 0000000000..eb9054f1f1
--- /dev/null
+++ b/cesar/mac/pbproc/test/pbproc_eoc/src/test_pbproc.c
@@ -0,0 +1,502 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2007 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/test_pbproc.c
+ * \brief PBProc test.
+ * \ingroup test
+ */
+#include "common/std.h"
+#include "config/av.h"
+
+#include "lib/trace.h"
+
+#include "inc/test_pbproc.h"
+
+#include "lib/scenario/scenario.h"
+
+#include "hal/phy/inc/context.h"
+
+#include <string.h>
+
+void
+prep_mpdu_test_suite (test_t t);
+
+void
+tx_data_test_suite (test_t t);
+
+void
+tx_sound_test_suite (test_t t);
+
+void
+rx_data_test_suite (test_t t);
+
+void
+rx_sound_test_suite (test_t t);
+
+void
+rx_rts_cts_test_suite (test_t t);
+
+void
+test_pbproc_rx_cb (void *user, pbproc_rx_desc_t *rx_desc)
+{
+ dbg_assert_ptr (user);
+ dbg_assert_ptr (rx_desc);
+ pbproc_rx_t *rx = rx_desc->rx;
+ if (rx->pb_nb)
+ {
+ dbg_assert_ptr (rx->pb_first);
+ dbg_assert_ptr (rx->pb_last);
+ }
+ else
+ dbg_assert (rx->pb_first == NULL && rx->pb_last == NULL);
+ if (rx->chandata_nb)
+ dbg_assert_ptr (rx->chandata_first);
+ else
+ dbg_assert (rx->chandata_first == NULL);
+ scenario_event (pbproc_rx_cb, params, globals);
+ test_fail_unless (rx->pb_nb == params->pb_nb);
+ if (rx->pb_nb)
+ blk_release_desc_range (&rx->pb_first->blk, &rx->pb_last->blk);
+ test_fail_unless (rx->chandata_nb == params->chandata_nb);
+ if (rx->chandata_nb)
+ blk_release_desc_range_nb (&rx->chandata_first->blk, rx->chandata_nb);
+ /* TODO: more verifications. */
+ test_fail_unless (rx->params.lid == params->lid);
+ test_fail_unless (rx->params.fl_tck == params->fl_tck);
+ test_fail_unless (rx->params.pending_seg_info
+ == params->pending_seg_info);
+ test_fail_unless (rx->params.pb_size == params->pb_size);
+ test_fail_unless (rx->params.mpdu_cnt == params->mpdu_cnt);
+ /*test_fail_unless (rx->params.mfs_cmd_data == params->mfs_cmd_data);*/
+ test_fail_unless (rx->params.mfs_cmd_mme == params->mfs_cmd_mme);
+ /* This took time. */
+ globals->tp->pbproc->phy->current_date += params->duration_tck;
+ /* Done. */
+ blk_release_desc (&rx_desc->blk);
+}
+
+void
+test_pbproc_rx_beacon_cb (void *user, pb_beacon_t *pb,
+ pbproc_rx_beacon_params_t *params)
+{
+ dbg_assert_ptr (user);
+ dbg_assert_ptr (pb);
+ dbg_assert (params == (void *) (pb->data + MAC_PB136_BYTES));
+ scenario_event (pbproc_rx_beacon_cb, event_params, globals);
+ /* TODO: more verifications. */
+ /* This took time. */
+ globals->tp->pbproc->phy->current_date += event_params->duration_tck;
+ /* Done. */
+ blk_release_desc (&pb->blk);
+}
+
+void
+test_pbproc_init (test_pbproc_t *ctx)
+{
+ dbg_assert (ctx);
+ lib_rnd_init (ctx->rnd, 1234);
+ mac_config_init (&ctx->config);
+ mac_ntb_init (&ctx->config);
+ ctx->config.ntb_offset_tck = TEST_PBPROC_NTB_OFFSET_TCK;
+ ctx->config.tei = 1;
+ ctx->snid = 1;
+ ctx->config.seed = 42;
+ ctx->store = mac_store_init ();
+ ctx->pbproc = pbproc_init (&ctx->config, ctx->store);
+ pbproc_init_cb (ctx->pbproc, ctx, test_pbproc_rx_cb,
+ test_pbproc_rx_beacon_cb);
+ pbproc_get_phy (ctx->pbproc);
+ ctx->ca = pbproc_get_ca (ctx->pbproc);
+ ctx->pbproc->activated = true;
+ test_pbproc_alloc (ctx, false, 0);
+ test_pbproc_check_stats_reset (ctx);
+}
+
+void
+test_pbproc_alloc (test_pbproc_t *ctx, bool hybrid,
+ u32 beacon_period_start_date)
+{
+ dbg_assert (ctx);
+ ctx->pbproc->alloc.coexistence_mode = hybrid
+ ? MAC_COEXISTENCE_FULL_HYBRID_MODE : MAC_COEXISTENCE_AV_ONLY_MODE;
+ ctx->pbproc->alloc.hybrid = hybrid;
+ ctx->pbproc->alloc.merge = false;
+ ctx->pbproc->times = ctx->pbproc->times_array[PBPROC_TIMES_ARRAY_INDEX (
+ hybrid, ctx->pbproc->alloc.coexistence_mode)];
+ ctx->pbproc->alloc.end_date = TEST_PBPROC_ALLOC_END_DATE;
+ ctx->pbproc->alloc.aifs_date = TEST_PBPROC_ALLOC_END_DATE;
+ ctx->pbproc->alloc.beacon_period_start_date = beacon_period_start_date;
+}
+
+void
+test_pbproc_check_stats_ (test_t t, test_pbproc_t *ctx,
+ const pbproc_stat_t *stats)
+{
+ test_within (t);
+ dbg_assert (ctx);
+ dbg_assert (stats);
+#define TEST_PBPROC_CHECK_STAT(stat) \
+ test_fail_unless (ctx->pbproc->stats.stat == ctx->recorded_stats.stat \
+ + stats->stat, #stat ": %d", \
+ ctx->pbproc->stats.stat - ctx->recorded_stats.stat)
+ TEST_PBPROC_CHECK_STAT(rts_fail);
+ TEST_PBPROC_CHECK_STAT(prp_lost);
+ TEST_PBPROC_CHECK_STAT(cw_lost);
+ TEST_PBPROC_CHECK_STAT(aifs);
+ TEST_PBPROC_CHECK_STAT(rx_out_of_alloc);
+ TEST_PBPROC_CHECK_STAT(rx_rsof_out_of_alloc);
+ TEST_PBPROC_CHECK_STAT(rx_pool_shortage);
+ TEST_PBPROC_CHECK_STAT(rx_handle_fc);
+ TEST_PBPROC_CHECK_STAT(rx_beacon);
+ TEST_PBPROC_CHECK_STAT(rx_data);
+ TEST_PBPROC_CHECK_STAT(rx_data_wack);
+ TEST_PBPROC_CHECK_STAT(rx_data_woack);
+ TEST_PBPROC_CHECK_STAT(rx_data_burst_stop);
+ TEST_PBPROC_CHECK_STAT(rx_data_error);
+ TEST_PBPROC_CHECK_STAT(rx_data_empty);
+ TEST_PBPROC_CHECK_STAT(rx_data_bad_symb_nb);
+ TEST_PBPROC_CHECK_STAT(rx_sound);
+ TEST_PBPROC_CHECK_STAT(rx_sound_complete);
+ TEST_PBPROC_CHECK_STAT(rx_sound_drop);
+ TEST_PBPROC_CHECK_STAT(rx_nfu);
+ TEST_PBPROC_CHECK_STAT(rx_fc_unknown);
+ TEST_PBPROC_CHECK_STAT(rx_crc_error);
+ TEST_PBPROC_CHECK_STAT(tx_invalid);
+ TEST_PBPROC_CHECK_STAT(tx_late);
+ TEST_PBPROC_CHECK_STAT(tx_data);
+ TEST_PBPROC_CHECK_STAT(tx_data_cancel);
+ TEST_PBPROC_CHECK_STAT(tx_data_burst);
+ TEST_PBPROC_CHECK_STAT(tx_data_burst_interrupted);
+ TEST_PBPROC_CHECK_STAT(tx_data_wack);
+ TEST_PBPROC_CHECK_STAT(tx_data_woack);
+ TEST_PBPROC_CHECK_STAT(tx_data_beacon);
+ TEST_PBPROC_CHECK_STAT(tx_data_wack_ack);
+ TEST_PBPROC_CHECK_STAT(tx_data_wack_noack);
+ TEST_PBPROC_CHECK_STAT(tx_sound);
+ TEST_PBPROC_CHECK_STAT(tx_sound_ack);
+ TEST_PBPROC_CHECK_STAT(tx_sound_noack);
+}
+
+void
+test_pbproc_check_stats_reset (test_pbproc_t *ctx)
+{
+ dbg_assert (ctx);
+ ctx->recorded_stats = ctx->pbproc->stats;
+}
+
+void
+test_pbproc_uninit (test_pbproc_t *ctx)
+{
+ dbg_assert (ctx);
+ ctx->ca = NULL;
+ pbproc_uninit (ctx->pbproc);
+ ctx->pbproc = NULL;
+ mac_store_uninit (ctx->store);
+ ctx->store = NULL;
+}
+
+static void
+test_pbproc_aifs (test_t t, bool from_merge, bool to_merge)
+{
+ test_within (t);
+ test_pbproc_t ctx;
+ test_pbproc_init (&ctx);
+ ctx.pbproc->alloc.merge = from_merge;
+ ca_access_param_t access_param = {
+ .access_date = 0, .cw_start_date = 0, .aifs = true,
+ };
+ ctx.pbproc->detect.hp10_detected = true;
+ ctx.pbproc->detect.hp10_detect_date =
+ phy_date () - MAC_MS_TO_TCK (1900);
+ ctx.pbproc->detect.hp11_detected = true;
+ ctx.pbproc->detect.hp11_detect_date =
+ phy_date () - MAC_MS_TO_TCK (2900);
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (phy_access, .mfs = NULL,
+ .access_param = &access_param,
+ .prp_won = true, .slot_count = 64),
+ SCENARIO_EVENT_COND (!from_merge, phy_rx_activate, .now = true,
+ .pre_detection = false),
+ SCENARIO_EVENT_COND (!from_merge, ca_backoff_cancel),
+ SCENARIO_EVENT (ca_access_aifs,
+ .coexistence_mode =
+ MAC_COEXISTENCE_FULL_HYBRID_MODE,
+ .snid = ctx.snid, .hybrid = true, .merge = to_merge,
+ .nek_switch = 0),
+ SCENARIO_EVENT_COND (!to_merge, phy_rx_param,
+ .fc_mode = PHY_FC_MODE (true, 1)),
+ SCENARIO_END
+ };
+ scenario_globals_t globals = {
+ .tp = &ctx,
+ };
+ scenario_run (t, entries, &globals);
+ test_fail_unless (ctx.pbproc->fsm.current_state
+ == PBPROC_FSM_STATE_IDLE);
+ if (!to_merge)
+ test_fail_unless (memcmp (&ctx.pbproc->times,
+ &ctx.pbproc->times_array[true],
+ sizeof (pbproc_times_t)) == 0);
+#if !CONFIG_AV_ONLY_MODE
+ test_fail_unless (ctx.pbproc->detect.hp10_detected == true);
+ test_fail_unless (ctx.pbproc->detect.hp11_detected == false);
+#endif
+ ctx.pbproc->detect.hp10_detected = false;
+ ctx.pbproc->detect.hp11_detected = false;
+ test_pbproc_check_stats (t, &ctx, .aifs = 1);
+ test_pbproc_uninit (&ctx);
+}
+
+void
+test_pbproc_init_suite (test_t t)
+{
+ test_suite_begin (t, "init");
+ test_case_begin (t, "basic");
+ test_pbproc_t ctx;
+ test_begin (t, "init uninit")
+ {
+ test_pbproc_init (&ctx);
+ test_pbproc_uninit (&ctx);
+ test_pbproc_init (&ctx);
+ test_pbproc_uninit (&ctx);
+ } test_end;
+ test_begin (t, "rx segment refill")
+ {
+ test_pbproc_init (&ctx);
+ blk_t *first, *last;
+ first = blk_alloc_desc_range (10, &last);
+ pbproc_rx_segment_refill (ctx.pbproc, PB_FROM_BLK (first),
+ PB_FROM_BLK (last), 10);
+ first = blk_alloc_desc_range (10, &last);
+ pbproc_rx_segment_refill (ctx.pbproc, PB_FROM_BLK (first),
+ PB_FROM_BLK (last), 10);
+ test_pbproc_uninit (&ctx);
+ } test_end;
+ test_begin (t, "activate deactivate")
+ {
+ test_pbproc_init (&ctx);
+ ctx.pbproc->activated = false;
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (pbproc_activate, .flag = true),
+ SCENARIO_EVENT (ca_access_activate, .date = 0,
+ .coexistence_mode = MAC_COEXISTENCE_AV_ONLY_MODE,
+ .snid = ctx.snid, .hybrid = false, .merge = false,
+ .nek_switch = 0),
+ SCENARIO_EVENT (phy_rx_param, .fc_mode = PHY_FC_MODE (false, 1)),
+ SCENARIO_EVENT (phy_rx_activate, .now = true,
+ .pre_detection = true),
+ SCENARIO_ACTION (pbproc_activate, .flag = false),
+ SCENARIO_EVENT (phy_rx_activate, .now = true,
+ .pre_detection = false),
+ SCENARIO_EVENT (ca_access_deactivate),
+ SCENARIO_END
+ };
+ scenario_globals_t globals = {
+ .tp = &ctx,
+ };
+ scenario_run (t, entries, &globals);
+ test_fail_unless (memcmp (&ctx.pbproc->times,
+ &ctx.pbproc->times_array[false],
+ sizeof (pbproc_times_t)) == 0);
+ test_pbproc_uninit (&ctx);
+ } test_end;
+ test_begin (t, "activate hybrid")
+ {
+ test_pbproc_init (&ctx);
+ ctx.pbproc->activated = false;
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (pbproc_activate, .flag = true),
+ SCENARIO_EVENT (ca_access_activate, .date = 0,
+ .coexistence_mode =
+ MAC_COEXISTENCE_FULL_HYBRID_MODE,
+ .snid = ctx.snid, .hybrid = true, .merge = false,
+ .nek_switch = 0),
+ SCENARIO_EVENT (phy_rx_param, .fc_mode = PHY_FC_MODE (true, 1)),
+ SCENARIO_EVENT (phy_rx_activate, .now = true,
+ .pre_detection = true),
+ SCENARIO_END
+ };
+ scenario_globals_t globals = {
+ .tp = &ctx,
+ };
+ scenario_run (t, entries, &globals);
+ test_fail_unless (memcmp (&ctx.pbproc->times,
+ &ctx.pbproc->times_array[true],
+ sizeof (pbproc_times_t)) == 0);
+ test_pbproc_uninit (&ctx);
+ } test_end;
+ test_begin (t, "aifs")
+ {
+ test_pbproc_aifs (t, false, false);
+ } test_end;
+ test_begin (t, "aifs merged")
+ {
+ test_pbproc_aifs (t, true, true);
+ } test_end;
+ test_begin (t, "aifs to merged")
+ {
+ test_pbproc_aifs (t, false, true);
+ } test_end;
+ test_begin (t, "aifs from merged")
+ {
+ test_pbproc_aifs (t, true, false);
+ } test_end;
+ test_case_begin (t, "memory");
+ test_begin (t, "memory")
+ {
+ test_fail_unless (blk_check_memory ());
+ } test_end;
+}
+
+struct test_pbproc_trace_dump_t
+{
+ char text[2048];
+ uint size;
+};
+typedef struct test_pbproc_trace_dump_t test_pbproc_trace_dump_t;
+
+static int
+test_pbproc_trace_dump_callback (void *user, const char *text,
+ uint text_size)
+{
+ test_pbproc_trace_dump_t *ctx = user;
+ dbg_assert (ctx);
+ if (text_size + ctx->size >= COUNT (ctx->text))
+ return 0;
+ memcpy (ctx->text, text, text_size);
+ ctx->size += text_size;
+ ctx->text[ctx->size] = '\0';
+ return text_size;
+}
+
+void
+test_pbproc_trace_suite (test_t t)
+{
+ test_suite_begin (t, "trace");
+ test_case_begin (t, "fc");
+ test_pbproc_t tp;
+ test_pbproc_init (&tp);
+ pbproc_t *ctx = tp.pbproc;
+ test_begin (t, "rx fc")
+ {
+ char ref[2048], *refp = ref;
+ const char *s;
+ s = "---trace-begin[pbproc]---\n"
+ "[.] init\n";
+ dbg_assert (refp + strlen (s) < ref + sizeof (ref));
+ strcpy (refp, s); refp += strlen (s);
+ s = "[0x00000000] fsm RX FC pre_date=0x00000000"
+ " BEACON snid=A1 bts=0x12345678 bto=42330,42331,42332,42333\n";
+ dbg_assert (refp + strlen (s) < ref + sizeof (ref));
+ strcpy (refp, s); refp += strlen (s);
+ PBPROC_TRACE (FSM_RX_FC, 0, 0,
+ 0x34567818, 0x5ba55a12, 0x5da55ca5, 0xdeaddea5);
+ s = "[0x00000001] fsm RX FC pre_date=0x00000001"
+ " SOF snid=2 dir=CCO->STA dtei=0x12 lid=0x04 mnbf eks=3"
+ " num_sym=2 tmi=21 fl_av=2213 mpdu_cnt=3 burst_cnt=1"
+ " bbf mrdur_fl=0xbab sackt0=0x2 sacki0=0x21472d05, sacki1=0x54\n";
+ dbg_assert (refp + strlen (s) < ref + sizeof (ref));
+ strcpy (refp, s); refp += strlen (s);
+ PBPROC_TRACE (FSM_RX_FC, 1, 1,
+ 0x56341221, 0xbbab78a5, 0x21472d05, 0xdeadde54);
+ s = "[0x00000002] fsm RX FC pre_date=0x00000002"
+ " SOF snid=A13 dir=STA->CCO dtei=0xed lid=0x0b mcf eks=0"
+ " pb136 num_sym=1 tmi=10 fl_av=1882 burst_cnt=2"
+ " sackt0=0x1 sacki0=0x72b882fa, sacki1=0xab\n";
+ dbg_assert (refp + strlen (s) < ref + sizeof (ref));
+ strcpy (refp, s); refp += strlen (s);
+ PBPROC_TRACE (FSM_RX_FC, 2, 2,
+ 0xa9cbedd9, 0x4454875a, 0x72b882fa, 0xdeaddeab);
+ s = "[0x00000003] fsm RX FC pre_date=0x00000003"
+ " SACK snid=3 dtei=0x12 cfs svn=1 mfs=ACK,mNACK sackt=m,mc,nr,u"
+ " sacki=0x01234567,0x89abcdef,0x01\n";
+ dbg_assert (refp + strlen (s) < ref + sizeof (ref));
+ strcpy (refp, s); refp += strlen (s);
+ PBPROC_TRACE (FSM_RX_FC, 3, 3,
+ 0xe4451232, 0x01234567, 0x89abcdef, 0xdeadde01);
+ s = "[0x00000004] fsm RX FC pre_date=0x00000004"
+ " SACK snid=A12 dtei=0xed bdf rrtf mfs=HOLD,mFAIL sackt=u,nr,mc,m"
+ " sacki=0xfedcba98,0x76543210,0xfe\n";
+ dbg_assert (refp + strlen (s) < ref + sizeof (ref));
+ strcpy (refp, s); refp += strlen (s);
+ PBPROC_TRACE (FSM_RX_FC, 4, 4,
+ 0x1bbaedca, 0xfedcba98, 0x76543210, 0xdeaddefe);
+ s = "[0x00000005] fsm RX FC pre_date=0x00000005"
+ " CTS snid=4 stei=0x23 dtei=0x45 lid=0x67 mcf cfs hp10df igf"
+ " dur=11111\n";
+ dbg_assert (refp + strlen (s) < ref + sizeof (ref));
+ strcpy (refp, s); refp += strlen (s);
+ PBPROC_TRACE (FSM_RX_FC, 5, 5,
+ 0x67452343, 0x002b67a5, 0x00000000, 0xdeadde00);
+ s = "[0x00000006] fsm RX FC pre_date=0x00000006"
+ " RTS snid=A11 stei=0xdc dtei=0xba lid=0x98 mnbf bdf hp11df"
+ " dur=5272\n";
+ dbg_assert (refp + strlen (s) < ref + sizeof (ref));
+ strcpy (refp, s); refp += strlen (s);
+ PBPROC_TRACE (FSM_RX_FC, 6, 6,
+ 0x98badcbb, 0x0014985a, 0x00000000, 0xdeadde00);
+ s = "[0x00000007] fsm RX FC pre_date=0x00000007"
+ " SOUND snid=5 dir=STA->CCO dtei=0x34 lid=0x07 saf scf req_tm=6"
+ " fl_av=2134 mpdu_cnt=2 src=0x00 sackt0=0x1"
+ " sacki0=0x1341a0, sacki1=0xbc\n";
+ dbg_assert (refp + strlen (s) < ref + sizeof (ref));
+ strcpy (refp, s); refp += strlen (s);
+ PBPROC_TRACE (FSM_RX_FC, 7, 7,
+ 0x78563454, 0x9a0d05b5, 0x000000bc, 0xdeadde00);
+ s = "[0x00000008] fsm RX FC pre_date=0x00000008"
+ " SOUND snid=A10 dir=CCO->STA dtei=0xcb lid=0x08 pb136 req_tm=1"
+ " fl_av=1961 mpdu_cnt=1 src=0x00 sackt0=0x2"
+ " sacki0=0xca65f, sacki1=0x43\n";
+ dbg_assert (refp + strlen (s) < ref + sizeof (ref));
+ strcpy (refp, s); refp += strlen (s);
+ PBPROC_TRACE (FSM_RX_FC, 8, 8,
+ 0x87a9cbac, 0x6532fa4a, 0x00000043, 0xdeadde00);
+ s = "[0x00000009] fsm RX FC pre_date=0x00000009"
+ " RSOF snid=6 dtei=0x12 lid=0x0c bdf pb136 sppb=0x20 fl_av=2321"
+ " tmi=13 num_sym=3 sackt0=0x1 sacki0=0x1234567 sacki1=0x89ab\n";
+ dbg_assert (refp + strlen (s) < ref + sizeof (ref));
+ strcpy (refp, s); refp += strlen (s);
+ PBPROC_TRACE (FSM_RX_FC, 9, 9,
+ 0xe4451265, 0x01234567, 0xdb8089ab, 0xdeadde20);
+ s = "[0x0000000a] fsm RX FC pre_date=0x0000000a"
+ " RSOF snid=A9 dtei=0xed lid=0x03 sppb=0x73 fl_av=1774 tmi=18"
+ " num_sym=0 sackt0=0x2 sacki0=0xfedcba98 sacki1=0x1f7654\n";
+ dbg_assert (refp + strlen (s) < ref + sizeof (ref));
+ strcpy (refp, s); refp += strlen (s);
+ PBPROC_TRACE (FSM_RX_FC, 10, 10,
+ 0x1bbaed9d, 0xfedcba98, 0x247f7654, 0xdeadde73);
+ s = "---trace-end---\n";
+ dbg_assert (refp + strlen (s) < ref + sizeof (ref));
+ strcpy (refp, s); refp += strlen (s);
+ test_pbproc_trace_dump_t dump;
+ dump.size = 0;
+ trace_buffer_dump (&ctx->trace, test_pbproc_trace_dump_callback,
+ &dump);
+ test_fail_unless (strcmp (dump.text, ref) == 0);
+ } test_end;
+ test_pbproc_uninit (&tp);
+}
+
+int
+main (int argc, char **argv)
+{
+ test_t t;
+ trace_init ();
+ test_init (t, argc, argv);
+ test_pbproc_init_suite (t);
+ prep_mpdu_test_suite (t);
+ tx_data_test_suite (t);
+ tx_sound_test_suite (t);
+ rx_data_test_suite (t);
+ rx_sound_test_suite (t);
+ test_pbproc_trace_suite (t);
+ trace_uninit ();
+ test_result (t);
+ return test_nb_failed (t) == 0 ? 0 : 1;
+}
+
diff --git a/cesar/mac/pbproc/test/pbproc_eoc/src/tx_data.c b/cesar/mac/pbproc/test/pbproc_eoc/src/tx_data.c
new file mode 100644
index 0000000000..556d043862
--- /dev/null
+++ b/cesar/mac/pbproc/test/pbproc_eoc/src/tx_data.c
@@ -0,0 +1,923 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2007 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/tx_data.c
+ * \brief TX Data automaton test.
+ * \ingroup test
+ */
+#include "common/std.h"
+
+#include "lib/scenario/scenario.h"
+
+#include "inc/test_pbproc.h"
+#include "inc/utils.h"
+
+#include "mac/common/timings.h"
+
+/** TX common test parameters. */
+struct tx_data_test_common_param_t
+{
+ /** Duration of the access, measured as a number of symbol, default to
+ * symb_nb if 0. */
+ uint duration_symb_nb;
+ /** Number of symbols. */
+ uint symb_nb;
+ /** Expected total number of segments. */
+ uint seg_nb_total;
+ /** Tonemap index. */
+ uint tmi;
+ /** Tonemap uniform modulation, or 0 to reuse previous one. */
+ uint tm_mod;
+ /** Whether spoc_update_step is valid. */
+ bool spoc;
+ /** SPOC update step. */
+ phy_prepare_type_t spoc_update_step;
+ /** MFS FSM response in SACK, default to ACK. */
+ mfs_fsm_rsp_t sack_mfs_fsm_rsp;
+ /** MFS window size in SACK. */
+ mfs_window_size_idx_t sack_window_size;
+ /** TX while in RE_SYNC, seen on stats. */
+ bool re_sync;
+ /** No acknowledgment, access event. */
+ bool noack_access;
+ /** No acknowledgment, unexpected FC received. */
+ bool noack_fc;
+ /** EoC RSOF. */
+ bool eoc_rsof;
+};
+typedef struct tx_data_test_common_param_t tx_data_test_common_param_t;
+
+#define tx_data_test_common(t, tp, date, mfs, params...) \
+ tx_data_test_common_f ((t), (tp), (date), (mfs), \
+ &(struct tx_data_test_common_param_t) { params })
+
+void
+tx_data_test_common_f (test_t t, test_pbproc_t *tp, u32 date, mfs_tx_t *mfs,
+ const tx_data_test_common_param_t *p)
+{
+ test_within (t);
+ dbg_assert (mfs);
+ const uint stei = mfs->common.unassociated ? 0 : tp->config.tei;
+ const uint dtei = mfs->common.tei;
+ const uint beacon_tck = MAC_MS_TO_TCK (1000) / 50;
+ tonemap_t *tm = &tp->config.tonemask_info.tonemap_robo[PHY_MOD_ROBO];
+ uint dx = MAC_DX417_TCK;
+ uint tmi = p->tmi;
+ if (tmi != PHY_MOD_ROBO)
+ tm = utils_sta_prepare_default_tonemap (tp, true, dtei, tmi,
+ p->tm_mod, 0, &dx);
+ uint rifs_tck = tmi < PHY_MOD_ROBO_NB ? MAC_RIFS_DEFAULT_TCK
+ : MAC_RIFS_SPC_ANY_TCK;
+ uint duration_symb_nb = p->duration_symb_nb
+ ? p->duration_symb_nb : p->symb_nb;
+ uint duration_tck = MAC_PREAMBLE_TCK + MAC_FC_AV_TCK
+ + MAC_PAYLOAD_TCK (duration_symb_nb, dx) + MAC_RIFS_DEFAULT_TCK
+ + MAC_PREAMBLE_TCK + MAC_FC_AV_TCK;
+ bool spoc_preamble = p->spoc
+ && p->spoc_update_step == PHY_PREPARE_TYPE_PREAMBLE;
+ test_pbproc_alloc (tp, false, date / beacon_tck * beacon_tck);
+ ca_access_param_t access = {
+ .access_date = date,
+ .duration_tck = duration_tck,
+ .prp = true,
+ .cfp = p->eoc_rsof,
+ };
+ ca_access_param_t noack_access = {
+ .access_date = date,
+ .duration_tck = duration_tck,
+ .prp = false,
+ .cfp = p->eoc_rsof,
+ };
+ dbg_assert (MFS_FSM_RSP_ACK == 0); /* Check default is fine. */
+ pbproc_fc_sack_t sack_fc = {
+ .dt_av = PBPROC_FC_DT_SACK,
+ .access = false,
+ .snid = tp->snid,
+ .dtei = !p->noack_fc ? stei : stei + 1,
+ .cfs = false,
+ .bdf = true,
+ .svn = 0,
+ .rrtf = false,
+ .mfs_rsp_data = p->sack_mfs_fsm_rsp,
+ .mfs_rsp_mgmt = MFS_FSM_RSP_ACK,
+ .sackt3 = 0,
+ .sackt2 = 0,
+ .sackt1 = 0,
+ .sackt0 = 0,
+ .sacki = { 0, 0 },
+ .sacki_last = p->sack_window_size << 4,
+ .fccs_av = 0,
+ };
+ tp->pbproc->recv_mpdu.rx_params.bbf = p->eoc_rsof;
+ const uint pre_fc_fl_tck = MAC_PREAMBLE_TCK + MAC_FC_AV_TCK
+ + MAC_PAYLOAD_TCK (p->symb_nb, dx) + rifs_tck;
+ scenario_entry_t ack_entries[] = {
+ SCENARIO_ACTION (phy_rx_fc, .rx_date = date + pre_fc_fl_tck,
+ .fc_av = (u32 *) &sack_fc),
+ SCENARIO_EVENT (phy_rx_prepare_short),
+ SCENARIO_EVENT (ca_access_done),
+ SCENARIO_EVENT_COND (!access.cfp, ca_backoff_success),
+ SCENARIO_EVENT (ca_access_vcs_restart,
+ .end_date = date + pre_fc_fl_tck + MAC_PREAMBLE_TCK
+ + MAC_FC_AV_TCK + MAC_CIFS_TCK),
+ SCENARIO_END
+ };
+ scenario_entry_t noack_access_entries[] = {
+ SCENARIO_ACTION (phy_access, .mfs = NULL,
+ .access_param = &noack_access),
+ SCENARIO_EVENT (ca_access_done),
+ /* TODO: remove this EoC speciality. */
+ SCENARIO_EVENT (ca_access_vcs_restart,
+ .end_date = noack_access.access_date
+ - PBPROC_ANTICIP_TCK + MAC_PREAMBLE_TCK
+ + MAC_FC_AV_TCK + MAC_CIFS_TCK),
+ SCENARIO_END
+ };
+ scenario_entry_t noack_fc_entries[] = {
+ SCENARIO_ACTION (phy_rx_fc, .rx_date = date + pre_fc_fl_tck,
+ .fc_av = (u32 *) &sack_fc),
+ SCENARIO_EVENT (phy_tx_cancel),
+ SCENARIO_EVENT (ca_access_hold),
+ SCENARIO_EVENT (phy_rx_prepare_short),
+ SCENARIO_EVENT (ca_access_vcs_restart,
+ .end_date = date + pre_fc_fl_tck + MAC_PREAMBLE_TCK
+ + MAC_FC_AV_TCK + MAC_CIFS_TCK),
+ SCENARIO_EVENT (ca_access_done),
+ SCENARIO_END
+ };
+ scenario_entry_t *ack_noack_entries = ack_entries;
+ if (p->noack_access)
+ ack_noack_entries = noack_access_entries;
+ else if (p->noack_fc)
+ ack_noack_entries = noack_fc_entries;
+ bool long_ppdu = p->seg_nb_total != 0;
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (phy_access, .mfs = mfs, .access_param = &access,
+ .prp_won = true, .slot_count = 2),
+ SCENARIO_EVENT (ca_access_hold),
+ SCENARIO_EVENT (ca_access_get_mfs),
+ SCENARIO_EVENT_COND (!long_ppdu, phy_tx_param_short,
+ .fc_mode = PHY_FC_MODE_AV_1),
+ SCENARIO_EVENT_COND (long_ppdu, phy_pbdma_start, .bypass_aes = true,
+ .nb_total = p->seg_nb_total,
+ .nb_pb_it = 0, .chandata = false, .now = false),
+ SCENARIO_EVENT_COND (long_ppdu && tmi >= PHY_MOD_ROBO_NB,
+ phy_set_tonemap),
+ SCENARIO_EVENT_COND (long_ppdu, phy_tx_param,
+ .fc_mode = PHY_FC_MODE_AV_1,
+ .mod = tmi < PHY_MOD_ROBO_NB ? tmi : PHY_MOD_TM,
+ .fecrate = tm->fecrate, .pb_size = PHY_PB_SIZE_520,
+ .gil = PHY_GIL_417, .symbol_nb = p->symb_nb),
+ SCENARIO_EVENT (phy_tx_frame, .date = date, .want_conf = true,
+ .stop_tx_on_prp_lost = true),
+ SCENARIO_EVENT (ca_access_vcs_restart_eifs, .start_date = date),
+ SCENARIO_ACTION (phy_access_conf),
+ SCENARIO_EVENT_COND (long_ppdu, phy_tx_prepare),
+ SCENARIO_EVENT (ca_backoff_deferred, .slot_count = 0),
+ SCENARIO_EVENT (ca_access_vcs_restart_eifs,
+ .start_date = date + pre_fc_fl_tck),
+ SCENARIO_EVENT (phy_rx_activate, .now = false,
+ .date = date + pre_fc_fl_tck,
+ .pre_detection = true),
+ SCENARIO_EVENT_COND (p->spoc, phy_extra_timer_program,
+ .date = date + pre_fc_fl_tck - rifs_tck),
+ SCENARIO_ACTION_COND (p->spoc, phy_extra_timer),
+ SCENARIO_EVENT_COND (spoc_preamble, phy_spoc_tx_set),
+ SCENARIO_EVENT_COND (p->spoc, phy_prepare,
+ .type = p->spoc_update_step, .wait = false),
+ SCENARIO_EVENT_COND (spoc_preamble, phy_spoc_rx_set),
+ SCENARIO_EVENT_COND (spoc_preamble, phy_freq_error_set, .sync = true,
+ .rho_q30 = 42),
+ SCENARIO_SUB (ack_noack_entries),
+ SCENARIO_END
+ };
+ scenario_globals_t globals = {
+ .tp = tp,
+ };
+ test_pbproc_check_stats_reset (tp);
+ mfs->no_reply_count = 2;
+ scenario_run (t, entries, &globals);
+ bool ack = !(p->noack_access || p->noack_fc);
+ test_pbproc_check_stats (t, tp, .tx_data = 1, .tx_data_wack = 1,
+ .tx_data_wack_ack = ack ? 1 : 0,
+ .tx_data_wack_noack = ack ? 0 : 1,
+ .tx_data_re_sync = p->re_sync ? 1 : 0,
+ .rx_handle_fc = p->noack_fc ? 1 : 0,
+ .rx_nfu = p->noack_fc ? 1 : 0);
+ test_fail_unless (tp->pbproc->fsm.current_state == PBPROC_FSM_STATE_IDLE);
+ /* TODO: this is too permissive: */
+ test_fail_unless (!ack || mfs->no_reply_count == 0);
+}
+
+void
+tx_data_test (test_t t, test_pbproc_t *tp, u32 date, uint mfs_seg_nb,
+ uint duration_symb_nb, uint symb_nb, uint seg_nb_total,
+ bool unassociated, uint tmi)
+{
+ test_within (t);
+ const uint lid = 1;
+ const uint dtei = 2;
+ mfs_tx_t *mfs = utils_mfs_tx_prepare (false, false, lid, dtei,
+ mfs_seg_nb);
+ mfs->common.unassociated = unassociated;
+ tx_data_test_common (t, tp, date, mfs,
+ .duration_symb_nb = duration_symb_nb,
+ .symb_nb = symb_nb, .seg_nb_total = seg_nb_total,
+ .tmi = tmi);
+ test_fail_unless (mfs->stats.num_mpdus == 1);
+ test_fail_unless (mfs->stats.num_bursts == 1);
+ test_fail_unless (mfs->stats.num_pbs == seg_nb_total);
+ test_fail_unless (mfs->stats.num_segs_suc == seg_nb_total);
+ utils_mfs_tx_cleanup (mfs);
+ if (tmi != PHY_MOD_ROBO)
+ dbg_check (mac_store_sta_remove (tp->store, dtei));
+}
+
+void
+tx_data_test_eoc_rsof (test_t t, test_pbproc_t *tp, u32 date, uint mfs_seg_nb,
+ uint duration_symb_nb, uint symb_nb, uint seg_nb_total,
+ uint tmi)
+{
+ test_within (t);
+ const uint lid = 4;
+ const uint dtei = 1;
+ tp->config.tei = 6;
+ mfs_tx_t *mfs = utils_mfs_tx_prepare (false, false, lid, dtei,
+ mfs_seg_nb);
+ tx_data_test_common (t, tp, date, mfs,
+ .duration_symb_nb = duration_symb_nb,
+ .symb_nb = symb_nb, .seg_nb_total = seg_nb_total,
+ .tmi = tmi, .eoc_rsof = true);
+ test_fail_unless (mfs->stats.num_mpdus == 1);
+ test_fail_unless (mfs->stats.num_bursts == 1);
+ test_fail_unless (mfs->stats.num_pbs == seg_nb_total);
+ test_fail_unless (mfs->stats.num_segs_suc == seg_nb_total);
+ utils_mfs_tx_cleanup (mfs);
+ if (tmi != PHY_MOD_ROBO)
+ dbg_check (mac_store_sta_remove (tp->store, dtei));
+ tp->config.tei = 1;
+}
+
+void
+tx_data_noack_test (test_t t, test_pbproc_t *tp, u32 date, bool access)
+{
+ test_within (t);
+ const uint lid = 1;
+ const uint dtei = 2;
+ mfs_tx_t *mfs = utils_mfs_tx_prepare (false, false, lid, dtei, 1);
+ tx_data_test_common (t, tp, date, mfs, .duration_symb_nb = 50,
+ .symb_nb = 19, .seg_nb_total = 1,
+ .noack_access = access, .noack_fc = !access);
+ test_fail_unless (mfs->stats.num_mpdus == 1);
+ test_fail_unless (mfs->stats.num_bursts == 1);
+ test_fail_unless (mfs->stats.num_pbs == 1);
+ test_fail_unless (mfs->stats.num_segs_suc == 0);
+ utils_mfs_tx_cleanup (mfs);
+}
+
+void
+tx_data_woack_test (test_t t, test_pbproc_t *tp, u32 date, uint mfs_seg_nb,
+ uint duration_symb_nb, uint symb_nb,
+ uint data_seg_nb_total)
+{
+ test_within (t);
+ const uint lid = 1;
+ const uint dtei = 0xff;
+ const uint beacon_tck = MAC_MS_TO_TCK (1000) / 50;
+ uint duration_tck = MAC_PREAMBLE_TCK + MAC_FC_AV_TCK
+ + MAC_PAYLOAD_TCK (duration_symb_nb, MAC_DX417_TCK)
+ + MAC_RIFS_DEFAULT_TCK + MAC_PREAMBLE_TCK + MAC_FC_AV_TCK;
+ mfs_tx_t *mfs = utils_mfs_tx_prepare (true, false, lid, dtei, mfs_seg_nb);
+ test_pbproc_alloc (tp, false, date / beacon_tck * beacon_tck);
+ ca_access_param_t access = {
+ .access_date = date,
+ .duration_tck = duration_tck,
+ .prp = true,
+ .cfp = false,
+ };
+ const uint pre_fc_fl_tck = MAC_PREAMBLE_TCK + MAC_FC_AV_TCK
+ + MAC_PAYLOAD_TCK (symb_nb, MAC_DX417_TCK) + MAC_RIFS_DEFAULT_TCK;
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (phy_access, .mfs = mfs, .access_param = &access,
+ .prp_won = true, .slot_count = 2),
+ SCENARIO_EVENT (ca_access_hold),
+ SCENARIO_EVENT (ca_access_get_mfs),
+ SCENARIO_EVENT (phy_pbdma_start, .bypass_aes = true,
+ .nb_total = data_seg_nb_total,
+ .nb_pb_it = data_seg_nb_total,
+ .chandata = false, .now = false),
+ SCENARIO_EVENT (phy_tx_param, .fc_mode = PHY_FC_MODE_AV_1,
+ .mod = PHY_MOD_ROBO, .fecrate = PHY_FEC_RATE_1_2,
+ .pb_size = PHY_PB_SIZE_520, .gil = PHY_GIL_417,
+ .symbol_nb = symb_nb),
+ SCENARIO_EVENT (phy_tx_frame, .date = date, .want_conf = true,
+ .stop_tx_on_prp_lost = true),
+ SCENARIO_EVENT (ca_access_vcs_restart_eifs, .start_date = date),
+ SCENARIO_ACTION (phy_access_conf),
+ SCENARIO_EVENT (phy_tx_prepare),
+ SCENARIO_EVENT (ca_access_hold),
+ SCENARIO_ACTION (phy_pbdma, .pb_it = true, .end_tx_pb = true),
+ SCENARIO_EVENT (ca_access_done),
+ SCENARIO_EVENT (ca_backoff_success),
+ SCENARIO_EVENT (ca_access_vcs_restart,
+ .end_date = date + pre_fc_fl_tck + MAC_PREAMBLE_TCK
+ + MAC_FC_AV_TCK + MAC_CIFS_TCK),
+ SCENARIO_END
+ };
+ scenario_globals_t globals = {
+ .tp = tp,
+ };
+ test_pbproc_check_stats_reset (tp);
+ scenario_run (t, entries, &globals);
+ test_pbproc_check_stats (t, tp, .tx_data = 1, .tx_data_woack = 1);
+ test_fail_unless (mfs->fsm_state == MFS_FSM_CMD_NOP);
+ test_fail_unless (mfs->stats.num_mpdus == 1);
+ test_fail_unless (mfs->stats.num_bursts == 1);
+ test_fail_unless (mfs->stats.num_pbs == data_seg_nb_total);
+ test_fail_unless (mfs->stats.num_segs_suc == data_seg_nb_total);
+ utils_mfs_tx_cleanup (mfs);
+ test_fail_unless (tp->pbproc->fsm.current_state == PBPROC_FSM_STATE_IDLE);
+}
+
+void
+tx_data_noseg_test (test_t t, test_pbproc_t *tp, u32 date,
+ uint duration_symb_nb, bool prp_won, bool got_mfs,
+ bool late)
+{
+ test_within (t);
+ const uint lid = 1;
+ const uint dtei = 2;
+ const uint beacon_tck = MAC_MS_TO_TCK (1000) / 50;
+ uint duration_tck = MAC_PREAMBLE_TCK + MAC_FC_AV_TCK
+ + MAC_PAYLOAD_TCK (duration_symb_nb, MAC_DX417_TCK)
+ + MAC_RIFS_DEFAULT_TCK + MAC_PREAMBLE_TCK + MAC_FC_AV_TCK;
+ mfs_tx_t *mfs = got_mfs
+ ? utils_mfs_tx_prepare (false, false, lid, dtei, late ? 1 : 0)
+ : NULL;
+ test_pbproc_alloc (tp, false, date / beacon_tck * beacon_tck);
+ ca_access_param_t access = {
+ .access_date = date,
+ .duration_tck = duration_tck,
+ .prp = true,
+ .cfp = false,
+ };
+ scenario_entry_t *entries;
+ scenario_entry_t entries_prp_won[] = {
+ SCENARIO_ACTION (phy_access, .mfs = mfs, .access_param = &access,
+ .prp_won = true, .slot_count = 0,
+ .delay_tck = late ? PBPROC_ANTICIP_TCK : 0),
+ SCENARIO_EVENT (ca_access_hold),
+ SCENARIO_EVENT (ca_access_get_mfs),
+ SCENARIO_EVENT_COND (late, ca_access_done),
+ /* TODO: why this? */
+ SCENARIO_EVENT (ca_backoff_deferred,
+ .slot_count = access.duration_tck / MAC_SLOT_TCK),
+ SCENARIO_EVENT (ca_access_done),
+ SCENARIO_EVENT (ca_access_defer, .date = date),
+ SCENARIO_END
+ };
+ scenario_entry_t entries_prp_lost[] = {
+ SCENARIO_ACTION (phy_access, .mfs = mfs, .access_param = &access,
+ .prp_won = false, .slot_count = 0),
+ SCENARIO_EVENT (ca_access_hold),
+ SCENARIO_EVENT (ca_backoff_cancel),
+ SCENARIO_EVENT (ca_access_vcs_restart_eifs,
+ .start_date = phy_date ()),
+ SCENARIO_END
+ };
+ entries = prp_won ? entries_prp_won : entries_prp_lost;
+ scenario_globals_t globals = {
+ .tp = tp,
+ };
+ test_pbproc_check_stats_reset (tp);
+ scenario_run (t, entries, &globals);
+ test_pbproc_check_stats (t, tp,
+ .prp_lost = prp_won ? 0 : 1,
+ .tx_invalid = (late || prp_won) ? 1 : 0,
+ .tx_late = late ? 1 : 0);
+ if (mfs)
+ {
+ test_fail_unless (mfs->fsm_state == MFS_FSM_CMD_INIT);
+ test_fail_unless (mfs->stats.num_mpdus == 0);
+ test_fail_unless (mfs->stats.num_bursts == 0);
+ test_fail_unless (mfs->stats.num_pbs == 0);
+ test_fail_unless (mfs->stats.num_segs_suc == 0);
+ utils_mfs_tx_cleanup (mfs);
+ }
+ test_fail_unless (tp->pbproc->fsm.current_state == PBPROC_FSM_STATE_IDLE);
+}
+
+void
+tx_data_beacon_test (test_t t, test_pbproc_t *tp, u32 date,
+ uint duration_symb_nb, uint symb_nb)
+{
+ test_within (t);
+ const uint beacon_tck = MAC_MS_TO_TCK (1000) / 50;
+ bool hybrid = false;
+ uint pre_fc_tck = hybrid
+ ? MAC_PREAMBLE_HYBRID_TCK + MAC_FC_10_TCK + MAC_FC_AV_TCK
+ : MAC_PREAMBLE_TCK + MAC_FC_AV_TCK;
+ uint duration_tck = pre_fc_tck + MAC_PAYLOAD_TCK (6, MAC_DX567_TCK)
+ + MAC_B2BIFS_TCK;
+ mfs_tx_t *mfs = utils_mfs_tx_prepare (true, false, MAC_LID_SPC_CENTRAL,
+ MAC_TEI_BCAST, 0);
+ mfs->cfp = true;
+ mfs->beacon = true;
+ pb_beacon_t *pb = PARENT_OF (pb_beacon_t, blk, blk_alloc_desc ());
+ pbproc_tx_beacon_params_t params = {
+ { 0x0123, 0x4242, 0xabab, 0x5555 }, pb->data + 123
+ };
+ pbproc_mfs_beacon_prepare (tp->pbproc, mfs, pb, &params);
+ test_pbproc_alloc (tp, hybrid, date / beacon_tck * beacon_tck);
+ ca_access_param_t access = {
+ .access_date = date,
+ .duration_tck = duration_tck,
+ .prp = false,
+ .cfp = true,
+ };
+ const uint pre_fc_fl_tck = pre_fc_tck
+ + MAC_PAYLOAD_TCK (symb_nb, MAC_DX567_TCK) + MAC_B2BIFS_TCK;
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (phy_access, .mfs = mfs, .access_param = &access,
+ .prp_won = true, .slot_count = 0),
+ SCENARIO_EVENT (ca_access_hold),
+ SCENARIO_EVENT (ca_access_get_mfs),
+ SCENARIO_EVENT_COND (hybrid, phy_tx_fc10, .date = date, .fc10 = 0x2f00),
+ SCENARIO_EVENT (phy_pbdma_start, .bypass_aes = true, .nb_total = 1,
+ .nb_pb_it = 1, .chandata = false, .now = false),
+ SCENARIO_EVENT (phy_tx_param, .fc_mode = hybrid ? PHY_FC_MODE_HYBRID_1
+ : PHY_FC_MODE_AV_1,
+ .mod = PHY_MOD_MINI_ROBO, .fecrate = PHY_FEC_RATE_1_2,
+ .pb_size = PHY_PB_SIZE_136, .gil = PHY_GIL_567,
+ .symbol_nb = symb_nb),
+ SCENARIO_EVENT (phy_tx_frame, .date = date, .want_conf = true,
+ .stop_tx_on_prp_lost = false),
+ SCENARIO_EVENT (ca_access_vcs_restart_eifs, .start_date = date),
+ SCENARIO_ACTION (phy_access_conf),
+ SCENARIO_EVENT (phy_tx_prepare),
+ SCENARIO_EVENT (ca_access_hold),
+ SCENARIO_ACTION (phy_pbdma, .pb_it = true, .end_tx_pb = true),
+ SCENARIO_EVENT (ca_access_done),
+ SCENARIO_EVENT (ca_backoff_success),
+ SCENARIO_EVENT (ca_access_vcs_restart,
+ .end_date = date + pre_fc_fl_tck),
+ SCENARIO_END
+ };
+ scenario_globals_t globals = {
+ .tp = tp,
+ };
+ test_pbproc_check_stats_reset (tp);
+ scenario_run (t, entries, &globals);
+ test_pbproc_check_stats (t, tp, .tx_data = 1, .tx_data_beacon = 1);
+ test_fail_unless (mfs->stats.num_mpdus == 1);
+ test_fail_unless (mfs->stats.num_bursts == 1);
+ test_fail_unless (mfs->stats.num_pbs == 1);
+ test_fail_unless (mfs->stats.num_segs_suc == 1);
+ utils_mfs_tx_cleanup (mfs);
+ test_fail_unless (tp->pbproc->fsm.current_state == PBPROC_FSM_STATE_IDLE);
+}
+
+void
+tx_data_spoc_test (test_t t, test_pbproc_t *tp,
+ phy_prepare_type_t spoc_update_step)
+{
+ test_within (t);
+ const uint lid = 1;
+ const uint dtei = 2;
+ mfs_tx_t *mfs = utils_mfs_tx_prepare (false, false, lid, dtei, 5);
+ tx_data_test_common (t, tp, 5462132, mfs, .symb_nb = 50,
+ .duration_symb_nb = 50,
+ .seg_nb_total = 5,
+ .tmi = PHY_MOD_HS_ROBO,
+ .spoc = spoc_update_step != PHY_PREPARE_TYPE_NB,
+ .spoc_update_step = spoc_update_step);
+ test_fail_unless (mfs->stats.num_mpdus == 1);
+ test_fail_unless (mfs->stats.num_bursts == 1);
+ test_fail_unless (mfs->stats.num_pbs == 5);
+ test_fail_unless (mfs->stats.num_segs_suc == 5);
+ utils_mfs_tx_cleanup (mfs);
+ dbg_check (mac_store_sta_remove (tp->store, dtei));
+}
+
+void
+tx_data_basic_test_case (test_t t)
+{
+ test_pbproc_t tp;
+ test_case_begin (t, "basic");
+ test_pbproc_init (&tp);
+ test_begin (t, "unicast")
+ {
+ tx_data_test (t, &tp, 5462132, 30, 50, 50, 5, false, PHY_MOD_HS_ROBO);
+ tx_data_test (t, &tp, 5462132, 30, 50, 38, 2, true, PHY_MOD_ROBO);
+ } test_end;
+ test_begin (t, "unicast rsof")
+ {
+ tx_data_test_eoc_rsof (t, &tp, 5462132, 30, 50, 50, 5, PHY_MOD_HS_ROBO);
+ } test_end;
+ test_begin (t, "unicast rsof empty")
+ {
+ tx_data_test_eoc_rsof (t, &tp, 5462132, 0, 30, 0, 0, PHY_MOD_ROBO);
+ } test_end;
+ test_begin (t, "no seg prp won")
+ {
+ tx_data_noseg_test (t, &tp, 5462132, 95, true, true, false);
+ } test_end;
+ test_begin (t, "no seg prp lost")
+ {
+ tx_data_noseg_test (t, &tp, 5462132, 95, false, true, false);
+ } test_end;
+ test_begin (t, "no mfs prp won")
+ {
+ tx_data_noseg_test (t, &tp, 5462132, 95, true, false, false);
+ } test_end;
+ test_begin (t, "no mfs prp lost")
+ {
+ tx_data_noseg_test (t, &tp, 5462132, 95, false, false, false);
+ } test_end;
+ test_begin (t, "multicast")
+ {
+ tx_data_woack_test (t, &tp, 5462132, 30, 95, 38, 2);
+ } test_end;
+ test_begin (t, "beacon")
+ {
+ tx_data_beacon_test (t, &tp, 123, 6, 6);
+ } test_end;
+ test_pbproc_uninit (&tp);
+}
+
+void
+tx_data_spoc_test_case (test_t t)
+{
+ test_pbproc_t tp;
+ test_case_begin (t, "spoc");
+ test_pbproc_init (&tp);
+ s32 rho_q30 = 42;
+ pbproc_spoc_update (tp.pbproc, true, rho_q30);
+ test_begin (t, "preamble")
+ {
+ tx_data_spoc_test (t, &tp, PHY_PREPARE_TYPE_PREAMBLE);
+ test_fail_unless (tp.pbproc->spoc_update.step
+ == PHY_PREPARE_TYPE_PRS);
+ test_fail_unless (tp.pbproc->spoc_update.coeff == NULL);
+ } test_end;
+ test_begin (t, "prs")
+ {
+ tx_data_spoc_test (t, &tp, PHY_PREPARE_TYPE_PRS);
+ test_fail_unless (tp.pbproc->spoc_update.step
+ == PHY_PREPARE_TYPE_NB);
+ } test_end;
+ test_begin (t, "done")
+ {
+ tx_data_spoc_test (t, &tp, PHY_PREPARE_TYPE_NB);
+ } test_end;
+ test_pbproc_uninit (&tp);
+}
+
+void
+tx_data_cancel_test (test_t t, test_pbproc_t *tp, bool prp_won, bool rx_fc)
+{
+ test_within (t);
+ const uint lid = 1;
+ const uint dtei = 2;
+ const uint date = 123456;
+ const uint beacon_tck = MAC_MS_TO_TCK (1000) / 50;
+ mfs_tx_t *mfs = utils_mfs_tx_prepare (false, false, lid, dtei, 1);
+ test_pbproc_alloc (tp, false, date / beacon_tck * beacon_tck);
+ ca_access_param_t access = {
+ .access_date = date,
+ .duration_tck = MAC_PREAMBLE_TCK + MAC_FC_AV_TCK
+ + MAC_PAYLOAD_TCK (19, MAC_DX417_TCK) + MAC_RIFS_DEFAULT_TCK +
+ MAC_PREAMBLE_TCK + MAC_FC_AV_TCK,
+ .prp = true,
+ .cfp = false,
+ };
+ const uint date2 = 123456 + MAC_EIFS_AV_TCK;
+ ca_access_param_t access2 = {
+ .access_date = date2,
+ .duration_tck = MAC_PREAMBLE_TCK + MAC_FC_AV_TCK
+ + MAC_PAYLOAD_TCK (19, MAC_DX417_TCK) + MAC_RIFS_DEFAULT_TCK +
+ MAC_PREAMBLE_TCK + MAC_FC_AV_TCK,
+ .prp = false,
+ .cfp = false,
+ };
+ const uint date3 = date2 + MAC_PREAMBLE_TCK + MAC_FC_AV_TCK + MAC_CIFS_TCK
+ - PBPROC_ANTICIP_TCK;
+ ca_access_param_t access3 = {
+ .access_date = date3,
+ .duration_tck = MAC_PREAMBLE_TCK + MAC_FC_AV_TCK
+ + MAC_PAYLOAD_TCK (19, MAC_DX417_TCK) + MAC_RIFS_DEFAULT_TCK +
+ MAC_PREAMBLE_TCK + MAC_FC_AV_TCK,
+ .prp = false,
+ .cfp = false,
+ };
+ pbproc_fc_sack_t sack_fc = {
+ .dt_av = PBPROC_FC_DT_SACK,
+ .access = false,
+ .snid = tp->snid,
+ .dtei = tp->config.tei + 8,
+ .cfs = false,
+ .bdf = true,
+ .svn = 0,
+ .rrtf = false,
+ .mfs_rsp_data = MFS_FSM_RSP_ACK,
+ .mfs_rsp_mgmt = MFS_FSM_RSP_ACK,
+ .sackt3 = 0,
+ .sackt2 = 0,
+ .sackt1 = 0,
+ .sackt0 = 0,
+ .sacki = { 0, 0 },
+ .sacki_last = 0,
+ .fccs_av = 0,
+ };
+ uint sack_length_tck = MAC_PREAMBLE_TCK + MAC_FC_AV_TCK + MAC_CIFS_TCK;
+ scenario_entry_t sack_entries[] = {
+ SCENARIO_ACTION (phy_access, .mfs = mfs, .access_param = &access,
+ .prp_won = true, .slot_count = 6),
+ SCENARIO_EVENT (ca_access_hold),
+ SCENARIO_EVENT (ca_access_get_mfs),
+ SCENARIO_EVENT (phy_pbdma_start, .bypass_aes = true, .nb_total = 1,
+ .nb_pb_it = 0, .chandata = false, .now = false),
+ SCENARIO_EVENT (phy_tx_param, .fc_mode = PHY_FC_MODE_AV_1,
+ .mod = PHY_MOD_ROBO, .fecrate = PHY_FEC_RATE_1_2,
+ .pb_size = PHY_PB_SIZE_520, .gil = PHY_GIL_417,
+ .symbol_nb = 19),
+ SCENARIO_EVENT (phy_tx_frame, .date = date, .want_conf = true,
+ .stop_tx_on_prp_lost = true),
+ SCENARIO_EVENT (ca_access_vcs_restart_eifs, .start_date = date),
+ SCENARIO_ACTION (phy_rx_fc, .rx_date = date - MAC_SLOT_TCK,
+ .prp_won = prp_won, .slot_count = 5,
+ .fc_av = PARENT_OF (pbproc_fc_t, sack,
+ &sack_fc)->words),
+ SCENARIO_EVENT_COND (prp_won, ca_backoff_deferred, .slot_count = 3),
+ SCENARIO_EVENT_COND (!prp_won, ca_backoff_cancel),
+ SCENARIO_EVENT (phy_tx_cancel),
+ SCENARIO_EVENT (ca_access_hold),
+ SCENARIO_EVENT (phy_rx_prepare_short),
+ SCENARIO_EVENT (ca_access_vcs_restart,
+ .end_date = date - MAC_SLOT_TCK + sack_length_tck),
+ SCENARIO_EVENT (ca_access_done),
+ SCENARIO_END
+ };
+ scenario_entry_t access_entries[] = {
+ SCENARIO_ACTION (phy_access, .mfs = mfs, .access_param = &access,
+ .prp_won = true, .slot_count = 6),
+ SCENARIO_EVENT (ca_access_hold),
+ SCENARIO_EVENT (ca_access_get_mfs),
+ SCENARIO_EVENT (phy_pbdma_start, .bypass_aes = true, .nb_total = 1,
+ .nb_pb_it = 0, .chandata = false, .now = false),
+ SCENARIO_EVENT (phy_tx_param, .fc_mode = PHY_FC_MODE_AV_1,
+ .mod = PHY_MOD_ROBO, .fecrate = PHY_FEC_RATE_1_2,
+ .pb_size = PHY_PB_SIZE_520, .gil = PHY_GIL_417,
+ .symbol_nb = 19),
+ SCENARIO_EVENT (phy_tx_frame, .date = date, .want_conf = true,
+ .stop_tx_on_prp_lost = true),
+ SCENARIO_EVENT (ca_access_vcs_restart_eifs, .start_date = date),
+ SCENARIO_ACTION (phy_access, .mfs = mfs, .access_param = &access2,
+ .prp_won = prp_won, .slot_count = 600),
+ SCENARIO_EVENT (ca_access_done),
+ /* TODO: remove this EoC speciality. */
+ SCENARIO_EVENT (ca_access_vcs_restart, .end_date = date3),
+ SCENARIO_ACTION (phy_access, .mfs = mfs, .access_param = &access3,
+ .prp_won = prp_won, .slot_count = 600),
+ SCENARIO_EVENT (ca_access_hold),
+ SCENARIO_EVENT (ca_access_get_mfs),
+ SCENARIO_EVENT (phy_pbdma_start, .bypass_aes = true, .nb_total = 1,
+ .nb_pb_it = 0, .chandata = false, .now = false),
+ SCENARIO_EVENT (phy_tx_param, .fc_mode = PHY_FC_MODE_AV_1,
+ .mod = PHY_MOD_ROBO, .fecrate = PHY_FEC_RATE_1_2,
+ .pb_size = PHY_PB_SIZE_520, .gil = PHY_GIL_417,
+ .symbol_nb = 19),
+ SCENARIO_EVENT (phy_tx_frame, .date = date3, .want_conf = true,
+ .stop_tx_on_prp_lost = false),
+ SCENARIO_EVENT (ca_access_vcs_restart_eifs, .start_date = date3),
+ SCENARIO_ACTION (phy_rx_fc, .rx_date = date3 - MAC_SLOT_TCK,
+ .prp_won = prp_won, .slot_count = 5,
+ .fc_av = PARENT_OF (pbproc_fc_t, sack,
+ &sack_fc)->words),
+ SCENARIO_EVENT (ca_backoff_deferred, .slot_count = 3),
+ SCENARIO_EVENT (phy_tx_cancel),
+ SCENARIO_EVENT (ca_access_hold),
+ SCENARIO_EVENT (phy_rx_prepare_short),
+ SCENARIO_EVENT (ca_access_vcs_restart,
+ .end_date = date3 - MAC_SLOT_TCK + sack_length_tck),
+ SCENARIO_EVENT (ca_access_done),
+ SCENARIO_END
+ };
+ scenario_entry_t *entries = rx_fc ? sack_entries : access_entries;
+ scenario_globals_t globals = {
+ .tp = tp,
+ };
+ test_pbproc_check_stats_reset (tp);
+ scenario_run (t, entries, &globals);
+ test_pbproc_check_stats (
+ t, tp,
+ .prp_lost = prp_won ? 0 : 1,
+ .cw_lost = prp_won || !rx_fc ? 1 : 0,
+ .rx_handle_fc = 1,
+ .rx_nfu = 1,
+ .tx_data = rx_fc ? 1 : 2,
+ .tx_data_cancel = rx_fc ? 1 : 2,
+ );
+ test_fail_unless (mfs->fsm_state == MFS_FSM_CMD_INIT);
+ test_fail_unless (mfs->stats.num_mpdus == 0);
+ test_fail_unless (mfs->stats.num_bursts == 0);
+ test_fail_unless (mfs->stats.num_pbs == 0);
+ test_fail_unless (mfs->stats.num_segs_suc == 0);
+ utils_mfs_tx_cleanup (mfs);
+ test_fail_unless (tp->pbproc->fsm.current_state == PBPROC_FSM_STATE_IDLE);
+}
+
+void
+tx_data_error_test_case (test_t t)
+{
+ test_pbproc_t tp;
+ test_case_begin (t, "error");
+ test_pbproc_init (&tp);
+ test_begin (t, "cw lost")
+ {
+ tx_data_cancel_test (t, &tp, true, true);
+ } test_end;
+ test_begin (t, "prp lost after access")
+ {
+ tx_data_cancel_test (t, &tp, false, true);
+ } test_end;
+ test_begin (t, "prp lost after access and no frame")
+ {
+ tx_data_cancel_test (t, &tp, false, false);
+ } test_end;
+ test_begin (t, "tx late")
+ {
+ tx_data_noseg_test (t, &tp, 5462132, 95, true, true, true);
+ } test_end;
+ test_begin (t, "nack access")
+ {
+ tx_data_noack_test (t, &tp, 5462132, true);
+ } test_end;
+ test_begin (t, "nack fc nfu")
+ {
+ tx_data_noack_test (t, &tp, 5462132, false);
+ } test_end;
+ test_pbproc_uninit (&tp);
+}
+
+enum frame_direction_t
+{
+ FRAME_STA_TO_CCO_DIR = 1,
+ FRAME_CCO_TO_STA_DIR = 0,
+};
+typedef enum frame_direction_t frame_direction_t;
+
+bool
+pbproc_ftda_parse_sackd (pbproc_t *ctx, const pbproc_fc_t *fc_av,
+ pbproc_fc_ack_data_t *ack_data);
+
+void
+tx_data_pg_ack_test (test_t t, test_pbproc_t *tp, uint cfg_tei, uint prep_tei,
+ uint frame_tei, frame_direction_t direction,
+ uint frame_type, bool cancel)
+{
+ test_within (t);
+ tp->config.tei = cfg_tei;
+ dbg_assert (cfg_tei != frame_tei);
+ pbproc_fc_sof_t sof = {
+ .dt_av = PBPROC_FC_DT_SOF,
+ .access = false,
+ .snid = tp->snid,
+ .direction = direction,
+ .dtei = frame_tei,
+ .fccs_av = 0,
+ };
+ pbproc_fc_rsof_t rsof = {
+ .dt_av = PBPROC_FC_DT_RSOF,
+ .access = false,
+ .snid = tp->snid,
+ .dtei = frame_tei,
+ .fccs_av = 0,
+ };
+ pbproc_fc_sound_t sound = {
+ .dt_av = PBPROC_FC_DT_SOUND,
+ .access = false,
+ .snid = tp->snid,
+ .direction = direction,
+ .dtei = frame_tei,
+ .fccs_av = 0,
+ };
+ pbproc_fc_t fc;
+ if (frame_type == PBPROC_FC_DT_SOF)
+ fc.sof = sof;
+ else if (frame_type == PBPROC_FC_DT_RSOF)
+ fc.rsof = rsof;
+ else if (frame_type == PBPROC_FC_DT_SOUND)
+ fc.sound = sound;
+ else
+ dbg_assert_default ();
+ pbproc_prep_mpdu_t *prep = &tp->pbproc->prep_mpdu;
+ prep->valid = true;
+ prep->dtei = prep_tei;
+ /* Run test. */
+ pbproc_fc_ack_data_t ack_data;
+ bool ok = pbproc_ftda_parse_sackd (tp->pbproc, &fc, &ack_data);
+ test_fail_unless (ok == !cancel);
+ /* Cleanup. */
+ prep->valid = true;
+}
+
+void
+tx_data_pg_ack_test_case (test_t t)
+{
+ test_pbproc_t tp;
+ test_case_begin (t, "pg_ack");
+ test_pbproc_init (&tp);
+ tp.pbproc->alloc.snid = tp.snid;
+ /* SOF combination. */
+ test_begin (t, "cco sof")
+ {
+ tx_data_pg_ack_test (t, &tp, 1, 25, 25, FRAME_STA_TO_CCO_DIR,
+ PBPROC_FC_DT_SOF, false);
+ } test_end;
+ test_begin (t, "cco sof wrong direction")
+ {
+ tx_data_pg_ack_test (t, &tp, 1, 25, 25, FRAME_CCO_TO_STA_DIR,
+ PBPROC_FC_DT_SOF, true);
+ } test_end;
+ test_begin (t, "cco sof wrong station")
+ {
+ tx_data_pg_ack_test (t, &tp, 1, 24, 25, FRAME_STA_TO_CCO_DIR,
+ PBPROC_FC_DT_SOF, true);
+ } test_end;
+ test_begin (t, "sta sof")
+ {
+ tx_data_pg_ack_test (t, &tp, 23, 1, 45, FRAME_CCO_TO_STA_DIR,
+ PBPROC_FC_DT_SOF, false);
+ } test_end;
+ test_begin (t, "sta sof wrong direction")
+ {
+ tx_data_pg_ack_test (t, &tp, 23, 1, 25, FRAME_STA_TO_CCO_DIR,
+ PBPROC_FC_DT_SOF, true);
+ } test_end;
+ /* RSOF combination. */
+ test_begin (t, "cco rsof")
+ {
+ tx_data_pg_ack_test (t, &tp, 1, 25, 25, FRAME_STA_TO_CCO_DIR,
+ PBPROC_FC_DT_RSOF, false);
+ } test_end;
+ /* RSOF combination. */
+ test_begin (t, "cco rsof wrong station")
+ {
+ tx_data_pg_ack_test (t, &tp, 1, 24, 25, FRAME_STA_TO_CCO_DIR,
+ PBPROC_FC_DT_RSOF, true);
+ } test_end;
+ test_begin (t, "sta rsof")
+ {
+ tx_data_pg_ack_test (t, &tp, 23, 1, 25, FRAME_STA_TO_CCO_DIR,
+ PBPROC_FC_DT_RSOF, true);
+ } test_end;
+ /* SOUND combination. */
+ test_begin (t, "cco sound")
+ {
+ tx_data_pg_ack_test (t, &tp, 1, 25, 25, FRAME_STA_TO_CCO_DIR,
+ PBPROC_FC_DT_SOUND, false);
+ } test_end;
+ test_begin (t, "cco sound wrong station")
+ {
+ tx_data_pg_ack_test (t, &tp, 1, 24, 25, FRAME_STA_TO_CCO_DIR,
+ PBPROC_FC_DT_SOUND, true);
+ } test_end;
+ test_begin (t, "cco sound wrong direction")
+ {
+ tx_data_pg_ack_test (t, &tp, 1, 25, 25, FRAME_CCO_TO_STA_DIR,
+ PBPROC_FC_DT_SOUND, true);
+ } test_end;
+ test_begin (t, "sta valid sound")
+ {
+ tx_data_pg_ack_test (t, &tp, 23, 24, 25, FRAME_CCO_TO_STA_DIR,
+ PBPROC_FC_DT_SOUND, false);
+ } test_end;
+ test_begin (t, "sta sound wrong direction")
+ {
+ tx_data_pg_ack_test (t, &tp, 23, 24, 25, FRAME_STA_TO_CCO_DIR,
+ PBPROC_FC_DT_SOUND, true);
+ } test_end;
+ test_pbproc_uninit (&tp);
+}
+
+void
+tx_data_test_suite (test_t t)
+{
+ test_suite_begin (t, "tx data");
+ tx_data_basic_test_case (t);
+ tx_data_spoc_test_case (t);
+ tx_data_error_test_case (t);
+ tx_data_pg_ack_test_case (t);
+ test_case_begin (t, "memory");
+ test_begin (t, "memory")
+ {
+ test_fail_unless (blk_check_memory ());
+ } test_end;
+}
+
diff --git a/cesar/mac/pbproc/test/pbproc_eoc/src/tx_sound.c b/cesar/mac/pbproc/test/pbproc_eoc/src/tx_sound.c
new file mode 100644
index 0000000000..27913ae5d2
--- /dev/null
+++ b/cesar/mac/pbproc/test/pbproc_eoc/src/tx_sound.c
@@ -0,0 +1,377 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2009 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/tx_sound.c
+ * \brief TX SOUND automaton test
+ * \ingroup test
+ */
+#include "common/std.h"
+
+#include "lib/scenario/scenario.h"
+
+#include "inc/test_pbproc.h"
+#include "inc/utils.h"
+
+#include "mac/common/timings.h"
+
+void
+tx_sound_test (test_t t, test_pbproc_t *tp)
+{
+ test_within (t);
+ const uint lid = 1;
+ const uint dtei = 5;
+ const uint beacon_tck = MAC_MS_TO_TCK (1000) / 50;
+ const u32 date = 12345;
+ const uint symb_nb = 19;
+ const uint duration_tck = MAC_PREAMBLE_TCK + MAC_FC_AV_TCK
+ + MAC_PAYLOAD_TCK (symb_nb, MAC_DX417_TCK)
+ + MAC_RIFS_DEFAULT_TCK + MAC_PREAMBLE_TCK + MAC_FC_AV_TCK;
+ u32 chandata_conf[1] = { 0 };
+ pbproc_set_chandata_conf (
+ tp->pbproc, (phy_chandata_conf_t *) chandata_conf, 1, false);
+ mfs_tx_t *mfs = utils_mfs_tx_prepare (false, false, lid, dtei, 1);
+ test_fail_unless (mfs);
+ mfs->no_reply_count = 2;
+ utils_sta_prepare_default_tonemap (tp, true, dtei,
+ TONEMAP_INDEX_INITIAL_START, 0, 0,
+ NULL);
+ /* need authenticated sta to send sound frames */
+ sta_t * sta = mac_store_sta_get(tp->store, dtei);
+ if (sta)
+ {
+ sta->authenticated = true;
+ tp->pbproc->config->authenticated = true;
+ blk_release (sta);
+ }
+ test_pbproc_alloc (tp, false, date / beacon_tck * beacon_tck);
+ ca_access_param_t access = {
+ .access_date = date,
+ .duration_tck = duration_tck,
+ .prp = true,
+ .cfp = true,
+ };
+ pbproc_fc_sound_t sound_ack_fc = {
+ .dt_av = PBPROC_FC_DT_SOUND,
+ .access = false,
+ .snid = tp->snid,
+ .dtei = dtei,
+ .direction = 1,
+ .lid = lid,
+ .pbsz = false,
+ .saf = true,
+ .scf = true,
+ .req_tm = 0,
+ .fl_av = 0,
+ .mpdu_cnt = 0,
+ .src = 0,
+ .fccs_av = 0,
+ };
+ const uint pre_fc_fl_tck = MAC_PREAMBLE_TCK + MAC_FC_AV_TCK
+ + MAC_PAYLOAD_TCK (symb_nb, MAC_DX417_TCK) + MAC_RIFS_DEFAULT_TCK;
+ scenario_entry_t entries[] = {
+ SCENARIO_ACTION (phy_access, .mfs = mfs, .access_param = &access,
+ .prp_won = true, .slot_count = 2),
+ SCENARIO_EVENT (ca_access_hold),
+ SCENARIO_EVENT (ca_access_get_mfs),
+ SCENARIO_EVENT (phy_tx_param_sound, .fc_mode = PHY_FC_MODE_AV_1,
+ .nb_pb = 1, .mod = PHY_MOD_ROBO,
+ .fecrate = PHY_FEC_RATE_1_2,
+ .pb_size = PHY_PB_SIZE_520, .gil = PHY_GIL_417,
+ .symbol_nb = symb_nb),
+ SCENARIO_EVENT (phy_tx_frame, .date = date, .want_conf = false,
+ .stop_tx_on_prp_lost = true),
+ SCENARIO_EVENT (ca_access_vcs_restart_eifs, .start_date = date),
+ SCENARIO_EVENT (phy_rx_activate, .now = false,
+ .date = date + pre_fc_fl_tck,
+ .pre_detection = true),
+ SCENARIO_ACTION (phy_rx_fc, .rx_date = date + pre_fc_fl_tck,
+ .fc_av = (u32 *) &sound_ack_fc),
+ SCENARIO_EVENT (phy_rx_prepare_short),
+ SCENARIO_EVENT (ca_access_done),
+ SCENARIO_EVENT_COND (!access.cfp, ca_backoff_success),
+ SCENARIO_EVENT (ca_access_vcs_restart,
+ .end_date = date + pre_fc_fl_tck + MAC_PREAMBLE_TCK
+ + MAC_FC_AV_TCK + MAC_CIFS_TCK),
+ SCENARIO_END
+ };
+ scenario_globals_t globals = {
+ .tp = tp,
+ };
+ test_pbproc_check_stats_reset (tp);
+ scenario_run (t, entries, &globals);
+ test_pbproc_check_stats (t, tp, .tx_sound = 1, .tx_sound_ack = 1);
+ test_fail_unless (mfs->stats.num_mpdus == 0);
+ test_fail_unless (mfs->stats.num_bursts == 0);
+ test_fail_unless (mfs->stats.num_pbs == 0);
+ test_fail_unless (mfs->stats.num_segs_suc == 0);
+ test_fail_unless (mfs->no_reply_count == 0);
+ utils_mfs_tx_cleanup (mfs);
+ dbg_check (mac_store_sta_remove (tp->store, dtei));
+ test_fail_unless (tp->pbproc->fsm.current_state == PBPROC_FSM_STATE_IDLE);
+ pbproc_set_chandata_conf (tp->pbproc, NULL, 0, false);
+}
+
+void
+tx_sound_basic_test_case (test_t t)
+{
+ test_pbproc_t tp;
+ test_case_begin (t, "basic");
+ test_pbproc_init (&tp);
+ test_begin (t, "basic")
+ {
+ tx_sound_test (t, &tp);
+ } test_end;
+ test_pbproc_uninit (&tp);
+}
+
+void
+tx_sound_cancel_test (test_t t, test_pbproc_t *tp, bool prp_won, bool rx_fc,
+ bool late)
+{
+ test_within (t);
+ const uint lid = 1;
+ const uint dtei = 2;
+ const uint date = 123456;
+ const uint beacon_tck = MAC_MS_TO_TCK (1000) / 50;
+ const uint symb_nb = 19;
+ u32 chandata_conf[1] = { 0 };
+ pbproc_set_chandata_conf (
+ tp->pbproc, (phy_chandata_conf_t *) chandata_conf, 1, false);
+ mfs_tx_t *mfs = utils_mfs_tx_prepare (false, false, lid, dtei, 1);
+ /* if frame is not received and no late, check reply count */
+ if (!rx_fc && !late)
+ mfs->no_reply_count = 1;
+ utils_sta_prepare_default_tonemap (tp, true, dtei,
+ TONEMAP_INDEX_INITIAL_START, 0, 0,
+ NULL);
+ test_pbproc_alloc (tp, false, date / beacon_tck * beacon_tck);
+ /* need authenticated sta to send sound frames */
+ sta_t * sta = mac_store_sta_get(tp->store, dtei);
+ if (sta)
+ {
+ sta->authenticated = true;
+ tp->pbproc->config->authenticated = true;
+ blk_release (sta);
+ }
+ ca_access_param_t access = {
+ .access_date = date,
+ .duration_tck = MAC_PREAMBLE_TCK + MAC_FC_AV_TCK
+ + MAC_PAYLOAD_TCK (symb_nb, MAC_DX417_TCK) + MAC_RIFS_DEFAULT_TCK
+ + MAC_PREAMBLE_TCK + MAC_FC_AV_TCK,
+ .prp = true,
+ .cfp = true,
+ };
+ const uint date2 = 123456 + MAC_EIFS_AV_TCK;
+ const uint date3 = date2 + MAC_PREAMBLE_TCK + MAC_FC_AV_TCK + MAC_CIFS_TCK
+ - PBPROC_ANTICIP_TCK;
+ ca_access_param_t access2 = {
+ .access_date = date2,
+ .duration_tck = MAC_PREAMBLE_TCK + MAC_FC_AV_TCK
+ + MAC_PAYLOAD_TCK (symb_nb, MAC_DX417_TCK) + MAC_RIFS_DEFAULT_TCK
+ + MAC_PREAMBLE_TCK + MAC_FC_AV_TCK,
+ .prp = false,
+ .cfp = true,
+ };
+ ca_access_param_t access3 = {
+ .access_date = date3,
+ .duration_tck = MAC_PREAMBLE_TCK + MAC_FC_AV_TCK
+ + MAC_PAYLOAD_TCK (symb_nb, MAC_DX417_TCK) + MAC_RIFS_DEFAULT_TCK +
+ MAC_PREAMBLE_TCK + MAC_FC_AV_TCK,
+ .prp = false,
+ .cfp = true,
+ };
+ pbproc_fc_sack_t sack_fc = {
+ .dt_av = PBPROC_FC_DT_SACK,
+ .access = false,
+ .snid = tp->snid,
+ .dtei = tp->config.tei + 8,
+ .cfs = false,
+ .bdf = true,
+ .svn = 0,
+ .rrtf = false,
+ .mfs_rsp_data = MFS_FSM_RSP_ACK,
+ .mfs_rsp_mgmt = MFS_FSM_RSP_ACK,
+ .sackt3 = 0,
+ .sackt2 = 0,
+ .sackt1 = 0,
+ .sackt0 = 0,
+ .sacki = { 0, 0 },
+ .sacki_last = 0,
+ .fccs_av = 0,
+ };
+ const uint pre_fc_fl_tck = MAC_PREAMBLE_TCK + MAC_FC_AV_TCK
+ + MAC_PAYLOAD_TCK (symb_nb, MAC_DX417_TCK) + MAC_RIFS_DEFAULT_TCK;
+ const uint sack_length_tck = MAC_PREAMBLE_TCK + MAC_FC_AV_TCK
+ + MAC_CIFS_TCK;
+ scenario_entry_t sack_entries[] = {
+ SCENARIO_ACTION (phy_access, .mfs = mfs, .access_param = &access,
+ .prp_won = true, .slot_count = 6),
+ SCENARIO_EVENT (ca_access_hold),
+ SCENARIO_EVENT (ca_access_get_mfs),
+ SCENARIO_EVENT (phy_tx_param_sound, .fc_mode = PHY_FC_MODE_AV_1,
+ .nb_pb = 1, .mod = PHY_MOD_ROBO,
+ .fecrate = PHY_FEC_RATE_1_2,
+ .pb_size = PHY_PB_SIZE_520, .gil = PHY_GIL_417,
+ .symbol_nb = symb_nb),
+ SCENARIO_EVENT (phy_tx_frame, .date = date, .want_conf = false,
+ .stop_tx_on_prp_lost = true),
+ SCENARIO_EVENT (ca_access_vcs_restart_eifs, .start_date = date),
+ SCENARIO_EVENT (phy_rx_activate, .now = false,
+ .date = date + pre_fc_fl_tck,
+ .pre_detection = true),
+ SCENARIO_ACTION (phy_rx_fc, .rx_date = date - MAC_SLOT_TCK,
+ .prp_won = prp_won, .slot_count = 5,
+ .fc_av = PARENT_OF (pbproc_fc_t, sack,
+ &sack_fc)->words),
+ SCENARIO_EVENT (ca_access_done),
+ SCENARIO_EVENT_COND (prp_won, ca_backoff_deferred, .slot_count = 3),
+ SCENARIO_EVENT_COND (!prp_won, ca_backoff_cancel),
+ SCENARIO_EVENT (phy_tx_cancel),
+ SCENARIO_EVENT (ca_access_hold),
+ SCENARIO_EVENT (phy_rx_prepare_short),
+ SCENARIO_EVENT (ca_access_vcs_restart,
+ .end_date = date - MAC_SLOT_TCK + sack_length_tck),
+ SCENARIO_END
+ };
+ scenario_entry_t access_entries[] = {
+ SCENARIO_ACTION (phy_access, .mfs = mfs, .access_param = &access,
+ .prp_won = true, .slot_count = 6),
+ SCENARIO_EVENT (ca_access_hold),
+ SCENARIO_EVENT (ca_access_get_mfs),
+ SCENARIO_EVENT (phy_tx_param_sound, .fc_mode = PHY_FC_MODE_AV_1,
+ .nb_pb = 1, .mod = PHY_MOD_ROBO,
+ .fecrate = PHY_FEC_RATE_1_2,
+ .pb_size = PHY_PB_SIZE_520, .gil = PHY_GIL_417,
+ .symbol_nb = symb_nb),
+ SCENARIO_EVENT (phy_tx_frame, .date = date, .want_conf = false,
+ .stop_tx_on_prp_lost = true),
+ SCENARIO_EVENT (ca_access_vcs_restart_eifs, .start_date = date),
+ SCENARIO_EVENT (phy_rx_activate, .now = false,
+ .date = date + pre_fc_fl_tck,
+ .pre_detection = true),
+ SCENARIO_ACTION (phy_access, .mfs = mfs, .access_param = &access2,
+ .prp_won = prp_won, .slot_count = 600),
+ SCENARIO_EVENT (ca_access_done),
+ SCENARIO_EVENT_COND (prp_won, ca_backoff_deferred, .slot_count = 598),
+ SCENARIO_EVENT_COND (!prp_won, ca_backoff_cancel),
+ SCENARIO_EVENT (ca_access_vcs_restart, .end_date = date3),
+ SCENARIO_ACTION (phy_access, .mfs = mfs, .access_param = &access3,
+ .prp_won = prp_won, .slot_count = 600),
+ SCENARIO_EVENT (ca_access_hold),
+ SCENARIO_EVENT (ca_access_get_mfs),
+ SCENARIO_EVENT (phy_tx_param_sound, .fc_mode = PHY_FC_MODE_AV_1,
+ .nb_pb = 1, .mod = PHY_MOD_ROBO,
+ .fecrate = PHY_FEC_RATE_1_2,
+ .pb_size = PHY_PB_SIZE_520, .gil = PHY_GIL_417,
+ .symbol_nb = symb_nb),
+ SCENARIO_EVENT (phy_tx_frame, .date = date3, .want_conf = false,
+ .stop_tx_on_prp_lost = false),
+ SCENARIO_EVENT (ca_access_vcs_restart_eifs, .start_date = date3),
+ SCENARIO_EVENT (phy_rx_activate, .now = false,
+ .date = date3 + pre_fc_fl_tck,
+ .pre_detection = true),
+ SCENARIO_ACTION (phy_rx_fc, .rx_date = date3 - MAC_SLOT_TCK,
+ .prp_won = prp_won, .slot_count = 5,
+ .fc_av = PARENT_OF (pbproc_fc_t, sack,
+ &sack_fc)->words),
+ SCENARIO_EVENT (ca_access_done),
+ SCENARIO_EVENT (ca_backoff_deferred, .slot_count = 3),
+ SCENARIO_EVENT (phy_tx_cancel),
+ SCENARIO_EVENT (ca_access_hold),
+ SCENARIO_EVENT (phy_rx_prepare_short),
+ SCENARIO_EVENT (ca_access_vcs_restart,
+ .end_date = date3 - MAC_SLOT_TCK + sack_length_tck),
+ SCENARIO_END
+ };
+ scenario_entry_t late_entries[] = {
+ SCENARIO_ACTION (phy_access, .mfs = mfs, .access_param = &access,
+ .prp_won = true, .slot_count = 6,
+ .delay_tck = late ? PBPROC_ANTICIP_TCK : 0),
+ SCENARIO_EVENT (ca_access_hold),
+ SCENARIO_EVENT (ca_access_get_mfs),
+ SCENARIO_EVENT (ca_access_done),
+ SCENARIO_EVENT (ca_backoff_deferred,
+ .slot_count = access.duration_tck / MAC_SLOT_TCK),
+ SCENARIO_EVENT (ca_access_done),
+ SCENARIO_EVENT (ca_access_defer, .date = date),
+ SCENARIO_END
+ };
+ scenario_entry_t *entries =
+ late ? late_entries : (rx_fc ? sack_entries : access_entries);
+ scenario_globals_t globals = {
+ .tp = tp,
+ };
+ test_pbproc_check_stats_reset (tp);
+ scenario_run (t, entries, &globals);
+ if (!late)
+ test_pbproc_check_stats (
+ t, tp,
+ .prp_lost = prp_won ? 0 : 1,
+ .cw_lost = rx_fc ? (prp_won ? 1 : 0) : (prp_won ? 2 : 1),
+ .rx_handle_fc = 1,
+ .rx_nfu = 1,
+ .tx_sound = rx_fc ? 1 : 2,
+ .tx_sound_noack = rx_fc ? 1 : 2,
+ );
+ else
+ test_pbproc_check_stats (t, tp, .tx_invalid = 1, .tx_late = 1);
+ test_fail_unless (mfs->stats.num_mpdus == 0);
+ test_fail_unless (mfs->stats.num_bursts == 0);
+ test_fail_unless (mfs->stats.num_pbs == 0);
+ test_fail_unless (mfs->stats.num_segs_suc == 0);
+ /* check reply count increase */
+ if (!rx_fc && !late)
+ test_fail_unless (mfs->no_reply_count == 2);
+ utils_mfs_tx_cleanup (mfs);
+ dbg_check (mac_store_sta_remove (tp->store, dtei));
+ test_fail_unless (tp->pbproc->fsm.current_state == PBPROC_FSM_STATE_IDLE);
+ pbproc_set_chandata_conf (tp->pbproc, NULL, 0, false);
+}
+
+void
+tx_sound_error_test_case (test_t t)
+{
+ test_pbproc_t tp;
+ test_case_begin (t, "error");
+ test_pbproc_init (&tp);
+ test_begin (t, "no ack")
+ {
+ tx_sound_cancel_test (t, &tp, true, false, false);
+ } test_end;
+ test_begin (t, "cw lost")
+ {
+ tx_sound_cancel_test (t, &tp, true, true, false);
+ } test_end;
+ test_begin (t, "prp lost")
+ {
+ tx_sound_cancel_test (t, &tp, false, true, false);
+ } test_end;
+ test_begin (t, "prp lost and no frame")
+ {
+ tx_sound_cancel_test (t, &tp, false, false, false);
+ } test_end;
+ test_begin (t, "tx late")
+ {
+ tx_sound_cancel_test (t, &tp, true, false, true);
+ } test_end;
+ test_pbproc_uninit (&tp);
+}
+
+void
+tx_sound_test_suite (test_t t)
+{
+ test_suite_begin (t, "tx sound");
+ tx_sound_basic_test_case (t);
+ tx_sound_error_test_case (t);
+ test_case_begin (t, "memory");
+ test_begin (t, "memory")
+ {
+ test_fail_unless (blk_check_memory ());
+ } test_end;
+}
+
diff --git a/cesar/mac/pbproc/test/pbproc_eoc/src/utils.c b/cesar/mac/pbproc/test/pbproc_eoc/src/utils.c
new file mode 100644
index 0000000000..d9e7383266
--- /dev/null
+++ b/cesar/mac/pbproc/test/pbproc_eoc/src/utils.c
@@ -0,0 +1,271 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2007 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/utils.c
+ * \brief Utilities.
+ * \ingroup test
+ */
+#include "common/std.h"
+
+#include "inc/utils.h"
+
+#include "lib/blk.h"
+#include "lib/slist.h"
+#include "mac/common/timings.h"
+#include "mac/common/interval.h"
+#include "mac/pbproc/pbproc.h"
+#include "mac/pbproc/inc/mfs.h"
+
+mfs_tx_t *
+utils_mfs_tx_prepare (bool bcast, bool mme, uint lid, uint tei, int seg_nb)
+{
+ /* Create a MFS without holes. */
+ return utils_mfs_tx_holes_prepare(bcast, mme, lid, tei, seg_nb, 0, NULL);
+}
+
+mfs_tx_t *
+utils_mfs_tx_holes_prepare (bool bcast, bool mme, uint lid, uint tei,
+ int seg_nb, u64 holes_bmp, mac_store_t *store)
+{
+ mfs_tx_t *mfs;
+ /* Create an MFS. */
+ if (!store)
+ {
+ mfs = blk_alloc ();
+ mfs_tx_init (mfs, bcast, mme, lid, tei);
+ }
+ else
+ {
+ bool added;
+ mfs = mac_store_mfs_add_tx (store, bcast, mme, lid, tei, &added);
+ dbg_assert (added);
+ }
+ /* Default value for receiver window size */
+ mfs->window_size = mfs_window_size[MFS_WINDOW_SIZE_256];
+ if (seg_nb)
+ {
+ /* Add blocks to it. */
+ blk_t *blk_first, *blk_last;
+ blk_first = blk_alloc_desc_range (seg_nb, &blk_last);
+ pb_t *seg_first, *seg_last;
+ seg_first = PARENT_OF (pb_t, blk, blk_first);
+ seg_last = PARENT_OF (pb_t, blk, blk_last);
+ pb_t *seg, *lseg;
+ bool start_counting_holes = false;
+ uint expiration_count = 1;
+ for (lseg = NULL, seg = seg_first;
+ lseg != seg_last;
+ lseg = seg, seg = seg->next)
+ {
+ /* Use the bitmap to attribute the SSNs. */
+ while(holes_bmp & 1)
+ {
+ mfs->next_ssn++;
+ holes_bmp >>= 1;
+ if (start_counting_holes)
+ mfs->holes_seg_nb++;
+ }
+ start_counting_holes = true;
+ holes_bmp >>= 1;
+ seg->header.ssn = mfs->next_ssn++;
+ seg->header.mfbo = 0;
+ seg->header.vpbf = true;
+ seg->header.mmqf = mme;
+ seg->header.mfbf = false;
+ seg->header.opsf = false;
+ seg->header.rsvd = 0;
+ seg->expiration_ntb = expiration_count * UTILS_MFS_EXPIRATION_NTB_STEP
+ + TEST_PBPROC_NTB_OFFSET_TCK + TEST_PBPROC_EXPIRATION_DATE_OFFSET;
+ expiration_count++;
+ }
+ pbproc_mfs_insert_ (mfs, seg_first, seg_last, seg_nb);
+ pbproc_mfs_provide (mfs, seg_nb);
+ }
+ else
+ {
+ mfs->seg_nb = seg_nb;
+ }
+ return mfs;
+}
+
+static mfs_tx_t * local_mfs = NULL;
+
+mfs_tx_t *
+utils_mfs_tx_prepare_save (bool bcast, bool mme, uint lid, uint tei,
+ uint seg_nb)
+{
+ local_mfs = utils_mfs_tx_prepare(bcast, mme, lid, tei, seg_nb);
+ return local_mfs;
+}
+
+void
+utils_mfs_tx_cleanup (mfs_tx_t *mfs)
+{
+ if (mfs->head)
+ {
+ blk_release_desc_range (&mfs->head->blk, &mfs->tail->blk);
+ slist_init (mfs->, bare);
+ }
+ blk_release (mfs);
+}
+
+tonemap_t *
+utils_sta_prepare_default_tonemap (test_pbproc_t *tp, bool tx, uint tei,
+ uint tmi, uint tm_mod, uint tm_max_fl_tck,
+ uint *dx)
+{
+ dbg_assert (tmi < TONEMAP_INDEX_NB
+ || tmi == TONEMAP_INDEX_INITIAL_START
+ || tmi == TONEMAP_INDEX_INITIAL_ERROR
+ || tmi == TONEMAP_INDEX_INITIAL_SOUND_COMPLETE);
+ mac_store_sta_add (tp->store, tei);
+ sta_t *sta = mac_store_sta_get (tp->store, tei);
+ dbg_assert (sta);
+ if (tm_max_fl_tck)
+ {
+ uint max_fl_av = MAC_TCK_TO_FL (tm_max_fl_tck);
+ if (tx)
+ sta->tx_tonemaps->max_fl_av = max_fl_av;
+ else
+ sta->rx_tonemaps->max_fl_av = max_fl_av;
+ }
+ if (tx)
+ sta->tx_tonemaps->default_tmi = tmi;
+ else
+ sta->rx_tonemaps->default_tmi = tmi;
+ tonemap_t *tm = NULL;
+ if (tmi == TONEMAP_INDEX_INITIAL_START
+ || tmi == TONEMAP_INDEX_INITIAL_ERROR
+ || tmi == TONEMAP_INDEX_INITIAL_SOUND_COMPLETE)
+ {
+ /* Use ROBO. */
+ tm = &tp->config.tonemask_info.tonemap_robo[PHY_MOD_ROBO];
+ }
+ else if (tmi >= PHY_MOD_ROBO_NB)
+ {
+ if (tm_mod)
+ {
+ /* Create a tonemap. */
+ tm = tonemap_alloc ();
+ if (tx)
+ sta->tx_tonemaps->tm[tmi] = tm;
+ else
+ sta->rx_tonemaps->tm[tmi] = tm;
+ tm->cpf = true;
+ tm->fecrate = PHY_FEC_RATE_16_21;
+ tm->gil = PHY_GIL_417;
+ tm->bits_per_symbol = tm_mod * tp->config.tonemask_info.carrier_nb;
+ tonemap_update (tm, TONEMAP_P_PBERROR_DEFAULT_UF32);
+ /* Do not fill tonemap, unused. */
+ }
+ else
+ {
+ /* Reuse previously defined one. */
+ if (tx)
+ tm = sta->tx_tonemaps->tm[tmi];
+ else
+ tm = sta->rx_tonemaps->tm[tmi];
+ /* If no tonemap, use ROBO for SOUND frame. */
+ if (!tm)
+ tm = &tp->config.tonemask_info.tonemap_robo[PHY_MOD_ROBO];
+ }
+ }
+ else
+ {
+ /* Use a ROBO one. */
+ tm = &tp->config.tonemask_info.tonemap_robo[tmi];
+ }
+ sta->rx_tonemaps->sound_frame_counter = TONEMAP_SOUND_FRAME_COUNTER;
+ blk_release (sta);
+ if (dx)
+ *dx = tm->gil == PHY_GIL_417 ? MAC_DX417_TCK
+ : (tm->gil == PHY_GIL_567 ? MAC_DX567_TCK : MAC_DX3534_TCK);
+ return tm;
+}
+
+uint
+utils_sta_prepare_intervals (test_pbproc_t *tp, uint tei,
+ utils_interval_t *intervals,
+ uint default_tmi)
+{
+ uint intervals_version;
+ utils_interval_t *i;
+ dbg_assert (tp);
+ sta_t *sta = mac_store_sta_get (tp->store, tei);
+ dbg_assert (sta);
+ tonemaps_t *tms = sta->tx_tonemaps;
+ dbg_assert (tms->default_tmi < TONEMAP_INDEX_NB);
+ for (i = intervals; i->end_offset_tck; i++)
+ {
+ dbg_check (mac_interval_append (
+ tms, MAC_TCK_TO_ATU (i->end_offset_tck), i->tmi));
+ if (i->tm_mod && !tms->tm[i->tmi])
+ {
+ tonemap_t *tm = tonemap_alloc ();
+ tms->tm[i->tmi] = tm;
+ tm->cpf = true;
+ tm->fecrate = PHY_FEC_RATE_16_21;
+ tm->gil = PHY_GIL_417;
+ tm->bits_per_symbol =
+ i->tm_mod * tp->config.tonemask_info.carrier_nb;
+ tonemap_update (tm, TONEMAP_P_PBERROR_DEFAULT_UF32);
+ /* Do not fill tonemap, unused. */
+ }
+ }
+ mac_interval_commit_changes (tms, 0);
+ tms->default_tmi = default_tmi;
+ intervals_version = tms->intervals->version;
+ blk_release (sta);
+ return intervals_version;
+}
+
+void
+utils_prepare_encryption (test_pbproc_t *tp, bool encrypted, bool sta_auth,
+ uint tei, uint nek_switch)
+{
+ dbg_assert (tp);
+ dbg_assert (nek_switch == 0 || nek_switch == 1);
+ static mac_nek_t nek_store[2] = {
+ /* 0 */
+ {
+ .eks = 0,
+ .in_use = true,
+ .nek_enc = { 0xe0c75493, 0xda5ece2a, 0x956229e9, 0x85b0b79b },
+ .nek_dec = { 0x9e0c7631, 0xc26064c3, 0x97180120, 0xb81f230c }
+ },
+ /* 1 */
+ {
+ .eks = MAC_EKS_NB,
+ .in_use = false,
+ .nek_enc = { 0, 0, 0, 0 },
+ .nek_dec = { 0, 0, 0, 0 }
+ }
+ };
+ if (encrypted)
+ {
+ tp->config.authenticated = true;
+ tp->config.nek_mgr.use[nek_switch] = &nek_store[0];
+ tp->config.nek_mgr.use[!nek_switch] = &nek_store[1];
+ /* Setup allocation. */
+ tp->pbproc->alloc.nek_switch = nek_switch;
+ if (sta_auth)
+ {
+ sta_t *sta = mac_store_sta_get (tp->store, tei);
+ dbg_assert (sta);
+ sta->authenticated = true;
+ blk_release (sta);
+ }
+ }
+ else
+ {
+ tp->config.authenticated = false;
+ tp->config.nek_mgr.use[nek_switch] = &nek_store[1];
+ tp->config.nek_mgr.use[!nek_switch] = &nek_store[1];
+ }
+}
+
diff --git a/cesar/mac/sar/src/mfs.c b/cesar/mac/sar/src/mfs.c
index 3639de27d0..3d6ef204d5 100644
--- a/cesar/mac/sar/src/mfs.c
+++ b/cesar/mac/sar/src/mfs.c
@@ -17,6 +17,7 @@
#include "mac/sar/sar.h"
#include "mac/sar/inc/context.h"
#include "mac/sar/inc/sar.h"
+#include "config.h"
void
sar_mfs_add (sar_t *ctx, mfs_t *mfs)
diff --git a/cesar/mac/sar/src/rx.c b/cesar/mac/sar/src/rx.c
index 63b91cbb0b..473279a235 100644
--- a/cesar/mac/sar/src/rx.c
+++ b/cesar/mac/sar/src/rx.c
@@ -748,6 +748,7 @@ sar_rx_mfs_detect_and_reconstitute_mf__create_job (sar_t *ctx, mfs_rx_t *mfs,
sar_rx_job_desc_create (&job->job, mfs, mfs->head,
mfs->head->header.mfbo,
sar_mf);
+
uint icv_pos_end = sar_mf->length_complete + offset;
/* Workaround for bridgedma bug see maria:#905 */
if (sar_mf->length > SAR_BRGBUG_SECOND_JOB_LENGTH
diff --git a/cesar/mac/sar/src/trace.c b/cesar/mac/sar/src/trace.c
index 3c1f008d7c..013ed5e31a 100644
--- a/cesar/mac/sar/src/trace.c
+++ b/cesar/mac/sar/src/trace.c
@@ -56,7 +56,7 @@ sar_trace_init (sar_t *ctx)
};
dbg_assert (ctx);
trace_namespace_init (&namespace, event_ids, COUNT (event_ids));
- trace_buffer_add (&ctx->trace, "sar", 8, 4, true, &namespace);
+ trace_buffer_add (&ctx->trace, "sar", 8, 64, true, &namespace);
}
void
diff --git a/cesar/mac/sar/stub/src/sar.c b/cesar/mac/sar/stub/src/sar.c
index 530bd0b0b7..c7b3351156 100644
--- a/cesar/mac/sar/stub/src/sar.c
+++ b/cesar/mac/sar/stub/src/sar.c
@@ -55,6 +55,9 @@ void
sar_cleanup (sar_t *ctx) __attribute__((weak));
void
+sar_activate (sar_t *ctx, bool activate) __attribute__((weak));
+
+void
sar_read_pb_stats_begin (sar_t *ctx, int *index, int *amount,
u8 stei_filter) __attribute__((weak));
@@ -117,6 +120,21 @@ sar_read_pb_stats_entry (sar_t *ctx, uint index)
}
void
+sar_activate (sar_t *ctx, bool activate)
+{
+}
+
+uint sar_num_rx_jobs ( void)
+{
+ return 0;
+}
+
+uint sar_num_jobs ( void)
+{
+ return 0;
+}
+
+void
sar_init_reassembly_callbacks (
sar_t *ctx, sar_reassembly_cb_t data_cb,
sar_reassembly_cb_t mme_cb, void *user_data) __attribute__((weak));
diff --git a/cesar/mac/sar/test/functional/host-Config b/cesar/mac/sar/test/functional/host-Config
new file mode 100644
index 0000000000..63d7710058
--- /dev/null
+++ b/cesar/mac/sar/test/functional/host-Config
@@ -0,0 +1,3 @@
+CONFIG_MAC_COMMON_EOC_SCHED = y
+CONFIG_MAC_PBPROC_EOC_FC = y
+
diff --git a/cesar/mac/sar/test/functional/sparc-Config b/cesar/mac/sar/test/functional/sparc-Config
new file mode 100644
index 0000000000..63d7710058
--- /dev/null
+++ b/cesar/mac/sar/test/functional/sparc-Config
@@ -0,0 +1,3 @@
+CONFIG_MAC_COMMON_EOC_SCHED = y
+CONFIG_MAC_PBPROC_EOC_FC = y
+
diff --git a/cesar/mac/sar/test/utest/host/src/misc.c b/cesar/mac/sar/test/utest/host/src/misc.c
index 9d2f6f39b2..9516675b79 100644
--- a/cesar/mac/sar/test/utest/host/src/misc.c
+++ b/cesar/mac/sar/test/utest/host/src/misc.c
@@ -40,7 +40,7 @@ test_case_misc__exhausted_memory (test_t test)
sar_test_t t;
blk_t *head, *tail;
sar_test_init (&t, INVALID_PTR, INVALID_PTR);
- for (blk_nb = 1; blk_nb < CONFIG_BLK_NB - 60; blk_nb ++)
+ for (blk_nb = 1; blk_nb < CONFIG_BLK_NB - blk_free_nb (); blk_nb ++)
{
head = blk_alloc_desc_range (blk_nb, &tail);
allocate = MIN (10u, blk_slack ());
diff --git a/cesar/mac/sar/test/utest/host/src/reassembly.c b/cesar/mac/sar/test/utest/host/src/reassembly.c
index 6baf27167e..d7899438da 100644
--- a/cesar/mac/sar/test/utest/host/src/reassembly.c
+++ b/cesar/mac/sar/test/utest/host/src/reassembly.c
@@ -366,6 +366,18 @@ test_case_unicast (test_t test)
uint i;
sar_test_init (&t, INVALID_PTR, INVALID_PTR);
+ /* Special behavior for EoC. MFS TX never expires, this is not the
+ * case for MFS RX which expires after a second of inactivity.
+ * So to receive the frame the product code set the ssn_min of the MFS
+ * to the SSN of the first PB received in the frame.
+ * To test the same part of code as AV, we need to create the MFS. */
+ bool added;
+ mfs_rx_t *mfs =
+ mac_store_mfs_add_rx (t.mac_store, false, false, 2, 1, &added);
+ test_fail_unless (added);
+ blk_release (mfs);
+ /* End special behavior for EoC. */
+
/* Create an ordered list of PBs. */
ssn = 6;
sar_test_create_mpdu (&mpdu, 3, ssn, 1, 2, false);
@@ -415,8 +427,6 @@ test_case_unicast (test_t test)
test_end;
}
-
-
void
test_case_example (test_t test)
{
diff --git a/cesar/mac/sar/test/utest/lib/Makefile b/cesar/mac/sar/test/utest/lib/Makefile
index cbb278c32c..73691d4631 100644
--- a/cesar/mac/sar/test/utest/lib/Makefile
+++ b/cesar/mac/sar/test/utest/lib/Makefile
@@ -4,6 +4,7 @@ HOST_PROGRAMS = test_lib_sar_mf
test_lib_sar_mf_SOURCES = lib_sar_mf.c phy_stub.c
test_lib_sar_mf_MODULES = lib mac/sar
+test_lib_sar_mf_CONFIG_MODULES = mac/common
mac_sar_MODULE_SOURCES = mf_header.c
diff --git a/cesar/maximus/common/types/phy_types.h b/cesar/maximus/common/types/phy_types.h
index 9eab2d93c0..03ff9da19e 100644
--- a/cesar/maximus/common/types/phy_types.h
+++ b/cesar/maximus/common/types/phy_types.h
@@ -99,11 +99,11 @@ enum Phy_Mpdu_Format
{
PHY_MPDU_FORMAT_NONE = 0x00,
PHY_MPDU_FORMAT_BEACON = 0x01, // Beacon => Long MPDU
- PHY_MPDU_FORMAT_SOF = 0x02, // Start Of Frame => Long MPDU
+ PHY_MPDU_FORMAT_SOF = 0x02, // Start Of Frame => Long MPDU (can be Short MPDU in case of EoC)
PHY_MPDU_FORMAT_SACK = 0x03, // Selective ACKnowledgement => Short MPDU (i.e. there is no payload)
PHY_MPDU_FORMAT_RTS_CTS = 0x04, // Request To Send / Clear To Send => Short MPDU (i.e. there is no payload)
PHY_MPDU_FORMAT_SOUND = 0x05, // Sound => Long MPDU
- PHY_MPDU_FORMAT_RSOF = 0x06, // Reverse Start Of Frame => Long MPDU
+ PHY_MPDU_FORMAT_RSOF = 0x06, // Reverse Start Of Frame => Long MPDU (can be Short MPDU in case of EoC)
PHY_MPDU_FORMAT_NB
};
diff --git a/cesar/maximus/python/Makefile b/cesar/maximus/python/Makefile
index 781eb3b664..f34af965ec 100644
--- a/cesar/maximus/python/Makefile
+++ b/cesar/maximus/python/Makefile
@@ -2,7 +2,7 @@ BASE = ../..
HOST_PROGRAMS = interface.so
-interface.so_MODULES = lib/python maximus/python/boost maximus lib
+interface.so_MODULES = lib/python maximus/python/boost maximus lib mac/common
interface.so_LDLIBS = -fPIC -shared
include $(BASE)/common/make/top.mk
diff --git a/cesar/maximus/python/maximus/station/sta.py b/cesar/maximus/python/maximus/station/sta.py
index 660459390d..134fa94d48 100644
--- a/cesar/maximus/python/maximus/station/sta.py
+++ b/cesar/maximus/python/maximus/station/sta.py
@@ -175,6 +175,11 @@ class STA:
self.__check_cnf(rsp,
mmtype.DRV_STA_MAC_START_CNF)
+ def start(self):
+ """Send the MAC_START message to the station.
+ """
+ self.__start()
+
def stop(self):
"""Send the MAC_STOP message to the station.
"""
diff --git a/cesar/maximus/scheduler/utest/Makefile b/cesar/maximus/scheduler/utest/Makefile
index 4d5db916fa..c10a74e23a 100644
--- a/cesar/maximus/scheduler/utest/Makefile
+++ b/cesar/maximus/scheduler/utest/Makefile
@@ -5,6 +5,7 @@ HOST_PROGRAMS = scheduler_test
scheduler_test_SOURCES = TestScheduler.cpp EventExpected.cpp
scheduler_test_MODULES = lib maximus/lib/test maximus/utils maximus/scheduler \
maximus/processors maximus/sci
+scheduler_test_CONFIG_MODULES = mac/common
# Modules stubbed for this unit test
scheduler_test_SOURCES += fake_PhyProcessor.cpp fake_ClockProcessor.cpp \
diff --git a/cesar/maximus/sci/utest/scimsg/Makefile b/cesar/maximus/sci/utest/scimsg/Makefile
index 1a95343723..0ae9943cb4 100644
--- a/cesar/maximus/sci/utest/scimsg/Makefile
+++ b/cesar/maximus/sci/utest/scimsg/Makefile
@@ -16,6 +16,7 @@ maximus_sci_MODULE_SOURCES = SciMsg.cpp \
# Modules stubbed for this unit test
sci_msg_test_SOURCES += fake_SciServer.cpp
+sci_msg_test_CONFIG_MODULES = mac/common
EXTRA_HOST_CFLAGS := $(shell cppunit-config --cflags)
EXTRA_HOST_LDLIBS := $(shell cppunit-config --libs)
diff --git a/cesar/maximus/sci/utest/server/Makefile b/cesar/maximus/sci/utest/server/Makefile
index cd8ff168c5..cdf3d196d0 100644
--- a/cesar/maximus/sci/utest/server/Makefile
+++ b/cesar/maximus/sci/utest/server/Makefile
@@ -5,6 +5,7 @@ HOST_PROGRAMS = sci_server_test
sci_server_test_SOURCES = TestSciServer.cpp
sci_server_test_MODULES = lib maximus/lib/test maximus/utils maximus/sci \
maximus/processors
+sci_server_test_CONFIG_MODULES = mac/common
# class tested
maximus_sci_MODULE_SOURCES = SciServer.cpp SciMsg.cpp
diff --git a/cesar/projects/eoc/Makefile b/cesar/projects/eoc/Makefile
new file mode 100644
index 0000000000..9602a82b1a
--- /dev/null
+++ b/cesar/projects/eoc/Makefile
@@ -0,0 +1,16 @@
+all: master slave
+
+clean: master-clean slave-clean
+
+master: master-Makefile master-ecos.ecc.sh
+ $(MAKE) -f master-Makefile
+master-clean: master-Makefile
+ $(MAKE) -f master-Makefile clean
+
+slave: slave-Makefile slave-ecos.ecc.sh
+ $(MAKE) -f slave-Makefile
+slave-clean: slave-Makefile
+ $(MAKE) -f slave-Makefile clean
+
+distclean:
+ rm -rf obj
diff --git a/cesar/projects/eoc/master-Config b/cesar/projects/eoc/master-Config
new file mode 100644
index 0000000000..e2263c5913
--- /dev/null
+++ b/cesar/projects/eoc/master-Config
@@ -0,0 +1,8 @@
+set eoc-master
+set eoc-board
+CONFIG_ARCH_ILRAM_PRIO_LOW = 1
+CONFIG_ARCH_ILRAM_PRIO_HIGH = 5
+CONFIG_BLK_SLACK = 512
+CONFIG_DEBUG_CLAIM = n
+CONFIG_SAR_PBPOOL_SIZE = 512
+CONFIG_STATS_ON_FATAL = y
diff --git a/cesar/projects/eoc/master-Makefile b/cesar/projects/eoc/master-Makefile
new file mode 100644
index 0000000000..44f62244c5
--- /dev/null
+++ b/cesar/projects/eoc/master-Makefile
@@ -0,0 +1,15 @@
+BASE = ../..
+ECOS = y
+TARGET = sparc
+VARIANT = master
+TARGET_OPTIMIZE = -Os
+
+TARGET_PROGRAMS = master
+
+master_SOURCES = eoc.c
+master_MODULES = lib mac cl bsu interface hal station host ce hle/tools \
+ bufmgr cp/eoc
+
+include $(BASE)/common/make/top.mk
+
+$(call src2obj,src/region_stub.c,target): $(BASE)/cp/fsm/fsm.h
diff --git a/cesar/projects/eoc/master-ecos.ecc.sh b/cesar/projects/eoc/master-ecos.ecc.sh
new file mode 100644
index 0000000000..db2208c6cc
--- /dev/null
+++ b/cesar/projects/eoc/master-ecos.ecc.sh
@@ -0,0 +1,5 @@
+config=${1:-ecos-gen.ecc}
+ecosconfig --config=$config new sparc_leon default
+cat >> $config <<'EOF'
+EOF
+ecosconfig --config=$config check
diff --git a/cesar/projects/eoc/slave-Config b/cesar/projects/eoc/slave-Config
new file mode 100644
index 0000000000..da0a8799f2
--- /dev/null
+++ b/cesar/projects/eoc/slave-Config
@@ -0,0 +1,8 @@
+set eoc-slave
+set eoc-board
+CONFIG_ARCH_ILRAM_PRIO_LOW = 1
+CONFIG_ARCH_ILRAM_PRIO_HIGH = 5
+CONFIG_BLK_SLACK = 512
+CONFIG_DEBUG_CLAIM = n
+CONFIG_SAR_PBPOOL_SIZE = 512
+CONFIG_STATS_ON_FATAL = y
diff --git a/cesar/projects/eoc/slave-Makefile b/cesar/projects/eoc/slave-Makefile
new file mode 100644
index 0000000000..6c43b1cf1b
--- /dev/null
+++ b/cesar/projects/eoc/slave-Makefile
@@ -0,0 +1,15 @@
+BASE = ../..
+ECOS = y
+TARGET = sparc
+VARIANT = slave
+TARGET_OPTIMIZE = -Os
+
+TARGET_PROGRAMS = slave
+
+slave_SOURCES = eoc.c
+slave_MODULES = lib mac cl bsu interface hal station host ce hle/tools \
+ bufmgr cp/eoc
+
+include $(BASE)/common/make/top.mk
+
+$(call src2obj,src/region_stub.c,target): $(BASE)/cp/fsm/fsm.h
diff --git a/cesar/projects/eoc/slave-ecos.ecc.sh b/cesar/projects/eoc/slave-ecos.ecc.sh
new file mode 100644
index 0000000000..db2208c6cc
--- /dev/null
+++ b/cesar/projects/eoc/slave-ecos.ecc.sh
@@ -0,0 +1,5 @@
+config=${1:-ecos-gen.ecc}
+ecosconfig --config=$config new sparc_leon default
+cat >> $config <<'EOF'
+EOF
+ecosconfig --config=$config check
diff --git a/cesar/projects/eoc/src/eoc.c b/cesar/projects/eoc/src/eoc.c
new file mode 100644
index 0000000000..921d2edcc8
--- /dev/null
+++ b/cesar/projects/eoc/src/eoc.c
@@ -0,0 +1,24 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2009 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/eoc.c
+ * \brief EoC startup file
+ * \ingroup projects
+ */
+#include "common/std.h"
+
+#include "station/station.h"
+
+int
+cyg_user_start (void)
+{
+ /* Initialise Cesar */
+ cesar_init ();
+ return 0;
+}
+
diff --git a/cesar/station/src/station.c b/cesar/station/src/station.c
index e3cbb1c6e2..7438a046a8 100644
--- a/cesar/station/src/station.c
+++ b/cesar/station/src/station.c
@@ -25,6 +25,11 @@
# include "hal/leon/fatal_button.h"
#endif
+#if MODULE_INCLUDED (hal_trace)
+# include "hal/trace/trace.h"
+# include "config/hal/trace/cpu.h"
+#endif
+
#include "hal/boot_params/boot_params.h"
#include "lib/seq_check.h"
#include "ce/rx/rx.h"
@@ -49,6 +54,10 @@ cesar_init (void)
trace_init ();
perf_init ();
+#if MODULE_INCLUDED (hal_trace)
+ hal_trace_init ();
+#endif
+
#if MODULE_INCLUDED (hal_leon) && CONFIG_LEON_FATAL_BUTTON
leon_fatal_button_init ();
#endif
diff --git a/cesar/test_general/station/common/src/station.c b/cesar/test_general/station/common/src/station.c
index c7589b78ce..37578126df 100644
--- a/cesar/test_general/station/common/src/station.c
+++ b/cesar/test_general/station/common/src/station.c
@@ -75,13 +75,16 @@ int
cyg_user_start (void)
{
struct fcall_ctx *fcall = NULL;
+ struct probe_ctx *probe = NULL;
cesar = cesar_init ();
#if CONFIG_FCALL_MME
fcall = cesar->interface->fcall->fcall_ctx;
+ probe = cesar->interface->fcall->probe_ctx;
#else
fcall = my_station.fcall;
+ probe = my_station.probe;
#endif
fcall_register (fcall, "fc_sta_own_data_public",
@@ -124,6 +127,8 @@ cyg_user_start (void)
fcall_register (fcall, "fc_nek_get", &fc_nek_get, cesar);
fcall_register (fcall, "fc_schedules_get", &fc_schedules_get, cesar);
+ probe_register (probe, "nb_beacon_recv", sizeof(uint),
+ &cesar->cp->pbproc->stats.rx_beacon);
#if CONFIG_TRACE
fcall_register (fcall, "fc_sta_trace_dump_cl",
&fc_sta_trace_dump, &cesar->cl->trace);
diff --git a/cesar/test_general/station/compliance-eoc/Makefile b/cesar/test_general/station/compliance-eoc/Makefile
new file mode 100644
index 0000000000..689c358d38
--- /dev/null
+++ b/cesar/test_general/station/compliance-eoc/Makefile
@@ -0,0 +1,20 @@
+BASE = ../../..
+
+all: master slave
+
+clean: master-clean slave-clean
+
+master: maximus
+ make -f master-Makefile
+
+master-clean:
+ make -f master-Makefile clean
+
+slave: maximus
+ make -f slave-Makefile
+
+slave-clean:
+ make -f slave-Makefile clean
+
+maximus:
+ $(MAKE) -C $(BASE)/maximus/python
diff --git a/cesar/test_general/station/compliance-eoc/Makefile.mk b/cesar/test_general/station/compliance-eoc/Makefile.mk
new file mode 100644
index 0000000000..30a98dea2e
--- /dev/null
+++ b/cesar/test_general/station/compliance-eoc/Makefile.mk
@@ -0,0 +1,12 @@
+BASE = ../../..
+ECOS = y
+
+SC_SOURCES = fcall_av_stub.c
+SC_MODULES = lib mac/common mac cl bsu interface hal station bufmgr \
+ host test_general/station/fcall \
+ test_general/station/common host ce \
+ cp/eoc
+
+include $(BASE)/common/make/top.mk
+
+$(call src2obj,src/region_stub.c,target): $(BASE)/cp/eoc/fsm/fsm.h
diff --git a/cesar/test_general/station/compliance-eoc/master-Config b/cesar/test_general/station/compliance-eoc/master-Config
new file mode 100644
index 0000000000..fdc38b651c
--- /dev/null
+++ b/cesar/test_general/station/compliance-eoc/master-Config
@@ -0,0 +1,2 @@
+set eoc-master
+CONFIG_BLK_NB = 6000
diff --git a/cesar/test_general/station/compliance-eoc/master-Makefile b/cesar/test_general/station/compliance-eoc/master-Makefile
new file mode 100644
index 0000000000..08549fdfde
--- /dev/null
+++ b/cesar/test_general/station/compliance-eoc/master-Makefile
@@ -0,0 +1,8 @@
+VARIANT = master
+
+TARGET_PROGRAMS = master
+
+master_SOURCES = $(SC_SOURCES)
+master_MODULES = $(SC_MODULES)
+
+include Makefile.mk
diff --git a/cesar/test_general/station/compliance-eoc/master-ecos.ecc.sh b/cesar/test_general/station/compliance-eoc/master-ecos.ecc.sh
new file mode 100644
index 0000000000..e0278271fe
--- /dev/null
+++ b/cesar/test_general/station/compliance-eoc/master-ecos.ecc.sh
@@ -0,0 +1,5 @@
+config=${1:-ecos-gen.ecc}
+ecosconfig --config=$config new maximus default
+cat >> $config <<'EOF'
+EOF
+ecosconfig --config=$config check
diff --git a/cesar/test_general/station/compliance-eoc/py/sc01_dut_as_a_cco.py b/cesar/test_general/station/compliance-eoc/py/sc01_dut_as_a_cco.py
new file mode 100644
index 0000000000..3f001f606a
--- /dev/null
+++ b/cesar/test_general/station/compliance-eoc/py/sc01_dut_as_a_cco.py
@@ -0,0 +1,96 @@
+#!/usr/bin/python
+
+#############################################################################
+# See Phase II certification
+# Compliance Certification Test plan.
+# Version 1.0.22
+#
+# Section 6.2.1 DUT as a CCo
+# Purpose: Verify that in a single AVLN there is only one DUT that is acting
+# as a Central Coordinator.
+#
+# Expected Results:
+# There is only one DUT with CCo Capability value equals to 0b01 or test is
+# failed.
+#############################################################################
+
+
+import sys
+base_path = sys.path[0] + '/../../../../'
+
+sys.path.append (base_path + '/test_general/station/common/py')
+from startup import Startup
+
+startup = Startup (base_path = base_path,
+ executable = sys.path[0] + '/../obj/simu/station.elf')
+startup.add_option ('-g', '--gdb', action = 'store_true',
+ default = False, help = 'launch the test in debug mode')
+startup.add_option ('-t', '--trace', action = 'store_true',
+ default = False,
+ help = 'dump trace of all stations using command: "pkill -USR2 -f'
+ + ' maximus"')
+argv, proto, options = startup.parse ()
+
+from csicore import csiCore, csiSta
+from define import SECURITY_LEVEL_SC
+
+
+# If trace dumping is enabled.
+if options.trace:
+ # Handler for dump all the trace of the station.
+ import signal
+ def trace_signal_handler (signal, frame):
+ dump_trace ()
+ # Bind handler to SIGUSR2.
+ signal.signal (signal.SIGUSR2, trace_signal_handler)
+
+# Initialize CSI.
+csi = csiCore(1247);
+# Create an AVLN.
+avln = csi.avln_add ("HomePlugAV0123", "AVLN")
+# Add two STA.
+macs = startup.get_macs ()
+print macs
+
+stas = []
+for i in range (len (macs)):
+ stas.append (avln.sta_add (macs[i], False, False,
+ "ABCD-EFGH-IJKL-MNOP", "Spidcom Station " + str(i),
+ "Spidcom Sta SPC300", SECURITY_LEVEL_SC,
+ debug = options.gdb))
+
+csi.process_init (argv, proto)
+csi.process_avlns_launch ()
+csi.process_wait_sec (30)
+
+# Class which do the real check.
+import unittest
+class TestDUTAsACCo(unittest.TestCase):
+ def setUp (self):
+ pass
+ def tearDown (self):
+ pass
+
+ def test (self):
+ # Check STA CCo status.
+ from own_data import Station_own_data
+
+ sta_data = Station_own_data ()
+ data = sta_data.get_data (csi.get_maximus(), stas[0].get_sta_cesar())
+ sta1_cco_status = data.is_cco
+
+ data = sta_data.get_data (csi.get_maximus(), stas[1].get_sta_cesar())
+ sta2_cco_status = data.is_cco
+
+ self.failUnless (sta1_cco_status ^ sta2_cco_status)
+
+suite = unittest.TestLoader().loadTestsFromTestCase(TestDUTAsACCo)
+testResult = unittest.TextTestRunner(verbosity=2).run(suite)
+
+if options.trace:
+ for i in range (len (macs)):
+ csi.debug_trace_dump ('all', stas[i])
+
+csi.process_avlns_remove ()
+# For nightly build errors
+sys.exit ((1, 0)[testResult.wasSuccessful ()])
diff --git a/cesar/test_general/station/compliance-eoc/py/test01_eoc_init_one_cco.py b/cesar/test_general/station/compliance-eoc/py/test01_eoc_init_one_cco.py
new file mode 100644
index 0000000000..e62148911b
--- /dev/null
+++ b/cesar/test_general/station/compliance-eoc/py/test01_eoc_init_one_cco.py
@@ -0,0 +1,95 @@
+#!/usr/bin/python
+
+#############################################################################
+# See Phase II certification
+# Compliance Certification Test plan.
+# Version 1.0.22
+#
+# Section 6.2.1 DUT as a CCo
+# Purpose: Verify that in a single AVLN there is only one DUT that is acting
+# as a Central Coordinator.
+#
+# Expected Results:
+# There is only one DUT with CCo Capability value equals to 0b01 or test is
+# failed.
+#############################################################################
+
+
+import sys
+base_path = sys.path[0] + '/../../../../'
+
+sys.path.append (base_path + '/test_general/station/common/py')
+from startup import Startup
+
+startup = Startup (base_path = base_path,
+ executable = sys.path[0] + '/../obj/master/master.elf')
+startup.add_option ('-g', '--gdb', action = 'store_true',
+ default = False, help = 'launch the test in debug mode')
+startup.add_option ('-t', '--trace', action = 'store_true',
+ default = False,
+ help = 'dump trace of all stations using command: "pkill -USR2 -f'
+ + ' maximus"')
+argv, proto, options = startup.parse ()
+
+from csicore import csiCore, csiSta
+from define import SECURITY_LEVEL_SC
+
+
+# If trace dumping is enabled.
+if options.trace:
+ # Handler for dump all the trace of the station.
+ import signal
+ def trace_signal_handler (signal, frame):
+ dump_trace ()
+ # Bind handler to SIGUSR2.
+ signal.signal (signal.SIGUSR2, trace_signal_handler)
+
+# Initialize CSI.
+csi = csiCore(1247);
+# Create an AVLN.
+avln = csi.avln_add ("HomePlugAV0123", "AVLN")
+
+# Add one CCO.
+macs = ["00:01:01:00:00:01"]
+print macs
+
+stas = []
+for i in range (len (macs)):
+ stas.append (avln.sta_add (macs[i], True, True,
+ "ABCD-EFGH-IJKL-MNOP", "Spidcom Station " + str(i),
+ "Spidcom Sta SPC300", SECURITY_LEVEL_SC,
+ debug = options.gdb))
+
+csi.process_init (argv, proto)
+csi.process_avlns_launch ()
+csi.process_wait_sec (30)
+
+# Class which do the real check.
+import unittest
+class TestDUTAsACCo(unittest.TestCase):
+ def setUp (self):
+ pass
+ def tearDown (self):
+ pass
+
+ def test (self):
+ # Check STA CCo status.
+ from own_data import Station_own_data
+
+ sta_data = Station_own_data ()
+ data = sta_data.get_data (csi.get_maximus(), stas[0].get_sta_cesar())
+ sta1_cco_status = data.is_cco
+
+ self.failUnless (sta1_cco_status)
+
+suite = unittest.TestLoader().loadTestsFromTestCase(TestDUTAsACCo)
+testResult = unittest.TextTestRunner(verbosity=2).run(suite)
+
+if options.trace:
+ for i in range (len (macs)):
+ csi.debug_trace_dump ('all', stas[i])
+
+csi.process_avlns_stop()
+csi.process_avlns_remove ()
+# For nightly build errors
+sys.exit ((1, 0)[testResult.wasSuccessful ()])
diff --git a/cesar/test_general/station/compliance-eoc/py/test01_eoc_init_one_sta.py b/cesar/test_general/station/compliance-eoc/py/test01_eoc_init_one_sta.py
new file mode 100644
index 0000000000..5799f5fbc7
--- /dev/null
+++ b/cesar/test_general/station/compliance-eoc/py/test01_eoc_init_one_sta.py
@@ -0,0 +1,94 @@
+#!/usr/bin/python
+
+#############################################################################
+# See Phase II certification
+# Compliance Certification Test plan.
+# Version 1.0.22
+#
+# Section 6.2.1 DUT as a CCo
+# Purpose: Verify that in a single AVLN there is only one DUT that is acting
+# as a Central Coordinator.
+#
+# Expected Results:
+# There is only one DUT with CCo Capability value equals to 0b01 or test is
+# failed.
+#############################################################################
+
+
+import sys
+base_path = sys.path[0] + '/../../../../'
+
+sys.path.append (base_path + '/test_general/station/common/py')
+from startup import Startup
+
+startup = Startup (base_path = base_path,
+ executable = sys.path[0] + '/../obj/slave/slave.elf')
+startup.add_option ('-g', '--gdb', action = 'store_true',
+ default = False, help = 'launch the test in debug mode')
+startup.add_option ('-t', '--trace', action = 'store_true',
+ default = False,
+ help = 'dump trace of all stations using command: "pkill -USR2 -f'
+ + ' maximus"')
+argv, proto, options = startup.parse ()
+
+from csicore import csiCore, csiSta
+from define import SECURITY_LEVEL_SC
+
+
+# If trace dumping is enabled.
+if options.trace:
+ # Handler for dump all the trace of the station.
+ import signal
+ def trace_signal_handler (signal, frame):
+ dump_trace ()
+ # Bind handler to SIGUSR2.
+ signal.signal (signal.SIGUSR2, trace_signal_handler)
+
+# Initialize CSI.
+csi = csiCore(1247);
+# Create an AVLN.
+avln = csi.avln_add ("HomePlugAV0123", "AVLN")
+
+# Add one STA.
+macs = ["00:01:01:00:00:23"]
+print macs
+
+stas = []
+for i in range (len (macs)):
+ stas.append (avln.sta_add (macs[i], False, False,
+ "ABCD-EFGH-IJKL-MNOP", "Spidcom Station " + str(i),
+ "Spidcom Sta SPC300", SECURITY_LEVEL_SC,
+ debug = options.gdb))
+
+csi.process_init (argv, proto)
+csi.process_avlns_launch ()
+csi.process_wait_sec (30)
+
+# Class which do the real check.
+import unittest
+class TestDUTAsACCo(unittest.TestCase):
+ def setUp (self):
+ pass
+ def tearDown (self):
+ pass
+
+ def test (self):
+ # Check STA CCo status.
+ from own_data import Station_own_data
+
+ sta_data = Station_own_data ()
+ data = sta_data.get_data (csi.get_maximus(), stas[0].get_sta_cesar())
+ sta1_cco_status = data.is_cco
+
+ self.failUnless (sta1_cco_status == 0)
+
+suite = unittest.TestLoader().loadTestsFromTestCase(TestDUTAsACCo)
+testResult = unittest.TextTestRunner(verbosity=2).run(suite)
+
+if options.trace:
+ for i in range (len (macs)):
+ csi.debug_trace_dump ('all', stas[i])
+
+csi.process_avlns_remove ()
+# For nightly build errors
+sys.exit ((1, 0)[testResult.wasSuccessful ()])
diff --git a/cesar/test_general/station/compliance-eoc/py/test02_eoc_beacon.py b/cesar/test_general/station/compliance-eoc/py/test02_eoc_beacon.py
new file mode 100644
index 0000000000..8ad8d15f57
--- /dev/null
+++ b/cesar/test_general/station/compliance-eoc/py/test02_eoc_beacon.py
@@ -0,0 +1,121 @@
+#!/usr/bin/env python
+
+##############################################################################
+# The CCo and one station #
+# ---------------------------------------------------------------------- #
+# #
+# Objective: Send central beacon with EoC ScheduleBentry by the CCo, #
+# and verify the reception of beacon on the station, content of beacon #
+# is partly examined on maximus #
+##############################################################################
+
+import unittest
+import sys
+
+sys.path.append ('../../../maximus/python/tools/csi/')
+sys.path.append ('../../../maximus/python/obj/')
+sys.path.append ('../../../maximus/python/')
+sys.path.append ('../../../maximus/python/lib/cesar')
+
+base_path = sys.path[0] + '/../../../../'
+
+sys.path.append (base_path + '/test_general/station/common/py')
+from startup import Startup
+
+startup = Startup (base_path = base_path,
+ executable = sys.path[0] + '/../obj/master/master.elf')
+startup.add_option ('-g', '--gdb', action = 'store_true',
+ default = False, help = 'launch the test in debug mode')
+startup.add_option ('-t', '--trace', action = 'store_true',
+ default = False,
+ help = 'dump trace of all stations using command: "pkill -USR2 -f'
+ + ' maximus"')
+argv, proto, options = startup.parse ()
+
+from csicore import *
+from define import SECURITY_LEVEL_SC
+from maximus import *
+
+
+LOCAL_CSMA = int(0xfe) # 0xff < 1
+CFPI = int(0xf8) # 0xfc < 1
+SPC_CENTRAL = int(0xf6) # 0xfb < 1
+NON_PERSISTENT_SCHEDULE_BENTRY = 0
+
+# Define test parameters.
+NUM_BEACON = 2
+MS_TCK = 25000
+MS_PERIOD = NUM_BEACON * 100 + 3
+
+# Initialize CSI.
+csi = csiCore(1234);
+# Create an AVLN.
+avln = csi.avln_add ("HomePlugAV0123", "CABLENET")
+
+macs = ["00:01:01:00:00:35"]
+
+print macs
+
+stas = []
+# Add CCO.
+stas.append (avln.sta_add ("00:01:01:00:00:01", False, False,
+ "ABCD-EFGH-IJKL-MNOP", "Spidcom Station CCO",
+ "Spidcom Sta SPC300", SECURITY_LEVEL_SC,
+ debug = options.gdb, executable = "./obj/master/master.elf"))
+
+# Add one STA
+stas.append (avln.sta_add (macs[0], False, False,
+ "ABCD-EFGH-IJKL-MNOP", "Spidcom Station " + str(1),
+ "Spidcom Sta SPC300", SECURITY_LEVEL_SC,
+ debug = options.gdb, executable = "./obj/slave/slave.elf"))
+
+csi.process_init (argv, proto)
+
+csi.process_avlns_launch ()
+
+csi.get_maximus().wait (MS_PERIOD * MS_TCK)
+
+class TestEocBeacon (unittest.TestCase):
+
+ def setUp (self):
+ pass
+
+ def tearDown (self):
+ pass
+
+ def testBeaconContent (self):
+ mpdu = recv (csi.get_maximus(), count = 1, filter = frame_filter_mpdu,
+ timeout = 8000000)
+ self.failUnless (mpdu != None)
+ mpdu0 = mpdu[0]
+ if mpdu0.get_type() is 'PHY_TYPE_MPDU_PAYLOAD':
+ print "Maximus received mpdu"
+ fc_av0 = mpdu0.get_fc_av()[0]
+ #Test if Central Beacon
+ self.failUnless((fc_av0 & 0x3) == 0)
+ #Beacon Content
+ pb = mpdu0.get_pblist()[0]
+ beacon_type = int (unpack ('128B',pb)[4])
+ non_persis = int (unpack ('128B', pb)[9])
+ glid1 = int (unpack ('128B',pb)[12])
+ glid2 = int (unpack ('128B',pb)[15])
+ glid3 = int (unpack ('128B',pb)[18])
+ self.failUnless ((beacon_type & 0x3) == 0)
+ self.failUnless (non_persis == NON_PERSISTENT_SCHEDULE_BENTRY)
+ self.failUnless (glid1 == SPC_CENTRAL, glid2 == LOCAL_CSMA)
+ self.failUnless (glid3 == CFPI)
+
+ def testBeaconReception (self):
+ probe = csi.get_maximus().create_probe ()
+ probe.add_param ("nb_beacon_recv")
+ probe.send (stas[1].get_sta_cesar().get())
+ nb_beacon_recv = unpack('L',probe.bind_param ("nb_beacon_recv"))
+
+ self.failUnless (int(nb_beacon_recv[0]) == NUM_BEACON)
+
+suite = unittest.TestLoader ().loadTestsFromTestCase (TestEocBeacon)
+testResult = unittest.TextTestRunner (verbosity = 2).run (suite)
+
+csi.process_avlns_remove ()
+# For nightly build errors
+sys.exit ((1, 0)[result and testResult.wasSuccessful ()])
diff --git a/cesar/test_general/station/compliance-eoc/py/test03_eoc_init_cco_sta.py b/cesar/test_general/station/compliance-eoc/py/test03_eoc_init_cco_sta.py
new file mode 100644
index 0000000000..5601d2c5e8
--- /dev/null
+++ b/cesar/test_general/station/compliance-eoc/py/test03_eoc_init_cco_sta.py
@@ -0,0 +1,85 @@
+#!/usr/bin/python
+
+#############################################################################
+# See Phase II certification
+# Compliance Certification Test plan.
+# Version 1.0.22
+#
+# Section 6.2.1 DUT as a CCo
+# Purpose: Verify that in a single AVLN there is only one DUT that is acting
+# as a Central Coordinator.
+#
+# Expected Results:
+# There is only one DUT with CCo Capability value equals to 0b01 or test is
+# failed.
+#############################################################################
+
+
+import sys
+base_path = sys.path[0] + '/../../../../'
+
+sys.path.append (base_path + '/test_general/station/common/py')
+from startup import Startup
+
+startup = Startup (base_path = base_path,
+ executable = sys.path[0] + '/../obj/master/master.elf')
+startup.add_option ('-g', '--gdb', action = 'store_true',
+ default = False, help = 'launch the test in debug mode')
+startup.add_option ('-t', '--trace', action = 'store_true',
+ default = False,
+ help = 'dump trace of all stations using command: "pkill -USR2 -f'
+ + ' maximus"')
+argv, proto, options = startup.parse ()
+
+from csicore import * #csiCore, csiSta
+from define import SECURITY_LEVEL_SC
+
+
+# If trace dumping is enabled.
+if options.trace:
+ # Handler for dump all the trace of the station.
+ import signal
+ def trace_signal_handler (signal, frame):
+ dump_trace ()
+ # Bind handler to SIGUSR2.
+ signal.signal (signal.SIGUSR2, trace_signal_handler)
+
+# Initialize CSI.
+csi = csiCore(1247);
+# Create an AVLN.
+avln = csi.avln_add ("HomePlugAV0123", "AVLN")
+
+# Add one CCO.
+macs = ["00:01:01:00:00:32"]
+print macs
+
+stas = []
+stas.append (avln.sta_add ("00:01:01:00:00:01", False, False,
+ "ABCD-EFGH-IJKL-MNOP", "Spidcom Station CCO",
+ "Spidcom Sta SPC300", SECURITY_LEVEL_SC,
+ debug = options.gdb, executable = "./obj/master/master.elf"))
+
+for i in range (len (macs)):
+ stas.append (avln.sta_add (macs[i], False, False,
+ "ABCD-EFGH-IJKL-MNOP", "Spidcom Station " + str(i),
+ "Spidcom Sta SPC300", SECURITY_LEVEL_SC,
+ debug = options.gdb, executable = "./obj/slave/slave.elf"))
+
+csi.process_init (argv, proto)
+csi.process_avlns_launch ()
+
+csi.process_wait_sec (2)
+print "Start broadcast sending"
+csi.process_avlns_send_broadcast()
+
+csi.process_wait_sec (2)
+print "Start packet sending from CCo"
+packet = [csiPacket (150, avln, stas[0], None, stas[1])]
+csi.process_data_send_traffic (packet)
+csi.process_wait_sec (2)
+print "Start packet sending from STA"
+packet = [csiPacket (250, avln, stas[1], None, stas[0])]
+csi.process_data_send_traffic (packet)
+
+csi.process_wait_sec (50)
+csi.process_avlns_remove ()
diff --git a/cesar/test_general/station/compliance-eoc/py/test05_eoc_init_cco_multista.py b/cesar/test_general/station/compliance-eoc/py/test05_eoc_init_cco_multista.py
new file mode 100644
index 0000000000..9a683916c7
--- /dev/null
+++ b/cesar/test_general/station/compliance-eoc/py/test05_eoc_init_cco_multista.py
@@ -0,0 +1,182 @@
+#!/usr/bin/python
+
+#############################################################################
+# Test one CCO and multiple STA.
+# Send 10000 packets of data to STAs
+#############################################################################
+
+
+import sys
+base_path = sys.path[0] + '/../../../../'
+
+sys.path.append (base_path + '/test_general/station/common/py')
+from startup import Startup
+
+startup = Startup (base_path = base_path,
+ executable = sys.path[0] + '/../obj/master/master.elf')
+startup.add_option ('-g', '--gdb', action = 'store_true',
+ default = False, help = 'launch the test in debug mode')
+startup.add_option ('-t', '--trace', action = 'store_true',
+ default = False,
+ help = 'dump trace of all stations using command: "pkill -USR2 -f'
+ + ' maximus"')
+argv, proto, options = startup.parse ()
+
+from csicore import * #csiCore, csiSta
+from define import SECURITY_LEVEL_SC
+from maximus import *
+
+# If trace dumping is enabled.
+if options.trace:
+ # Handler for dump all the trace of the station.
+ import signal
+ def trace_signal_handler (signal, frame):
+ dump_trace ()
+ # Bind handler to SIGUSR2.
+ signal.signal (signal.SIGUSR2, trace_signal_handler)
+
+# Initialize CSI.
+csi = csiCore(1247);
+# Create an AVLN.
+avln = csi.avln_add ("HomePlugAV0123", "AVLN")
+
+macs = []
+
+N = 1
+N_SIM = 0
+N_SMALL = 0
+N_BIG = 0
+#Fill macs
+for i in range(0,N):
+ macs.append("00:01:01:00:00:" + str(20 + i))
+
+print macs
+
+stas = []
+# Add one CCO.
+stas.append (avln.sta_add ("00:01:01:00:00:01", False, False,
+ "ABCD-EFGH-IJKL-MNOP", "Spidcom Station CCO",
+ "Spidcom Sta SPC300", SECURITY_LEVEL_SC,
+ debug = options.gdb, executable = "./obj/master/master.elf"))
+
+# Add several STAs
+for i in range (len (macs)):
+ stas.append (avln.sta_add (macs[i], False, False,
+ "ABCD-EFGH-IJKL-MNOP", "Spidcom Station " + str(i),
+ "Spidcom Sta SPC300", SECURITY_LEVEL_SC,
+ debug = options.gdb and i < N_SIM,
+ executable = "./obj/slave/slave.elf"))
+
+csi.process_init (argv, proto)
+#csi.get_maximus().disturb_channel(True)
+#set_snr (csi.get_maximus(), value = 1)
+
+csi.process_wait_sec (157)
+
+csi.process_avlns_launch ()
+
+print "Start broadcast sending"
+csi.process_avlns_send_broadcast()
+csi.get_maximus().wait (1000000)
+csi.process_avlns_send_broadcast()
+csi.get_maximus().wait (1000000)
+csi.process_avlns_send_broadcast()
+csi.get_maximus().wait (1000000)
+csi.process_avlns_send_broadcast()
+csi.get_maximus().wait (1000000)
+csi.process_avlns_send_broadcast()
+csi.get_maximus().wait (1000000)
+csi.process_avlns_send_broadcast()
+
+csi.process_wait_sec (1)
+print "Start packet sending from CCo"
+packet = [csiPacket (153, avln, stas[0], None, stas[1])]
+csi.process_data_send_traffic (packet)
+packet = [csiPacket (153, avln, stas[0], None, stas[1])]
+csi.process_data_send_traffic (packet)
+csi.process_wait_sec (1)
+print "Start packet sending from STA"
+packet = [csiPacket (253, avln, stas[1], None, stas[0])]
+csi.process_data_send_traffic (packet)
+packet = [csiPacket (253, avln, stas[1], None, stas[0])]
+csi.process_data_send_traffic (packet)
+packet = [csiPacket (492, avln, stas[1], None, stas[0])]
+csi.process_data_send_traffic (packet)
+packet = [csiPacket (492, avln, stas[0], None, stas[1])]
+csi.process_data_send_traffic (packet)
+packet = [csiPacket (236, avln, stas[0], None, stas[1])]
+csi.process_data_send_traffic (packet)
+packet = [csiPacket (236, avln, stas[0], None, stas[1])]
+csi.process_data_send_traffic (packet)
+
+csi.process_wait_sec (1)
+print "Send 10000 short packets, duration 4s"
+
+for i in range (0, N_SMALL):
+ if i % 50 == 0:
+ print "Packet ", i
+ if i % 10 == 0:
+ csi.get_maximus().wait (100000)
+ packet = [csiPacket (64 + random.randint(0, 200), avln, stas[0], None,
+ stas[1+(i%N)])]
+ csi.process_data_send_traffic (packet)
+
+csi.process_wait_sec (1)
+print "Send 500 long packets duration 50x10ms = 0,5s"
+
+for i in range (0, N_BIG):
+ if i % 50 == 0:
+ print "Packet ", i
+ if i % 10 == 0:
+ csi.get_maximus().wait (250000)
+ packet = [csiPacket (1200 + random.randint(0, 200), avln, stas[0], None,
+ stas[1+(i%N)])]
+ csi.process_data_send_traffic (packet)
+
+csi.process_wait_sec (1)
+
+print "Bandwidth test"
+
+SIZE_1Mb = 1024 * 128
+MS_TCK = 25000
+MS_PERIOD = 1
+MS_NUM = 1000
+OVERALL = 30000
+curr_size = 140
+MAX_SIZE = 150
+DIRECTION=1
+TOGGLE=0
+MAXIMUS_OFFSET = 14
+TO_ONE_STA = 0
+while curr_size < MAX_SIZE:
+ sta_curr = 0;
+ toggle = DIRECTION
+ p1size = 0
+ print "Bandwidth test, testing ", curr_size
+ for i in range(0,OVERALL/MS_PERIOD):
+ p1size += curr_size * SIZE_1Mb / (MS_NUM/MS_PERIOD)
+ if i % 20 == 0:
+ print 'Packet', i
+ while p1size >= 64:
+ len = min(p1size, 1200 + random.randint(0, 200)) - MAXIMUS_OFFSET
+ if TO_ONE_STA:
+ sta_pos = 0
+ else:
+ sta_pos = sta_curr % N
+ sta_curr = sta_curr + 1
+ if toggle:
+ packet = [csiPacket (len, avln, stas[0], None, stas[1+sta_pos])]
+ else:
+ packet = [csiPacket (len, avln, stas[1+sta_pos], None, stas[0])]
+ if TOGGLE:
+ toggle = 1 - toggle
+ csi.process_data_send_traffic (packet)
+ p1size -= len + MAXIMUS_OFFSET
+ # wait MS_PERIOD ms
+ csi.get_maximus().wait (MS_PERIOD*MS_TCK)
+ #wait 1 sec between iterations
+ csi.get_maximus().wait (MS_NUM*MS_TCK)
+ curr_size += 1
+
+#csi.process_verify_transmission()
+csi.process_avlns_remove ()
diff --git a/cesar/test_general/station/compliance-eoc/py/test06_eoc_change_nek.py b/cesar/test_general/station/compliance-eoc/py/test06_eoc_change_nek.py
new file mode 100644
index 0000000000..12cc6f5f45
--- /dev/null
+++ b/cesar/test_general/station/compliance-eoc/py/test06_eoc_change_nek.py
@@ -0,0 +1,101 @@
+#!/usr/bin/python
+
+# Create an CCo and four stations and test NEK change
+
+import sys
+import unittest
+base_path = sys.path[0] + '/../../../../'
+
+sys.path.append (base_path + '/test_general/station/common/py')
+from startup import Startup
+
+startup = Startup (base_path = base_path,
+ executable = sys.path[0] + '/../obj/master/master.elf')
+startup.add_option ('-g', '--gdb', action = 'store_true',
+ default = False, help = 'launch the test in debug mode')
+startup.add_option ('-t', '--trace', action = 'store_true',
+ default = False,
+ help = 'dump trace of all stations using command: "pkill -USR2 -f'
+ + ' maximus"')
+argv, proto, options = startup.parse ()
+
+from csicore import *
+from define import SECURITY_LEVEL_SC
+
+# If trace dumping is enabled.
+if options.trace:
+ # Handler for dump all the trace of the station.
+ import signal
+ def trace_signal_handler (signal, frame):
+ dump_trace ()
+ # Bind handler to SIGUSR2.
+ signal.signal (signal.SIGUSR2, trace_signal_handler)
+
+# Initialize CSI.
+csi = csiCore(1238);
+# Create an AVLN.
+avln = csi.avln_add ("HomePlugAV0123", "AVLN")
+
+# Add four stations
+macs = ["00:01:01:00:00:32", "00:01:01:00:00:33", "00:01:01:00:00:34",
+ "00:01:01:00:00:35"]
+print macs
+
+stas = []
+stas.append (avln.sta_add ("00:01:01:00:00:01", False, False,
+ "ABCD-EFGH-IJKL-MNOP", "Spidcom Station CCO",
+ "Spidcom Sta SPC300", SECURITY_LEVEL_SC,
+ debug = options.gdb, executable = "./obj/master/master.elf"))
+
+for i in range (len (macs)):
+ stas.append (avln.sta_add (macs[i], False, False,
+ "ABCD-EFGH-IJKL-MNOP", "Spidcom Station " + str(i),
+ "Spidcom Sta SPC300", SECURITY_LEVEL_SC,
+ debug = options.gdb, executable = "./obj/slave/slave.elf"))
+
+# Start network
+csi.process_init (argv, proto)
+csi.process_avlns_launch ()
+csi.process_wait_sec (3)
+
+# Send a FCALL to initiate the NEK change.
+fcall = csi.get_maximus().create_fcall ("fc_cco_change_nek")
+fcall.set_sta (stas[0].get_sta_cesar().get())
+fcall.send()
+print "Change NEK"
+csi.process_wait_sec (2)
+
+print "Start packet sending from CCo"
+packet = [csiPacket (100, avln, stas[0], None, stas[1])]
+csi.process_data_send_traffic (packet)
+print "Start packet sending from STA1"
+packet = [csiPacket (100, avln, stas[1], None, stas[0])]
+csi.process_data_send_traffic (packet)
+csi.process_wait_sec (1)
+
+print "Start packet sending from CCo"
+packet = [csiPacket (150, avln, stas[0], None, stas[2])]
+csi.process_data_send_traffic (packet)
+print "Start packet sending from STA2"
+packet = [csiPacket (150, avln, stas[2], None, stas[0])]
+csi.process_data_send_traffic (packet)
+csi.process_wait_sec (1)
+
+print "Start packet sending from CCo"
+packet = [csiPacket (200, avln, stas[0], None, stas[3])]
+csi.process_data_send_traffic (packet)
+print "Start packet sending from STA3"
+packet = [csiPacket (200, avln, stas[3], None, stas[0])]
+csi.process_data_send_traffic (packet)
+csi.process_wait_sec (1)
+
+print "Start packet sending from CCo"
+packet = [csiPacket (100, avln, stas[0], None, stas[4])]
+csi.process_data_send_traffic (packet)
+print "Start packet sending from STA4"
+packet = [csiPacket (100, avln, stas[4], None, stas[0])]
+csi.process_data_send_traffic (packet)
+
+csi.process_wait_sec (2)
+csi.process_verify_transmission ()
+csi.process_avlns_remove ()
diff --git a/cesar/test_general/station/compliance-eoc/py/trace.py b/cesar/test_general/station/compliance-eoc/py/trace.py
new file mode 100644
index 0000000000..bf962efaf1
--- /dev/null
+++ b/cesar/test_general/station/compliance-eoc/py/trace.py
@@ -0,0 +1,29 @@
+import sys
+sys.path.append('../../../maximus/python/obj');
+sys.path.append ('../../../maximus/python/lib/proto')
+
+from maximus_proto import MaximusProto
+from optparse import OptionParser
+
+parser = OptionParser()
+parser.add_option ("-m", "--mac", dest="mac", help="Board mac address")
+parser.add_option ("-n", "--net", dest="net", help="Network interface")
+parser.add_option ("-a", "--aface", dest="aface",
+ help="Hardware address of the Ethernet interface used to send \
+ packets to boards")
+
+(options, args) = parser.parse_args()
+assert options.net
+assert options.mac
+assert options.aface
+
+maximus = MaximusProto ()
+maximus.init (sys.argv + ['-n', options.net, '-a', options.aface])
+
+sta = maximus.create_sta (options.mac)
+sta.set_name ('Sta')
+
+# Sends a fcall to uninit the station.
+fcall = maximus.create_fcall ("fc_sta_trace_dump_all")
+fcall.set_sta (sta)
+fcall.send()
diff --git a/cesar/test_general/station/compliance-eoc/slave-Config b/cesar/test_general/station/compliance-eoc/slave-Config
new file mode 100644
index 0000000000..2f3dc2fa50
--- /dev/null
+++ b/cesar/test_general/station/compliance-eoc/slave-Config
@@ -0,0 +1,2 @@
+set eoc-slave
+CONFIG_BLK_NB = 3000
diff --git a/cesar/test_general/station/compliance-eoc/slave-Makefile b/cesar/test_general/station/compliance-eoc/slave-Makefile
new file mode 100644
index 0000000000..0ebf5def77
--- /dev/null
+++ b/cesar/test_general/station/compliance-eoc/slave-Makefile
@@ -0,0 +1,8 @@
+VARIANT = slave
+
+TARGET_PROGRAMS = slave
+
+slave_SOURCES = $(SC_SOURCES)
+slave_MODULES = $(SC_MODULES)
+
+include Makefile.mk
diff --git a/cesar/test_general/station/compliance-eoc/slave-ecos.ecc.sh b/cesar/test_general/station/compliance-eoc/slave-ecos.ecc.sh
new file mode 100644
index 0000000000..e0278271fe
--- /dev/null
+++ b/cesar/test_general/station/compliance-eoc/slave-ecos.ecc.sh
@@ -0,0 +1,5 @@
+config=${1:-ecos-gen.ecc}
+ecosconfig --config=$config new maximus default
+cat >> $config <<'EOF'
+EOF
+ecosconfig --config=$config check
diff --git a/cesar/test_general/station/compliance-eoc/src/fcall_av_stub.c b/cesar/test_general/station/compliance-eoc/src/fcall_av_stub.c
new file mode 100644
index 0000000000..fe82472e3e
--- /dev/null
+++ b/cesar/test_general/station/compliance-eoc/src/fcall_av_stub.c
@@ -0,0 +1,26 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2012 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/fcall_av_stub.c
+ * \brief « brief description »
+ * \ingroup « module »
+ *
+ * « long description »
+ */
+#include "common/std.h"
+#include "cp/cp.h"
+
+void
+cp_av_sta_action_assoc_leave (cp_t *ctx)
+{
+}
+
+void
+cp_av_beacon_change_hm (cp_t *ctx, uint hybrid_mode)
+{
+}
diff --git a/cesar/test_general/station/interoperability/Makefile b/cesar/test_general/station/interoperability/Makefile
index 6e7bf3c226..0dc4c201c2 100644
--- a/cesar/test_general/station/interoperability/Makefile
+++ b/cesar/test_general/station/interoperability/Makefile
@@ -6,7 +6,7 @@ ECOS = y
TARGET_PROGRAMS= station
station_SOURCES =
-station_MODULES = lib mac/common mac cl hle interface cp hal station \
+station_MODULES = lib mac/common mac cl interface cp hal station bufmgr \
hal/arch hal/phy \
test_general/station/fcall \
cp/beacon/stub \
diff --git a/cesar/test_general/station/vs_eoc/py/vs_eoc_get_topo.py b/cesar/test_general/station/vs_eoc/py/vs_eoc_get_topo.py
new file mode 100644
index 0000000000..0ba4d71b6a
--- /dev/null
+++ b/cesar/test_general/station/vs_eoc/py/vs_eoc_get_topo.py
@@ -0,0 +1,175 @@
+#!/usr/bin/env python
+
+##############################################################################
+# VS_EOC_GET_TOPO #
+# ---------------------------------------------------------------------- #
+# Objective: Test behavior of mme VS_EOC_GET_TOPO #
+##############################################################################
+import unittest
+import sys
+import re
+import struct
+
+sys.path.append ('../../../maximus/python/tools/csi/')
+sys.path.append ('../../../maximus/python/obj/')
+sys.path.append ('../../../maximus/python/')
+sys.path.append ('../../../maximus/python/lib/cesar')
+
+from struct import pack, unpack
+from maximus.mme.mme import MME
+from maximus.mme.mmheader import MMHeader
+from maximus.mme.mmentry import MMEntry
+from maximus.simu.rx import recv
+from struct import pack, unpack
+from csicore import *
+
+# Some defines
+# Number of STA in the test
+sta_count = 1
+
+def data_msdu_filter (msdu):
+ if msdu.get_type () is 'ETHERNET_TYPE_MME':
+ # The received object is an MSDU
+ return True
+ else:
+ return False
+
+# Convert string representing hexa into octet value
+def string2octet (string, i):
+ (a, b) = unpack ("BB", string[i:i+2])
+ if (a >= 0x30) and (a<0x3A):
+ a = (a - 0x30)
+ else:
+ if (a >= 0x41) and (a < 0x47):
+ a = (a - 0x41 + 0xA);
+ else:
+ if (a >= 0x61) and (a < 0x67):
+ a = (a - 0x61 + 0xA);
+ else:
+ exit
+ if (b >= 0x30) and (b<0x3A):
+ b = (b - 0x30)
+ else:
+ if (b >= 0x41) and (b < 0x47):
+ b = (b - 0x41 + 0xA);
+ else:
+ if (b >= 0x61) and (b < 0x67):
+ b = (b - 0x61 + 0xA);
+ else:
+ exit
+ return (a*16 + b)
+
+# Send request to station (dest_sta)
+def send_vs_eoc_get_topo_req (self, dest_sta):
+ #dest_sta.get_sta_cesar().debug()
+
+ dest_mac = dest_sta.get_mac_addr()
+
+ # Convert entry data into a single string
+ data = ""
+
+ # Create and send mme message VS_EOC_GET_TOPO.REQ
+ mme = MME (MMHeader=MMHeader (dest_mac, "20:21:22:23:24:25", MTYPE = 0x88E1,
+ MMV = 1, MMTYPE = 0xA04C, FMI = 0),
+ MMEntry=MMEntry (data))
+ mme.send (csi.get_maximus(), dest_sta.get_sta_cesar().get())
+
+ # Wait for response
+ rsp = recv (csi.get_maximus (), count = 1, filter = data_msdu_filter,
+ timeout = 5000)
+
+ # Fail in case of no response
+ self.failUnless (rsp != None)
+ rsp = rsp[0] # take the first response of the list
+ entry = rsp.get_mmentry()
+ head = rsp.get_mmheader()
+
+ oda = ':'.join ("%02x" % i for i in unpack ("6B", head[0:6]))
+ osa = ':'.join ("%02x" % i for i in unpack ("6B", head[6:12]))
+ mtype = unpack ("H", head[12:14])[0] # no VLAN Tag
+ mmv = unpack ("B", head[14:15])[0]
+ mmtype = unpack ("H", head[15:17])[0]
+ fmi = unpack ("H", head[17:19])[0]
+
+ # Check that mmtype is correct
+ self.failUnless (mmtype == 0xA04D)
+ print " Check cnf ok"
+
+ # Extract data from entry field
+ result = unpack ('B', entry[0])[0]
+ sta_nb = unpack ('B', entry[1])[0]
+ mac_addr = unpack ('BBBBBB', entry[2:8])
+ auth_status = unpack ('B', entry[8])[0]
+ up_att = unpack ('B', entry[9])[0]
+
+ # Compare received value to expected value
+ self.failUnless (result == 0) # 0 is success
+ #self.failUnless (sta_nb == 1)
+ self.failUnless (sta_nb == 0)
+
+ return (mac_addr, auth_status, up_att)
+
+# Class which do the real check
+import unittest
+class TestVsEocGetTopo (unittest.TestCase):
+ def setUp (self):
+ pass
+ def tearDown (self):
+ pass
+ def testVsEocGetTopo (self):
+ print "\nGet topo"
+ (mac_addr, auth_status, up_att) = send_vs_eoc_get_topo_req (self, csista[0])
+
+ # Check results
+ #self.failUnless (mac_addr == (0x66, 0x55, 0x44, 0x33, 0x22, 0x11))
+ #self.failUnless (auth_status == 1)
+ #self.failUnless (up_att == 0)
+
+# Include startup script
+import sys
+base_path = sys.path[0] + '/../../../../'
+
+sys.path.append (base_path + '/test_general/station/common/py')
+from startup import Startup
+from define import *
+startup = Startup (base_path = base_path,
+ executable = sys.path[0] + '/../../compliance-eoc/obj/simu-cco/cco.elf')
+startup.add_option ('-g', '--gdb', action = 'store_true',
+ default = False, help = 'launch the test in debug mode')
+startup.add_option ('-v', '--verbose', action = 'store_true',
+ default = False, help = 'Verbose test output')
+argv, proto, options = startup.parse ()
+
+# Import CSI
+from csicore import csiCore, csiSta, csiPacket
+from sta_mgr import Sta_mgr
+from own_data import Station_own_data
+
+from maximus.channel import *
+
+# Initialize CSI
+csi = csiCore(4242);
+
+# Create an AVLN
+avln = csi.avln_add ("HomePlugAV0123", "AVLN")
+
+# Add one STA
+macs = startup.get_macs ()
+csista = []
+for i in range (sta_count):
+ csista.append (avln.sta_add (macs[i], False, False,
+ "ABCD-EFGH-IJKL-MNOP", "Spidcom station" + str (i),
+ "Spidcom Station SPC 300", SECURITY_LEVEL_SC, debug = options.gdb))
+
+# Start the simulation
+csi.process_init (argv, proto)
+maximus = csi.get_maximus ()
+for i in range (sta_count):
+ csi.process_sta_start (csista[i])
+
+# Run test
+suite = unittest.TestLoader ().loadTestsFromTestCase (TestVsEocGetTopo)
+testResult = unittest.TextTestRunner (verbosity = 2).run (suite)
+
+# For nightly build errors
+sys.exit ((1, 0)[testResult.wasSuccessful ()])
diff --git a/cesar/tools/sniffer_phy/Config b/cesar/tools/sniffer_phy/Config
index b711c51e0f..4511b0ad03 100644
--- a/cesar/tools/sniffer_phy/Config
+++ b/cesar/tools/sniffer_phy/Config
@@ -1 +1,3 @@
CONFIG_STATS = n
+CONFIG_MAC_PBPROC_EOC_FC = y
+CONFIG_MAC_COMMON_EOC_TONEMASK = y
diff --git a/cesar/tools/sniffer_phy/Makefile b/cesar/tools/sniffer_phy/Makefile
index dab75ba5c6..aa8414a431 100644
--- a/cesar/tools/sniffer_phy/Makefile
+++ b/cesar/tools/sniffer_phy/Makefile
@@ -7,7 +7,8 @@ TARGET_OPTIMIZE = -Os
HOST_PROGRAMS = test_mme
test_mme_SOURCES = mme.c test_mme.c
-test_mme_MODULES = lib
+test_mme_MODULES = lib mac/common
+test_mme_MODULES_SOURCES = tonemask.c
TARGET_PROGRAMS = sniffer_phy
sniffer_phy_SOURCES = sniffer_phy.c lhle.c lowlevel.c mme.c
diff --git a/cesar/tools/sniffer_phy/src/lowlevel.c b/cesar/tools/sniffer_phy/src/lowlevel.c
index 784692b8e9..d0079cf814 100644
--- a/cesar/tools/sniffer_phy/src/lowlevel.c
+++ b/cesar/tools/sniffer_phy/src/lowlevel.c
@@ -86,8 +86,9 @@ lowlevel_fc_analyse (sniffer_phy_t *ctx, const u32 *fc_av,
else if (fc->sof.num_sym == 2)
symb_nb = 2;
else
- symb_nb = ((fl_tck - rifs_tck - 2 * MAC_DX567_TCK)
- / symbol_tck[mpdu->tm->gil] + 2);
+ symb_nb = (fl_tck > rifs_tck + 2 * MAC_DX567_TCK)?
+ ((fl_tck - rifs_tck - 2 * MAC_DX567_TCK)
+ / symbol_tck[mpdu->tm->gil] + 2):0;
/* Compute number of PB. */
uint bits_per_pb = mpdu->tm->bits_per_pb[PHY_PB_SIZE_520];
uint bits_per_symbol = mpdu->tm->bits_per_symbol;
@@ -296,7 +297,11 @@ lowlevel_activate (sniffer_phy_t *ctx, bool state)
ARCH_CPU_TO_DMA (ctx->lowlevel.tonemask_info->tonemask),
ctx->lowlevel.tonemask_info->carrier_nb);
/* Set RX mode. */
+#if CONFIG_MAC_PBPROC_EOC_FC
+ phy_rx_param (ctx->lowlevel.phy, PHY_FC_MODE_AV_1);
+#else
phy_rx_param (ctx->lowlevel.phy, PHY_FC_MODE_HYBRID_1);
+#endif
}
/* Change RX state. */
phy_rx_activate (ctx->lowlevel.phy, true, 0, state);
diff --git a/cesar/tools/sniffer_phy/src/mme.c b/cesar/tools/sniffer_phy/src/mme.c
index 132d0412f3..fe2b00db16 100644
--- a/cesar/tools/sniffer_phy/src/mme.c
+++ b/cesar/tools/sniffer_phy/src/mme.c
@@ -12,8 +12,11 @@
*
* Receive setup MME and send confirmation MME and sniffer MME.
*/
+#include <string.h>
#include "common/std.h"
+#include "config/mac/pbproc/eoc/fc.h"
+
#include "lib/bitstream.h"
#include "lib/swap.h"
#include "common/defs/homeplugAV.h"
@@ -94,7 +97,7 @@ mme_send_prepare (sniffer_phy_t *ctx, mme_buffer_t *mme, mac_t da,
bitstream_write (&mme->bitstream, HPAV_MMV1, 8);
bitstream_write (&mme->bitstream, mmtype, 16);
bitstream_write (&mme->bitstream, 0, 16);
- if (MMTYPE_IS_VS (mmtype))
+ if (MMTYPE_IS_VS (mmtype) || MMTYPE_IS_IMAC (mmtype))
bitstream_write (&mme->bitstream, SPC_OUI, OUI_SIZE_BITS);
return true;
}
@@ -158,6 +161,68 @@ mme_handle_drv_sta_set_mac_addr_req (sniffer_phy_t *ctx, mme_buffer_t *mme)
}
/**
+ * Receive a DRV_STA_SET_TONEMASK.REQ.
+ * \param ctx sniffer context
+ * \param mme MME data
+ * \param tonemask received tonemask
+ * \return true on success
+ */
+static bool
+mme_handle_drv_sta_set_tonemask_req_receive (sniffer_phy_t *ctx,
+ mme_buffer_t *mme, u32 *tonemask)
+{
+ int i;
+ u32 w;
+ dbg_assert (ctx);
+ dbg_assert (mme);
+ dbg_assert (tonemask);
+
+ /* Skip over unused carriers, and check they are unused. */
+ for (i = PHY_CARRIER_OFFSET; i >= 32; i -= 32)
+ {
+ w = bitstream_read (&mme->bitstream, 32);
+ if (w != ~0u)
+ return false;
+ }
+ if (i)
+ {
+ w = bitstream_read (&mme->bitstream, i);
+ if (w != BITS_ONES (i))
+ return false;
+ }
+ /* Read used carriers. */
+ for (i = 0; i < PHY_TONEMASK_WORDS; i++)
+ {
+ *tonemask++ = bitstream_read (&mme->bitstream, 32);
+ }
+ /* Check last carriers are unused. */
+ unsigned int phy_carrier_nb_mod32 = PHY_CARRIER_NB % 32;
+ if (phy_carrier_nb_mod32)
+ {
+ w = tonemask[-1] | BITS_ONES (phy_carrier_nb_mod32);
+ if (w != ~0u)
+ return false;
+ }
+ /* Skip last unused carriers, and check they are unused. */
+ for (i = PHY_ALL_CARRIER_NB - PHY_TONEMASK_WORDS * 32
+ - PHY_CARRIER_OFFSET;
+ i >= 32; i -= 32)
+ {
+ w = bitstream_read (&mme->bitstream, 32);
+ if (w != ~0u)
+ return false;
+ }
+ if (i)
+ {
+ w = bitstream_read (&mme->bitstream, i);
+ if (w != BITS_ONES (i))
+ return false;
+ }
+
+ return true;
+}
+
+/**
* Send a VS_SNIFFER.CNF.
* \param ctx sniffer context
* \param mme mme data
@@ -246,7 +311,7 @@ mme_handle_decode (sniffer_phy_t *ctx, mme_buffer_t *mme)
u16 fmi = bitstream_read (&mme->bitstream, 16);
if (fmi != 0)
return;
- if (MMTYPE_IS_VS (mmtype))
+ if (MMTYPE_IS_VS (mmtype) || MMTYPE_IS_IMAC (mmtype))
{
u32 oui = bitstream_read (&mme->bitstream, OUI_SIZE_BITS);
if (oui != SPC_OUI)
@@ -258,13 +323,20 @@ mme_handle_decode (sniffer_phy_t *ctx, mme_buffer_t *mme)
case DRV_STA_SET_MAC_ADDR_REQ:
mme_handle_drv_sta_set_mac_addr_req (ctx, mme);
break;
+ case DRV_STA_SET_TONEMASK_REQ:
+ {
+ u32 tonemask[PHY_TONEMASK_WORDS];
+ mme_handle_drv_sta_set_tonemask_req_receive (ctx, mme, tonemask);
+ memcpy (ctx->lowlevel.tonemask_info->tonemask, tonemask,
+ sizeof (tonemask));
+ tonemask_update (ctx->lowlevel.tonemask_info);
+ }
case DRV_STA_SET_CCO_PREF_REQ:
case DRV_STA_SET_WAS_CCO_REQ:
case DRV_STA_SET_SL_REQ:
case DRV_STA_SET_M_STA_HFID_REQ:
case DRV_STA_SET_U_STA_HFID_REQ:
case DRV_STA_SET_AVLN_HFID_REQ:
- case DRV_STA_SET_TONEMASK_REQ:
case DRV_STA_MAC_START_REQ:
case DRV_STA_SET_KEY_REQ:
case DRV_STA_SET_DAK_REQ:
@@ -335,7 +407,12 @@ mme_report_mpdu (sniffer_phy_t *ctx, lowlevel_rx_t *rx)
bitstream_write (bs, rx->fc10_bad_crc, 1);
bitstream_write (bs, rx->fc_bad_crc, 1);
bitstream_write (bs, pb ? pb->pb_measurement.crc_error : 0, 1);
+#if CONFIG_MAC_PBPROC_EOC_FC
+ bitstream_write (bs, 0, 12);
+ bitstream_write (bs, 1, 1);
+#else
bitstream_write (bs, 0, 13);
+#endif
bitstream_write (bs, pb ? rx->pb_nb : 0, 8);
bitstream_write (bs, pb ? i : 0, 8);
bitstream_write (bs, rx->date, 32);
diff --git a/cesar/tools/sniffer_phy/src/test_mme.c b/cesar/tools/sniffer_phy/src/test_mme.c
index f1cb0bdda5..582cf1749f 100644
--- a/cesar/tools/sniffer_phy/src/test_mme.c
+++ b/cesar/tools/sniffer_phy/src/test_mme.c
@@ -16,6 +16,7 @@
#include "common/defs/ethernet.h"
#include "lib/test.h"
+#include "mac/pbproc/inc/fc.h"
#include <string.h>
@@ -430,7 +431,8 @@ mme_mpdu_test (test_t t, sniffer_phy_t *ctx, const char *test_name,
0x000000a0,
0x0102d713,
(fc10_bad_crc ? 0x0001 : 0)
- | (fc_bad_crc ? 0x0002 : 0),
+ | (fc_bad_crc ? 0x0002 : 0)
+ | ((CONFIG_MAC_PBPROC_EOC_FC) ? 0x8000 : 0),
rx.date,
fc10_bad_crc ? 0xffffffff : rx.fc10,
fc_bad_crc ? 0xffffffff : rx.fc[0],
@@ -491,7 +493,8 @@ mme_mpdu_pb_test (test_t t, sniffer_phy_t *ctx, const char *test_name,
0xffd71300, 0x13004523, 0x3412ffd7, 0x2e01e188,
0x000000a0, 0x0102d713,
(pb_bad_crc & (1 << pb) ? 0x0004 : 0)
- | pb_nb << 16 | pb << 24,
+ | pb_nb << 16 | pb << 24
+ | ((CONFIG_MAC_PBPROC_EOC_FC) ? 0x8000 : 0),
rx.date, rx.fc10,
rx.fc[0], rx.fc[1], rx.fc[2], rx.fc[3]
};
@@ -549,6 +552,8 @@ mme_test_suite (test_t t)
{
test_suite_begin (t, "mme");
sniffer_phy_t ctx;
+ tonemask_info_t tonemask_info;
+ ctx.lowlevel.tonemask_info = &tonemask_info;
mme_init (&ctx);
ctx.mme.mac = TEST_MME_MAC;
ctx.mme.mac_sniffer = TEST_MME_MAC_PEER;
diff --git a/cleopatre/Config.bundle-eoc b/cleopatre/Config.bundle-eoc
new file mode 100644
index 0000000000..992c135c76
--- /dev/null
+++ b/cleopatre/Config.bundle-eoc
@@ -0,0 +1,14 @@
+include Config.bundle-common
+BOARDS=spk300g_eoc_master spk300g_eoc_slave scr310_eoc_master scr310_eoc_slave \
+spk310_eoc_master spk310_eoc_slave scr300_eoc_master msk500_eoc_master \
+msk500_eoc_slave mcr510_eoc_slave mcr500_eoc_master mcr500_eoc_slave
+CHIPS=spc300 mse500
+spc300_REF_BOARD=spk300g_eoc_master
+mse500_REF_BOARD=msk500_eoc_master
+mse500_MASTER_REF_BOARD=msk500_eoc_master
+mse500_SLAVE_REF_BOARD=msk500_eoc_slave
+spc300_MASTER_REF_BOARD=spk300g_eoc_master
+spc300_SLAVE_REF_BOARD=spk300g_eoc_slave
+UNUSE=$(COMMON_UNUSE) application/upnpd
+PLC_BINS= plcd plcdrv
+GEN_BINS=uboot linux flashfs
diff --git a/cleopatre/Makefile b/cleopatre/Makefile
index 3fbc49875c..8031ecef31 100644
--- a/cleopatre/Makefile
+++ b/cleopatre/Makefile
@@ -1,6 +1,6 @@
##################################################################
ifeq ($(BUNDLE_TYPE),)
- BUNDLE_TYPE=av
+ BUNDLE_TYPE=eoc
endif
include Config.bundle-$(BUNDLE_TYPE)
@@ -10,7 +10,6 @@ include Config.bundle-$(BUNDLE_TYPE)
GIT_DIRECTORIES=cleopatre cesar common
##################################################################
-
BUNDLE_VERSION=$(shell git describe --always 2>/dev/null)
LINUX_VERSION=2.6.25.10
UBOOT_VERSION=1.1.6
@@ -83,7 +82,7 @@ endif
# Default rule to make a bundle related to the current branch
all:
- $(Q)$(MAKE) bundle-standalone BUNDLE_TYPE="av"
+ $(Q)$(MAKE) bundle-standalone BUNDLE_TYPE="eoc"
# Custom rule to choose the bundle type
bundle-%:
@@ -115,6 +114,7 @@ bundle-standalone:
$(Q)sed -i -e 's/\(EXTRAVERSION *= *\)\(.*\)/\1-$(BUNDLE_VERSION)/' $(BUNDLE_PATH)/u-boot-1.1.6/Makefile
$(Q)echo -n "$(BUNDLE_VERSION)" | sed -e 's/\(.\{16\}\).*/\1/' > $(BUILDROOT_PATH)/.version
$(Q)cd $(BUNDLE_PATH) ; rm -rf $(UNUSE)
+ $(Q)$(MAKE) docs
$(Q)cd $(BUNDLE_UPPER_PATH) ; tar -cf $(BUNDLE_NAME).tar $(subst $(BUNDLE_UPPER_PATH)/,, $(BUNDLE_PATH))
$(Q)echo "Generate Bundle binaries..."
$(Q)mkdir -p $(BUNDLE_GENBIN_PATH)
@@ -168,6 +168,20 @@ plcd-%:
plcdrv: $(foreach chip,$(CHIPS),plcdrv-$(chip))
+ifeq ($(BUNDLE_TYPE),eoc)
+plcdrv-%:
+ -$(Q)$(MAKE) -C $(CLEOPATRE_PATH)/buildroot clean distclean
+ $(Q)$(MAKE) -C $(CLEOPATRE_PATH)/buildroot ${$*_MASTER_REF_BOARD}_defconfig
+ $(Q)$(MAKE) -C $(CLEOPATRE_PATH)/buildroot plcdrv BUNDLE_VERSION=$(BUNDLE_VERSION)
+ $(Q)cp $(PLCDRV_PATH)/plcdrv.ko $(BUNDLE_PLCBIN_PATH)/plcdrv-$*.ko
+ $(Q)cp $(CESAR_PRJ_PATH)/eoc/obj/master/master.rom $(BUNDLE_PLCBIN_PATH)/master.rom
+ -$(Q)$(MAKE) -C $(CLEOPATRE_PATH)/buildroot clean distclean
+ $(Q)$(MAKE) -C $(CLEOPATRE_PATH)/buildroot ${$*_SLAVE_REF_BOARD}_defconfig
+ $(Q)$(MAKE) -C $(CLEOPATRE_PATH)/buildroot plcdrv BUNDLE_VERSION=$(BUNDLE_VERSION)
+ $(Q)cp $(CESAR_PRJ_PATH)/eoc/obj/slave/slave.rom $(BUNDLE_PLCBIN_PATH)/slave.rom
+ $(Q)cp $(PLCDRV_PATH)/hotplug-plcdrv $(BUNDLE_PLCBIN_PATH)
+
+else
plcdrv-%:
-$(Q)$(MAKE) -C $(CLEOPATRE_PATH)/buildroot clean distclean
$(Q)$(MAKE) -C $(CLEOPATRE_PATH)/buildroot ${$*_REF_BOARD}_defconfig
@@ -176,6 +190,7 @@ plcdrv-%:
$(Q)cp $(CESAR_PRJ_PATH)/plc/obj/plc.rom $(BUNDLE_PLCBIN_PATH)/plc.rom
$(Q)cp $(PLCDRV_PATH)/hotplug-plcdrv $(BUNDLE_PLCBIN_PATH)
+endif
uboot:
$(Q)$(MAKE) -C $(UBOOT_TMP_PATH) clean distclean sdk300_config
$(Q)$(MAKE) -C $(UBOOT_TMP_PATH)
@@ -196,3 +211,9 @@ flashfs:
$(Q)$(MAKE) -C $(FLASHFS_PATH)
$(Q)cp $(FLASHFS_PATH)/$(FLASHFS_NAME) $(BUNDLE_GENBIN_PATH)/
+docs:
+ $(Q)rm -fr $(BUNDLE_PATH)/doc/release_note
+ $(Q)for DOC in `find $(BUNDLE_PATH)/doc -mindepth 1 -maxdepth 1 -type d -and -not -name "application" -print`; do \
+ $(MAKE) -C "$$DOC" pdf || exit 1; \
+ find "$$DOC" -mindepth 1 -not -name "*.pdf" -delete; \
+ done
diff --git a/cleopatre/application/afe/src/afe.c b/cleopatre/application/afe/src/afe.c
index 7c99159c16..08b50e1844 100644
--- a/cleopatre/application/afe/src/afe.c
+++ b/cleopatre/application/afe/src/afe.c
@@ -44,7 +44,7 @@ static int parse_args(struct init_info *init, int argc, const char **argv)
int i;
int result = 0;
- if(argc<3 && argc>4)
+ if(argc<3 || argc>4)
{
help((char*)basename(argv[0]));
return -1;
diff --git a/cleopatre/application/autodiscoveryd/Makefile b/cleopatre/application/autodiscoveryd/Makefile
new file mode 100644
index 0000000000..6d059c9fa7
--- /dev/null
+++ b/cleopatre/application/autodiscoveryd/Makefile
@@ -0,0 +1,63 @@
+BIN=autodiscoveryd
+OBJPATH=obj
+SRCPATH=src
+INCPATH=inc
+
+CLEO_DIR = ../..
+LINUX_DIR =$(CLEO_DIR)/linux-2.6.25.10-spc300
+LIBSPID_DIR = $(CLEO_DIR)/application/libspid
+LIBMME_DIR = $(CLEO_DIR)/application/libmme
+
+LIBSPID_SO_BIN = $(LIBSPID_DIR)/libspid.so
+LIBMME_SO_BIN = $(LIBMME_DIR)/libmme.so
+
+ifeq ($(CC_FOR_TARGET),) #direct compile
+CC=arm-linux-gcc
+CC_WITH_CFLAGS=$(CC) -I/opt/spidcom/spc300/usr/include -g -Os
+CC_WITHOUT_CFLAGS=$(CC)
+else #compile from buildroot
+CC_WITH_CFLAGS=$(CC)
+CC_WITHOUT_CFLAGS=$(CC_FOR_TARGET)
+endif
+
+RESPONSE_FILE = extra_flags
+INCLUDES = -I$(INCPATH) \
+ -I$(CLEO_DIR)/include \
+ -I$(LINUX_DIR)/include \
+ -I$(LINUX_DIR)/include/asm-arm/arch-spc300 \
+ $(shell $(LIBSPID_DIR)/libspid-config --I_opts)
+
+EXTRA_CFLAGS = $(INCLUDES) -MMD -Wall \
+ @$(CLEO_DIR)/$(RESPONSE_FILE)
+
+LIBS = $(shell $(LIBSPID_DIR)/libspid-config --libs) \
+ $(shell $(LIBSPID_DIR)/libspid-config --ldopts) \
+ $(shell $(LIBSPID_DIR)/libspid-config --L_opts)
+
+SRCS=$(subst $(SRCPATH)/,,$(wildcard $(SRCPATH)/*.c))
+OBJS=$(addprefix $(OBJPATH)/,$(SRCS:.c=.o))
+DEPS=$(patsubst %o,%d,$(OBJS))
+
+all: $(BIN)
+
+$(BIN): $(OBJS) $(LIBSPID_SO_BIN) $(LIBMME_SO_BIN)
+ $(CC_WITHOUT_CFLAGS) $(LIBS) -o $@ $(OBJS)
+
+$(OBJPATH)/%.o: $(SRCPATH)/%.c
+ $(CC_WITH_CFLAGS) $(EXTRA_CFLAGS) -o $@ -c $<
+
+$(OBJS): | $(OBJPATH)
+
+$(OBJPATH):
+ mkdir $(OBJPATH)
+
+$(LIBSPID_SO_BIN) $(LIBMME_SO_BIN):
+ $(error libspid or libmme output files are not found)
+
+-include $(DEPS)
+
+.PHONY: all clean
+
+clean:
+ rm -f $(OBJS) $(DEPS) $(BIN)
+ rmdir $(OBJPATH)
diff --git a/cleopatre/application/autodiscoveryd/Module b/cleopatre/application/autodiscoveryd/Module
new file mode 100644
index 0000000000..e0cbabadcd
--- /dev/null
+++ b/cleopatre/application/autodiscoveryd/Module
@@ -0,0 +1 @@
+SOURCES := autodiscoveryd.c
diff --git a/cleopatre/application/autodiscoveryd/inc/autodiscoveryd.h b/cleopatre/application/autodiscoveryd/inc/autodiscoveryd.h
new file mode 100644
index 0000000000..19fd53f1d8
--- /dev/null
+++ b/cleopatre/application/autodiscoveryd/inc/autodiscoveryd.h
@@ -0,0 +1,128 @@
+/* SPC300-eoc bundle {{{
+ *
+ * Copyright (C) 2011 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file application/autodiscoveryd/inc/autodiscoveryd.h
+ * \brief periodically generate ethernet frames on specified interface
+ * \ingroup autodiscoveryd
+ *
+ * This daemon is responsible for sending frames on specified interface.
+ * Sending period and interface are defined in system.conf
+ *
+ */
+#ifndef AUTODISCOVERYD_H
+#define AUTODISCOVERYD_H
+
+#include <linux/if_packet.h>
+#include <linux/if_ether.h>
+#include <syslog.h>
+
+#include "libspid.h"
+
+#define BROADCAST_ADDR "\xff\xff\xff\xff\xff\xff"
+#define AUTODISCOVERYD_ETHER_TYPE 0x88B7
+#define AUTODISCOVERYD_HEADER_SIZE 16
+#define AUTODISCOVERYD_PAYLOAD_SIZE_FIELD 2
+#define AUTODISCOVERYD_PAYLOAD_SIZE 56
+#define AUTODISCOVERYD_FRAME_SIZE \
+ (AUTODISCOVERYD_HEADER_SIZE + AUTODISCOVERYD_PAYLOAD_SIZE)
+
+/** default MIB 2.7 **/
+#define AUTODISCOVERYD_DEFAULT_MIB "207"
+#define AUTODISCOVERYD_DEFAULT_EQUIPMENT 0x07
+/** min time in seconds to send autodiscovery message **/
+#define AUTODISCOVERYD_DEFAULT_ENABLE LIBSPID_TRUE
+#define AUTODISCOVERYD_DEFAULT_MIN_SENDING_TIME_SEC 60
+#define AUTODISCOVERYD_DEFAULT_INTERFACE LIBSPID_EOC_ETH_IFACE
+
+#define AUTODISCOVERYD_MANUFACTURE_STR_LEN 15
+#define AUTODISCOVERYD_EQUIPMENT_STR_LEN 1
+#define AUTODISCOVERYD_PRODUCT_STR_LEN 10
+#define AUTODISCOVERYD_SOFT_VERSION_BIN_LEN 3
+#define AUTODISCOVERYD_MIB_VERSION_STR_LEN 3
+
+#define AUTODISCOVERYD_PAYLOAD_MANUFACTURE_OFFSET 0
+#define AUTODISCOVERYD_PAYLOAD_EQUIPMENT_OFFSET 17
+#define AUTODISCOVERYD_PAYLOAD_PRODUCT_OFFSET 20
+#define AUTODISCOVERYD_PAYLOAD_SOFT_VERSION_OFFSET 32
+#define AUTODISCOVERYD_PAYLOAD_MIB_VERSION_OFFSET 37
+#define AUTODISCOVERYD_PAYLOAD_IP_OFFSET 42
+#define AUTODISCOVERYD_PAYLOAD_MAC_OFFSET 48
+
+#ifndef __UTESTS__
+ #define PLC_VERSION_PATH "/proc/net/plc/version"
+#else /* unitary tests paths */
+ #define PLC_VERSION_PATH "/tmp/utests/version"
+#endif
+
+#define FIRMWARE_LABEL "PLC Firmware"
+
+/** main context of Autodiscovery daemon */
+struct autodiscoveryd_ctx
+{
+ uint8_t br_mac_addr[ETH_ALEN];
+ libspid_boolean_t autodiscovery_enable;
+ unsigned short sending_period;
+ unsigned short sending_period_2;
+};
+
+/** Autodiscovery ethernet payload **/
+typedef struct
+{
+ unsigned char type;
+ unsigned char length;
+ unsigned char value[15];
+} autodiscoveryd_payload_t;
+
+/** Autodiscovery field type **/
+typedef enum
+{
+ /** autodiscovery manufacture type **/
+ AUTODISCOVERYD_MANUFACTURE = 1,
+ /** autodiscovery equipment type **/
+ AUTODISCOVERYD_EQUIPMENT = 2,
+ /** autodiscovery product type **/
+ AUTODISCOVERYD_PRODUCT = 3,
+ /** autodiscovery software type **/
+ AUTODISCOVERYD_SOFTWARE = 4,
+ /** autodiscovery MIB type **/
+ AUTODISCOVERYD_MIB = 5,
+ /** autodiscovery IP type **/
+ AUTODISCOVERYD_IP = 6,
+ /** autodiscovery MAC type **/
+ AUTODISCOVERYD_MAC = 7
+} autodiscoveryd_payload_field_type_t;
+
+
+/**
+ * list of errors returned by autodiscoveryd functions
+ */
+typedef enum
+{
+ AUTODISCOVERYD_SUCCESS = 0,
+ /** Auto-discovery failed **/
+ AUTODISCOVERYD_ERROR
+} autodiscoveryd_error_t;
+
+autodiscoveryd_error_t
+autodiscoveryd_payload (struct autodiscoveryd_ctx *ctx,
+ unsigned char* payload);
+
+autodiscoveryd_error_t
+autodiscoveryd_send_message (struct autodiscoveryd_ctx *ctx);
+
+autodiscoveryd_error_t
+autodiscoveryd_get_version (struct autodiscoveryd_ctx *ctx,
+ unsigned char *soft_version);
+
+autodiscoveryd_error_t
+autodiscoveryd_init (struct autodiscoveryd_ctx *ctx);
+
+autodiscoveryd_error_t
+autodiscoveryd_uninit (struct autodiscoveryd_ctx *ctx);
+
+#endif /* AUTODISCOVERYD_H */
diff --git a/cleopatre/application/autodiscoveryd/src/autodiscoveryd.c b/cleopatre/application/autodiscoveryd/src/autodiscoveryd.c
new file mode 100644
index 0000000000..0053da44a3
--- /dev/null
+++ b/cleopatre/application/autodiscoveryd/src/autodiscoveryd.c
@@ -0,0 +1,495 @@
+/* SPC300-eoc bundle {{{
+ *
+ * Copyright (C) 2011 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file application/autodiscoveryd/src/autodiscoveryd.c
+ * \brief periodically generate ethernet frames on specified interface
+ * \ingroup autodiscoveryd
+ *
+ * This daemon is responsible for sending frames on specified interface.
+ * Sending period and interface are defined in system.conf
+ *
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <syslog.h>
+#include <unistd.h>
+#include <sys/socket.h>
+#include <sys/ioctl.h>
+#include <fcntl.h>
+#include <arpa/inet.h>
+#include <net/if_arp.h>
+#include <net/if.h>
+
+#include "autodiscoveryd.h"
+#include "libspid.h"
+#include "nvram_utils.h"
+
+#ifndef __UTESTS__
+/**
+ * Main program entry point.
+ * \param argc number of command line arguments
+ * \param argv command line arguments
+ * \return AUTODISCOVERYD_SUCCESS upon success
+ *
+ * Main function of autodiscoveryd daemon.
+ */
+int
+main (int argc, char **argv)
+{
+ struct autodiscoveryd_ctx ctx;
+ int ret = 0;
+ libspid_error_t spid_ret;
+ static int times = 0;
+ char buffer[LIBSPID_LINE_MAX_LEN];
+ /* Initialize autodiscovery daemon */
+ if (autodiscoveryd_init (&ctx) != AUTODISCOVERYD_SUCCESS)
+ {
+ return -1;
+ }
+
+ while (ctx.autodiscovery_enable)
+ {
+ ret = autodiscoveryd_send_message (&ctx);
+ if (ret != AUTODISCOVERYD_SUCCESS)
+ syslog (LOG_ERR,
+ "Autodiscoveryd : error send autodiscovery message");
+
+ spid_ret =
+ libspid_config_read_item (
+ LIBSPID_AUTODISCOVERY_INFO_PATH,
+ LIBSPID_AUTODISCOVERY_INFO_LABEL_TIME_INTERVAL,
+ buffer, sizeof (buffer));
+ if (LIBSPID_SUCCESS != spid_ret)
+ {
+ syslog (LOG_ERR,
+ "libspid_config_read_item error: %d\r\n", spid_ret);
+ sleep (ctx.sending_period);
+ continue;
+ }
+ if (atoi (buffer) ==
+ atoi (LIBSPID_AUTODISCOVERY_INFO_TIME_INTERVAL_T1))
+ {
+ sleep (ctx.sending_period);
+
+ }
+ else
+ {
+ sleep (ctx.sending_period_2);
+
+ }
+ }
+
+ autodiscoveryd_uninit (&ctx);
+
+ return AUTODISCOVERYD_SUCCESS;
+}
+#endif /* !__UTESTS__ */
+
+/**
+ * Create message for autodiscovery process
+ * \return error type (AUTODISCOVERYD_SUCCESS if success)
+ * \return AUTODISCOVERYD_ERROR: general error
+ */
+autodiscoveryd_error_t
+autodiscoveryd_send_message (struct autodiscoveryd_ctx *ctx)
+{
+ int sockfd;
+ int ret = -1;
+ struct sockaddr_ll sockaddr;
+ unsigned char buffer[AUTODISCOVERYD_FRAME_SIZE];
+ unsigned char payload_size_field[AUTODISCOVERYD_PAYLOAD_SIZE_FIELD];
+ struct ifreq ifr;
+ char sending_interface[LIBSPID_CONFIG_LINE_MAX_LEN] = {0};
+ struct ifreq interface;
+
+ /* Check arguments */
+ assert (ctx != NULL);
+
+ ret = libspid_config_read_item (
+ LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_AUTODISCOVERY_INTERFACE,
+ sending_interface, LIBSPID_CONFIG_LINE_MAX_LEN);
+
+ if (ret != LIBSPID_SUCCESS ||
+ (strcmp (sending_interface, LIBSPID_EOC_ETH_IFACE) != 0
+ && strcmp (sending_interface, LIBSPID_EOC_BR_IFACE) != 0
+ && strcmp (sending_interface, LIBSPID_EOC_PLC_IFACE) != 0))
+ strcpy (sending_interface, AUTODISCOVERYD_DEFAULT_INTERFACE);
+
+ /* Pointer to ethernet header */
+ struct ethhdr *eh = (struct ethhdr *)buffer;
+
+ /* Pointer to user data in ethernet frame */
+ unsigned char* payload = buffer + AUTODISCOVERYD_HEADER_SIZE;
+
+ sockfd = socket (AF_PACKET, SOCK_RAW, htons (AUTODISCOVERYD_ETHER_TYPE));
+ if (sockfd < 0)
+ {
+ syslog (LOG_WARNING, "Autodiscoveryd : socket () error");
+ return AUTODISCOVERYD_ERROR;
+ }
+
+ memset (&sockaddr, 0, sizeof (sockaddr));
+ memcpy (sockaddr.sll_addr, BROADCAST_ADDR, ETH_ALEN);
+
+ /* Get index of the network device: */
+ strncpy (ifr.ifr_name, sending_interface, sizeof (ifr.ifr_name));
+ if (ioctl (sockfd, SIOCGIFINDEX, &ifr) < 0)
+ {
+ syslog (LOG_WARNING, "Autodiscoveryd : get_index by ioctl error");
+ close (sockfd);
+ return AUTODISCOVERYD_ERROR;
+ }
+
+ /* Fill in Raw communcation options */
+ sockaddr.sll_family = AF_PACKET;
+ sockaddr.sll_protocol = htons (AUTODISCOVERYD_ETHER_TYPE);
+ sockaddr.sll_ifindex = ifr.ifr_ifindex;
+ sockaddr.sll_hatype = ARPHRD_ETHER;
+ sockaddr.sll_pkttype = PACKET_OTHERHOST;
+ sockaddr.sll_halen = ETH_ALEN;
+ sockaddr.sll_addr[6] = 0x00;
+ sockaddr.sll_addr[7] = 0x00;
+
+ /* Bind socket to wanted interface : default : eth0 */
+ strncpy (interface.ifr_ifrn.ifrn_name,
+ sending_interface, sizeof (ifr.ifr_name));
+
+ if (setsockopt (sockfd, SOL_SOCKET, SO_BINDTODEVICE,
+ (char *)&interface, sizeof (interface)) < 0)
+ {
+ syslog (LOG_WARNING, "Autodiscoveryd: couldn't bind to interface %s",
+ sending_interface);
+ close (sockfd);
+ return AUTODISCOVERYD_ERROR;
+ }
+
+ /* Set the frame header */
+ memcpy (buffer, BROADCAST_ADDR, ETH_ALEN);
+ memcpy (buffer+ ETH_ALEN, ctx->br_mac_addr, ETH_ALEN);
+ eh->h_proto = htons (AUTODISCOVERYD_ETHER_TYPE);
+ payload_size_field[0] = 0x00;
+ payload_size_field[1] = AUTODISCOVERYD_PAYLOAD_SIZE;
+ memcpy (buffer + AUTODISCOVERYD_HEADER_SIZE
+ - AUTODISCOVERYD_PAYLOAD_SIZE_FIELD,
+ payload_size_field, AUTODISCOVERYD_PAYLOAD_SIZE_FIELD);
+
+ /* Fill payload with data */
+ ret = autodiscoveryd_payload (ctx, payload);
+ if (ret != AUTODISCOVERYD_SUCCESS)
+ {
+ close (sockfd);
+ syslog (LOG_WARNING, "Autodiscoveryd : failed to fill payload");
+ return AUTODISCOVERYD_ERROR;
+ }
+
+ ret = sendto (sockfd, buffer, AUTODISCOVERYD_FRAME_SIZE, 0,
+ (struct sockaddr *)&sockaddr, sizeof (sockaddr));
+ if (ret < 0)
+ {
+ close (sockfd);
+ syslog (LOG_WARNING, "Autodiscoveryd : sendto () error");
+ return AUTODISCOVERYD_ERROR;
+ }
+
+ close (sockfd);
+
+ return AUTODISCOVERYD_SUCCESS;
+}
+
+/**
+ * Set payload with wanted fields, contained informations for
+ * autodiscovery protocol. Fields have to be set as follows:
+ * P_Type (1 byte) Length (1 byte) Value
+ * 0x01 15 Manufacture name from NVRAM
+ * 0x02 1 Equipment is EOC (6)
+ * 0x03 10 Product Model from NVRAM
+ * 0x04 3 Software Version
+ * 0x05 3 MIB Version is 2.7 (207)
+ * 0x06 4 Master IP address
+ * 0x07 6 Master mac address
+ * \param payload buffer with informations for autodiscovery protocol
+ * \return error type (AUTODISCOVERYD_SUCCESS if success)
+ * \return AUTODISCOVERYD_ERROR: general error
+ */
+autodiscoveryd_error_t
+autodiscoveryd_payload (struct autodiscoveryd_ctx *ctx,
+ unsigned char* payload)
+{
+ unsigned char soft_version[AUTODISCOVERYD_SOFT_VERSION_BIN_LEN];
+
+ /* Check arguments */
+ assert (ctx != NULL);
+ assert (payload != NULL);
+
+ /** Define fields to set **/
+ autodiscoveryd_payload_t * ptr_manufactureName =
+ (autodiscoveryd_payload_t *)
+ &payload[AUTODISCOVERYD_PAYLOAD_MANUFACTURE_OFFSET];
+
+ autodiscoveryd_payload_t * ptr_equipment =
+ (autodiscoveryd_payload_t *)
+ &payload[AUTODISCOVERYD_PAYLOAD_EQUIPMENT_OFFSET];
+
+ autodiscoveryd_payload_t * ptr_productModel =
+ (autodiscoveryd_payload_t *)
+ &payload[AUTODISCOVERYD_PAYLOAD_PRODUCT_OFFSET];
+
+ autodiscoveryd_payload_t * ptr_softVersion =
+ (autodiscoveryd_payload_t *)
+ &payload[AUTODISCOVERYD_PAYLOAD_SOFT_VERSION_OFFSET];
+
+ autodiscoveryd_payload_t * ptr_mibVersion =
+ (autodiscoveryd_payload_t *)
+ &payload[AUTODISCOVERYD_PAYLOAD_MIB_VERSION_OFFSET];
+
+ autodiscoveryd_payload_t * ptr_ipAddress =
+ (autodiscoveryd_payload_t *)
+ &payload[AUTODISCOVERYD_PAYLOAD_IP_OFFSET];
+
+ autodiscoveryd_payload_t * ptr_macAddress =
+ (autodiscoveryd_payload_t *)
+ &payload[AUTODISCOVERYD_PAYLOAD_MAC_OFFSET];
+
+ /* Manufacture name */
+ ptr_manufactureName->type = AUTODISCOVERYD_MANUFACTURE;
+ ptr_manufactureName->length = AUTODISCOVERYD_MANUFACTURE_STR_LEN;
+ memset (ptr_manufactureName->value, 0,
+ AUTODISCOVERYD_MANUFACTURE_STR_LEN);
+ if (libspid_get_manufactory_info (ptr_manufactureName->value, ptr_manufactureName->length))
+ {
+ syslog (LOG_WARNING, "Autodiscoveryd: cannot get manufactory info");
+ return AUTODISCOVERYD_ERROR;
+ }
+
+ /* Equipement clarification */
+ ptr_equipment->type = AUTODISCOVERYD_EQUIPMENT;
+ ptr_equipment->length = AUTODISCOVERYD_EQUIPMENT_STR_LEN;
+ ptr_equipment->value[0] = AUTODISCOVERYD_DEFAULT_EQUIPMENT;
+
+ /* Product Model */
+ ptr_productModel->type = AUTODISCOVERYD_PRODUCT;
+ ptr_productModel->length = AUTODISCOVERYD_PRODUCT_STR_LEN;
+ memset (ptr_productModel->value, 0, AUTODISCOVERYD_PRODUCT_STR_LEN);
+ if (libspid_get_product_desc(ptr_productModel->value, ptr_productModel->length))
+ {
+ syslog (LOG_WARNING, "Autodiscoveryd: cannot get product description");
+ return AUTODISCOVERYD_ERROR;
+ }
+
+ /* Soft Version */
+ if (autodiscoveryd_get_version (ctx, soft_version)
+ != AUTODISCOVERYD_SUCCESS)
+ return AUTODISCOVERYD_ERROR;
+
+ ptr_softVersion->type = AUTODISCOVERYD_SOFTWARE;
+ ptr_softVersion->length = AUTODISCOVERYD_SOFT_VERSION_BIN_LEN;
+ memset (ptr_softVersion->value, 0, AUTODISCOVERYD_SOFT_VERSION_BIN_LEN);
+ memcpy (ptr_softVersion->value, soft_version,
+ AUTODISCOVERYD_SOFT_VERSION_BIN_LEN);
+
+ /* MIB Version */
+ ptr_mibVersion->type = AUTODISCOVERYD_MIB;
+ ptr_mibVersion->length = AUTODISCOVERYD_MIB_VERSION_STR_LEN;
+ memcpy (ptr_mibVersion->value, AUTODISCOVERYD_DEFAULT_MIB,
+ AUTODISCOVERYD_MIB_VERSION_STR_LEN);
+
+ /* IP address */
+ libspid_ip_t ip_addr;
+ unsigned char ip_addr_bin[LIBSPID_IP_BIN_LEN] = {0};
+ ptr_ipAddress->type = AUTODISCOVERYD_IP;
+ ptr_ipAddress->length = LIBSPID_IP_BIN_LEN;
+
+ if (libspid_network_get_ip (LIBSPID_EOC_BR_IFACE, &ip_addr)
+ != LIBSPID_SUCCESS)
+ return AUTODISCOVERYD_ERROR;
+
+ if (libspid_ip_str_to_bin ((char *)ip_addr.address, ip_addr_bin)
+ != LIBSPID_SUCCESS)
+ return AUTODISCOVERYD_ERROR;
+
+ memset (ptr_macAddress->value, 0, LIBSPID_IP_BIN_LEN);
+ memcpy (ptr_ipAddress->value, ip_addr_bin, LIBSPID_IP_BIN_LEN);
+
+ /* MAC address */
+ ptr_macAddress->type = AUTODISCOVERYD_MAC;
+ ptr_macAddress->length = LIBSPID_MAC_BIN_LEN;
+
+ memset (ptr_macAddress->value, 0, LIBSPID_MAC_BIN_LEN);
+ memcpy (ptr_macAddress->value, ctx->br_mac_addr, LIBSPID_MAC_BIN_LEN);
+
+ return AUTODISCOVERYD_SUCCESS;
+}
+
+/**
+ * Get version from /proc/net/plc/version
+ * Version is create from EOC-X.X-RCX as XXX in binary format
+ * \param soft_version buffer with version
+ * \return error type (AUTODISCOVERYD_SUCCESS if success)
+ * \return AUTODISCOVERYD_ERROR: general error
+ */
+autodiscoveryd_error_t
+autodiscoveryd_get_version (struct autodiscoveryd_ctx *ctx,
+ unsigned char *soft_version)
+{
+ FILE *fp;
+ char tmp_buffer[256];
+ char label[64], version[64];
+
+ /* Check arguments */
+ assert (ctx != NULL);
+ assert (soft_version != NULL);
+
+ if ((fp = fopen (PLC_VERSION_PATH, "r")) == NULL)
+ {
+ syslog (LOG_WARNING, "Autodiscoveryd : faild to open %s",
+ PLC_VERSION_PATH);
+ return AUTODISCOVERYD_ERROR;
+ }
+
+ while (fgets (tmp_buffer, 256, fp))
+ {
+ memset (version, '\0', sizeof (version));
+ if (sscanf (tmp_buffer, "%[^:] %*s %s", label, version) == 2)
+ {
+ if (strstr (label, FIRMWARE_LABEL))
+ {
+ /* copy software version to soft_version */
+ /* eoc-x.x.x save as xxx version */
+ char *saveptr;
+ char *val_tmp;
+
+ val_tmp = strtok_r (version, "-.", &saveptr);
+ val_tmp = strtok_r (NULL, "-.", &saveptr);
+ soft_version[0] = atoi (val_tmp);
+
+ val_tmp = strtok_r (NULL, "-.", &saveptr);
+ soft_version[1] = atoi (val_tmp);
+
+ val_tmp = strtok_r (NULL, "-.", &saveptr);
+ soft_version[2] = atoi (val_tmp);
+
+ break;
+ }
+ }
+ }
+
+ fclose (fp);
+
+ return AUTODISCOVERYD_SUCCESS;
+}
+
+/**
+ * Initialize autodiscovery and prepare context.
+ *
+ * \param ctx autodiscovery context.
+ * \return error code.
+ */
+autodiscoveryd_error_t
+autodiscoveryd_init (struct autodiscoveryd_ctx *ctx)
+{
+ char entry[LIBSPID_CONFIG_LINE_MAX_LEN] = {0};
+ int ret = 0;
+ unsigned char mac_addr [LIBSPID_MAC_STR_LEN];
+ unsigned char mac_addr_bin[ETH_ALEN];
+
+ /* Check arguments */
+ assert (ctx != NULL);
+
+ /* Set context */
+ memset (ctx, '\0', sizeof (struct autodiscoveryd_ctx));
+
+ ret = libspid_config_read_item (
+ LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_AUTODISCOVERY_TIME_SEC,
+ entry, LIBSPID_CONFIG_LINE_MAX_LEN);
+ if (ret == LIBSPID_SUCCESS)
+ {
+ ctx->sending_period = atoi (entry);
+ if (ctx->sending_period < AUTODISCOVERYD_DEFAULT_MIN_SENDING_TIME_SEC)
+ {
+ syslog (LOG_WARNING, "Autodiscoveryd : "
+ "Sending time is less than the minimum (%d)."
+ "Minimum sendig time is used.",
+ AUTODISCOVERYD_DEFAULT_MIN_SENDING_TIME_SEC);
+ ctx->sending_period = AUTODISCOVERYD_DEFAULT_MIN_SENDING_TIME_SEC;
+ }
+ }
+ else
+ ctx->sending_period = AUTODISCOVERYD_DEFAULT_MIN_SENDING_TIME_SEC;
+
+ ret = libspid_config_read_item (
+ LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_AUTODISCOVERY_TIME_SEC2,
+ entry, LIBSPID_CONFIG_LINE_MAX_LEN);
+ if (ret == LIBSPID_SUCCESS)
+ {
+ ctx->sending_period_2 = atoi (entry);
+ if (ctx->sending_period_2 <
+ AUTODISCOVERYD_DEFAULT_MIN_SENDING_TIME_SEC)
+ {
+ syslog (LOG_WARNING,
+ "Autodiscoveryd : Sending time is less than "
+ "the minimum (%d).Minimum sendig time is used.",
+ AUTODISCOVERYD_DEFAULT_MIN_SENDING_TIME_SEC);
+ ctx->sending_period_2 =
+ AUTODISCOVERYD_DEFAULT_MIN_SENDING_TIME_SEC;
+ }
+ }
+ else
+ ctx->sending_period_2 = AUTODISCOVERYD_DEFAULT_MIN_SENDING_TIME_SEC;
+
+ ret = libspid_config_read_item (
+ LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_AUTODISCOVERY_ENABLE,
+ entry, LIBSPID_CONFIG_LINE_MAX_LEN);
+ if (ret == LIBSPID_SUCCESS)
+ {
+ if (strcmp (entry, LIBSPID_SYSTEM_CONF_VALUE_YES) == 0)
+ ctx->autodiscovery_enable = LIBSPID_TRUE;
+ else
+ ctx->autodiscovery_enable = LIBSPID_FALSE;
+ }
+ else
+ ctx->autodiscovery_enable = AUTODISCOVERYD_DEFAULT_ENABLE;
+
+
+ if (libspid_network_get_mac (LIBSPID_EOC_BR_IFACE, mac_addr)
+ != LIBSPID_SUCCESS)
+ {
+ syslog (LOG_WARNING, "Autodiscoveryd : get src mac error");
+ return AUTODISCOVERYD_ERROR;
+ }
+
+ if (libspid_mac_str_to_bin ((char *)mac_addr, mac_addr_bin)
+ != LIBSPID_SUCCESS)
+ {
+ syslog (LOG_WARNING, "Autodiscoveryd : mac_str_to_bin error");
+ return AUTODISCOVERYD_ERROR;
+ }
+
+ memcpy (ctx->br_mac_addr, mac_addr_bin, ETH_ALEN);
+
+ return AUTODISCOVERYD_SUCCESS;
+}
+
+/**
+ * Uninitialize autodiscovery.
+ *
+ * \param ctx autodiscovery context.
+ * \return error code.
+ */
+autodiscoveryd_error_t
+autodiscoveryd_uninit (struct autodiscoveryd_ctx *ctx)
+{
+ /* Check arguments */
+ assert (ctx != NULL);
+
+ return AUTODISCOVERYD_SUCCESS;
+}
diff --git a/cleopatre/application/igmp_snoopd/Makefile b/cleopatre/application/igmp_snoopd/Makefile
index b00bad4061..eea83fe0ee 100644
--- a/cleopatre/application/igmp_snoopd/Makefile
+++ b/cleopatre/application/igmp_snoopd/Makefile
@@ -4,6 +4,7 @@ SRCPATH=src
INCPATH=inc
CLEO_DIR = ../..
+LINUX_DIR = $(CLEO_DIR)/linux-2.6.25.10-spc300
LIBSPID_DIR = $(CLEO_DIR)/application/libspid
LIBMME_DIR = $(CLEO_DIR)/application/libmme
@@ -22,6 +23,7 @@ endif
RESPONSE_FILE=extra_flags
INCLUDES = -I$(INCPATH) \
-I$(CLEO_DIR)/include \
+ -I$(LINUX_DIR)/include/asm-arm/arch-spc300 \
$(shell $(LIBSPID_DIR)/libspid-config --I_opts)
EXTRA_CFLAGS= $(INCLUDES) -MMD -Wall -Wextra -Wstrict-prototypes -Winline \
@@ -29,6 +31,7 @@ EXTRA_CFLAGS= $(INCLUDES) -MMD -Wall -Wextra -Wstrict-prototypes -Winline \
LIBS = -lm -lrt \
$(shell $(LIBSPID_DIR)/libspid-config --L_opts) \
+ $(shell $(LIBSPID_DIR)/libspid-config --ldopts) \
$(shell $(LIBSPID_DIR)/libspid-config --libs)
SRCS=$(subst $(SRCPATH)/,,$(wildcard $(SRCPATH)/*.c))
diff --git a/cleopatre/application/igmp_snoopd/igmp_snoopd.conf b/cleopatre/application/igmp_snoopd/igmp_snoopd.conf
index fae78dcca5..f67830aa9f 100644
--- a/cleopatre/application/igmp_snoopd/igmp_snoopd.conf
+++ b/cleopatre/application/igmp_snoopd/igmp_snoopd.conf
@@ -11,7 +11,7 @@ NO_QUERIER__MEMBERSHIP_TIMEOUT_CHECK_INTERVAL = 86400
DOMINANT_TRAFFIC_IS_VLAN = false
# Should igmp_snoopd send queries if no querier is present ? (true/false)
-SEND_QUERIES = true
+SEND_QUERIES = false
# Should igmp_snoopd be verbose in its logs ? ("true" for verbose logs. "false" to reduce verbosity)
VERBOSE_LOGS = false
diff --git a/cleopatre/application/libmme/Makefile b/cleopatre/application/libmme/Makefile
index 3d96678dfc..b5b89b1a67 100644
--- a/cleopatre/application/libmme/Makefile
+++ b/cleopatre/application/libmme/Makefile
@@ -3,6 +3,7 @@ DYN_LIB=libmme.so
OBJPATH=obj
SRCPATH=src
INCPATH=inc
+LIBPATH = .
CLEO_DIR = ../..
LINUX_DIR = $(CLEO_DIR)/linux-2.6.25.10-spc300
@@ -25,6 +26,19 @@ INCLUDES = -I$(INCPATH) \
EXTRA_CFLAGS = $(INCLUDES) -MMD -Wall \
@$(CLEO_DIR)/$(RESPONSE_FILE) \
+ifeq ($(TEST),y)
+OBJPATH=$(BASE)/devkit/tests/onlined/ftests/stub/libmme/obj
+SRCPATH=$(BASE)/devkit/tests/onlined/ftests/stub/libmme/src
+INCPATH=$(BASE)/devkit/tests/onlined/ftests/stub/libmme/inc
+CC = $(CC_FOR_TEST)
+AR = $(AR_FOR_TEST)
+CC_WITH_CFLAGS = $(CC) $(CFLAGS_FOR_TEST)
+CC_WITHOUT_CFLAGS = $(CC) $(CFLAGS_FOR_TEST)
+OBJPATH = $(BASE)/$(OBJPATH_FOR_TEST)
+LIBPATH = $(OBJPATH)
+endif
+
+
SRCS=$(subst $(SRCPATH)/,,$(wildcard $(SRCPATH)/*.c))
DYN_OBJS=$(addprefix $(OBJPATH)/,$(SRCS:.c=.dyn.o))
STAT_OBJS=$(addprefix $(OBJPATH)/,$(SRCS:.c=.stat.o))
@@ -36,7 +50,7 @@ MMTCGEN=$(CLEO_DIR)/../common/lib/mmtcgen
all: $(STAT_LIB) $(DYN_LIB)
$(STAT_LIB): $(STAT_OBJS)
- $(AR) cr $@ $(STAT_OBJS)
+ $(AR) cr $(LIBPATH)/$@ $(STAT_OBJS)
$(DYN_LIB): $(DYN_OBJS)
$(CC_WITHOUT_CFLAGS) -shared -fPIC -o $@ $(DYN_OBJS)
diff --git a/cleopatre/application/libmme/inc/libmme.h b/cleopatre/application/libmme/inc/libmme.h
index ae3afdc5ca..fd3ba5e534 100644
--- a/cleopatre/application/libmme/inc/libmme.h
+++ b/cleopatre/application/libmme/inc/libmme.h
@@ -30,6 +30,7 @@
#define MME_IFACE_BRIDGE "br0"
#define OUI_SPIDCOM "\x00\x13\xd7"
+#define OUI_JIANGSU "\x4a\x53\x43"
#define SPIDCOM_OUI_SIZE 3
#define SET_MME_PAYLOAD_MAX_SIZE(type, val) val = MMTYPE_IS_VS(type) ? MME_MAX_SIZE - SPIDCOM_OUI_SIZE : MME_MAX_SIZE
@@ -104,6 +105,7 @@ typedef enum {
typedef enum {
MME_OUI_NOT_PRESENT = 0,
MME_OUI_SPIDCOM,
+ MME_OUI_JIANGSU,
MME_OUI_NOT_SPIDCOM
} mme_oui_type_t;
/**
diff --git a/cleopatre/application/libmme/src/mme.c b/cleopatre/application/libmme/src/mme.c
index 3fa2d8bd4e..72f27113d7 100644
--- a/cleopatre/application/libmme/src/mme.c
+++ b/cleopatre/application/libmme/src/mme.c
@@ -29,6 +29,7 @@
#include <net/if.h>
#include <net/ethernet.h>
#include <inttypes.h>
+#include <syslog.h>
#include "libmme.h"
@@ -40,7 +41,12 @@ mme_check_oui (mme_ctx_t *ctx, MME_t *mh, unsigned char *pkt)
{
/* Set MME_OUI_SPIDCOM only if it was not set before */
if ((memcmp (OUI_SPIDCOM, pkt + sizeof (MME_t), 3) == 0)
- && (ctx->oui != MME_OUI_NOT_SPIDCOM))
+ && ((ctx->oui == MME_OUI_NOT_PRESENT) || (ctx->oui == MME_OUI_SPIDCOM)))
+ {
+ ctx->oui = MME_OUI_SPIDCOM;
+ }
+ else if ((memcmp (OUI_JIANGSU, pkt + sizeof (MME_t), 3) == 0)
+ && ((ctx->oui == MME_OUI_NOT_PRESENT) || (ctx->oui == MME_OUI_JIANGSU)))
{
ctx->oui = MME_OUI_SPIDCOM;
}
@@ -665,8 +671,9 @@ mme_send (mme_ctx_t *ctx, mme_send_type_t type, char *iface, unsigned char *dest
{
perror ("string error\n");
/* Error */
- printf("Could only send %d bytes of packet of length %d\n", sent, pkt_len);
- return 0;
+ syslog (LOG_WARNING, "%s: Could only send %d bytes of packet of length %d", __FUNCTION__, sent, pkt_len);
+ close (raw);
+ return MME_ERROR_GEN;
}
} /* for */
diff --git a/cleopatre/application/libspid/.gitignore b/cleopatre/application/libspid/.gitignore
index 79ba2b603b..ad7b246cd3 100644
--- a/cleopatre/application/libspid/.gitignore
+++ b/cleopatre/application/libspid/.gitignore
@@ -1,2 +1,3 @@
+/.config
/libspid.a
/libspid.so
diff --git a/cleopatre/application/libspid/Makefile b/cleopatre/application/libspid/Makefile
index e1dbca943d..06854dba17 100644
--- a/cleopatre/application/libspid/Makefile
+++ b/cleopatre/application/libspid/Makefile
@@ -37,6 +37,16 @@ LDOPTS=$(shell $(LIBMME_DIR)/libmme-config --ldopts)
LIBS=$(shell $(LIBMME_DIR)/libmme-config --libs)
L_OPTS=$(shell $(LIBMME_DIR)/libmme-config --L_opts)
+ifeq ($(TEST),y)
+CC = $(CC_FOR_TEST)
+AR = $(AR_FOR_TEST)
+CC_WITH_CFLAGS = $(CC) $(CFLAGS_FOR_TEST)
+CC_WITHOUT_CFLAGS = $(CC) $(CFLAGS_FOR_TEST)
+OBJPATH = $(BASE)/$(OBJPATH_FOR_TEST)
+LIBPATH = $(OBJPATH)/
+EXTRA_CFLAGS=-I$(INCPATH) -I$(MME_INCPATH) -I$(BASE)/include -MMD -I$(LINUX_DIR)/include/asm-arm/arch-spc300
+endif
+
SRCS=$(subst $(SRCPATH)/,,$(wildcard $(SRCPATH)/*.c))
DYN_OBJS=$(addprefix $(OBJPATH)/,$(SRCS:.c=.dyn.o))
STAT_OBJS=$(addprefix $(OBJPATH)/,$(SRCS:.c=.stat.o))
@@ -46,7 +56,7 @@ STAT_DEPS=$(patsubst %o,%d,$(STAT_OBJS))
all: $(STAT_LIB) $(DYN_LIB)
$(STAT_LIB): $(STAT_OBJS) $(LIBMME_A_BIN)
- $(AR) cr $@ $(STAT_OBJS)
+ $(AR) cr $(LIBPATH)$@ $(STAT_OBJS)
$(DYN_LIB): $(DYN_OBJS) $(LIBMME_SO_BIN)
$(CC_WITHOUT_CFLAGS) \
diff --git a/cleopatre/application/libspid/Module b/cleopatre/application/libspid/Module
index 0e9eb0c5d5..7337117365 100644
--- a/cleopatre/application/libspid/Module
+++ b/cleopatre/application/libspid/Module
@@ -1,2 +1,9 @@
SOURCES := config_item.c config_line.c hpav_info.c image.c misc.c \
- multicast_info.c network.c openssl_sha256.c secu.c system.c nvram.c
+ multicast_info.c network.c openssl_sha256.c secu.c system.c \
+ analog_alarm_eoc.c autoconf_eoc.c current_alarm_eoc.c \
+ discrete_alarm_eoc.c hardware.c master_config_eoc.c misc_eoc.c \
+ openssl_md5.c port_eoc.c service_eoc.c tonemap_snr_eoc.c upgrade_eoc.c \
+ wl_eoc.c community_eoc.c ethernet_port_eoc.c maclimit_eoc.c \
+ storm_eoc.c trap_eoc.c vlan_port_eoc.c vlan_eoc.c util.c \
+ igmp_snooping_eoc.c config_backup_eoc.c ethctl_eoc.c nvram.c
+
diff --git a/cleopatre/application/libspid/config_to_header b/cleopatre/application/libspid/config_to_header
new file mode 120000
index 0000000000..e29efd024d
--- /dev/null
+++ b/cleopatre/application/libspid/config_to_header
@@ -0,0 +1 @@
+../config_to_header \ No newline at end of file
diff --git a/cleopatre/application/libspid/inc/defs.h b/cleopatre/application/libspid/inc/defs.h
index c18155466d..3f75827d52 100644
--- a/cleopatre/application/libspid/inc/defs.h
+++ b/cleopatre/application/libspid/inc/defs.h
@@ -17,32 +17,41 @@
#include <stdint.h>
+/* Image version */
+#define LIBSPID_IMAGE_VERSION_STR_MAX_LEN 17
+
/* BOOLEAN */
#define LIBSPID_BOOLEAN_STR_MAX_LEN 8
/* IP/MAC ADDRESS */
/** Size of buffer to manage ip address */
#define LIBSPID_IP_STR_MAX_LEN 16
+/** Size of binary ip address */
+#define LIBSPID_IP_BIN_LEN 4
/** Size of buffer to manage mac address */
#define LIBSPID_MAC_STR_LEN 18
-/** Size of mac address */
+/** Size of binary mac address */
#define LIBSPID_MAC_BIN_LEN 6
/* CONFIG ITEM/LINE */
#define LIBSPID_CONFIG_LINE_MAX_LEN 1024
#define LIBSPID_CONFIG_KEY_MAX_LEN 63
#define LIBSPID_CONFIG_ELT_MAX_NB 32
+#define LIBSPID_CONFIG_ELT_MAX_LEN 64
#define LIBSPID_CONFIG_DELIMITER "="
/* SECURITY */
/** size of pbkdf1 salt */
#define LIBSPID_SECU_SALT_SIZE 8
+/** min password size. */
+#define LIBSPID_SECU_PWD_SIZE_MIN 16
/** max password size. */
#define LIBSPID_SECU_PWD_SIZE_MAX 64
/** SHA 256 size. */
#define LIBSPID_SECU_SHA256_SIZE 32
/** pbkdf1 generated key size */
#define LIBSPID_SECU_OUTPUT_KEY_SIZE 16
+#define LIBSPID_STR_SECU_OUTPUT_KEY_SIZE 33
/** PBKDF1 iteration. */
#define LIBSPID_SECU_PBKDF1_ITERATION 1000
@@ -77,6 +86,229 @@
/** Delimiter of "signal.info" file. */
#define LIBSPID_SIGNAL_INFO_DELIMITER " "
+/** Delimiter of "proc/stat" file. */
+#define LIBSPID_CPUSTAT_INFO_DELIMITER " "
+/* limits CPU load threshold */
+#define LIBSPID_EOC_CPULOAD_THRESHOLD_MIN 1
+#define LIBSPID_EOC_CPULOAD_THRESHOLD_MAX 100
+/* limits mem load threshold */
+#define LIBSPID_EOC_MEMUSAGE_THRESHOLD_MIN 1
+#define LIBSPID_EOC_MENUSAGE_THRESHOLD_MAX 100
+/* limits CNU attenuation threshold */
+#define LIBSPID_EOC_ATTENUATION_THRESHOLD_MIN 0
+#define LIBSPID_EOC_ATTENUATION_THRESHOLD_MAX 100
+/* limits env temp threshold */
+#define LIBSPID_EOC_ENVTEMP_THRESHOLD_MIN -50
+#define LIBSPID_EOC_ENVTEMP_THRESHOLD_MAX 150
+
+
+
+#define LIBSPID_DELIMITER " "
+
+#define LIBSPID_AUTODISCOVERY_INFO_TIME_INTERVAL_T1 "1"
+#define LIBSPID_AUTODISCOVERY_INFO_TIME_INTERVAL_T2 "2"
+
+/** web_reset.info*/
+#define LIBSPID_WEB_RESET_INFO_RESET_BY_WEB_YES "yes"
+#define LIBSPID_WEB_RESET_INFO_RESET_BY_WEB_NO "no"
+
+/** File transfer */
+#define LIBSPID_TRANSFER_MAX_SLICE (MME_MAX_SIZE - 11)
+#define LIBSPID_TRANSFER_MAX_ATTEMPT_CNT 5
+#define LIBSPID_TRANSFER_RETRY_COUNT 2
+#define LIBSPID_UPDATE_ARCH_SPC300 1
+#define LIBSPID_UPDATE_TYPE_NORMAL 0
+#define LIBSPID_UPDATE_FLASH_SECTOR_1K 1024
+#define LIBSPID_UPDATE_FLASH_SECTOR_64K 65536
+#define LIBSPID_UPDATE_TRANSFER_TFTP_SEC 120
+#define LIBSPID_UPDATE_END_TIMEOUT_SEC 120
+#define LIBSPID_UPDATE_TFTP_SERVER_PORT "69"
+
+/** EoC */
+#define LIBSPID_ONLINE_INFO_DELIMITER ";"
+#define LIBSPID_ONLINE_INFO_LINE_MAX_NB LIBSPID_RF_LINK_MAXIMUM
+#define LIBSPID_ONLINE_INFO_HEADER_LENGTH 10
+#define LIBSPID_WHITE_LIST_CONF_DELIMITER " "
+#define LIBSPID_WHITE_LIST_CONF_LINE_MAX_NB 256
+#define LIBSPID_WHITE_LIST_MAX_STA_NUM 128
+#define LIBSPID_EOC_PLC_IFACE "plc0"
+#define LIBSPID_EOC_LO_IFACE "lo"
+#define LIBSPID_EOC_BR_IFACE "br0"
+#define LIBSPID_EOC_ETH_IFACE "eth0"
+#define LIBSPID_EOC_WL_BYTE_NR_STA 98
+#define LIBSPID_EOC_WL_MAX_STA_CNT 15
+#define LIBSPID_EOC_WL_PARAM_NUM 7
+#define LIBSPID_EOC_WL_TEI_MIN 3
+#define LIBSPID_EOC_WL_TEI_MAX 254
+#define LIBSPID_EOC_WL_IP_DEFAULT "0.0.0.0"
+#define LIBSPID_EOC_WL_ERROR_TYPES_NUM 12
+
+#define LIBSPID_EOC_TRAP_COMMUNITY_MAX_LEN 256
+#define LIBSPID_EOC_TRAP_SERVER_MAX 256
+#define LIBSPID_EOC_TRAP_PARAM_NUM 2
+#define LIBSPID_EOC_TRAP_ERROR_TYPES_NUM 4
+
+
+#define LIBSPID_EOC_STORM_ITMES_MAX 256
+#define LIBSPID_EOC_STORM_PARAM_NUM 6
+#define LIBSPID_EOC_STORM_BCAST_THRES_HOLD_MIN 100
+#define LIBSPID_EOC_STORM_BCAST_THRES_HOLD_MAX 25500
+#define LIBSPID_EOC_STORM_MULTI_THRES_HOLD_MIN 100
+#define LIBSPID_EOC_STORM_MULTI_THRES_HOLD_MAX 25500
+#define LIBSPID_EOC_STORM_UNKNOW_THRES_HOLD_MIN 1
+#define LIBSPID_EOC_STORM_UNKNOW_THRES_HOLD_MAX 6000000
+
+#define LIBSPID_EOC_MACLIMIT_ITMES_MAX 128
+#define LIBSPID_EOC_MACLIMIT_PARAM_NUM 1
+#define LIBSPID_MAC_LIMIT_CONF_DELIMITER " "
+#define LIBSPID_MAC_LIMIT_DEFAULT_NUM 4
+#define LIBSPID_MAC_LIMIT_ERROR_TYPES_NUM 3
+
+
+/* limits for slave output level */
+#define LIBSPID_EOC_WL_RF_OUTPUT_LEVEL_MIN 80
+#define LIBSPID_EOC_WL_RF_OUTPUT_LEVEL_MAX 130
+/* external MAC limitation for all slaves in white list */
+#define LIBSPID_EOC_WL_EXT_MAC_LIMIT_MIN 1
+#define LIBSPID_EOC_WL_EXT_MAC_LIMIT_MAX 128
+#define LIBSPID_SERVICE_CONF_DELIMITER " "
+#define LIBSPID_SERVICE_AMOUNT_LIMIT 128
+#define LIBSPID_SERVICE_NAME_STR_MAX_LEN 256
+#define LIBSPID_SERVICE_PARAM_NUM 11
+/* maximum number of parameters for service */
+#define LIBSPID_SERVICE_PARAMS_MAX_CNT 7
+/* number of bytes per service */
+#define LIBSPID_SERVICE_BYTE_CNT 20
+/* maximum number of services per MME */
+#define LIBSPID_SERVICE_MAX_CNT 73
+
+
+/* limits for service parameters (matching values) */
+#define LIBSPID_SERVICE_MAX_MATCH_VID 4095
+#define LIBSPID_SERVICE_MAX_MATCH_PRIO 7
+#define LIBSPID_SERVICE_MAX_MATCH_TOS 255
+#define LIBSPID_SERVICE_MAX_DBA_DL_PIR 65535
+#define LIBSPID_SERVICE_MAX_DBA_UL_PIR 65535
+#define LIBSPID_SERVICE_MAX_DBA_DL_CIR 65535
+#define LIBSPID_SERVICE_MAX_DBA_UL_CIR 65535
+#define LIBSPID_SERVICE_MAX_LATENCY 65535
+#define LIBSPID_SERVICE_MAX_JITTER 65535
+
+#define LIBSPID_SERVICE_ACTION_ADD_MODIFY 0
+#define LIBSPID_SERVICE_ACTION_REMOVE 1
+#define LIBSPID_SERVICE_ACTION_REMOVE_ALL 2
+
+#define LIBSPID_PORT_PER_SLAVE_MAX 5
+#define LIBSPID_PORT_TOTAL_MAX (LIBSPID_ONLINE_INFO_LINE_MAX_NB * LIBSPID_PORT_PER_SLAVE_MAX)
+#define LIBSPID_PORT_CONF_DELIMITER " "
+#define LIBSPID_PORT_BYTE_PER_STA 16
+#define LIBSPID_PORT_STA_MAX_CNT 93
+#define LIBSPID_PORT_PARAM_NUM 4
+#define LIBSPID_UPDATE_INFO_DELIMITER " "
+/* maximum number of connected slaves */
+#define LIBSPID_RF_LINK_MAXIMUM LIBSPID_WHITE_LIST_MAX_STA_NUM
+/* limits for master output level */
+#define LIBSPID_RF_CLT_OUTPUT_LEVEL_MIN 80
+#define LIBSPID_RF_CLT_OUTPUT_LEVEL_MAX 130
+
+#define LIBSPID_MASTER_TC_QUANTUM_DEFAULT 10
+
+#define LIBSPID_MAX_PKT_SIZE 1524
+
+/** Max file name string **/
+#define LIBSPID_UPDATE_FILE_STR_MAX_LEN 255
+/** Size of buffer to manage server port **/
+#define LIBSPID_UPDATE_PORT_STR_MAX_LEN 6
+
+/* Upgrade status flags */
+#define LIBSPID_UPDATE_NONE 0
+#define LIBSPID_UPDATE_RUNNING 1
+#define LIBSPID_UPDATE_SUCCESS 2
+#define LIBSPID_UPDATE_FAILED 3
+
+/* Upgrade action */
+#define LIBSPID_UPDATE_ACTION_NONE 0
+#define LIBSPID_UPDATE_ACTION_UPLOAD 2
+#define LIBSPID_UPDATE_ACTION_UPDATE 3
+#define LIBSPID_UPDATE_ACTION_TFTP_UPDATE 4
+
+/* Alarms and traps */
+#define LIBSPID_OID_MAX_LEN 64
+#define LIBSPID_DISCRETE_ALARM_CONF_DELIMITER " "
+#define LIBSPID_DISCRETE_ALARMS_MAX_NUM 32
+#define LIBSPID_DISCRETE_ALARMS_PARAM_NUM 3
+#define LIBSPID_ANALOG_ALARM_CONF_DELIMITER " "
+#define LIBSPID_ANALOG_ALARMS_MAX_NUM 32
+#define LIBSPID_ANALOG_ALARMS_PARAM_NUM 7
+#define LIBSPID_ANALOG_ALARM_ENABLE_MAX 15
+/* allow possibility that each of the alarms can be triggered per online slave */
+#define LIBSPID_CURRENT_ALARMS_MAX_NUM (LIBSPID_ONLINE_INFO_LINE_MAX_NB * (LIBSPID_DISCRETE_ALARMS_MAX_NUM + LIBSPID_ANALOG_ALARMS_MAX_NUM))
+#define LIBSPID_CURRENT_ALARMS_PARAM_NUM 2
+#define LIBSPID_ALARM_INFO_DELIMITER " "
+#define LIBSPID_TRAP_INFO_DELIMITER " "
+
+/* Config IGMP snooping*/
+#define LIBSPID_EOC_IGMP_SNOOPING_ITMES_MAX 128
+#define LIBSPID_EOC_IGMP_SNOOPING_PARAM_NUM 1
+#define LIBSPID_EOC_IGMP_SNOOPING_CONF_DELIMITER " "
+#define LIBSPID_EOC_IGMP_SNOOPING_ERROR_TYPES_NUM 3
+
+/* Config back up*/
+#define LIBSPID_CONFIG_BACKUP_DELIMITER " "
+#define LIBSPID_CONFIG_BACKUP_ITEM_MAX 16
+#define LIBSPID_CONFIG_BACKUP_PARAM_NUM 8
+#define LIBSPID_CONFIG_BACKUP_STRING_LIMIT 32
+#define LIBSPID_CONFIG_BACKUP_RESULT_NONE "0"
+#define LIBSPID_CONFIG_BACKUP_RESULT_SUC "1"
+#define LIBSPID_CONFIG_BACKUP_RESULT_FAIL "2"
+
+/*vlan table and vlan port table*/
+#define LIBSPID_VLAN_TABLE_CONF_DELIMITER " "
+#define LIBSPID_VLAN_TABLE_PARAM_NUM 2
+#define LIBSPID_VLAN_NAME_STR_MAX_LEN 64
+#define LIBSPID_VLAN_TABLE_ERROR_TYPES_NUM 3
+
+#define LIBSPID_VLAN_PORT_PER_SLAVE_MAX 5
+#define LIBSPID_VLAN_PORT_BYTE_PER_STA 16
+#define LIBSPID_VLAN_PORT_STA_MAX_CNT 93
+#define LIBSPID_VLAN_TABLE_NUM_MAX 4095
+#define LIBSPID_VLAN_PORT_ERROR_TYPES_NUM 8
+
+
+/*ethernet port table*/
+#define LIBSPID_ETHERNET_PORT_PER_SLAVE_MAX 5
+
+/* ethctl table*/
+#define LIBSPID_ETHCTL_DELIMITER " "
+#define LIBSPID_ETHCTL_PARAM_NUM 8
+#define LIBSPID_ETHCTL_MAX_CONF_NUM LIBSPID_WHITE_LIST_MAX_STA_NUM
+#define LIBSPID_ETHCTL_MAX_PORT 4
+#define LIBSPID_ETHCTL_ERROR_TYPES_NUM 10
+#define LIBSPID_ETHCTL_MAX_PORT_INDEX 0xFF
+#define LIBSPID_ETHCTL_INVALID_PORT_INDEX 0xAA
+#define LIBSPID_ETHCTL_MAX_AGINGTIME (31 * 60)
+
+/* EoC debug and logging */
+#define LIBSPID_EOC_DEBUG 1
+#if LIBSPID_EOC_DEBUG
+#define LIBSPID_EOC_LOG_0(msg) syslog(LOG_WARNING, msg);
+#define LIBSPID_EOC_LOG_1(msg, a) syslog(LOG_WARNING, msg, a);
+#define LIBSPID_EOC_LOG_2(msg, a, b) syslog(LOG_WARNING, msg, a, b);
+#define LIBSPID_EOC_LOG_3(msg, a, b, c) syslog(LOG_WARNING, msg, a, b, c);
+#define LIBSPID_EOC_LOG_4(msg, a, b, c, d) syslog(LOG_WARNING, msg, a, b, c, d);
+#else
+#define LIBSPID_EOC_LOG_0(msg)
+#define LIBSPID_EOC_LOG_1(msg, a)
+#define LIBSPID_EOC_LOG_2(msg, a, b)
+#define LIBSPID_EOC_LOG_3(msg, a, b, c)
+#define LIBSPID_EOC_LOG_4(msg, a, b, c, d)
+#endif
+
+#define LIBSPID_LINE_MAX_LEN LIBSPID_CONFIG_LINE_MAX_LEN
+#define LIBSPID_KEY_MAX_LEN LIBSPID_CONFIG_KEY_MAX_LEN
+#define LIBSPID_ELT_MAX_NB LIBSPID_CONFIG_ELT_MAX_NB
+#define LIBSPID_ELT_MAX_LEN LIBSPID_CONFIG_ELT_MAX_LEN
+#define LIBSPID_IP_MAX_LEN LIBSPID_IP_STR_MAX_LEN
/* Multicast_info */
/** Delimiter of "mcast.info" file */
@@ -88,6 +320,51 @@
/** Maximum number of members in a group of the multicast info file. */
/* uint8_t because it goes into an uint8_t field in an mme sent by plcd. */
-#define LIBSPID_MULTICAST_INFO_MEMBER_MAX_NB ((uint8_t)1)
+#define LIBSPID_MULTICAST_INFO_MEMBER_MAX_NB ((uint8_t)4)
+
+/** Tonemap and SNR parameters **/
+#define LIBSPID_EOC_TONEMAP_DIRECTION_TX 0
+#define LIBSPID_EOC_TONEMAP_DIRECTION_RX 1
+
+#define LIBSPID_EOC_TONEMAP_TMI_DEFAULT 255
+#define LIBSPID_EOC_TONEMAP_TMI_INDEX 4
+
+#define LIBSPID_EOC_SNR_INT_INDEX 0
+#define LIBSPID_EOC_SNR_INT_ID 0
+
+#define LIBSPID_EOC_SNR_MIN_GROUP 0
+#define LIBSPID_EOC_SNR_MAX_GROUP 7
+
+#define LIBSPID_EOC_POSSIBLE_CARRIERS_MAX 1536
+#define LIBSPID_EOC_SNR_LIST_MAX_SIZE (LIBSPID_EOC_POSSIBLE_CARRIERS_MAX/2)
+#define LIBSPID_EOC_MODULATION_LIST_MAX_SIZE (LIBSPID_EOC_POSSIBLE_CARRIERS_MAX/2)
+
+#define LIBSPID_EOC_REAL_TIME_STATISTICS_GET 0
+#define LIBSPID_EOC_REAL_TIME_STATISTICS_RESET 1
+
+/* SNMPCommunity Group */
+
+#define LIBSPID_SNMPD_COMMUNITY_MAX_NB 16
+#define LIBSPID_SNMPD_DEFAULT_SOURCEIP "0.0.0.0/16"
+
+#define LIBSPID_SNMPD_CONF_DELIMITER " "
+#define LIBSPID_SNMPD_SNMP_VERSION_NUM 3
+#define LIBSPID_SNMPD_ACCESS_NUM 3
+
+#define LIBSPID_EOC_TRAP_STATUS_IDLE "0"
+#define LIBSPID_EOC_TRAP_STATUS_BUSY "1"
+
+
+/* number of errors for different files */
+#define LIBSPID_ETH_PORT_NUM_ERROR_TYPES 6
+#define LIBSPID_STORM_NUM_ERROR_TYPES 9
+
+#define LIBSPID_PTABLE_COL_MIN 1
+#define LIBSPID_PTABLE_COL_MAX 16
+#define LIBSPID_PTABLE_ROW_MIN 1
+#define LIBSPID_PTABLE_ROW_MAX 512
+
+#define LIBSPID_PORT_V2_PARAM_NUM 13
+#define LIBSPID_PORT_V2_CONF_DELIMITER " "
#endif /* LIBSPID_DEFS_H */
diff --git a/cleopatre/application/libspid/inc/label.h b/cleopatre/application/libspid/inc/label.h
index a8ecc02404..09381893c9 100644
--- a/cleopatre/application/libspid/inc/label.h
+++ b/cleopatre/application/libspid/inc/label.h
@@ -40,13 +40,141 @@
#define LIBSPID_HPAV_INFO_VALUE_STATUS_UNASSOCIATED "unassociated"
#define LIBSPID_HPAV_INFO_VALUE_STATUS_ASSOCIATED "associated"
#define LIBSPID_HPAV_INFO_VALUE_STATUS_AUTHENTICATED "authenticated"
-#define LIBSPID_HPAV_INFO_VALUE_CCO_STATION "station"
-#define LIBSPID_HPAV_INFO_VALUE_CCO_PROXY "proxy"
-#define LIBSPID_HPAV_INFO_VALUE_CCO_MAIN "main"
+#define LIBSPID_HPAV_INFO_VALUE_CCO_STATION "station"
+#define LIBSPID_HPAV_INFO_VALUE_CCO_PROXY "proxy"
+#define LIBSPID_HPAV_INFO_VALUE_CCO_MAIN "main"
+
+/* LIBSPID_SYSTEM_CONF_PATH */
+#define LIBSPID_SYSTEM_CONF_LABEL_ADMIN_LOGICAL_ID "ADMIN_LOGICAL_ID"
+#define LIBSPID_SYSTEM_CONF_LABEL_ADMIN_TECHPROJECT "ADMIN_TECHPROJECT"
+#define LIBSPID_SYSTEM_CONF_LABEL_ADMIN_EMS_IP_ADDRESS "ADMIN_EMS_IP_ADDRESS"
+#define LIBSPID_SYSTEM_CONF_LABEL_UPGRADE_SERVER_IP "UPGRADE_SERVER_IP"
+#define LIBSPID_SYSTEM_CONF_LABEL_UPGRADE_SERVER_PORT "UPGRADE_SERVER_PORT"
+#define LIBSPID_SYSTEM_CONF_LABEL_UPGRADE_SERVER_LOGIN "UPGRADE_SERVER_LOGIN"
+#define LIBSPID_SYSTEM_CONF_LABEL_UPGRADE_SERVER_PASSWORD "UPGRADE_SERVER_PASSWORD"
+#define LIBSPID_SYSTEM_CONF_LABEL_UPGRADE_MASTER_FILENAME "UPGRADE_MASTER_FILENAME"
+#define LIBSPID_SYSTEM_CONF_LABEL_UPGRADE_SLAVE_FILENAME "UPGRADE_SLAVE_FILENAME"
+#define LIBSPID_SYSTEM_CONF_LABEL_UPGRADE_BOARD_TYPE_CHECK "UPGRADE_BOARD_TYPE_CHECK"
+#define LIBSPID_SYSTEM_CONF_LABEL_CONFIG_SERVER_IP "CONFIG_SERVER_IP"
+#define LIBSPID_SYSTEM_CONF_LABEL_CONFIG_SERVER_PORT "CONFIG_SERVER_PORT"
+#define LIBSPID_SYSTEM_CONF_LABEL_CONFIG_SERVER_LOGIN "CONFIG_SERVER_LOGIN"
+#define LIBSPID_SYSTEM_CONF_LABEL_CONFIG_SERVER_PASSWORD "CONFIG_SERVER_PASSWORD"
+#define LIBSPID_SYSTEM_CONF_LABEL_CONFIG_SERVER_FILENAME "CONFIG_SERVER_FILENAME"
+#define LIBSPID_SYSTEM_CONF_LABEL_AUTOUPDATE "AUTOUPDATE"
+#define LIBSPID_SYSTEM_CONF_LABEL_REMOTE_UPDATE "REMOTE_UPDATE"
+#define LIBSPID_SYSTEM_CONF_LABEL_AUTOCONF "AUTOCONF"
+#define LIBSPID_SYSTEM_CONF_LABEL_VLAN "VLAN"
+#define LIBSPID_SYSTEM_CONF_LABEL_FTP_SERVICE "FTP_SERVICE"
+#define LIBSPID_SYSTEM_CONF_LABEL_SNMP_SERVICE "SNMP_SERVICE"
+#define LIBSPID_SYSTEM_CONF_LABEL_SERIAL_SERVICE "SERIAL_SERVICE"
+#define LIBSPID_SYSTEM_CONF_LABEL_TELNET_SERVICE "TELNET_SERVICE"
+#define LIBSPID_SYSTEM_CONF_LABEL_TELNET_TIMEOUT_SEC "TELNET_TIMEOUT_SEC"
+#define LIBSPID_SYSTEM_CONF_LABEL_TELNET_SESSIONS_MAX_NB "TELNET_SESSIONS_MAX_NB"
+#define LIBSPID_SYSTEM_CONF_LABEL_8021X_SUPPLICANT_SERVICE "8021X_SUPPLICANT_SERVICE"
+#define LIBSPID_SYSTEM_CONF_LABEL_8021X_AUTH_SERVICE "8021X_AUTH_SERVICE"
+#define LIBSPID_SYSTEM_CONF_LABEL_HTTP_SERVICE "HTTP_SERVICE"
+#define LIBSPID_SYSTEM_CONF_LABEL_AUTODISCOVERY_ENABLE "AUTODISCOVERY_ENABLE"
+#define LIBSPID_SYSTEM_CONF_LABEL_AUTODISCOVERY_TIME_SEC "AUTODISCOVERY_TIME_SEC"
+#define LIBSPID_SYSTEM_CONF_LABEL_AUTODISCOVERY_TIME_SEC2 "AUTODISCOVERY_TIME_SEC2"
+#define LIBSPID_SYSTEM_CONF_LABEL_AUTODISCOVERY_INTERFACE "AUTODISCOVERY_INTERFACE"
+#define LIBSPID_SYSTEM_CONF_LABEL_PLC_FORWARDING_ENABLE "PLC_FORWARDING_ENABLE"
+#define LIBSPID_SYSTEM_CONF_LABEL_NSCRTV_EPONEOC_MOD_EOC "NSCRTV_EPONEOC_MOD_EOC"
+#define LIBSPID_SYSTEM_CONF_LABEL_WL_CONTROL "WL_CONTROL"
+#define LIBSPID_SYSTEM_CONF_LABEL_STP_ENABLE "STP_ENABLE"
+#define LIBSPID_SYSTEM_CONF_LABEL_SSH_ENABLE "SSH_ENABLE"
+#define LIBSPID_SYSTEM_CONF_LABEL_VLAN_VERSION "VLAN_VERSION"
+#define LIBSPID_SYSTEM_CONF_LABEL_VLAN_MAX_ID "VLAN_MAX_ID"
+#define LIBSPID_SYSTEM_CONF_LABEL_VLAN_MAX_SUPPORTED_VLANS "VLAN_MAX_SUPPORTED_VLANS"
+#define LIBSPID_SYSTEM_CONF_LABEL_BCMP_ENABLE "BCMP_ENABLE"
+
+#define LIBSPID_SYSTEM_CONF_VALUE_YES "yes"
+#define LIBSPID_SYSTEM_CONF_VALUE_NO "no"
+
+/* AUTODISCOVERY_INFO_PATH*/
+#define LIBSPID_AUTODISCOVERY_INFO_LABEL_TIME_INTERVAL "AUTODISCOVERY_TIME_INTERVAL"
+
+
+/* LIBSPID_SNMP_CONF_PATH */
+#define LIBSPID_SNMP_CONF_LABEL_ALARM_ENABLE "ALARM_ENABLE"
+#define LIBSPID_SNMP_CONF_LABEL_ALARM_TEMP_HIGHTHRESHOLD \
+ "ALARM_TEMP_HIGHTHRESHOLD"
+#define LIBSPID_SNMP_CONF_LABEL_ALARM_TEMP_LOWTHRESHOLD \
+ "ALARM_TEMP_LOWTHRESHOLD"
+#define LIBSPID_SNMP_CONF_LABEL_ALARM_CPULOAD_THRESHOLD \
+ "ALARM_CPULOAD_THRESHOLD"
+#define LIBSPID_SNMP_CONF_LABEL_ALARM_MEMUSAGE_THRESHOLD \
+ "ALARM_MEMUSAGE_THRESHOLD"
+#define LIBSPID_SNMP_CONF_LABEL_ALARM_ATN_HIGHTHRESHOLD \
+ "ALARM_ATN_HIGHTHRESHOLD"
+#define LIBSPID_SNMP_CONF_LABEL_ALARM_ATN_LOWTHRESHOLD \
+ "ALARM_ATN_LOWTHRESHOLD"
+#define LIBSPID_SNMP_CONF_LABEL_TRAP_COMMUNITY "TRAP_COMMUNITY"
+#define LIBSPID_SNMP_CONF_LABEL_TRAP_ENABLE "TRAP_ENABLE"
+#define LIBSPID_SNMP_CONF_LABEL_TRAP_SERVER_IP "TRAP_SERVER_IP"
+#define LIBSPID_SNMP_CONF_LABEL_TRAP_SERVER_PORT "TRAP_SERVER_PORT"
+#define LIBSPID_SNMP_CONF_LABEL_TRAP_MAX_TIMES "TRAP_MAX_TIMES"
+#define LIBSPID_SNMP_CONF_LABEL_TRAP_MIN_INTERVAL "TRAP_MIN_INTERVAL"
+#define LIBSPID_SNMP_CONF_LABEL_TRAP_MAX_INTERVAL "TRAP_MAX_INTERVAL"
+
+#define LIBSPID_SNMP_CONF_VALUE_YES "yes"
+#define LIBSPID_SNMP_CONF_VALUE_NO "no"
+#define LIBSPID_SNMP_CONF_VALUE_REGENERATE "regenerate"
+
+/* LIBSPID_SNMP_INFO_PATH */
+#define LIBSPID_SNMP_INFO_LABEL_TRAP_STATUS "TRAP_STATUS"
+
+/* LIBSPID_EOC_CONF_PATH */
+#define LIBSPID_EOC_CONF_LABEL_OUTPUT_LEVEL "OUTPUT_LEVEL"
+#define LIBSPID_EOC_CONF_LABEL_NPW "NPW"
+#define LIBSPID_EOC_CONF_LABEL_SERVICE_TYPE "SERVICE_TYPE"
+
+/* LIBSPID_EOC_INFO_PATH */
+#define LIBSPID_EOC_INFO_LABEL_BACKUP_STATUS "BACKUP_STATUS"
+#define LIBSPID_EOC_INFO_LABEL_BACKUP_UPTIME "BACKUP_UPTIME"
+
+/* LIBSPID_WEB_RESET_INFO_PATH */
+#define LIBSPID_WEB_RESET_INFO_LABEL_RESET_BY_WEB "RESET_BY_WEB"
+
+/* LIBSPID_MASTER_CONF_PATH */
+#define LIBSPID_MASTER_CONF_LABEL_VLAN_ADMIN_ENABLE "VLAN_ADMIN_ENABLE"
+#define LIBSPID_MASTER_CONF_LABEL_VLAN_ADMIN_ID "VLAN_ADMIN_ID"
+#define LIBSPID_MASTER_CONF_LABEL_BCAST_LIMIT_ENABLE "BCAST_LIMIT_ENABLE"
+#define LIBSPID_MASTER_CONF_LABEL_BCAST_LIMIT_VALUE "BCAST_LIMIT_VALUE"
+#define LIBSPID_MASTER_CONF_LABEL_UNKNOWN_LIMIT_ENABLE "UNKNOWN_LIMIT_ENABLE"
+#define LIBSPID_MASTER_CONF_LABEL_UNKNOWN_LIMIT_VALUE "UNKNOWN_LIMIT_VALUE"
+#define LIBSPID_MASTER_CONF_LABEL_ISOLATION_ENABLE "ISOLATION_ENABLE"
+#define LIBSPID_MASTER_CONF_LABEL_DISCOVERY_BCAST_FSI_BEFORE_ACK "DISCOVERY_BCAST_FSI_BEFORE_ACK"
+#define LIBSPID_MASTER_CONF_LABEL_DISCOVERY_BCAST_FSI_AFTER_ACK "DISCOVERY_BCAST_FSI_AFTER_ACK"
+#define LIBSPID_MASTER_CONF_LABEL_ONU_MAC "ONU_MAC"
+#define LIBSPID_MASTER_CONF_LABEL_ONU_PORT "ONU_PORT"
+#define LIBSPID_MASTER_CONF_LABEL_MASTER_BW_LIMIT_TX "MASTER_BW_LIMIT_TX"
+#define LIBSPID_MASTER_CONF_LABEL_MASTER_BW_LIMIT_RX "MASTER_BW_LIMIT_RX"
+
+#define LIBSPID_MASTER_CONF_VALUE_YES "yes"
+#define LIBSPID_MASTER_CONF_VALUE_NO "no"
+
+/* LIBSPID_WHITE_LIST_INFO_PATH */
+#define LIBSPID_WHITE_LIST_INFO_VALUE_ACTION_ADD_MODIFY "0"
+#define LIBSPID_WHITE_LIST_INFO_VALUE_ACTION_REMOVE "1"
+
+/* LIBSPID_SLAVE_CONF_PATH */
+#define LIBSPID_SLAVE_CONF_LABEL_OUTPUT_LEVEL "OUTPUT_LEVEL_ALL"
+#define LIBSPID_SLAVE_CONF_LABEL_MAC_LIMITATION "MAC_LIMITATION"
+
/* COMMON VALUES */
#define LIBSPID_VALUE_NONE "none"
#define LIBSPID_VALUE_BOOLEAN_FALSE "no"
#define LIBSPID_VALUE_BOOLEAN_TRUE "yes"
+/* SNMPCommunity Group */
+#define LIBSPID_SNMPD_RWGROUP_LABEL "MyRWGroup"
+#define LIBSPID_SNMPD_ROGROUP_LABEL "MyROGroup"
+#define LIBSPID_SNMPD_WOGROUP_LABEL "MyWOGroup"
+#define LIBSPID_SNMPD_SECMODEL_V1_LABEL "v1"
+#define LIBSPID_SNMPD_SECMODEL_V2C_LABEL "v2c"
+#define LIBSPID_SNMPD_SECMODEL_USM_LABEL "usm"
+#define LIBSPID_SNMPD_COMM_KEY_LABEL "com2sec"
+#define LIBSPID_SNMPD_SEC_KEY_LABEL "group"
+
#endif /* LIBSPID_LABEL_H */
diff --git a/cleopatre/application/libspid/inc/libspid.h b/cleopatre/application/libspid/inc/libspid.h
index ea2c6967df..0b000e9b5c 100644
--- a/cleopatre/application/libspid/inc/libspid.h
+++ b/cleopatre/application/libspid/inc/libspid.h
@@ -20,20 +20,27 @@
#include <stdlib.h> /** pid_t */
#include <signal.h> /** sigaction(), kill(), struct siginfo */
+#ifdef LIBSPID_EOC_DEBUG
+#include <syslog.h>
+#endif
+
+#include "ioctl.h"
#include "spid_img_desc.h"
#include "nvram.h"
#include "label.h"
#include "openssl_sha256.h"
+#include "openssl_md5.h"
#include "path.h"
#include "defs.h"
#include "multicast_info.h"
+#include "spc300-reset_cause.h"
#define LIBSPID_GET_BOOLEAN(array) ((array[0] == 'Y' || array[0] == 'y') ? \
LIBSPID_TRUE : LIBSPID_FALSE)
-/**
+/**
* boolean type used in Libspid functions definitions
- */
+ */
typedef enum
{
LIBSPID_FALSE = 0,
@@ -54,21 +61,303 @@ typedef enum {
LIBSPID_ERROR_NOT_FOUND,
/** system error, see errno for more details */
LIBSPID_ERROR_SYSTEM,
+ /** mme function failed */
+ LIBSPID_ERROR_MME,
+ /** general error */
+ LIBSPID_ERROR_GEN,
/** an error specific to the processing done by the function.
- * More details may be provided in an other status returned by the function. */
- LIBSPID_ERROR_PROCESSING
+ * More details may be provided in an other status returned by the
+function. */
+ LIBSPID_ERROR_PROCESSING,
+ /** return value if autoconfiguration exist */
+ LIBSPID_ERROR_AUTOCONF_EXIST,
+ /** MAC address error format **/
+ LIBSPID_ERROR_MAC,
+ /** error check utility **/
+ LIBSPID_ERROR_CHECK,
+ /** slave with MAC address is not allowed */
+ LIBSPID_ERROR_AUTH,
} libspid_error_t;
/**
+ * list of errors returned by libspid white list check function
+ */
+typedef enum {
+ /** bad MAC address format */
+ LIBSPID_ERROR_WL_MAC_FORMAT = 0,
+ /** MAC address duplicate */
+ LIBSPID_ERROR_WL_MAC_DUPLICATE,
+ /** bad IP address format */
+ LIBSPID_ERROR_WL_IP_FORMAT,
+ /** MAC address duplicate */
+ LIBSPID_ERROR_WL_IP_DUPLICATE,
+ /** bad input TEI parameters */
+ LIBSPID_ERROR_WL_TEI_VALUE,
+ /** TEI parameter duplicate */
+ LIBSPID_ERROR_WL_TEI_DUPLICATE,
+ /** bad input AUTH parameters */
+ LIBSPID_ERROR_WL_AUTH_VALUE,
+ /** bad input OUTPUT_LEVEL parameters */
+ LIBSPID_ERROR_WL_OUTPUT_VALUE,
+ /** bad input START TIME parameters */
+ LIBSPID_ERROR_WL_STIME_VALUE,
+ /** bad input END TIME parameters */
+ LIBSPID_ERROR_WL_ETIME_VALUE,
+ /** bad input DPW parameters */
+ LIBSPID_ERROR_WL_DPW_VALUE,
+ /** bad TIME PERIOD */
+ LIBSPID_ERROR_WL_PTIME_VALUE,
+} libspid_wl_check_error_t;
+
+/**
+ * list of errors returned by libspid service check function
+ */
+typedef enum {
+ /** bad index format */
+ LIBSPID_ERROR_SERVICE_INDEX_FORMAT = 0,
+ /** INDEX duplicate */
+ LIBSPID_ERROR_SERVICE_INDEX_DUPLICATE,
+ /** bad service name format */
+ LIBSPID_ERROR_SERVICE_NAME_FORMAT,
+ /** bad service type paramters */
+ LIBSPID_ERROR_SERVICE_TYPE_VALUE,
+ /** bad input matching value parameters */
+ LIBSPID_ERROR_SERVICE_MATCHING_VALUE,
+ /** bad QoS priority parameters */
+ LIBSPID_ERROR_SERVICE_QOS_VALUE,
+ /** bad input ACS enable flag parameters */
+ LIBSPID_ERROR_SERVICE_ACS_VALUE,
+ /** bad input LATENCY parameters */
+ LIBSPID_ERROR_SERVICE_LATENCY_VALUE,
+ /** bad input JITTER parameters */
+ LIBSPID_ERROR_SERVICE_JITTER_VALUE,
+ /** bad input PIR parameters */
+ LIBSPID_ERROR_SERVICE_PIR_VALUE,
+ /** bad input CIR parameters */
+ LIBSPID_ERROR_SERVICE_CIR_VALUE,
+ /** must be PIR >= CIR */
+ LIBSPID_ERROR_SERVICE_PIR_CIR_VALUE,
+} libspid_service_check_error_t;
+
+/**
+ * list of errors returned by libspid port check function
+ */
+typedef enum {
+ /** bad MAC address format */
+ LIBSPID_ERROR_PORT_MAC_FORMAT = 0,
+ /** MAC-PORT_INDEX duplicate */
+ LIBSPID_ERROR_PORT_MAC_DUPLICATE,
+ /** bad input INDEX parameters */
+ LIBSPID_ERROR_PORT_INDEX_VALUE,
+ /** bad port enable parameters */
+ LIBSPID_ERROR_PORT_ENABLE_VALUE,
+ /** bad input service index parameters */
+ LIBSPID_ERROR_PORT_SERVICE_VALUE,
+ /** bad input VLAN tag enable parameters */
+ LIBSPID_ERROR_PORT_VLANEN_VALUE,
+ /** bad input VLAN mark ID parameters */
+ LIBSPID_ERROR_PORT_VLANID_VALUE,
+ /** service index parameters are not defined in service.conf */
+ LIBSPID_ERROR_PORT_SERVICE_DEFINED,
+ /** for each MAC address, verify that there is requierd number of ports */
+ LIBSPID_ERROR_PORT_INDEX_NUMBER,
+} libspid_port_check_error_t;
+
+/**
+ * list of errors returned by libspid vlan port table check function
+ */
+typedef enum
+{
+ /** bad MAC address format */
+ LIBSPID_ERROR_VLAN_PORT_MAC_FORMAT = 0,
+ /** MAC-PORT_INDEX duplicate */
+ LIBSPID_ERROR_VLAN_PORT_MAC_DUPLICATE,
+ /** bad input INDEX parameters */
+ LIBSPID_ERROR_VLAN_PORT_INDEX_VALUE,
+ /** bad port vlan pvid parameters */
+ LIBSPID_ERROR_VLAN_PORT_PVID_VALUE,
+ /** bad port vlan tpid parameters */
+ LIBSPID_ERROR_VLAN_PORT_TPID_VALUE,
+ /** bad port vlan prio parameters */
+ LIBSPID_ERROR_VLAN_PORT_PRIO_VALUE,
+ /** bad port vlan mode parameters */
+ LIBSPID_ERROR_VLAN_PORT_MODE_VALUE,
+ /**vlan id are not defined in vlantable.conf*/
+ LIBSPID_ERROR_VLAN_PORT_VLAN_DEFINED,
+ /** for each MAC address, verify that there is requierd number of ports */
+ LIBSPID_ERROR_VLAN_PORT_INDEX_NUMBER,
+} libspid_vlan_port_check_error_t;
+
+/**
+ * list of errors returned by libspid ethernet port table check function
+ */
+typedef enum
+{
+ /** bad MAC address format */
+ LIBSPID_ERROR_ETH_PORT_MAC_FORMAT = 0,
+ /** MAC-PORT_INDEX duplicate */
+ LIBSPID_ERROR_ETH_PORT_MAC_DUPLICATE,
+ /** bad input INDEX parameters */
+ LIBSPID_ERROR_ETH_PORT_INDEX_VALUE,
+ /** bad port auto neg parameters */
+ LIBSPID_ERROR_ETH_PORT_AUTONEG_VALUE,
+ /** bad port speed parameters */
+ LIBSPID_ERROR_ETH_PORT_SPEED_VALUE,
+ /** bad port duplex parameters */
+ LIBSPID_ERROR_ETH_PORT_DUPLEX_VALUE,
+} libspid_ethernet_port_check_error_t;
+
+typedef enum
+{
+ /** bad MAC address format */
+ LIBSPID_ERROR_STORM_MAC_FORMAT = 0,
+ /** MAC-PORT_INDEX duplicate */
+ LIBSPID_ERROR_STORM_MAC_DUPLICATE,
+ /** bad input INDEX parameters */
+ LIBSPID_ERROR_STORM_INDEX_VALUE,
+ /** bad port storm enable parameters */
+ LIBSPID_ERROR_STORM_EN_VALUE,
+ /** bad port storm enable parameters */
+ LIBSPID_ERROR_STORM_THR_VALUE,
+ /** bad port mult enable parameters */
+ LIBSPID_ERROR_MULT_EN_VALUE,
+ /** bad port mult enable parameters */
+ LIBSPID_ERROR_MULT_THR_VALUE,
+ /** bad port unknow enable parameters */
+ LIBSPID_ERROR_UNKNOW_EN_VALUE,
+ /** bad port unknow thr parameters */
+ LIBSPID_ERROR_UNKNOW_THR_VALUE,
+} libspid_storm_check_error_t;
+
+/**
+ * list of errors returned by libspid ethctl check function
+ */
+typedef enum
+{
+ /** bad MAC address format */
+ LIBSPID_ERROR_ETHCTL_MAC_FORMAT = 0,
+ /** MAC INDEX duplicate */
+ LIBSPID_ERROR_ETHCTL_MAC_DUPLICATE,
+ /** bad mirror type parameters */
+ LIBSPID_ERROR_MIRROR_TYPE_VALUE,
+ /** bad mirror enable parameters */
+ LIBSPID_ERROR_MIRROR_EN_VALUE,
+ /** bad mirror source port parameters */
+ LIBSPID_ERROR_MIRROR_SOURCE_PORT_VALUE,
+ /** bad mirror dest port parameters */
+ LIBSPID_ERROR_MIRROR_DEST_PORT_VALUE,
+ /** bad loopback enable parameters */
+ LIBSPID_ERROR_LOOPBACK_EN_VALUE,
+ /** bad loopback port index parameters */
+ LIBSPID_ERROR_LOOPBACK_PORT_INDEX_VALUE,
+ /** bad flow control enable parameters */
+ LIBSPID_ERROR_FLOW_CTL_EN_VALUE,
+ /** bad aging time parameters */
+ LIBSPID_ERROR_AGING_TIME_VALUE,
+} libspid_ethctl_check_error_t;
+
+/**
+ * list of errors returned by libspid maclist check function
+ */
+typedef enum
+{
+ /** bad MAC address format */
+ LIBSPID_ERROR_MACLIMIT_MAC_FORMAT = 0,
+ /** MAC-PORT_INDEX duplicate */
+ LIBSPID_ERROR_MACLIMIT_MAC_DUPLICATE,
+ /** bad input INDEX parameters */
+ LIBSPID_ERROR_MACLIMIT_NUM,
+} libspid_maclimit_check_error_t;
+
+/**
+ * list of errors returned by libspid igmp snooping check function
+ */
+typedef enum
+{
+ /** bad MAC address format */
+ LIBSPID_ERROR_IGMP_SNOOPING_MAC_FORMAT = 0,
+ /** MAC duplicate */
+ LIBSPID_ERROR_IGMP_SNOOPING_MAC_DUPLICATE,
+ /** bad enable parameters */
+ LIBSPID_ERROR_IGMP_SNOOPING_EN,
+} libspid_igmp_snooping_check_error_t;
+
+/**
+ * list of errors returned by libspid vlan_table check function
+ */
+typedef enum
+{
+ /** bad vlan id format */
+ LIBSPID_ERROR_VLAN_ID_FORMAT = 0,
+ /** vlan id duplicate */
+ LIBSPID_ERROR_VLAN_ID_DUPLICATE,
+ /** bad vlan multicast */
+ LIBSPID_ERROR_VLAN_MULTICAST_FORMAT,
+} libspid_vlan_table_check_error_t;
+
+/**
+ * list of errors returned by libspid trap check function
+ */
+typedef enum
+{
+ /** bad IP address format */
+ LIBSPID_ERROR_TRAP_IP_FORMAT = 0,
+ /** IP address duplicate */
+ LIBSPID_ERROR_TRAP_IP_DUPLICATE,
+ /** bad trap status */
+ LIBSPID_ERROR_TRAP_STATUS_FORMAT,
+ /** bad trap community */
+ LIBSPID_ERROR_TRAP_COMMUNITY_FORMAT,
+} libspid_trap_check_error_t;
+
+/**
+ * list of errors returned by libspid config backup check function
+ */
+typedef enum
+{
+ /** bad IP address format */
+ LIBSPID_ERROR_CONFIG_BACKUP_IP_FORMAT = 0,
+ /** bad config backup index */
+ LIBSPID_ERROR_CONFIG_BACKUP_INDEX_FORMAT,
+ /** Index duplicate */
+ LIBSPID_ERROR_CONFIG_BACKUP_INDEX_DUPLICATE,
+ /** bad config backup protocol */
+ LIBSPID_ERROR_CONFIG_BACKUP_PROTOCOL_FORMAT,
+ /** bad config backup server port */
+ LIBSPID_ERROR_CONFIG_BACKUP_SERVER_PORT_FORMAT,
+ /** bad config backup login */
+ LIBSPID_ERROR_CONFIG_BACKUP_LOGIN_FORMAT,
+ /** bad config backup password */
+ LIBSPID_ERROR_CONFIG_BACKUP_PASSWORD_FORMAT,
+ /** bad config backup type */
+ LIBSPID_ERROR_CONFIG_BACKUP_TYPE_FORMAT,
+ /** bad config backup fileName */
+ LIBSPID_ERROR_CONFIG_BACKUP_FILENAME_FORMAT,
+ /** bad config backup result */
+ LIBSPID_ERROR_CONFIG_BACKUP_RESULT_FORMAT,
+
+} libspid_config_backup_check_error_t;
+
+/**
* IP mode of interface : static or DHCP
*/
typedef enum {
- /** interface setting is static : configuration is given by the local config file */
+ /** interface setting is static : configuration is given by the local
+config file */
LIBSPID_IP_MODE_STATIC,
/** interface setting is DHCP : configuration is given by a DHCP server */
LIBSPID_IP_MODE_DHCP,
} libspid_ip_mode_t;
+/**
+ * Network interface
+ */
+typedef enum {
+ LIBSPID_NETWORK_INTERFACE_BR = 0,
+ LIBSPID_NETWORK_INTERFACE_PLC,
+ LIBSPID_NETWORK_INTERFACE_ETH,
+} libspid_network_interface_t;
+
/** structure to manage IP network data */
typedef struct {
/** IP mode */
@@ -100,12 +389,305 @@ typedef enum {
LIBSPID_IMAGE_SELECT_NB
} libspid_image_select_t;
+typedef enum {
+ LIBSPID_TRANSFER_PROTOCOL = 1,
+ LIBSPID_TRANSFER_TFTP_PROTOCOL = 2
+} libspid_update_protocol_t;
+
+typedef enum {
+ LIBSPID_UPDATE_START_SUCCESS = 0,
+ LIBSPID_UPDATE_START_VERSION_OK,
+ LIBSPID_UPDATE_START_BAD_ARCH,
+ LIBSPID_UPDATE_START_BAD_TYPE,
+ LIBSPID_UPDATE_START_MODEM_BUSY,
+ LIBSPID_UPDATE_START_BAD_PROTOCOL,
+ LIBSPID_UPDATE_START_BAD_BOARD_TYPE,
+ LIBSPID_UPDATE_START_MME_ERROR,
+ LIBSPID_UPDATE_START_GEN
+} libspid_update_start_t;
+
+typedef enum {
+ LIBSPID_UPDATE_TRANSFER_SUCCESS = 0,
+ LIBSPID_UPDATE_TRANSFER_FAILED,
+ LIBSPID_UPDATE_TRANSFER_MME_ERROR,
+ LIBSPID_UPDATE_TRANSFER_GEN
+} libspid_update_transfer_t;
+
+typedef enum {
+ LIBSPID_UPDATE_END_SUCCESS = 0,
+ LIBSPID_UPDATE_END_MD5_ERROR,
+ LIBSPID_UPDATE_END_FLASH_ERROR
+} libspid_update_end_t;
+
+typedef enum {
+ LIBSPID_UPDATE_END_FLASH_SUCCESS = 0,
+ LIBSPID_UPDATE_END_FLASH_FAILURE,
+ LIBSPID_UPDATE_END_FLASH_TIMEOUT,
+ LIBSPID_UPDATE_END_FLASH_TFTP_SUCCESS,
+ LIBSPID_UPDATE_END_FLASH_TFTP_FAILURE
+} libspid_update_end_ind_t;
+
+typedef enum {
+ LIBSPID_EOC_AUTOCONF_START_SUCCESS = 0,
+ LIBSPID_EOC_AUTOCONF_START_MODEM_BUSY,
+ LIBSPID_EOC_AUTOCONF_START_BAD_PROTOCOL,
+ LIBSPID_EOC_AUTOCONF_START_FAILED,
+ LIBSPID_EOC_AUTOCONF_START_CONFIG_EXIST
+} libspid_eoc_autoconf_start_t;
+
+typedef enum {
+ LIBSPID_EOC_AUTOCONF_TRANSFER_SUCCESS = 0,
+ LIBSPID_EOC_AUTOCONF_TRANSFER_FAILED
+} libspid_eoc_autoconf_transfer_t;
+
+typedef enum {
+ LIBSPID_EOC_AUTOCONF_END_SUCCESS = 0,
+ LIBSPID_EOC_AUTOCONF_END_MD5_ERROR,
+ LIBSPID_EOC_AUTOCONF_END_FAILED
+} libspid_eoc_autoconf_end_t;
+
+/** the enum of snmpd community value */
+typedef enum {
+ /* the value of read and write */
+ LIBSPID_SNMPD_COMMUNITY_RWGROUP_VALUE = 1,
+ /* the value of read only */
+ LIBSPID_SNMPD_COMMUNITY_ROGROUP_VALUE,
+ /* the value of write only */
+ LIBSPID_SNMPD_COMMUNITY_WOGROUP_VALUE
+} libspid_snmpd_community_value_t;
+
/** */
typedef struct
{
int nothing;
} spc300_image_desc_t;
+/** structure for EoC real-time statistics */
+typedef struct {
+ /** number of transmitted unicast packets */
+ unsigned int tx_pkt;
+ /** number of received unicast packets */
+ unsigned int rx_pkt;
+ /** total number of transmitted bytes */
+ unsigned int tx_byte;
+ /** total number of received bytes */
+ unsigned int rx_byte;
+ /** number of transmitted broadcast packets */
+ unsigned int tx_bcast;
+ /** number of received broadcast packets */
+ unsigned int rx_bcast;
+ /** number of transmitted multicast packets */
+ unsigned int tx_mcast;
+ /** number of received multicast packets */
+ unsigned int rx_mcast;
+ /** number of received CRC packets */
+ unsigned int rx_crc;
+ /** number of transmitted short packets */
+ unsigned int tx_short;
+ /** number of received short packets */
+ unsigned int rx_short;
+ /** number of dropped packets while transmitting */
+ unsigned int tx_dropped;
+ /** number of dropped packets while receiving */
+ unsigned int rx_dropped;
+ /** average pre-FEC bit error rate */
+ unsigned int avg_prefec;
+} libspid_eoc_rt_stat_t;
+
+/** structure for EoC device information */
+typedef struct {
+ /** slave model number */
+ char model_no[64];
+ /** number of ethernet ports on the slave */
+ unsigned char eth_port_nb;
+ /** slave software version */
+ char sw_version[64];
+ /** downstream attenuation */
+ unsigned char downstream_attenuation;
+} libspid_eoc_dev_info_t;
+
+/** structure for EoC link quality */
+typedef struct {
+ /** downstream attenuation (in dB) */
+ unsigned int down_att;
+ /** upstream attenuation (in dB)*/
+ unsigned int up_att;
+ /** downstream quality (in percentage of bandwidth) */
+ unsigned int down_quality;
+ /** upstream quality (in percentage of bandwidth) */
+ unsigned int up_quality;
+} libspid_eoc_link_quality_t;
+
+/** structure for EoC White List entry */
+typedef struct {
+ /* MAC address of the slave */
+ char mac_addr[LIBSPID_MAC_STR_LEN];
+ /* device ip address */
+ unsigned char ip_address[LIBSPID_IP_STR_MAX_LEN];
+ /* allocated terminal equipment identifier */
+ char tei[4];
+ /* authorized to connect to the network */
+ char auth[2];
+ /* transmission output level on the medium */
+ char output_level[4];
+ /* authorization start time (HH:MM) */
+ char start_time[6];
+ /* authorization end time (HH:MM) */
+ char end_time[6];
+ /* dak */
+ char dak[LIBSPID_STR_SECU_OUTPUT_KEY_SIZE];
+ /* device password */
+ char dpw[LIBSPID_SECU_PWD_SIZE_MAX];
+} libspid_eoc_wl_entry_t;
+
+/** structure for sending EoC White List change information */
+typedef struct {
+ /* MAC address of the slave */
+ char mac_addr[LIBSPID_MAC_STR_LEN];
+ /* allocated terminal equipment identifier */
+ char tei[4];
+ /* authorized to connect to the network */
+ char auth[2];
+ /* transmission output level on the medium */
+ char output_level[4];
+ /* authorization start time (HH:MM) */
+ char start_time[6];
+ /* authorization end time (HH:MM) */
+ char end_time[6];
+ /* dak */
+ char dak[LIBSPID_STR_SECU_OUTPUT_KEY_SIZE];
+ /* device password */
+ char dpw[LIBSPID_SECU_PWD_SIZE_MAX];
+ /* action */
+ char action[2];
+} libspid_eoc_wl_info_entry_t;
+
+/** structure for EoC port entry */
+typedef struct {
+ /* slave MAC address */
+ char mac_addr[LIBSPID_MAC_STR_LEN];
+ /* port index (1-4) */
+ char port_index[2];
+ /* port enabled */
+ char port_en[2];
+ /* service index */
+ char service_index[4];
+ /* VLAN tag enabled */
+ char vlan_tag_en[2];
+ /* VLAN mark ID */
+ char vlan_mark_id[5];
+} libspid_eoc_port_entry_t;
+
+/** structure for EoC broadcast storm protection entry */
+typedef struct
+{
+ /* slave MAC address */
+ char mac_addr[LIBSPID_MAC_STR_LEN];
+ /* eocBroadcastStormProtectionPortIndex */
+ char port_index[2];
+ /* eocBroadcastStormProtectionEN */
+ char bcast_protect_en[2];
+ /* eocBroadcastStormThreshold */
+ char bcast_thres_hold[8];
+ /* eocMulticastStormProtectionEN */
+ char multi_protect_en[2];
+ /* eocMulticastStormThreshold */
+ char multi_thres_hold[8];
+ /* eocUnknownUnicastStormProtectionEN */
+ char unknow_protect_en[2];
+ /* eocUnknownUnicastStormThreshold */
+ char unknow_thres_hold[64];
+} libspid_eoc_storm_entry_t;
+
+/** structure for EoC mac limitation entry */
+typedef struct
+{
+ /* slave MAC address */
+ char mac_addr[LIBSPID_MAC_STR_LEN];
+ /* mac limitation num */
+ char mac_limitation_num[4];
+} libspid_eoc_maclimit_entry_t;
+
+/** structure for EoC igmp entry */
+typedef struct
+{
+ /* slave MAC address */
+ char mac_addr[LIBSPID_MAC_STR_LEN];
+ /* igmp */
+ char igmp_snooping_en[2];
+} libspid_eoc_igmp_snooping_entry_t;
+
+/** structure for EoC service entry */
+typedef struct {
+ /* service index */
+ char service_index[4];
+ /* service name */
+ char service_name[LIBSPID_SERVICE_NAME_STR_MAX_LEN];
+ /* service type */
+ char service_type[2];
+ /* matching value (VLAN ID, VLAN priority, or TCP ToS) */
+ char matching_value[5];
+ /* QoS priority */
+ char qos_prio[2];
+ /* limit for download peak information rate */
+ char dba_dl_pir[11];
+ /* limit for upload peak information rate */
+ char dba_ul_pir[11];
+ /* limit for download committed information rate */
+ char dba_dl_cir[11];
+ /* limit for upload committed information rate */
+ char dba_ul_cir[11];
+ /* maximal allowed latency */
+ char max_latency[11];
+ /* maximal allowed jitter */
+ char max_jitter[11];
+ /* Automatic Connection Service enabled or disabled */
+ char acs_en[2];
+} libspid_eoc_service_entry_t;
+
+/** structure for EoC white_list, service and port lists */
+typedef struct {
+ /* list with port enable entries */
+ libspid_eoc_port_entry_t port_en_entries_cnf[LIBSPID_PORT_TOTAL_MAX];
+ /* number of entries with port enable */
+ int port_en_count_cnf;
+ /* service list entries */
+ libspid_eoc_service_entry_t
+service_entries_cnf[LIBSPID_SERVICE_AMOUNT_LIMIT];
+ /* number of service list entries */
+ int service_count_cnf;
+ /* port list entries */
+ libspid_eoc_port_entry_t port_entries_cnf[LIBSPID_PORT_TOTAL_MAX];
+ /* number of port list entries */
+ int port_count_cnf;
+} libspid_eoc_port_service_lists_t;
+
+/** structure for EoC service type */
+typedef enum
+{
+ LIBSPID_SERVICE_TYPE_NONE = 0,
+ LIBSPID_SERVICE_TYPE_VID = 1,
+ LIBSPID_SERVICE_TYPE_PRIO = 2,
+ LIBSPID_SERVICE_TYPE_TOS = 3,
+ LIBSPID_SERVICE_TYPE_NB
+} libspid_service_type_t;
+
+/** structure for config backup protocol type */
+typedef enum
+{
+ LIBSPID_PROTOCOL_FTP = 1,
+ LIBSPID_PROTOCOL_TFTP = 2,
+ LIBSPID_PROTOCOL_SFTP = 3,
+ LIBSPID_PROTOCOL_MODEM = 4,
+} libspid_config_backup_server_protocol_t;
+
+/** struct for config file backup to server or recover from server*/
+typedef enum
+{
+ LIBSPID_CONFIG_BACKUP = 1,
+ LIBSPID_CONFIG_RECOVER = 2
+}libspid_config_backup_recover;
+
typedef enum {
LIBSPID_SECU_SALT_TYPE_NONE = 0,
LIBSPID_SECU_SALT_TYPE_DAK,
@@ -113,6 +695,129 @@ typedef enum {
LIBSPID_SECU_SALT_TYPE_NB
} libspid_secu_salt_type_t;
+/** tamper status of the master */
+typedef enum
+{
+ /* the box has not been opened */
+ LIBSPID_TAMPER_STATUS_INTACT = 1,
+ /* the box has been opened */
+ LIBSPID_TAMPER_STATUS_COMPROMISED = 2
+} libspid_eoc_tamper_status_t;
+
+/** status of alarm (contains states both for analog and discrete alarms) */
+typedef enum
+{
+ LIBSPID_AS_DISABLE = 1,
+ LIBSPID_AS_ANALOG_HIHI = 2,
+ LIBSPID_AS_ANALOG_HI = 3,
+ LIBSPID_AS_ANALOG_LO = 4,
+ LIBSPID_AS_ANALOG_LOLO = 5,
+ LIBSPID_AS_DISCRETE_MAJOR = 6,
+ LIBSPID_AS_DISCRETE_MINOR = 7,
+ LIBSPID_AS_NB
+} libspid_eoc_alarm_state_t;
+
+/** discrete alarm enabling or disabling */
+typedef enum
+{
+ LIBSPID_DAE_DISABLE = 1,
+ LIBSPID_DAE_ENABLE_MAJOR = 2, /* alarm is raised if value is higher than
+the trigger */
+ LIBSPID_DAE_ENABLE_MINOR = 3 /* alarm is raised if value is lower than
+the trigger */
+} libspid_eoc_discrete_alarm_enable_t;
+
+/** analog alarm thresholds enabling or disabling */
+typedef struct
+{
+ unsigned int
+ LOLO_alarm_enable : 1, /* bit 0 */
+ LO_alarm_enable : 1, /* bit 1 */
+ HI_alarm_enable : 1, /* bit 2 */
+ HIHI_alarm_enable : 1; /* bit 3 */
+} libspid_eoc_analog_alarm_enable_t;
+
+/** structure for EoC analog alarm entry */
+typedef struct
+{
+ /* OID for watched variable */
+ char oid[LIBSPID_OID_MAX_LEN];
+ /* alarm enable */
+ libspid_eoc_analog_alarm_enable_t enable;
+ /* status of the alarm */
+ libspid_eoc_alarm_state_t state;
+ /* alarm thresholds */
+ int hihi;
+ int hi;
+ int lo;
+ int lolo;
+ int deadband;
+} libspid_eoc_analog_alarm_entry_t;
+
+
+/** structure for EoC discrete alarm entry */
+typedef struct {
+ /* OID for watched variable */
+ char oid[LIBSPID_OID_MAX_LEN];
+ /* value that triggers the alarm */
+ int trigger;
+ /* alarm enable */
+ libspid_eoc_discrete_alarm_enable_t enable;
+ /* status of the alarm */
+ libspid_eoc_alarm_state_t state;
+} libspid_eoc_discrete_alarm_entry_t;
+
+/** structure for EoC current alarm entry */
+
+typedef struct {
+ /* OID for watched variable */
+ char oid[LIBSPID_OID_MAX_LEN];
+ /* status of the alarm */
+ libspid_eoc_alarm_state_t state;
+ /* alarm value */
+ int value;
+} libspid_eoc_current_alarm_entry_t;
+
+typedef struct {
+ /* Current tonemap interval list identifier */
+ unsigned char int_id;
+ /* Tonemap index of default tonemap */
+ unsigned char tmi_default;
+ /* Number of entries in valid tonemap index list */
+ unsigned char tmi_length;
+ /* Valid tonemap index */
+ unsigned char tmi_data[255];
+ /* Number of entries in interval list */
+ unsigned char int_length;
+ /* End time */
+ unsigned short int int_et[255];
+ /* Tonemap index used during interval */
+ unsigned char int_tmi [255];
+ /* Tonemap index */
+ unsigned char tmi;
+ /* FEC code rate of requested tonemap */
+ unsigned char tm_fec;
+ /* Guard interval of requested tonemap */
+ unsigned char tm_gi;
+ /* List of the modulations */
+ unsigned char modulation_list[LIBSPID_EOC_MODULATION_LIST_MAX_SIZE];
+} libspid_eoc_tonemap_entry_t;
+
+typedef struct {
+ /* Current tonemap interval list identifier */
+ unsigned char int_id;
+ /* Number of entries in interval list */
+ unsigned char int_length;
+ /* End time */
+ unsigned short int int_et[255];
+ /* Average Bit Error Rate */
+ unsigned short int tm_ber;
+ /* carrier group */
+ unsigned char carrier_group;
+ /* List of the modulations */
+ unsigned char snr_list[LIBSPID_EOC_SNR_LIST_MAX_SIZE];
+} libspid_eoc_snr_entry_t;
+
typedef struct
{
/* status value */
@@ -127,52 +832,603 @@ typedef struct
libspid_boolean_t is_sc_button;
} libspid_hpav_info_t;
+
+/** structure for EoC Trap Table Entry*/
+typedef struct
+{
+ /*Trap Server Ip */
+ char ip_address[LIBSPID_IP_STR_MAX_LEN];
+ /* Trap Status */
+ char status[2];
+ /* Trap Community */
+ char community[LIBSPID_EOC_TRAP_COMMUNITY_MAX_LEN];
+} libspid_eoc_trap_entry_t;
+
+/** structure for EoC Config backup Table Entry*/
+typedef struct {
+ /*Config backup Index*/
+ char index[4];
+ /*Config backup Protocol*/
+ char protocol[2];
+ /*Config backup Server Ip*/
+ char ip_address[LIBSPID_IP_STR_MAX_LEN];
+ /*Config backup Server Port*/
+ char server_port[6];
+ /*Config backup Login*/
+ char login[64];
+ /*Config backup password*/
+ char password[64];
+ /*Config backup Type*/
+ char type[2];
+ /*Config backup FileName*/
+ char fileName[64];
+ /*Config backup Result*/
+ char result[2];
+}libspid_eoc_config_backup_entry_t;
+
+/** structure for EoC vlan table entry */
+typedef struct
+{
+ /*vlan id */
+ int vlan_id;
+ /*vlan name */
+ char vlan_name[LIBSPID_VLAN_NAME_STR_MAX_LEN];
+ /*0=disable (ordinary VLAN),1=enable(multicast VLAN) */
+ int vlan_multicast;
+} libspid_eoc_vlan_table_entry_t;
+
+/** structure for EoC vlan port table entry */
+typedef struct
+{
+ char vlan_port_mac[LIBSPID_MAC_STR_LEN];
+ /* eocVLANPortPVID(4)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/R/d/h */
+ char vlan_port_index[2];
+
+ char vlan_port_pvid[5];
+ /*eocVLANPortTPID(5)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/R/D/h */
+ char vlan_port_tpid[6];
+ /*eocVLANPortPrio(6)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/R/D/h */
+ char vlan_port_prio[2];
+ /* eocVLANPortVIDList(7) \
+ * /OCTETSTR/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/h */
+ char vlan_port_vid_list[512];
+ /* eocVLANPortUntaggedVIDList(8) \
+ * /OCTETSTR/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/h */
+ char vlan_port_untag_vid_list[512];
+ /* eocVLANPortMode(9)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/D/h */
+ char vlan_port_mode[4];
+} libspid_eoc_vlan_port_table_entry_t;
+
+/** structure for EoC ethernet port table entry */
+typedef struct
+{
+ /* slave MAC address */
+ char mac_addr[LIBSPID_MAC_STR_LEN];
+ /* port index (1-4) */
+ char port_index[2];
+ /* auto neg */
+ char auto_neg[2];
+ /* speed */
+ char speed[4];
+ /* duplex mode */
+ char duplex[2];
+} libspid_eoc_ethernet_port_entry_t;
+
+/** structure for EoC port_v2 table entry */
+typedef struct
+{
+ /* slave MAC address */
+ char mac_addr[LIBSPID_MAC_STR_LEN];
+ /* port index (1-4) */
+ char port_index[2];
+ /* auto neg */
+ char auto_neg[2];
+ /* speed */
+ char speed[4];
+ /* duplex mode */
+ char duplex[2];
+
+ char vlan_port_pvid[5];
+ /*eocVLANPortTPID(5)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/R/D/h */
+ char vlan_port_tpid[6];
+ /*eocVLANPortPrio(6)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/R/D/h */
+ char vlan_port_prio[2];
+ /* eocVLANPortMode(9)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/D/h */
+ char vlan_port_mode[4];
+ /* eocBroadcastStormProtectionEN */
+ char bcast_protect_en[2];
+ /* eocBroadcastStormThreshold */
+ char bcast_thres_hold[8];
+ /* eocMulticastStormProtectionEN */
+ char multi_protect_en[2];
+ /* eocMulticastStormThreshold */
+ char multi_thres_hold[8];
+ /* eocUnknownUnicastStormProtectionEN */
+ char unknow_protect_en[2];
+ /* eocUnknownUnicastStormThreshold */
+ char unknow_thres_hold[64];
+} libspid_eoc_port_v2_entry_t;
+
+/*The struct for community data*/
+typedef struct
+{
+
+ /* SNMP Community */
+ char comm_name[16];
+
+ /* SNMP Security */
+ char sec_name[16];
+
+ /* SNMP Community Permission */
+ int comm_permission;
+
+} libspid_snmp_comm_t;
+
+/** structure for slave ethctl entry */
+typedef struct
+{
+ char mac_address[LIBSPID_MAC_STR_LEN];
+ char mirror_type[4];
+ char mirror_en[4];
+ char mirror_source_port[4];
+ char mirror_dest_port[4];
+ char loopback_en[4];
+ char loopback_port_index[4];
+ char flow_ctl_en[4];
+ char aging_time[8];
+}libspid_eoc_ethctl_entry_t;
+
+/** structure for Mirror type */
+typedef enum
+{
+ LIBSPID_MIRROR_TYPE_NONE = 0,
+ LIBSPID_MIRROR_TYPE_COPY_IN = 1,
+ LIBSPID_MIRROR_TYPE_COPY_OUT = 2,
+ LIBSPID_MIRROR_TYPE_COPY_ALL = 3,
+ LIBSPID_MIRROR_TYPE_NB
+} libspid_mirror_type_t;
+
+
+/* ptable show callback function*/
+typedef void (*libspid_ptable_print)(char *str);
+
+typedef struct
+{
+ /* is init already */
+ unsigned int init;
+ /* the colume num,must give when init */
+ unsigned int col;
+ /* the row num, must give when init */
+ unsigned int row;
+ /* every colume max size array */
+ unsigned int *pcol_len;
+ /* use for recoder all unit table content */
+ char **pptable;
+ /* use for display table*/
+ libspid_ptable_print print_callback;
+} print_table_t;
+
/** Signal handler. */
typedef void (*libspid_signal_handler_t) (int);
-extern libspid_error_t libspid_config_read_item (const char *filename, const char *label, char *value, int buffer_len);
-extern libspid_error_t libspid_config_read_items (const char *filename, const char * const labels[], char *values[], const int buffers_len[], unsigned int count);
-extern libspid_error_t libspid_config_write_item(const char *filename, const char *label, const char *value);
-extern libspid_error_t libspid_config_write_items (const char *filename, const char * const labels[], const char * const values[], unsigned int count);
-extern libspid_error_t libspid_config_read_line(const char *filename, const char* delimiters, char *key, unsigned int *elt_number, char *elt[], char *buffer, unsigned int buffer_len);
-extern libspid_error_t libspid_config_write_line(const char *filename, const char delimiter, const char *key, unsigned int elt_number, char *elt[]);
-extern libspid_error_t libspid_config_remove_line(const char *filename, const char *delimiters, const char *key);
-extern libspid_error_t libspid_mac_str_to_bin(const char *str, unsigned char *bin);
-extern libspid_error_t libspid_mac_bin_to_str(const unsigned char *bin, char *str);
-extern libspid_error_t libspid_hexstring_to_binary (const char* hex_string, unsigned char *binary, unsigned int binary_length);
-extern libspid_error_t libspid_binary_to_hexstring (const unsigned char *binary, unsigned int binary_length, char *hex_string);
-extern libspid_error_t libspid_image_get_desc(libspid_image_desc_type_t type, spidcom_image_desc_t *image_desc, char *mtd_name);
-extern libspid_error_t
-libspid_image_get_index (const char *mtd_path, int *index);
+extern libspid_error_t libspid_config_read_item (const char *filename, const
+char *label, char *value, int buffer_len);
+extern libspid_error_t libspid_config_read_items (const char *filename, const
+char * const labels[], char *values[], const int buffers_len[], unsigned int
+count);
+extern libspid_error_t libspid_config_write_item(const char *filename, const
+char *label, const char *value);
+extern libspid_error_t libspid_config_write_items (const char *filename, const
+char * const labels[], const char * const values[], unsigned int count);
+extern libspid_error_t libspid_config_read_line(const char *filename, const
+char* delimiters, char *key, unsigned int *elt_number, char *elt[], char
+*buffer, unsigned int buffer_len);
+extern libspid_error_t libspid_config_read_line_repetitive (const char
+*filename, const char* delimiters, char *key, unsigned int *elt_number, char
+*elt[], char *buffer, unsigned int buffer_len, void ** user_data);
+extern libspid_error_t libspid_config_write_line(const char *filename, const
+char delimiter, const char *key, unsigned int elt_number, char *elt[]);
+extern libspid_error_t libspid_config_remove_line(const char *filename, const
+char *delimiters, const char *key);
+extern libspid_error_t libspid_mac_str_to_bin(const char *str, unsigned char
+*bin);
+extern libspid_error_t libspid_mac_bin_to_str(const unsigned char *bin, char
+*str);
+extern libspid_error_t libspid_hexstring_to_binary (const char* hex_string,
+unsigned char *binary, unsigned int binary_length);
+extern libspid_error_t libspid_binary_to_hexstring (const unsigned char
+*binary, unsigned int binary_length, char *hex_string);
+extern libspid_error_t libspid_image_get_desc(libspid_image_desc_type_t type,
+spidcom_image_desc_t *image_desc, char *mtd_name);
+extern libspid_error_t libspid_image_get_running_version (char *image_version);
+extern libspid_error_t libspid_image_get_index (const char *mtd_path, int
+*index);
extern libspid_error_t libspid_image_select(libspid_image_select_t select);
-extern libspid_error_t libspid_network_get_ip (const char *interface, libspid_ip_t *ip);
-extern libspid_error_t libspid_network_set_ip (const char *interface, const libspid_ip_t *ip);
-extern libspid_error_t libspid_network_get_mac (const char *interface, unsigned char *mac);
-extern libspid_error_t libspid_system_get_kernel_version(char *buffer, int buffer_len);
-extern libspid_error_t libspid_system_get_plc_version (char *buffer, const int buffer_len);
-extern libspid_error_t libspid_system_get_av_version (char *buffer, const int buffer_len);
-extern libspid_error_t libspid_system_get_uptime(unsigned int *total_s, unsigned int *idle_s);
-extern libspid_error_t libspid_system_get_meminfo(char *buffer, int buffer_len);
+extern libspid_error_t libspid_network_get_ip (const char *interface,
+libspid_ip_t *ip);
+extern libspid_error_t libspid_network_get_realip (const char *interface,
+libspid_ip_t *ip);
+extern libspid_error_t libspid_network_set_realip (const char *interface,
+libspid_ip_t *ip);
+extern libspid_error_t libspid_network_set_ip (const char *interface, const
+libspid_ip_t *ip);
+extern libspid_error_t libspid_network_get_mac (const char *interface, unsigned
+char *mac);
+extern libspid_error_t libspid_system_get_kernel_version(char *buffer, int
+buffer_len);
+extern libspid_error_t libspid_system_get_plc_version (char *buffer, const int
+buffer_len);
+extern libspid_error_t libspid_system_get_av_version (char *buffer, const int
+buffer_len);
+extern libspid_error_t libspid_system_get_uptime(unsigned int *total_s,
+unsigned int *idle_s);
+extern libspid_error_t libspid_system_get_meminfo(char *buffer, int
+buffer_len);
+extern libspid_error_t libspid_system_nscrtv_eponeoc_mod_eoc (int *value);
+
+extern libspid_error_t libspid_system_get_memusage_percent (int *percent);
+
+extern libspid_error_t libspid_system_get_cpuload_percent (int *percent);
extern void libspid_system_reboot(void);
extern libspid_error_t libspid_system_save(void);
extern libspid_error_t libspid_system_save_file(const char *filename);
extern libspid_error_t libspid_system_factory(void);
extern libspid_error_t libspid_system_get_nvram(spidcom_nvram_t *nvram);
-extern libspid_error_t libspid_system_file_update_register (pid_t rx_pid, const char *filename, const libspid_signal_handler_t callback);
-extern libspid_error_t libspid_system_file_update_unregister (pid_t rx_pid, const char *filename);
-extern libspid_error_t libspid_system_file_update_is_registered (pid_t rx_pid, const char *filename, libspid_boolean_t *is_registered);
-extern libspid_error_t libspid_system_file_update_warn (pid_t tx_pid, const char *filename);
-extern libspid_error_t libspid_secu_pbkdf1 (const unsigned char input[], const unsigned int input_length, const libspid_secu_salt_type_t salt_type, const unsigned int it_count, unsigned char output[], unsigned int output_length);
-
+extern libspid_error_t libspid_system_set_nvram(spidcom_nvram_t *nvram);
+extern libspid_error_t libspid_system_file_update_register (pid_t rx_pid, const
+char *filename, const libspid_signal_handler_t callback);
+extern libspid_error_t libspid_system_file_update_unregister (pid_t rx_pid,
+const char *filename);
+extern libspid_error_t libspid_system_file_update_is_registered (pid_t rx_pid,
+const char *filename, libspid_boolean_t *is_registered);
+extern libspid_error_t libspid_system_file_update_warn (pid_t tx_pid, const
+char *filename);
+extern libspid_boolean_t
+libspid_system_file_is_updated (struct timespec last_check, const char
+*filename);
+extern libspid_error_t libspid_secu_pbkdf1 (const unsigned char input[], const
+unsigned int input_length, const libspid_secu_salt_type_t salt_type, const
+unsigned int it_count, unsigned char output[], unsigned int output_length);
+extern libspid_error_t libspid_system_get_date (char *buffer, const int
+buffer_len);
+extern libspid_error_t libspid_system_set_date (const char *buffer);
+extern libspid_error_t libspid_system_get_reset_cause (char *buffer,
+ const int buffer_len);
+extern libspid_error_t libspid_hardware_get_temperature(int *temp_c);
+extern libspid_error_t
+libspid_hardware_get_tamper(libspid_eoc_tamper_status_t *tamper_status);
+extern libspid_error_t libspid_eoc_reboot(char *mac_address);
+extern libspid_error_t libspid_eoc_factory (char *mac_address);
+extern libspid_error_t libspid_eoc_get_topo(char *mac_address_list, int
+*mac_address_count);
+extern libspid_error_t libspid_eoc_get_stat(char *mac_address,
+libspid_eoc_rt_stat_t *eoc_rt_stat);
+extern libspid_error_t libspid_eoc_reset_stat(char *mac_address);
+extern libspid_error_t libspid_eoc_get_device_info(char *mac_address,
+libspid_eoc_dev_info_t *eoc_dev_info);
+extern libspid_error_t libspid_eoc_get_link(char *mac_address,
+libspid_eoc_link_quality_t *eoc_link_quality);
+extern libspid_error_t libspid_eoc_wl_get(char *mac_address,
+libspid_eoc_wl_entry_t *eoc_wl_entry);
+extern libspid_error_t libspid_eoc_wl_get_list(libspid_eoc_wl_entry_t
+*eoc_wl_entry, int *mac_address_count);
+extern libspid_error_t libspid_eoc_wl_retrieve(libspid_eoc_wl_entry_t
+*eoc_wl_entry, int *mac_address_count);
+extern libspid_error_t libspid_eoc_wl_set(char *mac_address,
+libspid_eoc_wl_entry_t *eoc_wl_entry);
+extern libspid_error_t libspid_eoc_wl_remove(char *mac_address);
+extern libspid_error_t libspid_eoc_wl_mac_change (char *mac_address_old, char
+*mac_address_new);
+extern libspid_error_t libspid_eoc_wl_flush(void);
+extern libspid_error_t libspid_eoc_wl_sync(void);
+extern libspid_error_t libspid_eoc_service_get(char *index,
+libspid_eoc_service_entry_t *entry);
+extern libspid_error_t libspid_eoc_service_get_list(libspid_eoc_service_entry_t
+*entry, int *count);
+extern libspid_error_t libspid_eoc_service_retrieve(libspid_eoc_service_entry_t
+*entry, int *count);
+extern libspid_error_t libspid_eoc_service_set(char *index,
+libspid_eoc_service_entry_t *entry);
+extern libspid_error_t libspid_eoc_service_remove(char *index);
+extern libspid_error_t libspid_eoc_service_flush(void);
+extern libspid_error_t libspid_eoc_service_sync(void);
+extern libspid_service_type_t
+libspid_eoc_service_type_get (void);
+extern libspid_error_t
+libspid_eoc_qos_rules_get (plcdrv_qos_rules_t *qos_rules);
+extern libspid_error_t libspid_eoc_port_get(char *mac_address, char *index,
+libspid_eoc_port_entry_t *entry);
+extern libspid_error_t libspid_eoc_port_get_list(libspid_eoc_port_entry_t
+*entry, int *count);
+extern libspid_error_t libspid_eoc_port_retrieve(libspid_eoc_port_entry_t
+*entry, int *count);
+extern libspid_error_t libspid_eoc_port_set(char *mac_address, char *index,
+libspid_eoc_port_entry_t *entry);
+extern libspid_error_t libspid_eoc_port_sync(void);
+extern libspid_error_t libspid_eoc_upgrade_remote_image(char *mac_address, char
+*file);
+extern libspid_error_t libspid_eoc_upgrade_local_image(char *file);
+extern libspid_error_t libspid_eoc_configure(char *mac_address, char *file);
+extern libspid_error_t libspid_eoc_master_vlan_action(void);
+extern libspid_error_t libspid_eoc_master_disable_vlan_action(void);
+extern libspid_error_t libspid_eoc_master_config(void);
+extern libspid_error_t libspid_ip_str_to_bin(const char *str, unsigned char
+*bin);
+extern libspid_error_t libspid_ip_bin_to_str(const unsigned char *bin, char
+*str);
+extern libspid_error_t libspid_eoc_network_get_remote_ip
+ (const char *mac_address, const char *interface, libspid_ip_t *ip);
+extern libspid_error_t libspid_eoc_network_set_remote_ip
+ (const char *mac_address, const char *interface, const libspid_ip_t *ip);
+extern libspid_error_t libspid_eoc_wl_check (void);
+extern libspid_error_t libspid_eoc_wl_set_output_level (char *output_level);
+extern libspid_error_t libspid_eoc_service_check (void);
+extern libspid_error_t libspid_eoc_port_check (void);
+extern libspid_error_t libspid_eoc_wl_authorization (char *mac_addr);
extern libspid_error_t
libspid_multicast_info_read_file (libspid_multicast_info_t *mcast_info,
- libspid_multicast_info_read_status_t *read_status);
-
+ libspid_multicast_info_read_status_t
+*read_status);
extern libspid_error_t
libspid_multicast_info_write_file (libspid_multicast_info_t *mcast_info);
-
+extern libspid_error_t libspid_eoc_discrete_alarm_get (char *oid,
+libspid_eoc_discrete_alarm_entry_t *discrete_alarm_entry);
+extern libspid_error_t libspid_eoc_discrete_alarm_get_list
+(libspid_eoc_discrete_alarm_entry_t *discrete_alarm_entry, int *count);
+extern libspid_error_t libspid_eoc_discrete_alarm_set (char *oid,
+libspid_eoc_discrete_alarm_entry_t *discrete_alarm_entry);
+extern libspid_error_t libspid_eoc_analog_alarm_get (char *oid,
+libspid_eoc_analog_alarm_entry_t *analog_alarm_entry);
+extern libspid_error_t libspid_eoc_analog_alarm_get_list
+(libspid_eoc_analog_alarm_entry_t *analog_alarm_entry, int *count);
+extern libspid_error_t libspid_eoc_analog_alarm_set (char *oid,
+libspid_eoc_analog_alarm_entry_t *analog_alarm_entry);
+extern libspid_error_t libspid_eoc_current_alarm_get (char *oid,
+libspid_eoc_current_alarm_entry_t *current_alarm_entry);
+extern libspid_error_t libspid_eoc_current_alarm_get_list
+(libspid_eoc_current_alarm_entry_t *current_alarm_entry, int *count);
+extern libspid_error_t libspid_eoc_tftp_upgrade_remote_image (char
+*mac_address, char *file);
+extern libspid_error_t libspid_eoc_get_tonemap (const char *mac_address_device,
+unsigned char direction, libspid_eoc_tonemap_entry_t *tonemap);
+extern libspid_error_t libspid_eoc_get_snr (const char *mac_address_device,
+unsigned char group, libspid_eoc_snr_entry_t *snr);
+extern libspid_error_t
+libspid_check_key_mac_format (const char *mac_addr);
extern libspid_error_t
libspid_hpav_info_read_file (libspid_hpav_info_t *hpav_info);
+extern libspid_error_t
+libspid_eoc_discrete_alarm_set (char *oid,
+ libspid_eoc_discrete_alarm_entry_t *
+ discrete_alarm_entry);
+
+extern libspid_error_t
+libspid_eoc_analog_alarm_get (char *oid,
+ libspid_eoc_analog_alarm_entry_t *
+ analog_alarm_entry);
+
+
+extern libspid_error_t
+libspid_eoc_analog_alarm_get_list (libspid_eoc_analog_alarm_entry_t *
+ analog_alarm_entry, int *count);
+
+extern libspid_error_t
+libspid_eoc_analog_alarm_set (char *oid,
+ libspid_eoc_analog_alarm_entry_t *
+ analog_alarm_entry);
+
+extern libspid_error_t
+libspid_eoc_current_alarm_get (char *oid,
+ libspid_eoc_current_alarm_entry_t *
+ current_alarm_entry);
+
+extern libspid_error_t
+libspid_eoc_current_alarm_get_list (libspid_eoc_current_alarm_entry_t *
+ current_alarm_entry, int *count);
+
+
+extern libspid_error_t
+libspid_eoc_tftp_upgrade_remote_image (char *mac_address, char *file);
+
+extern libspid_error_t
+libspid_eoc_get_tonemap (const char *mac_address_device,
+ unsigned char direction,
+ libspid_eoc_tonemap_entry_t * tonemap);
+
+extern libspid_error_t
+libspid_eoc_get_snr (const char *mac_address_device, unsigned char group,
+ libspid_eoc_snr_entry_t * snr);
+
+extern libspid_error_t libspid_check_key_mac_format (const char *mac_addr);
+
+extern libspid_error_t
+libspid_hpav_info_read_file (libspid_hpav_info_t * hpav_info);
+
+extern libspid_error_t
+libspid_eoc_backup_recover_master_config (libspid_config_backup_recover mode);
+
+extern libspid_error_t
+libspid_eoc_master_bw_limit_action (void);
+
+extern libspid_error_t
+libspid_eoc_upload_master_config (char *server_filename);
+
+extern libspid_error_t
+libspid_eoc_download_master_config (char *server_filename);
+
+/*Funs for trap*/
+extern libspid_error_t
+libspid_eoc_trap_get (char *ip_address,
+ libspid_eoc_trap_entry_t * eoc_trap_entry);
+
+extern libspid_error_t
+libspid_eoc_trap_get_list (libspid_eoc_trap_entry_t * eoc_trap_entry,
+ unsigned int *server_ip_count);
+
+extern libspid_error_t
+libspid_eoc_trap_set (libspid_eoc_trap_entry_t * eoc_trap_entry);
+
+extern libspid_error_t libspid_eoc_trap_remove (char *ip_addr);
+
+extern libspid_error_t libspid_eoc_trap_flush (void);
+extern libspid_error_t libspid_eoc_trap_check (void);
+
+
+/*Funs for community*/
+extern libspid_error_t
+libspid_eoc_read_community_list (libspid_snmp_comm_t * comm_entry,
+ int *line_num);
+
+extern libspid_error_t
+libspid_eoc_read_security_list (libspid_snmp_comm_t * comm_entry,
+ int *line_num);
+
+extern libspid_error_t
+libspid_eoc_write_community_line (char *old_comm_name, char *old_sec_name,
+ char *new_comm_name, int curr_comm_num);
+
+extern libspid_error_t
+libspid_eoc_write_security_line (char *old_sec_name, char *new_comm_name,
+ int new_access, int curr_comm_num);
+
+extern libspid_error_t
+libspid_eoc_remove_community_line (char *old_comm_name, char *old_sec_name,
+ int curr_comm_num);
+
+extern libspid_error_t
+libspid_eoc_remove_security_line (char *old_sec_name, int curr_comm_num);
+
+extern libspid_error_t
+libspid_eoc_vlan_table_get_list (libspid_eoc_vlan_table_entry_t *
+ eoc_vlan_table_entry,
+ unsigned int *vlan_count);
+extern libspid_error_t
+libspid_eoc_vlan_table_check (void);
+
+extern libspid_error_t
+libspid_eoc_vlan_table_set (char *index,
+ libspid_eoc_vlan_table_entry_t *
+ eoc_vlan_table_entry);
+extern libspid_error_t libspid_eoc_vlan_get_lines (int *count);
+
+extern libspid_error_t
+libspid_eoc_vlan_table_get (char *index,
+ libspid_eoc_vlan_table_entry_t * entry);
+
+extern libspid_error_t libspid_eoc_vlan_table_remove (char *index);
+
+extern libspid_error_t
+libspid_eoc_vlan_port_get (char *mac_address, char *index,
+ libspid_eoc_vlan_port_table_entry_t * entry);
+
+extern libspid_error_t
+libspid_eoc_vlan_port_get_list (libspid_eoc_vlan_port_table_entry_t * entry,
+ int *count);
+
+extern libspid_error_t
+libspid_eoc_vlan_port_set (char *mac_address, char *index,
+ libspid_eoc_vlan_port_table_entry_t * entry);
+
+extern libspid_error_t libspid_eoc_vlan_port_check (void);
+
+extern libspid_error_t
+libspid_eoc_storm_get (char *mac_address, char *index,
+ libspid_eoc_storm_entry_t * entry);
+extern libspid_error_t
+libspid_eoc_storm_set (char *mac_address, char *index,
+ libspid_eoc_storm_entry_t * entry);
+extern libspid_error_t
+libspid_eoc_storm_get_list (libspid_eoc_storm_entry_t * entry, int *count);
+
+extern libspid_error_t libspid_eoc_storm_check (void);
+
+extern libspid_error_t libspid_eoc_maclimit_get_defaultnum (int *num);
+
+extern libspid_error_t
+libspid_eoc_maclimit_get (char *mac_address,
+ libspid_eoc_maclimit_entry_t * entry);
+
+extern libspid_error_t
+libspid_eoc_maclimit_get_list (libspid_eoc_maclimit_entry_t * entry,
+ int *count);
+
+extern libspid_error_t
+libspid_eoc_maclimit_set (char *mac_address,
+ libspid_eoc_maclimit_entry_t * entry);
+
+extern libspid_error_t libspid_eoc_maclimit_check (void);
+
+extern libspid_error_t
+libspid_eoc_ethernet_port_get (char *mac_address, char *index,
+ libspid_eoc_ethernet_port_entry_t * entry);
+extern libspid_error_t
+libspid_eoc_port_v2_get (char *mac_address, char *index,
+ libspid_eoc_port_v2_entry_t * entry);
+extern libspid_error_t
+libspid_eoc_port_v2_set (char *mac_address, char *index,
+ libspid_eoc_port_v2_entry_t * entry);
+extern libspid_error_t
+libspid_eoc_ethernet_port_get_list (libspid_eoc_ethernet_port_entry_t * entry,
+ int *count);
+
+extern libspid_error_t
+libspid_eoc_ethernet_port_set (char *mac_address, char *index,
+ libspid_eoc_ethernet_port_entry_t * entry);
+
+extern libspid_error_t libspid_eoc_ethernet_port_check (void);
+
+extern libspid_error_t libspid_ptable_init (print_table_t * table);
+
+extern libspid_error_t
+libspid_ptable_add (print_table_t table, unsigned int row,
+ unsigned int col, char *pstr);
+
+extern libspid_error_t
+libspid_ptable_show (print_table_t table);
+
+extern libspid_error_t
+libspid_ptable_uninit (print_table_t *table);
+
+extern libspid_error_t
+libspid_eoc_igmp_snooping_get (char *mac_address,
+ libspid_eoc_igmp_snooping_entry_t * entry);
+extern libspid_error_t
+libspid_eoc_igmp_snooping_get_list (libspid_eoc_igmp_snooping_entry_t * entry,
+ int *count);
+extern libspid_error_t
+libspid_eoc_igmp_snooping_set (char *mac_address,
+ libspid_eoc_igmp_snooping_entry_t * entry);
+extern libspid_error_t
+libspid_eoc_igmp_snooping_check (void);
+
+extern libspid_error_t
+libspid_eoc_config_backup_get (char *index,
+ libspid_eoc_config_backup_entry_t *entry);
+extern libspid_error_t
+libspid_eoc_config_backup_get_list (libspid_eoc_config_backup_entry_t *entry,
+ unsigned int *count);
+extern libspid_error_t
+libspid_eoc_config_backup_set (char *index,
+ libspid_eoc_config_backup_entry_t *entry);
+extern libspid_error_t
+libspid_eoc_config_backup_remove (char *index);
+extern libspid_error_t
+libspid_eoc_config_backup_flush (void);
+extern libspid_error_t
+libspid_eoc_config_backup_check (void);
+
+extern libspid_error_t
+libspid_eoc_ethctl_get (char *mac_address, libspid_eoc_ethctl_entry_t *entry);
+
+extern libspid_error_t
+libspid_eoc_ethctl_get_list (libspid_eoc_ethctl_entry_t *entry, int *count);
+
+extern libspid_error_t
+libspid_eoc_ethctl_set (char *mac_address, libspid_eoc_ethctl_entry_t *entry);
+
+extern libspid_error_t
+libspid_eoc_ethctl_check (void);
+
libspid_error_t libspid_image_update_current_index(uint32_t index,
const char *mtd_name);
#endif /* LIBSPID_H */
diff --git a/cleopatre/application/libspid/inc/nvram_utils.h b/cleopatre/application/libspid/inc/nvram_utils.h
index 85fdd9d70d..388010dae8 100644
--- a/cleopatre/application/libspid/inc/nvram_utils.h
+++ b/cleopatre/application/libspid/inc/nvram_utils.h
@@ -29,4 +29,6 @@ int libspid_get_product_desc(void *, int);
int libspid_get_manufactory_info(void *, int);
int libspid_get_product_partnb(void *, int);
int libspid_get_serial_number(void *, int);
+int libspid_get_oem_info(void *, int);
+int libspid_get_eth1_address(void *, int);
#endif /* NVRAM_UTILS_H */
diff --git a/cleopatre/application/libspid/inc/openssl_md5.h b/cleopatre/application/libspid/inc/openssl_md5.h
new file mode 100644
index 0000000000..26f7c9ace0
--- /dev/null
+++ b/cleopatre/application/libspid/inc/openssl_md5.h
@@ -0,0 +1,100 @@
+/* crypto/md5/md5.h */
+/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
+ * All rights reserved.
+ *
+ * This package is an SSL implementation written
+ * by Eric Young (eay@cryptsoft.com).
+ * The implementation was written so as to conform with Netscapes SSL.
+ *
+ * This library is free for commercial and non-commercial use as long as
+ * the following conditions are aheared to. The following conditions
+ * apply to all code found in this distribution, be it the RC4, RSA,
+ * lhash, DES, etc., code; not just the SSL code. The SSL documentation
+ * included with this distribution is covered by the same copyright terms
+ * except that the holder is Tim Hudson (tjh@cryptsoft.com).
+ *
+ * Copyright remains Eric Young's, and as such any Copyright notices in
+ * the code are not to be removed.
+ * If this package is used in a product, Eric Young should be given attribution
+ * as the author of the parts of the library used.
+ * This can be in the form of a textual message at program startup or
+ * in documentation (online or textual) provided with the package.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. 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.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * "This product includes cryptographic software written by
+ * Eric Young (eay@cryptsoft.com)"
+ * The word 'cryptographic' can be left out if the rouines from the library
+ * being used are not cryptographic related :-).
+ * 4. If you include any Windows specific code (or a derivative thereof) from
+ * the apps directory (application code) you must include an acknowledgement:
+ * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
+ *
+ * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 AUTHOR 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.
+ *
+ * The licence and distribution terms for any publically available version or
+ * derivative of this code cannot be changed. i.e. this code cannot simply be
+ * copied and put under another distribution licence
+ * [including the GNU Public Licence.]
+ */
+
+#ifndef HEADER_MD5_H
+#define HEADER_MD5_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef OPENSSL_NO_MD5
+#error MD5 is disabled.
+#endif
+
+/*
+ * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ * ! MD5_LONG has to be at least 32 bits wide. If it's wider, then !
+ * ! MD5_LONG_LOG2 has to be defined along. !
+ * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ */
+#define MD5_LONG unsigned int
+
+#define MD5_CBLOCK 64
+#define MD5_LBLOCK (MD5_CBLOCK/4)
+#define MD5_DIGEST_LENGTH 16
+
+typedef struct MD5state_st
+ {
+ MD5_LONG A,B,C,D;
+ MD5_LONG Nl,Nh;
+ MD5_LONG data[MD5_LBLOCK];
+ unsigned int num;
+ } MD5_CTX;
+
+int MD5_Init(MD5_CTX *c);
+unsigned char *MD5(const unsigned char *d, size_t n, unsigned char *md);
+int MD5_Update(MD5_CTX *c, const void *data, size_t len);
+int MD5_Final(unsigned char *md, MD5_CTX *c);
+unsigned char *MD5(const unsigned char *d, size_t n, unsigned char *md);
+void MD5_Transform(MD5_CTX *c, const unsigned char *b);
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/cleopatre/application/libspid/inc/path.h b/cleopatre/application/libspid/inc/path.h
index 0ea32663fd..536cfe06e3 100644
--- a/cleopatre/application/libspid/inc/path.h
+++ b/cleopatre/application/libspid/inc/path.h
@@ -17,46 +17,116 @@
#ifndef LIBSPID_PATH_H
#define LIBSPID_PATH_H
-#ifndef __UTESTS__
+/* unitary tests paths */
+#if defined __UTESTS__ || defined __FTESTS_PC__
- #define LIBSPID_SAVE_LIST_PATH "/etc/save.lst"
- #define LIBSPID_SAVE_DIR_PATH "/usr/local/etc"
- #define LIBSPID_CONF_ROOT_PATH "/etc"
- #define LIBSPID_HPAV_CONF_PATH "/etc/hpav.conf"
- #define LIBSPID_HPAV_INFO_PATH "/etc/hpav.info"
- #define LIBSPID_PHY_CONF_PATH "/etc/phy.conf"
- #define LIBSPID_INTERNAL_CONF_PATH "/etc/internal.conf"
- #define LIBSPID_MULTICAST_INFO_PATH "/var/run/info/mcast.info"
- #define LIBSPID_SIGNAL_INFO_PATH "/etc/signal.info"
- #define LIBSPID_NETWORK_CONF_PATH "/etc/network/interfaces"
- #define LIBSPID_SYSTEM_VERSION_PATH "/proc/version"
- #define LIBSPID_SYSTEM_UPTIME_PATH "/proc/uptime"
- #define LIBSPID_SYSTEM_MEMINFO_PATH "/proc/meminfo"
- #define LIBSPID_SYSTEM_MTD_PATH "/proc/mtd"
- #define LIBSPID_FACTORY_PATH "/factory"
- #define LIBSPID_DEV_PATH "/dev"
- #define LIBSPID_CUR_IMG_PROC_PATH "/proc/spidimg/current_img_slot"
+ #define UTESTS_TMP_DIR "/tmp/utests"
+ #define LIBSPID_SAVE_LIST_PATH "/tmp/utests/etc/save.lst"
+ #define LIBSPID_SAVE_DIR_PATH "/tmp/utests/local"
+ #define LIBSPID_CONF_SAVE_PATH "/tmp/utests/local/etc"
+ #define LIBSPID_CONF_TRACE_PATH "/tmp/utests/local/trace"
+ #define LIBSPID_CONF_ROOT_PATH "/tmp/utests/etc"
+ #define LIBSPID_HARDWARE_INFO_PATH "/tmp/utests/etc/hardware.info"
+ #define LIBSPID_HPAV_CONF_PATH "/tmp/utests/etc/hpav.conf"
+ #define LIBSPID_HPAV_INFO_PATH "/tmp/utests/etc/hpav.info"
+ #define LIBSPID_SIGNAL_INFO_PATH "/tmp/utests/etc/signal.info"
+ #define LIBSPID_NETWORK_CONF_PATH "/tmp/utests/etc/network/interfaces"
+ #define LIBSPID_SYSTEM_VERSION_PATH "/tmp/utests/proc/version"
+ #define LIBSPID_SYSTEM_UPTIME_PATH "/tmp/utests/proc/uptime"
+ #define LIBSPID_SYSTEM_CPUINFO_PATH "/tmp/utests/proc/stat"
+ #define LIBSPID_SYSTEM_MEMINFO_PATH "/tmp/utests/proc/meminfo"
+ #define LIBSPID_SYSTEM_MTD_PATH "/tmp/utests/proc/mtd"
+ #define LIBSPID_SYSTEM_RESET_CAUSE_PATH "/tmp/utests/proc/reset_cause"
+ #define LIBSPID_DEV_PATH "/tmp/utests/dev"
+ #define LIBSPID_ONLINE_INFO_PATH "/tmp/utests/etc/online.info"
+ #define LIBSPID_UPDATE_INFO_PATH "/tmp/utests/etc/update.info"
+ #define LIBSPID_UPDATE_DIR_PATH "/tmp/utests/images"
+ #define LIBSPID_EOC_INFO_PATH "/tmp/utests/etc/eoc.info"
+ #define LIBSPID_MASTER_CONF_PATH "/tmp/utests/etc/master.conf"
+ #define LIBSPID_SYSTEM_CONF_PATH "/tmp/utests/etc/system.conf"
+ #define LIBSPID_WHITE_LIST_CONF_PATH "/tmp/utests/etc/white_list.conf"
+ #define LIBSPID_WHITE_LIST_INFO_PATH "/tmp/utests/etc/white_list.info"
+ #define LIBSPID_SERVICE_CONF_PATH "/tmp/utests/etc/service.conf"
+ #define LIBSPID_PORT_CONF_PATH "/tmp/utests/etc/port.conf"
+ #define LIBSPID_EOC_CONF_PATH "/tmp/utests/etc/eoc.conf"
+ #define LIBSPID_MULTICAST_INFO_PATH "/tmp/utests/var/run/info/mcast.info"
+ #define LIBSPID_DISCRETE_ALARM_CONF_PATH "/tmp/utests/etc/alarm_discrete.conf"
+ #define LIBSPID_ANALOG_ALARM_CONF_PATH "/tmp/utests/etc/alarm_analog.conf"
+ #define LIBSPID_ALARM_CONF_PATH "/tmp/utests/etc/alarm.conf"
+ #define LIBSPID_ALARM_INFO_PATH "/tmp/utests/etc/alarm.info"
+ #define LIBSPID_SLAVE_CONF_PATH "/tmp/utests/etc/slave.conf"
+ #define LIBSPID_MCAST_INFO_PATH "/tmp/utests/var/run/info/mcast.info"
+ #define LIBSPID_EOC_TMP_PATH "/tmp/utests/"
+ #define LIBSPID_SNMPD_CONF_PATH "/tmp/utests/etc/snmp/snmpd.conf"
+ #define LIBSPID_CONFIG_BACKUP_PATH "/tmp/utests/etc/confbak.conf"
+ #define LIBSPID_EOC_HOSTNAME "/tmp/utests/etc/hostname"
+ #define LIBSPID_MAC_LIMITATION_CONF_PATH "/tmp/utests/etc/maclimit.conf"
+ #define LIBSPID_IGMP_CONF_PATH "/tmp/utests/etc/igmp.conf"
+ #define LIBSPID_VLAN_TABLE_CONF_PATH "/tmp/utests/etc/vlan.conf"
+ #define LIBSPID_TRAP_CONF_PATH "/tmp/utests/etc/trap.conf"
+ #define LIBSPID_ETHCTL_CONF_PATH "/tmp/utests/etc/ethctl.conf"
+ #define LIBSPID_NETWORK_FOR_SLAVE_CONF_PATH "/tmp/utests/autoconf/network/interfaces"
+ #define LIBSPID_EOC_PORT_V2_FILE "/tmp/utests/etc/port_v2.conf"
+ #define LIBSPID_GPIO_DEVICE_NAME "/tmp/utests/gpio"
+ #define LIBSPID_CUR_IMG_PROC_PATH "/tmp/utests/proc/spidimg/current_img_slot"
-#else /* unitary tests paths */
+#else
- #define UTESTS_TMP_DIR "/tmp/utests"
- #define LIBSPID_SAVE_LIST_PATH "/tmp/utests/etc/save.lst"
- #define LIBSPID_SAVE_DIR_PATH "/tmp/utests/local"
- #define LIBSPID_CONF_ROOT_PATH "/tmp/utests/etc"
- #define LIBSPID_HPAV_CONF_PATH "/tmp/utests/etc/hpav.conf"
- #define LIBSPID_HPAV_INFO_PATH "/tmp/utests/etc/hpav.info"
- #define LIBSPID_PHY_CONF_PATH "/tmp/utests/etc/phy.conf"
- #define LIBSPID_INTERNAL_CONF_PATH "/tmp/utests/etc/internal.conf"
- #define LIBSPID_MULTICAST_INFO_PATH "/tmp/utests/var/run/info/mcast.info"
- #define LIBSPID_SIGNAL_INFO_PATH "/tmp/utests/etc/signal.info"
- #define LIBSPID_NETWORK_CONF_PATH "/tmp/utests/network/interfaces"
- #define LIBSPID_SYSTEM_VERSION_PATH "/tmp/utests/proc/version"
- #define LIBSPID_SYSTEM_UPTIME_PATH "/tmp/utests/proc/uptime"
- #define LIBSPID_SYSTEM_MEMINFO_PATH "/tmp/utests/proc/meminfo"
- #define LIBSPID_SYSTEM_MTD_PATH "/tmp/utests/proc/mtd"
- #define LIBSPID_FACTORY_PATH "/tmp/utests/factory"
- #define LIBSPID_DEV_PATH "/tmp/utests/dev"
- #define LIBSPID_CUR_IMG_PROC_PATH "/tmp/utests/proc/spidimg/current_img_slot"
+ #define LIBSPID_SAVE_LIST_PATH "/etc/save.lst"
+ #define LIBSPID_SAVE_DIR_PATH "/usr/local"
+ #define LIBSPID_CONF_SAVE_PATH "/usr/local/etc"
+ #define LIBSPID_CONF_TRACE_PATH "/usr/local/trace"
+ #define LIBSPID_CONF_ROOT_PATH "/etc"
+ #define LIBSPID_HARDWARE_INFO_PATH "/etc/hardware.info"
+ #define LIBSPID_HPAV_CONF_PATH "/etc/hpav.conf"
+ #define LIBSPID_HPAV_INFO_PATH "/etc/hpav.info"
+ #define LIBSPID_PHY_CONF_PATH "/etc/phy.conf"
+ #define LIBSPID_INTERNAL_CONF_PATH "/etc/internal.conf"
+ #define LIBSPID_SIGNAL_INFO_PATH "/etc/signal.info"
+ #define LIBSPID_NETWORK_CONF_PATH "/etc/network/interfaces"
+ #define LIBSPID_NETWORK_FOR_SLAVE_CONF_PATH "/tmp/autoconf/network/interfaces"
+ #define LIBSPID_SYSTEM_VERSION_PATH "/proc/version"
+ #define LIBSPID_SYSTEM_UPTIME_PATH "/proc/uptime"
+ #define LIBSPID_SYSTEM_CPUINFO_PATH "/proc/stat"
+ #define LIBSPID_SYSTEM_MEMINFO_PATH "/proc/meminfo"
+ #define LIBSPID_SYSTEM_MTD_PATH "/proc/mtd"
+ #define LIBSPID_SYSTEM_RESET_CAUSE_PATH "/proc/reset_cause"
+ #define LIBSPID_DEV_PATH "/dev"
+ #define LIBSPID_ONLINE_INFO_PATH "/var/run/info/online.info"
+ #define LIBSPID_MASTER_CONF_PATH "/etc/master.conf"
+ #define LIBSPID_SYSTEM_CONF_PATH "/etc/system.conf"
+ #define LIBSPID_SNMP_CONF_PATH "/etc/snmp.conf"
+ #define LIBSPID_SNMPD_CONF_PATH "/etc/snmp/snmpd.conf"
+ #define LIBSPID_CONFIG_BACKUP_PATH "/etc/confbak.conf"
+ #define LIBSPID_SNMP_INFO_PATH "/var/run/info/snmp.info"
+ #define LIBSPID_TRAP_CONF_PATH "/etc/trap.conf"
+ #define LIBSPID_VLAN_TABLE_CONF_PATH "/etc/vlan.conf"
+ #define LIBSPID_ETHCTL_CONF_PATH "/etc/ethctl.conf"
+ #define LIBSPID_MAC_LIMITATION_CONF_PATH "/etc/maclimit.conf"
+ #define LIBSPID_IGMP_CONF_PATH "/etc/igmp.conf"
+ #define LIBSPID_SNMPD_CONF_PATH "/etc/snmp/snmpd.conf"
+ #define LIBSPID_UPDATE_INFO_PATH "/etc/update.info"
+ #define LIBSPID_UPDATE_DIR_PATH "/tmp/images"
+ #define LIBSPID_EOC_CONF_PATH "/etc/eoc.conf"
+ #define LIBSPID_EOC_INFO_PATH "/var/run/info/eoc.info"
+ #define LIBSPID_WHITE_LIST_CONF_PATH "/etc/white_list.conf"
+ #define LIBSPID_WHITE_LIST_INFO_PATH "/var/run/info/white_list.info"
+ #define LIBSPID_SLAVE_CONF_PATH "/etc/slave.conf"
+ #define LIBSPID_SERVICE_CONF_PATH "/etc/service.conf"
+ #define LIBSPID_PORT_CONF_PATH "/etc/port.conf"
+ #define LIBSPID_MULTICAST_INFO_PATH "/var/run/info/mcast.info"
+ #define LIBSPID_DISCRETE_ALARM_CONF_PATH "/etc/alarm_discrete.conf"
+ #define LIBSPID_ANALOG_ALARM_CONF_PATH "/etc/alarm_analog.conf"
+ #define LIBSPID_ALARM_INFO_PATH "/var/run/info/alarm.info"
+ #define LIBSPID_MCAST_INFO_PATH "/var/run/info/mcast.info"
+ #define LIBSPID_EOC_TMP_PATH "/tmp/"
+ #define LIBSPID_TRAP_INFO_PATH "/var/run/info/trap.info"
+ #define LIBSPID_EOC_HOSTNAME "/etc/hostname"
+ #define LIBSPID_AUTODISCOVERY_INFO_PATH "/var/run/info/autodiscovery.info"
+ #define LIBSPID_WEB_RESET_INFO_PATH "/etc/web_reset.info"
+ #define LIBSPID_EOC_PORT_V2_FILE "/etc/port_v2.conf"
+ #define LIBSPID_GPIO_DEVICE_NAME "/dev/gpio"
+ #define LIBSPID_CUR_IMG_PROC_PATH "/proc/spidimg/current_img_slot"
#endif
diff --git a/cleopatre/application/libspid/src/analog_alarm_eoc.c b/cleopatre/application/libspid/src/analog_alarm_eoc.c
new file mode 100644
index 0000000000..de22b811c4
--- /dev/null
+++ b/cleopatre/application/libspid/src/analog_alarm_eoc.c
@@ -0,0 +1,278 @@
+/* SPC300 bundle {{{
+ *
+ * Copyright (C) 2010 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file application/libspid/src/analog_alarm_eoc.c
+ * \brief Functions specific to EoC analog alarms
+ * \ingroup libspid
+ *
+ */
+
+#include <sys/types.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <getopt.h>
+#include <syslog.h>
+#include <assert.h>
+#include <unistd.h>
+#include <errno.h>
+#include <fcntl.h>
+
+#include "libspid.h"
+
+/**
+ * Returns the analog alarm entry for given string with OID.<BR>
+ * \param OID alarm OID
+ * \param analog_alarm_entry analog alarm entry
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_NOT_FOUND: entry not found
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+extern libspid_error_t
+libspid_eoc_analog_alarm_get (char *oid, libspid_eoc_analog_alarm_entry_t
+ *analog_alarm_entry)
+{
+ const char delimiters[2] = LIBSPID_ANALOG_ALARM_CONF_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;
+
+ int enable_bin;
+
+ /* check input parameters */
+ if ((oid == NULL) || (analog_alarm_entry == NULL))
+ return LIBSPID_ERROR_PARAM;
+
+ memset (analog_alarm_entry, 0x0, sizeof (analog_alarm_entry));
+
+ /* copy OID to avoid it being corrupted */
+ strcpy (key, oid);
+
+ strcpy (analog_alarm_entry->oid, oid);
+
+ error = libspid_config_read_line (LIBSPID_ANALOG_ALARM_CONF_PATH,
+ delimiters, key, &elt_number,
+ elt, buffer,
+ LIBSPID_CONFIG_LINE_MAX_LEN);
+ if (LIBSPID_SUCCESS != error)
+ return error;
+
+ /* check if required number of parameters is read */
+ if (elt_number < LIBSPID_ANALOG_ALARMS_PARAM_NUM)
+ {
+ analog_alarm_entry->enable.LOLO_alarm_enable = 0;
+ analog_alarm_entry->enable.LO_alarm_enable = 0;
+ analog_alarm_entry->enable.HI_alarm_enable = 0;
+ analog_alarm_entry->enable.HIHI_alarm_enable = 0;
+ analog_alarm_entry->state = 0;
+ analog_alarm_entry->hihi = 0;
+ analog_alarm_entry->hi = 0;
+ analog_alarm_entry->lo = 0;
+ analog_alarm_entry->lolo = 0;
+ analog_alarm_entry->deadband = 0;
+ }
+ else
+ {
+ enable_bin = atoi (elt[0]);
+ analog_alarm_entry->enable.LOLO_alarm_enable = (enable_bin & 0x01);
+ analog_alarm_entry->enable.LO_alarm_enable = (enable_bin & 0x02)>>1;
+ analog_alarm_entry->enable.HI_alarm_enable = (enable_bin & 0x04)>>2;
+ analog_alarm_entry->enable.HIHI_alarm_enable = (enable_bin & 0x08)>>3;
+ analog_alarm_entry->state = atoi (elt[1]);
+ analog_alarm_entry->hihi = atoi (elt[2]);
+ analog_alarm_entry->hi = atoi (elt[3]);
+ analog_alarm_entry->lo = atoi (elt[4]);
+ analog_alarm_entry->lolo = atoi (elt[5]);
+ analog_alarm_entry->deadband = atoi (elt[6]);
+ }
+ return LIBSPID_SUCCESS;
+}
+
+
+/**
+ * Returns list of analog alarm entries from configuration file in a
+ * pointer to an array of analog alarm entries.<BR>
+ * \param analog_alarm_entry pointer to an array of analog alarm entries
+ * \param count pointer to an integer for number of analog alarm entries
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_NOT_FOUND: entry not found
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+extern libspid_error_t
+libspid_eoc_analog_alarm_get_list (libspid_eoc_analog_alarm_entry_t
+ *analog_alarm_entry, int *count)
+{
+ const char delimiters[2] = LIBSPID_ANALOG_ALARM_CONF_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;
+ libspid_eoc_analog_alarm_entry_t *entry_ptr;
+
+ int enable_bin;
+
+ /* check input parameters */
+ if ((analog_alarm_entry == NULL) || (count == NULL))
+ return LIBSPID_ERROR_PARAM;
+
+ memset (key, 0x0, sizeof (key));
+ memset (analog_alarm_entry, 0x0, sizeof (analog_alarm_entry));
+ *count = 0;
+
+ entry_ptr = analog_alarm_entry;
+
+ error = libspid_config_read_line (LIBSPID_ANALOG_ALARM_CONF_PATH,
+ delimiters, key, &elt_number,
+ elt, buffer,
+ LIBSPID_CONFIG_LINE_MAX_LEN);
+ /* get the first key */
+ if (LIBSPID_SUCCESS != error)
+ return error;
+
+ /* check if analog alarm configuration file is empty */
+ if (strcmp (key, "") == 0)
+ return LIBSPID_SUCCESS;
+
+ for (*count = 1; *count <= LIBSPID_ANALOG_ALARMS_MAX_NUM; (*count)++)
+ {
+ /* Get a line from the conf file */
+ elt_number = LIBSPID_CONFIG_ELT_MAX_NB;
+ error = libspid_config_read_line (LIBSPID_ANALOG_ALARM_CONF_PATH,
+ delimiters, key, &elt_number,
+ elt, buffer,
+ LIBSPID_CONFIG_LINE_MAX_LEN);
+ if (LIBSPID_SUCCESS != error)
+ return error;
+
+ strcpy (entry_ptr->oid, buffer);
+ /* check if required number of parameters is read */
+ if (elt_number < LIBSPID_ANALOG_ALARMS_PARAM_NUM)
+ {
+ entry_ptr->enable.LOLO_alarm_enable = 0;
+ entry_ptr->enable.LO_alarm_enable = 0;
+ entry_ptr->enable.HI_alarm_enable = 0;
+ entry_ptr->enable.HIHI_alarm_enable = 0;
+ entry_ptr->state = 0;
+ entry_ptr->hihi = 0;
+ entry_ptr->hi = 0;
+ entry_ptr->lo = 0;
+ entry_ptr->lolo = 0;
+ entry_ptr->deadband = 0;
+ }
+ else
+ {
+ enable_bin = atoi (elt[0]);
+ entry_ptr->enable.LOLO_alarm_enable = (enable_bin & 0x01);
+ entry_ptr->enable.LO_alarm_enable = (enable_bin & 0x02)>>1;
+ entry_ptr->enable.HI_alarm_enable = (enable_bin & 0x04)>>2;
+ entry_ptr->enable.HIHI_alarm_enable = (enable_bin & 0x08)>>3;
+ entry_ptr->state = atoi (elt[1]);
+ entry_ptr->hihi = atoi (elt[2]);
+ entry_ptr->hi = atoi (elt[3]);
+ entry_ptr->lo = atoi (elt[4]);
+ entry_ptr->lolo = atoi (elt[5]);
+ entry_ptr->deadband = atoi (elt[6]);
+ }
+
+ if (strcmp (key, "") == 0)
+ break;
+ if (*count == LIBSPID_ANALOG_ALARMS_MAX_NUM)
+ break;
+
+ entry_ptr++;
+ }
+
+
+ return LIBSPID_SUCCESS;
+}
+
+/**
+ * Set analog alarm entry with the given OID.<BR>
+ * \param OID alarm OID
+ * \param analog_alarm_entry analog alarm entry
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_NOT_FOUND: entry not found
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+extern libspid_error_t
+libspid_eoc_analog_alarm_set (char *oid, libspid_eoc_analog_alarm_entry_t
+ *analog_alarm_entry)
+{
+ const char delimiter = LIBSPID_ANALOG_ALARM_CONF_DELIMITER[0];
+ char *elt[7];
+ libspid_error_t ret;
+ libspid_eoc_analog_alarm_entry_t alarm_get_entry;
+
+ int i;
+ int enable_bin;
+
+ /* check input parameters */
+ if ((oid == NULL) || (analog_alarm_entry == NULL))
+ return LIBSPID_ERROR_PARAM;
+
+
+ /* check that OID already exists */
+ ret = libspid_eoc_analog_alarm_get (oid, &alarm_get_entry);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ return ret;
+ }
+
+ /* allocate buffers */
+ for (i = 0; i < 7; i++)
+ {
+ elt[i] = (char *) malloc (16 * sizeof (char));
+ if (NULL != elt[i])
+ memset (elt[i], 0, 16);
+ else
+ {
+ LIBSPID_EOC_LOG_2 ("%s: error allocating element buffers "
+ "(errno=%d)", __FUNCTION__, errno);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+ }
+
+ enable_bin = analog_alarm_entry->enable.LOLO_alarm_enable
+ + analog_alarm_entry->enable.LO_alarm_enable * 2
+ + analog_alarm_entry->enable.HI_alarm_enable * 4
+ + analog_alarm_entry->enable.HIHI_alarm_enable * 8;
+
+ sprintf (elt[0], "%d", enable_bin);
+ sprintf (elt[1], "%d", analog_alarm_entry->state);
+ sprintf (elt[2], "%d", analog_alarm_entry->hihi);
+ sprintf (elt[3], "%d", analog_alarm_entry->hi);
+ sprintf (elt[4], "%d", analog_alarm_entry->lo);
+ sprintf (elt[5], "%d", analog_alarm_entry->lolo);
+ sprintf (elt[6], "%d", analog_alarm_entry->deadband);
+
+ ret = libspid_config_write_line (LIBSPID_ANALOG_ALARM_CONF_PATH,
+ delimiter, oid, 7, elt);
+ /* free element buffers */
+ for (i = 0; i < 7; i++)
+ {
+ if (elt[i])
+ {
+ free (elt[i]);
+ elt[i] = NULL;
+ }
+ }
+ if (ret != LIBSPID_SUCCESS)
+ {
+ LIBSPID_EOC_LOG_2 ("%s: cannot write analog alarm entry "
+ "(errno=%d)", __FUNCTION__, errno);
+ return ret;
+ }
+
+ return LIBSPID_SUCCESS;
+}
diff --git a/cleopatre/application/libspid/src/autoconf_eoc.c b/cleopatre/application/libspid/src/autoconf_eoc.c
new file mode 100644
index 0000000000..8f37909aa1
--- /dev/null
+++ b/cleopatre/application/libspid/src/autoconf_eoc.c
@@ -0,0 +1,456 @@
+
+/* SPC300 bundle {{{
+ *
+ * Copyright (C) 2010 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file application/libspid/src/autoconf_eoc.c
+ * \brief (Auto)configuration support specific for EoC modems
+ * \ingroup libspid
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <getopt.h>
+#include <syslog.h>
+#include <assert.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/mman.h>
+#include <arpa/inet.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <linux/netlink.h>
+#include <unistd.h>
+
+#include "openssl_md5.h"
+#include "libspid.h"
+#include "nvram.h"
+#include "libmme.h"
+
+static int
+libspid_eoc_autoconf_start (char *mac_address, char *file)
+{
+ mme_ctx_t request_ctx, confirm_ctx;
+ unsigned char snd_buffer[ETH_DATA_LEN];
+ int ret, fd, len;
+ char protocol = LIBSPID_TRANSFER_PROTOCOL;
+ unsigned int result_len = 0;
+ char *iface = LIBSPID_EOC_BR_IFACE;
+ unsigned char result;
+ unsigned char md[MD5_DIGEST_LENGTH];
+ MD5_CTX ctx;
+ unsigned char data[1024];
+
+ /* Check input parameters */
+ if ((mac_address == NULL) || (file == NULL))
+ return LIBSPID_ERROR_PARAM;
+
+ /* initialize configure MME */
+ ret = mme_init (&request_ctx,
+ VS_EOC_AUTOCONF_START | MME_REQ,
+ snd_buffer, ETH_DATA_LEN);
+ if (ret != MME_SUCCESS)
+ return LIBSPID_ERROR_MME;
+
+ ret = mme_init (&confirm_ctx,
+ VS_EOC_AUTOCONF_START | MME_CNF,
+ snd_buffer, ETH_DATA_LEN);
+ if (ret != MME_SUCCESS)
+ return LIBSPID_ERROR_MME;
+
+ /* calculate MD5 for image file */
+ if ((fd = open (file, O_RDONLY, 0)) < 0)
+ {
+ LIBSPID_EOC_LOG_1 ("Cannot open configuration archive %s "
+ "for reading", file);
+ return LIBSPID_ERROR_GEN;
+ }
+
+ if (!MD5_Init (&ctx))
+ {
+ close (fd);
+ LIBSPID_EOC_LOG_0 ("MD5 sum initialization failed");
+ return LIBSPID_ERROR_GEN;
+ }
+
+ while ((len = read (fd, data, 1024)) > 0)
+ MD5_Update (&ctx, data, len);
+ close (fd);
+ if (len < 0)
+ {
+ LIBSPID_EOC_LOG_0 ("MD5 sum update failed");
+ return LIBSPID_ERROR_GEN;
+ }
+
+ MD5_Final (md, &ctx);
+
+ ret = mme_put (&request_ctx, &protocol, 1, &result_len);
+ if (ret != MME_SUCCESS)
+ return LIBSPID_ERROR_MME;
+
+ ret = mme_put (&request_ctx, md, MD5_DIGEST_LENGTH, &result_len);
+ if (ret != MME_SUCCESS)
+ return LIBSPID_ERROR_MME;
+
+ /* send VS_EOC_AUTOCONF_START MME request */
+ ret = mme_send (&request_ctx, MME_SEND_REQ_CNF, iface,
+ (unsigned char *) mac_address, &confirm_ctx);
+ if (ret != MME_SUCCESS)
+ return LIBSPID_ERROR_MME;
+
+ /* extract SPIDCOM OUI and check if it is correct */
+ if (confirm_ctx.oui != MME_OUI_SPIDCOM)
+ return LIBSPID_ERROR_MME;
+
+ /* collect confirmation value */
+ ret = mme_pull (&confirm_ctx, &result, 1, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ return result;
+}
+
+static int
+libspid_eoc_autoconf_transfer (char *mac_address, char *file)
+{
+ mme_ctx_t request_ctx, confirm_ctx;
+ unsigned char snd_buffer[ETH_DATA_LEN];
+ int ret, not_done = 1;
+ unsigned int result_len = 0;
+ unsigned char result;
+ char *iface = LIBSPID_EOC_BR_IFACE;
+ FILE *fp;
+ char ptr[LIBSPID_TRANSFER_MAX_SLICE];
+ int psize = -1;
+ int curr_blk_id = 1;
+ int next_blk_id = 1;
+ int cnf_attempt_cnt = 0;
+ int req_attempt_cnt = 0;
+ int slide = 1;
+
+ /* Check input parameters */
+ if ((mac_address == NULL) || (file == NULL))
+ return LIBSPID_ERROR_PARAM;
+
+ if ((fp = fopen (file, "rb")) == NULL)
+ return LIBSPID_ERROR_MME;
+
+ while (not_done)
+ {
+ /* read part of the configuration archive if needed */
+ if (slide == 1 && curr_blk_id == next_blk_id)
+ psize = fread (ptr, 1, LIBSPID_TRANSFER_MAX_SLICE, fp);
+
+ /* finish the transfer */
+ if (psize == 0)
+ break;
+ if (psize < (int) LIBSPID_TRANSFER_MAX_SLICE)
+ not_done = 0;
+
+ /* initialize transfer MME */
+ ret = mme_init (&request_ctx,
+ VS_EOC_AUTOCONF_TRANSFER | MME_REQ,
+ snd_buffer, ETH_DATA_LEN);
+ if (ret != MME_SUCCESS)
+ return LIBSPID_ERROR_MME;
+
+ ret = mme_init (&confirm_ctx,
+ VS_EOC_AUTOCONF_TRANSFER | MME_CNF,
+ snd_buffer, ETH_DATA_LEN);
+ if (ret != MME_SUCCESS)
+ return LIBSPID_ERROR_MME;
+
+ ret = mme_put (&request_ctx, &curr_blk_id,
+ sizeof (curr_blk_id), &result_len);
+ if (ret != MME_SUCCESS)
+ return LIBSPID_ERROR_MME;
+
+ ret = mme_put (&request_ctx, &psize, sizeof (psize), &result_len);
+ if (ret != MME_SUCCESS)
+ return LIBSPID_ERROR_MME;
+
+ ret = mme_put (&request_ctx, ptr, psize, &result_len);
+ if (ret != MME_SUCCESS)
+ return LIBSPID_ERROR_MME;
+
+ /* send VS_EOC_AUTOCONF_TRANSFER MME request */
+ ret = mme_send (&request_ctx, MME_SEND_REQ_CNF, iface,
+ (unsigned char *) mac_address, &confirm_ctx);
+ if (ret == MME_ERROR_TIMEOUT)
+ {
+ req_attempt_cnt++;
+ if (req_attempt_cnt == LIBSPID_TRANSFER_MAX_ATTEMPT_CNT)
+ {
+ fclose (fp);
+ LIBSPID_EOC_LOG_0 ("Cannot get CNF message "
+ "for sent configuration packet");
+ return LIBSPID_EOC_AUTOCONF_TRANSFER_FAILED;
+ }
+ usleep (1000);
+ slide = 0;
+ continue;
+ }
+ else if (ret != MME_SUCCESS)
+ {
+ fclose (fp);
+ return LIBSPID_ERROR_MME;
+ }
+ else
+ {
+ slide = 1;
+ req_attempt_cnt = 0;
+ }
+
+ /* extract SPIDCOM OUI and check if it is correct */
+ if (confirm_ctx.oui != MME_OUI_SPIDCOM)
+ {
+ fclose (fp);
+ return LIBSPID_ERROR_MME;
+ }
+
+ /* collect confirmation value */
+ ret = mme_pull (&confirm_ctx, &result, 1, &result_len);
+ if (ret != MME_SUCCESS)
+ {
+ fclose (fp);
+ return LIBSPID_ERROR_MME;
+ }
+ ret = mme_pull (&confirm_ctx, &next_blk_id, 4, &result_len);
+ if (ret != MME_SUCCESS)
+ {
+ fclose (fp);
+ return LIBSPID_ERROR_MME;
+ }
+
+ if ((result == LIBSPID_EOC_AUTOCONF_TRANSFER_SUCCESS)
+ && (next_blk_id == curr_blk_id + 1))
+ {
+ curr_blk_id++;
+ cnf_attempt_cnt = 0;
+ slide = 1;
+ }
+ else
+ {
+ cnf_attempt_cnt++;
+ if (cnf_attempt_cnt == LIBSPID_TRANSFER_MAX_ATTEMPT_CNT)
+ {
+ fclose (fp);
+ LIBSPID_EOC_LOG_1 ("Configuration stream sequence broken "
+ "(packet No. %d)", curr_blk_id);
+ return LIBSPID_EOC_AUTOCONF_TRANSFER_FAILED;
+ }
+ usleep (1000);
+ slide = 0;
+ }
+ }
+
+ fclose (fp);
+
+ return LIBSPID_EOC_AUTOCONF_TRANSFER_SUCCESS;
+}
+
+static int
+libspid_eoc_autoconf_end (char *mac_address, char *file)
+{
+ mme_ctx_t request_ctx, confirm_ctx;
+ unsigned char snd_buffer[ETH_DATA_LEN];
+ int ret, fd, len;
+ unsigned int result_len = 0;
+ char *iface = LIBSPID_EOC_BR_IFACE;
+ unsigned char result;
+ unsigned char md[MD5_DIGEST_LENGTH];
+ MD5_CTX ctx;
+ unsigned char data[1024];
+
+ /* Check input parameters */
+ if ((mac_address == NULL) || (file == NULL))
+ return LIBSPID_ERROR_PARAM;
+
+ /* initialize update MME */
+ ret = mme_init (&request_ctx,
+ VS_EOC_AUTOCONF_END | MME_REQ,
+ snd_buffer, ETH_DATA_LEN);
+ if (ret != MME_SUCCESS)
+ return LIBSPID_ERROR_MME;
+
+ ret = mme_init (&confirm_ctx,
+ VS_EOC_AUTOCONF_END | MME_CNF,
+ snd_buffer, ETH_DATA_LEN);
+ if (ret != MME_SUCCESS)
+ return LIBSPID_ERROR_MME;
+
+ /* calculate MD5 for image file */
+ if ((fd = open (file, O_RDONLY, 0)) < 0)
+ {
+ LIBSPID_EOC_LOG_1 ("Cannot open configuration archive %s for reading",
+ file);
+ return LIBSPID_ERROR_GEN;
+ }
+
+ if (!MD5_Init (&ctx))
+ {
+ close (fd);
+ LIBSPID_EOC_LOG_0 ("MD5 sum initialization failed");
+ return LIBSPID_ERROR_GEN;
+ }
+
+ while ((len = read (fd, data, 1024)) > 0)
+ MD5_Update (&ctx, data, len);
+ close (fd);
+ if (len < 0)
+ {
+ LIBSPID_EOC_LOG_0 ("MD5 sum update failed");
+ return LIBSPID_ERROR_GEN;
+ }
+
+ MD5_Final (md, &ctx);
+
+ ret = mme_put (&request_ctx, md, MD5_DIGEST_LENGTH, &result_len);
+ if (ret != MME_SUCCESS)
+ return LIBSPID_ERROR_MME;
+
+ /* send VS_EOC_AUTOCONF_END MME request */
+ ret = mme_send (&request_ctx, MME_SEND_REQ_CNF, iface,
+ (unsigned char *) mac_address, &confirm_ctx);
+ if (ret != MME_SUCCESS)
+ return LIBSPID_ERROR_MME;
+
+ /* extract SPIDCOM OUI and check if it is correct */
+ if (confirm_ctx.oui != MME_OUI_SPIDCOM)
+ return LIBSPID_ERROR_MME;
+
+ /* collect confirmation result */
+ ret = mme_pull (&confirm_ctx, &result, 1, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ return result;
+}
+
+/**
+ * Pass configuration to a remote modem with the given MAC address.<BR>
+ * Configuration archive is specified as a function parameter.<BR>
+ * \param mac_address MAC address of the modem
+ * \param file configuration archive file name
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ * \return LIBSPID_ERROR_PARAM: wrong input parameters specified
+ */
+extern libspid_error_t
+libspid_eoc_configure (char *mac_address, char *file)
+{
+ char mac_address_bin[ETH_ALEN];
+ int ret;
+ char *ext;
+
+ /* Check input parameters */
+ if ((mac_address == NULL) || (file == NULL))
+ return LIBSPID_ERROR_PARAM;
+
+#ifdef __FTESTS_PC__
+ return LIBSPID_SUCCESS;
+#endif /* __FTESTS_PC__ */
+
+ ret = libspid_mac_str_to_bin (mac_address,
+ (unsigned char *)mac_address_bin);
+ if (ret != LIBSPID_SUCCESS)
+ return ret;
+
+ /* Check if configuration archive really exists */
+ if (access (file, F_OK))
+ {
+ LIBSPID_EOC_LOG_1 ("Configuration archive %s doesn't exist", file);
+ return LIBSPID_ERROR_PARAM;
+ }
+
+ /* Check if given archive is a .tar file */
+ ext = strchr (file, '.');
+ if (strcmp (ext, ".tar") != 0)
+ {
+ LIBSPID_EOC_LOG_1 ("Given file %s is not a .tar archive", file);
+ return LIBSPID_ERROR_PARAM;
+ }
+
+ /* Trigger configuration archive transfer */
+ ret = libspid_eoc_autoconf_start (mac_address_bin, file);
+
+ /* Check if transfer start was successful */
+ switch (ret)
+ {
+ case LIBSPID_EOC_AUTOCONF_START_SUCCESS:
+ break;
+
+ case LIBSPID_EOC_AUTOCONF_START_MODEM_BUSY:
+ LIBSPID_EOC_LOG_0 ("Another configuration already in progress");
+ return LIBSPID_ERROR_SYSTEM;
+
+ case LIBSPID_EOC_AUTOCONF_START_BAD_PROTOCOL:
+ LIBSPID_EOC_LOG_0 ("Incompatible protocol version started");
+ return LIBSPID_ERROR_SYSTEM;
+
+ case LIBSPID_EOC_AUTOCONF_START_FAILED:
+ LIBSPID_EOC_LOG_0 ("Configuration initialization failed");
+ return LIBSPID_ERROR_SYSTEM;
+
+ case LIBSPID_EOC_AUTOCONF_START_CONFIG_EXIST:
+ LIBSPID_EOC_LOG_0 ("Configuration already exist on slave.");
+ return LIBSPID_ERROR_AUTOCONF_EXIST;
+
+ default:
+ LIBSPID_EOC_LOG_0 ("libspid_eoc_autoconf_start: "
+ "general function failure");
+ return LIBSPID_ERROR_SYSTEM;
+ }
+
+ /* Perform configuration transfer */
+ ret = libspid_eoc_autoconf_transfer (mac_address_bin, file);
+
+ /* Check if configuration was transferred to slave */
+ switch (ret)
+ {
+ case LIBSPID_EOC_AUTOCONF_TRANSFER_SUCCESS:
+ break;
+
+ case LIBSPID_EOC_AUTOCONF_TRANSFER_FAILED:
+ LIBSPID_EOC_LOG_0 ("Configuration transfer failed");
+ return LIBSPID_ERROR_SYSTEM;
+
+ default:
+ LIBSPID_EOC_LOG_0 ("libspid_eoc_autoconf_transfer: "
+ "general function failure");
+ return LIBSPID_ERROR_SYSTEM;
+ }
+
+ /* Finish image transfer */
+ ret = libspid_eoc_autoconf_end (mac_address_bin, file);
+
+ /* Check if transfer finished successfully */
+ switch (ret)
+ {
+ case LIBSPID_EOC_AUTOCONF_END_SUCCESS:
+ break;
+
+ case LIBSPID_EOC_AUTOCONF_END_MD5_ERROR:
+ LIBSPID_EOC_LOG_0 ("Configuration corrupted during transfer");
+ return LIBSPID_ERROR_SYSTEM;
+ break;
+
+ case LIBSPID_EOC_AUTOCONF_END_FAILED:
+ LIBSPID_EOC_LOG_0 ("Configuration transfer end failed");
+ return LIBSPID_ERROR_SYSTEM;
+ break;
+
+ default:
+ LIBSPID_EOC_LOG_0 ("libspid_update_end: "
+ "general function failure");
+ return LIBSPID_ERROR_SYSTEM;
+ }
+
+ return LIBSPID_SUCCESS;
+}
diff --git a/cleopatre/application/libspid/src/community_eoc.c b/cleopatre/application/libspid/src/community_eoc.c
new file mode 100644
index 0000000000..36bf053adc
--- /dev/null
+++ b/cleopatre/application/libspid/src/community_eoc.c
@@ -0,0 +1,859 @@
+/* SPC300 bundle {{{
+ *
+ * Copyright (C) 2012 MStar
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file application/libspid/src/community_eoc.c
+ * \brief line management in configuration file
+ * \ingroup libspid
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdlib.h>
+#include <getopt.h>
+#include <syslog.h>
+#include <assert.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include "libspid.h"
+#include "libmme.h"
+
+/**
+ * read a configuration list into a configuration file.<BR>
+ * A configuration line is made of a key and several elements,
+ * The key length must not be longer than LIBSPID_KEY_MAX_LEN.
+ * the line buffer must not be longer than LIBSPID_CONFIG_LINE_MAX_LEN.
+ *
+ * \param comm_entrys is the entrys for the list
+ * \param line_num is the count of lines to readed
+ * \param read_option is choose read comm(0) or sec(1)
+ * \result error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno
+ */
+libspid_error_t
+libspid_eoc_read_snmpd_list (libspid_snmp_comm_t * comm_entry,
+ int *line_num, int read_option)
+{
+ FILE *fp;
+ char line_buffer[LIBSPID_CONFIG_LINE_MAX_LEN];
+ char buffer[LIBSPID_LINE_MAX_LEN];
+ char *ptr, *strtok_ctx;
+ int buffer_len = LIBSPID_CONFIG_LINE_MAX_LEN;
+ int line_count = 0;
+ char last_name[LIBSPID_KEY_MAX_LEN];
+ char delimiters[2] = LIBSPID_SNMPD_CONF_DELIMITER "\0";
+ libspid_snmp_comm_t *p;
+
+ if (NULL == comm_entry || NULL == line_num)
+ return LIBSPID_ERROR_PARAM;
+
+ if (0 == *line_num || *line_num > LIBSPID_SNMPD_COMMUNITY_MAX_NB
+ || (read_option != 0 && read_option != 1))
+ return LIBSPID_ERROR_PARAM;
+
+ /*choose read comm */
+ if (read_option == 0)
+ memset (comm_entry, 0x0, sizeof (libspid_snmp_comm_t) * (*line_num));
+
+ strcpy (last_name, "");
+ p = comm_entry;
+
+#ifdef USE_LOCK
+ struct flock lock;
+#endif /* USE_LOCK */
+
+ /* open config file */
+ if ((fp = fopen (LIBSPID_SNMPD_CONF_PATH, "r")) == NULL)
+ return LIBSPID_ERROR_SYSTEM;
+
+#ifdef USE_LOCK
+ /* set the read lock */
+ lock.l_type = F_RDLCK;
+ lock.l_whence = SEEK_SET;
+ lock.l_start = 0;
+ lock.l_len = 0;
+
+ if (fcntl (fileno (fp), F_SETLKW, &lock) < 0)
+ {
+ fclose (fp);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+
+#endif /* USE_LOCK */
+ while (fgets (buffer, buffer_len, fp))
+ {
+ /* remove the newline character */
+ if (buffer[strlen (buffer) - 1] == '\n')
+ {
+ if (buffer[strlen (buffer) - 2] == '\r')
+ {
+ /* DOS format */
+ buffer[strlen (buffer) - 2] = '\0';
+ }
+ else
+ {
+ /* Unix format */
+ buffer[strlen (buffer) - 1] = '\0';
+ }
+ }
+ /* chops chars until end of line */
+ else if (NULL ==
+ fgets (line_buffer, LIBSPID_CONFIG_LINE_MAX_LEN - 1, fp))
+ {
+#ifdef USE_LOCK
+ /* close lock */
+ fcntl (fileno (fp), F_UNLCK, &lock);
+#endif /* USE_LOCK */
+ /* close file */
+ fclose (fp);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+ /* check if it is looked key */
+ ptr = strtok_r (buffer, delimiters, &strtok_ctx);
+
+ if ((ptr == NULL) || (strlen (ptr) <= 0) || (ptr[0] == '#'))
+ continue;
+
+ if (read_option == 0
+ && strcmp (LIBSPID_SNMPD_COMM_KEY_LABEL, ptr) != 0)
+ continue;
+ if (read_option == 1
+ && strcmp (LIBSPID_SNMPD_SEC_KEY_LABEL, ptr) != 0)
+ continue;
+
+ ptr = strtok_r (NULL, delimiters, &strtok_ctx);
+
+ if ((ptr != NULL) && (strlen (ptr) > 0))
+ {
+ if (read_option == 0)
+ {
+ memcpy (p->sec_name, ptr, strlen (ptr));
+ p->sec_name[strlen (ptr)] = '\0';
+ }
+ else
+ {
+ if (strcmp (ptr, LIBSPID_SNMPD_RWGROUP_LABEL) == 0)
+ p->comm_permission =
+ LIBSPID_SNMPD_COMMUNITY_RWGROUP_VALUE;
+ else if (strcmp (ptr, LIBSPID_SNMPD_ROGROUP_LABEL) == 0)
+ p->comm_permission =
+ LIBSPID_SNMPD_COMMUNITY_ROGROUP_VALUE;
+ else if (strcmp (ptr, LIBSPID_SNMPD_WOGROUP_LABEL) == 0)
+ p->comm_permission =
+ LIBSPID_SNMPD_COMMUNITY_WOGROUP_VALUE;
+ else
+ {
+#ifdef USE_LOCK
+ /* close lock */
+ fcntl (fileno (fp), F_UNLCK, &lock);
+#endif /* USE_LOCK */
+ fclose (fp);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+ }
+ }
+
+ ptr = strtok_r (NULL, delimiters, &strtok_ctx);
+ ptr = strtok_r (NULL, delimiters, &strtok_ctx);
+
+ if ((ptr != NULL)
+ && (strlen (ptr) > 0) && strcmp (last_name, ptr) != 0)
+ {
+ if (read_option == 0)
+ {
+ memcpy (p->comm_name, ptr, strlen (ptr));
+ p->comm_name[strlen (ptr)] = '\0';
+ memcpy (last_name, p->comm_name, strlen (p->comm_name));
+ last_name[strlen (p->comm_name)] = '\0';
+ }
+ else
+ {
+ memcpy (p->sec_name, ptr, strlen (ptr));
+ p->sec_name[strlen (ptr)] = '\0';
+ memcpy (last_name, p->sec_name, strlen (p->sec_name));
+ last_name[strlen (p->sec_name)] = '\0';
+ }
+ }
+ else
+ continue;
+
+ line_count++;
+ if (line_count >= *line_num)
+ break;
+ p++;
+ }
+
+ *line_num = line_count;
+#ifdef USE_LOCK
+ /* close lock */
+ fcntl (fileno (fp), F_UNLCK, &lock);
+#endif /* USE_LOCK */
+ /* close file */
+ fclose (fp);
+ return LIBSPID_SUCCESS;
+}
+
+
+/**
+ * read a configuration list into a configuration file.<BR>
+ * A configuration line is made of a key and several elements,
+ * The key length must not be longer than LIBSPID_KEY_MAX_LEN.
+ * the line buffer must not be longer than LIBSPID_CONFIG_LINE_MAX_LEN.
+ *
+ * \param comm_entrys is the entrys for the list
+ * \param line_num is the count of lines to readed
+ * \result error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno
+ */
+libspid_error_t
+libspid_eoc_read_community_list (libspid_snmp_comm_t * comm_entry,
+ int *line_num)
+{
+ return libspid_eoc_read_snmpd_list (comm_entry, line_num, 0);
+}
+
+/**
+ * read a configuration list into a configuration file.<BR>
+ * A configuration line is made of a key and several elements,
+ * The key length must not be longer than LIBSPID_KEY_MAX_LEN.
+ * the line buffer must not be longer than LIBSPID_CONFIG_LINE_MAX_LEN.
+ *
+ * \param comm_entrys is the entrys for the list
+ * \param line_num is the count of lines to readed
+ * \result error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno
+ */
+libspid_error_t
+libspid_eoc_read_security_list (libspid_snmp_comm_t * comm_entry,
+ int *line_num)
+{
+ return libspid_eoc_read_snmpd_list (comm_entry, line_num, 1);
+}
+
+/**
+ * write a configuration line into a configuration file.<BR>
+ * A configuration line is made of a key and several elements,
+ * The key length must not be longer than LIBSPID_KEY_MAX_LEN.
+ * the line buffer must not be longer than LIBSPID_CONFIG_LINE_MAX_LEN.
+ *
+ * \param old_comm_name is the community name for old line \
+ * we use it as a key to find the old line , the first key is \
+ * LIBSPID_SNMPD_COMM_KEY_LABEL.
+ * \param old_sec_name is the security name for old line ,
+ * we will set value to it as a key for reading the security line in
+ * next fun(libspid_eoc_write_security_line)
+ * \param new_comm_name is the setting value for modify line
+ * \param new_access is the setting value for modify line , when the \
+ * value of it is 0 , that means we are writting a comm line ,if it \
+ * is 1 or 2 or 3 , it means we are writting a sec line .
+ * \param curr_comm_num is the count of current lines ,
+ * if we can't find the line before over
+ * it , we will create a new line.
+ * \result error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_NO_SPACE: no enough space in buffer or
+ * to much elements to put into element table
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno
+ */
+extern libspid_error_t
+libspid_eoc_write_snmpd_line (char *old_comm_name, char *old_sec_name,
+ char *new_comm_name, int new_access,
+ int curr_comm_num)
+{
+ FILE *fp_in, *fp_out;
+ char write_buffer[LIBSPID_CONFIG_LINE_MAX_LEN];
+ char out_filename[64];
+ char buffer[LIBSPID_CONFIG_LINE_MAX_LEN];
+ char key_buffer[16];
+ char source_ip[18];
+ const char *ptr;
+ char *strtok_ctx;
+ char delimiters[8] = LIBSPID_SNMPD_CONF_DELIMITER "\t";
+ int count = 0, fd_in = 0, seted_flag = 0, v_count = 0;
+ /*v_count: now we just have three version */
+ char last_name[16];
+
+ if (new_access < 0 || new_access > LIBSPID_SNMPD_ACCESS_NUM
+ || curr_comm_num <= 0
+ || curr_comm_num > LIBSPID_SNMPD_COMMUNITY_MAX_NB)
+ return LIBSPID_ERROR_PARAM;
+
+ if (old_sec_name == NULL || new_comm_name == NULL
+ || strlen (new_comm_name) == 0)
+ return LIBSPID_ERROR_PARAM;
+
+ if (new_access != 0 && strlen (old_sec_name) == 0)
+ return LIBSPID_ERROR_PARAM;
+
+ if (new_access == 0 && old_comm_name == NULL)
+ return LIBSPID_ERROR_PARAM;
+
+ if (new_access != 0)
+ strcpy (key_buffer, LIBSPID_SNMPD_SEC_KEY_LABEL);
+ else
+ strcpy (key_buffer, LIBSPID_SNMPD_COMM_KEY_LABEL);
+#ifdef USE_LOCK
+ struct flock lock;
+#endif /* USE_LOCK */
+
+ /* open config file */
+ if ((fd_in = open (LIBSPID_SNMPD_CONF_PATH, O_RDWR | O_CREAT, 0666)) < 0)
+ {
+ return LIBSPID_ERROR_SYSTEM;
+ }
+
+ fp_in = fdopen (fd_in, "r+");
+ /* create the modified config file */
+ sprintf (out_filename, "%sXXXXXX", LIBSPID_SNMPD_CONF_PATH);
+
+ if ((fp_out = fdopen (mkstemp (out_filename), "w")) == NULL)
+ {
+ fclose (fp_out);
+ fclose (fp_in);
+ close (fd_in);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+
+
+#ifdef USE_LOCK
+ /* set the write lock */
+ lock.l_type = F_WRLCK;
+ lock.l_whence = SEEK_SET;
+ lock.l_start = 0;
+ lock.l_len = 0;
+ if (fcntl (fd_in, F_SETLKW, &lock) < 0)
+ {
+ fclose (fp_out);
+ fclose (fp_in);
+ close (fd_in);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+
+#endif /* USE_LOCK */
+ strcpy (last_name, "");
+
+ while (fgets (buffer, LIBSPID_CONFIG_LINE_MAX_LEN - 1, fp_in))
+ {
+ sprintf (write_buffer, "%s", buffer);
+ /* check if it is looked key */
+ ptr = strtok_r (buffer, delimiters, &strtok_ctx);
+ if ((ptr == NULL) || (strlen (ptr) <= 0) ||
+ (ptr[0] == '#') || strcmp (key_buffer, ptr) != 0)
+ {
+ buffer[strlen (buffer) - 1] = '\n';
+ fprintf (fp_out, "%s", write_buffer);
+ continue;
+ }
+
+ /*there we have readed a comm or sec line , the count will be add */
+ int i = 0;
+ for (i = 0; i < 3; i++)
+ ptr = strtok_r (NULL, delimiters, &strtok_ctx);
+
+ if (new_access == 0)
+ goto comm_line;
+ if (strcmp (last_name, ptr) != 0)
+ {
+ count++;
+ memcpy (last_name, ptr, strlen (ptr));
+ last_name[strlen (ptr)] = '\0';
+ }
+
+ if (strcmp (old_sec_name, ptr) != 0)
+ {
+ fprintf (fp_out, "%s", write_buffer);
+
+ if (seted_flag == 0 && count >= curr_comm_num)
+ {
+ /*create a new line for community */
+ v_count++;
+ if (v_count < LIBSPID_SNMPD_SNMP_VERSION_NUM)
+ continue;
+
+ switch (new_access)
+ {
+ case LIBSPID_SNMPD_COMMUNITY_RWGROUP_VALUE:
+ ptr = LIBSPID_SNMPD_RWGROUP_LABEL;
+ break;
+ case LIBSPID_SNMPD_COMMUNITY_ROGROUP_VALUE:
+ ptr = LIBSPID_SNMPD_ROGROUP_LABEL;
+ break;
+ case LIBSPID_SNMPD_COMMUNITY_WOGROUP_VALUE:
+ ptr = LIBSPID_SNMPD_WOGROUP_LABEL;
+ break;
+ }
+
+ sprintf (write_buffer, "\n%s %s %s %s \n",
+ key_buffer, ptr,
+ LIBSPID_SNMPD_SECMODEL_V1_LABEL, new_comm_name);
+
+ write_buffer[strlen (write_buffer) - 1] = '\n';
+
+ fprintf (fp_out, "%s", write_buffer);
+
+ sprintf (write_buffer, "%s %s %s %s \n",
+ key_buffer, ptr,
+ LIBSPID_SNMPD_SECMODEL_V2C_LABEL, new_comm_name);
+
+ write_buffer[strlen (write_buffer) - 1] = '\n';
+
+ fprintf (fp_out, "%s", write_buffer);
+
+ sprintf (write_buffer, "%s %s %s %s \n",
+ key_buffer, ptr,
+ LIBSPID_SNMPD_SECMODEL_USM_LABEL, new_comm_name);
+
+ fprintf (fp_out, "%s", write_buffer);
+
+ seted_flag = 1;
+ }
+ continue;
+ }
+
+ switch (new_access)
+ {
+ case LIBSPID_SNMPD_COMMUNITY_RWGROUP_VALUE:
+ ptr = LIBSPID_SNMPD_RWGROUP_LABEL;
+ break;
+ case LIBSPID_SNMPD_COMMUNITY_ROGROUP_VALUE:
+ ptr = LIBSPID_SNMPD_ROGROUP_LABEL;
+ break;
+ case LIBSPID_SNMPD_COMMUNITY_WOGROUP_VALUE:
+ ptr = LIBSPID_SNMPD_WOGROUP_LABEL;
+ break;
+ }
+
+ v_count++;
+ switch (v_count)
+ {
+ case 1:
+ sprintf (write_buffer, "%s %s %s %s \n",
+ key_buffer, ptr,
+ LIBSPID_SNMPD_SECMODEL_V1_LABEL, new_comm_name);
+ break;
+ case 2:
+ sprintf (write_buffer, "%s %s %s %s \n",
+ key_buffer, ptr,
+ LIBSPID_SNMPD_SECMODEL_V2C_LABEL, new_comm_name);
+ break;
+ case 3:
+ sprintf (write_buffer, "%s %s %s %s \n",
+ key_buffer, ptr,
+ LIBSPID_SNMPD_SECMODEL_USM_LABEL, new_comm_name);
+ break;
+ default:
+ fprintf (fp_out, "%s", buffer);
+ LIBSPID_EOC_LOG_0 ("community_eoc:security_line version write error\n");
+ }
+
+ goto write_line;
+
+ comm_line:
+ count++;
+
+ if (strcmp (old_comm_name, ptr) != 0)
+ {
+ fprintf (fp_out, "%s", write_buffer);
+
+ if (seted_flag == 0 && count >= curr_comm_num)
+ {
+ /*create a new line for community */
+ memset (write_buffer, 0x0, LIBSPID_CONFIG_LINE_MAX_LEN);
+ sprintf (write_buffer, "%s %s %s %s \n",
+ LIBSPID_SNMPD_COMM_KEY_LABEL,
+ new_comm_name,
+ LIBSPID_SNMPD_DEFAULT_SOURCEIP, new_comm_name);
+ fprintf (fp_out, "%s ", write_buffer);
+ seted_flag = 1;
+ memcpy (old_sec_name, new_comm_name, strlen (new_comm_name));
+ old_sec_name[strlen (new_comm_name)] = '\0';
+ }
+ continue;
+ }
+
+ sprintf (buffer, "%s", write_buffer);
+ ptr = strtok_r (buffer, delimiters, &strtok_ctx);
+ ptr = strtok_r (NULL, delimiters, &strtok_ctx);
+ strcpy (old_sec_name, ptr);
+ old_sec_name[strlen (ptr)] = '\0';
+
+ ptr = strtok_r (NULL, delimiters, &strtok_ctx);
+
+ memcpy (source_ip, ptr, strlen (ptr));
+
+ source_ip[strlen (ptr)] = '\0';
+
+ memset (write_buffer, 0x0, LIBSPID_CONFIG_LINE_MAX_LEN);
+
+ sprintf (write_buffer, "%s %s %s %s \n",
+ LIBSPID_SNMPD_COMM_KEY_LABEL,
+ new_comm_name, source_ip, new_comm_name);
+
+ write_line:
+ if (strlen (write_buffer) > LIBSPID_CONFIG_LINE_MAX_LEN - 1)
+ {
+ fclose (fp_out);
+ fclose (fp_in);
+#ifdef USE_LOCK
+ /* close lock */
+ fcntl (fd_in, F_UNLCK, &lock);
+#endif /* USE_LOCK */
+ close (fd_in);
+ return LIBSPID_ERROR_NO_SPACE;
+ }
+
+ fprintf (fp_out, "%s", write_buffer);
+ seted_flag = 1;
+ }
+
+ fclose (fp_out);
+
+ fclose (fp_in);
+#ifdef USE_LOCK
+ /* close lock */
+ fcntl (fd_in, F_UNLCK, &lock);
+#endif /* USE_LOCK */
+ close (fd_in);
+
+ if (rename (out_filename, LIBSPID_SNMPD_CONF_PATH) < 0)
+ {
+ syslog (LOG_WARNING,
+ "%s : rename (errno=%d)\n", __FUNCTION__, errno);
+ }
+
+ return LIBSPID_SUCCESS;
+}
+
+
+/**
+ * write a configuration line into a configuration file.<BR>
+ * A configuration line is made of a key and several elements,
+ * The key length must not be longer than LIBSPID_KEY_MAX_LEN.
+ * the line buffer must not be longer than LIBSPID_CONFIG_LINE_MAX_LEN.
+ *
+ * \param old_comm_name is the community name for old line \
+ * we use it as a key to find the old line , the first key is \
+ * LIBSPID_SNMPD_COMM_KEY_LABEL.
+ * \param old_sec_name is the security name for old line ,
+ * we will set value to it as a key for reading the security line in
+ * next fun(libspid_eoc_write_security_line)
+ * \param new_comm_name is the setting value for modify line
+ * \param curr_comm_num is the count of current lines ,
+ * if we can't find the line before over
+ * it , we will create a new line.
+ * \result error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno
+ */
+libspid_error_t
+libspid_eoc_write_community_line (char *old_comm_name, char *old_sec_name,
+ char *new_comm_name, int curr_comm_num)
+{
+ return libspid_eoc_write_snmpd_line (old_comm_name, old_sec_name,
+ new_comm_name, 0, curr_comm_num);
+}
+
+/**
+ * write a configuration line into a configuration file.<BR>
+ * A configuration line is made of a key and several elements,
+ * we will modify or insert three lines at same time . this just\
+ * because we have diffrent version for snmp .
+ * The key length must not be longer than LIBSPID_KEY_MAX_LEN.
+ * the line buffer must not be longer than LIBSPID_CONFIG_LINE_MAX_LEN.
+ *
+ * \param old_sec_name is the security name for old lines \
+ * we use it as a key to find the old lines , the first key is \
+ * LIBSPID_SNMPD_SEC_KEY_LABEL.
+ * \param old_sec_name is the security name for old line ,
+ * we will set value to it as a key for reading the security line in
+ * next fun(libspid_eoc_write_security_line)
+ * \param new_access is the setting value for modify line
+ * \param curr_comm_num is the count of current lines ,
+ * if we can't find the line before over
+ * it , we will create a new line.
+ * \result error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_NO_SPACE: no enough space in buffer or
+ * to much elements to put into element table
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno
+ */
+libspid_error_t
+libspid_eoc_write_security_line (char *old_sec_name, char *new_comm_name,
+ int new_access, int curr_comm_num)
+{
+ char old_comm_name[16] = { 0 };
+
+ return libspid_eoc_write_snmpd_line (old_comm_name, old_sec_name,
+ new_comm_name, new_access,
+ curr_comm_num);
+}
+
+/**
+ * remove a configuration line into a configuration file.<BR>
+ * A configuration line is made of a key and several elements,
+
+ * The key length must not be longer than LIBSPID_KEY_MAX_LEN.
+ * the line buffer must not be longer than LIBSPID_CONFIG_LINE_MAX_LEN.
+ *
+ * \param old_comm_name is the community name for old line . \
+ * If the old_comm_name equels "" , it means we are removing a sec line .
+ * we use it as a key to find the old line , the first key is \
+ * LIBSPID_SNMPD_COMM_KEY_LABEL.
+ * \param old_sec_name is the security name for old line ,
+ * when we removing comm , we will set value to it as a key for reading \
+ * the security line , when we removing sec , it's the key for sec line
+ * \param curr_comm_num is the count of current lines ,
+ * if we can't find the line before over
+ * it , we will return sucess.
+ * \result error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno
+ * \return LIBSPID_ERROR_NOT_FOUND: can't find the remove line
+ */
+extern libspid_error_t
+libspid_eoc_remove_snmpd_line (char *old_comm_name, char *old_sec_name,
+ int curr_comm_num)
+{
+ FILE *fp_in, *fp_out;
+ char write_buffer[LIBSPID_CONFIG_LINE_MAX_LEN];
+ char out_filename[64];
+ char buffer[LIBSPID_CONFIG_LINE_MAX_LEN];
+ char key_buffer[16];
+ char *ptr, *strtok_ctx;
+ char delimiters[8] = LIBSPID_SNMPD_CONF_DELIMITER "\t";
+ int count = 0, fd_in = 0, removed_flag = 0;
+
+ /*v_count: now we just have three version */
+ char last_sec[16];
+
+ if (old_sec_name == NULL || old_comm_name == NULL || curr_comm_num <= 0)
+ return LIBSPID_ERROR_PARAM;
+
+ if (strlen (old_comm_name) == 0 && strlen (old_sec_name) == 0)
+ return LIBSPID_ERROR_PARAM;
+
+ if (strlen (old_comm_name) == 0)
+ strcpy (key_buffer, LIBSPID_SNMPD_SEC_KEY_LABEL);
+ else
+ strcpy (key_buffer, LIBSPID_SNMPD_COMM_KEY_LABEL);
+
+#ifdef USE_LOCK
+ struct flock lock;
+#endif /* USE_LOCK */
+ /* open config file */
+ if ((fd_in = open (LIBSPID_SNMPD_CONF_PATH, O_RDWR | O_CREAT, 0666)) < 0)
+ {
+ return LIBSPID_ERROR_SYSTEM;
+ }
+ fp_in = fdopen (fd_in, "r+");
+ /* create the modified config file */
+ sprintf (out_filename, "%sXXXXXX", LIBSPID_SNMPD_CONF_PATH);
+
+ if ((fp_out = fdopen (mkstemp (out_filename), "w")) == NULL)
+ {
+ fclose (fp_out);
+ fclose (fp_in);
+ close (fd_in);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+
+#ifdef USE_LOCK
+ /* set the write lock */
+ lock.l_type = F_WRLCK;
+ lock.l_whence = SEEK_SET;
+ lock.l_start = 0;
+ lock.l_len = 0;
+ if (fcntl (fd_in, F_SETLKW, &lock) < 0)
+ {
+ fclose (fp_out);
+ fclose (fp_in);
+ close (fd_in);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+
+#endif /* USE_LOCK */
+ strcpy (last_sec, "");
+ while (fgets (buffer, LIBSPID_CONFIG_LINE_MAX_LEN - 1, fp_in))
+ {
+ sprintf (write_buffer, "%s", buffer);
+ /* check if it is looked key */
+ ptr = strtok_r (buffer, delimiters, &strtok_ctx);
+
+ if ((ptr == NULL) || (strlen (ptr) <= 0) ||
+ (ptr[0] == '#') || strcmp (key_buffer, ptr) != 0)
+ {
+ buffer[strlen (buffer) - 1] = '\n';
+ fprintf (fp_out, "%s", write_buffer);
+ continue;
+ }
+
+
+ /*there we have readed a comm or sec line , the count will add */
+ int i = 0;
+ for (i = 0; i < 3; i++)
+ ptr = strtok_r (NULL, delimiters, &strtok_ctx);
+
+ if (strlen (old_comm_name) == 0)
+ {
+ if (strcmp (last_sec, ptr) != 0)
+ {
+ count++;
+ if (removed_flag == 0 && count >= curr_comm_num)
+ {
+ syslog (LOG_WARNING,
+ "%s : we can't find remove line\n",
+ __FUNCTION__);
+
+ fclose (fp_out);
+ fclose (fp_in);
+#ifdef USE_LOCK
+ /* close lock */
+ fcntl (fd_in, F_UNLCK, &lock);
+#endif /* USE_LOCK */
+ close (fd_in);
+
+ return LIBSPID_ERROR_NOT_FOUND;
+ }
+ memcpy (last_sec, ptr, strlen (ptr));
+ last_sec[strlen (ptr)] = '\0';
+ }
+ if (strcmp (old_sec_name, ptr) != 0)
+ {
+ fprintf (fp_out, "%s", write_buffer);
+ continue;
+ }
+
+ }
+ else
+ {
+ count++;
+ if (removed_flag == 0 && count >= curr_comm_num)
+ {
+ syslog (LOG_WARNING,
+ "%s : we can't find remove line\n",
+ __FUNCTION__);
+
+ fclose (fp_out);
+ fclose (fp_in);
+#ifdef USE_LOCK
+ /* close lock */
+ fcntl (fd_in, F_UNLCK, &lock);
+#endif /* USE_LOCK */
+ close (fd_in);
+
+ return LIBSPID_ERROR_NOT_FOUND;
+ }
+
+ if (strcmp (old_comm_name, ptr) != 0)
+ {
+ fprintf (fp_out, "%s", write_buffer);
+ continue;
+ }
+
+ sprintf (buffer, "%s", write_buffer);
+ ptr = strtok_r (buffer, delimiters, &strtok_ctx);
+ ptr = strtok_r (NULL, delimiters, &strtok_ctx);
+ strcpy (old_sec_name, ptr);
+ old_sec_name[strlen (ptr)] = '\0';
+ }
+
+ memset (write_buffer, 0x0, LIBSPID_CONFIG_LINE_MAX_LEN);
+ sprintf (write_buffer, "%s", "");
+ fprintf (fp_out, "%s", write_buffer);
+
+ removed_flag = 1;
+ }
+ fclose (fp_out);
+ fclose (fp_in);
+#ifdef USE_LOCK
+ /* close lock */
+ fcntl (fd_in, F_UNLCK, &lock);
+#endif /* USE_LOCK */
+ close (fd_in);
+
+ if (rename (out_filename, LIBSPID_SNMPD_CONF_PATH) < 0)
+ {
+ syslog (LOG_WARNING,
+ "%s : rename (errno=%d)\n", __FUNCTION__, errno);
+ }
+
+
+
+ return LIBSPID_SUCCESS;
+}
+
+
+/**
+ * remove a configuration line into a configuration file.<BR>
+ * A configuration line is made of a key and several elements,
+
+ * The key length must not be longer than LIBSPID_KEY_MAX_LEN.
+ * the line buffer must not be longer than LIBSPID_CONFIG_LINE_MAX_LEN.
+ *
+ * \param old_comm_name is the community name for old line \
+ * we use it as a key to find the old line , the first key is \
+ * LIBSPID_SNMPD_COMM_KEY_LABEL.
+ * \param old_sec_name is the security name for old line ,
+ * we will set value to it as a key for reading the security line in
+ * next fun(libspid_eoc_write_security_line)
+ * \param curr_comm_num is the count of current lines ,
+ * if we can't find the line before over
+ * it , we will return sucess.
+ * \result error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno
+ * \return LIBSPID_ERROR_NOT_FOUND: can't find the remove line
+ */
+libspid_error_t
+libspid_eoc_remove_community_line (char *old_comm_name,
+ char *old_sec_name, int curr_comm_num)
+{
+ return libspid_eoc_remove_snmpd_line (old_comm_name,
+ old_sec_name, curr_comm_num);
+}
+
+
+
+/**
+ * remove a configuration line into a configuration file.<BR>
+ * A configuration line is made of a key and several elements,
+ * we will remove three lines at once . this just\
+ * because we have diffrent version for snmp .
+ * The key length must not be longer than LIBSPID_KEY_MAX_LEN.
+ * the line buffer must not be longer than LIBSPID_CONFIG_LINE_MAX_LEN.
+ *
+ * \param old_sec_name is the security name for old lines \
+ * we use it as a key to find the old lines , the first key is \
+ * LIBSPID_SNMPD_SEC_KEY_LABEL.
+ * \result error type (LIBSPID_SUCCESS if success)
+ * \param new_access is the setting value for modify line
+ * \param curr_comm_num is the count of current lines ,
+ * if we can't find the line before over
+ * it , we will return success.
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_NO_SPACE: no enough space in buffer or
+ * to much elements to put into element table
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno
+ * \return LIBSPID_ERROR_NOT_FOUND: can't find the remove line
+ */
+libspid_error_t
+libspid_eoc_remove_security_line (char *old_sec_name, int curr_comm_num)
+{
+ char old_comm_name[16] = { 0 };
+
+ return libspid_eoc_remove_snmpd_line (old_comm_name,
+ old_sec_name, curr_comm_num);
+}
diff --git a/cleopatre/application/libspid/src/config_backup_eoc.c b/cleopatre/application/libspid/src/config_backup_eoc.c
new file mode 100644
index 0000000000..6b5ef0e240
--- /dev/null
+++ b/cleopatre/application/libspid/src/config_backup_eoc.c
@@ -0,0 +1,607 @@
+/* SPC300 bundle {{{
+ *
+ * Copyright (C) 2012 MStar
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file application/libspid/src/config_backup_eoc.c
+ * \brief Functions specific to EoC config backup
+ * \ingroup libspid
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <syslog.h>
+#include <arpa/inet.h>
+#include <errno.h>
+#include <ctype.h>
+
+#include "libspid.h"
+
+/**
+ * Returns the config_backup entry for a config_backup table with the
+ * given index.<BR>
+ * \param index of the config_backup server index
+ * \param eoc_config_backup_entry config_backup List entry
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_NOT_FOUND: entry not found
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+extern libspid_error_t
+libspid_eoc_config_backup_get (char *index,
+ libspid_eoc_config_backup_entry_t * entry)
+{
+ const char delimiters[2] = LIBSPID_CONFIG_BACKUP_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;
+
+ /* check input parameters */
+ if ((index == NULL) || (entry == NULL))
+ {
+ return LIBSPID_ERROR_PARAM;
+ }
+
+ strcpy (key, index);
+ strcpy (entry->index, index);
+ error = libspid_config_read_line (LIBSPID_CONFIG_BACKUP_PATH,
+ delimiters, key, &elt_number,
+ elt, buffer,
+ LIBSPID_CONFIG_LINE_MAX_LEN);
+
+ if (LIBSPID_SUCCESS != error)
+ {
+ return error;
+ }
+
+ if (elt_number < LIBSPID_CONFIG_BACKUP_PARAM_NUM)
+ {
+ strcpy (entry->protocol, "");
+ strcpy (entry->ip_address, "");
+ strcpy (entry->server_port, "");
+ strcpy (entry->login, "");
+ strcpy (entry->password, "");
+ strcpy (entry->type, "");
+ strcpy (entry->fileName, "");
+ strcpy (entry->result, "");
+ }
+ else
+ {
+ strcpy (entry->protocol, elt[0]);
+ strcpy (entry->ip_address, elt[1]);
+ strcpy (entry->server_port, elt[2]);
+ strcpy (entry->login, elt[3]);
+ strcpy (entry->password, elt[4]);
+ strcpy (entry->type, elt[5]);
+ strcpy (entry->fileName, elt[6]);
+ strcpy (entry->result, elt[7]);
+ }
+
+ return LIBSPID_SUCCESS;
+}
+
+
+/**
+ * Returns the whole Config backup Table from configuration file in a pointer
+ * to an array of Config backup Table entries.<BR>
+ * \param entry pointer to an array of config_backup entries
+ * \param count pointer to an integer for count of entries,this
+ * param is in/out,you must give the eoc_config_backup_entry
+ * max num as in,and will be returnd the num found in the config file
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_NOT_FOUND: entry not found
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+extern libspid_error_t
+libspid_eoc_config_backup_get_list (libspid_eoc_config_backup_entry_t * entry,
+ unsigned int *count)
+{
+ const char delimiters[2] = LIBSPID_CONFIG_BACKUP_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;
+ libspid_eoc_config_backup_entry_t *entry_ptr;
+ void *user_data = NULL;
+
+ /* check input parameters */
+ if ((entry == NULL) || (count == NULL))
+ return LIBSPID_ERROR_PARAM;
+
+ memset (key, 0x0, sizeof (key));
+ memset (entry, 0x0, sizeof (entry));
+ *count = 0;
+
+ entry_ptr = entry;
+
+ /* get the first key */
+ error = libspid_config_read_line_repetitive (LIBSPID_CONFIG_BACKUP_PATH,
+ delimiters, key, &elt_number,
+ elt, buffer,
+ LIBSPID_CONFIG_LINE_MAX_LEN,
+ &user_data);
+ if (LIBSPID_SUCCESS != error)
+ return error;
+
+ for (; *count < LIBSPID_CONFIG_BACKUP_ITEM_MAX && strcmp (key, "");
+ (*count)++)
+ {
+ /* Get a line from the conf file */
+ elt_number = LIBSPID_CONFIG_ELT_MAX_NB;
+ error =
+ libspid_config_read_line_repetitive (LIBSPID_CONFIG_BACKUP_PATH,
+ delimiters, key, &elt_number,
+ elt, buffer,
+ LIBSPID_CONFIG_LINE_MAX_LEN,
+ &user_data);
+ if (LIBSPID_SUCCESS != error)
+ return error;
+
+ strcpy (entry_ptr->index, buffer);
+ if (elt_number < LIBSPID_CONFIG_BACKUP_PARAM_NUM)
+ {
+ strcpy (entry_ptr->protocol, "");
+ strcpy (entry_ptr->ip_address, "");
+ strcpy (entry_ptr->server_port, "");
+ strcpy (entry_ptr->login, "");
+ strcpy (entry_ptr->password, "");
+ strcpy (entry_ptr->type, "");
+ strcpy (entry_ptr->fileName, "");
+ strcpy (entry_ptr->result, "");
+ }
+ else
+ {
+ strcpy (entry_ptr->protocol, elt[0]);
+ strcpy (entry_ptr->ip_address, elt[1]);
+ strcpy (entry_ptr->server_port, elt[2]);
+ strcpy (entry_ptr->login, elt[3]);
+ strcpy (entry_ptr->password, elt[4]);
+ strcpy (entry_ptr->type, elt[5]);
+ strcpy (entry_ptr->fileName, elt[6]);
+ strcpy (entry_ptr->result, elt[7]);
+ }
+
+ entry_ptr++;
+ }
+ libspid_config_read_line_repetitive (0, 0, 0, 0, 0, 0, 0, &user_data);
+ return LIBSPID_SUCCESS;
+}
+
+/**
+ * Set a config backup with the given index.<BR>
+ * \param index config backup index
+ * \param entry config backup definition
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_NOT_FOUND: entry not found
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+extern libspid_error_t
+libspid_eoc_config_backup_set (char *index,
+ libspid_eoc_config_backup_entry_t * entry)
+{
+ const char delimiter = LIBSPID_CONFIG_BACKUP_DELIMITER[0];
+ char *elt[LIBSPID_CONFIG_BACKUP_PARAM_NUM];
+ libspid_error_t ret;
+ int i;
+
+ /* check input parameters */
+ if ((index == NULL) || (entry == NULL))
+ return LIBSPID_ERROR_PARAM;
+
+ /* allocate buffers */
+ for (i = 0; i < LIBSPID_CONFIG_BACKUP_PARAM_NUM; i++)
+ {
+ elt[i] = (char *) malloc (256 * sizeof (char));
+ if (NULL != elt[i])
+ memset (elt[i], 0, 256);
+ else
+ {
+ LIBSPID_EOC_LOG_2 ("%s: error allocating element buffers"
+ " (errno=%d)", __FUNCTION__, errno);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+ }
+
+ strcpy (elt[0], entry->protocol);
+ strcpy (elt[1], entry->ip_address);
+ strcpy (elt[2], entry->server_port);
+ strcpy (elt[3], entry->login);
+ strcpy (elt[4], entry->password);
+ strcpy (elt[5], entry->type);
+ strcpy (elt[6], entry->fileName);
+ strcpy (elt[7], entry->result);
+
+ ret = libspid_config_write_line (LIBSPID_CONFIG_BACKUP_PATH,
+ delimiter, index,
+ LIBSPID_CONFIG_BACKUP_PARAM_NUM, elt);
+
+ /* free element buffers */
+ for (i = 0; i < LIBSPID_CONFIG_BACKUP_PARAM_NUM; i++)
+ {
+ if (elt[i])
+ {
+ free (elt[i]);
+ elt[i] = NULL;
+ }
+ }
+
+ if (ret != LIBSPID_SUCCESS)
+ {
+ LIBSPID_EOC_LOG_2 ("%s: cannot write config backup entry (errno=%d)",
+ __FUNCTION__, errno);
+ return ret;
+ }
+
+ return LIBSPID_SUCCESS;
+}
+
+/**
+ * Remove the config backup entry with the given index.<BR>
+ * \param index config backup index
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_NOT_FOUND: entry not found
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+extern libspid_error_t
+libspid_eoc_config_backup_remove (char *index)
+{
+ libspid_error_t ret;
+
+ /* check input parameters */
+ if (index == NULL)
+ return LIBSPID_ERROR_PARAM;
+
+ ret = libspid_config_remove_line (LIBSPID_CONFIG_BACKUP_PATH,
+ LIBSPID_CONFIG_BACKUP_DELIMITER, index);
+
+ if (ret != LIBSPID_SUCCESS)
+ {
+ LIBSPID_EOC_LOG_2 ("%s: cannot remove config backup entry (errno=%d)",
+ __FUNCTION__, errno);
+ return ret;
+ }
+
+ return LIBSPID_SUCCESS;
+}
+
+/**
+ * Remove all config_backup table list.<BR>
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+extern libspid_error_t
+libspid_eoc_config_backup_flush (void)
+{
+ int ret;
+ const char delimiters[2] = LIBSPID_CONFIG_BACKUP_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;
+
+ while (1)
+ {
+ /* Get the key of the current line */
+ memset (key, 0x0, sizeof (key));
+ ret = libspid_config_read_line (LIBSPID_CONFIG_BACKUP_PATH,
+ delimiters,
+ key, &elt_number, elt, buffer,
+ LIBSPID_CONFIG_LINE_MAX_LEN);
+
+ if (LIBSPID_SUCCESS != ret)
+ return ret;
+
+ if (strcmp (key, "") == 0)
+ break;
+
+ error = libspid_eoc_config_backup_remove (key);
+ if (LIBSPID_SUCCESS != error)
+ return error;
+ }
+
+ return LIBSPID_SUCCESS;
+}
+
+/** internal helper function for check parameters of confbak.conf */
+int
+config_backup_check_input_parameters (libspid_eoc_config_backup_entry_t *
+ entry,
+ libspid_config_backup_check_error_t *
+ error_types)
+{
+ int error_number = 0;
+ int ret = 0;
+ char *pnumber;
+ int value = 0;
+
+ struct in_addr ipaddr;
+
+ if (entry == NULL || error_types == NULL)
+ {
+ return -1;
+ }
+
+ /** check ip format */
+ if (0 == inet_aton ((char *) entry->ip_address, &ipaddr))
+ {
+ ret = -1;
+ }
+
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_CONFIG_BACKUP_IP_FORMAT;
+ error_number++;
+ ret = 0;
+ }
+
+ /** check backup index field value */
+ value = strtol (entry->index, &pnumber, 10);
+ if (*pnumber != '\0' || strcmp (entry->index, "") == 0)
+ ret = -1;
+ else
+ ret = (value < 0 || value >= LIBSPID_CONFIG_BACKUP_ITEM_MAX) ? -1 : 0;
+
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_CONFIG_BACKUP_INDEX_FORMAT;
+ error_number++;
+ ret = 0;
+ }
+
+ /** check backup protocol field value */
+ value = strtol (entry->protocol, &pnumber, 10);
+ if (*pnumber != '\0' || strcmp (entry->protocol, "") == 0)
+ ret = -1;
+ else
+ ret = (value < 0 || value > 4) ? -1 : 0;
+
+ if (ret != 0)
+ {
+ error_types[error_number] =
+ LIBSPID_ERROR_CONFIG_BACKUP_PROTOCOL_FORMAT;
+ error_number++;
+ ret = 0;
+ }
+
+ /** check backup port field value */
+ int i;
+
+ if (strlen (entry->server_port) >= 6)
+ ret = -1;
+ else
+ {
+ for (i = 0; i < (int)strlen (entry->server_port); i++)
+ {
+ entry->server_port[i] = tolower (entry->server_port[i]);
+ if (!
+ (entry->server_port[i] >= '0'
+ && entry->server_port[i] <= '9'))
+ {
+ ret = -1;
+ break;
+ }
+ }
+ }
+ if (ret != 0)
+ {
+ error_types[error_number] =
+ LIBSPID_ERROR_CONFIG_BACKUP_SERVER_PORT_FORMAT;
+ error_number++;
+ ret = 0;
+ }
+
+ /** check backup login field value */
+ ret = (strlen (entry->login) >= LIBSPID_CONFIG_BACKUP_STRING_LIMIT) ?
+ -1 : 0;
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_CONFIG_BACKUP_LOGIN_FORMAT;
+ error_number++;
+ ret = 0;
+ }
+
+ /** check backup password field value */
+ ret = (strlen (entry->password) >= LIBSPID_CONFIG_BACKUP_STRING_LIMIT) ?
+ -1 : 0;
+ if (ret != 0)
+ {
+ error_types[error_number] =
+ LIBSPID_ERROR_CONFIG_BACKUP_PASSWORD_FORMAT;
+ error_number++;
+ ret = 0;
+ }
+
+ /** check backup fileName field value */
+ ret = (strlen (entry->fileName) >= LIBSPID_CONFIG_BACKUP_STRING_LIMIT) ?
+ -1 : 0;
+ if (ret != 0)
+ {
+ error_types[error_number] =
+ LIBSPID_ERROR_CONFIG_BACKUP_FILENAME_FORMAT;
+ error_number++;
+ ret = 0;
+ }
+
+ /** check backup type field value */
+ value = strtol (entry->type, &pnumber, 10);
+ if (*pnumber != '\0' || strcmp (entry->type, "") == 0)
+ ret = -1;
+ else
+ ret = (value != 1) ? -1 : 0;
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_CONFIG_BACKUP_TYPE_FORMAT;
+ error_number++;
+ ret = 0;
+ }
+ /** check backup type field value */
+ if (0 != strcmp (entry->result, LIBSPID_CONFIG_BACKUP_RESULT_FAIL) &&
+ 0 != strcmp (entry->result, LIBSPID_CONFIG_BACKUP_RESULT_SUC) &&
+ 0 != strcmp (entry->result, LIBSPID_CONFIG_BACKUP_RESULT_NONE))
+
+ {
+ ret = -1;
+ }
+ else
+ {
+ ret = 0;
+ }
+
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_CONFIG_BACKUP_RESULT_FORMAT;
+ error_number++;
+ ret = 0;
+ }
+ return error_number;
+}
+
+/** internal function for compare theip*/
+static int
+cmp_string_index (const void *p1, const void *p2)
+{
+ return strcmp ((char *) ((libspid_eoc_config_backup_entry_t *) p1)->index,
+ (char *) ((libspid_eoc_config_backup_entry_t *) p2)->
+ index);
+}
+
+
+/**
+ * Check confbak.conf file
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_CHECK: check utility failed
+ */
+extern libspid_error_t
+libspid_eoc_config_backup_check (void)
+{
+ int count_cnf = LIBSPID_CONFIG_BACKUP_ITEM_MAX;
+ int ret = -1;
+ int i = 0;
+ libspid_eoc_config_backup_entry_t
+ entries_cnf[LIBSPID_CONFIG_BACKUP_ITEM_MAX];
+ libspid_eoc_config_backup_entry_t
+ entries_cnf_sort[LIBSPID_CONFIG_BACKUP_ITEM_MAX];
+ libspid_eoc_config_backup_entry_t entry;
+ unsigned char index_not_unique[4];
+
+ LIBSPID_EOC_LOG_1 ("%s: Check confbak.conf...", __FUNCTION__);
+ /** obtain the maclimitation list from configuration file */
+ ret = libspid_eoc_config_backup_get_list (entries_cnf,
+ (unsigned int *) &count_cnf);
+
+ if (ret != LIBSPID_SUCCESS)
+ {
+ return ret;
+ }
+
+ memcpy (entries_cnf_sort, entries_cnf,
+ count_cnf * sizeof (libspid_eoc_config_backup_entry_t));
+ /* sort confbak.conf */
+ qsort (entries_cnf_sort, count_cnf,
+ sizeof (libspid_eoc_config_backup_entry_t), cmp_string_index);
+
+ /* check if Index is unique key */
+ for (i = 0; i < count_cnf - 1; i++)
+ {
+ if (strcmp ((char *) entries_cnf_sort[i].index,
+ (char *) entries_cnf_sort[i + 1].index) == 0)
+ {
+ LIBSPID_EOC_LOG_0 ("index_not_unique have.");
+ strcpy ((char *) index_not_unique,
+ (char *) entries_cnf_sort[i].index);
+ break;
+ }
+ }
+
+ for (i = 0; i < count_cnf; i++)
+ {
+ int number_of_error = 0;
+ libspid_config_backup_check_error_t
+ error_types[LIBSPID_CONFIG_BACKUP_PARAM_NUM];
+ entry = entries_cnf[i];
+
+ /** check format of the input parameters */
+ number_of_error = config_backup_check_input_parameters (&entry,
+ error_types);
+
+ /* if Index is not unique key */
+ if (strcmp ((char *) index_not_unique, (char *) entry.index) == 0)
+ {
+ number_of_error += 1;
+ error_types[number_of_error - 1] =
+ LIBSPID_ERROR_CONFIG_BACKUP_INDEX_DUPLICATE;
+ }
+
+ if (number_of_error > 0)
+ {
+ int j = 0;
+ ret = LIBSPID_ERROR_CHECK;
+ libspid_boolean_t unique_index = LIBSPID_TRUE;
+ LIBSPID_EOC_LOG_1 ("Error in line:%d\n", i + 2);
+
+ for (j = 0; j < number_of_error; j++)
+ {
+ switch (error_types[j])
+ {
+ case LIBSPID_ERROR_CONFIG_BACKUP_IP_FORMAT:
+ LIBSPID_EOC_LOG_0 ("Malformed Ip address.");
+ break;
+ case LIBSPID_ERROR_CONFIG_BACKUP_INDEX_FORMAT:
+ LIBSPID_EOC_LOG_1
+ ("Wrong index value specified (expected:" " 0..%d)",
+ LIBSPID_CONFIG_BACKUP_ITEM_MAX - 1);
+ break;
+ case LIBSPID_ERROR_CONFIG_BACKUP_INDEX_DUPLICATE:
+ unique_index = LIBSPID_FALSE;
+ LIBSPID_EOC_LOG_1 ("index %s is not unique key.",
+ index_not_unique);
+ break;
+ case LIBSPID_ERROR_CONFIG_BACKUP_PROTOCOL_FORMAT:
+ LIBSPID_EOC_LOG_0 ("Wrong protocol value specified"
+ "(expected: 1..4)");
+ break;
+ case LIBSPID_ERROR_CONFIG_BACKUP_SERVER_PORT_FORMAT:
+ LIBSPID_EOC_LOG_0 ("Wrong server port val");
+ break;
+ case LIBSPID_ERROR_CONFIG_BACKUP_LOGIN_FORMAT:
+ LIBSPID_EOC_LOG_0 ("Wrong login length longer");
+ break;
+ case LIBSPID_ERROR_CONFIG_BACKUP_PASSWORD_FORMAT:
+ LIBSPID_EOC_LOG_0 ("Wrong password length longer");
+ break;
+ case LIBSPID_ERROR_CONFIG_BACKUP_TYPE_FORMAT:
+ LIBSPID_EOC_LOG_0 ("Wrong type value specified "
+ "(expected: 1)");
+ break;
+ case LIBSPID_ERROR_CONFIG_BACKUP_FILENAME_FORMAT:
+ LIBSPID_EOC_LOG_0 ("Wrong filename length longer");
+ break;
+ case LIBSPID_ERROR_CONFIG_BACKUP_RESULT_FORMAT:
+ LIBSPID_EOC_LOG_0 ("Wrong result value specified"
+ " (expected: 0..2)");
+ break;
+ default:
+ break;
+ }
+ }
+ if (unique_index == LIBSPID_FALSE)
+ break;
+ }
+ else if (number_of_error == -1)
+ return LIBSPID_ERROR_PARAM;
+ }
+ return ret;
+}
diff --git a/cleopatre/application/libspid/src/config_item.c b/cleopatre/application/libspid/src/config_item.c
index 20da1e17b6..ee58ffd428 100644
--- a/cleopatre/application/libspid/src/config_item.c
+++ b/cleopatre/application/libspid/src/config_item.c
@@ -66,7 +66,7 @@ libspid_error_t libspid_config_read_items (const char *filename, const char * co
}
/* open config file */
- if((fp = fopen(filename, "r")) == NULL)
+ if ((fp = fopen (filename, "r")) == NULL)
{
//syslog(LOG_WARNING, "libspid_read_config_param: cannot open %s (errno=%d)\n", filename, errno);
return LIBSPID_ERROR_SYSTEM;
@@ -80,7 +80,7 @@ libspid_error_t libspid_config_read_items (const char *filename, const char * co
&& (nb_read < count))
{
/* get the label */
- ptr = strtok_r(buffer, LIBSPID_CONFIG_DELIMITER " \t", &strtok_ctx);
+ ptr = strtok_r (buffer, LIBSPID_CONFIG_DELIMITER " \t", &strtok_ctx);
/* check if it is the wanted label */
if((ptr == NULL) || (strlen(ptr) <= 0) || (*ptr == '#'))
continue;
@@ -104,17 +104,17 @@ libspid_error_t libspid_config_read_items (const char *filename, const char * co
}
/* remove space and '=' before the value */
- ptr += strlen(ptr) + 1;
- while(isblank(*ptr) || (*ptr == *LIBSPID_CONFIG_DELIMITER))
+ ptr += strlen (ptr) + 1;
+ while (isblank (*ptr) || (*ptr == *LIBSPID_CONFIG_DELIMITER))
ptr++;
- ptr = strtok_r(ptr, "\n\r", &strtok_ctx);
+ ptr = strtok_r (ptr, "\n\r", &strtok_ctx);
/* init value to empty */
*(values[i]) = '\0';
if(ptr != NULL)
{
/* remove spaces at the end of value */
- blank_ptr = ptr + strlen(ptr) - 1;
- while((blank_ptr >= ptr) && isblank(*blank_ptr))
+ blank_ptr = ptr + strlen (ptr) - 1;
+ while ((blank_ptr >= ptr) && isblank (*blank_ptr))
{
*blank_ptr = '\0';
blank_ptr--;
@@ -122,7 +122,7 @@ libspid_error_t libspid_config_read_items (const char *filename, const char * co
/* check for buffer space to copy the value */
if ((int) strlen (ptr) >= buffers_len[i])
{
- fclose(fp);
+ fclose (fp);
return LIBSPID_ERROR_NO_SPACE;
}
strcpy(values[i], ptr);
@@ -204,17 +204,18 @@ libspid_error_t libspid_config_write_items (const char *filename, const char * c
}
/* open config file */
- if ( (fd_in = open(filename, O_RDONLY | O_CREAT, 0666)) < 0 )
+ if ((fd_in = open (filename, O_RDONLY | O_CREAT, 0666)) < 0)
{
//syslog(LOG_WARNING, "libspid_write_config_param: cannot open %s (errno=%d)", filename, errno);
return LIBSPID_ERROR_SYSTEM;
}
- fp_in = fdopen(fd_in, "r");
+ fp_in = fdopen (fd_in, "r");
/* create the modified config file */
- sprintf(out_filename, "%sXXXXXX", filename);
- if ( (fp_out = fdopen(mkstemp(out_filename), "w")) == NULL )
+ sprintf (out_filename, "%sXXXXXX", filename);
+ if ((fp_out = fdopen (mkstemp (out_filename), "w")) == NULL)
{
- fclose(fp_in);
+ fclose (fp_in);
+ close (fd_in);
return LIBSPID_ERROR_SYSTEM;
}
@@ -223,9 +224,9 @@ libspid_error_t libspid_config_write_items (const char *filename, const char * c
unsigned int nb_written = 0; /* number of written items */
/* find the label to modify */
- while ( fgets(buffer, LIBSPID_CONFIG_LINE_MAX_LEN - 1, fp_in) )
+ while (fgets (buffer, LIBSPID_CONFIG_LINE_MAX_LEN - 1, fp_in))
{
- tmp_line = strdup(buffer);
+ tmp_line = strdup (buffer);
/* get the label */
ptr = strtok_r(buffer, LIBSPID_CONFIG_DELIMITER " \t", &strtok_ctx);
diff --git a/cleopatre/application/libspid/src/config_line.c b/cleopatre/application/libspid/src/config_line.c
index b0f52553a7..0bb6328e88 100644
--- a/cleopatre/application/libspid/src/config_line.c
+++ b/cleopatre/application/libspid/src/config_line.c
@@ -50,6 +50,12 @@
* elements
* \param buffer whole line working buffer
* \param buffer_len working buffer length
+ * \param user_data pointer to open file. if this pointer is different from
+ * zero, after successfull reading it points to open file. If the end of file
+ * is reached pointer is zero. If some error occur during reading file is
+ * closed and pointer is nullified. When this pointer is zero, file is open
+ * and read from the beginning. It is used to repetitively read whole file
+ * line by line. Usefull when file contains a lot of entries.
* \return error type (LIBSPID_SUCCESS if success)
* \return LIBSPID_ERROR_PARAM: bad input parameters
* \return LIBSPID_ERROR_NOT_FOUND: key not found or no more
@@ -59,9 +65,10 @@
* \return LIBSPID_ERROR_SYSTEM: system error, see errno
*/
-libspid_error_t libspid_config_read_line(const char *filename, const char* delimiters, char *key, unsigned int *elt_number, char *elt[], char *buffer, unsigned int buffer_len)
+libspid_error_t
+libspid_config_read_line_repetitive (const char *filename, const char* delimiters, char *key, unsigned int *elt_number, char *elt[], char *buffer, unsigned int buffer_len, void ** user_data)
{
- FILE *fp;
+ FILE *fp = NULL;
char line_buffer[LIBSPID_CONFIG_LINE_MAX_LEN];
char line2_buffer[LIBSPID_CONFIG_LINE_MAX_LEN];
char *ptr, *strtok_ctx;
@@ -70,78 +77,90 @@ libspid_error_t libspid_config_read_line(const char *filename, const char* delim
#endif /* USE_LOCK */
unsigned int max_elt_number;
int is_key_found;
+ libspid_boolean_t key_is_mac = LIBSPID_FALSE;
+ libspid_error_t status = LIBSPID_ERROR_PARAM;
/* check input parameters */
- if ( (filename == NULL) || (delimiters == NULL) || (key == NULL) || (elt_number == NULL)
- || (elt == NULL) || (buffer == NULL) )
+ if ((filename == NULL) || (delimiters == NULL) || (key == NULL) || (elt_number == NULL)
+ || (elt == NULL) || (buffer == NULL))
{
- return LIBSPID_ERROR_PARAM;
+ goto read_cleanup;
}
- if ( (strlen(delimiters) <= 0) || (*elt_number > LIBSPID_CONFIG_ELT_MAX_NB)
- || (buffer_len <= 0) )
+ if ((strlen (delimiters) <= 0) || (*elt_number > LIBSPID_CONFIG_ELT_MAX_NB)
+ || (buffer_len <= 0))
{
- return LIBSPID_ERROR_PARAM;
+ goto read_cleanup;
}
/* check delimiter validity */
- if ( strchr(delimiters, '\n') || strchr(delimiters, '\r') )
+ if (strchr (delimiters, '\n') || strchr (delimiters, '\r'))
{
- return LIBSPID_ERROR_PARAM;
+ goto read_cleanup;
}
/* check key validity */
- if ( strlen(key) > LIBSPID_CONFIG_KEY_MAX_LEN )
+ if (strlen (key) > LIBSPID_CONFIG_KEY_MAX_LEN)
{
- return LIBSPID_ERROR_PARAM;
+ goto read_cleanup;
}
- if ( strpbrk(key, delimiters) )
+ if (strpbrk (key, delimiters))
{
- return LIBSPID_ERROR_PARAM;
+ goto read_cleanup;
}
- /* open config file */
- if ( (fp = fopen(filename, "r")) == NULL )
- {
- //syslog(LOG_WARNING, "%s: cannot open %s (errno=%d)\n", __FUNCTION__, filename, errno);
- return LIBSPID_ERROR_SYSTEM;
- }
+ /* check if key is MAC address */
+ if (libspid_check_key_mac_format (key) == LIBSPID_SUCCESS)
+ key_is_mac = LIBSPID_TRUE;
-#ifdef USE_LOCK
- /* set the read lock */
- lock.l_type = F_RDLCK;
- lock.l_whence = SEEK_SET;
- lock.l_start = 0;
- lock.l_len = 0;
- if ( fcntl(fileno(fp), F_SETLKW, &lock) < 0 )
+ /* User already opened file. */
+ if (user_data && *user_data)
{
- //syslog(LOG_WARNING, "%s: lock set failed (errno=%d)\n)", __FUNCTION__, errno);
- fclose(fp);
- return LIBSPID_ERROR_SYSTEM;
+ fp = (FILE *)*user_data;
}
+ else
+ {
+ /* open config file */
+ if ((fp = fopen (filename, "r")) == NULL)
+ {
+ return LIBSPID_ERROR_SYSTEM;
+ }
+#ifdef USE_LOCK
+ /* set the read lock */
+ lock.l_type = F_RDLCK;
+ lock.l_whence = SEEK_SET;
+ lock.l_start = 0;
+ lock.l_len = 0;
+ if (fcntl (fileno(fp), F_SETLKW, &lock) < 0)
+ {
+ fclose (fp);
+ return LIBSPID_ERROR_SYSTEM;
+ }
#endif /* USE_LOCK */
-
+ if (user_data)
+ *user_data = fp;
+ }
max_elt_number = *elt_number;
*elt_number = 0;
is_key_found = LIBSPID_FALSE;
- if ( strlen(key) > 0 )
+ if (strlen (key) > 0)
{
- while ( fgets(buffer, buffer_len, fp) )
+ while (fgets (buffer, buffer_len, fp))
{
/* remove the newline character*/
- if ( buffer[strlen(buffer) - 1] == '\n' )
+ if (buffer[strlen (buffer) - 1] == '\n')
{
- if ( buffer[strlen(buffer) - 2] == '\r')
+ if (buffer[strlen (buffer) - 2] == '\r')
{
/* DOS format */
- buffer[strlen(buffer) - 2] = '\0';
+ buffer[strlen (buffer) - 2] = '\0';
}
else
{
/* Unix format */
- buffer[strlen(buffer) - 1] = '\0';
+ buffer[strlen (buffer) - 1] = '\0';
}
}
/* chops chars until end of line */
@@ -153,18 +172,31 @@ libspid_error_t libspid_config_read_line(const char *filename, const char* delim
#endif /* USE_LOCK */
/* close file */
fclose (fp);
+ if (user_data)
+ *user_data = NULL;
return LIBSPID_ERROR_SYSTEM;
}
+ /* if key is mac address change to lower case */
+ if (key_is_mac == LIBSPID_TRUE)
+ {
+ int i = 0;
+
+ for (i=0; i<LIBSPID_MAC_STR_LEN; i++)
+ {
+ buffer[i] = tolower (buffer[i]);
+ key[i] = tolower (key[i]);
+ }
+ }
/* get the index */
- ptr = strtok_r(buffer, delimiters, &strtok_ctx);
+ ptr = strtok_r (buffer, delimiters, &strtok_ctx);
/* check if it is looked key */
- if ( (ptr == NULL) || (strlen(ptr) <= 0) || (*ptr == '#') || strcmp(ptr, key) )
+ if ((ptr == NULL) || (strlen (ptr) <= 0) || (*ptr == '#') || strcmp (ptr, key))
continue;
is_key_found = LIBSPID_TRUE;
/* get all elements */
- while ( (ptr = strtok_r(NULL, delimiters, &strtok_ctx)) && (*elt_number < max_elt_number) )
+ while ((ptr = strtok_r (NULL, delimiters, &strtok_ctx)) && (*elt_number < max_elt_number))
{
elt[*elt_number] = ptr;
*elt_number += 1;
@@ -182,39 +214,114 @@ libspid_error_t libspid_config_read_line(const char *filename, const char* delim
{
#ifdef USE_LOCK
/* close lock */
- fcntl(fileno(fp), F_UNLCK, &lock);
+ fcntl (fileno (fp), F_UNLCK, &lock);
#endif /* USE_LOCK */
/* close file */
- fclose(fp);
+ fclose (fp);
+ if (user_data)
+ *user_data = NULL;
return LIBSPID_ERROR_NOT_FOUND;
}
/* get next key */
*key = '\0';
- while(fgets(line2_buffer, LIBSPID_CONFIG_LINE_MAX_LEN, fp))
+ long pos = ftell(fp);
+ while (fgets (line2_buffer, LIBSPID_CONFIG_LINE_MAX_LEN, fp))
{
/* remove the newline */
- if(line2_buffer[strlen(line2_buffer) - 1] == '\n')
+ if (line2_buffer[strlen (line2_buffer) - 1] == '\n')
{
- line2_buffer[strlen(line2_buffer) - 1] = '\0';
+ line2_buffer[strlen (line2_buffer) - 1] = '\0';
}
/* get the index */
- ptr = strtok_r(line2_buffer, delimiters, &strtok_ctx);
+ ptr = strtok_r (line2_buffer, delimiters, &strtok_ctx);
/* check if it is looked key */
if ((ptr == NULL) || (strlen(ptr) <= 0) || (*ptr == '#')
|| (strlen(ptr) >= LIBSPID_CONFIG_KEY_MAX_LEN))
continue;
strcpy (key, ptr);
+ /* if key is mac address change to lower case */
+ if (libspid_check_key_mac_format (key) == LIBSPID_SUCCESS)
+ {
+ int i = 0;
+
+ for (i=0; i<LIBSPID_MAC_STR_LEN; i++)
+ key[i] = tolower (key[i]);
+ }
break;
}
+ fseek (fp, pos, SEEK_SET);
+
+ status = LIBSPID_SUCCESS;
+ read_cleanup:
+ /* On error close the open file and clear pointer. */
+ if (!user_data || status != LIBSPID_SUCCESS)
+ {
+ if (user_data && *user_data)
+ {
+ fp = (FILE *)*user_data;
+ *user_data = NULL;
+ }
#ifdef USE_LOCK
- /* close lock */
- fcntl(fileno(fp), F_UNLCK, &lock);
+ /* close lock */
+ if (fp)
+ fcntl (fileno (fp), F_UNLCK, &lock);
#endif /* USE_LOCK */
- /* close file */
- fclose(fp);
+ /* close file */
+ if (fp)
+ fclose (fp);
+ }
- return LIBSPID_SUCCESS;
+ return status;
+}
+
+/**
+ * Read a configuration line from a file.<BR>
+ * A configuration line is composed of a unique key, which
+ * is playing the role of index, and several elements. All are
+ * separated by a delimiter and terminated by a carriage
+ * return.<BR>
+ * When line is read, it is put inside a provided buffer, and
+ * then processed. If the searched key is found, the provided
+ * element table is filled with pointers to each found line
+ * elements.If the key is an empty string, the key of the
+ * first line is returned into the key buffer.<BR>
+ * Key buffer must not be smaller than LIBSPID_MAX_KEY_LEN.<BR>
+ * When line elements are returned, the key buffer if filled
+ * with the next found key in the next line. If there is no more
+ * line to read, the key buffer contains a empty string. The
+ * element number parameter is updated with the number of
+ * elements filled into the element table.
+ *
+ * \param filename full path filename of a configuration file
+ * \param delimiters string containing all accepted delimiters
+ * (usually space and tab characters)
+ * \param key key of the line to read; updated with the key of
+ * the next line
+ * \param elt_number maximum number of elements to read, updated
+ * with the real number of read elements if less is found
+ * \param elt array of pointers where are stored pointers to
+ * elements
+ * \param buffer whole line working buffer
+ * \param buffer_len working buffer length
+ * \param user_data pointer to open file. if this pointer is different from
+ * zero, after successfull reading it points to open file. If the end of file
+ * is reached pointer is zero. If some error occur during reading file is
+ * closed and pointer is nullified. When this pointer is zero, file is open
+ * and read from the beginning. It is used to repetitively read whole file
+ * line by line. Usefull when file contains a lot of entries.
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_NOT_FOUND: key not found or no more
+ * line to read
+ * \return LIBSPID_ERROR_NO_SPACE: no enough space in buffer or
+ * to much elements to put into element table
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno
+ */
+libspid_error_t
+libspid_config_read_line (const char *filename, const char* delimiters, char *key, unsigned int *elt_number, char *elt[], char *buffer, unsigned int buffer_len)
+{
+ return libspid_config_read_line_repetitive (filename, delimiters, key, elt_number, elt, buffer, buffer_len, 0);
}
/**
@@ -239,7 +346,8 @@ libspid_error_t libspid_config_read_line(const char *filename, const char* delim
* \return LIBSPID_ERROR_SYSTEM: system error, see errno
*/
-libspid_error_t libspid_config_write_line(const char *filename, const char delimiter, const char *key, unsigned int elt_number, char *elt[])
+libspid_error_t
+libspid_config_write_line (const char *filename, const char delimiter, const char *key, unsigned int elt_number, char *elt[])
{
char buffer[LIBSPID_CONFIG_LINE_MAX_LEN], key_buffer[LIBSPID_CONFIG_KEY_MAX_LEN + 1];
char out_filename[64];
@@ -252,52 +360,60 @@ libspid_error_t libspid_config_write_line(const char *filename, const char delim
#ifdef USE_LOCK
struct flock lock;
#endif /* USE_LOCK */
+ char key_temp[LIBSPID_CONFIG_KEY_MAX_LEN + 1];
+ libspid_boolean_t key_is_mac = LIBSPID_FALSE;
/* add given delimiter to the set of delimiters */
- strncat(delimiters, &delimiter, 1);
+ strncat (delimiters, &delimiter, 1);
/* check input parameters */
- if ( (filename == NULL) || (key == NULL) || (elt == NULL) || (elt_number > LIBSPID_CONFIG_ELT_MAX_NB) )
+ if ((filename == NULL) || (key == NULL) || (elt == NULL) || (elt_number > LIBSPID_CONFIG_ELT_MAX_NB))
{
return LIBSPID_ERROR_PARAM;
}
/* check sizes */
- if ( (strlen(key) == 0) )
+ if ((strlen (key) == 0))
{
return LIBSPID_ERROR_PARAM;
}
/* check delimiter validity */
- if ( (delimiter == '\n') || (delimiter == '\r') )
+ if ((delimiter == '\n') || (delimiter == '\r'))
{
return LIBSPID_ERROR_PARAM;
}
/* check key validity */
- if ( strchr(key, delimiter) != NULL )
+ if (strchr (key, delimiter) != NULL)
{
return LIBSPID_ERROR_PARAM;
}
- if ( strlen(key) > LIBSPID_CONFIG_KEY_MAX_LEN )
+ if (strlen (key) > LIBSPID_CONFIG_KEY_MAX_LEN)
{
return LIBSPID_ERROR_PARAM;
}
+ strcpy (key_temp, key);
+ if (libspid_check_key_mac_format (key_temp) == LIBSPID_SUCCESS)
+ {
+ key_is_mac = LIBSPID_TRUE;
+ }
+
/* open config file */
- if ( (fd_in = open(filename, O_RDWR | O_CREAT, 0666)) < 0 )
+ if ((fd_in = open (filename, O_RDWR | O_CREAT, 0666)) < 0)
{
//syslog(LOG_WARNING, "%s: cannot open %s (errno=%d)", __FUNCTION__, filename, errno);
return LIBSPID_ERROR_SYSTEM;
}
- fp_in = fdopen(fd_in, "r");
+ fp_in = fdopen (fd_in, "r");
/* create the modified config file */
- sprintf(out_filename, "%sXXXXXX", filename);
- if ( (fp_out = fdopen(mkstemp(out_filename), "w")) == NULL )
+ sprintf (out_filename, "%sXXXXXX", filename);
+ if ((fp_out = fdopen (mkstemp (out_filename), "w")) == NULL)
{
- fclose(fp_out);
- fclose(fp_in);
- close(fd_in);
+ fclose (fp_out);
+ fclose (fp_in);
+ close (fd_in);
return LIBSPID_ERROR_SYSTEM;
}
@@ -307,84 +423,95 @@ libspid_error_t libspid_config_write_line(const char *filename, const char delim
lock.l_whence = SEEK_SET;
lock.l_start = 0;
lock.l_len = 0;
- if (fcntl(fd_in, F_SETLKW, &lock) < 0)
+ if (fcntl (fd_in, F_SETLKW, &lock) < 0)
{
//syslog(LOG_WARNING, "%s: lock set failed (errno=%d)\n)", __FUNCTION__, errno);
- fclose(fp_out);
- fclose(fp_in);
- close(fd_in);
+ fclose (fp_out);
+ fclose (fp_in);
+ close (fd_in);
return LIBSPID_ERROR_SYSTEM;
}
#endif /* USE_LOCK */
/* find the label to modify */
- while ( fgets(buffer, LIBSPID_CONFIG_LINE_MAX_LEN - 1, fp_in) )
+ while (fgets (buffer, LIBSPID_CONFIG_LINE_MAX_LEN - 1, fp_in))
{
/* fill working copy for key */
memset(key_buffer, '\0', LIBSPID_CONFIG_KEY_MAX_LEN + 1);
- strncpy(key_buffer, buffer, LIBSPID_CONFIG_KEY_MAX_LEN);
+ strncpy (key_buffer, buffer, LIBSPID_CONFIG_KEY_MAX_LEN);
+ /* if key is mac address change to lower case */
+ if (key_is_mac == LIBSPID_TRUE)
+ {
+ int i = 0;
+
+ for (i=0; i<LIBSPID_MAC_STR_LEN; i++)
+ {
+ key_buffer[i] = tolower (key_buffer[i]);
+ key_temp[i] = tolower (key_temp[i]);
+ }
+ }
/* get the index */
- ptr = strtok_r(key_buffer, delimiters, &strtok_ctx);
- if ( (ptr == NULL) || (strlen(ptr) <= 0) || (*ptr == '#') || strcmp(ptr, key) )
+ ptr = strtok_r (key_buffer, delimiters, &strtok_ctx);
+ if ((ptr == NULL) || (strlen (ptr) <= 0) || (*ptr == '#') || strcmp (ptr, key_temp))
{
- fprintf(fp_out, "%s", buffer);
+ fprintf (fp_out, "%s", buffer);
continue;
}
is_key_found = LIBSPID_TRUE;
/* create the new line */
- sprintf(buffer, "%s%c", key, delimiter);
+ sprintf (buffer, "%s%c", key_temp, delimiter);
for (index = 0; index < elt_number; index++)
{
/* check for buffer overflow */
- if ( ( strlen(buffer) + 1 /*delimiter*/ + strlen(elt[index]) + 1 /*'\0'*/ ) > LIBSPID_CONFIG_LINE_MAX_LEN )
+ if ((strlen (buffer) + 1 /*delimiter*/ + strlen (elt[index]) + 1 /*'\0'*/ ) > LIBSPID_CONFIG_LINE_MAX_LEN)
{
- fclose(fp_out);
- fclose(fp_in);
+ fclose (fp_out);
+ fclose (fp_in);
#ifdef USE_LOCK
/* close lock */
- fcntl(fd_in, F_UNLCK, &lock);
+ fcntl (fd_in, F_UNLCK, &lock);
#endif /* USE_LOCK */
- close(fd_in);
+ close (fd_in);
return LIBSPID_ERROR_NO_SPACE;
}
- sprintf(buffer + strlen(buffer), "%s%c", elt[index], delimiter);
+ sprintf (buffer + strlen (buffer), "%s%c", elt[index], delimiter);
}
/* string should end with last element, so erase last delimiter and finish the line */
- buffer[strlen(buffer) - 1] = '\n';
- fprintf(fp_out, "%s", buffer);
+ buffer[strlen (buffer) - 1] = '\n';
+ fprintf (fp_out, "%s", buffer);
}
if (!is_key_found)
{
/* add new key + element at the end of file */
- sprintf(buffer, "%s%c", key, delimiter);
- for(index = 0; index < elt_number; index++)
+ sprintf (buffer, "%s%c", key_temp, delimiter);
+ for (index = 0; index < elt_number; index++)
{
/* check for buffer overflow */
- if ( ( strlen(buffer) + 1 /*delimiter*/ + strlen(elt[index]) + 1 /*'\0'*/ ) > LIBSPID_CONFIG_LINE_MAX_LEN )
+ if ((strlen (buffer) + 1 /*delimiter*/ + strlen (elt[index]) + 1 /*'\0'*/ ) > LIBSPID_CONFIG_LINE_MAX_LEN)
{
- fclose(fp_out);
- fclose(fp_in);
+ fclose (fp_out);
+ fclose (fp_in);
#ifdef USE_LOCK
/* close lock */
- fcntl(fd_in, F_UNLCK, &lock);
+ fcntl (fd_in, F_UNLCK, &lock);
#endif /* USE_LOCK */
- close(fd_in);
+ close (fd_in);
return LIBSPID_ERROR_NO_SPACE;
}
- sprintf(buffer + strlen(buffer), "%s%c", elt[index], delimiter );
+ sprintf (buffer + strlen (buffer), "%s%c", elt[index], delimiter );
}
/* string should end with last element, so erase last delimiter and finish the line */
- buffer[strlen(buffer) - 1] = '\n';
- fprintf(fp_out, "%s", buffer);
+ buffer[strlen (buffer) - 1] = '\n';
+ fprintf (fp_out, "%s", buffer);
}
- fclose(fp_out);
- fclose(fp_in);
+ fclose (fp_out);
+ fclose (fp_in);
#ifdef USE_LOCK
/* close lock */
- fcntl(fd_in, F_UNLCK, &lock);
+ fcntl (fd_in, F_UNLCK, &lock);
#endif /* USE_LOCK */
- close(fd_in);
- if ( rename(out_filename, filename) < 0 )
+ close (fd_in);
+ if (rename (out_filename, filename) < 0)
{
//syslog(LOG_WARNING, "%s : rename (errno=%d)\n", __FUNCTION__, errno);
}
@@ -408,7 +535,8 @@ libspid_error_t libspid_config_write_line(const char *filename, const char delim
* \return LIBSPID_ERROR_SYSTEM: system error, see errno
*/
-libspid_error_t libspid_config_remove_line(const char *filename, const char *delimiters, const char *key)
+libspid_error_t
+libspid_config_remove_line (const char *filename, const char *delimiters, const char *key)
{
char buffer[LIBSPID_CONFIG_LINE_MAX_LEN], key_buffer[LIBSPID_CONFIG_KEY_MAX_LEN + 1];
char out_filename[64];
@@ -419,48 +547,56 @@ libspid_error_t libspid_config_remove_line(const char *filename, const char *del
#ifdef USE_LOCK
struct flock lock;
#endif /* USE_LOCK */
+ char key_temp[LIBSPID_CONFIG_KEY_MAX_LEN + 1];
+ libspid_boolean_t key_is_mac = LIBSPID_FALSE;
/* check input parameters */
- if ( (filename == NULL) || (delimiters == NULL) || (key == NULL) )
+ if ((filename == NULL) || (delimiters == NULL) || (key == NULL))
{
return LIBSPID_ERROR_PARAM;
}
/* check sizes */
- if ( (strlen(key) == 0) || (strlen(delimiters) == 0) )
+ if ((strlen (key) == 0) || (strlen (delimiters) == 0))
{
return LIBSPID_ERROR_PARAM;
}
/* check delimiter validity */
- if ( strchr(delimiters, '\n') || strchr(delimiters, '\r') )
+ if (strchr (delimiters, '\n') || strchr (delimiters, '\r'))
{
return LIBSPID_ERROR_PARAM;
}
/* check key validity */
- if ( strpbrk(key, delimiters) )
+ if (strpbrk (key, delimiters))
{
return LIBSPID_ERROR_PARAM;
}
- if ( strlen(key) > LIBSPID_CONFIG_KEY_MAX_LEN )
+ if (strlen (key) > LIBSPID_CONFIG_KEY_MAX_LEN)
{
return LIBSPID_ERROR_PARAM;
}
+ strcpy (key_temp, key);
+ if (libspid_check_key_mac_format (key_temp) == LIBSPID_SUCCESS)
+ {
+ key_is_mac = LIBSPID_TRUE;
+ }
+
/* open config file */
- if ( (fd_in = open(filename, O_RDWR | O_CREAT, 0666)) < 0 )
+ if ((fd_in = open (filename, O_RDWR | O_CREAT, 0666)) < 0)
{
//syslog(LOG_WARNING, "%s: cannot open %s (errno=%d)", __FUNCTION__, filename, errno);
return LIBSPID_ERROR_SYSTEM;
}
- fp_in = fdopen(fd_in, "r");
+ fp_in = fdopen (fd_in, "r");
/* create the modified config file */
- sprintf(out_filename, "%sXXXXXX", filename);
- if((fp_out = fdopen(mkstemp(out_filename), "w")) == NULL)
+ sprintf (out_filename, "%sXXXXXX", filename);
+ if ((fp_out = fdopen (mkstemp (out_filename), "w")) == NULL)
{
- fclose(fp_in);
- close(fd_in);
+ fclose (fp_in);
+ close (fd_in);
return LIBSPID_ERROR_SYSTEM;
}
@@ -470,50 +606,62 @@ libspid_error_t libspid_config_remove_line(const char *filename, const char *del
lock.l_whence = SEEK_SET;
lock.l_start = 0;
lock.l_len = 0;
- if ( fcntl(fd_in, F_SETLKW, &lock) < 0 )
+ if (fcntl(fd_in, F_SETLKW, &lock) < 0)
{
//syslog(LOG_WARNING, "%s: lock set failed (errno=%d)\n)", __FUNCTION__, errno);
- fclose(fp_out);
- fclose(fp_in);
- close(fd_in);
+ fclose (fp_out);
+ fclose (fp_in);
+ close (fd_in);
return LIBSPID_ERROR_SYSTEM;
}
#endif /* USE_LOCK */
/* find the label to modify */
- while ( fgets(buffer, LIBSPID_CONFIG_LINE_MAX_LEN - 1, fp_in) )
+ while (fgets (buffer, LIBSPID_CONFIG_LINE_MAX_LEN - 1, fp_in))
{
/* fill working copy for key */
- memset(key_buffer, '\0', LIBSPID_CONFIG_KEY_MAX_LEN + 1);
- strncpy(key_buffer, buffer, LIBSPID_CONFIG_KEY_MAX_LEN);
+ memset (key_buffer, '\0', LIBSPID_CONFIG_KEY_MAX_LEN + 1);
+ strncpy (key_buffer, buffer, LIBSPID_CONFIG_KEY_MAX_LEN);
+ /* if key is mac address change to lower case */
+ if (key_is_mac == LIBSPID_TRUE)
+ {
+ int i = 0;
+
+ for (i=0; i<LIBSPID_MAC_STR_LEN; i++)
+ {
+ key_buffer[i] = tolower (key_buffer[i]);
+ key_temp[i] = tolower (key_temp[i]);
+ }
+ }
/* get the index */
- ptr = strtok_r(key_buffer, delimiters, &strtok_ctx);
+ ptr = strtok_r (key_buffer, delimiters, &strtok_ctx);
- if ( (ptr == NULL) || (strlen(ptr) <= 0) || (*ptr == '#') || strcmp(ptr, key) )
+ if ((ptr == NULL) || (strlen (ptr) <= 0) || (*ptr == '#') || strcmp (ptr, key_temp))
{
- fprintf(fp_out, "%s", buffer);
+ fprintf (fp_out, "%s", buffer);
continue;
}
is_key_found = LIBSPID_TRUE;
}
- fclose(fp_out);
- fclose(fp_in);
+ fclose (fp_out);
+ fclose (fp_in);
#ifdef USE_LOCK
/* close lock */
- fcntl(fd_in, F_UNLCK, &lock);
+ fcntl (fd_in, F_UNLCK, &lock);
#endif /* USE_LOCK */
- close(fd_in);
- if(is_key_found)
+ close (fd_in);
+ if (is_key_found)
{
- if ( rename(out_filename, filename) < 0 )
+ if (rename (out_filename, filename) < 0)
{
//syslog(LOG_WARNING, "%s : rename (errno=%d)\n", __FUNCTION__, errno);
}
}
else
{
- remove(out_filename);
+ remove (out_filename);
return LIBSPID_ERROR_NOT_FOUND;
}
return LIBSPID_SUCCESS;
}
+
diff --git a/cleopatre/application/libspid/src/current_alarm_eoc.c b/cleopatre/application/libspid/src/current_alarm_eoc.c
new file mode 100644
index 0000000000..bc27874ffb
--- /dev/null
+++ b/cleopatre/application/libspid/src/current_alarm_eoc.c
@@ -0,0 +1,160 @@
+/* SPC300 bundle {{{
+ *
+ * Copyright (C) 2010 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file application/libspid/src/current_alarm_eoc.c
+ * \brief Functions specific to EoC current alarms
+ * \ingroup libspid
+ *
+ */
+
+#include <sys/types.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <getopt.h>
+#include <syslog.h>
+#include <assert.h>
+#include <unistd.h>
+#include <errno.h>
+#include <fcntl.h>
+
+#include "libspid.h"
+
+/**
+ * Returns the current alarm entry for given string with OID.<BR>
+ * \param OID alarm OID
+ * \param current_alarm_entry current alarm entry
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_NOT_FOUND: entry not found
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+extern libspid_error_t
+libspid_eoc_current_alarm_get (char *oid, libspid_eoc_current_alarm_entry_t
+ *current_alarm_entry)
+{
+ const char delimiters[2] = LIBSPID_ALARM_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;
+
+ /* check input parameters */
+ if ((oid == NULL) || (current_alarm_entry == NULL))
+ return LIBSPID_ERROR_PARAM;
+
+ memset (current_alarm_entry, 0x0, sizeof (current_alarm_entry));
+
+ /* copy OID to avoid it being corrupted */
+ strcpy (key, oid);
+
+ strcpy (current_alarm_entry->oid, oid);
+
+ error = libspid_config_read_line (LIBSPID_ALARM_INFO_PATH,
+ delimiters, key, &elt_number,
+ elt, buffer,
+ LIBSPID_CONFIG_LINE_MAX_LEN);
+ if (LIBSPID_SUCCESS != error)
+ return error;
+
+ /* check if required number of parameters is read */
+ if (elt_number < LIBSPID_CURRENT_ALARMS_PARAM_NUM)
+ {
+ current_alarm_entry->state = 0;
+ current_alarm_entry->value = 0;
+
+ }
+ else
+ {
+ current_alarm_entry->state = atoi (elt[0]);
+ current_alarm_entry->value = atoi (elt[1]);
+ }
+
+ return LIBSPID_SUCCESS;
+}
+
+/**
+ * Returns list of current alarm entries from info file in a
+ * pointer to an array of current alarm entries.<BR>
+ * \param current_alarm_entry pointer to an array of current alarm entries
+ * \param count pointer to an integer for number of current alarm entries
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_NOT_FOUND: entry not found
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+extern libspid_error_t
+libspid_eoc_current_alarm_get_list (libspid_eoc_current_alarm_entry_t
+ *current_alarm_entry, int *count)
+{
+ const char delimiters[2] = LIBSPID_ALARM_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;
+ libspid_eoc_current_alarm_entry_t *entry_ptr;
+
+ /* check input parameters */
+ if ((current_alarm_entry == NULL) || (count == NULL))
+ return LIBSPID_ERROR_PARAM;
+
+ memset (key, 0x0, sizeof (key));
+ memset (current_alarm_entry, 0x0, sizeof (current_alarm_entry));
+ *count = 0;
+
+ entry_ptr = current_alarm_entry;
+
+ error = libspid_config_read_line (LIBSPID_ALARM_INFO_PATH,
+ delimiters, key, &elt_number,
+ elt, buffer,
+ LIBSPID_CONFIG_LINE_MAX_LEN);
+ /* get the first key */
+ if (LIBSPID_SUCCESS != error)
+ return error;
+
+ /* check if alarm.info is empty */
+ if (strcmp (key, "") == 0)
+ return LIBSPID_SUCCESS;
+
+ for (*count = 1; *count < LIBSPID_CURRENT_ALARMS_MAX_NUM; (*count)++)
+ {
+ /* Get a line from the info file */
+ elt_number = LIBSPID_CONFIG_ELT_MAX_NB;
+ error = libspid_config_read_line (LIBSPID_ALARM_INFO_PATH,
+ delimiters, key, &elt_number,
+ elt, buffer,
+ LIBSPID_CONFIG_LINE_MAX_LEN);
+ if (LIBSPID_SUCCESS != error)
+ return error;
+
+ strcpy (entry_ptr->oid, buffer);
+ /* check if required number of parameters is read */
+ if (elt_number < LIBSPID_CURRENT_ALARMS_PARAM_NUM)
+ {
+ entry_ptr->state = 0;
+ entry_ptr->value = 0;
+ }
+ else
+ {
+ entry_ptr->state = atoi (elt[0]);
+ entry_ptr->value = atoi (elt[1]);
+ }
+
+ if (strcmp (key, "") == 0)
+ break;
+ if (*count == LIBSPID_CURRENT_ALARMS_MAX_NUM)
+ break;
+
+ entry_ptr++;
+ }
+
+
+ return LIBSPID_SUCCESS;
+}
diff --git a/cleopatre/application/libspid/src/discrete_alarm_eoc.c b/cleopatre/application/libspid/src/discrete_alarm_eoc.c
new file mode 100644
index 0000000000..588a418ba1
--- /dev/null
+++ b/cleopatre/application/libspid/src/discrete_alarm_eoc.c
@@ -0,0 +1,237 @@
+/* SPC300 bundle {{{
+ *
+ * Copyright (C) 2010 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file application/libspid/src/discrete_alarm_eoc.c
+ * \brief Functions specific to EoC discrete alarms
+ * \ingroup libspid
+ *
+ */
+
+#include <sys/types.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <getopt.h>
+#include <syslog.h>
+#include <assert.h>
+#include <unistd.h>
+#include <errno.h>
+#include <fcntl.h>
+
+#include "libspid.h"
+
+/**
+ * Returns the discrete alarm entry for given string with OID.<BR>
+ * \param OID alarm OID
+ * \param discrete_alarm_entry dicrete alarm entry
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_NOT_FOUND: entry not found
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+extern libspid_error_t
+libspid_eoc_discrete_alarm_get (char *oid, libspid_eoc_discrete_alarm_entry_t
+ *discrete_alarm_entry)
+{
+ const char delimiters[2] = LIBSPID_DISCRETE_ALARM_CONF_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;
+
+ /* check input parameters */
+ if ((oid == NULL) || (discrete_alarm_entry == NULL))
+ return LIBSPID_ERROR_PARAM;
+
+ memset (discrete_alarm_entry, 0x0, sizeof (discrete_alarm_entry));
+
+ /* copy OID to avoid it being corrupted */
+ strcpy (key, oid);
+
+ strcpy (discrete_alarm_entry->oid, oid);
+
+ error = libspid_config_read_line (LIBSPID_DISCRETE_ALARM_CONF_PATH,
+ delimiters, key, &elt_number,
+ elt, buffer,
+ LIBSPID_CONFIG_LINE_MAX_LEN);
+ if (LIBSPID_SUCCESS != error)
+ return error;
+
+ /* check if required number of parameters is read */
+ if (elt_number < LIBSPID_DISCRETE_ALARMS_PARAM_NUM)
+ {
+ discrete_alarm_entry->trigger = 0;
+ discrete_alarm_entry->enable = 0;
+ discrete_alarm_entry->state = 0;
+
+ }
+ else
+ {
+ discrete_alarm_entry->trigger = atoi (elt[0]);
+ discrete_alarm_entry->enable = atoi (elt[1]);
+ discrete_alarm_entry->state = atoi (elt[2]);
+ }
+ return LIBSPID_SUCCESS;
+}
+
+/**
+ * Returns list of discrete alarm entries from configuration file in a
+ * pointer to an array of discrete alarm entries.<BR>
+ * \param discrete_alarm_entry pointer to an array of discrete alarm entries
+ * \param count pointer to an integer for number of discrete alarm entries
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_NOT_FOUND: entry not found
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+extern libspid_error_t
+libspid_eoc_discrete_alarm_get_list (libspid_eoc_discrete_alarm_entry_t
+ *discrete_alarm_entry, int *count)
+{
+ const char delimiters[2] = LIBSPID_DISCRETE_ALARM_CONF_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;
+ libspid_eoc_discrete_alarm_entry_t *entry_ptr;
+
+ /* check input parameters */
+ if ((discrete_alarm_entry == NULL) || (count == NULL))
+ return LIBSPID_ERROR_PARAM;
+
+ memset (key, 0x0, sizeof (key));
+ memset (discrete_alarm_entry, 0x0, sizeof (discrete_alarm_entry));
+ *count = 0;
+
+ entry_ptr = discrete_alarm_entry;
+
+ error = libspid_config_read_line (LIBSPID_DISCRETE_ALARM_CONF_PATH,
+ delimiters, key, &elt_number,
+ elt, buffer,
+ LIBSPID_CONFIG_LINE_MAX_LEN);
+ /* get the first key */
+ if (LIBSPID_SUCCESS != error)
+ return error;
+
+ /* check if discrete_alarm.conf is empty */
+ if (strcmp (key, "") == 0)
+ return LIBSPID_SUCCESS;
+
+ for (*count = 1; *count < LIBSPID_DISCRETE_ALARMS_MAX_NUM; (*count)++)
+ {
+ /* Get a line from the conf file */
+ elt_number = LIBSPID_CONFIG_ELT_MAX_NB;
+ error = libspid_config_read_line (LIBSPID_DISCRETE_ALARM_CONF_PATH,
+ delimiters, key, &elt_number,
+ elt, buffer,
+ LIBSPID_CONFIG_LINE_MAX_LEN);
+ if (LIBSPID_SUCCESS != error)
+ return error;
+
+ strcpy (entry_ptr->oid, buffer);
+ /* check if required number of parameters is read */
+ if (elt_number < LIBSPID_DISCRETE_ALARMS_PARAM_NUM)
+ {
+ entry_ptr->trigger = 0;
+ entry_ptr->enable = 0;
+ entry_ptr->state = 0;
+ }
+ else
+ {
+ entry_ptr->trigger = atoi (elt[0]);
+ entry_ptr->enable = atoi (elt[1]);
+ entry_ptr->state = atoi (elt[2]);
+ }
+
+ if (strcmp (key, "") == 0)
+ break;
+ if (*count == LIBSPID_DISCRETE_ALARMS_MAX_NUM)
+ break;
+
+ entry_ptr++;
+ }
+
+
+ return LIBSPID_SUCCESS;
+}
+
+/**
+ * Set discrete alarm entry with the given OID.<BR>
+ * \param OID alarm OID
+ * \param discrete_alarm_entry dicrete alarm entry
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_NOT_FOUND: entry not found
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+extern libspid_error_t
+libspid_eoc_discrete_alarm_set (char *oid, libspid_eoc_discrete_alarm_entry_t
+ *discrete_alarm_entry)
+{
+ const char delimiter = LIBSPID_DISCRETE_ALARM_CONF_DELIMITER[0];
+ char *elt[3];
+ libspid_error_t ret;
+ libspid_eoc_discrete_alarm_entry_t alarm_get_entry;
+
+ int i;
+
+ /* check input parameters */
+ if ((oid == NULL) || (discrete_alarm_entry == NULL))
+ return LIBSPID_ERROR_PARAM;
+
+
+ /* check that OID already exists */
+ ret = libspid_eoc_discrete_alarm_get (oid, &alarm_get_entry);
+
+ if (LIBSPID_SUCCESS != ret)
+ {
+ return ret;
+ }
+
+ /* allocate buffers */
+ for (i = 0; i < 3; i++)
+ {
+ elt[i] = (char *) malloc (16*sizeof (char));
+ if (NULL != elt[i])
+ memset(elt[i], 0, 16);
+ else
+ {
+ LIBSPID_EOC_LOG_2 ("%s: error allocating element buffers "
+ "(errno=%d)", __FUNCTION__, errno);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+ }
+
+ sprintf (elt[0], "%d", discrete_alarm_entry->trigger);
+ sprintf (elt[1], "%d", discrete_alarm_entry->enable);
+ sprintf (elt[2], "%d", discrete_alarm_entry->state);
+
+ ret = libspid_config_write_line (LIBSPID_DISCRETE_ALARM_CONF_PATH,
+ delimiter, oid, 3, elt);
+
+ /* free element buffers */
+ for (i = 0; i < 3; i++)
+ {
+ if (elt[i])
+ {
+ free (elt[i]);
+ elt[i] = NULL;
+ }
+ }
+
+ if (ret != LIBSPID_SUCCESS)
+ {
+ LIBSPID_EOC_LOG_2 ("%s: cannot write discrete alarm entry "
+ "(errno=%d)", __FUNCTION__, errno);
+ return ret;
+ }
+
+ return LIBSPID_SUCCESS;
+}
diff --git a/cleopatre/application/libspid/src/ethctl_eoc.c b/cleopatre/application/libspid/src/ethctl_eoc.c
new file mode 100644
index 0000000000..96a123f622
--- /dev/null
+++ b/cleopatre/application/libspid/src/ethctl_eoc.c
@@ -0,0 +1,644 @@
+
+/* SPC300 bundle {{{
+ *
+ * Copyright (C) 2012 MStar
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file application/libspid/src/ethctl_eoc.c
+ * \brief Functions specific to ethctl
+ * \ingroup libspid
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <syslog.h>
+#include <arpa/inet.h>
+#include <errno.h>
+#include <ctype.h>
+
+#include "libspid.h"
+
+/**
+ * Returns the ethctl table entry for the given slave MAC address.<BR>
+ * \param mac_address slave MAC address
+ * \param entry ethctl table entry
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_NOT_FOUND: entry not found
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+extern libspid_error_t
+libspid_eoc_ethctl_get (char *mac_address, libspid_eoc_ethctl_entry_t *entry)
+{
+ const char delimiters[2] = LIBSPID_ETHCTL_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_LINE_MAX_LEN] = {0};
+ char mac_buffer[LIBSPID_MAC_STR_LEN] = {0};
+ libspid_error_t error;
+ int i;
+
+ /* check input parameters */
+ if ((mac_address == NULL) || (entry == NULL))
+ return LIBSPID_ERROR_PARAM;
+
+ memset (entry, 0x0, sizeof (entry));
+
+ for (i = 0; i < LIBSPID_MAC_STR_LEN; i++)
+ {
+ if (mac_address[i] == 0)
+ break;
+
+ mac_buffer[i] = tolower (mac_address[i]);
+ }
+ mac_buffer[sizeof (mac_buffer) - 1] = 0;
+
+ strcpy (key, mac_buffer);
+ strcpy (entry->mac_address, mac_buffer);
+
+ if (LIBSPID_SUCCESS !=
+ (error =
+ libspid_config_read_line (LIBSPID_ETHCTL_CONF_PATH, delimiters, key,
+ &elt_number, elt, buffer,
+ LIBSPID_LINE_MAX_LEN)))
+ return error;
+
+ if (elt_number < LIBSPID_ETHCTL_PARAM_NUM)
+ {
+ strcpy (entry->mirror_type, "");
+ strcpy (entry->mirror_en, "");
+ strcpy (entry->mirror_source_port, "");
+ strcpy (entry->mirror_dest_port, "");
+ strcpy (entry->loopback_en, "");
+ strcpy (entry->loopback_port_index, "");
+ strcpy (entry->flow_ctl_en, "");
+ strcpy (entry->aging_time, "");
+ }
+ else
+ {
+ strncpy (entry->mirror_type, elt[0], sizeof (entry->mirror_type));
+ entry->mirror_type[sizeof (entry->mirror_type) - 1] = 0;
+
+ strncpy (entry->mirror_en, elt[1], sizeof (entry->mirror_en));
+ entry->mirror_en[sizeof (entry->mirror_en) - 1] = 0;
+
+ strncpy (entry->mirror_source_port, elt[2],
+ sizeof (entry->mirror_source_port));
+ entry->mirror_source_port[sizeof (entry->mirror_source_port) - 1] = 0;
+
+ strncpy (entry->mirror_dest_port, elt[3],
+ sizeof (entry->mirror_dest_port));
+ entry->mirror_dest_port[sizeof (entry->mirror_dest_port) - 1] = 0;
+
+ strncpy (entry->loopback_en, elt[4], sizeof (entry->loopback_en));
+ entry->loopback_en[sizeof (entry->loopback_en) - 1] = 0;
+
+ strncpy (entry->loopback_port_index, elt[5],
+ sizeof (entry->loopback_port_index));
+ entry->loopback_port_index[sizeof (entry->loopback_port_index) - 1] =
+ 0;
+
+ strncpy (entry->flow_ctl_en, elt[6], sizeof (entry->flow_ctl_en));
+ entry->flow_ctl_en[sizeof (entry->flow_ctl_en) - 1] = 0;
+
+ strncpy (entry->aging_time, elt[7], sizeof (entry->aging_time));
+ entry->aging_time[sizeof (entry->aging_time) - 1] = 0;
+ }
+
+ return LIBSPID_SUCCESS;
+}
+
+/**
+ * Returns the whole ethctl table list from configuration file
+ * in a pointer to an array of ethctl table entries.<BR>
+ * \param entry pointer to an array of ethctl table entries
+ * \param count pointer to an integer for number of ethctl table entries
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_NOT_FOUND: entry not found
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+extern libspid_error_t
+libspid_eoc_ethctl_get_list (libspid_eoc_ethctl_entry_t *entry, int *count)
+{
+ const char delimiters[2] = LIBSPID_ETHCTL_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_LINE_MAX_LEN] = {0};
+ libspid_error_t error;
+ libspid_eoc_ethctl_entry_t *entry_ptr;
+ void *user_data = NULL;
+ /* check input parameters */
+ if ((entry == NULL) || (count == NULL))
+ return LIBSPID_ERROR_PARAM;
+ *count = 0;
+
+ memset (key, 0x0, sizeof (key));
+ memset (entry, 0x0, sizeof (entry));
+
+ entry_ptr = entry;
+
+ /* get the first key */
+ if (LIBSPID_SUCCESS != (error =
+ libspid_config_read_line_repetitive
+ (LIBSPID_ETHCTL_CONF_PATH, delimiters, key,
+ &elt_number, elt, buffer, LIBSPID_LINE_MAX_LEN,
+ &user_data)))
+ return error;
+
+ for (; *count < LIBSPID_ETHCTL_MAX_CONF_NUM && strcmp (key, "");
+ (*count)++)
+ {
+ /* Get a line from the conf file */
+ elt_number = LIBSPID_CONFIG_ELT_MAX_NB;
+
+ if (LIBSPID_SUCCESS != (error =
+ libspid_config_read_line_repetitive
+ (LIBSPID_ETHCTL_CONF_PATH, delimiters, key,
+ &elt_number, elt, buffer,
+ LIBSPID_LINE_MAX_LEN, &user_data)))
+ return error;
+
+ strcpy (entry_ptr->mac_address, buffer);
+ if (elt_number < LIBSPID_ETHCTL_PARAM_NUM)
+ {
+ strcpy (entry_ptr->mirror_type, "");
+ strcpy (entry_ptr->mirror_en, "");
+ strcpy (entry_ptr->mirror_source_port, "");
+ strcpy (entry_ptr->mirror_dest_port, "");
+ strcpy (entry_ptr->loopback_en, "");
+ strcpy (entry_ptr->loopback_port_index, "");
+ strcpy (entry_ptr->flow_ctl_en, "");
+ strcpy (entry_ptr->aging_time, "");
+ }
+ else
+ {
+ strncpy (entry_ptr->mirror_type, elt[0],
+ sizeof (entry_ptr->mirror_type));
+ entry_ptr->mirror_type[sizeof (entry_ptr->mirror_type) - 1] = 0;
+
+ strncpy (entry_ptr->mirror_en, elt[1],
+ sizeof (entry_ptr->mirror_en));
+ entry_ptr->mirror_en[sizeof (entry_ptr->mirror_en) - 1] = 0;
+
+ strncpy (entry_ptr->mirror_source_port, elt[2],
+ sizeof (entry_ptr->mirror_source_port));
+ entry_ptr->
+ mirror_source_port[sizeof (entry_ptr->mirror_source_port) -
+ 1] = 0;
+
+ strncpy (entry_ptr->mirror_dest_port, elt[3],
+ sizeof (entry_ptr->mirror_dest_port));
+ entry_ptr->mirror_dest_port[sizeof (entry_ptr->mirror_dest_port) -
+ 1] = 0;
+
+ strncpy (entry_ptr->loopback_en, elt[4],
+ sizeof (entry_ptr->loopback_en));
+ entry_ptr->loopback_en[sizeof (entry_ptr->loopback_en) - 1] = 0;
+
+ strncpy (entry_ptr->loopback_port_index, elt[5],
+ sizeof (entry_ptr->loopback_port_index));
+ entry_ptr->
+ loopback_port_index[sizeof (entry_ptr->loopback_port_index) -
+ 1] = 0;
+
+ strncpy (entry_ptr->flow_ctl_en, elt[6],
+ sizeof (entry_ptr->flow_ctl_en));
+ entry_ptr->flow_ctl_en[sizeof (entry_ptr->flow_ctl_en) - 1] = 0;
+
+ strncpy (entry_ptr->aging_time, elt[7],
+ sizeof (entry_ptr->aging_time));
+ entry_ptr->aging_time[sizeof (entry_ptr->aging_time) - 1] = 0;
+ }
+
+ entry_ptr++;
+ }
+ libspid_config_read_line_repetitive (0, 0, 0, 0, 0, 0, 0, &user_data);
+ return LIBSPID_SUCCESS;
+}
+
+/**
+ * Set ethctl table entry with the given slave MAC address.<BR>
+ * \param mac_address slave MAC address
+ * \param entry cnu entry
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_NOT_FOUND: entry not found
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+extern libspid_error_t
+libspid_eoc_ethctl_set (char *mac_address, libspid_eoc_ethctl_entry_t *entry)
+{
+ const char delimiter = LIBSPID_ETHCTL_DELIMITER[0];
+ char *elt[LIBSPID_ETHCTL_PARAM_NUM];
+ libspid_error_t ret;
+
+ int i;
+
+ /* check input parameters */
+ if ((mac_address == NULL) || (entry == NULL))
+ {
+ return LIBSPID_ERROR_PARAM;
+ }
+ /* allocate buffers */
+ for (i = 0; i < LIBSPID_ETHCTL_PARAM_NUM; i++)
+ {
+ elt[i] = (char *) malloc (8 * sizeof (char));
+ if (NULL != elt[i])
+ memset (elt[i], 0, 8);
+ else
+ {
+ LIBSPID_EOC_LOG_2
+ ("%s: error allocating element buffers (errno=%d)",
+ __FUNCTION__, errno);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+ }
+
+ strcpy (elt[0], entry->mirror_type);
+ strcpy (elt[1], entry->mirror_en);
+ strcpy (elt[2], entry->mirror_source_port);
+ strcpy (elt[3], entry->mirror_dest_port);
+ strcpy (elt[4], entry->loopback_en);
+ strcpy (elt[5], entry->loopback_port_index);
+ strcpy (elt[6], entry->flow_ctl_en);
+ strcpy (elt[7], entry->aging_time);
+ ret = libspid_config_write_line (LIBSPID_ETHCTL_CONF_PATH,
+ delimiter, mac_address,
+ LIBSPID_ETHCTL_PARAM_NUM, elt);
+
+ /* free element buffers */
+ for (i = 0; i < LIBSPID_ETHCTL_PARAM_NUM; i++)
+ {
+ if (elt[i])
+ {
+ free (elt[i]);
+ elt[i] = NULL;
+ }
+ }
+
+ if (ret != LIBSPID_SUCCESS)
+ {
+ LIBSPID_EOC_LOG_2 ("%s: cannot write ethctl entry (errno=%d)",
+ __FUNCTION__, errno);
+ return ret;
+ }
+
+ return LIBSPID_SUCCESS;
+}
+
+/** internal helper function for checking parameters of ethctl.conf */
+int
+ethctl_check_input_parameters (libspid_eoc_ethctl_entry_t *ethctl_entry,
+ libspid_eoc_ethctl_entry_t *cnu_entries_cnf,
+ int slave_count_cnf,
+ libspid_ethctl_check_error_t *error_types)
+{
+ int error_number = 0;
+ int i = 0, value = 0;
+ int ret = 0;
+ char *pnumber;
+
+ if (ethctl_entry == NULL ||
+ cnu_entries_cnf == NULL || error_types == NULL)
+ {
+ return -1;
+ }
+
+ /** check MAC address*/
+ if (strlen (ethctl_entry->mac_address) != LIBSPID_MAC_STR_LEN - 1)
+ ret = -1;
+
+ for (i = 0; i < LIBSPID_MAC_STR_LEN - 1; i++)
+ {
+ ethctl_entry->mac_address[i] = tolower (ethctl_entry->mac_address[i]);
+ if (!((ethctl_entry->mac_address[i] >= '0'
+ && ethctl_entry->mac_address[i] <= '9')
+ || (ethctl_entry->mac_address[i] >= 'a'
+ && ethctl_entry->mac_address[i] <= 'f')
+ || ethctl_entry->mac_address[i] == ':'))
+ ret = -1;
+
+ if ((i % 3) == 2 && ethctl_entry->mac_address[i] != ':')
+ ret = -1;
+ }
+
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_ETHCTL_MAC_FORMAT;
+ error_number++;
+ ret = 0;
+ }
+
+ /** check mirror type value */
+ value = strtol (ethctl_entry->mirror_type, &pnumber, 10);
+ if (*pnumber != '\0' || strcmp (ethctl_entry->mirror_type, "") == 0)
+ ret = -1;
+ else
+ ret = (value < LIBSPID_MIRROR_TYPE_NONE ||
+ value >= LIBSPID_MIRROR_TYPE_NB) ? -1 : 0;
+
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_MIRROR_TYPE_VALUE;
+ error_number++;
+ ret = 0;
+ }
+
+ /** check mirror enable value */
+ value = strtol (ethctl_entry->mirror_en, &pnumber, 10);
+ if (*pnumber != '\0' || strcmp (ethctl_entry->mirror_en, "") == 0)
+ ret = -1;
+ else
+ ret = (value < 0 || value > 1) ? -1 : 0;
+
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_MIRROR_EN_VALUE;
+ error_number++;
+ ret = 0;
+ }
+
+ /** check mirror source port value */
+ value = strtol (ethctl_entry->mirror_source_port, &pnumber, 10);
+ if (*pnumber != '\0'
+ || strcmp (ethctl_entry->mirror_source_port, "") == 0)
+ ret = -1;
+ else
+ ret = (value < 1 || value > LIBSPID_ETHCTL_MAX_PORT) ? -1 : 0;
+
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_MIRROR_SOURCE_PORT_VALUE;
+ error_number++;
+ ret = 0;
+ }
+
+ /** check mirror dest port value*/
+ value = strtol (ethctl_entry->mirror_dest_port, &pnumber, 10);
+ if (*pnumber != '\0' || strcmp (ethctl_entry->mirror_dest_port, "") == 0)
+ ret = -1;
+ else
+ ret = (value < 1 || value > LIBSPID_ETHCTL_MAX_PORT) ? -1 : 0;
+
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_MIRROR_DEST_PORT_VALUE;
+ error_number++;
+ ret = 0;
+ }
+
+ /** check loop back enable value */
+ value = strtol (ethctl_entry->loopback_en, &pnumber, 10);
+ if (*pnumber != '\0' || strcmp (ethctl_entry->loopback_en, "") == 0)
+ ret = -1;
+ else
+ ret = (value < 0 || value > 1) ? -1 : 0;
+
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_LOOPBACK_EN_VALUE;
+ error_number++;
+ ret = 0;
+ }
+
+ /** check loop back port index value */
+ value = strtol (ethctl_entry->loopback_port_index, &pnumber, 10);
+ if (*pnumber != '\0'
+ || strcmp (ethctl_entry->loopback_port_index, "") == 0)
+ ret = -1;
+ else
+ ret = (value < 0 || value > LIBSPID_ETHCTL_MAX_PORT_INDEX ||
+ value & LIBSPID_ETHCTL_INVALID_PORT_INDEX) ? -1 : 0;
+
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_LOOPBACK_PORT_INDEX_VALUE;
+ error_number++;
+ ret = 0;
+ }
+
+ /** check flow control enable value */
+ value = strtol (ethctl_entry->flow_ctl_en, &pnumber, 10);
+ if (*pnumber != '\0' || strcmp (ethctl_entry->flow_ctl_en, "") == 0)
+ ret = -1;
+ else
+ ret = (value < 0 || value > LIBSPID_ETHCTL_MAX_PORT_INDEX ||
+ value & LIBSPID_ETHCTL_INVALID_PORT_INDEX) ? -1 : 0;
+
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_FLOW_CTL_EN_VALUE;
+ error_number++;
+ ret = 0;
+ }
+
+ /** check aging time value */
+ value = strtol (ethctl_entry->aging_time, &pnumber, 10);
+ if (*pnumber != '\0' || strcmp (ethctl_entry->aging_time, "") == 0)
+ ret = -1;
+ else
+ ret = (value < 0 || value > LIBSPID_ETHCTL_MAX_AGINGTIME) ? -1 : 0;
+
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_AGING_TIME_VALUE;
+ error_number++;
+ ret = 0;
+ }
+
+ return error_number;
+}
+
+/**
+*compare two mac address strings
+*/
+static int
+cmp_string_mac (const void *p1, const void *p2)
+{
+ return strcmp (((libspid_eoc_ethctl_entry_t *) p1)->mac_address,
+ ((libspid_eoc_ethctl_entry_t *) p2)->mac_address);
+}
+
+/**
+ * Check ethctl.conf file
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_NOT_FOUND: entry not found
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ * \return LIBSPID_ERROR_CHECK: check utility failed
+ */
+extern libspid_error_t
+libspid_eoc_ethctl_check (void)
+{
+ int slave_count_cnf = 0, wl_count_cnf = 0;;
+ int ret = -1;
+ int i = 0;
+ libspid_eoc_ethctl_entry_t cnu_entries_cnf[LIBSPID_ETHCTL_MAX_CONF_NUM];
+ libspid_eoc_ethctl_entry_t
+ cnu_entries_cnf_sort[LIBSPID_WHITE_LIST_MAX_STA_NUM];
+ libspid_eoc_wl_entry_t wl_entries_cnf_sort[LIBSPID_ETHCTL_MAX_CONF_NUM];
+ char key_not_unique[LIBSPID_MAC_STR_LEN];
+ libspid_eoc_ethctl_entry_t cnu_entry;
+ libspid_boolean_t unique_address = LIBSPID_TRUE;
+
+ LIBSPID_EOC_LOG_1 ("%s: Check ethctl.conf...", __FUNCTION__);
+ /** obtain the ethctl table list from configuration file */
+ ret = libspid_eoc_ethctl_get_list (cnu_entries_cnf, &slave_count_cnf);
+ if (ret != LIBSPID_SUCCESS)
+ {
+ return ret;
+ }
+
+ ret = libspid_eoc_wl_get_list (wl_entries_cnf_sort, &wl_count_cnf);
+ if (ret != LIBSPID_SUCCESS)
+ {
+ return ret;
+ }
+
+ memcpy (cnu_entries_cnf_sort, cnu_entries_cnf,
+ slave_count_cnf * sizeof (libspid_eoc_ethctl_entry_t));
+
+ /* sort ethctl.conf */
+ qsort (cnu_entries_cnf_sort, slave_count_cnf,
+ sizeof (libspid_eoc_ethctl_entry_t), cmp_string_mac);
+
+ /* check if MAC is unique key */
+ for (i = 0; i < slave_count_cnf - 1; i++)
+ {
+ if (strcmp (cnu_entries_cnf_sort[i].mac_address,
+ cnu_entries_cnf_sort[i + 1].mac_address) == 0)
+ {
+ strcpy (key_not_unique, cnu_entries_cnf_sort[i].mac_address);
+ break;
+ }
+ }
+
+ /* sort white_list.conf */
+ qsort (wl_entries_cnf_sort, wl_count_cnf,
+ sizeof (libspid_eoc_wl_entry_t), cmp_string_mac);
+
+ for (i = 0; i < slave_count_cnf; i++)
+ {
+ int number_of_error = 0;
+ libspid_ethctl_check_error_t
+ error_types[LIBSPID_ETHCTL_ERROR_TYPES_NUM];
+ libspid_eoc_ethctl_entry_t *res;
+
+ cnu_entry = cnu_entries_cnf[i];
+
+ /* Check dependency between ethctl.conf and white_list.conf file
+ * check if MAC defined in ethctl.conf but not in white_list.conf */
+ res = bsearch (&cnu_entry, wl_entries_cnf_sort, wl_count_cnf,
+ sizeof (libspid_eoc_wl_entry_t), cmp_string_mac);
+ if (res == NULL)
+ {
+ LIBSPID_EOC_LOG_1
+ ("MAC (%s) defined in ethctl.conf but not "
+ "in white_list.conf", cnu_entry.mac_address);
+ ret = LIBSPID_ERROR_CHECK;
+ }
+
+ /** check format of the input parameters */
+ number_of_error = ethctl_check_input_parameters (&cnu_entry,
+ cnu_entries_cnf,
+ slave_count_cnf,
+ error_types);
+
+ /* if MAC is not unique key */
+ if (strcmp (key_not_unique, cnu_entry.mac_address) == 0)
+ {
+ number_of_error += 1;
+ error_types[number_of_error - 1] =
+ LIBSPID_ERROR_ETHCTL_MAC_DUPLICATE;
+ }
+
+ if (number_of_error > 0)
+ {
+ int j = 0;
+ libspid_boolean_t unique_address = LIBSPID_TRUE;
+ ret = LIBSPID_ERROR_CHECK;
+ LIBSPID_EOC_LOG_1 ("Error in line:%d\n", i + 2);
+ for (j = 0; j < number_of_error; j++)
+ {
+ switch (error_types[j])
+ {
+ case LIBSPID_ERROR_ETHCTL_MAC_DUPLICATE:
+ LIBSPID_EOC_LOG_1 ("MAC address %s is not "
+ "unique key.", key_not_unique);
+ unique_address = LIBSPID_FALSE;
+ case LIBSPID_ERROR_ETHCTL_MAC_FORMAT:
+ LIBSPID_EOC_LOG_0 ("Malformed MAC address.");
+ break;
+ case LIBSPID_ERROR_MIRROR_TYPE_VALUE:
+ LIBSPID_EOC_LOG_0 ("Wrong Mirror Type Value.");
+ break;
+ case LIBSPID_ERROR_MIRROR_EN_VALUE:
+ LIBSPID_EOC_LOG_0 ("Wrong Mirror enable value");
+ break;
+ case LIBSPID_ERROR_MIRROR_SOURCE_PORT_VALUE:
+ LIBSPID_EOC_LOG_0 ("Wrong mirror source port value");
+ break;
+ case LIBSPID_ERROR_MIRROR_DEST_PORT_VALUE:
+ LIBSPID_EOC_LOG_0 ("Wrong mirror dest port value");
+ break;
+ case LIBSPID_ERROR_LOOPBACK_EN_VALUE:
+ LIBSPID_EOC_LOG_0 ("Wrong loopback enable value");
+ break;
+ case LIBSPID_ERROR_LOOPBACK_PORT_INDEX_VALUE:
+ LIBSPID_EOC_LOG_0 ("Wrong loopback port index value");
+ break;
+ case LIBSPID_ERROR_FLOW_CTL_EN_VALUE:
+ LIBSPID_EOC_LOG_0 ("Wrong flow control value");
+ break;
+ case LIBSPID_ERROR_AGING_TIME_VALUE:
+ LIBSPID_EOC_LOG_0 ("Wrong aging time value");
+ break;
+ default:
+ break;
+ }
+ }
+
+ if (unique_address == LIBSPID_FALSE)
+ break;
+ }
+ else if (number_of_error == -1)
+ {
+ return LIBSPID_ERROR_PARAM;
+ }
+ }
+
+ if (unique_address == LIBSPID_TRUE)
+ {
+ /* Check dependency between ethctl.conf and white_list.conf file
+ * check if MAC defined in white_list.conf but not in ethctl.conf */
+ for (i = 0; i < wl_count_cnf; i++)
+ {
+ libspid_eoc_wl_entry_t *res;
+ libspid_eoc_wl_entry_t wl_entry;
+
+ wl_entry = wl_entries_cnf_sort[i];
+
+ res = bsearch (&wl_entry, cnu_entries_cnf_sort, slave_count_cnf,
+ sizeof (libspid_eoc_ethctl_entry_t),
+ cmp_string_mac);
+
+ if (res == NULL)
+ {
+ LIBSPID_EOC_LOG_1 ("MAC (%s) defined in white_list.conf "
+ "but not in ethctl.conf",
+ wl_entry.mac_addr);
+ ret = LIBSPID_ERROR_CHECK;
+ }
+ }
+ }
+ return ret;
+}
+
diff --git a/cleopatre/application/libspid/src/ethernet_port_eoc.c b/cleopatre/application/libspid/src/ethernet_port_eoc.c
new file mode 100644
index 0000000000..cb8ee628ec
--- /dev/null
+++ b/cleopatre/application/libspid/src/ethernet_port_eoc.c
@@ -0,0 +1,732 @@
+
+/* SPC300 bundle {{{
+ *
+ * Copyright (C) 2010 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file application/libspid/src/ethernet_port_eoc.c
+ * \brief Functions specific to EoC ethernet ports
+ * \ingroup libspid
+ *
+ */
+
+#include <sys/types.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <getopt.h>
+#include <syslog.h>
+#include <assert.h>
+#include <arpa/inet.h>
+#include <unistd.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <linux/netlink.h>
+#include <ctype.h>
+
+#include "libspid.h"
+#include "libmme.h"
+
+
+
+/**
+ * Returns the ethernet port entry for the given
+ * slave MAC address and port index.<BR>
+ * \param mac_address slave MAC address
+ * \param index port index
+ * \param entry ethernet port entry
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_NOT_FOUND: entry not found
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+extern libspid_error_t
+libspid_eoc_ethernet_port_get (char *mac_address, char *index,
+ libspid_eoc_ethernet_port_entry_t * entry)
+{
+ int i, ret;
+ libspid_eoc_port_v2_entry_t port_v2_entry;
+
+ /* check input parameters */
+ if ((mac_address == NULL) || (index == NULL) || (entry == NULL))
+ return LIBSPID_ERROR_PARAM;
+
+ memset (entry, 0x0, sizeof (entry));
+
+ for (i = 0; i < LIBSPID_MAC_STR_LEN; i++)
+ {
+ mac_address[i] = tolower (mac_address[i]);
+ }
+
+ strcpy (entry->mac_addr, mac_address);
+ strcpy (entry->port_index, index);
+
+ ret = libspid_eoc_port_v2_get (mac_address, index, &port_v2_entry);
+ if (LIBSPID_SUCCESS == ret)
+ {
+ strcpy (entry->auto_neg, port_v2_entry.auto_neg);
+ strcpy (entry->speed, port_v2_entry.speed);
+ strcpy (entry->duplex, port_v2_entry.duplex);;
+ }
+
+ return ret;
+}
+
+/**
+ * Returns the whole port list from configuration file in a
+ * pointer to an array of ethernet port entries.<BR>
+ * \param entry pointer to an array of ethernet port entries
+ * \param count pointer to an integer for number of ehternet port entries
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_NOT_FOUND: entry not found
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+extern libspid_error_t
+libspid_eoc_ethernet_port_get_list (libspid_eoc_ethernet_port_entry_t * entry,
+ int *count)
+{
+ const char delimiters[2] = LIBSPID_PORT_V2_CONF_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;
+ libspid_eoc_ethernet_port_entry_t *entry_ptr;
+ char *index_str;
+ void *user_data = NULL;
+
+ /* check input parameters */
+ if ((entry == NULL) || (count == NULL))
+ return LIBSPID_ERROR_PARAM;
+
+ *count = 0;
+
+ memset (key, 0x0, sizeof (key));
+ memset (entry, 0x0, sizeof (entry));
+
+ entry_ptr = entry;
+
+ /* get the first key */
+ error =
+ libspid_config_read_line_repetitive (LIBSPID_EOC_PORT_V2_FILE,
+ delimiters, key, &elt_number,
+ elt, buffer,
+ LIBSPID_CONFIG_LINE_MAX_LEN,
+ &user_data);
+ if (LIBSPID_SUCCESS != error)
+ return error;
+
+ for (; *count < LIBSPID_PORT_TOTAL_MAX && strcmp (key, "");
+ (*count)++)
+ {
+ /* Get a line from the conf file */
+ elt_number = LIBSPID_CONFIG_ELT_MAX_NB;
+ error =
+ libspid_config_read_line_repetitive
+ (LIBSPID_EOC_PORT_V2_FILE, delimiters, key, &elt_number,
+ elt, buffer, LIBSPID_CONFIG_LINE_MAX_LEN, &user_data);
+ if (LIBSPID_SUCCESS != error)
+ return error;
+
+ /* parse MAC address and port index from buffer */
+ index_str = strchr (buffer, '.');
+ if (index_str != NULL)
+ *index_str++ = 0;
+ else
+ {
+ LIBSPID_EOC_LOG_2 ("%s: error parsing MAC "
+ "address and port number (errno=%d)",
+ __FUNCTION__, errno);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+
+ strcpy (entry_ptr->mac_addr, buffer);
+ strcpy (entry_ptr->port_index, index_str);
+ if (elt_number < LIBSPID_PORT_V2_PARAM_NUM)
+ {
+ strcpy (entry_ptr->auto_neg, "");
+ strcpy (entry_ptr->speed, "");
+ strcpy (entry_ptr->duplex, "");
+ }
+ else
+ {
+ strcpy (entry_ptr->auto_neg, elt[0]);
+ strcpy (entry_ptr->speed, elt[1]);
+ strcpy (entry_ptr->duplex, elt[2]);
+ }
+
+ entry_ptr++;
+ }
+ libspid_config_read_line_repetitive (0, 0, 0, 0, 0, 0, 0, &user_data);
+ return LIBSPID_SUCCESS;
+}
+
+/**
+ * Set ethernet port entry with the given slave MAC address and index.<BR>
+ * \param mac_address slave MAC address
+ * \param index ethernet port index
+ * \param entry ethernet port entry
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_NOT_FOUND: entry not found
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+extern libspid_error_t
+libspid_eoc_ethernet_port_set (char *mac_address, char *index,
+ libspid_eoc_ethernet_port_entry_t * entry)
+{
+ libspid_error_t ret;
+ libspid_eoc_port_v2_entry_t port_v2_entry;
+
+ /* check input parameters */
+ if ((mac_address == NULL) || (index == NULL) || (entry == NULL))
+ return LIBSPID_ERROR_PARAM;
+
+ /* check that MAC address and port index already exist */
+ ret = libspid_eoc_port_v2_get (mac_address, index, &port_v2_entry);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ return ret;
+ }
+
+ strcpy (port_v2_entry.auto_neg, entry->auto_neg);
+ strcpy (port_v2_entry.speed, entry->speed);
+ strcpy (port_v2_entry.duplex, entry->duplex);
+
+ ret = libspid_eoc_port_v2_set (mac_address, index, &port_v2_entry);
+
+ return ret;
+}
+
+/**
+ * Returns the port_v2 entry for the given
+ * slave MAC address and port index.<BR>
+ * \param mac_address slave MAC address
+ * \param index port index
+ * \param entry port_v2 entry
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_NOT_FOUND: entry not found
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+extern libspid_error_t
+libspid_eoc_port_v2_get (char *mac_address, char *index,
+ libspid_eoc_port_v2_entry_t * entry)
+{
+ const char delimiters[2] = LIBSPID_PORT_V2_CONF_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;
+ int i;
+
+ /* check input parameters */
+ if ((mac_address == NULL) || (index == NULL) || (entry == NULL))
+ return LIBSPID_ERROR_PARAM;
+
+ memset (entry, 0x0, sizeof (entry));
+
+ for (i = 0; i < LIBSPID_MAC_STR_LEN; i++)
+ {
+ mac_address[i] = tolower (mac_address[i]);
+ }
+
+ /* use slave MAC and port index to compose key */
+ /* for line in configuration file */
+ sprintf (key, "%s.%s", mac_address, index);
+
+ strcpy (entry->mac_addr, mac_address);
+ strcpy (entry->port_index, index);
+
+ error = libspid_config_read_line (LIBSPID_EOC_PORT_V2_FILE,
+ delimiters, key,
+ &elt_number, elt, buffer,
+ LIBSPID_CONFIG_LINE_MAX_LEN);
+ if (LIBSPID_SUCCESS != error)
+ return error;
+
+ if (elt_number < LIBSPID_PORT_V2_PARAM_NUM)
+ {
+ strcpy (entry->auto_neg, "");
+ strcpy (entry->speed, "");
+ strcpy (entry->duplex, "");
+ strcpy (entry->vlan_port_pvid, "");
+ strcpy (entry->vlan_port_tpid, "");
+ strcpy (entry->vlan_port_prio, "");
+ strcpy (entry->vlan_port_mode, "");
+ strcpy (entry->bcast_protect_en, "");
+ strcpy (entry->bcast_thres_hold, "");
+ strcpy (entry->multi_protect_en, "");
+ strcpy (entry->multi_thres_hold, "");
+ strcpy (entry->unknow_protect_en, "");
+ strcpy (entry->unknow_thres_hold, "");
+ }
+ else
+ {
+ strcpy (entry->auto_neg, elt[0]);
+ strcpy (entry->speed, elt[1]);
+ strcpy (entry->duplex, elt[2]);
+ strcpy (entry->vlan_port_pvid, elt[3]);
+ strcpy (entry->vlan_port_tpid, elt[4]);
+ strcpy (entry->vlan_port_prio, elt[5]);
+ strcpy (entry->vlan_port_mode, elt[6]);
+ strcpy (entry->bcast_protect_en, elt[7]);
+ strcpy (entry->bcast_thres_hold, elt[8]);
+ strcpy (entry->multi_protect_en, elt[9]);
+ strcpy (entry->multi_thres_hold, elt[10]);
+ strcpy (entry->unknow_protect_en, elt[11]);
+ strcpy (entry->unknow_thres_hold, elt[12]);
+ }
+
+ return LIBSPID_SUCCESS;
+}
+
+/**
+ * Set port_v2 entry with the given slave MAC address and index.<BR>
+ * \param mac_address slave MAC address
+ * \param index ethernet port index
+ * \param entry ethernet port entry
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_NOT_FOUND: entry not found
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+extern libspid_error_t
+libspid_eoc_port_v2_set (char *mac_address, char *index,
+ libspid_eoc_port_v2_entry_t * entry)
+{
+ const char delimiter = LIBSPID_PORT_V2_CONF_DELIMITER[0];
+ char key[LIBSPID_CONFIG_KEY_MAX_LEN] = { 0 };
+ char *elt[LIBSPID_PORT_V2_PARAM_NUM];
+ libspid_error_t ret;
+ libspid_eoc_port_v2_entry_t port_v2_entry;
+ int i;
+
+ /* check input parameters */
+ if ((mac_address == NULL) || (index == NULL) || (entry == NULL))
+ return LIBSPID_ERROR_PARAM;
+
+ /* check that MAC address and port index already exist */
+ ret = libspid_eoc_port_v2_get (mac_address, index,
+ &port_v2_entry);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ return ret;
+ }
+
+ /* use slave MAC and port index to compose */
+ /* key for line in configuration file */
+ sprintf (key, "%s.%s", mac_address, index);
+
+ /* allocate buffers */
+ for (i = 0; i < LIBSPID_PORT_V2_PARAM_NUM; i++)
+ {
+ elt[i] = (char *) malloc (4 * sizeof (char));
+ if (NULL != elt[i])
+ memset (elt[i], 0, 4);
+ else
+ {
+ LIBSPID_EOC_LOG_2 ("%s: error allocating element "
+ "buffers (errno=%d)", __FUNCTION__, errno);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+ }
+
+ strcpy (elt[0], entry->auto_neg);
+ strcpy (elt[1], entry->speed);
+ strcpy (elt[2], entry->duplex);
+ strcpy (elt[3], entry->vlan_port_pvid);
+ strcpy (elt[4], entry->vlan_port_tpid);
+ strcpy (elt[5], entry->vlan_port_prio);
+ strcpy (elt[6], entry->vlan_port_mode);
+ strcpy (elt[7], entry->bcast_protect_en);
+ strcpy (elt[8], entry->bcast_thres_hold);
+ strcpy (elt[9], entry->multi_protect_en);
+ strcpy (elt[10], entry->multi_thres_hold);
+ strcpy (elt[11], entry->unknow_protect_en);
+ strcpy (elt[12], entry->unknow_thres_hold);
+
+ ret = libspid_config_write_line (LIBSPID_EOC_PORT_V2_FILE,
+ delimiter, key,
+ LIBSPID_PORT_V2_PARAM_NUM, elt);
+
+ /* free element buffers */
+ for (i = 0; i < LIBSPID_PORT_V2_PARAM_NUM; i++)
+ {
+ if (elt[i])
+ {
+ free (elt[i]);
+ elt[i] = NULL;
+ }
+ }
+
+ if (ret != LIBSPID_SUCCESS)
+ {
+ LIBSPID_EOC_LOG_2 ("%s: cannot write ethernet port entry (errno=%d)",
+ __FUNCTION__, errno);
+ return ret;
+ }
+
+ return LIBSPID_SUCCESS;
+}
+
+/** internal helper function for checking parameters of port.conf */
+int
+ethport_check_input_parameters (libspid_eoc_ethernet_port_entry_t *
+ port_entry,
+ libspid_eoc_ethernet_port_entry_t *
+ port_entries_cnf, int port_count_cnf,
+ libspid_ethernet_port_check_error_t *
+ error_types)
+{
+ int error_number = 0;
+ int i = 0, value = 0;
+ int ret = 0;
+ char *pnumber;
+
+ if (port_entry == NULL || port_entries_cnf == NULL || error_types == NULL)
+ {
+ return -1;
+ }
+
+ /** check MAC address*/
+ if (strlen (port_entry->mac_addr) != LIBSPID_MAC_STR_LEN - 1)
+ ret = -1;
+
+ for (i = 0; i < LIBSPID_MAC_STR_LEN - 1; i++)
+ {
+ port_entry->mac_addr[i] = tolower (port_entry->mac_addr[i]);
+ if (!((port_entry->mac_addr[i] >= '0'
+ && port_entry->mac_addr[i] <= '9')
+ || (port_entry->mac_addr[i] >= 'a'
+ && port_entry->mac_addr[i] <= 'f')
+ || port_entry->mac_addr[i] == ':'))
+ ret = -1;
+
+ if ((i % 3) == 2 && port_entry->mac_addr[i] != ':')
+ ret = -1;
+ }
+
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_ETH_PORT_MAC_FORMAT;
+ error_number++;
+ ret = 0;
+ }
+
+ /** check port INDEX value */
+ value = strtol (port_entry->port_index, &pnumber, 10);
+ if (*pnumber != '\0' || strcmp (port_entry->port_index, "") == 0)
+ ret = -1;
+ else
+ ret = (value < 0 || value > LIBSPID_PORT_PER_SLAVE_MAX - 1) ? -1 : 0;
+
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_ETH_PORT_INDEX_VALUE;
+ error_number++;
+ ret = 0;
+ }
+
+ /** check port auto_neg value */
+ ret = (strcmp (port_entry->auto_neg, "0") == 0 ||
+ strcmp (port_entry->auto_neg, "1") == 0) ? 0 : -1;
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_ETH_PORT_AUTONEG_VALUE;
+ error_number++;
+ ret = 0;
+ }
+
+ /** check port speed value */
+ value = strtol (port_entry->speed, &pnumber, 10);
+ if (*pnumber != '\0' || strcmp (port_entry->speed, "") == 0)
+ ret = -1;
+ else
+ ret = (value < 1 || value > 3) ? -1 : 0;
+
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_ETH_PORT_SPEED_VALUE;
+ error_number++;
+ ret = 0;
+ }
+
+
+ /** check port duplex value */
+ ret = (strcmp (port_entry->duplex, "1") == 0 ||
+ strcmp (port_entry->duplex, "2") == 0) ? 0 : -1;
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_ETH_PORT_DUPLEX_VALUE;
+ error_number++;
+ ret = 0;
+ }
+
+ return error_number;
+}
+
+
+static int
+cmp_string_mac (const void *p1, const void *p2)
+{
+ return strcmp (((libspid_eoc_ethernet_port_entry_t *) p1)->mac_addr,
+ ((libspid_eoc_ethernet_port_entry_t *) p2)->mac_addr);
+}
+
+
+/**
+ * Check ethernet_porttable.conf file
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_NOT_FOUND: entry not found
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ * \return LIBSPID_ERROR_CHECK: check utility failed
+ */
+extern libspid_error_t
+libspid_eoc_ethernet_port_check (void)
+{
+ int port_count_cnf = 0, wl_count_cnf = 0;;
+ int ret = -1;
+ int i = 0;
+ libspid_eoc_ethernet_port_entry_t
+ port_entries_cnf[LIBSPID_PORT_TOTAL_MAX];
+ libspid_eoc_ethernet_port_entry_t
+ port_entries_cnf_sort[LIBSPID_PORT_TOTAL_MAX];
+ libspid_eoc_wl_entry_t
+ wl_entries_cnf_sort[LIBSPID_WHITE_LIST_MAX_STA_NUM];
+ libspid_eoc_ethernet_port_entry_t port_entry;
+ char key_not_unique[LIBSPID_MAC_STR_LEN + 2];
+ libspid_boolean_t unique_address = LIBSPID_TRUE;
+
+ LIBSPID_EOC_LOG_1 ("%s: Check ethernet_porttable.conf...", __FUNCTION__);
+ /** obtain the port list from configuration file */
+ ret =
+ libspid_eoc_ethernet_port_get_list (port_entries_cnf,
+ &port_count_cnf);
+ if (ret != LIBSPID_SUCCESS)
+ {
+ return ret;
+ }
+ ret = libspid_eoc_wl_get_list (wl_entries_cnf_sort, &wl_count_cnf);
+ if (ret != LIBSPID_SUCCESS)
+ {
+ return ret;
+ }
+ memcpy (port_entries_cnf_sort, port_entries_cnf,
+ port_count_cnf * sizeof (libspid_eoc_ethernet_port_entry_t));
+
+ /* sort ethernet_porttable.conf */
+ qsort (port_entries_cnf_sort, port_count_cnf,
+ sizeof (libspid_eoc_ethernet_port_entry_t), cmp_string_mac);
+
+ /* sort white_list.conf */
+ qsort (wl_entries_cnf_sort, wl_count_cnf,
+ sizeof (libspid_eoc_wl_entry_t), cmp_string_mac);
+
+ /* check if MAC.index is unique key */
+ for (i = 0; i < port_count_cnf - 4; i++)
+ {
+ if (strcmp (port_entries_cnf_sort[i].mac_addr,
+ port_entries_cnf_sort[i + 1].mac_addr) == 0 &&
+ strcmp (port_entries_cnf_sort[i].port_index,
+ port_entries_cnf_sort[i + 1].port_index) == 0)
+ {
+ strcpy (key_not_unique, port_entries_cnf_sort[i].mac_addr);
+ strcat (key_not_unique, ".");
+ strcat (key_not_unique, port_entries_cnf_sort[i].port_index);
+ break;
+ }
+
+ if (strcmp (port_entries_cnf_sort[i].mac_addr,
+ port_entries_cnf_sort[i + 2].mac_addr) == 0 &&
+ strcmp (port_entries_cnf_sort[i].port_index,
+ port_entries_cnf_sort[i + 2].port_index) == 0)
+ {
+ strcpy (key_not_unique, port_entries_cnf_sort[i].mac_addr);
+ strcat (key_not_unique, ".");
+ strcat (key_not_unique, port_entries_cnf_sort[i].port_index);
+ break;
+ }
+
+ if (strcmp (port_entries_cnf_sort[i].mac_addr,
+ port_entries_cnf_sort[i + 3].mac_addr) == 0 &&
+ strcmp (port_entries_cnf_sort[i].port_index,
+ port_entries_cnf_sort[i + 3].port_index) == 0)
+ {
+ strcpy (key_not_unique, port_entries_cnf_sort[i].mac_addr);
+ strcat (key_not_unique, ".");
+ strcat (key_not_unique, port_entries_cnf_sort[i].port_index);
+ break;
+ }
+
+ if (strcmp (port_entries_cnf_sort[i].mac_addr,
+ port_entries_cnf_sort[i + 4].mac_addr) == 0 &&
+ strcmp (port_entries_cnf_sort[i].port_index,
+ port_entries_cnf_sort[i + 4].port_index) == 0)
+ {
+ strcpy (key_not_unique, port_entries_cnf_sort[i].mac_addr);
+ strcat (key_not_unique, ".");
+ strcat (key_not_unique, port_entries_cnf_sort[i].port_index);
+ break;
+ }
+ }
+
+ for (i = 0; i < port_count_cnf; i++)
+ {
+ int number_of_error = 0;
+ libspid_ethernet_port_check_error_t
+ error_types[LIBSPID_ETH_PORT_NUM_ERROR_TYPES];
+ char test_unique_key[LIBSPID_MAC_STR_LEN + 2] = { 0 };
+ libspid_eoc_ethernet_port_entry_t *res;
+ int port_index[LIBSPID_PORT_PER_SLAVE_MAX] = { 0 };
+
+ /* for each MAC address, verify that there is */
+ /* required number of ports */
+ if ((i % 5) == 0)
+ {
+ if (strcmp (port_entries_cnf_sort[i].mac_addr,
+ port_entries_cnf_sort[i + 4].mac_addr) == 0)
+ {
+ port_index[atoi (port_entries_cnf_sort[i].port_index)] = 1;
+ port_index[atoi (port_entries_cnf_sort[i + 1].port_index)] =
+ 1;
+ port_index[atoi (port_entries_cnf_sort[i + 2].port_index)] =
+ 1;
+ port_index[atoi (port_entries_cnf_sort[i + 3].port_index)] =
+ 1;
+ port_index[atoi (port_entries_cnf_sort[i + 4].port_index)] =
+ 1;
+
+ if (!(port_index[0] && port_index[1] && port_index[2] &&
+ port_index[3] && port_index[4]))
+ {
+ LIBSPID_EOC_LOG_2 ("MAC %s must have required number "
+ "of ports(%d)",
+ port_entries_cnf_sort[i].mac_addr,
+ LIBSPID_PORT_PER_SLAVE_MAX);
+ return LIBSPID_ERROR_CHECK;
+ }
+ }
+ else
+ {
+ LIBSPID_EOC_LOG_2 ("MAC %s must have required "
+ "number of ports(%d)",
+ port_entries_cnf_sort[i].mac_addr,
+ LIBSPID_PORT_PER_SLAVE_MAX);
+ return LIBSPID_ERROR_CHECK;
+ }
+ }
+
+ port_entry = port_entries_cnf[i];
+
+ /* Check dependency between ethernet_porttable.conf and white_list.conf file */
+ /* check if MAC defined in ethernet_porttable.conf but not in white_list.conf */
+ res = bsearch (&port_entry, wl_entries_cnf_sort, wl_count_cnf,
+ sizeof (libspid_eoc_wl_entry_t), cmp_string_mac);
+ if (res == NULL)
+ {
+ LIBSPID_EOC_LOG_1 ("MAC (%s) defined in ethernet_porttable.conf "
+ "but not in white_list.conf",
+ port_entry.mac_addr);
+ ret = LIBSPID_ERROR_CHECK;
+ }
+
+ /* if MAC.index is not unique key */
+ /* find error line */
+ strcpy (test_unique_key, port_entry.mac_addr);
+ strcat (test_unique_key, ".");
+ strcat (test_unique_key, port_entry.port_index);
+
+ /** check format of the input parameters */
+ number_of_error = ethport_check_input_parameters (&port_entry,
+ port_entries_cnf,
+ port_count_cnf,
+ error_types);
+
+ if (strcmp (key_not_unique, test_unique_key) == 0)
+ {
+ number_of_error += 1;
+ error_types[number_of_error - 1] =
+ LIBSPID_ERROR_PORT_MAC_DUPLICATE;
+ }
+
+ if (number_of_error > 0)
+ {
+ int j = 0;
+
+ ret = LIBSPID_ERROR_CHECK;
+ LIBSPID_EOC_LOG_1 ("Error in line:%d\n", i + 2);
+ for (j = 0; j < number_of_error; j++)
+ {
+ switch (error_types[j])
+ {
+ case LIBSPID_ERROR_ETH_PORT_MAC_FORMAT:
+ LIBSPID_EOC_LOG_0 ("Malformed MAC address.");
+ break;
+ case LIBSPID_ERROR_ETH_PORT_MAC_DUPLICATE:
+ LIBSPID_EOC_LOG_1 ("MAC_ADDRESS.PORT_NB (%s) is not "
+ "unique key.", key_not_unique);
+ unique_address = LIBSPID_FALSE;
+ break;
+ case LIBSPID_ERROR_ETH_PORT_INDEX_VALUE:
+ LIBSPID_EOC_LOG_1 ("Wrong port index value specified "
+ "(expected: 0..%d)",
+ LIBSPID_PORT_PER_SLAVE_MAX - 1);
+ break;
+ case LIBSPID_ERROR_ETH_PORT_AUTONEG_VALUE:
+ LIBSPID_EOC_LOG_0 ("Wrong port autoneg flag specified "
+ "(expected: 0..1)");
+ break;
+ case LIBSPID_ERROR_ETH_PORT_SPEED_VALUE:
+ LIBSPID_EOC_LOG_0 ("Wrong port speed vall specified "
+ "specified (expected: 1..3)");
+ break;
+ case LIBSPID_ERROR_ETH_PORT_DUPLEX_VALUE:
+ LIBSPID_EOC_LOG_0 ("Wrong port dulex val specified "
+ "(expected: 1..2)");
+ break;
+ default:
+ break;
+ }
+ }
+
+ if (unique_address == LIBSPID_FALSE)
+ break;
+ }
+ else if (number_of_error == -1)
+ return LIBSPID_ERROR_PARAM;
+ }
+
+ if (unique_address == LIBSPID_TRUE)
+ {
+ /* Check dependency between port.conf and white_list.conf file */
+ /* check if MAC defined in white_list.conf but not in port.conf */
+ for (i = 0; i < wl_count_cnf; i++)
+ {
+ libspid_eoc_wl_entry_t *res;
+ libspid_eoc_wl_entry_t wl_entry;
+
+
+ wl_entry = wl_entries_cnf_sort[i];
+
+ res = bsearch (&wl_entry, port_entries_cnf_sort, port_count_cnf,
+ sizeof (libspid_eoc_ethernet_port_entry_t),
+ cmp_string_mac);
+ if (res == NULL)
+ {
+ LIBSPID_EOC_LOG_1 ("MAC (%s) defined in white_list.conf "
+ "but not in ethernet_porttable.conf",
+ wl_entry.mac_addr);
+ ret = LIBSPID_ERROR_CHECK;
+ }
+ }
+ }
+
+ return ret;
+}
diff --git a/cleopatre/application/libspid/src/hardware.c b/cleopatre/application/libspid/src/hardware.c
new file mode 100644
index 0000000000..80061995f6
--- /dev/null
+++ b/cleopatre/application/libspid/src/hardware.c
@@ -0,0 +1,110 @@
+
+/* SPC300 bundle {{{
+ *
+ * Copyright (C) 2009 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file application/libspid/src/hardware.c
+ * \brief hardware-oriented functions
+ * \ingroup libspid
+ *
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+#include <fcntl.h>
+#include "libspid.h"
+#include <syslog.h>
+#include <sys/ioctl.h>
+#include <unistd.h>
+#include "../../linux/gpio.h"
+
+/**
+ * Returns current internal temperature of the master (in Celsius degrees).
+ *
+ * \param temp_c pointer to store current master temperature
+ * in Celsius degrees
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_PARAM: bad input parameter
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno
+ */
+
+libspid_error_t
+libspid_hardware_get_temperature (int *temp_c)
+{
+ /* TEMP: return constant value */
+ *temp_c = 0;
+
+ return LIBSPID_SUCCESS;
+}
+
+/**
+ * Returns tamper status of the master:
+ * LIBSPID_TAMPER_STATUS_COMPROMISED if box has been opened,
+ * LIBSPID_TAMPER_STATUS_INTACT if box has not been opened.
+ *
+ * \param tamper_state pointer to store tamper status of the master
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_PARAM: bad input parameter
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno
+ */
+
+libspid_error_t
+libspid_hardware_get_tamper (libspid_eoc_tamper_status_t *tamper_status)
+{
+ /* Check arguments */
+ if (tamper_status == NULL)
+ return LIBSPID_ERROR_PARAM;
+
+ *tamper_status = LIBSPID_TAMPER_STATUS_INTACT;
+
+#if defined (CONFIG_TAMPER_INDICATOR)
+ int gpio_fd;
+ union gpio_info tamper_gpio;
+
+ tamper_gpio.gpiodir.num = CONFIG_TAMPER_INDICATOR_GPIO_NUM;
+ tamper_gpio.gpiodir.dir = SPC300_GPIO_DIRECTION_INPUT;
+
+ /* Open GPIO device */
+ gpio_fd = open (LIBSPID_GPIO_DEVICE_NAME, O_RDWR);
+ if (0 > gpio_fd)
+ {
+ syslog (LOG_WARNING, "cannot open gpio device");
+ return LIBSPID_ERROR_SYSTEM;
+ }
+
+ /* Set gpio direction */
+ if(0 > ioctl (gpio_fd, GPIOIOC_SETDIRECTION,
+ (unsigned long *) &tamper_gpio))
+ {
+ syslog (LOG_WARNING, "cannot call ioctl for tamper gpio ");
+ close (gpio_fd);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+
+ /* Read TAMPER GPIO */
+ if (0 > ioctl (gpio_fd, GPIOIOC_GETVALUE, (unsigned long*) &tamper_gpio))
+ {
+ syslog (LOG_WARNING, "cannot call ioctl for TAMPER gpio");
+ close (gpio_fd);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+
+ if (tamper_gpio.gpioval.val == 0)
+ *tamper_status = LIBSPID_TAMPER_STATUS_INTACT;
+ else if (tamper_gpio.gpioval.val == 1)
+ *tamper_status = LIBSPID_TAMPER_STATUS_COMPROMISED;
+
+ /* Close GPIO device */
+ close (gpio_fd);
+#endif
+
+ return LIBSPID_SUCCESS;
+}
+
diff --git a/cleopatre/application/libspid/src/igmp_snooping_eoc.c b/cleopatre/application/libspid/src/igmp_snooping_eoc.c
new file mode 100644
index 0000000000..59d4a1209b
--- /dev/null
+++ b/cleopatre/application/libspid/src/igmp_snooping_eoc.c
@@ -0,0 +1,462 @@
+
+/* SPC300 bundle {{{
+ *
+ * Copyright (C) 2012 MStar
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file application/libspid/src/igmp_snooping_eoc.c
+ * \brief Functions specific to igmp function
+ * \ingroup libspid
+ *
+ */
+
+#include <sys/types.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <getopt.h>
+#include <syslog.h>
+#include <assert.h>
+#include <arpa/inet.h>
+#include <unistd.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <linux/netlink.h>
+#include <ctype.h>
+
+#include "libspid.h"
+#include "libmme.h"
+
+
+
+/**
+ * Returns the mac entry for the given slave MAC address
+ * \param mac_address slave MAC address
+ * \param entry igmp entry
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ * \return LIBSPID_ERROR_NOT_FOUND: can not find the entry by this Mac
+ */
+extern libspid_error_t
+libspid_eoc_igmp_snooping_get (char *mac_address,
+ libspid_eoc_igmp_snooping_entry_t * entry)
+{
+ const char delimiters[2] = LIBSPID_EOC_IGMP_SNOOPING_CONF_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;
+ int i;
+
+ /* check input parameters */
+ if ((mac_address == NULL) || (entry == NULL))
+ return LIBSPID_ERROR_PARAM;
+
+ memset (entry, 0x0, sizeof (entry));
+
+ for (i = 0; i < LIBSPID_MAC_STR_LEN; i++)
+ {
+ mac_address[i] = tolower (mac_address[i]);
+ }
+
+ /* use slave MAC to compose key */
+ /* for line in configuration file */
+ strcpy (key, mac_address);
+ strcpy (entry->mac_addr, mac_address);
+
+ error = libspid_config_read_line (LIBSPID_IGMP_CONF_PATH,
+ delimiters, key,
+ &elt_number, elt, buffer,
+ LIBSPID_CONFIG_LINE_MAX_LEN);
+
+ if (LIBSPID_SUCCESS != error)
+ return error;
+
+
+ if (elt_number < LIBSPID_EOC_IGMP_SNOOPING_PARAM_NUM)
+ {
+ strcpy (entry->igmp_snooping_en, "");
+ }
+ else
+ {
+ strcpy (entry->igmp_snooping_en, elt[0]);
+ }
+
+ return LIBSPID_SUCCESS;
+}
+
+/**
+ * Returns the whole igmp snooping list from configuration file in a
+ * pointer to an array of igmp entries.<BR>
+ * \param entry pointer to an array of igmp entries
+ * \param count pointer to an integer for number of igmp entries
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_NOT_FOUND: entry not found
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+extern libspid_error_t
+libspid_eoc_igmp_snooping_get_list (libspid_eoc_igmp_snooping_entry_t * entry,
+ int *count)
+{
+ const char delimiters[2] = LIBSPID_EOC_IGMP_SNOOPING_CONF_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;
+ libspid_eoc_igmp_snooping_entry_t *entry_ptr;
+
+
+ void *user_data = NULL;
+
+ /* check input parameters */
+ if ((entry == NULL) || (count == NULL))
+ return LIBSPID_ERROR_PARAM;
+
+ *count = 0;
+ memset (key, 0x0, sizeof (key));
+ memset (entry, 0x0, sizeof (entry));
+ entry_ptr = entry;
+ /* get the first key */
+ error =
+ libspid_config_read_line_repetitive (LIBSPID_IGMP_CONF_PATH,
+ delimiters, key, &elt_number,
+ elt, buffer,
+ LIBSPID_CONFIG_LINE_MAX_LEN,
+ &user_data);
+
+ if (LIBSPID_SUCCESS != error)
+ return error;
+
+ for (; *count < LIBSPID_EOC_IGMP_SNOOPING_ITMES_MAX && strcmp (key, "");
+ (*count)++)
+ {
+ /* Get a line from the conf file */
+ elt_number = LIBSPID_CONFIG_ELT_MAX_NB;
+ error =
+ libspid_config_read_line_repetitive
+ (LIBSPID_IGMP_CONF_PATH, delimiters, key, &elt_number,
+ elt, buffer, LIBSPID_CONFIG_LINE_MAX_LEN, &user_data);
+
+ if (LIBSPID_SUCCESS != error)
+ return error;;
+
+ strcpy (entry_ptr->mac_addr, buffer);
+
+ if (elt_number < LIBSPID_EOC_IGMP_SNOOPING_PARAM_NUM)
+ {
+ strcpy (entry_ptr->igmp_snooping_en, "");
+ }
+ else
+ {
+ strcpy (entry_ptr->igmp_snooping_en, elt[0]);
+ }
+
+ entry_ptr++;
+ }
+
+ libspid_config_read_line_repetitive (0, 0, 0, 0, 0, 0, 0, &user_data);
+ return LIBSPID_SUCCESS;
+}
+
+/**
+ * Set igmp snooping entry with the given slave MAC address<BR>
+ * \param mac_address slave MAC address
+ * \param entry igmp entry
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ * \return LIBSPID_ERROR_NO_SPACE: there no space for new entry
+ */
+extern libspid_error_t
+libspid_eoc_igmp_snooping_set (char *mac_address,
+ libspid_eoc_igmp_snooping_entry_t * entry)
+{
+ const char delimiter = LIBSPID_EOC_IGMP_SNOOPING_CONF_DELIMITER[0];
+ char key[LIBSPID_CONFIG_KEY_MAX_LEN] = { 0 };
+ char *elt[LIBSPID_EOC_IGMP_SNOOPING_PARAM_NUM];
+ libspid_error_t ret;
+ libspid_eoc_igmp_snooping_entry_t igmp_get_entry;
+ int i;
+
+ /* check input parameters */
+ if ((mac_address == NULL) || (entry == NULL))
+ return LIBSPID_ERROR_PARAM;
+
+ /* check that MAC address already exist */
+ ret = libspid_eoc_igmp_snooping_get (mac_address, &igmp_get_entry);
+
+ if (LIBSPID_SUCCESS != ret)
+ {
+ return ret;
+ }
+
+ /* use slave MAC to compose */
+ /* key for line in configuration file */
+ strcpy (key, mac_address);
+
+ /* allocate buffers */
+ for (i = 0; i < LIBSPID_EOC_IGMP_SNOOPING_PARAM_NUM; i++)
+ {
+ elt[i] = (char *) malloc (5 * sizeof (char));
+
+ if (NULL != elt[i])
+ memset (elt[i], 0, 5);
+ else
+ {
+ LIBSPID_EOC_LOG_2 ("%s: error allocating element "
+ "buffers (errno=%d)", __FUNCTION__, errno);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+ }
+
+ strcpy (elt[0], entry->igmp_snooping_en);
+ ret = libspid_config_write_line (LIBSPID_IGMP_CONF_PATH,
+ delimiter, key,
+ LIBSPID_EOC_IGMP_SNOOPING_PARAM_NUM,
+ elt);
+
+ /* free element buffers */
+ for (i = 0; i < LIBSPID_EOC_IGMP_SNOOPING_PARAM_NUM; i++)
+ {
+ if (elt[i])
+ {
+ free (elt[i]);
+ elt[i] = NULL;
+ }
+ }
+
+ if (ret != LIBSPID_SUCCESS)
+ {
+ LIBSPID_EOC_LOG_2 ("%s: cannot write igmp snooping entry (errno=%d)",
+ __FUNCTION__, errno);
+ return ret;
+ }
+
+ return LIBSPID_SUCCESS;
+}
+
+
+/** internal helper function for checking parameters of igmp.conf */
+int
+igmp_check_input_parameters (libspid_eoc_igmp_snooping_entry_t * entry,
+ libspid_eoc_igmp_snooping_entry_t * entries_cnf,
+ int count_cnf,
+ libspid_igmp_snooping_check_error_t *
+ error_types)
+{
+ int error_number = 0;
+ int i = 0, value = 0;
+ int ret = 0;
+ char *pnumber;
+
+ if (entry == NULL || entries_cnf == NULL || error_types == NULL)
+ {
+ return -1;
+ }
+
+ /** check MAC address*/
+ if (strlen (entry->mac_addr) != LIBSPID_MAC_STR_LEN - 1)
+ ret = -1;
+
+ for (i = 0; i < LIBSPID_MAC_STR_LEN - 1; i++)
+ {
+ entry->mac_addr[i] = tolower (entry->mac_addr[i]);
+
+ if (!((entry->mac_addr[i] >= '0'
+ && entry->mac_addr[i] <= '9')
+ || (entry->mac_addr[i] >= 'a'
+ && entry->mac_addr[i] <= 'f')
+ || entry->mac_addr[i] == ':'))
+ ret = -1;
+
+ if ((i % 3) == 2 && entry->mac_addr[i] != ':')
+ ret = -1;
+ }
+
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_IGMP_SNOOPING_MAC_FORMAT;
+ error_number++;
+ ret = 0;
+ }
+
+ /** check enable value */
+ value = strtol (entry->igmp_snooping_en, &pnumber, 10);
+
+ if (*pnumber != '\0'
+ || strcmp (entry->igmp_snooping_en, "") == 0)
+ ret = -1;
+ else
+ ret = (value < 0 || value > 1) ? -1 : 0;
+
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_IGMP_SNOOPING_EN;
+ error_number++;
+ ret = 0;
+ }
+
+ return error_number;
+}
+
+/** internal function for compare the mac*/
+static int
+cmp_string_mac (const void *p1, const void *p2)
+{
+ return strcmp (((libspid_eoc_igmp_snooping_entry_t *) p1)->mac_addr,
+ ((libspid_eoc_igmp_snooping_entry_t *) p2)->mac_addr);
+}
+
+
+/**
+ * Check igmp.conf file
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_CHECK: check utility failed
+ */
+extern libspid_error_t
+libspid_eoc_igmp_snooping_check (void)
+{
+ int count_cnf = 0, wl_count_cnf = 0;;
+ int ret = -1;
+ int i = 0;
+ libspid_eoc_igmp_snooping_entry_t
+ entries_cnf[LIBSPID_EOC_IGMP_SNOOPING_ITMES_MAX];
+ libspid_eoc_igmp_snooping_entry_t
+ entries_cnf_sort[LIBSPID_EOC_IGMP_SNOOPING_ITMES_MAX];
+ libspid_eoc_wl_entry_t
+ wl_entries_cnf_sort[LIBSPID_WHITE_LIST_MAX_STA_NUM];
+ libspid_eoc_igmp_snooping_entry_t entry;
+ char key_not_unique[LIBSPID_MAC_STR_LEN];
+ LIBSPID_EOC_LOG_1 ("%s: Check igmp.conf...", __FUNCTION__);
+ /** obtain the igmp list from configuration file */
+ ret = libspid_eoc_igmp_snooping_get_list (entries_cnf, &count_cnf);
+
+ if (ret != LIBSPID_SUCCESS)
+ {
+ return ret;
+ }
+
+ ret = libspid_eoc_wl_get_list (wl_entries_cnf_sort, &wl_count_cnf);
+
+ if (ret != LIBSPID_SUCCESS)
+ {
+ return ret;
+ }
+
+ memcpy (entries_cnf_sort, entries_cnf,
+ count_cnf * sizeof (libspid_eoc_igmp_snooping_entry_t));
+ /* sort igmp.conf */
+ qsort (entries_cnf_sort, count_cnf,
+ sizeof (libspid_eoc_igmp_snooping_entry_t), cmp_string_mac);
+
+ /* check if MAC is unique key */
+ for (i = 0; i < count_cnf - 1; i++)
+ {
+ if (strcmp (entries_cnf_sort[i].mac_addr,
+ entries_cnf_sort[i + 1].mac_addr) == 0)
+ {
+ strcpy (key_not_unique, entries_cnf_sort[i].mac_addr);
+ break;
+ }
+ }
+
+ /* sort white_list.conf */
+ qsort (wl_entries_cnf_sort, wl_count_cnf,
+ sizeof (libspid_eoc_wl_entry_t), cmp_string_mac);
+
+ for (i = 0; i < count_cnf; i++)
+ {
+ int number_of_error = 0;
+ libspid_igmp_snooping_check_error_t
+ error_types[LIBSPID_EOC_IGMP_SNOOPING_ERROR_TYPES_NUM];
+ libspid_eoc_igmp_snooping_entry_t *res;
+ entry = entries_cnf_sort[i];
+ /* Check dependency between igmp.conf and white_list.conf file
+ * check if MAC defined in igmp.conf but not in white_list.conf */
+ res = bsearch (&entry, wl_entries_cnf_sort, wl_count_cnf,
+ sizeof (libspid_eoc_wl_entry_t), cmp_string_mac);
+
+ if (res == NULL)
+ {
+ LIBSPID_EOC_LOG_1
+ ("MAC (%s) defined in igmp.conf but not "
+ "in white_list.conf", entry.mac_addr);
+ ret = LIBSPID_ERROR_CHECK;
+ }
+
+ /** check format of the input parameters */
+ number_of_error = igmp_check_input_parameters (&entry,
+ entries_cnf,
+ count_cnf,
+ error_types);
+ /* if MAC is not unique key find error line */
+ if (strcmp (key_not_unique, entry.mac_addr) == 0)
+ {
+ number_of_error += 1;
+ error_types[number_of_error - 1] =
+ LIBSPID_ERROR_IGMP_SNOOPING_MAC_DUPLICATE;
+ }
+
+ if (number_of_error > 0)
+ {
+ int j = 0;
+ libspid_boolean_t unique_address = LIBSPID_TRUE;
+ ret = LIBSPID_ERROR_CHECK;
+ LIBSPID_EOC_LOG_1 ("Error in line:%d\n", i + 2);
+
+ for (j = 0; j < number_of_error; j++)
+ {
+ switch (error_types[j])
+ {
+ case LIBSPID_ERROR_IGMP_SNOOPING_MAC_FORMAT:
+ LIBSPID_EOC_LOG_0 ("Malformed MAC address.");
+ break;
+ case LIBSPID_ERROR_IGMP_SNOOPING_EN:
+ LIBSPID_EOC_LOG_0 ("Igmp snooping enable val err.");
+ break;
+ case LIBSPID_ERROR_IGMP_SNOOPING_MAC_DUPLICATE:
+ LIBSPID_EOC_LOG_1 ("MAC address %s is not "
+ "unique key.", key_not_unique);
+ unique_address = LIBSPID_FALSE;
+ break;
+ default:
+ break;
+ }
+ }
+ if (unique_address == LIBSPID_FALSE)
+ return ret;
+ }
+ else if (number_of_error == -1)
+ return LIBSPID_ERROR_PARAM;
+ }
+
+ /* Check dependency between igmp.conf and white_list.conf file
+ * check if MAC defined in white_list.conf but not in igmp.conf */
+ for (i = 0; i < wl_count_cnf; i++)
+ {
+ libspid_eoc_wl_entry_t *res;
+ libspid_eoc_wl_entry_t wl_entry;
+ wl_entry = wl_entries_cnf_sort[i];
+ res = bsearch (&wl_entry, entries_cnf_sort,
+ count_cnf,
+ sizeof (libspid_eoc_igmp_snooping_entry_t),
+ cmp_string_mac);
+
+ if (res == NULL)
+ {
+ LIBSPID_EOC_LOG_1 ("MAC (%s) defined in white_list.conf "
+ "but not in igmp.conf", wl_entry.mac_addr);
+ ret = LIBSPID_ERROR_CHECK;
+ }
+ }
+
+ return ret;
+}
diff --git a/cleopatre/application/libspid/src/image.c b/cleopatre/application/libspid/src/image.c
index 01c5fb813f..bd1807a98e 100644
--- a/cleopatre/application/libspid/src/image.c
+++ b/cleopatre/application/libspid/src/image.c
@@ -17,9 +17,12 @@
#include <string.h>
#include <fcntl.h>
#include <sys/ioctl.h>
+#include <syslog.h>
+#include <errno.h>
#include <unistd.h>
#include <libgen.h>
#include <syslog.h>
+#include <sys/utsname.h>
#include <mtd/mtd-user.h>
#include "libspid.h"
@@ -43,7 +46,8 @@
* \return LIBSPID_ERROR_SYSTEM: system error, see errno
*/
-libspid_error_t libspid_image_get_desc(libspid_image_desc_type_t type, spidcom_image_desc_t *image_desc, char *mtd_name)
+libspid_error_t
+libspid_image_get_desc (libspid_image_desc_type_t type, spidcom_image_desc_t *image_desc, char *mtd_name)
{
int fd0 = 0;
int fd1 = 0;
@@ -57,65 +61,76 @@ libspid_error_t libspid_image_get_desc(libspid_image_desc_type_t type, spidcom_i
FILE *fp;
char *img_desc_mtd_num;
spidcom_nvram_t nvram;
+ libspid_error_t ret = -1;
- if ( (image_desc == NULL) || (mtd_name == NULL) )
+ if ((image_desc == NULL) || (mtd_name == NULL))
{
+ syslog (LOG_ERR, "%s: invalid arguments", __FUNCTION__);
return LIBSPID_ERROR_PARAM;
}
- if ( (type >= LIBSPID_IMAGE_DESC_TYPE_NB) )
+ if (type >= LIBSPID_IMAGE_DESC_TYPE_NB)
{
+ syslog (LOG_ERR, "%s: type is out-of-range", __FUNCTION__);
return LIBSPID_ERROR_PARAM;
}
- if ( LIBSPID_SUCCESS != libspid_system_get_nvram(&nvram) )
+ if (LIBSPID_SUCCESS != (ret = libspid_system_get_nvram (&nvram)))
{
- return LIBSPID_ERROR_SYSTEM;
+ syslog (LOG_ERR, "%s: cannot get nvram contents", __FUNCTION__);
+ return ret;
}
- if ( nvram.nb_images == 1 && ( type != LIBSPID_IMAGE_DESC_TYPE_0 && type != LIBSPID_IMAGE_DESC_TYPE_CURRENT ) )
+ if (nvram.nb_images == 1 && (type != LIBSPID_IMAGE_DESC_TYPE_0 && type != LIBSPID_IMAGE_DESC_TYPE_CURRENT))
{
+ syslog (LOG_ERR, "%s: incoherent parameters", __FUNCTION__);
return LIBSPID_ERROR_PARAM;
}
- if( (fp = fopen (LIBSPID_SYSTEM_MTD_PATH, "r")) == NULL)
+ if ((fp = fopen (LIBSPID_SYSTEM_MTD_PATH, "r")) == NULL)
{
+ syslog (LOG_ERR, "%s: cannot open %s (%s)", __FUNCTION__,
+ LIBSPID_SYSTEM_MTD_PATH, strerror (errno));
return LIBSPID_ERROR_SYSTEM;
}
- while ( fgets(line_buffer, LIBSPID_CONFIG_LINE_MAX_LEN - 1, fp) != NULL )
+ while (fgets (line_buffer, LIBSPID_CONFIG_LINE_MAX_LEN - 1, fp) != NULL)
{
if ( strstr(line_buffer, SPIDCOM_IMG_DESC_IMG_NAME_0) != NULL )
{
img_desc_0_found = 1;
/* Extract mtd path from line mtd<num>: <size> <erasesize> "nvram" */
- img_desc_mtd_num = strtok_r(line_buffer, ": ", &strtok_ctx);
- sprintf(mtd_name_temp[0], "%s/%s", LIBSPID_DEV_PATH, img_desc_mtd_num);
+ img_desc_mtd_num = strtok_r (line_buffer, ": ", &strtok_ctx);
+ sprintf (mtd_name_temp[0], "%s/%s", LIBSPID_DEV_PATH, img_desc_mtd_num);
}
-
else if ( nvram.nb_images > 1 && ( strstr(line_buffer, SPIDCOM_IMG_DESC_IMG_NAME_1) != NULL ) )
{
img_desc_1_found = 1;
/* Extract mtd path from line mtd<num>: <size> <erasesize> "nvram" */
- img_desc_mtd_num = strtok_r(line_buffer, ": ", &strtok_ctx);
- sprintf(mtd_name_temp[1], "%s/%s",LIBSPID_DEV_PATH, img_desc_mtd_num);
+ img_desc_mtd_num = strtok_r (line_buffer, ": ", &strtok_ctx);
+ sprintf (mtd_name_temp[1], "%s/%s",LIBSPID_DEV_PATH, img_desc_mtd_num);
}
}
fclose (fp);
- if ( img_desc_0_found == 0 || (nvram.nb_images > 1 && img_desc_1_found == 0) )
+ if (img_desc_0_found == 0 || (nvram.nb_images > 1 && img_desc_1_found == 0))
{
+ syslog (LOG_ERR, "%s: cannot find image", __FUNCTION__);
return LIBSPID_ERROR_NOT_FOUND;
}
/* open the MTD devices for partition #0 and #1 */
- if ( (fd0 = open(mtd_name_temp[0], O_RDONLY)) < 0 )
+ if ((fd0 = open (mtd_name_temp[0], O_RDONLY)) < 0)
{
+ syslog (LOG_ERR, "%s: cannot open %s (%s)", __FUNCTION__,
+ mtd_name_temp[0], strerror (errno));
return LIBSPID_ERROR_SYSTEM;
}
- if ( nvram.nb_images > 1 && (fd1 = open(mtd_name_temp[1], O_RDONLY)) < 0 )
+ if (nvram.nb_images > 1 && (fd1 = open (mtd_name_temp[1], O_RDONLY)) < 0)
{
- close(fd0);
+ close (fd0);
+ syslog (LOG_ERR, "%s: cannot open %s (%s)", __FUNCTION__,
+ mtd_name_temp[1], strerror (errno));
return LIBSPID_ERROR_SYSTEM;
}
@@ -123,26 +138,28 @@ libspid_error_t libspid_image_get_desc(libspid_image_desc_type_t type, spidcom_i
if ( (read(fd0, &image_desc_temp[0], sizeof(spidcom_image_desc_t)) < (int)sizeof(spidcom_image_desc_t))
|| ( nvram.nb_images > 1 && ( read(fd1, &image_desc_temp[1], sizeof(spidcom_image_desc_t)) < (int)sizeof(spidcom_image_desc_t) ) ) )
{
- close(fd0);
+ close (fd0);
if (nvram.nb_images > 1)
- close(fd1);
+ close (fd1);
+ syslog (LOG_ERR, "%s: cannot read %s (%s)", __FUNCTION__,
+ mtd_name_temp[0], strerror (errno));
return LIBSPID_ERROR_SYSTEM;
}
- close(fd0);
- close(fd1);
+ close (fd0);
+ close (fd1);
/* give asked type */
- switch(type)
+ switch (type)
{
case LIBSPID_IMAGE_DESC_TYPE_0 :
- if ( SPIDCOM_IMG_DESC_IS_VALID(image_desc_temp) )
+ if (SPIDCOM_IMG_DESC_IS_VALID (image_desc_temp))
{
found_index = 0;
}
break;
case LIBSPID_IMAGE_DESC_TYPE_1:
- if ( SPIDCOM_IMG_DESC_IS_VALID(image_desc_temp + 1) )
+ if (SPIDCOM_IMG_DESC_IS_VALID (image_desc_temp + 1))
{
found_index = 1;
}
@@ -173,32 +190,55 @@ libspid_error_t libspid_image_get_desc(libspid_image_desc_type_t type, spidcom_i
}
/* check image validity */
- if ( nvram.nb_images == 1 )
+ if (nvram.nb_images == 1)
{
found_index = 0;
}
- else if ( !SPIDCOM_IMG_DESC_IS_VALID(image_desc_temp) )
+ else if (!SPIDCOM_IMG_DESC_IS_VALID (image_desc_temp))
{
found_index = 1;
}
- else if ( !SPIDCOM_IMG_DESC_IS_VALID(image_desc_temp + 1) )
+ else if (!SPIDCOM_IMG_DESC_IS_VALID (image_desc_temp + 1))
{
found_index = 0;
}
else
{
- /* we have two images and both are valid, find the highest index */
- if ( image_desc_temp[0].index > image_desc_temp[1].index )
+ /** We have two images and both are valid, find the current image.
+ * It is not possible to have both images that have just been upgraded
+ * (flag is_1st_boot = 1). */
+ if (image_desc_temp[0].is_1st_boot && image_desc_temp[1].is_1st_boot)
{
- found_index = 0;
+ syslog (LOG_ERR, "%s: both images cannot be valid and tagged as 1st boot", __FUNCTION__);
+ return LIBSPID_ERROR_SYSTEM;
}
- else
+ /** If both have already booted at least once
+ * (is_1st_boot has been set to 0 by spidboot),
+ * find the highest index (index incremented by libspid_image_select). */
+ if (!image_desc_temp[0].is_1st_boot && !image_desc_temp[1].is_1st_boot)
+ {
+ if (image_desc_temp[0].index > image_desc_temp[1].index)
+ {
+ found_index = 0;
+ }
+ else
+ {
+ found_index = 1;
+ }
+ }
+ /** If one image has never booted (flag is_1st_boot = 1),
+ * we know that the current image is the other one. */
+ else if (image_desc_temp[0].is_1st_boot)
{
found_index = 1;
}
+ else /* image_desc_temp[1].is_1st_boot */
+ {
+ found_index = 0;
+ }
}
/* give alternate index if asked */
- if ( type == LIBSPID_IMAGE_DESC_TYPE_ALTERNATE )
+ if (type == LIBSPID_IMAGE_DESC_TYPE_ALTERNATE)
{
found_index = (found_index + 1) % 2;
}
@@ -211,14 +251,55 @@ libspid_error_t libspid_image_get_desc(libspid_image_desc_type_t type, spidcom_i
mtd_name[0] = '\0';
if (found_index >= 0)
{
- strcpy(mtd_name, mtd_name_temp[found_index]);
+ strcpy (mtd_name, mtd_name_temp[found_index]);
}
- if ( (found_index < 0) || !SPIDCOM_IMG_DESC_IS_VALID(image_desc_temp + found_index) )
+ /** Image cannot be invalid in case of requested type CURRENT. */
+ if ((found_index < 0)
+ || (!SPIDCOM_IMG_DESC_IS_VALID (image_desc_temp + found_index)
+ && (LIBSPID_IMAGE_DESC_TYPE_CURRENT == type)))
+ {
+ syslog (LOG_ERR, "%s: found image is not valid", __FUNCTION__);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+
+ memcpy (image_desc, &image_desc_temp[found_index], sizeof (spidcom_image_desc_t));
+
+ return LIBSPID_SUCCESS;
+}
+
+/**
+ * Read running image version.
+ *
+ * \param image_version buffer with running image version
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno
+ */
+
+libspid_error_t
+libspid_image_get_running_version (char *image_version)
+{
+ char *image_version_tmp, *image_version_tmp1, *saveptr;
+ struct utsname buf;
+ int image_version_str_length = 0;
+
+ if (uname (&buf) != 0)
{
+ syslog (LOG_ERR,"%s: Error reading image version", __FUNCTION__);
return LIBSPID_ERROR_SYSTEM;
}
- memcpy( image_desc, &image_desc_temp[found_index], sizeof(spidcom_image_desc_t) );
+ else
+ {
+ image_version_tmp = strtok_r (buf.version, "()", &saveptr);
+ image_version_tmp = strtok_r (NULL, "()", &saveptr);
+
+ image_version_tmp1 = strstr(image_version_tmp, "based on");
+ image_version_str_length = strlen(image_version_tmp)-strlen(image_version_tmp1)-1;
+
+ strncpy(image_version, image_version_tmp, image_version_str_length);
+ image_version[image_version_str_length] = '\0';
+
+ }
return LIBSPID_SUCCESS;
}
@@ -299,8 +380,10 @@ libspid_image_get_index (const char *mtd_path, int *index)
* \return LIBSPID_ERROR_SYSTEM: system error, see errno
*/
-libspid_error_t libspid_image_select(libspid_image_select_t select)
+libspid_error_t
+libspid_image_select (libspid_image_select_t select)
{
+#ifndef __FTESTS_PC__
int fd;
spidcom_image_desc_t image_desc[2], *image_desc_ptr;
char mtd_name[2][32], current_mtd_name[32];
@@ -308,6 +391,7 @@ libspid_error_t libspid_image_select(libspid_image_select_t select)
//region_info_t reginfo;
//char cmd_buffer[256];
spidcom_nvram_t nvram;
+ libspid_error_t ret = -1;
#ifndef __UTESTS__
volatile mtd_info_t meminfo;
erase_info_t erase;
@@ -318,44 +402,75 @@ libspid_error_t libspid_image_select(libspid_image_select_t select)
} meminfo;
#endif /* __UTESTS__ */
- if ( (select >= LIBSPID_IMAGE_SELECT_NB) )
+ if (select >= LIBSPID_IMAGE_SELECT_NB)
{
+ syslog (LOG_ERR, "%s: argument is out-of-range", __FUNCTION__);
return LIBSPID_ERROR_PARAM;
}
- if ( LIBSPID_SUCCESS != libspid_system_get_nvram(&nvram) )
+ if (LIBSPID_SUCCESS != (ret = libspid_system_get_nvram (&nvram)))
{
- return LIBSPID_ERROR_SYSTEM;
+ syslog (LOG_ERR, "%s: cannot get nvram contents", __FUNCTION__);
+ return ret;
}
- if ( nvram.nb_images == 1 )
+ if (nvram.nb_images == 1)
{
- if ( select != LIBSPID_IMAGE_SELECT_0 )
+ if (select != LIBSPID_IMAGE_SELECT_0)
+ {
+ syslog (LOG_ERR, "%s: incoherent parameters", __FUNCTION__);
return LIBSPID_ERROR_PARAM;
+ }
else
return LIBSPID_SUCCESS;
}
/* get the current partition mtd_name */
- if ( LIBSPID_SUCCESS != libspid_image_get_desc(LIBSPID_IMAGE_DESC_TYPE_CURRENT, image_desc, current_mtd_name) )
+ if (LIBSPID_SUCCESS != (ret = libspid_image_get_desc \
+ (LIBSPID_IMAGE_DESC_TYPE_CURRENT, image_desc, current_mtd_name)))
{
- return LIBSPID_ERROR_SYSTEM;
+ syslog (LOG_ERR, "%s: cannot get image descriptor", __FUNCTION__);
+ return ret;
}
/* fill table with index 0='the new selected', 1='the other' */
- switch(select)
+ switch (select)
{
case LIBSPID_IMAGE_SELECT_0:
- libspid_image_get_desc(LIBSPID_IMAGE_DESC_TYPE_0, image_desc, mtd_name[0]);
- libspid_image_get_desc(LIBSPID_IMAGE_DESC_TYPE_1, image_desc + 1, mtd_name[1]);
+ if (LIBSPID_SUCCESS != (ret = libspid_image_get_desc (LIBSPID_IMAGE_DESC_TYPE_0, image_desc, mtd_name[0])))
+ {
+ syslog (LOG_ERR, "%s: cannot get image descriptor 0", __FUNCTION__);
+ return ret;
+ }
+ if (LIBSPID_SUCCESS != (ret = libspid_image_get_desc (LIBSPID_IMAGE_DESC_TYPE_1, image_desc + 1, mtd_name[1])))
+ {
+ syslog (LOG_ERR, "%s: cannot get image descriptor 1", __FUNCTION__);
+ return ret;
+ }
break;
case LIBSPID_IMAGE_SELECT_1:
- libspid_image_get_desc(LIBSPID_IMAGE_DESC_TYPE_1, image_desc, mtd_name[0]);
- libspid_image_get_desc(LIBSPID_IMAGE_DESC_TYPE_0, image_desc + 1, mtd_name[1]);
+ if (LIBSPID_SUCCESS != (ret = libspid_image_get_desc (LIBSPID_IMAGE_DESC_TYPE_1, image_desc, mtd_name[0])))
+ {
+ syslog (LOG_ERR, "%s: cannot get image descriptor 1", __FUNCTION__);
+ return ret;
+ }
+ if (LIBSPID_SUCCESS != (ret = libspid_image_get_desc (LIBSPID_IMAGE_DESC_TYPE_0, image_desc + 1, mtd_name[1])))
+ {
+ syslog (LOG_ERR, "%s: cannot get image descriptor 0", __FUNCTION__);
+ return ret;
+ }
break;
case LIBSPID_IMAGE_SELECT_SWITCH:
- libspid_image_get_desc(LIBSPID_IMAGE_DESC_TYPE_ALTERNATE, image_desc, mtd_name[0]);
- libspid_image_get_desc(LIBSPID_IMAGE_DESC_TYPE_CURRENT, image_desc + 1, mtd_name[1]);
+ if (LIBSPID_SUCCESS != (ret = libspid_image_get_desc (LIBSPID_IMAGE_DESC_TYPE_ALTERNATE, image_desc, mtd_name[0])))
+ {
+ syslog (LOG_ERR, "%s: cannot get image descriptor alternate", __FUNCTION__);
+ return ret;
+ }
+ if (LIBSPID_SUCCESS != (ret = libspid_image_get_desc (LIBSPID_IMAGE_DESC_TYPE_CURRENT, image_desc + 1, mtd_name[1])))
+ {
+ syslog (LOG_ERR, "%s: cannot get image descriptor current", __FUNCTION__);
+ return ret;
+ }
break;
default:
return LIBSPID_ERROR_SYSTEM;
@@ -364,49 +479,54 @@ libspid_error_t libspid_image_select(libspid_image_select_t select)
/* check the validity of selected partition */
if (!image_desc[0].is_valid)
{
+ syslog (LOG_ERR, "%s: image descriptor is not valid", __FUNCTION__);
return LIBSPID_ERROR_SYSTEM;
}
/* check if we are selecting our current partition */
- if ( !strcmp(current_mtd_name, mtd_name[0]) )
+ if (!strcmp (current_mtd_name, mtd_name[0]))
{
/* no work to be done
- * bacause we are demanded to switch to the image
+ * because we are demanded to switch to the image
* that we are actually already running */
return LIBSPID_SUCCESS;
}
/* open the selected mtd partition */
- if ( (fd = open(mtd_name[0], O_RDWR)) < 0 )
+ if ((fd = open (mtd_name[0], O_RDWR)) < 0)
{
+ syslog (LOG_ERR, "%s: cannot open %s (%s)", __FUNCTION__, mtd_name[0],
+ strerror (errno));
return LIBSPID_ERROR_SYSTEM;
}
#ifndef __UTESTS__
/* get the flash block erase size */
- if ( ioctl(fd, MEMGETINFO, &meminfo) < 0 )
+ if (ioctl (fd, MEMGETINFO, &meminfo) < 0)
{
- //syslog(LOG_WARNING, "%s: cannot get info from %s (errno=%d)", __FUNCTION__, mtd_name[0], errno);
- close(fd);
+ syslog(LOG_WARNING, "%s: cannot get info from %s (errno=%d)", __FUNCTION__, mtd_name[0], errno);
+ close (fd);
return LIBSPID_ERROR_SYSTEM;
}
#else
- meminfo.erasesize = 64000; /* 64K sector */
+ meminfo.erasesize = LIBSPID_UPDATE_FLASH_SECTOR_64K;
#endif /* __UTESTS__ */
/* allocate memory to copy the 1st sector of new selected partition */
- if ( (sector_data = malloc(meminfo.erasesize)) == NULL )
+ if ((sector_data = malloc (meminfo.erasesize)) == NULL)
{
- //syslog(LOG_WARNING, "%s: memory allocation of %d bytes failed (errno=%d)", __FUNCTION__, meminfo.erasesize, errno);
- close(fd);
+ syslog(LOG_WARNING, "%s: memory allocation of %d bytes failed (errno=%d)", __FUNCTION__, meminfo.erasesize, errno);
+ close (fd);
return LIBSPID_ERROR_SYSTEM;
}
/* read the 1st sector data */
- if ( read(fd, sector_data, meminfo.erasesize) < 0 )
+ if (read (fd, sector_data, meminfo.erasesize) < 0)
{
- free(sector_data);
- close(fd);
+ free (sector_data);
+ close (fd);
+ syslog (LOG_ERR, "%s: cannot read %s (%s)", __FUNCTION__, mtd_name[0],
+ strerror (errno));
return LIBSPID_ERROR_SYSTEM;
}
@@ -418,11 +538,11 @@ libspid_error_t libspid_image_select(libspid_image_select_t select)
/* erase the 1st sector */
erase.start = 0;
erase.length = meminfo.erasesize;
- if (ioctl(fd, MEMERASE, &erase) != 0)
+ if (ioctl (fd, MEMERASE, &erase) != 0)
{
- //syslog(LOG_WARNING, "%s: flash erase of %s failed (errno=%d)", __FUNCTION__, mtd_name[0], errno);
- free(sector_data);
- close(fd);
+ syslog(LOG_WARNING, "%s: flash erase of %s failed (errno=%d)", __FUNCTION__, mtd_name[0], errno);
+ free (sector_data);
+ close (fd);
return LIBSPID_ERROR_SYSTEM;
}
#endif /* __UTESTS__ */
@@ -434,17 +554,19 @@ libspid_error_t libspid_image_select(libspid_image_select_t select)
free(sector_data);
return -errno;
}*/
- lseek(fd, 0, SEEK_SET);
+ lseek (fd, 0, SEEK_SET);
if (meminfo.erasesize != write (fd, sector_data, meminfo.erasesize))
{
- close(fd);
- free(sector_data);
+ close (fd);
+ free (sector_data);
+ syslog (LOG_ERR, "%s: cannot write %s (%s)", __FUNCTION__, mtd_name[0],
+ strerror (errno));
return LIBSPID_ERROR_SYSTEM;
}
- close(fd);
- free(sector_data);
-
+ close (fd);
+ free (sector_data);
+#endif /* __FTESTS_PC__ */
/* ok, new sector is selected */
return LIBSPID_SUCCESS;
}
diff --git a/cleopatre/application/libspid/src/maclimit_eoc.c b/cleopatre/application/libspid/src/maclimit_eoc.c
new file mode 100644
index 0000000000..b67995de09
--- /dev/null
+++ b/cleopatre/application/libspid/src/maclimit_eoc.c
@@ -0,0 +1,500 @@
+
+/* SPC300 bundle {{{
+ *
+ * Copyright (C) 2012 MStar
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file application/libspid/src/maclimit_eoc.c
+ * \brief Functions specific to mac limitation
+ * \ingroup libspid
+ *
+ */
+
+#include <sys/types.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <getopt.h>
+#include <syslog.h>
+#include <assert.h>
+#include <arpa/inet.h>
+#include <unistd.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <linux/netlink.h>
+#include <ctype.h>
+
+#include "libspid.h"
+#include "libmme.h"
+
+
+/**
+ * Returns get the maclimit default number
+ * \param num default maclimitation
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ */
+extern libspid_error_t
+libspid_eoc_maclimit_get_defaultnum (int *num)
+{
+ int ret;
+ char buffer[LIBSPID_LINE_MAX_LEN];
+
+ if (num == NULL)
+ return LIBSPID_ERROR_PARAM;
+
+ ret = libspid_config_read_item (LIBSPID_SLAVE_CONF_PATH,
+ LIBSPID_SLAVE_CONF_LABEL_MAC_LIMITATION,
+ buffer, LIBSPID_LINE_MAX_LEN);
+
+ if (LIBSPID_SUCCESS != ret)
+ {
+ LIBSPID_EOC_LOG_2 ("%s: get MAC limitation fail "
+ "buffers (errno=%d)", __FUNCTION__, errno);
+ *num = LIBSPID_MAC_LIMIT_DEFAULT_NUM;
+ }
+ else
+ {
+ if (1 != sscanf (buffer, "%d", num))
+ {
+ *num = LIBSPID_MAC_LIMIT_DEFAULT_NUM;
+ }
+ }
+
+ return LIBSPID_SUCCESS;
+}
+
+/**
+ * Returns the mac entry for the given slave MAC address
+ * \param mac_address slave MAC address
+ * \param entry maclimit entry
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ * \return LIBSPID_ERROR_NOT_FOUND: can not find the entry by this Mac
+ */
+extern libspid_error_t
+libspid_eoc_maclimit_get (char *mac_address,
+ libspid_eoc_maclimit_entry_t * entry)
+{
+ const char delimiters[2] = LIBSPID_PORT_CONF_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;
+ int i;
+
+ /* check input parameters */
+ if ((mac_address == NULL) || (entry == NULL))
+ return LIBSPID_ERROR_PARAM;
+
+ memset (entry, 0x0, sizeof (entry));
+
+ for (i = 0; i < LIBSPID_MAC_STR_LEN; i++)
+ {
+ mac_address[i] = tolower (mac_address[i]);
+ }
+
+ /* use slave MAC to compose key */
+ /* for line in configuration file */
+ strcpy (key, mac_address);
+ strcpy (entry->mac_addr, mac_address);
+
+ error = libspid_config_read_line (LIBSPID_MAC_LIMITATION_CONF_PATH,
+ delimiters, key,
+ &elt_number, elt, buffer,
+ LIBSPID_CONFIG_LINE_MAX_LEN);
+
+ if (LIBSPID_SUCCESS != error)
+ return error;
+
+
+ if (elt_number < LIBSPID_EOC_MACLIMIT_PARAM_NUM)
+ {
+ strcpy (entry->mac_limitation_num, "");
+ }
+ else
+ {
+ strcpy (entry->mac_limitation_num, elt[0]);
+ }
+
+ return LIBSPID_SUCCESS;
+}
+
+/**
+ * Returns the whole maclimit list from configuration file in a
+ * pointer to an array of maclimit entries.<BR>
+ * \param entry pointer to an array of maclimit entries
+ * \param count pointer to an integer for number of maclimit entries
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_NOT_FOUND: entry not found
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+extern libspid_error_t
+libspid_eoc_maclimit_get_list (libspid_eoc_maclimit_entry_t * entry,
+ int *count)
+{
+ const char delimiters[2] = LIBSPID_PORT_CONF_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;
+ libspid_eoc_maclimit_entry_t *entry_ptr;
+
+
+ void *user_data = NULL;
+
+ /* check input parameters */
+ if ((entry == NULL) || (count == NULL))
+ return LIBSPID_ERROR_PARAM;
+
+ *count = 0;
+ memset (key, 0x0, sizeof (key));
+ memset (entry, 0x0, sizeof (entry));
+ entry_ptr = entry;
+ /* get the first key */
+ error =
+ libspid_config_read_line_repetitive (LIBSPID_MAC_LIMITATION_CONF_PATH,
+ delimiters, key, &elt_number,
+ elt, buffer,
+ LIBSPID_CONFIG_LINE_MAX_LEN,
+ &user_data);
+
+ if (LIBSPID_SUCCESS != error)
+ return error;
+
+ for (; *count < LIBSPID_PORT_TOTAL_MAX && strcmp (key, ""); (*count)++)
+ {
+ /* Get a line from the conf file */
+ elt_number = LIBSPID_CONFIG_ELT_MAX_NB;
+ error =
+ libspid_config_read_line_repetitive
+ (LIBSPID_MAC_LIMITATION_CONF_PATH, delimiters, key, &elt_number,
+ elt, buffer, LIBSPID_CONFIG_LINE_MAX_LEN, &user_data);
+
+ if (LIBSPID_SUCCESS != error)
+ return error;;
+
+ strcpy (entry_ptr->mac_addr, buffer);
+
+ if (elt_number < LIBSPID_EOC_MACLIMIT_PARAM_NUM)
+ {
+ strcpy (entry_ptr->mac_limitation_num, "");
+ }
+ else
+ {
+ strcpy (entry_ptr->mac_limitation_num, elt[0]);
+ }
+
+ entry_ptr++;
+ }
+
+ libspid_config_read_line_repetitive (0, 0, 0, 0, 0, 0, 0, &user_data);
+ return LIBSPID_SUCCESS;
+}
+
+/**
+ * Set maclimit entry with the given slave MAC address<BR>
+ * \param mac_address slave MAC address
+ * \param entry maclimit entry
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ * \return LIBSPID_ERROR_NO_SPACE: there no space for new entry
+ */
+extern libspid_error_t
+libspid_eoc_maclimit_set (char *mac_address,
+ libspid_eoc_maclimit_entry_t * entry)
+{
+ const char delimiter = LIBSPID_PORT_CONF_DELIMITER[0];
+ char key[LIBSPID_CONFIG_KEY_MAX_LEN] = { 0 };
+ char *elt[LIBSPID_EOC_MACLIMIT_PARAM_NUM];
+ libspid_error_t ret;
+ libspid_eoc_maclimit_entry_t maclimit_get_entry;
+ int i;
+
+ /* check input parameters */
+ if ((mac_address == NULL) || (entry == NULL))
+ return LIBSPID_ERROR_PARAM;
+
+ /* check that MAC address and port index already exist */
+ ret = libspid_eoc_maclimit_get (mac_address, &maclimit_get_entry);
+
+ if (LIBSPID_SUCCESS != ret)
+ {
+ return ret;
+ }
+
+ /* use slave MAC and port index to compose */
+ /* key for line in configuration file */
+ strcpy (key, mac_address);
+
+ /* allocate buffers */
+ for (i = 0; i < LIBSPID_EOC_MACLIMIT_PARAM_NUM; i++)
+ {
+ elt[i] = (char *) malloc (5 * sizeof (char));
+
+ if (NULL != elt[i])
+ memset (elt[i], 0, 5);
+ else
+ {
+ LIBSPID_EOC_LOG_2 ("%s: error allocating element "
+ "buffers (errno=%d)", __FUNCTION__, errno);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+ }
+
+ strcpy (elt[0], entry->mac_limitation_num);
+ ret = libspid_config_write_line (LIBSPID_MAC_LIMITATION_CONF_PATH,
+ delimiter, key,
+ LIBSPID_EOC_MACLIMIT_PARAM_NUM, elt);
+
+ /* free element buffers */
+ for (i = 0; i < LIBSPID_EOC_MACLIMIT_PARAM_NUM; i++)
+ {
+ if (elt[i])
+ {
+ free (elt[i]);
+ elt[i] = NULL;
+ }
+ }
+
+ if (ret != LIBSPID_SUCCESS)
+ {
+ LIBSPID_EOC_LOG_2 ("%s: cannot write port entry (errno=%d)",
+ __FUNCTION__, errno);
+ return ret;
+ }
+
+ return LIBSPID_SUCCESS;
+}
+
+
+/** internal helper function for checking parameters of maclimitation.conf */
+int
+maclimit_check_input_parameters (libspid_eoc_maclimit_entry_t *
+ maclimit_entry,
+ libspid_eoc_maclimit_entry_t *
+ maclimit_entries_cnf, int maclimit_count_cnf,
+ libspid_maclimit_check_error_t * error_types)
+{
+ int error_number = 0;
+ int i = 0, value = 0;
+ int ret = 0;
+ char *pnumber;
+
+ if (maclimit_entry == NULL || maclimit_entries_cnf == NULL ||
+ error_types == NULL)
+ {
+ return -1;
+ }
+
+ /** check MAC address*/
+ if (strlen (maclimit_entry->mac_addr) != LIBSPID_MAC_STR_LEN - 1)
+ ret = -1;
+
+ for (i = 0; i < LIBSPID_MAC_STR_LEN - 1; i++)
+ {
+ maclimit_entry->mac_addr[i] = tolower (maclimit_entry->mac_addr[i]);
+
+ if (!((maclimit_entry->mac_addr[i] >= '0'
+ && maclimit_entry->mac_addr[i] <= '9')
+ || (maclimit_entry->mac_addr[i] >= 'a'
+ && maclimit_entry->mac_addr[i] <= 'f')
+ || maclimit_entry->mac_addr[i] == ':'))
+ ret = -1;
+
+ if ((i % 3) == 2 && maclimit_entry->mac_addr[i] != ':')
+ ret = -1;
+ }
+
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_MACLIMIT_MAC_FORMAT;
+ error_number++;
+ ret = 0;
+ }
+
+ /** check mac limitation value */
+ value = strtol (maclimit_entry->mac_limitation_num, &pnumber, 10);
+
+ if (*pnumber != '\0'
+ || strcmp (maclimit_entry->mac_limitation_num, "") == 0)
+ ret = -1;
+ else
+ ret = (value < 0 || value < LIBSPID_EOC_WL_EXT_MAC_LIMIT_MIN
+ || value > LIBSPID_EOC_WL_EXT_MAC_LIMIT_MAX) ? -1 : 0;
+
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_MACLIMIT_NUM;
+ error_number++;
+ ret = 0;
+ }
+
+ return error_number;
+}
+
+/** internal function for compare the mac*/
+static int
+cmp_string_mac (const void *p1, const void *p2)
+{
+ return strcmp (((libspid_eoc_maclimit_entry_t *) p1)->mac_addr,
+ ((libspid_eoc_maclimit_entry_t *) p2)->mac_addr);
+}
+
+
+/**
+ * Check maclimitation.conf file
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_CHECK: check utility failed
+ */
+extern libspid_error_t
+libspid_eoc_maclimit_check (void)
+{
+ int maclimit_count_cnf = 0, wl_count_cnf = 0;;
+ int ret = -1;
+ int i = 0;
+ libspid_eoc_maclimit_entry_t maclimit_entries_cnf[LIBSPID_PORT_TOTAL_MAX];
+ libspid_eoc_maclimit_entry_t
+ maclimit_entries_cnf_sort[LIBSPID_PORT_TOTAL_MAX];
+ libspid_eoc_wl_entry_t
+ wl_entries_cnf_sort[LIBSPID_WHITE_LIST_MAX_STA_NUM];
+ libspid_eoc_maclimit_entry_t maclimit_entry;
+ char key_not_unique[LIBSPID_MAC_STR_LEN];
+ LIBSPID_EOC_LOG_1 ("%s: Check maclimitation.conf...", __FUNCTION__);
+ /** obtain the maclimitation list from configuration file */
+ ret = libspid_eoc_maclimit_get_list (maclimit_entries_cnf,
+ &maclimit_count_cnf);
+
+ if (ret != LIBSPID_SUCCESS)
+ {
+ return ret;
+ }
+
+ ret = libspid_eoc_wl_get_list (wl_entries_cnf_sort, &wl_count_cnf);
+
+ if (ret != LIBSPID_SUCCESS)
+ {
+ return ret;
+ }
+
+ memcpy (maclimit_entries_cnf_sort, maclimit_entries_cnf,
+ maclimit_count_cnf * sizeof (libspid_eoc_maclimit_entry_t));
+ /* sort maclimitation.conf */
+ qsort (maclimit_entries_cnf_sort, maclimit_count_cnf,
+ sizeof (libspid_eoc_maclimit_entry_t), cmp_string_mac);
+
+ /* check if MAC is unique key */
+ for (i = 0; i < maclimit_count_cnf - 1; i++)
+ {
+ if (strcmp (maclimit_entries_cnf_sort[i].mac_addr,
+ maclimit_entries_cnf_sort[i + 1].mac_addr) == 0)
+ {
+ strcpy (key_not_unique, maclimit_entries_cnf_sort[i].mac_addr);
+ break;
+ }
+ }
+
+ /* sort white_list.conf */
+ qsort (wl_entries_cnf_sort, wl_count_cnf,
+ sizeof (libspid_eoc_wl_entry_t), cmp_string_mac);
+
+ for (i = 0; i < maclimit_count_cnf; i++)
+ {
+ int number_of_error = 0;
+ libspid_maclimit_check_error_t
+ error_types[LIBSPID_MAC_LIMIT_ERROR_TYPES_NUM];
+ libspid_eoc_maclimit_entry_t *res;
+ maclimit_entry = maclimit_entries_cnf_sort[i];
+ /* Check dependency between maclimitation.conf
+ * and white_list.conf file */
+ /* check if MAC defined in maclimitation.conf
+ * but not in white_list.conf */
+ res = bsearch (&maclimit_entry, wl_entries_cnf_sort, wl_count_cnf,
+ sizeof (libspid_eoc_wl_entry_t), cmp_string_mac);
+
+ if (res == NULL)
+ {
+ LIBSPID_EOC_LOG_1
+ ("MAC (%s) defined in maclimitation.conf but not "
+ "in white_list.conf", maclimit_entry.mac_addr);
+ ret = LIBSPID_ERROR_CHECK;
+ }
+
+ /** check format of the input parameters */
+ number_of_error = maclimit_check_input_parameters (&maclimit_entry,
+ maclimit_entries_cnf,
+ maclimit_count_cnf,
+ error_types);
+ /* if MAC is not unique key */
+ /* find error line */
+ if (strcmp (key_not_unique, maclimit_entry.mac_addr) == 0)
+ {
+ number_of_error += 1;
+ error_types[number_of_error - 1] =
+ LIBSPID_ERROR_MACLIMIT_MAC_DUPLICATE;
+ }
+
+ if (number_of_error > 0)
+ {
+ int j = 0;
+ libspid_boolean_t unique_address = LIBSPID_TRUE;
+ ret = LIBSPID_ERROR_CHECK;
+ LIBSPID_EOC_LOG_1 ("Error in line:%d\n", i + 2);
+
+ for (j = 0; j < number_of_error; j++)
+ {
+ switch (error_types[j])
+ {
+ case LIBSPID_ERROR_MACLIMIT_MAC_FORMAT:
+ LIBSPID_EOC_LOG_0 ("Malformed MAC address.");
+ break;
+ case LIBSPID_ERROR_MACLIMIT_NUM:
+ LIBSPID_EOC_LOG_0 ("Wrong maclimit num.");
+ break;
+ case LIBSPID_ERROR_MACLIMIT_MAC_DUPLICATE:
+ LIBSPID_EOC_LOG_1 ("MAC address %s is not "
+ "unique key.",key_not_unique );
+ unique_address = LIBSPID_FALSE;
+ break;
+ default:
+ break;
+ }
+ }
+ if (unique_address == LIBSPID_FALSE)
+ return ret;
+ }
+ else if (number_of_error == -1)
+ return LIBSPID_ERROR_PARAM;
+ }
+
+ /* Check dependency between maclimitation.conf and white_list.conf file */
+ /* check if MAC defined in white_list.conf but not in port.conf */
+ for (i = 0; i < wl_count_cnf; i++)
+ {
+ libspid_eoc_wl_entry_t *res;
+ libspid_eoc_wl_entry_t wl_entry;
+ wl_entry = wl_entries_cnf_sort[i];
+ res = bsearch (&wl_entry, maclimit_entries_cnf_sort,
+ maclimit_count_cnf,
+ sizeof (libspid_eoc_maclimit_entry_t), cmp_string_mac);
+
+ if (res == NULL)
+ {
+ LIBSPID_EOC_LOG_1 ("MAC (%s) defined in white_list.conf "
+ "but not in maclimitation.conf",
+ wl_entry.mac_addr);
+ ret = LIBSPID_ERROR_CHECK;
+ }
+ }
+
+ return ret;
+}
diff --git a/cleopatre/application/libspid/src/master_config_eoc.c b/cleopatre/application/libspid/src/master_config_eoc.c
new file mode 100644
index 0000000000..e485cb0c1b
--- /dev/null
+++ b/cleopatre/application/libspid/src/master_config_eoc.c
@@ -0,0 +1,712 @@
+
+/* SPC300 bundle {{{
+ *
+ * Copyright (C) 2010 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file application/libspid/src/master_config_eoc.c
+ * \brief Master configuration support specific for EoC modems
+ * \ingroup libspid
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <getopt.h>
+#include <syslog.h>
+#include <assert.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/mman.h>
+#include <arpa/inet.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <linux/netlink.h>
+#include <unistd.h>
+#include <ctype.h>
+
+#include "openssl_md5.h"
+#include "libspid.h"
+#include "nvram.h"
+
+libspid_error_t
+libspid_eoc_master_broadstorm_action (void)
+{
+ char buffer[LIBSPID_CONFIG_LINE_MAX_LEN];
+ char msg_system[256];
+ int broadcast_limit_en = 0;
+ int broadcast_limit_value = 0;
+ int unknown_limit_en = 0;
+ int unknown_limit_value = 0;
+ int i;
+
+ /* read broadcast fields */
+ if (LIBSPID_SUCCESS == libspid_config_read_item (
+ LIBSPID_MASTER_CONF_PATH,
+ LIBSPID_MASTER_CONF_LABEL_BCAST_LIMIT_ENABLE,
+ buffer, LIBSPID_LINE_MAX_LEN))
+ {
+ for (i = 0; i < (int) strlen (buffer); i++)
+ buffer[i] = tolower (buffer[i]);
+
+ if ((strcmp (buffer, "yes") == 0) || (strcmp (buffer, "y") == 0))
+ broadcast_limit_en = 1;
+
+ if (LIBSPID_SUCCESS
+ == libspid_config_read_item (
+ LIBSPID_MASTER_CONF_PATH,
+ LIBSPID_MASTER_CONF_LABEL_BCAST_LIMIT_VALUE,
+ buffer, LIBSPID_LINE_MAX_LEN))
+ sscanf (buffer, "%d", &broadcast_limit_value);
+
+ if (broadcast_limit_value <= 0)
+ broadcast_limit_en = 0;
+ }
+
+ /* read unkwown fields */
+ if (LIBSPID_SUCCESS == libspid_config_read_item (
+ LIBSPID_MASTER_CONF_PATH,
+ LIBSPID_MASTER_CONF_LABEL_UNKNOWN_LIMIT_ENABLE,
+ buffer, LIBSPID_LINE_MAX_LEN))
+ {
+ for (i = 0; i < (int) strlen (buffer); i++)
+ buffer[i] = tolower (buffer[i]);
+
+ if ((strcmp (buffer, "yes") == 0) || (strcmp (buffer, "y") == 0))
+ unknown_limit_en = 1;
+
+ if (LIBSPID_SUCCESS
+ == libspid_config_read_item (
+ LIBSPID_MASTER_CONF_PATH,
+ LIBSPID_MASTER_CONF_LABEL_UNKNOWN_LIMIT_VALUE,
+ buffer, LIBSPID_LINE_MAX_LEN))
+ sscanf (buffer, "%d", &unknown_limit_value);
+
+ if (unknown_limit_value <= 0)
+ unknown_limit_en = 0;
+ }
+
+ sprintf (msg_system, "tc qdisc del dev plc0 root\n");
+ system (msg_system);
+
+ /* No limitation requested */
+ if (broadcast_limit_en == 0 && unknown_limit_en == 0)
+ return LIBSPID_SUCCESS;
+
+ sprintf (msg_system, "tc qdisc add dev plc0 root handle 1: htb\n");
+ if (system (msg_system) != 0)
+ {
+ LIBSPID_EOC_LOG_1 ("%s: error on writting Qdisc rule !",
+ __FUNCTION__);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+
+ if (broadcast_limit_en)
+ {
+ const uint broadcast_mark = 0xFFFFFFFF;
+
+ sprintf (msg_system,"tc filter add dev plc0 parent 1: protocol all \
+ handle %u fw police rate %dkbit burst %db drop flowid 1:\n",
+ broadcast_mark, broadcast_limit_value, LIBSPID_MAX_PKT_SIZE);
+
+ if (system (msg_system) != 0)
+ {
+ LIBSPID_EOC_LOG_1 ("%s: error on writting broadcast limit !",
+ __FUNCTION__);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+ }
+
+ if (unknown_limit_en)
+ {
+ const uint unknown_mark = 0xFFFFFFFE;
+
+ sprintf (msg_system,"tc filter add dev plc0 parent 1: protocol all \
+ handle %u fw police rate %dkbit burst %db drop flowid 1:\n",
+ unknown_mark, unknown_limit_value, LIBSPID_MAX_PKT_SIZE);
+
+ if (system (msg_system) != 0)
+ {
+ LIBSPID_EOC_LOG_1 ("%s: error on writting unknown limit !",
+ __FUNCTION__);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+ }
+
+ return LIBSPID_SUCCESS;
+}
+
+/**
+ * In HTB class, the quantum is the amount of byte which is
+ * release on every token.
+ * 1500 < (rate/quantum) < 60000 , to avoid warning messages from kernel.
+ */
+static void
+bw_limit_quantum_check (char *buffer, int rate)
+{
+ /* 8 is for byte, 60 is the quantum max in kB. */
+ uint quantum_min = (rate / (8 * 60)) + 1;
+ uint quantum_max = (rate / 12 ); /* 12 = ((8/1000) *1500) */
+
+ if (buffer == NULL)
+ return;
+
+ if (quantum_max <= 0)
+ quantum_max = 1;
+
+ /* If the rate requested is too high, the quantum could be too small */
+ if (quantum_min > LIBSPID_MASTER_TC_QUANTUM_DEFAULT)
+ {
+ sprintf (buffer, "quantum %d", quantum_min);
+ return;
+ }
+
+ if (quantum_max < LIBSPID_MASTER_TC_QUANTUM_DEFAULT)
+ {
+ sprintf (buffer, "quantum %d", quantum_max);
+ return;
+ }
+}
+
+/**
+ * Perform master bw limit actions on master side.
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+libspid_error_t
+libspid_eoc_master_bw_limit_action (void)
+{
+ char buffer[LIBSPID_CONFIG_LINE_MAX_LEN];
+ int tx_limit_value = 0;
+ int rx_limit_value = 0;
+ char tmp_quantum[16];
+ char tmp[256];
+
+ if (LIBSPID_SUCCESS == libspid_config_read_item (
+ LIBSPID_MASTER_CONF_PATH,
+ LIBSPID_MASTER_CONF_LABEL_MASTER_BW_LIMIT_TX,
+ buffer, LIBSPID_LINE_MAX_LEN))
+ sscanf (buffer, "%d", &tx_limit_value);
+
+ if (LIBSPID_SUCCESS == libspid_config_read_item (
+ LIBSPID_MASTER_CONF_PATH,
+ LIBSPID_MASTER_CONF_LABEL_MASTER_BW_LIMIT_RX,
+ buffer, LIBSPID_LINE_MAX_LEN))
+ sscanf (buffer, "%d", &rx_limit_value);
+
+ if (tx_limit_value != 0)
+ {
+ memset (tmp, 0, sizeof (tmp));
+ sprintf (tmp, "tc qdisc del dev eth0 root\n");
+ system (tmp);
+ LIBSPID_EOC_LOG_1 ("%s", tmp);
+
+ memset (tmp, 0, sizeof (tmp));
+ sprintf (tmp, "tc qdisc add dev eth0 root handle 1: "
+ "htb r2q %d default 10\n",
+ LIBSPID_MASTER_TC_QUANTUM_DEFAULT);
+ LIBSPID_EOC_LOG_1 ("%s", tmp);
+ system (tmp);
+
+ /* Create HTB class (FIFO) */
+ memset (tmp, 0, sizeof (tmp));
+ memset (tmp_quantum, 0, sizeof (tmp_quantum));
+ bw_limit_quantum_check (tmp_quantum, tx_limit_value);
+ sprintf (tmp, "tc class add dev eth0 parent 1: "
+ "classid 1:10 htb rate %dkbit %s\n",
+ tx_limit_value, tmp_quantum);
+ LIBSPID_EOC_LOG_1 ("%s", tmp);
+ system (tmp);
+ }
+ if (rx_limit_value != 0)
+ {
+ memset (tmp, 0, sizeof (tmp));
+ sprintf (tmp, "tc qdisc del dev plc0 root\n");
+ LIBSPID_EOC_LOG_1 ("%s", tmp);
+ system (tmp);
+
+ memset (tmp, 0, sizeof (tmp));
+ sprintf (tmp, "tc qdisc add dev plc0 root handle 1: "
+ "htb r2q %d default 10\n",
+ LIBSPID_MASTER_TC_QUANTUM_DEFAULT);
+ LIBSPID_EOC_LOG_1 ("%s", tmp);
+ system (tmp);
+
+ /* Create HTB class (FIFO) */
+ memset (tmp_quantum, 0, sizeof (tmp_quantum));
+ memset (tmp, 0, sizeof (tmp));
+ bw_limit_quantum_check (tmp_quantum, rx_limit_value);
+ sprintf (tmp, "tc class add dev plc0 parent 1: "
+ "classid 1:10 htb rate %dkbit %s\n",
+ rx_limit_value, tmp_quantum);
+ LIBSPID_EOC_LOG_1 ("%s", tmp);
+ system (tmp);
+ }
+ return LIBSPID_SUCCESS;
+}
+
+/**
+ * Perform VLAN tagging actions on master side.
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+libspid_error_t
+libspid_eoc_master_vlan_action (void)
+{
+ int ret;
+#ifndef __UTESTS__
+ char* iface = LIBSPID_EOC_BR_IFACE;
+ char temp [256];
+#endif
+ char master_vid[LIBSPID_CONFIG_LINE_MAX_LEN];
+ libspid_ip_t ip;
+ char vlan_enable[LIBSPID_CONFIG_LINE_MAX_LEN];
+
+
+ /* check if VLAN is enabled for master */
+ ret = libspid_config_read_item (
+ LIBSPID_MASTER_CONF_PATH,
+ LIBSPID_MASTER_CONF_LABEL_VLAN_ADMIN_ENABLE, vlan_enable,
+ LIBSPID_CONFIG_LINE_MAX_LEN);
+ if (ret != LIBSPID_SUCCESS || strcmp (vlan_enable, "yes") != 0)
+ {
+#ifndef __UTESTS__
+ LIBSPID_EOC_LOG_0 ("VLAN not enabled on master - "
+ "VLAN action not performed");
+#endif
+ return LIBSPID_SUCCESS;
+ }
+
+ /* get structure with IP address of br0 interface */
+ ret = libspid_network_get_ip (LIBSPID_EOC_BR_IFACE, &ip);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ LIBSPID_EOC_LOG_1 ("%s: error getting IP address of br0 interface",
+ __FUNCTION__);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+
+ /* read VLAN ID value for master */
+ ret = libspid_config_read_item (LIBSPID_MASTER_CONF_PATH,
+ LIBSPID_MASTER_CONF_LABEL_VLAN_ADMIN_ID,
+ master_vid, LIBSPID_CONFIG_LINE_MAX_LEN);
+ if (ret != LIBSPID_SUCCESS)
+ {
+#ifndef __UTESTS__
+ LIBSPID_EOC_LOG_0 ("cannot read VLAN ID for master - "
+ "VLAN action not performed");
+#endif
+ return LIBSPID_SUCCESS;
+ }
+
+ /* prepare VLAN action command to set VLAN ID */
+#ifndef __UTESTS__
+ sprintf (temp, "vconfig add br0 %s \nifconfig %s.%s %s\n "
+ "ifconfig %s 0.0.0.0", master_vid, iface, master_vid,
+ ip.address, iface);
+ ret = system (temp);
+ if (ret != 0)
+ {
+ LIBSPID_EOC_LOG_1 ("%s: error performing VLAN action for master!",
+ __FUNCTION__);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+#endif
+
+ return LIBSPID_SUCCESS;
+}
+
+/**
+ * Restore VLAN status on master side.
+ * Must be called only in case VLAN tagging actions have
+ * been previously performed.
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+libspid_error_t
+libspid_eoc_master_disable_vlan_action (void)
+{
+ int ret;
+#ifndef __UTESTS__
+ char* iface = LIBSPID_EOC_BR_IFACE;
+ char temp [256];
+#endif
+ char master_vid [LIBSPID_CONFIG_LINE_MAX_LEN];
+ libspid_ip_t ip;
+
+
+ /* read VLAN ID value for master */
+ ret = libspid_config_read_item (LIBSPID_MASTER_CONF_PATH,
+ LIBSPID_MASTER_CONF_LABEL_VLAN_ADMIN_ID,
+ master_vid, LIBSPID_CONFIG_LINE_MAX_LEN);
+ if (ret != LIBSPID_SUCCESS)
+ {
+ LIBSPID_EOC_LOG_1 ("%s: error reading VLAN ID for master!",
+ __FUNCTION__);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+
+ /* get structure with IP address of br0 interface */
+ ret = libspid_network_get_ip (LIBSPID_EOC_BR_IFACE, &ip);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ LIBSPID_EOC_LOG_1 ("%s: error getting IP address of br0 interface",
+ __FUNCTION__);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+
+ /* prepare VLAN action command to remove VLAN ID */
+#ifndef __UTESTS__
+ sprintf (temp, "ifconfig %s %s \nvconfig rem %s.%s\n", iface, ip.address,
+ iface, master_vid);
+ ret = system (temp);
+ if (ret != 0)
+ {
+ LIBSPID_EOC_LOG_1 ("%s: error performing VLAN action for master!",
+ __FUNCTION__);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+#endif
+ return LIBSPID_SUCCESS;
+
+}
+
+
+/**
+ * Manage all configuration on master side.
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+libspid_error_t
+libspid_eoc_master_config (void)
+{
+ /* manage VLAN configuration */
+ if (LIBSPID_SUCCESS != libspid_eoc_master_vlan_action ())
+ {
+ LIBSPID_EOC_LOG_1 ("%s: error managing master VLAN configuration",
+ __FUNCTION__);
+ }
+
+ return LIBSPID_SUCCESS;
+
+}
+/**
+ * backup master configuration to server.
+ * \param mode mode of config backup or recover
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_NOT_FOUND: item has not been found
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno
+ * \return LIBSPID_ERROR_NO_SPACE: not enough space in buffer
+ */
+libspid_error_t
+libspid_eoc_backup_recover_master_config (libspid_config_backup_recover mode)
+{
+ int ret = 0;
+ int result = LIBSPID_SUCCESS;
+ char buffer[256];
+ char server_ip[LIBSPID_CONFIG_LINE_MAX_LEN] = {0};
+ char server_port[LIBSPID_CONFIG_LINE_MAX_LEN] = {0};
+ char server_login[LIBSPID_CONFIG_LINE_MAX_LEN] = {0};
+ char server_pwd[LIBSPID_CONFIG_LINE_MAX_LEN] = {0};
+ char server_filename[LIBSPID_CONFIG_LINE_MAX_LEN] = {0};
+ unsigned int i = 0;
+ int protocol = 0;
+
+ libspid_eoc_config_backup_entry_t entries[LIBSPID_CONFIG_BACKUP_ITEM_MAX];
+ unsigned int count = 0;
+
+ if (mode != LIBSPID_CONFIG_BACKUP && mode != LIBSPID_CONFIG_RECOVER)
+ return LIBSPID_ERROR_PARAM;
+
+ if (libspid_eoc_config_backup_get_list (entries, &count)
+ != LIBSPID_SUCCESS)
+ return LIBSPID_ERROR_SYSTEM;
+
+ for (i = 0; i < count; i++)
+ {
+ if (1 != sscanf (entries[i].protocol, "%d", &protocol))
+ {
+ syslog (LOG_DEBUG, "parsing protocol error ");
+ ret = -1;
+ goto Flag;
+ }
+ strcpy (server_ip, entries[i].ip_address);
+ strcpy (server_port, entries[i].server_port);
+ strcpy (server_login, entries[i].login);
+ strcpy (server_pwd, entries[i].password);
+ strcpy (server_filename, entries[i].fileName);
+ if (mode == LIBSPID_CONFIG_BACKUP)
+ {
+ sprintf (buffer, "tar -cvf %s%s %s/*.conf %s %s %s %s %s>"
+ " /dev/null",
+ LIBSPID_EOC_TMP_PATH,
+ server_filename,
+ LIBSPID_CONF_ROOT_PATH,
+ LIBSPID_SNMPD_CONF_PATH,
+ LIBSPID_NETWORK_CONF_PATH,
+ LIBSPID_SAVE_LIST_PATH,
+ LIBSPID_UPDATE_INFO_PATH,
+ LIBSPID_EOC_HOSTNAME);
+ ret = system (buffer);
+ if (ret != 0)
+ goto Flag;
+
+ #ifndef __UTESTS__
+ if (protocol == LIBSPID_PROTOCOL_FTP)
+ {/* ftp protocol */
+ sprintf (buffer, "ftpput -u %s -p %s -P %s %s %s %s%s 2>&1",
+ server_login, server_pwd,
+ server_port, server_ip,
+ server_filename,
+ LIBSPID_EOC_TMP_PATH,
+ server_filename);
+ }
+ else if (protocol == LIBSPID_PROTOCOL_TFTP)
+ {/* tftp protocol */
+ sprintf (buffer, "tftp -p -r %s -l %s%s %s %s",
+ server_filename,
+ LIBSPID_EOC_TMP_PATH,
+ server_filename,
+ server_ip, server_port
+ );
+ }
+ else if (protocol == LIBSPID_PROTOCOL_SFTP)
+ {/* sftp protocol */
+ ret = -1;
+ LIBSPID_EOC_LOG_0 ("unsupport sftp protocol!");
+ goto Flag;
+ }
+ else if (protocol == LIBSPID_PROTOCOL_MODEM)
+ {/* MODEM protocol */
+ ret = -1;
+ LIBSPID_EOC_LOG_0 ("unsupport MODEM protocol!");
+ goto Flag;
+ }
+ ret = system (buffer);
+
+ sprintf (buffer, "rm %s%s", LIBSPID_EOC_TMP_PATH,
+ server_filename);
+ system (buffer);
+ #endif /* __UTESTS__ */
+ }
+ else if (mode == LIBSPID_CONFIG_RECOVER)
+ {
+ #ifndef __UTESTS__
+ if (protocol == LIBSPID_PROTOCOL_FTP)
+ {
+ sprintf (buffer, "ftpget -u %s -p %s -P %s %s %s%s %s 2>&1",
+ server_login, server_pwd,
+ server_port, server_ip,
+ LIBSPID_EOC_TMP_PATH,
+ server_filename,
+ server_filename);
+ }
+ else if (protocol == LIBSPID_PROTOCOL_TFTP)
+ {
+ sprintf (buffer, "tftp -g -r %s -l %s%s %s %s",
+ server_filename,
+ LIBSPID_EOC_TMP_PATH,
+ server_filename,
+ server_ip, server_port
+ );
+ }
+ else if (protocol == LIBSPID_PROTOCOL_SFTP)
+ {/* sftp protocol */
+ ret = -1;
+ LIBSPID_EOC_LOG_0 ("unsupport sftp protocol!");
+ goto Flag;
+ }
+ else if (protocol == LIBSPID_PROTOCOL_MODEM)
+ {/* MODEM protocol */
+ ret = -1;
+ LIBSPID_EOC_LOG_0 ("unsupport MODEM protocol!");
+ goto Flag;
+ }
+
+ ret = system (buffer);
+ if (ret != 0)
+ goto Flag;
+ #endif /* __UTESTS__ */
+ sprintf (buffer, "tar -xvf %s%s -C %s > /dev/null",
+ LIBSPID_EOC_TMP_PATH,
+ server_filename,
+ LIBSPID_SAVE_DIR_PATH);
+ ret = system (buffer);
+ }
+Flag:
+ if (ret == 0)
+ {
+ sprintf (entries[i].result, LIBSPID_CONFIG_BACKUP_RESULT_SUC);
+ libspid_eoc_config_backup_set (entries[i].index, &entries[i]);
+ LIBSPID_EOC_LOG_1 ("backup index:%s backup result success !",
+ entries[i].index);
+ }
+ else
+ {
+ sprintf (entries[i].result, LIBSPID_CONFIG_BACKUP_RESULT_FAIL);
+ libspid_eoc_config_backup_set (entries[i].index, &entries[i]);
+ LIBSPID_EOC_LOG_1 ("backup index:%s backup result fail !",
+ entries[i].index);
+ result = LIBSPID_ERROR_SYSTEM;
+ }
+
+ }
+
+ return result;
+}
+
+/**
+ * Upload master configuration to server.
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_NOT_FOUND: item has not been found
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno
+ * \return LIBSPID_ERROR_NO_SPACE: not enough space in buffer
+ */
+libspid_error_t
+libspid_eoc_upload_master_config (char *server_filename)
+{
+ int ret = 0;
+ char buffer[256];
+ char server_ip[LIBSPID_CONFIG_LINE_MAX_LEN] = {0};
+ char server_port[LIBSPID_CONFIG_LINE_MAX_LEN] = {0};
+ char server_login[LIBSPID_CONFIG_LINE_MAX_LEN] = {0};
+ char server_pwd[LIBSPID_CONFIG_LINE_MAX_LEN] = {0};
+
+ if (server_filename == NULL)
+ return LIBSPID_ERROR_PARAM;
+
+ /* Get FTP server parameters */
+ ret = libspid_config_read_item (
+ LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_CONFIG_SERVER_IP,
+ server_ip, LIBSPID_CONFIG_LINE_MAX_LEN);
+ if (ret != LIBSPID_SUCCESS)
+ return ret;
+
+ ret = libspid_config_read_item (
+ LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_CONFIG_SERVER_PORT,
+ server_port, LIBSPID_CONFIG_LINE_MAX_LEN);
+ if (ret != LIBSPID_SUCCESS)
+ return ret;
+
+ ret = libspid_config_read_item (
+ LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_CONFIG_SERVER_LOGIN,
+ server_login, LIBSPID_CONFIG_LINE_MAX_LEN);
+ if (ret != LIBSPID_SUCCESS)
+ return ret;
+
+ ret = libspid_config_read_item (
+ LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_CONFIG_SERVER_PASSWORD,
+ server_pwd, LIBSPID_CONFIG_LINE_MAX_LEN);
+ if (ret != LIBSPID_SUCCESS)
+ return ret;
+
+ sprintf (buffer, "tar -cvf %s%s %s/*.conf %s %s %s %s %s> /dev/null",
+ LIBSPID_EOC_TMP_PATH,
+ server_filename,
+ LIBSPID_CONF_ROOT_PATH,
+ LIBSPID_SNMPD_CONF_PATH,
+ LIBSPID_NETWORK_CONF_PATH,
+ LIBSPID_SAVE_LIST_PATH,
+ LIBSPID_UPDATE_INFO_PATH,
+ LIBSPID_EOC_HOSTNAME);
+ ret = system (buffer);
+ if (ret != 0)
+ return LIBSPID_ERROR_SYSTEM;
+
+#ifndef __UTESTS__
+ sprintf (buffer, "ftpput -u %s -p %s -P %s %s %s %s%s 2>&1",
+ server_login, server_pwd,
+ server_port, server_ip,
+ server_filename,
+ LIBSPID_EOC_TMP_PATH,
+ server_filename);
+ ret = system (buffer);
+ if (ret != 0)
+ return LIBSPID_ERROR_SYSTEM;
+#endif /* __UTESTS__ */
+
+ return LIBSPID_SUCCESS;
+}
+
+/**
+ * Download master configuration from server.
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_NOT_FOUND: item has not been found
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno
+ * \return LIBSPID_ERROR_NO_SPACE: not enough space in buffer
+ */
+libspid_error_t
+libspid_eoc_download_master_config (char *server_filename)
+{
+ int ret = 0;
+ char buffer[256];
+ char server_ip[LIBSPID_CONFIG_LINE_MAX_LEN] = {0};
+ char server_port[LIBSPID_CONFIG_LINE_MAX_LEN] = {0};
+ char server_login[LIBSPID_CONFIG_LINE_MAX_LEN] = {0};
+ char server_pwd[LIBSPID_CONFIG_LINE_MAX_LEN] = {0};
+
+ if (server_filename == NULL)
+ return LIBSPID_ERROR_PARAM;
+
+ /* Get FTP server parameters */
+ ret = libspid_config_read_item (
+ LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_CONFIG_SERVER_IP,
+ server_ip, LIBSPID_CONFIG_LINE_MAX_LEN);
+ if (ret != LIBSPID_SUCCESS)
+ return ret;
+
+ ret = libspid_config_read_item (
+ LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_CONFIG_SERVER_PORT,
+ server_port, LIBSPID_CONFIG_LINE_MAX_LEN);
+ if (ret != LIBSPID_SUCCESS)
+ return ret;
+
+ ret = libspid_config_read_item (
+ LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_CONFIG_SERVER_LOGIN,
+ server_login, LIBSPID_CONFIG_LINE_MAX_LEN);
+ if (ret != LIBSPID_SUCCESS)
+ return ret;
+
+ ret = libspid_config_read_item (
+ LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_CONFIG_SERVER_PASSWORD,
+ server_pwd, LIBSPID_CONFIG_LINE_MAX_LEN);
+ if (ret != LIBSPID_SUCCESS)
+ return ret;
+
+#ifndef __UTESTS__
+ sprintf (buffer, "ftpget -u %s -p %s -P %s %s %s%s %s 2>&1",
+ server_login, server_pwd,
+ server_port, server_ip,
+ LIBSPID_EOC_TMP_PATH,
+ server_filename,
+ server_filename);
+ ret = system (buffer);
+ if (ret != 0)
+ return LIBSPID_ERROR_SYSTEM;
+#endif /* __UTESTS__ */
+
+ sprintf (buffer, "tar -xvf %s%s -C %s > /dev/null",
+ LIBSPID_EOC_TMP_PATH,
+ server_filename,
+ LIBSPID_SAVE_DIR_PATH);
+ ret = system (buffer);
+ if (ret != 0)
+ return LIBSPID_ERROR_SYSTEM;
+
+ return LIBSPID_SUCCESS;
+}
diff --git a/cleopatre/application/libspid/src/misc.c b/cleopatre/application/libspid/src/misc.c
index 78ed360dce..343d88356f 100644
--- a/cleopatre/application/libspid/src/misc.c
+++ b/cleopatre/application/libspid/src/misc.c
@@ -17,6 +17,9 @@
#include <stdlib.h>
#include <fcntl.h>
#include <errno.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
#include "libspid.h"
/**
@@ -31,23 +34,24 @@
* \return LIBSPID_ERROR_PARAM: bad input parameters
*/
-libspid_error_t libspid_mac_str_to_bin(const char *str, unsigned char *bin)
+libspid_error_t
+libspid_mac_str_to_bin (const char *str, unsigned char *bin)
{
int i;
char *s, *e;
- if( (bin == NULL) || (str == NULL) )
+ if ((bin == NULL) || (str == NULL))
{
return LIBSPID_ERROR_PARAM;
}
- s = (char *)str;
- for (i = 0; i < 6; ++i)
+ s = (char *) str;
+ for (i = 0; i < 6; ++i)
{
- bin[i] = s ? strtoul (s, &e, 16) : 0;
- if (s)
- s = (*e) ? e + 1 : e;
- }
+ bin[i] = s ? strtoul (s, &e, 16) : 0;
+ if (s)
+ s = (*e) ? e + 1 : e;
+ }
return LIBSPID_SUCCESS;
}
@@ -65,19 +69,90 @@ libspid_error_t libspid_mac_str_to_bin(const char *str, unsigned char *bin)
* \return LIBSPID_ERROR_PARAM: bad input parameters
*/
-libspid_error_t libspid_mac_bin_to_str(const unsigned char *bin, char *str)
+libspid_error_t
+libspid_mac_bin_to_str (const unsigned char *bin, char *str)
{
- if( (bin == NULL) || (str == NULL) )
+ if ((bin == NULL) || (str == NULL))
{
return LIBSPID_ERROR_PARAM;
}
- sprintf ( str, "%2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x",
- bin[0], bin[1], bin[2], bin[3], bin[4], bin[5] );
+ sprintf (str, "%2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x",
+ bin[0], bin[1], bin[2], bin[3], bin[4], bin[5]);
return LIBSPID_SUCCESS;
}
+/**
+ * Convert IP address in string format (standard numbers-and-dots notation) into
+ * IP address in binary format (4 bytes).<br>
+ * The array to store the binary IP address needs to be provided.<br>
+ * Example : "192.168.3.1" ---> { 192, 168, 3, 1 }
+ *
+ * \param str IP address string
+ * \param bin IP address returned in binary format
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ */
+
+libspid_error_t
+libspid_ip_str_to_bin(const char *str, unsigned char *bin)
+{
+ struct in_addr iaddr;
+
+ if ((bin == NULL) || (str == NULL))
+ {
+ return LIBSPID_ERROR_PARAM;
+ }
+
+ if (0 == inet_aton (str, &iaddr))
+ {
+ return LIBSPID_ERROR_PARAM;
+ }
+
+ memcpy (bin, &iaddr.s_addr, 4);
+
+ return LIBSPID_SUCCESS;
+
+}
+
+/**
+ * Convert IP address in binary format (4 bytes) into IP address
+ * in string format (standard numbers-and-dots notation).<br>
+ * The array to store the string IP address needs to be provided with minimal
+ * size of 16 bytes (LIBSPID_IP_MAX_LEN).<br>
+ * Example : { 192, 168, 3, 1 } ---> "192.168.3.1"
+ *
+ * \param bin IP address returned in binary format
+ * \param str IP address string
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ */
+
+libspid_error_t
+libspid_ip_bin_to_str (const unsigned char *bin, char *str)
+{
+ struct in_addr iaddr;
+ char *result_str = NULL;
+
+ if ((bin == NULL) || (str == NULL))
+ {
+ return LIBSPID_ERROR_PARAM;
+ }
+
+ memcpy (&iaddr.s_addr, bin, 4);
+
+ result_str = inet_ntoa (iaddr);
+
+ if (NULL == result_str)
+ {
+ return LIBSPID_ERROR_PARAM;
+ }
+
+ strcpy (str, result_str);
+
+ return LIBSPID_SUCCESS;
+}
/**
* Convert an hexa-string into a binary
@@ -92,25 +167,25 @@ libspid_error_t libspid_mac_bin_to_str(const unsigned char *bin, char *str)
libspid_error_t
libspid_hexstring_to_binary (const char* hex_string, unsigned char *binary, unsigned int binary_length)
{
- unsigned int i;
- char hexa[binary_length / 2];
-
- /* Check input parameters */
- if ((NULL == hex_string) || (NULL == binary))
- {
- return LIBSPID_ERROR_PARAM;
- }
-
- for (i = 0; i < binary_length; i++)
- {
- if (strlen (hex_string) < i * 2)
- break;
- memcpy (hexa, hex_string + (i * 2), 2);
- hexa[2] = '\0';
- binary[i] = strtoul (hexa, NULL, 16);
- }
-
- return LIBSPID_SUCCESS;
+ unsigned int i;
+ char hexa[binary_length / 2];
+
+ /* Check input parameters */
+ if ((NULL == hex_string) || (NULL == binary))
+ {
+ return LIBSPID_ERROR_PARAM;
+ }
+
+ for (i = 0; i < binary_length; i++)
+ {
+ if (strlen (hex_string) < i * 2)
+ break;
+ memcpy (hexa, hex_string + (i * 2), 2);
+ hexa[2] = '\0';
+ binary[i] = strtoul (hexa, NULL, 16);
+ }
+
+ return LIBSPID_SUCCESS;
}
/**
@@ -126,18 +201,50 @@ libspid_hexstring_to_binary (const char* hex_string, unsigned char *binary, unsi
libspid_error_t
libspid_binary_to_hexstring (const unsigned char *binary, unsigned int binary_length, char *hex_string)
{
- unsigned int i;
+ unsigned int i;
- /* Check input parameters */
- if ((NULL == binary) || (NULL == hex_string))
- {
- return LIBSPID_ERROR_PARAM;
- }
+ /* Check input parameters */
+ if ((NULL == binary) || (NULL == hex_string))
+ {
+ return LIBSPID_ERROR_PARAM;
+ }
- for (i = 0; i < binary_length; i++)
- {
- sprintf (hex_string + i * 2, "%02x", binary[i]);
- }
+ for (i = 0; i < binary_length; i++)
+ {
+ sprintf (hex_string + i * 2, "%02x", binary[i]);
+ }
- return LIBSPID_SUCCESS;
+ return LIBSPID_SUCCESS;
+}
+
+/**
+ * Check if string is key with MAC address
+ * key = MAC or key = MAC.index (port.conf)
+ *
+ * \param mac_addr MAC address
+ * \return error type:
+ * - LIBSPID_SUCCESS if success
+ * - LIBSPID_ERROR_PARAM if bad input parameters
+ * - LIBSPID_ERROR_MAC if not MAC address format
+ */
+libspid_error_t
+libspid_check_key_mac_format (const char *mac_addr)
+{
+ int i;
+
+ if (mac_addr == NULL)
+ return LIBSPID_ERROR_PARAM;
+
+ for (i=0; i<LIBSPID_MAC_STR_LEN-1; i++)
+ {
+ if (!((mac_addr[i] >= '0' && mac_addr[i] <= '9') ||
+ (mac_addr[i] >= 'A' && mac_addr[i] <= 'F') ||
+ (mac_addr[i] >= 'a' && mac_addr[i] <= 'f') || mac_addr[i] == ':'))
+ return LIBSPID_ERROR_MAC;
+
+ if ((i % 3) == 2 && mac_addr[i] != ':')
+ return LIBSPID_ERROR_MAC;
+ }
+
+ return LIBSPID_SUCCESS;
}
diff --git a/cleopatre/application/libspid/src/misc_eoc.c b/cleopatre/application/libspid/src/misc_eoc.c
new file mode 100644
index 0000000000..5811c297fa
--- /dev/null
+++ b/cleopatre/application/libspid/src/misc_eoc.c
@@ -0,0 +1,475 @@
+
+/* SPC300 bundle {{{
+ *
+ * Copyright (C) 2009 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file application/libspid/src/misc_eoc.c
+ * \brief Miscellaneous EoC-specific functions
+ * \ingroup libspid
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <getopt.h>
+#include <syslog.h>
+#include <assert.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/mman.h>
+#include <arpa/inet.h>
+#include <unistd.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <linux/netlink.h>
+
+#include "libspid.h"
+#include "nvram.h"
+#include "libmme.h"
+
+/**
+ * Reboots the slave with MAC address given as parameter.
+ * \param mac_address MAC address of the slave to reboot
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_PARAM: bad input parameter
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno
+ */
+libspid_error_t
+libspid_eoc_reboot (char *mac_address)
+{
+ mme_ctx_t request_ctx, confirm_ctx;
+ unsigned char snd_buffer[ETH_DATA_LEN];
+ int ret;
+ unsigned int result_len = 0;
+ char *iface = LIBSPID_EOC_BR_IFACE;
+ unsigned char mac_address_bin[ETH_ALEN];
+ unsigned char result;
+
+ /* initialize indication MME for VS_RESET */
+ ret = mme_init (&request_ctx, VS_RESET | MME_REQ,
+ snd_buffer, (unsigned int) ETH_DATA_LEN);
+ if (ret != MME_SUCCESS)
+ return ret;
+ ret = mme_init (&confirm_ctx, VS_RESET | MME_CNF,
+ snd_buffer, (unsigned int) ETH_DATA_LEN);
+ if (ret != MME_SUCCESS)
+ return ret;
+
+ ret = libspid_mac_str_to_bin (mac_address, mac_address_bin);
+ if (ret != LIBSPID_SUCCESS)
+ return ret;
+
+ /* send indication MME */
+ ret = mme_send (&request_ctx, MME_SEND_REQ_CNF, iface,
+ mac_address_bin, &confirm_ctx);
+ if (MME_SUCCESS != ret)
+ return ret;
+
+ /* extract SPIDCOM OUI and check if it is correct */
+ if (confirm_ctx.oui != MME_OUI_SPIDCOM)
+ return LIBSPID_ERROR_MME;
+
+ /* collect confirmation result */
+ ret = mme_pull (&confirm_ctx, &result, 1, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ return (result == 0) ? LIBSPID_SUCCESS : LIBSPID_ERROR_SYSTEM;
+}
+
+/**
+ * Restore to factory defaults the slave with MAC address given as parameter.
+ * \param mac_address MAC address of the slave to factory
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_PARAM: bad input parameter
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno
+ */
+libspid_error_t
+libspid_eoc_factory (char *mac_address)
+{
+ mme_ctx_t request_ctx, confirm_ctx;
+ unsigned char snd_buffer[ETH_DATA_LEN];
+ int ret;
+ unsigned int result_len = 0;
+ char *iface = LIBSPID_EOC_BR_IFACE;
+ unsigned char mac_address_bin[ETH_ALEN];
+ unsigned char result;
+
+ if (NULL == mac_address)
+ return LIBSPID_ERROR_PARAM;
+
+ /* initialize indication MME for VS_FACTORY */
+ ret = mme_init (&request_ctx, VS_FACTORY_REQ,
+ snd_buffer, (unsigned int) ETH_DATA_LEN);
+ if (ret != MME_SUCCESS)
+ return ret;
+ ret = mme_init (&confirm_ctx, VS_FACTORY_CNF,
+ snd_buffer, (unsigned int) ETH_DATA_LEN);
+ if (ret != MME_SUCCESS)
+ return ret;
+
+ ret = libspid_mac_str_to_bin (mac_address, mac_address_bin);
+ if (ret != LIBSPID_SUCCESS)
+ return ret;
+
+ /* send indication MME */
+ ret = mme_send (&request_ctx, MME_SEND_REQ_CNF, iface,
+ mac_address_bin, &confirm_ctx);
+ if (MME_SUCCESS != ret)
+ return ret;
+
+ /* extract SPIDCOM OUI and check if it is correct */
+ if (confirm_ctx.oui != MME_OUI_SPIDCOM)
+ return LIBSPID_ERROR_MME;
+
+ /* collect confirmation result */
+ ret = mme_pull (&confirm_ctx, &result, 1, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ return (result == 0) ? LIBSPID_SUCCESS : LIBSPID_ERROR_SYSTEM;
+}
+
+/**
+ * Returns list of MAC addresses of online slaves and number of online slaves.
+ * \param mac_address_list pointer to store the list of MAC addresses
+ * \param mac_address_count pointer to store number of online slaves
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno
+ */
+extern libspid_error_t
+libspid_eoc_get_topo (char *mac_address_list, int *mac_address_count)
+{
+ const char delimiters[2] = LIBSPID_ONLINE_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 = LIBSPID_SUCCESS;
+
+ /* check input parameters */
+ if ((mac_address_list == NULL) || (mac_address_count == NULL))
+ return LIBSPID_ERROR_PARAM;
+
+ /* skim through lines of online info file */
+ for (*mac_address_count = 0;
+ *mac_address_count < LIBSPID_ONLINE_INFO_LINE_MAX_NB;
+ (*mac_address_count)++)
+ {
+ /* get current line key */
+ error = libspid_config_read_line (LIBSPID_ONLINE_INFO_PATH,
+ delimiters, key, &elt_number,
+ elt, buffer,
+ LIBSPID_CONFIG_LINE_MAX_LEN);
+ if (error != LIBSPID_SUCCESS)
+ return error;
+
+ /* check that eof is not reached */
+ if (!strcmp (key, ""))
+ break;
+
+ /* convert mac address from string to char array */
+ error = libspid_mac_str_to_bin (key, (unsigned char *)
+ mac_address_list + LIBSPID_MAC_BIN_LEN
+ * (*mac_address_count));
+ if (error != LIBSPID_SUCCESS)
+ return error;
+ }
+
+ return LIBSPID_SUCCESS;
+}
+
+/**
+ * Returns real-time statistics of a slave with given MAC address.
+ * \param mac_address MAC address of the slave
+ * \param eoc_rt_stat pointer to structure for storing real-time statistics
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_GEN: bad result or oui received
+ * \return LIBSPID_ERROR_MME: mme function failed
+ */
+extern libspid_error_t
+libspid_eoc_get_stat (char *mac_address, libspid_eoc_rt_stat_t *eoc_rt_stat)
+{
+ mme_ctx_t request_ctx, confirm_ctx;
+ unsigned char snd_buffer[ETH_DATA_LEN];
+ int ret = 0;
+ unsigned int result_len = 0;
+ unsigned char mac_address_bin[ETH_ALEN];
+ unsigned char result = 0;
+ unsigned char control_value = 0;
+
+ if (mac_address == NULL || eoc_rt_stat == NULL)
+ {
+ return LIBSPID_ERROR_PARAM;
+ }
+
+ ret = libspid_mac_str_to_bin (mac_address, mac_address_bin);
+ if (ret != LIBSPID_SUCCESS)
+ return ret;
+
+ /** initialize MME for VS_EOC_REAL_TIME_STATISTICS **/
+ ret = mme_init (&request_ctx,
+ VS_EOC_GET_REAL_TIME_STATISTICS | MME_REQ,
+ snd_buffer, (unsigned int) ETH_DATA_LEN);
+ if (ret != MME_SUCCESS)
+ return LIBSPID_ERROR_MME;
+
+ ret = mme_init (&confirm_ctx,
+ VS_EOC_GET_REAL_TIME_STATISTICS | MME_CNF,
+ snd_buffer, (unsigned int) ETH_DATA_LEN);
+ if (ret != MME_SUCCESS)
+ return LIBSPID_ERROR_MME;
+
+ control_value = LIBSPID_EOC_REAL_TIME_STATISTICS_GET;
+
+ ret = mme_put (&request_ctx, &control_value, 1, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ /** send VS_EOC_REAL_TIME_STATISTICS MME request **/
+ ret = mme_send (&request_ctx, MME_SEND_REQ_CNF,
+ NULL, mac_address_bin, &confirm_ctx);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ /** extract SPIDCOM OUI and check if it is correct **/
+ if (confirm_ctx.oui != MME_OUI_SPIDCOM)
+ return LIBSPID_ERROR_GEN;
+
+ /** collect confirmation result **/
+ ret = mme_pull (&confirm_ctx, &result, 1, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ if (result != 0)
+ return LIBSPID_ERROR_GEN;
+
+ /** collect data **/
+ ret = mme_pull (&confirm_ctx, &eoc_rt_stat->rx_pkt, 4, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ ret = mme_pull (&confirm_ctx, &eoc_rt_stat->tx_pkt, 4, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ ret = mme_pull (&confirm_ctx, &eoc_rt_stat->rx_byte, 4, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ ret = mme_pull (&confirm_ctx, &eoc_rt_stat->tx_byte, 4, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ ret = mme_pull (&confirm_ctx, &eoc_rt_stat->rx_bcast, 4, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ ret = mme_pull (&confirm_ctx, &eoc_rt_stat->tx_bcast, 4, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ ret = mme_pull (&confirm_ctx, &eoc_rt_stat->rx_mcast, 4, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ ret = mme_pull (&confirm_ctx, &eoc_rt_stat->tx_mcast, 4, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ ret = mme_pull (&confirm_ctx, &eoc_rt_stat->rx_crc, 4, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ ret = mme_pull (&confirm_ctx, &eoc_rt_stat->rx_short, 4, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ ret = mme_pull (&confirm_ctx, &eoc_rt_stat->tx_short, 4, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ ret = mme_pull (&confirm_ctx, &eoc_rt_stat->rx_dropped, 4, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ ret = mme_pull (&confirm_ctx, &eoc_rt_stat->tx_dropped, 4, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ ret = mme_pull (&confirm_ctx, &eoc_rt_stat->avg_prefec, 4, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ return LIBSPID_SUCCESS;
+}
+
+/**
+ * Resets real-time statistics of a slave with given MAC address.
+ * \param mac_address MAC address of the slave
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_GEN: bad result or oui received
+ * \return LIBSPID_ERROR_MME: mme function failed
+ */
+
+extern libspid_error_t
+libspid_eoc_reset_stat (char *mac_address)
+{
+ mme_ctx_t request_ctx, confirm_ctx;
+ unsigned char snd_buffer[ETH_DATA_LEN];
+ int ret = 0;
+ unsigned int result_len = 0;
+ unsigned char mac_address_bin[ETH_ALEN];
+ unsigned char result = 0;
+ unsigned char control_value = 0;
+
+ if (mac_address == NULL)
+ {
+ return LIBSPID_ERROR_PARAM;
+ }
+
+ ret = libspid_mac_str_to_bin (mac_address, mac_address_bin);
+ if (ret != LIBSPID_SUCCESS)
+ return ret;
+
+ /** initialize MME for VS_EOC_REAL_TIME_STATISTICS **/
+ ret = mme_init (&request_ctx,
+ VS_EOC_GET_REAL_TIME_STATISTICS | MME_REQ,
+ snd_buffer, (unsigned int) ETH_DATA_LEN);
+ if (ret != MME_SUCCESS)
+ return LIBSPID_ERROR_MME;
+
+ ret = mme_init (&confirm_ctx,
+ VS_EOC_GET_REAL_TIME_STATISTICS | MME_CNF,
+ snd_buffer, (unsigned int) ETH_DATA_LEN);
+ if (ret != MME_SUCCESS)
+ return LIBSPID_ERROR_MME;
+
+ control_value = LIBSPID_EOC_REAL_TIME_STATISTICS_RESET;
+
+ ret = mme_put (&request_ctx, &control_value, 1, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ /** send VS_EOC_REAL_TIME_STATISTICS MME request **/
+ ret = mme_send (&request_ctx, MME_SEND_REQ_CNF, NULL,
+ mac_address_bin, &confirm_ctx);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ /** extract SPIDCOM OUI and check if it is correct **/
+ if (confirm_ctx.oui != MME_OUI_SPIDCOM)
+ return LIBSPID_ERROR_GEN;
+
+ /** collect confirmation result **/
+ ret = mme_pull (&confirm_ctx, &result, 1, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ if (result != 0)
+ return LIBSPID_ERROR_GEN;
+
+ return LIBSPID_SUCCESS;
+}
+
+/**
+ * Returns device information for a slave with given MAC address.<BR>
+ * Device information includes:
+ * model number, port amount and authorization state.
+ * \param mac_address MAC address of the slave
+ * \param eoc_dev_info pointer to structure for storing device information
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno
+ */
+
+extern libspid_error_t
+libspid_eoc_get_device_info (char *mac_address,
+ libspid_eoc_dev_info_t *eoc_dev_info)
+{
+ const char delimiters[2] = LIBSPID_ONLINE_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;
+
+ /* check input parameters */
+ if ((mac_address == NULL) || (eoc_dev_info == NULL))
+ return LIBSPID_ERROR_PARAM;
+
+ /* duplicate MAC address to avoid its corruption */
+ strcpy (key, mac_address);
+ error = libspid_config_read_line (LIBSPID_ONLINE_INFO_PATH,
+ delimiters, key, &elt_number,
+ elt, buffer,
+ LIBSPID_CONFIG_LINE_MAX_LEN);
+ /* get current line key */
+ if (error != LIBSPID_SUCCESS)
+ return error;
+
+ /* fill-in the device info */
+ strcpy (eoc_dev_info->model_no, elt[0]);
+ eoc_dev_info->eth_port_nb = atoi(elt[1]);
+ strcpy (eoc_dev_info->sw_version, elt[3]);
+ eoc_dev_info->downstream_attenuation = atoi(elt[4]);
+
+ return LIBSPID_SUCCESS;
+}
+
+/**
+ * Returns link quality for a slave with given MAC address.<BR>
+ * Link quality includes: downstream and upstream attenuation and downstream
+ * and upstream quality.
+ * \param mac_address MAC address of the slave
+ * \param eoc_link_quality pointer to structure for storing link quality
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno
+ */
+
+extern libspid_error_t
+libspid_eoc_get_link (char *mac_address,
+ libspid_eoc_link_quality_t *eoc_link_quality)
+{
+ const char delimiters[2] = LIBSPID_ONLINE_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;
+
+ /* check input parameters */
+ if ((mac_address == NULL) || (eoc_link_quality == NULL))
+ return LIBSPID_ERROR_PARAM;
+
+ /* duplicate MAC address to avoid its corruption */
+ strcpy (key, mac_address);
+
+ /* get current line key from info file */
+ error = libspid_config_read_line (LIBSPID_ONLINE_INFO_PATH,
+ delimiters, key, &elt_number,
+ elt, buffer,
+ LIBSPID_CONFIG_LINE_MAX_LEN);
+ if (error != LIBSPID_SUCCESS)
+ return error;
+
+ /* fill-in the attenuation info */
+ eoc_link_quality->down_att = atoi (elt[4]);
+ eoc_link_quality->up_att = atoi (elt[5]);
+
+ /* TODO: fill-in the quality info */
+ eoc_link_quality->up_quality = 100;
+ eoc_link_quality->down_quality = 100;
+
+ return LIBSPID_SUCCESS;
+}
+
diff --git a/cleopatre/application/libspid/src/network.c b/cleopatre/application/libspid/src/network.c
index e2ac05e53a..3c35e3083d 100644
--- a/cleopatre/application/libspid/src/network.c
+++ b/cleopatre/application/libspid/src/network.c
@@ -23,7 +23,9 @@
#include <sys/ioctl.h>
#include <fcntl.h>
#include <errno.h>
+
#include "libspid.h"
+#include "libmme.h"
/* write ip state machine */
enum {
@@ -33,10 +35,128 @@ enum {
};
/**
+ * Give the real IP setting from socket.<br>
+ * *
+ * \param interface string containing network interface name
+ * ("br0", "plc0" or "eth0")
+ * \param ip pointer to structure to get all IP data of interface
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno
+ */
+libspid_error_t
+libspid_network_get_realip (const char *interface, libspid_ip_t *ip)
+{
+
+ struct ifreq ifr;
+ int s;
+ uint32_t addr;
+ uint32_t *ipv4addr;
+ ipv4addr = &addr;
+
+ if (interface == NULL || ip == NULL)
+ {
+ return LIBSPID_ERROR_PARAM;
+ }
+
+ s = socket (PF_PACKET, SOCK_RAW, htons (ETH_P_ALL));
+ if (s < 0)
+ {
+ return LIBSPID_ERROR_SYSTEM;
+ }
+
+ /* --- address --- */
+ memset (&ifr, 0, sizeof (struct ifreq));
+ strcpy (ifr.ifr_name, interface);
+ if (ioctl (s, SIOCGIFADDR, &ifr) != 0)
+ {
+ close (s);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+ memcpy (ipv4addr, &ifr.ifr_addr.sa_data[2], 4);
+ if (LIBSPID_SUCCESS !=
+ libspid_ip_bin_to_str ((unsigned char *)ipv4addr,
+ (char *)ip->address))
+ {
+ close (s);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+
+ /* --- netmask --- */
+ memset (&ifr, 0, sizeof (struct ifreq));
+ strcpy (ifr.ifr_name, interface);
+ if (ioctl (s, SIOCGIFNETMASK, &ifr) != 0)
+ {
+ close (s);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+ memcpy (ipv4addr, &ifr.ifr_netmask.sa_data[2], 4);
+ if (LIBSPID_SUCCESS !=
+ libspid_ip_bin_to_str ((unsigned char *)ipv4addr,
+ (char *)ip->netmask))
+ {
+ close (s);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+
+ /* --- broadcast --- */
+ memset (&ifr, 0, sizeof (struct ifreq));
+ strcpy (ifr.ifr_name, interface);
+ if (ioctl (s, SIOCGIFBRDADDR, &ifr) != 0)
+ {
+ close (s);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+ memcpy (ipv4addr, &ifr.ifr_broadaddr.sa_data[2], 4);
+ if (LIBSPID_SUCCESS !=
+ libspid_ip_bin_to_str ((unsigned char *)ipv4addr,
+ (char *)ip->broadcast))
+ {
+ close (s);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+ /* gateway and mode use default value */
+ strcpy ((char *)ip->gateway, "0.0.0.0");
+ ip->mode = LIBSPID_IP_MODE_STATIC;
+
+ close (s);
+ return LIBSPID_SUCCESS;
+
+}
+
+/**
+ * Set the real IP to socket.<br>
+ * *
+ * \param interface string containing network interface name
+ * ("br0", "plc0" or "eth0")
+ * \param ip pointer to structure to set all IP data of interface
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno
+ */
+libspid_error_t
+libspid_network_set_realip (const char *interface, libspid_ip_t *ip)
+{
+ int ret;
+ char cmd[128] = {0};
+ if (interface == NULL || ip == NULL)
+ {
+ return LIBSPID_ERROR_PARAM;
+ }
+ sprintf (cmd, "ifconfig %s %s broadcast %s netmask %s up\n",
+ interface, ip->address, ip->broadcast, ip->netmask);
+ ret = system (cmd);
+ if (ret != 0)
+ return LIBSPID_ERROR_SYSTEM;
+
+ return LIBSPID_SUCCESS;
+}
+
+/**
* Give the IP setting of a network interface.<br>
* All data are coming from the configuration file content, not from the system status.
*
- * \param interface string containing network interface name (“br0â€, “plc0†or “eth0â€)
+ * \param interface string containing network interface name ("br0", "plc0" or "eth0")
* \param ip pointer to structure to get all IP data of interface
* \return error type (LIBSPID_SUCCESS if success)
* \return LIBSPID_ERROR_PARAM: bad input parameters
@@ -44,7 +164,8 @@ enum {
* to much elements to put into element table
* \return LIBSPID_ERROR_SYSTEM: system error, see errno
*/
-libspid_error_t libspid_network_get_ip (const char *interface, libspid_ip_t *ip)
+libspid_error_t
+libspid_network_get_ip (const char *interface, libspid_ip_t *ip)
{
FILE *fp;
char line_buffer[LIBSPID_CONFIG_LINE_MAX_LEN];
@@ -59,25 +180,25 @@ libspid_error_t libspid_network_get_ip (const char *interface, libspid_ip_t *ip)
}
/* reset libspid_ip_t structure */
- memset(ip, 0x0, sizeof(libspid_ip_t));
+ memset (ip, 0x0, sizeof (libspid_ip_t));
fp = fopen (LIBSPID_NETWORK_CONF_PATH, "r");
if (fp != NULL)
{
- while ( fgets(line_buffer, LIBSPID_CONFIG_LINE_MAX_LEN - 1, fp) )
+ while (fgets (line_buffer, LIBSPID_CONFIG_LINE_MAX_LEN - 1, fp))
{
- if ( strstr(line_buffer, "iface") != NULL )
+ if (strstr (line_buffer, "iface") != NULL)
{
- if ( strstr(line_buffer, interface) != NULL )
+ if (strstr (line_buffer, interface) != NULL)
{
/* the following data is regarding our inteface - start recording */
record = 1;
- if ( strstr(line_buffer, "static") != NULL )
+ if (strstr (line_buffer, "static") != NULL)
{
ip->mode = LIBSPID_IP_MODE_STATIC;
}
- else if ( strstr(line_buffer, "dhcp") != NULL )
+ else if (strstr (line_buffer, "dhcp") != NULL)
{
ip->mode = LIBSPID_IP_MODE_DHCP;
}
@@ -92,8 +213,8 @@ libspid_error_t libspid_network_get_ip (const char *interface, libspid_ip_t *ip)
if (record == 0)
continue;
- ptr = strtok_r(line_buffer, " \t", &strtok_ctx);
- if ( (ptr == NULL) || (strlen(ptr) <= 0) || (*ptr == '#') )
+ ptr = strtok_r (line_buffer, " \t", &strtok_ctx);
+ if ( (ptr == NULL) || (strlen (ptr) <= 0) || (*ptr == '#') )
{
continue;
}
@@ -127,9 +248,66 @@ libspid_error_t libspid_network_get_ip (const char *interface, libspid_ip_t *ip)
return LIBSPID_ERROR_NO_SPACE;
strcpy (ip_field, value);
}
+
} /* while */
- fclose (fp);
+ if (ip->mode == LIBSPID_IP_MODE_DHCP)
+ {
+ struct ifreq ifr;
+ int s;
+ uint32_t addr;
+ uint32_t *ipv4addr;
+ ipv4addr = &addr;
+
+ s = socket (PF_PACKET, SOCK_RAW, htons (ETH_P_ALL));
+ if (s < 0)
+ {
+ return LIBSPID_ERROR_SYSTEM;
+ }
+
+ /* --- address --- */
+ memset (&ifr, 0, sizeof (struct ifreq));
+ strcpy (ifr.ifr_name, interface);
+ if (ioctl (s, SIOCGIFADDR, &ifr) != 0)
+ {
+ close (s);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+ memcpy (ipv4addr, &ifr.ifr_addr.sa_data[2], 4);
+ sprintf ((char *) ip->address, "%d.%d.%d.%d",
+ *((uint8_t *) ipv4addr), *((uint8_t *) ipv4addr + 1),
+ *((uint8_t *) ipv4addr + 2), *((uint8_t*)ipv4addr + 3));
+
+ /* --- netmask --- */
+ memset (&ifr, 0, sizeof (struct ifreq));
+ strcpy (ifr.ifr_name, interface);
+ if (ioctl (s, SIOCGIFNETMASK, &ifr) != 0)
+ {
+ close (s);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+ memcpy (ipv4addr, &ifr.ifr_netmask.sa_data[2], 4);
+ sprintf ((char *) ip->netmask, "%d.%d.%d.%d",
+ *((uint8_t *) ipv4addr), *((uint8_t *) ipv4addr + 1),
+ *((uint8_t *) ipv4addr + 2), *((uint8_t *) ipv4addr + 3));
+
+
+ /* --- broadcast --- */
+ memset (&ifr, 0, sizeof (struct ifreq));
+ strcpy (ifr.ifr_name, interface);
+ if (ioctl (s, SIOCGIFBRDADDR, &ifr) != 0)
+ {
+ close (s);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+ memcpy (ipv4addr, &ifr.ifr_broadaddr.sa_data[2], 4);
+ sprintf ((char *) ip->broadcast, "%d.%d.%d.%d",
+ *((uint8_t *) ipv4addr), *((uint8_t *) ipv4addr + 1),
+ *((uint8_t *) ipv4addr + 2), *((uint8_t *) ipv4addr + 3));
+
+ close (s);
+ }
+ fclose (fp);
}
else
{
@@ -143,13 +321,14 @@ libspid_error_t libspid_network_get_ip (const char *interface, libspid_ip_t *ip)
* Change the IP setting of a network interface.<br>
* All data set into the configuration file, not into the running system.
*
- * \param interface string containing network interface name (“br0â€, “plc0†or “eth0â€)
+ * \param interface string containing network interface name ("br0", "plc0" or "eth0")
* \param ip pointer to structure containing all IP data to set to the interface
* \return error type (LIBSPID_SUCCESS if success)
* \return LIBSPID_ERROR_PARAM: bad input parameters
* \return LIBSPID_ERROR_SYSTEM: system error, see errno
*/
-libspid_error_t libspid_network_set_ip (const char *interface, const libspid_ip_t *ip)
+libspid_error_t
+libspid_network_set_ip (const char *interface, const libspid_ip_t *ip)
{
char line_buffer[LIBSPID_CONFIG_LINE_MAX_LEN];
char out_filename[64];
@@ -168,22 +347,22 @@ libspid_error_t libspid_network_set_ip (const char *interface, const libspid_ip_
}
/* open config file */
- if ( (fd_in = open(filename, O_RDWR | O_CREAT, 0666)) < 0 )
+ if ((fd_in = open (filename, O_RDWR | O_CREAT, 0666)) < 0)
{
//syslog(LOG_WARNING, "%s: cannot open %s (errno=%d)", __FUNCTION__, filename, errno);
return LIBSPID_ERROR_SYSTEM;
}
- if ( (fp_in = fdopen(fd_in, "r")) == NULL )
+ if ((fp_in = fdopen (fd_in, "r")) == NULL)
{
- close(fd_in);
+ close (fd_in);
return LIBSPID_ERROR_SYSTEM;
}
/* create the modified config file */
- sprintf(out_filename, "%sXXXXXX", filename);
- if ( (fp_out = fdopen(mkstemp(out_filename), "w")) == NULL )
+ sprintf (out_filename, "%sXXXXXX", filename);
+ if ((fp_out = fdopen (mkstemp (out_filename), "w")) == NULL)
{
- fclose(fp_in);
- close(fd_in);
+ fclose (fp_in);
+ close (fd_in);
return LIBSPID_ERROR_SYSTEM;
}
@@ -193,41 +372,41 @@ libspid_error_t libspid_network_set_ip (const char *interface, const libspid_ip_
lock.l_whence = SEEK_SET;
lock.l_start = 0;
lock.l_len = 0;
- if (fcntl(fd_in, F_SETLKW, &lock) < 0)
+ if (fcntl (fd_in, F_SETLKW, &lock) < 0)
{
//syslog(LOG_WARNING, "%s: lock set failed (errno=%d)\n)", __FUNCTION__, errno);
- fclose(fp_out);
- fclose(fp_in);
- close(fd_in);
+ fclose (fp_out);
+ fclose (fp_in);
+ close (fd_in);
return LIBSPID_ERROR_SYSTEM;
}
#endif /* USE_LOCK */
- while ( fgets(line_buffer, LIBSPID_CONFIG_LINE_MAX_LEN - 1, fp_in) )
+ while (fgets (line_buffer, LIBSPID_CONFIG_LINE_MAX_LEN - 1, fp_in))
{
- switch(state)
+ switch (state)
{
case SET_IP_SEARCH_IFACE:
- if((sscanf(line_buffer, "%16s %16s %*s %16s %*s\n", label, value, dhcp) > 0)
- && !strcmp(label, "iface") && !strcmp(value, interface))
+ if ((sscanf (line_buffer, "%16s %16s %*s %16s %*s\n", label, value, dhcp) > 0)
+ && !strcmp (label, "iface") && !strcmp (value, interface))
{
state = SET_IP_PROCESS_IFACE;
- fprintf(fp_out, "iface %s inet %s\n", interface, (ip->mode == LIBSPID_IP_MODE_STATIC ? "static" : "dhcp"));
- if ( strlen((char *)ip->address) > 0)
+ fprintf (fp_out, "iface %s inet %s\n", interface, (ip->mode == LIBSPID_IP_MODE_STATIC ? "static" : "dhcp"));
+ if (strlen ((char *) ip->address) > 0)
{
- fprintf(fp_out, " address %s\n", ip->address);
+ fprintf (fp_out, " address %s\n", ip->address);
}
- if ( strlen((char *)ip->netmask) > 0)
+ if (strlen ((char *) ip->netmask) > 0)
{
- fprintf(fp_out, " netmask %s\n", ip->netmask);
+ fprintf (fp_out, " netmask %s\n", ip->netmask);
}
- if ( strlen((char *)ip->broadcast) > 0)
+ if (strlen ((char *) ip->broadcast) > 0)
{
- fprintf(fp_out, " broadcast %s\n", ip->broadcast);
+ fprintf (fp_out, " broadcast %s\n", ip->broadcast);
}
- if ( strlen((char *)ip->gateway) > 0)
+ if (strlen ((char *) ip->gateway) > 0)
{
- fprintf(fp_out, " gateway %s\n", ip->gateway);
+ fprintf (fp_out, " gateway %s\n", ip->gateway);
}
}
else
@@ -236,15 +415,15 @@ libspid_error_t libspid_network_set_ip (const char *interface, const libspid_ip_
break;
case SET_IP_PROCESS_IFACE:
- if(sscanf(line_buffer, "%16s %*s\n", label) == 1)
+ if (sscanf (line_buffer, "%16s %*s\n", label) == 1)
{
- if (!strcmp(label, "iface"))
+ if (!strcmp (label, "iface"))
{
state = SET_IP_DUMP;
fputs (line_buffer, fp_out);
break;
}
- if(strcmp (label, "address") && strcmp (label, "netmask")
+ if (strcmp (label, "address") && strcmp (label, "netmask")
&& strcmp (label, "broadcast") && strcmp (label, "gateway"))
{
fputs (line_buffer, fp_out);
@@ -263,18 +442,20 @@ libspid_error_t libspid_network_set_ip (const char *interface, const libspid_ip_
}
}
- fclose(fp_out);
- fclose(fp_in);
+ fclose (fp_out);
+ fclose (fp_in);
#ifdef USE_LOCK
/* close lock */
- fcntl(fd_in, F_UNLCK, &lock);
+ fcntl (fd_in, F_UNLCK, &lock);
#endif /* USE_LOCK */
- close(fd_in);
+ close (fd_in);
- if ( rename(out_filename, filename) < 0 )
+ if (rename (out_filename, filename) < 0)
{
//syslog(LOG_WARNING, "%s : rename (errno=%d)\n", __FUNCTION__, errno);
}
+ if (libspid_system_save_file (LIBSPID_NETWORK_CONF_PATH) != LIBSPID_SUCCESS)
+ return LIBSPID_ERROR_SYSTEM;
return LIBSPID_SUCCESS;
}
@@ -283,13 +464,14 @@ libspid_error_t libspid_network_set_ip (const char *interface, const libspid_ip_
* Get the MAC address of an network interface.<br>
* Result is put into a provided buffer in string format aa:bb:cc:dd:ee:ff hexa address. Buffer must be of LIBSPID_MAC_STRING_MAX_LEN.
*
- * \param interface string containing network interface name (“br0â€, “plc0†or “eth0â€)
+ * \param interface string containing network interface name ("br0", "plc0" or "eth0")
* \param mac buffer to get the MAC address in hexa string format with ':' inside
* \return error type (LIBSPID_SUCCESS if success)
* \return LIBSPID_ERROR_PARAM: bad input parameters
* \return LIBSPID_ERROR_SYSTEM: system error, see errno
*/
-libspid_error_t libspid_network_get_mac (const char *interface, unsigned char *mac)
+libspid_error_t
+libspid_network_get_mac (const char *interface, unsigned char *mac)
{
struct ifreq ifr;
int s;
@@ -303,29 +485,223 @@ libspid_error_t libspid_network_get_mac (const char *interface, unsigned char *m
/* reset mac string */
*mac = '\0';
- s = socket( PF_PACKET, SOCK_RAW, htons(ETH_P_ALL) );
- if( s < 0 )
- {
+ s = socket (PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
+ if ( s < 0 )
+ {
return LIBSPID_ERROR_SYSTEM;
- }
+ }
memset (&ifr, 0, sizeof (struct ifreq));
- strcpy(ifr.ifr_name, interface);
- if ( ioctl(s, SIOCGIFHWADDR, &ifr) != 0 )
+ strcpy (ifr.ifr_name, interface);
+ if (ioctl (s, SIOCGIFHWADDR, &ifr) != 0)
{
close (s);
return LIBSPID_ERROR_SYSTEM;
}
- memcpy(ea.ether_addr_octet, ifr.ifr_hwaddr.sa_data, ETHER_ADDR_LEN);
- sprintf ((char *)mac, "%2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x",
+ memcpy (ea.ether_addr_octet, ifr.ifr_hwaddr.sa_data, ETHER_ADDR_LEN);
+ sprintf ((char *) mac, "%2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x",
ea.ether_addr_octet[0], ea.ether_addr_octet[1],
ea.ether_addr_octet[2], ea.ether_addr_octet[3],
ea.ether_addr_octet[4], ea.ether_addr_octet[5]);
- close(s);
+ close (s);
return LIBSPID_SUCCESS;
}
+#ifndef __UTESTS__
+/**
+ * Give the IP setting of a network interface for slave.<br>
+ * All data are coming from the configuration file content, not from the system status.
+ *
+ * \param mac_address string containing slave MAC address
+ * \param interface string containing network interface name ("br0", "plc0" or "eth0")
+ * \param ip pointer to structure to get all IP data of interface
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_MME: mme function failed
+ * \return LIBSPID_ERROR_GEN: bad result or oui received
+ */
+libspid_error_t
+libspid_eoc_network_get_remote_ip (const char *mac_address,
+ const char *interface,
+ libspid_ip_t *ip)
+{
+ mme_ctx_t request_ctx, confirm_ctx;
+ unsigned char snd_buffer[ETH_DATA_LEN];
+ int ret;
+ unsigned int result_len = 0;
+ unsigned char *iface = LIBSPID_EOC_BR_IFACE;
+ unsigned char mac_address_bin[LIBSPID_MAC_BIN_LEN];
+ unsigned char result;
+ unsigned char snd_interface = 0;
+ unsigned char ip_address[LIBSPID_IP_BIN_LEN];
+ unsigned char netmask_address[LIBSPID_IP_BIN_LEN];
+ unsigned char broadcast_address[LIBSPID_IP_BIN_LEN];
+ unsigned char gateway_address[LIBSPID_IP_BIN_LEN];
+ unsigned char mode;
+
+ if (mac_address == NULL || interface == NULL || ip == NULL)
+ {
+ return LIBSPID_ERROR_PARAM;
+ }
+ /* initialize indication MME for VS_EOC_GET_NETWORK_PARAMETERS */
+ ret = mme_init (&request_ctx, VS_EOC_GET_NETWORK_PARAMETERS | MME_REQ, snd_buffer, (unsigned int) ETH_DATA_LEN);
+ if (ret != MME_SUCCESS) return LIBSPID_ERROR_MME;
+ ret = mme_init (&confirm_ctx, VS_EOC_GET_NETWORK_PARAMETERS | MME_CNF, snd_buffer, (unsigned int) ETH_DATA_LEN);
+ if (ret != MME_SUCCESS) return LIBSPID_ERROR_MME;
+
+ if (!strcmp (interface, LIBSPID_EOC_BR_IFACE))
+ snd_interface = LIBSPID_NETWORK_INTERFACE_BR;
+ else if (!strcmp (interface, LIBSPID_EOC_PLC_IFACE))
+ snd_interface = LIBSPID_NETWORK_INTERFACE_PLC;
+ else if (!strcmp (interface, LIBSPID_EOC_ETH_IFACE))
+ snd_interface = LIBSPID_NETWORK_INTERFACE_ETH;
+ else
+ return LIBSPID_ERROR_PARAM;
+ /* attach interface */
+ ret = mme_put (&request_ctx, &snd_interface, 1, &result_len);
+ if (MME_SUCCESS != ret) return LIBSPID_ERROR_MME;
+
+ ret = libspid_mac_str_to_bin (mac_address, mac_address_bin);
+ if (ret != LIBSPID_SUCCESS) return ret;
+
+ /* send indication MME */
+ ret = mme_send (&request_ctx, MME_SEND_REQ_CNF, iface, mac_address_bin, &confirm_ctx);
+ if (MME_SUCCESS != ret) return LIBSPID_ERROR_MME;
+
+ /* extract SPIDCOM OUI and check if it is correct */
+ if (confirm_ctx.oui != MME_OUI_SPIDCOM) return LIBSPID_ERROR_GEN;
+
+ /* collect confirmation result */
+ ret = mme_pull (&confirm_ctx, &result, 1, &result_len);
+ if (MME_SUCCESS != ret) return LIBSPID_ERROR_MME;
+
+ /* collect ip address */
+ ret = mme_pull (&confirm_ctx, ip_address, LIBSPID_IP_BIN_LEN, &result_len);
+ if (ret != MME_SUCCESS) return LIBSPID_ERROR_MME;
+ ret = libspid_ip_bin_to_str (ip_address, (char *)ip->address);
+ if (ret != LIBSPID_SUCCESS) return ret;
+
+ /* collect netmask address */
+ ret = mme_pull (&confirm_ctx, netmask_address, LIBSPID_IP_BIN_LEN, &result_len);
+ if (ret != MME_SUCCESS) return LIBSPID_ERROR_MME;
+ ret = libspid_ip_bin_to_str (netmask_address, (char *)ip->netmask);
+ if (ret != LIBSPID_SUCCESS) return ret;
+
+ /* collect broadcast address */
+ ret = mme_pull (&confirm_ctx, broadcast_address, LIBSPID_IP_BIN_LEN, &result_len);
+ if (ret != MME_SUCCESS) return LIBSPID_ERROR_MME;
+ ret = libspid_ip_bin_to_str (broadcast_address, (char *)ip->broadcast);
+ if (ret != LIBSPID_SUCCESS) return ret;
+
+ /* collect gateway address */
+ ret = mme_pull (&confirm_ctx, gateway_address, LIBSPID_IP_BIN_LEN, &result_len);
+ if (ret != MME_SUCCESS) return LIBSPID_ERROR_MME;
+ ret = libspid_ip_bin_to_str (gateway_address, (char *)ip->gateway);
+ if (ret != LIBSPID_SUCCESS) return ret;
+
+ /* collect mode */
+ ret = mme_pull (&confirm_ctx, &mode, 1, &result_len);
+ if (MME_SUCCESS != ret) return LIBSPID_ERROR_MME;
+ ip->mode = mode;
+
+ return (result == 0) ? LIBSPID_SUCCESS : LIBSPID_ERROR_GEN;
+}
+/**
+ * Change the IP setting of a network interface for slave.<br>
+ * All data set into the configuration file, not into the running system.
+ *
+ * \param mac_address string containing slave MAC address
+ * \param interface string containing network interface name ("br0", "plc0" or "eth0")
+ * \param ip pointer to structure containing all IP data to set to the interface
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_MME: mme function failed
+ * \return LIBSPID_ERROR_GEN: bad result or oui received
+ */
+libspid_error_t
+libspid_eoc_network_set_remote_ip (const char *mac_address,
+ const char *interface,
+ const libspid_ip_t *ip)
+{
+ mme_ctx_t request_ctx, confirm_ctx;
+ unsigned char snd_buffer[ETH_DATA_LEN];
+ int ret;
+ unsigned int result_len = 0;
+ unsigned char *iface = LIBSPID_EOC_BR_IFACE;
+ unsigned char mac_address_bin[LIBSPID_MAC_BIN_LEN];
+ unsigned char result = 0;
+ unsigned char snd_interface = 0;
+ unsigned char ip_address[LIBSPID_IP_BIN_LEN];
+ unsigned char netmask_address[LIBSPID_IP_BIN_LEN];
+ unsigned char broadcast_address[LIBSPID_IP_BIN_LEN];
+ unsigned char gateway_address[LIBSPID_IP_BIN_LEN];
+ unsigned char mode;
+
+ if (mac_address == NULL || interface == NULL || ip == NULL)
+ {
+ return LIBSPID_ERROR_PARAM;
+ }
+
+ /* initialize indication MME for VS_EOC_GET_NETWORK_PARAMETERS */
+ ret = mme_init (&request_ctx, VS_EOC_SET_NETWORK_PARAMETERS | MME_REQ, snd_buffer, (unsigned int) ETH_DATA_LEN);
+ if (ret != MME_SUCCESS) return LIBSPID_ERROR_MME;
+ ret = mme_init (&confirm_ctx, VS_EOC_SET_NETWORK_PARAMETERS | MME_CNF, snd_buffer, (unsigned int) ETH_DATA_LEN);
+ if (ret != MME_SUCCESS) return LIBSPID_ERROR_MME;
+
+ if (!strcmp (interface, LIBSPID_EOC_BR_IFACE))
+ snd_interface = LIBSPID_NETWORK_INTERFACE_BR;
+ else if (!strcmp (interface, LIBSPID_EOC_PLC_IFACE))
+ snd_interface = LIBSPID_NETWORK_INTERFACE_PLC;
+ else if (!strcmp (interface, LIBSPID_EOC_ETH_IFACE))
+ snd_interface = LIBSPID_NETWORK_INTERFACE_ETH;
+ else
+ return LIBSPID_ERROR_PARAM;
+
+ /* attach interface */
+ ret = mme_put (&request_ctx, &snd_interface, 1, &result_len);
+ if (MME_SUCCESS != ret) return LIBSPID_ERROR_MME;
+
+ ret = libspid_ip_str_to_bin ((char *)ip->address, ip_address);
+ if (ret != LIBSPID_SUCCESS) return ret;
+ ret = libspid_ip_str_to_bin ((char *)ip->netmask, netmask_address);
+ if (ret != LIBSPID_SUCCESS) return ret;
+ ret = libspid_ip_str_to_bin ((char *)ip->broadcast, broadcast_address);
+ if (ret != LIBSPID_SUCCESS) return ret;
+ ret = libspid_ip_str_to_bin ((char *)ip->gateway, gateway_address);
+ if (ret != LIBSPID_SUCCESS) return ret;
+
+ mode = ip->mode;
+
+ /* attach network parameters */
+ ret = mme_put (&request_ctx, &ip_address, LIBSPID_IP_BIN_LEN, &result_len);
+ if (MME_SUCCESS != ret) return LIBSPID_ERROR_MME;
+ ret = mme_put (&request_ctx, &netmask_address, LIBSPID_IP_BIN_LEN, &result_len);
+ if (MME_SUCCESS != ret) return LIBSPID_ERROR_MME;
+ ret = mme_put (&request_ctx, &broadcast_address, LIBSPID_IP_BIN_LEN, &result_len);
+ if (MME_SUCCESS != ret) return LIBSPID_ERROR_MME;
+ ret = mme_put (&request_ctx, &gateway_address, LIBSPID_IP_BIN_LEN, &result_len);
+ if (MME_SUCCESS != ret) return LIBSPID_ERROR_MME;
+ ret = mme_put (&request_ctx, &mode, 1, &result_len);
+ if (MME_SUCCESS != ret) return LIBSPID_ERROR_MME;
+
+ ret = libspid_mac_str_to_bin (mac_address, mac_address_bin);
+ if (ret != LIBSPID_SUCCESS) return ret;
+
+ /* send indication MME */
+ ret = mme_send (&request_ctx, MME_SEND_REQ_CNF, iface, mac_address_bin, &confirm_ctx);
+ if (MME_SUCCESS != ret) return LIBSPID_ERROR_MME;
+
+ /* extract SPIDCOM OUI and check if it is correct */
+ if (confirm_ctx.oui != MME_OUI_SPIDCOM) return LIBSPID_ERROR_GEN;
+
+ /* collect confirmation result */
+ ret = mme_pull (&confirm_ctx, &result, 1, &result_len);
+ if (MME_SUCCESS != ret) return LIBSPID_ERROR_MME;
+
+ return (result == 0) ? LIBSPID_SUCCESS : LIBSPID_ERROR_GEN;
+}
+#endif /* __UTESTS__ */
diff --git a/cleopatre/application/libspid/src/nvram.c b/cleopatre/application/libspid/src/nvram.c
index 5cd5d3e912..6cf511ff58 100644
--- a/cleopatre/application/libspid/src/nvram.c
+++ b/cleopatre/application/libspid/src/nvram.c
@@ -167,3 +167,38 @@ int libspid_get_serial_number(void *param, int size)
memcpy((char *)param, &(nvram.serial_number), 64);
return 0;
}
+
+int libspid_get_oem_info(void *param, int size)
+{
+ if (last_read_status)
+ {
+ init_nvram();
+ if (last_read_status)
+ return 1;
+ }
+
+ if (size < 64)
+ {
+ memcpy((char *)param, &(nvram.oem_info), size - 1);
+ *((char *)param + size - 1) = 0;
+ }
+ else
+ memcpy((char *)param, &(nvram.oem_info), 64);
+ return 0;
+}
+
+int libspid_get_eth1_address(void *param, int size)
+{
+ if (last_read_status)
+ {
+ init_nvram();
+ if (last_read_status)
+ return 1;
+ }
+
+ if (size < 6)
+ return 1;
+
+ memcpy((char *)param, &(nvram.eth1_address), 6);
+ return 0;
+}
diff --git a/cleopatre/application/libspid/src/openssl_md5.c b/cleopatre/application/libspid/src/openssl_md5.c
new file mode 100644
index 0000000000..ca1d49786c
--- /dev/null
+++ b/cleopatre/application/libspid/src/openssl_md5.c
@@ -0,0 +1,243 @@
+/* crypto/md5/md5.c */
+/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
+ * All rights reserved.
+ *
+ * This package is an SSL implementation written
+ * by Eric Young (eay@cryptsoft.com).
+ * The implementation was written so as to conform with Netscapes SSL.
+ *
+ * This library is free for commercial and non-commercial use as long as
+ * the following conditions are aheared to. The following conditions
+ * apply to all code found in this distribution, be it the RC4, RSA,
+ * lhash, DES, etc., code; not just the SSL code. The SSL documentation
+ * included with this distribution is covered by the same copyright terms
+ * except that the holder is Tim Hudson (tjh@cryptsoft.com).
+ *
+ * Copyright remains Eric Young's, and as such any Copyright notices in
+ * the code are not to be removed.
+ * If this package is used in a product, Eric Young should be given attribution
+ * as the author of the parts of the library used.
+ * This can be in the form of a textual message at program startup or
+ * in documentation (online or textual) provided with the package.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. 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.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * "This product includes cryptographic software written by
+ * Eric Young (eay@cryptsoft.com)"
+ * The word 'cryptographic' can be left out if the rouines from the library
+ * being used are not cryptographic related :-).
+ * 4. If you include any Windows specific code (or a derivative thereof) from
+ * the apps directory (application code) you must include an acknowledgement:
+ * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
+ *
+ * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 AUTHOR 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.
+ *
+ * The licence and distribution terms for any publically available version or
+ * derivative of this code cannot be changed. i.e. this code cannot simply be
+ * copied and put under another distribution licence
+ * [including the GNU Public Licence.]
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include "openssl_md5.h"
+
+#define INIT_DATA_A (unsigned long)0x67452301L
+#define INIT_DATA_B (unsigned long)0xefcdab89L
+#define INIT_DATA_C (unsigned long)0x98badcfeL
+#define INIT_DATA_D (unsigned long)0x10325476L
+
+int MD5_Init(MD5_CTX *c)
+{
+ memset (c,0,sizeof(*c));
+ c->A=INIT_DATA_A;
+ c->B=INIT_DATA_B;
+ c->C=INIT_DATA_C;
+ c->D=INIT_DATA_D;
+ return 1;
+}
+
+unsigned char *MD5(const unsigned char *d, size_t n, unsigned char *md)
+{
+ MD5_CTX c;
+ static unsigned char m[MD5_DIGEST_LENGTH];
+
+ if (md == NULL) md=m;
+ if (!MD5_Init(&c))
+ return NULL;
+ MD5_Update(&c,d,n);
+ MD5_Final(md,&c);
+ return(md);
+}
+
+void md5_block_data_order (MD5_CTX *c, const void *p,size_t num);
+
+#define DATA_ORDER_IS_LITTLE_ENDIAN
+
+#define HASH_LONG MD5_LONG
+#define HASH_CTX MD5_CTX
+#define HASH_CBLOCK MD5_CBLOCK
+#define HASH_UPDATE MD5_Update
+#define HASH_TRANSFORM MD5_Transform
+#define HASH_FINAL MD5_Final
+#define HASH_MAKE_STRING(c,s) do { \
+ unsigned long ll; \
+ ll=(c)->A; HOST_l2c(ll,(s)); \
+ ll=(c)->B; HOST_l2c(ll,(s)); \
+ ll=(c)->C; HOST_l2c(ll,(s)); \
+ ll=(c)->D; HOST_l2c(ll,(s)); \
+ } while (0)
+#define HASH_BLOCK_DATA_ORDER md5_block_data_order
+
+#include "openssl_md32_common.h"
+
+/*
+#define F(x,y,z) (((x) & (y)) | ((~(x)) & (z)))
+#define G(x,y,z) (((x) & (z)) | ((y) & (~(z))))
+*/
+
+/* As pointed out by Wei Dai <weidai@eskimo.com>, the above can be
+ * simplified to the code below. Wei attributes these optimizations
+ * to Peter Gutmann's SHS code, and he attributes it to Rich Schroeppel.
+ */
+#define F(b,c,d) ((((c) ^ (d)) & (b)) ^ (d))
+#define G(b,c,d) ((((b) ^ (c)) & (d)) ^ (c))
+#define H(b,c,d) ((b) ^ (c) ^ (d))
+#define I(b,c,d) (((~(d)) | (b)) ^ (c))
+
+#define R0(a,b,c,d,k,s,t) { \
+ a+=((k)+(t)+F((b),(c),(d))); \
+ a=ROTATE(a,s); \
+ a+=b; };\
+
+#define R1(a,b,c,d,k,s,t) { \
+ a+=((k)+(t)+G((b),(c),(d))); \
+ a=ROTATE(a,s); \
+ a+=b; };
+
+#define R2(a,b,c,d,k,s,t) { \
+ a+=((k)+(t)+H((b),(c),(d))); \
+ a=ROTATE(a,s); \
+ a+=b; };
+
+#define R3(a,b,c,d,k,s,t) { \
+ a+=((k)+(t)+I((b),(c),(d))); \
+ a=ROTATE(a,s); \
+ a+=b; };
+
+void md5_block_data_order (MD5_CTX *c, const void *data_, size_t num)
+{
+ const unsigned char *data=data_;
+ register unsigned MD32_REG_T A,B,C,D,l;
+#ifndef MD32_XARRAY
+ /* See comment in crypto/sha/sha_locl.h for details. */
+ unsigned MD32_REG_T XX0, XX1, XX2, XX3, XX4, XX5, XX6, XX7,
+ XX8, XX9,XX10,XX11,XX12,XX13,XX14,XX15;
+# define X(i) XX##i
+#else
+ MD5_LONG XX[MD5_LBLOCK];
+# define X(i) XX[i]
+#endif
+
+ A=c->A;
+ B=c->B;
+ C=c->C;
+ D=c->D;
+
+ for (;num--;)
+ {
+ HOST_c2l(data,l); X( 0)=l; HOST_c2l(data,l); X( 1)=l;
+ /* Round 0 */
+ R0(A,B,C,D,X( 0), 7,0xd76aa478L); HOST_c2l(data,l); X( 2)=l;
+ R0(D,A,B,C,X( 1),12,0xe8c7b756L); HOST_c2l(data,l); X( 3)=l;
+ R0(C,D,A,B,X( 2),17,0x242070dbL); HOST_c2l(data,l); X( 4)=l;
+ R0(B,C,D,A,X( 3),22,0xc1bdceeeL); HOST_c2l(data,l); X( 5)=l;
+ R0(A,B,C,D,X( 4), 7,0xf57c0fafL); HOST_c2l(data,l); X( 6)=l;
+ R0(D,A,B,C,X( 5),12,0x4787c62aL); HOST_c2l(data,l); X( 7)=l;
+ R0(C,D,A,B,X( 6),17,0xa8304613L); HOST_c2l(data,l); X( 8)=l;
+ R0(B,C,D,A,X( 7),22,0xfd469501L); HOST_c2l(data,l); X( 9)=l;
+ R0(A,B,C,D,X( 8), 7,0x698098d8L); HOST_c2l(data,l); X(10)=l;
+ R0(D,A,B,C,X( 9),12,0x8b44f7afL); HOST_c2l(data,l); X(11)=l;
+ R0(C,D,A,B,X(10),17,0xffff5bb1L); HOST_c2l(data,l); X(12)=l;
+ R0(B,C,D,A,X(11),22,0x895cd7beL); HOST_c2l(data,l); X(13)=l;
+ R0(A,B,C,D,X(12), 7,0x6b901122L); HOST_c2l(data,l); X(14)=l;
+ R0(D,A,B,C,X(13),12,0xfd987193L); HOST_c2l(data,l); X(15)=l;
+ R0(C,D,A,B,X(14),17,0xa679438eL);
+ R0(B,C,D,A,X(15),22,0x49b40821L);
+ /* Round 1 */
+ R1(A,B,C,D,X( 1), 5,0xf61e2562L);
+ R1(D,A,B,C,X( 6), 9,0xc040b340L);
+ R1(C,D,A,B,X(11),14,0x265e5a51L);
+ R1(B,C,D,A,X( 0),20,0xe9b6c7aaL);
+ R1(A,B,C,D,X( 5), 5,0xd62f105dL);
+ R1(D,A,B,C,X(10), 9,0x02441453L);
+ R1(C,D,A,B,X(15),14,0xd8a1e681L);
+ R1(B,C,D,A,X( 4),20,0xe7d3fbc8L);
+ R1(A,B,C,D,X( 9), 5,0x21e1cde6L);
+ R1(D,A,B,C,X(14), 9,0xc33707d6L);
+ R1(C,D,A,B,X( 3),14,0xf4d50d87L);
+ R1(B,C,D,A,X( 8),20,0x455a14edL);
+ R1(A,B,C,D,X(13), 5,0xa9e3e905L);
+ R1(D,A,B,C,X( 2), 9,0xfcefa3f8L);
+ R1(C,D,A,B,X( 7),14,0x676f02d9L);
+ R1(B,C,D,A,X(12),20,0x8d2a4c8aL);
+ /* Round 2 */
+ R2(A,B,C,D,X( 5), 4,0xfffa3942L);
+ R2(D,A,B,C,X( 8),11,0x8771f681L);
+ R2(C,D,A,B,X(11),16,0x6d9d6122L);
+ R2(B,C,D,A,X(14),23,0xfde5380cL);
+ R2(A,B,C,D,X( 1), 4,0xa4beea44L);
+ R2(D,A,B,C,X( 4),11,0x4bdecfa9L);
+ R2(C,D,A,B,X( 7),16,0xf6bb4b60L);
+ R2(B,C,D,A,X(10),23,0xbebfbc70L);
+ R2(A,B,C,D,X(13), 4,0x289b7ec6L);
+ R2(D,A,B,C,X( 0),11,0xeaa127faL);
+ R2(C,D,A,B,X( 3),16,0xd4ef3085L);
+ R2(B,C,D,A,X( 6),23,0x04881d05L);
+ R2(A,B,C,D,X( 9), 4,0xd9d4d039L);
+ R2(D,A,B,C,X(12),11,0xe6db99e5L);
+ R2(C,D,A,B,X(15),16,0x1fa27cf8L);
+ R2(B,C,D,A,X( 2),23,0xc4ac5665L);
+ /* Round 3 */
+ R3(A,B,C,D,X( 0), 6,0xf4292244L);
+ R3(D,A,B,C,X( 7),10,0x432aff97L);
+ R3(C,D,A,B,X(14),15,0xab9423a7L);
+ R3(B,C,D,A,X( 5),21,0xfc93a039L);
+ R3(A,B,C,D,X(12), 6,0x655b59c3L);
+ R3(D,A,B,C,X( 3),10,0x8f0ccc92L);
+ R3(C,D,A,B,X(10),15,0xffeff47dL);
+ R3(B,C,D,A,X( 1),21,0x85845dd1L);
+ R3(A,B,C,D,X( 8), 6,0x6fa87e4fL);
+ R3(D,A,B,C,X(15),10,0xfe2ce6e0L);
+ R3(C,D,A,B,X( 6),15,0xa3014314L);
+ R3(B,C,D,A,X(13),21,0x4e0811a1L);
+ R3(A,B,C,D,X( 4), 6,0xf7537e82L);
+ R3(D,A,B,C,X(11),10,0xbd3af235L);
+ R3(C,D,A,B,X( 2),15,0x2ad7d2bbL);
+ R3(B,C,D,A,X( 9),21,0xeb86d391L);
+
+ A = c->A += A;
+ B = c->B += B;
+ C = c->C += C;
+ D = c->D += D;
+ }
+}
diff --git a/cleopatre/application/libspid/src/port_eoc.c b/cleopatre/application/libspid/src/port_eoc.c
new file mode 100644
index 0000000000..59cba207ed
--- /dev/null
+++ b/cleopatre/application/libspid/src/port_eoc.c
@@ -0,0 +1,1057 @@
+
+/* SPC300 bundle {{{
+ *
+ * Copyright (C) 2012 MStar
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file application/libspid/src/port_eoc.c
+ * \brief Functions specific to EoC ports
+ * \ingroup libspid
+ *
+ */
+
+#include <sys/types.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <getopt.h>
+#include <syslog.h>
+#include <assert.h>
+#include <arpa/inet.h>
+#include <unistd.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <linux/netlink.h>
+#include <ctype.h>
+
+#include "libspid.h"
+#include "libmme.h"
+
+#ifdef __UTESTS__
+libspid_error_t
+port_send_single_value (unsigned int mmtype, const void *value,
+ unsigned int length);
+#endif
+
+/**
+ * Returns the port entry for the given slave MAC address and port index.<BR>
+ * \param mac_address slave MAC address
+ * \param index port index
+ * \param entry port entry
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_NOT_FOUND: entry not found
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+extern libspid_error_t
+libspid_eoc_port_get (char *mac_address, char *index,
+ libspid_eoc_port_entry_t *entry)
+{
+ const char delimiters[2] = LIBSPID_PORT_CONF_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;
+ int i;
+ int value;
+
+ /* check input parameters */
+ if ((mac_address == NULL) || (index == NULL) || (entry == NULL))
+ return LIBSPID_ERROR_PARAM;
+
+ if (LIBSPID_SUCCESS != libspid_system_nscrtv_eponeoc_mod_eoc (&value))
+ return LIBSPID_ERROR_SYSTEM;
+
+ memset (entry, 0x0, sizeof (entry));
+
+ for (i =0; i < LIBSPID_MAC_STR_LEN; i++)
+ {
+ mac_address[i] = tolower (mac_address[i]);
+ }
+
+ /* use slave MAC and port index to compose key */
+ /* for line in configuration file */
+ sprintf (key, "%s.%s", mac_address, index);
+
+ strcpy (entry->mac_addr, mac_address);
+ strcpy (entry->port_index, index);
+
+ error = libspid_config_read_line (LIBSPID_PORT_CONF_PATH, delimiters, key,
+ &elt_number, elt, buffer,
+ LIBSPID_CONFIG_LINE_MAX_LEN);
+ if (LIBSPID_SUCCESS != error)
+ return error;
+
+ if (elt_number < LIBSPID_PORT_PARAM_NUM)
+ {
+ strcpy (entry->port_en, "");
+ strcpy (entry->service_index, "");
+ strcpy (entry->vlan_tag_en, "");
+ strcpy (entry->vlan_mark_id, "");
+ }
+ else
+ {
+ strcpy (entry->port_en, elt[0]);
+ strcpy (entry->service_index, elt[1]);
+
+ if (LIBSPID_FALSE == value)
+ {
+ strcpy (entry->vlan_tag_en, elt[2]);
+ strcpy (entry->vlan_mark_id, elt[3]);
+ }
+ else
+ {
+ strcpy (entry->vlan_tag_en, "0");
+ strcpy (entry->vlan_mark_id, "0");
+ }
+ }
+
+
+ return LIBSPID_SUCCESS;
+}
+
+/**
+ * Returns the whole port list from configuration file in a
+ * pointer to an array of port entries.<BR>
+ * \param entry pointer to an array of port entries
+ * \param count pointer to an integer for number of port entries
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_NOT_FOUND: entry not found
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+extern libspid_error_t
+libspid_eoc_port_get_list (libspid_eoc_port_entry_t *entry, int *count)
+{
+ const char delimiters[2] = LIBSPID_PORT_CONF_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;
+ libspid_eoc_port_entry_t *entry_ptr;
+ char *index_str;
+ int value;
+ void * user_data = NULL;
+ /* check input parameters */
+ if ((entry == NULL) || (count == NULL))
+ return LIBSPID_ERROR_PARAM;
+
+ if (LIBSPID_SUCCESS != libspid_system_nscrtv_eponeoc_mod_eoc (&value))
+ return LIBSPID_ERROR_SYSTEM;
+
+ *count = 0;
+ memset (key, 0x0, sizeof (key));
+ memset (entry, 0x0, sizeof (entry));
+
+ entry_ptr = entry;
+
+ /* get the first key */
+ error = libspid_config_read_line_repetitive (LIBSPID_PORT_CONF_PATH,
+ delimiters, key, &elt_number,
+ elt, buffer,
+ LIBSPID_CONFIG_LINE_MAX_LEN,
+ &user_data);
+ if (LIBSPID_SUCCESS != error)
+ return error;
+
+ for (; *count < LIBSPID_PORT_TOTAL_MAX && strcmp (key, ""); (*count)++)
+ {
+ /* Get a line from the conf file */
+ elt_number = LIBSPID_CONFIG_ELT_MAX_NB;
+ error = libspid_config_read_line_repetitive (
+ LIBSPID_PORT_CONF_PATH, delimiters, key,
+ &elt_number, elt, buffer,
+ LIBSPID_CONFIG_LINE_MAX_LEN, &user_data);
+ if (LIBSPID_SUCCESS != error)
+ return error;
+
+ /* parse MAC address and port index from buffer */
+ index_str = strchr (buffer, '.');
+ if (index_str!= NULL)
+ *index_str++ = 0;
+ else
+ {
+ LIBSPID_EOC_LOG_2 ("%s: error parsing MAC "
+ "address and port number (errno=%d)",
+ __FUNCTION__, errno);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+
+ strcpy (entry_ptr->mac_addr, buffer);
+ strcpy (entry_ptr->port_index, index_str);
+ if (elt_number < LIBSPID_PORT_PARAM_NUM)
+ {
+ strcpy (entry_ptr->port_en, "");
+ strcpy (entry_ptr->service_index, "");
+ strcpy (entry_ptr->vlan_tag_en, "");
+ strcpy (entry_ptr->vlan_mark_id, "");
+ }
+ else
+ {
+ strcpy (entry_ptr->port_en, elt[0]);
+ strcpy (entry_ptr->service_index, elt[1]);
+ if (LIBSPID_FALSE == value)
+ {
+ strcpy (entry_ptr->vlan_tag_en, elt[2]);
+ strcpy (entry_ptr->vlan_mark_id, elt[3]);
+ }
+ else
+ {
+ strcpy (entry_ptr->vlan_tag_en, "0");
+ strcpy (entry_ptr->vlan_mark_id, "0");
+ }
+ }
+
+ entry_ptr++;
+ }
+ libspid_config_read_line_repetitive (0,0,0,0,0,0,0, &user_data);
+ return LIBSPID_SUCCESS;
+}
+
+#ifndef __UTESTS__
+static libspid_error_t
+port_send_single_value (unsigned int mmtype, const void *value,
+ unsigned int length)
+{
+ unsigned char buffer[ETH_DATA_LEN];
+ mme_ctx_t request_ctx, confirm_ctx;
+ unsigned char result;
+ unsigned int result_len;
+ char *iface = LIBSPID_EOC_PLC_IFACE;
+ unsigned char mac_address[LIBSPID_MAC_STR_LEN];
+ unsigned char mac_address_bin[ETH_ALEN];
+ int ret;
+
+ /* init mme */
+ if (MME_SUCCESS != mme_init (&request_ctx,
+ mmtype | MME_REQ,
+ buffer, ETH_DATA_LEN))
+ {
+ LIBSPID_EOC_LOG_1 ("%s: initialization of request context failed\n",
+ __FUNCTION__);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+
+ if (MME_SUCCESS != mme_init (&confirm_ctx, mmtype | MME_CNF,
+ buffer, ETH_DATA_LEN))
+ {
+ LIBSPID_EOC_LOG_1 ("%s: initialization of confirm context failed\n",
+ __FUNCTION__);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+
+ if (value != NULL)
+ {
+ if (MME_SUCCESS != mme_put (&request_ctx, value, length, &result_len))
+ {
+ LIBSPID_EOC_LOG_1 ("%s: mme_put for value failed\n",
+ __FUNCTION__);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+ }
+
+ ret = libspid_network_get_mac (iface, mac_address);
+ if (ret != LIBSPID_SUCCESS)
+ return ret;
+
+ ret = libspid_mac_str_to_bin ((char *)mac_address, mac_address_bin);
+ if (ret != LIBSPID_SUCCESS)
+ return ret;
+
+ if ((mme_send (&request_ctx, MME_SEND_REQ_CNF, NULL,
+ mac_address_bin, &confirm_ctx) == MME_SUCCESS)
+ && (confirm_ctx.oui == MME_OUI_SPIDCOM)
+ && (mme_pull (&confirm_ctx, &result,
+ sizeof (result), &result_len) == MME_SUCCESS))
+ {
+ return LIBSPID_SUCCESS;
+ }
+ else
+ {
+ LIBSPID_EOC_LOG_1 ("%s: MME send failed\n", __FUNCTION__);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+}
+
+#endif /* __UTESTS__ */
+
+/**
+ * Retrieves current contents of port list in a
+ * pointer to an array of port entries.<BR>
+ * \param entry pointer to an array of port entries
+ * \param count pointer to an integer for number of port entries
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_NOT_FOUND: entry not found
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+extern libspid_error_t
+libspid_eoc_port_retrieve (libspid_eoc_port_entry_t *entry, int *count)
+{
+ unsigned char index = 0;
+ unsigned char i, j, ret;
+ unsigned int total_sta_entry_nb = LIBSPID_WHITE_LIST_MAX_STA_NUM;
+ unsigned int curr_sta_entry_nb = LIBSPID_PORT_STA_MAX_CNT;
+ libspid_eoc_port_entry_t *curr_port_entry = entry;
+ unsigned char buffer[ETH_DATA_LEN];
+ mme_ctx_t request_ctx, confirm_ctx;
+ unsigned char result;
+ unsigned int result_len;
+ unsigned char mac_address[LIBSPID_MAC_STR_LEN];
+ unsigned char mac_address_bin[ETH_ALEN];
+
+ /* check input parameters */
+ if ((entry == NULL) || (count == NULL))
+ return LIBSPID_ERROR_PARAM;
+
+ for (index = 0; index < total_sta_entry_nb; index += curr_sta_entry_nb)
+ {
+ /* init mme */
+ ret = mme_init (&request_ctx, VS_EOC_CCO_GET_PORTS_REQ,
+ buffer, ETH_DATA_LEN);
+ if (ret != MME_SUCCESS)
+ return LIBSPID_ERROR_MME;
+ ret = mme_init (&confirm_ctx, VS_EOC_CCO_GET_PORTS_CNF,
+ buffer, ETH_DATA_LEN);
+ if (ret != MME_SUCCESS)
+ return LIBSPID_ERROR_MME;
+
+ /* Index of the first station MAC address to be returned . */
+ ret = mme_put (&request_ctx, &index, 1, &result_len);
+ if (ret != MME_SUCCESS)
+ return LIBSPID_ERROR_MME;
+
+#ifndef __UTESTS__
+ ret = libspid_network_get_mac (LIBSPID_EOC_PLC_IFACE, mac_address);
+ if (ret != LIBSPID_SUCCESS)
+ return ret;
+#else
+ strcpy ((char *) mac_address, "00:d7:20:00:00:01");
+#endif /* __UTESTS__ */
+
+ ret = libspid_mac_str_to_bin ((char *) mac_address, mac_address_bin);
+ if (ret != LIBSPID_SUCCESS)
+ return ret;
+
+ ret = mme_send (&request_ctx, MME_SEND_REQ_CNF, NULL, mac_address_bin,
+ &confirm_ctx);
+ if (ret != MME_SUCCESS)
+ return LIBSPID_ERROR_MME;
+
+ /* extract SPIDCOM OUI and check if it is correct */
+ if (confirm_ctx.oui != MME_OUI_SPIDCOM)
+ return LIBSPID_ERROR_MME;
+
+ /* collect confirmation result */
+ ret = mme_pull (&confirm_ctx, &result, 1, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ /* Total number of stations */
+ ret = mme_pull (&confirm_ctx, &total_sta_entry_nb, 1, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ /* Index of the first station MAC address to be returned */
+ /* there is no need for this parameter */
+ ret = mme_pull (&confirm_ctx, &result, 1, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ /* Number of stations whose port state is following. */
+ ret = mme_pull (&confirm_ctx, &curr_sta_entry_nb, 1, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ *count = LIBSPID_PORT_PER_SLAVE_MAX * total_sta_entry_nb;
+
+ for (i = 0; i < curr_sta_entry_nb; i++)
+ {
+ unsigned char mac_addr_bin[ETH_ALEN];
+ unsigned int mac_addr_bin_len = 0;
+ unsigned char port_en, service_index;
+
+ /* collect MAC address */
+ ret = mme_pull (&confirm_ctx, mac_addr_bin,
+ ETH_ALEN, &mac_addr_bin_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ for (j = 0; j< LIBSPID_PORT_PER_SLAVE_MAX; j++)
+ {
+
+ ret = libspid_mac_bin_to_str (mac_addr_bin,
+ curr_port_entry->mac_addr);
+ if (LIBSPID_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ sprintf (curr_port_entry->port_index, "%d", j);
+
+ /* collect state of port (enable/disable) */
+ ret = mme_pull (&confirm_ctx, &port_en, 1, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+ sprintf (curr_port_entry->port_en, "%d", port_en);
+
+ /* collect index of service attached to port */
+ ret = mme_pull (&confirm_ctx, &service_index, 1, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+ sprintf (curr_port_entry->service_index, "%d", service_index);
+
+ curr_port_entry++;
+ }
+ }
+ }
+
+ return LIBSPID_SUCCESS;
+}
+
+/**
+ * Set port entry with the given slave MAC address and index.<BR>
+ * \param mac_address slave MAC address
+ * \param index port index
+ * \param entry port entry
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_NOT_FOUND: entry not found
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+extern libspid_error_t
+libspid_eoc_port_set (char *mac_address, char *index,
+ libspid_eoc_port_entry_t *entry)
+{
+ const char delimiter = LIBSPID_PORT_CONF_DELIMITER[0];
+ char key[LIBSPID_CONFIG_KEY_MAX_LEN] = {0};
+ char *elt[4];
+ libspid_error_t ret;
+ libspid_eoc_port_entry_t port_get_entry;
+
+ int i;
+
+ int value;
+
+ /* check input parameters */
+ if ((mac_address == NULL) || (index == NULL) || (entry == NULL))
+ return LIBSPID_ERROR_PARAM;
+
+ if (LIBSPID_SUCCESS != libspid_system_nscrtv_eponeoc_mod_eoc (&value))
+ return LIBSPID_ERROR_SYSTEM;
+
+ /* check that MAC address and port index already exist */
+ ret = libspid_eoc_port_get (mac_address, index, &port_get_entry);
+
+ if (LIBSPID_SUCCESS != ret)
+ {
+ return ret;
+ }
+
+ /* use slave MAC and port index to compose */
+ /* key for line in configuration file */
+ sprintf (key, "%s.%s", mac_address, index);
+
+ /* allocate buffers */
+ for (i = 0; i < 4; i++)
+ {
+ elt[i] = (char *) malloc (5 * sizeof (char));
+ if (NULL != elt[i])
+ memset (elt[i], 0, 5);
+ else
+ {
+ LIBSPID_EOC_LOG_2 ("%s: error allocating element "
+ "buffers (errno=%d)", __FUNCTION__, errno);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+ }
+
+ strcpy (elt[0], entry->port_en);
+ strcpy (elt[1], entry->service_index);
+ if (LIBSPID_FALSE == value)
+ {
+ strcpy (elt[2], entry->vlan_tag_en);
+ strcpy (elt[3], entry->vlan_mark_id);
+ }
+ else
+ {
+ strcpy (elt[2], "0");
+ strcpy (elt[3], "0");
+ }
+
+
+ ret = libspid_config_write_line (LIBSPID_PORT_CONF_PATH,
+ delimiter, key, 4, elt);
+
+ /* free element buffers */
+ for (i = 0; i < 4; i++)
+ {
+ if (elt[i])
+ {
+ free (elt[i]);
+ elt[i] = NULL;
+ }
+ }
+
+ if (ret != LIBSPID_SUCCESS)
+ {
+ LIBSPID_EOC_LOG_2 ("%s: cannot write port entry (errno=%d)",
+ __FUNCTION__, errno);
+ return ret;
+ }
+
+ return LIBSPID_SUCCESS;
+}
+
+
+/**
+ * Synchronize ports specified in config file with the current settings.<BR>
+ * Get list of entries added, changed or removed in
+ * config file and propagate it via MMEs.
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_NOT_FOUND: entry not found
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+extern libspid_error_t
+libspid_eoc_port_sync (void)
+{
+ /* pointer to list of port entries read from config file */
+ libspid_eoc_port_entry_t *port_config_entries;
+ libspid_error_t error = LIBSPID_SUCCESS;
+ unsigned int i, j, port_count, sta_count, curr_count, mme_num, remain;
+ int k, t, idx, temp_count;
+ unsigned char *mme_body;
+
+ mme_body = NULL;
+ port_config_entries = NULL;
+
+ /* allocate and initialize pointer to list of port entries */
+ /* read from config file */
+ port_config_entries = (libspid_eoc_port_entry_t *)
+ malloc (LIBSPID_PORT_TOTAL_MAX * sizeof (libspid_eoc_port_entry_t));
+
+ if (NULL == port_config_entries)
+ {
+ LIBSPID_EOC_LOG_2 ("%s: error allocating port config array(errno=%d)",
+ __FUNCTION__, errno);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+
+ memset (port_config_entries, 0x0,
+ LIBSPID_PORT_TOTAL_MAX * sizeof (libspid_eoc_port_entry_t));
+
+ /* get current contents of port config file */
+ error = libspid_eoc_port_get_list (port_config_entries, &temp_count);
+
+ if (LIBSPID_SUCCESS != error)
+ {
+ LIBSPID_EOC_LOG_1 ("%s: port config file not read correctly\n",
+ __FUNCTION__);
+ goto libspid_eoc_port_sync_end;
+ }
+
+ port_count = temp_count;
+
+ sta_count = port_count / LIBSPID_PORT_PER_SLAVE_MAX;
+
+ /* allocate and initialize pointer to MME body */
+ if (sta_count == 0)
+ {
+ /* prepare and send MME with number of stations = 0 */
+ /* allocate and initialize pointer to MME body */
+ mme_body = (unsigned char *) malloc (sizeof (unsigned char));
+ if (NULL == mme_body)
+ {
+ LIBSPID_EOC_LOG_2 ("%s: error allocating MME body (errno=%d)",
+ __FUNCTION__, errno);
+ error = LIBSPID_ERROR_SYSTEM;
+ goto libspid_eoc_port_sync_end;
+ }
+
+ memset (mme_body, 0x0, 1);
+ mme_body[0] = sta_count;
+
+ error = port_send_single_value (VS_EOC_SET_PORTS,
+ mme_body, 1);
+ if (error != LIBSPID_SUCCESS)
+ {
+ LIBSPID_EOC_LOG_1 ("%s: port set MME not sent correctly\n",
+ __FUNCTION__);
+ goto libspid_eoc_port_sync_end;
+ }
+
+ error = LIBSPID_SUCCESS;
+ goto libspid_eoc_port_sync_end;
+ }
+ else
+ {
+ mme_body = (unsigned char *) malloc ((sta_count
+ * LIBSPID_PORT_BYTE_PER_STA + 1)
+ * sizeof (unsigned char));
+ if (NULL == mme_body)
+ {
+ LIBSPID_EOC_LOG_2 ("%s: error allocating MME body (errno=%d)",
+ __FUNCTION__, errno);
+ error = LIBSPID_ERROR_SYSTEM;
+ goto libspid_eoc_port_sync_end;
+ }
+ memset (mme_body, 0x0, sta_count * LIBSPID_PORT_BYTE_PER_STA + 1);
+
+ /* calculate number of MMEs to fully pack */
+ mme_num = sta_count / LIBSPID_PORT_STA_MAX_CNT;
+ /* calculate remainder of station count */
+ remain = sta_count % LIBSPID_PORT_STA_MAX_CNT;
+
+ /* pack contents of port list to MMEs */
+ for (i = 0; i <= mme_num; i++)
+ {
+ /* determine count of stations for current MME */
+ if (i == mme_num)
+ curr_count = remain;
+ else
+ curr_count = LIBSPID_PORT_STA_MAX_CNT;
+
+ /* pack count of stations */
+ mme_body[0] = curr_count;
+
+ /* pack data for ports */
+ for (j = 0; j < curr_count; j++)
+ {
+ idx = i* LIBSPID_PORT_STA_MAX_CNT + j;
+ t = j * LIBSPID_PORT_BYTE_PER_STA;
+
+ /* pack MAC address of current station */
+ error = libspid_mac_str_to_bin (
+ port_config_entries[idx
+ * LIBSPID_PORT_PER_SLAVE_MAX].mac_addr,
+ mme_body + t + 1);
+ if (error != LIBSPID_SUCCESS)
+ goto libspid_eoc_port_sync_end;
+
+ /* pack ports for current station */
+ for (k = 0; k < LIBSPID_PORT_PER_SLAVE_MAX; k++)
+ {
+ /* pack port enable */
+ mme_body[t+7+2*k] = (uint8_t) strtol (
+ port_config_entries[idx
+ * LIBSPID_PORT_PER_SLAVE_MAX
+ + k].port_en, NULL, 10);
+ /* pack service index */
+ mme_body[t+8+2*k] = (uint8_t) strtol (
+ port_config_entries[idx
+ * LIBSPID_PORT_PER_SLAVE_MAX
+ + k].service_index, NULL, 10);
+ }
+
+ }
+
+ error = port_send_single_value (VS_EOC_SET_PORTS,
+ mme_body, curr_count *
+ LIBSPID_PORT_BYTE_PER_STA + 1);
+ if (error != LIBSPID_SUCCESS)
+ {
+ LIBSPID_EOC_LOG_1 ("%s: port SET MME not sent correctly\n",
+ __FUNCTION__);
+ goto libspid_eoc_port_sync_end;
+ }
+ }
+
+ error = LIBSPID_SUCCESS;
+ goto libspid_eoc_port_sync_end;
+ }
+
+libspid_eoc_port_sync_end:
+ if (mme_body != NULL)
+ free (mme_body);
+ if (port_config_entries != NULL)
+ free (port_config_entries);
+
+ return error;
+}
+
+/** internal helper function for checking parameters of port.conf */
+int
+port_check_input_parameters (libspid_eoc_port_entry_t *port_entry,
+ libspid_eoc_port_entry_t *port_entries_cnf,
+ int port_count_cnf,
+ libspid_port_check_error_t *error_types)
+{
+ int error_number = 0;
+ int i = 0, value = 0;
+ int ret = 0;
+ char *pnumber;
+ libspid_eoc_service_entry_t tmp_service_entry;
+
+ if (port_entry == NULL || port_entries_cnf == NULL ||
+ error_types == NULL)
+ {
+ return -1;
+ }
+
+ /** check MAC address*/
+ if (strlen (port_entry->mac_addr) != LIBSPID_MAC_STR_LEN-1)
+ ret = -1;
+
+ for (i = 0; i < LIBSPID_MAC_STR_LEN-1; i++)
+ {
+ port_entry->mac_addr[i] = tolower (port_entry->mac_addr[i]);
+ if (!((port_entry->mac_addr[i] >= '0'
+ && port_entry->mac_addr[i] <= '9')
+ || (port_entry->mac_addr[i] >= 'a'
+ && port_entry->mac_addr[i] <= 'f')
+ || port_entry->mac_addr[i] == ':'))
+ ret = -1;
+
+ if ((i % 3) == 2 && port_entry->mac_addr[i] != ':')
+ ret = -1;
+ }
+
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_PORT_MAC_FORMAT;
+ error_number++;
+ ret = 0;
+ }
+
+ /** check port INDEX value */
+ value = strtol (port_entry->port_index, &pnumber, 10);
+ if (*pnumber != '\0' || strcmp (port_entry->port_index,"") == 0)
+ ret = -1;
+ else
+ ret = (value < 0 || value > LIBSPID_PORT_PER_SLAVE_MAX-1) ? -1 : 0;
+
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_PORT_INDEX_VALUE;
+ error_number++;
+ ret = 0;
+ }
+
+ /** check port enable value */
+ ret = (strcmp (port_entry->port_en, "0") == 0 ||
+ strcmp (port_entry->port_en, "1") == 0) ? 0 : -1;
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_PORT_ENABLE_VALUE;
+ error_number++;
+ ret = 0;
+ }
+
+ /** check service index value */
+ value = strtol (port_entry->service_index, &pnumber, 10);
+ if (*pnumber != '\0' || strcmp (port_entry->service_index,"") == 0)
+ ret = -1;
+ else
+ ret = (value < 0 || value >= LIBSPID_SERVICE_AMOUNT_LIMIT) ? -1 : 0;
+
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_PORT_SERVICE_VALUE;
+ error_number++;
+ ret = 0;
+ }
+
+ /** check port vlan enable value */
+ ret = (strcmp (port_entry->vlan_tag_en, "0") == 0 ||
+ strcmp (port_entry->vlan_tag_en, "1") == 0) ? 0 : -1;
+
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_PORT_VLANEN_VALUE;
+ error_number++;
+ ret = 0;
+ }
+
+ /** check vlan id value */
+ value = strtol (port_entry->vlan_mark_id, &pnumber, 10);
+ if (*pnumber != '\0' || strcmp (port_entry->vlan_mark_id,"") == 0)
+ ret = -1;
+ else
+ ret = (value < 0 || value > LIBSPID_SERVICE_MAX_MATCH_VID) ? -1 : 0;
+
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_PORT_VLANID_VALUE;
+ error_number++;
+ ret = 0;
+ }
+
+ /* skip check for special service index 0 (used as the default value) */
+ if (0 != strcmp ("0", port_entry->service_index))
+ {
+ /** check if service index defined in service.conf */
+ if (libspid_eoc_service_get (port_entry->service_index,
+ &tmp_service_entry) != LIBSPID_SUCCESS)
+ ret = -1;
+ }
+
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_PORT_SERVICE_DEFINED;
+ error_number++;
+ ret = 0;
+ }
+
+ return error_number;
+}
+
+static int
+cmp_string_mac (const void *p1, const void *p2)
+{
+ return strcmp (((libspid_eoc_port_entry_t *)p1)->mac_addr,
+ ((libspid_eoc_port_entry_t *)p2)->mac_addr);
+}
+
+
+/**
+ * Check port.conf file
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_NOT_FOUND: entry not found
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ * \return LIBSPID_ERROR_CHECK: check utility failed
+ */
+extern libspid_error_t
+libspid_eoc_port_check (void)
+{
+ int port_count_cnf = 0, wl_count_cnf = 0;;
+ int ret = -1;
+ int i = 0;
+ libspid_eoc_port_entry_t port_entries_cnf[LIBSPID_PORT_TOTAL_MAX];
+ libspid_eoc_port_entry_t port_entries_cnf_sort[LIBSPID_PORT_TOTAL_MAX];
+ libspid_eoc_wl_entry_t wl_entries_cnf_sort[LIBSPID_WHITE_LIST_MAX_STA_NUM];
+ libspid_eoc_port_entry_t port_entry;
+ char key_not_unique[LIBSPID_MAC_STR_LEN+2];
+ libspid_boolean_t unique_address = LIBSPID_TRUE;
+
+ LIBSPID_EOC_LOG_1 ("%s: Check port.conf...", __FUNCTION__);
+ /** obtain the port list from configuration file */
+ ret = libspid_eoc_port_get_list (port_entries_cnf, &port_count_cnf);
+ if ( ret != LIBSPID_SUCCESS)
+ {
+ return ret;
+ }
+
+ ret = libspid_eoc_wl_get_list (wl_entries_cnf_sort, &wl_count_cnf);
+ if ( ret != LIBSPID_SUCCESS)
+ {
+ return ret;
+ }
+
+ memcpy (port_entries_cnf_sort, port_entries_cnf,
+ port_count_cnf * sizeof (libspid_eoc_port_entry_t));
+
+ /* sort port.conf */
+ qsort (port_entries_cnf_sort, port_count_cnf,
+ sizeof (libspid_eoc_port_entry_t), cmp_string_mac);
+
+ /* sort white_list.conf*/
+ qsort (wl_entries_cnf_sort, wl_count_cnf,
+ sizeof (libspid_eoc_wl_entry_t), cmp_string_mac);
+
+ /* check if MAC.index is unique key */
+ for (i = 0; i < port_count_cnf-4; i++)
+ {
+ if (strcmp (port_entries_cnf_sort[i].mac_addr,
+ port_entries_cnf_sort[i+1].mac_addr) == 0 &&
+ strcmp (port_entries_cnf_sort[i].port_index,
+ port_entries_cnf_sort[i+1].port_index) == 0)
+ {
+ strcpy (key_not_unique, port_entries_cnf_sort[i].mac_addr);
+ strcat (key_not_unique, ".");
+ strcat (key_not_unique, port_entries_cnf_sort[i].port_index);
+ break;
+ }
+
+ if (strcmp (port_entries_cnf_sort[i].mac_addr,
+ port_entries_cnf_sort[i+2].mac_addr) == 0 &&
+ strcmp (port_entries_cnf_sort[i].port_index,
+ port_entries_cnf_sort[i+2].port_index) == 0)
+ {
+ strcpy (key_not_unique, port_entries_cnf_sort[i].mac_addr);
+ strcat (key_not_unique, ".");
+ strcat (key_not_unique, port_entries_cnf_sort[i].port_index);
+ break;
+ }
+
+ if (strcmp (port_entries_cnf_sort[i].mac_addr,
+ port_entries_cnf_sort[i+3].mac_addr) == 0 &&
+ strcmp (port_entries_cnf_sort[i].port_index,
+ port_entries_cnf_sort[i+3].port_index) == 0)
+ {
+ strcpy (key_not_unique, port_entries_cnf_sort[i].mac_addr);
+ strcat (key_not_unique, ".");
+ strcat (key_not_unique, port_entries_cnf_sort[i].port_index);
+ break;
+ }
+
+ if (strcmp (port_entries_cnf_sort[i].mac_addr,
+ port_entries_cnf_sort[i+4].mac_addr) == 0 &&
+ strcmp (port_entries_cnf_sort[i].port_index,
+ port_entries_cnf_sort[i+4].port_index) == 0)
+ {
+ strcpy (key_not_unique, port_entries_cnf_sort[i].mac_addr);
+ strcat (key_not_unique, ".");
+ strcat (key_not_unique, port_entries_cnf_sort[i].port_index);
+ break;
+ }
+ }
+
+ for (i = 0; i < port_count_cnf; i++)
+ {
+ int number_of_error = 0;
+ libspid_port_check_error_t error_types[10];
+ char test_unique_key[LIBSPID_MAC_STR_LEN+2] = {0};
+ libspid_eoc_port_entry_t *res;
+ int port_index[5] = {0};
+
+ /* for each MAC address, verify that there is */
+ /* required number of ports */
+ if ((i % 5) == 0)
+ {
+ if (strcmp (port_entries_cnf_sort[i].mac_addr,
+ port_entries_cnf_sort[i+4].mac_addr) == 0)
+ {
+ port_index[atoi (port_entries_cnf_sort[i].port_index)] = 1;
+ port_index[atoi (port_entries_cnf_sort[i+1].port_index)] = 1;
+ port_index[atoi (port_entries_cnf_sort[i+2].port_index)] = 1;
+ port_index[atoi (port_entries_cnf_sort[i+3].port_index)] = 1;
+ port_index[atoi (port_entries_cnf_sort[i+4].port_index)] = 1;
+
+ if (!(port_index[0] && port_index[1] && port_index[2] &&
+ port_index[3] && port_index[4]))
+ {
+ LIBSPID_EOC_LOG_2 ("MAC %s must have required number "
+ "of ports(%d)",
+ port_entries_cnf_sort[i].mac_addr,
+ LIBSPID_PORT_PER_SLAVE_MAX);
+ return LIBSPID_ERROR_CHECK;
+ }
+ }
+ else
+ {
+ LIBSPID_EOC_LOG_2 ("MAC %s must have required "
+ "number of ports(%d)",
+ port_entries_cnf_sort[i].mac_addr,
+ LIBSPID_PORT_PER_SLAVE_MAX);
+ return LIBSPID_ERROR_CHECK;
+ }
+ }
+
+ port_entry = port_entries_cnf[i];
+
+ /* Check dependency between port.conf and white_list.conf file */
+ /* check if MAC defined in port.conf but not in white_list.conf */
+ res = bsearch (&port_entry, wl_entries_cnf_sort, wl_count_cnf,
+ sizeof (libspid_eoc_wl_entry_t), cmp_string_mac);
+ if (res == NULL)
+ {
+ LIBSPID_EOC_LOG_1 ("MAC (%s) defined in port.conf but not "
+ "in white_list.conf", port_entry.mac_addr);
+ ret = LIBSPID_ERROR_CHECK;
+ }
+
+ /* if MAC.index is not unique key */
+ /* find error line */
+ strcpy (test_unique_key, port_entry.mac_addr);
+ strcat (test_unique_key, ".");
+ strcat (test_unique_key, port_entry.port_index);
+
+ /** check format of the input parameters */
+ number_of_error = port_check_input_parameters (&port_entry,
+ port_entries_cnf,
+ port_count_cnf,
+ error_types);
+
+ if (strcmp (key_not_unique, test_unique_key) == 0)
+ {
+ number_of_error += 1;
+ error_types[number_of_error-1] = LIBSPID_ERROR_PORT_MAC_DUPLICATE;
+ }
+
+ if (number_of_error > 0)
+ {
+ int j = 0;
+
+ ret = LIBSPID_ERROR_CHECK;
+ LIBSPID_EOC_LOG_1 ("Error in line:%d\n", i+2);
+ for (j = 0; j < number_of_error; j++)
+ {
+ switch (error_types[j])
+ {
+ case LIBSPID_ERROR_PORT_MAC_FORMAT:
+ LIBSPID_EOC_LOG_0 ("Malformed MAC address.");
+ break;
+ case LIBSPID_ERROR_PORT_MAC_DUPLICATE:
+ LIBSPID_EOC_LOG_1 ("MAC_ADDRESS.PORT_NB (%s) is not "
+ "unique key.", key_not_unique);
+ unique_address = LIBSPID_FALSE;
+ break;
+ case LIBSPID_ERROR_PORT_INDEX_VALUE:
+ LIBSPID_EOC_LOG_1 ("Wrong port index value specified "
+ "(expected: 0..%d)",
+ LIBSPID_PORT_PER_SLAVE_MAX-1);
+ break;
+ case LIBSPID_ERROR_PORT_ENABLE_VALUE:
+ LIBSPID_EOC_LOG_0 ("Wrong port enable flag specified "
+ "(expected: 0..1)");
+ break;
+ case LIBSPID_ERROR_PORT_VLANEN_VALUE:
+ LIBSPID_EOC_LOG_0 ("Wrong VLAN tag enable flag "
+ "specified (expected: 0..1)");
+ break;
+ case LIBSPID_ERROR_PORT_VLANID_VALUE:
+ LIBSPID_EOC_LOG_1 ("Wrong VLAN mark ID specified "
+ "(expected: 0..%d)",
+ LIBSPID_SERVICE_MAX_MATCH_VID);
+ break;
+ case LIBSPID_ERROR_PORT_SERVICE_DEFINED:
+ LIBSPID_EOC_LOG_0 ("Service entry index "
+ "is not defined");
+ break;
+ case LIBSPID_ERROR_PORT_SERVICE_VALUE:
+ LIBSPID_EOC_LOG_1 ("Wrong service index value "
+ "specified (expected: 0..%d)",
+ LIBSPID_SERVICE_AMOUNT_LIMIT);
+ break;
+ default:
+ break;
+ }
+ }
+
+ if (unique_address == LIBSPID_FALSE)
+ break;
+ }
+ else if (number_of_error == -1)
+ return LIBSPID_ERROR_PARAM;
+ }
+
+ if (unique_address == LIBSPID_TRUE)
+ {
+ /* Check dependency between port.conf and white_list.conf file */
+ /* check if MAC defined in white_list.conf but not in port.conf*/
+ for (i = 0; i < wl_count_cnf; i++)
+ {
+ libspid_eoc_wl_entry_t *res;
+ libspid_eoc_wl_entry_t wl_entry;
+
+
+ wl_entry = wl_entries_cnf_sort[i];
+
+ res = bsearch (&wl_entry, port_entries_cnf_sort, port_count_cnf,
+ sizeof (libspid_eoc_port_entry_t), cmp_string_mac);
+ if (res == NULL)
+ {
+ LIBSPID_EOC_LOG_1 ("MAC (%s) defined in white_list.conf "
+ "but not in port.conf", wl_entry.mac_addr);
+ ret = LIBSPID_ERROR_CHECK;
+ }
+ }
+ }
+
+ return ret;
+}
diff --git a/cleopatre/application/libspid/src/secu.c b/cleopatre/application/libspid/src/secu.c
index d2be8eb2b8..adfde44c0b 100644
--- a/cleopatre/application/libspid/src/secu.c
+++ b/cleopatre/application/libspid/src/secu.c
@@ -89,7 +89,13 @@ secu_pbkdf1 (const unsigned char input[], const unsigned int input_length,
* \return error type (LIBSPID_SUCCESS if success)
* \return LIBSPID_ERROR_PARAM: bad input parameters
*/
-libspid_error_t libspid_secu_pbkdf1 (const unsigned char input[], const unsigned int input_length, const libspid_secu_salt_type_t salt_type, const unsigned int it_count, unsigned char output[], unsigned int output_length)
+libspid_error_t
+libspid_secu_pbkdf1 (const unsigned char input[],
+ const unsigned int input_length,
+ const libspid_secu_salt_type_t salt_type,
+ const unsigned int it_count,
+ unsigned char output[],
+ unsigned int output_length)
{
unsigned char *pbkdf1;
/* The salt to use for the PBKDF1 function. */
diff --git a/cleopatre/application/libspid/src/service_eoc.c b/cleopatre/application/libspid/src/service_eoc.c
new file mode 100644
index 0000000000..30dab5ca68
--- /dev/null
+++ b/cleopatre/application/libspid/src/service_eoc.c
@@ -0,0 +1,1643 @@
+
+/* SPC300 bundle {{{
+ *
+ * Copyright (C) 2012 MStar
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file application/libspid/src/service_eoc.c
+ * \brief Functions specific to EoC scheduling services
+ * \ingroup libspid
+ *
+ */
+
+#include <sys/types.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <getopt.h>
+#include <syslog.h>
+#include <assert.h>
+#include <arpa/inet.h>
+#include <unistd.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <linux/netlink.h>
+#include <ctype.h>
+
+#include "libspid.h"
+#include "libmme.h"
+
+#ifdef __UTESTS__
+libspid_error_t
+service_send_single_value (unsigned int mmtype, const void *value,
+ unsigned int length);
+#endif
+
+/**
+ * Returns the service type .<BR>
+ * \return LIBSPID_SERVICE_TYPE_NONE if not success else service_type
+ */
+libspid_service_type_t
+libspid_eoc_service_type_get (void)
+{
+ libspid_service_type_t service_type = LIBSPID_SERVICE_TYPE_NONE;
+ int value;
+ char buffer[LIBSPID_CONFIG_LINE_MAX_LEN];
+
+ /* read service type */
+ if (LIBSPID_SUCCESS == libspid_config_read_item (
+ LIBSPID_EOC_CONF_PATH,
+ LIBSPID_EOC_CONF_LABEL_SERVICE_TYPE, buffer,
+ LIBSPID_CONFIG_LINE_MAX_LEN))
+ /* parse service type settings from buffer */
+ if ((1 == sscanf (buffer, "%d", &value))
+ && ((LIBSPID_SERVICE_TYPE_VID == value)
+ || (LIBSPID_SERVICE_TYPE_PRIO == value)
+ || (LIBSPID_SERVICE_TYPE_TOS == value)))
+ service_type = value;
+
+ return service_type;
+}
+
+/**
+ * Returns the service entry for the given service index.<BR>
+ * \param index service index
+ * \param entry service entry
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_NOT_FOUND: entry not found
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+extern libspid_error_t
+libspid_eoc_service_get (char *index, libspid_eoc_service_entry_t *entry)
+{
+ const char delimiters[2] = LIBSPID_SERVICE_CONF_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_service_type_t service_type;
+ int value;
+
+ /* check input parameters */
+ if ((index == NULL) || (entry == NULL))
+ return LIBSPID_ERROR_PARAM;
+
+ strcpy (key, index);
+ strcpy (entry->service_index, index);
+ if (LIBSPID_SUCCESS !=
+ (error = libspid_system_nscrtv_eponeoc_mod_eoc (&value)))
+ return error;
+
+ error = libspid_config_read_line (LIBSPID_SERVICE_CONF_PATH,
+ delimiters, key, &elt_number,
+ elt, buffer,
+ LIBSPID_CONFIG_LINE_MAX_LEN);
+ if (LIBSPID_SUCCESS != error)
+ return error;
+
+ if (elt_number < LIBSPID_SERVICE_PARAM_NUM)
+ {
+ strcpy (entry->service_name, "");
+ strcpy (entry->service_type, "");
+ strcpy (entry->matching_value, "");
+ strcpy (entry->qos_prio, "");
+ strcpy (entry->dba_dl_pir, "");
+ strcpy (entry->dba_ul_pir, "");
+ strcpy (entry->dba_dl_cir, "");
+ strcpy (entry->dba_ul_cir, "");
+ strcpy (entry->max_latency, "");
+ strcpy (entry->max_jitter, "");
+ strcpy (entry->acs_en, "");
+ }
+ else
+ {
+ strncpy (entry->service_name, elt[0],
+ LIBSPID_SERVICE_NAME_STR_MAX_LEN-1);
+ entry->service_name[LIBSPID_SERVICE_NAME_STR_MAX_LEN-1] = '\0';
+ strcpy (entry->matching_value, elt[2]);
+ strcpy (entry->qos_prio, elt[3]);
+ strcpy (entry->dba_dl_pir, elt[4]);
+ strcpy (entry->dba_ul_pir, elt[5]);
+ strcpy (entry->dba_dl_cir, elt[6]);
+ strcpy (entry->dba_ul_cir, elt[7]);
+ strcpy (entry->max_latency, elt[8]);
+ strcpy (entry->max_jitter, elt[9]);
+ strcpy (entry->acs_en, elt[10]);
+ }
+
+ if (LIBSPID_TRUE == value)
+ {
+ strcpy (entry->service_type, elt[1]);
+ }else
+ {
+ /* read service type */
+ service_type = libspid_eoc_service_type_get ();
+ sprintf (entry->service_type, "%d", service_type);
+ }
+ return LIBSPID_SUCCESS;
+}
+
+/**
+ * Returns the whole service list from configuration file in a
+ * pointer to an array of service entries.<BR>
+ * \param entry pointer to an array of services
+ * \param count pointer to an integer for number of service entries
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_NOT_FOUND: entry not found
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+extern libspid_error_t
+libspid_eoc_service_get_list (libspid_eoc_service_entry_t *entry, int *count)
+{
+ const char delimiters[2] = LIBSPID_SERVICE_CONF_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;
+ libspid_eoc_service_entry_t *entry_ptr;
+ libspid_service_type_t service_type;
+ void * user_data = NULL;
+ int value;
+
+ /* check input parameters */
+ if ((entry == NULL) || (count == NULL))
+ return LIBSPID_ERROR_PARAM;
+
+ memset (key, 0x0, sizeof (key));
+ memset (entry, 0x0, sizeof (entry));
+ *count = 0;
+
+ entry_ptr = entry;
+
+ if (LIBSPID_SUCCESS !=
+ (error = libspid_system_nscrtv_eponeoc_mod_eoc (&value)))
+ return error;
+
+ /* get the first key */
+ error = libspid_config_read_line_repetitive (LIBSPID_SERVICE_CONF_PATH,
+ delimiters, key, &elt_number,
+ elt, buffer,
+ LIBSPID_CONFIG_LINE_MAX_LEN,
+ &user_data);
+ if (LIBSPID_SUCCESS != error)
+ return error;
+ if (LIBSPID_TRUE == value) {
+ for (; *count < LIBSPID_SERVICE_AMOUNT_LIMIT && strcmp (key, "");
+ (*count)++)
+ {
+ /* Get a line from the conf file */
+ elt_number = LIBSPID_CONFIG_ELT_MAX_NB;
+ if (LIBSPID_SUCCESS !=
+ (error = libspid_config_read_line_repetitive (
+ LIBSPID_SERVICE_CONF_PATH,
+ delimiters, key, &elt_number, elt,
+ buffer, LIBSPID_CONFIG_LINE_MAX_LEN,
+ &user_data)))
+ return error;
+
+ strcpy (entry_ptr->service_index, buffer);
+ if (elt_number < LIBSPID_SERVICE_PARAM_NUM)
+ {
+ strcpy (entry_ptr->service_name, "");
+ strcpy (entry_ptr->service_type, "");
+ strcpy (entry_ptr->matching_value, "");
+ strcpy (entry_ptr->qos_prio, "");
+ strcpy (entry_ptr->dba_dl_pir, "");
+ strcpy (entry_ptr->dba_ul_pir, "");
+ strcpy (entry_ptr->dba_dl_cir, "");
+ strcpy (entry_ptr->dba_ul_cir, "");
+ strcpy (entry_ptr->max_latency, "");
+ strcpy (entry_ptr->max_jitter, "");
+ strcpy (entry_ptr->acs_en, "");
+ }
+ else
+ {
+ strncpy (entry_ptr->service_name, elt[0],
+ LIBSPID_SERVICE_NAME_STR_MAX_LEN-1);
+ entry_ptr->
+ service_name[LIBSPID_SERVICE_NAME_STR_MAX_LEN-1] = '\0';
+ strcpy (entry_ptr->service_type, elt[1]);
+ strcpy (entry_ptr->matching_value, elt[2]);
+ strcpy (entry_ptr->qos_prio, elt[3]);
+ strcpy (entry_ptr->dba_dl_pir, elt[4]);
+ strcpy (entry_ptr->dba_ul_pir, elt[5]);
+ strcpy (entry_ptr->dba_dl_cir, elt[6]);
+ strcpy (entry_ptr->dba_ul_cir, elt[7]);
+ strcpy (entry_ptr->max_latency, elt[8]);
+ strcpy (entry_ptr->max_jitter, elt[9]);
+ strcpy (entry_ptr->acs_en, elt[10]);
+ }
+ entry_ptr++;
+ }
+
+ }else {
+
+ service_type = libspid_eoc_service_type_get ();
+
+ for (; *count < LIBSPID_SERVICE_AMOUNT_LIMIT && strcmp (key, "");
+ (*count)++)
+ {
+ /* Get a line from the conf file */
+ elt_number = LIBSPID_CONFIG_ELT_MAX_NB;
+ if (LIBSPID_SUCCESS !=
+ (error = libspid_config_read_line_repetitive (
+ LIBSPID_SERVICE_CONF_PATH, delimiters,
+ key, &elt_number, elt, buffer,
+ LIBSPID_CONFIG_LINE_MAX_LEN, &user_data)))
+ return error;
+
+ strcpy (entry_ptr->service_index, buffer);
+ sprintf (entry_ptr->service_type, "%d", service_type);
+ if (elt_number < LIBSPID_SERVICE_PARAM_NUM)
+ {
+ strcpy (entry_ptr->service_name, "");
+ strcpy (entry_ptr->matching_value, "");
+ strcpy (entry_ptr->qos_prio, "");
+ strcpy (entry_ptr->dba_dl_pir, "");
+ strcpy (entry_ptr->dba_ul_pir, "");
+ strcpy (entry_ptr->dba_dl_cir, "");
+ strcpy (entry_ptr->dba_ul_cir, "");
+ strcpy (entry_ptr->max_latency, "");
+ strcpy (entry_ptr->max_jitter, "");
+ strcpy (entry_ptr->acs_en, "");
+ }
+ else
+ {
+ strncpy (entry_ptr->service_name, elt[0],
+ LIBSPID_SERVICE_NAME_STR_MAX_LEN-1);
+ entry_ptr->
+ service_name[LIBSPID_SERVICE_NAME_STR_MAX_LEN-1] = '\0';
+ strcpy (entry_ptr->matching_value, elt[2]);
+ strcpy (entry_ptr->qos_prio, elt[3]);
+ strcpy (entry_ptr->dba_dl_pir, elt[4]);
+ strcpy (entry_ptr->dba_ul_pir, elt[5]);
+ strcpy (entry_ptr->dba_dl_cir, elt[6]);
+ strcpy (entry_ptr->dba_ul_cir, elt[7]);
+ strcpy (entry_ptr->max_latency, elt[8]);
+ strcpy (entry_ptr->max_jitter, elt[9]);
+ strcpy (entry_ptr->acs_en, elt[10]);
+ }
+ entry_ptr++;
+ }
+ }
+ /* Close the file if it contains more then max entries. */
+ libspid_config_read_line_repetitive (0, 0, 0, 0, 0, 0, 0, &user_data);
+ return LIBSPID_SUCCESS;
+}
+
+#ifndef __UTESTS__
+static libspid_error_t
+service_send_single_value (unsigned int mmtype, const void *value,
+ unsigned int length)
+{
+ unsigned char buffer[ETH_DATA_LEN];
+ mme_ctx_t request_ctx, confirm_ctx;
+ unsigned char result;
+ unsigned int result_len;
+ char *iface = LIBSPID_EOC_PLC_IFACE;
+ unsigned char mac_address[LIBSPID_MAC_STR_LEN];
+ unsigned char mac_address_bin[ETH_ALEN];
+ int ret;
+
+ /* init mme */
+ if (MME_SUCCESS != mme_init (&request_ctx, mmtype | MME_REQ,
+ buffer, ETH_DATA_LEN))
+ {
+ LIBSPID_EOC_LOG_1 ("%s: initialization of request context failed\n",
+ __FUNCTION__);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+ if (MME_SUCCESS != mme_init (&confirm_ctx, mmtype | MME_CNF,
+ buffer, ETH_DATA_LEN))
+ {
+ LIBSPID_EOC_LOG_1 ("%s: initialization of confirm context failed\n",
+ __FUNCTION__);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+
+ if (value != NULL)
+ {
+ if (MME_SUCCESS != mme_put (&request_ctx, value, length, &result_len))
+ {
+ LIBSPID_EOC_LOG_1 ("%s: mme_put for value failed\n",
+ __FUNCTION__);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+ }
+
+ ret = libspid_network_get_mac (iface, mac_address);
+ if (ret != LIBSPID_SUCCESS)
+ return ret;
+
+ ret = libspid_mac_str_to_bin ((char *)mac_address, mac_address_bin);
+ if (ret != LIBSPID_SUCCESS)
+ return ret;
+
+ if ((mme_send (&request_ctx, MME_SEND_REQ_CNF, NULL, mac_address_bin,
+ &confirm_ctx) == MME_SUCCESS)
+ && (confirm_ctx.oui == MME_OUI_SPIDCOM)
+ && (mme_pull (&confirm_ctx, &result, sizeof (result),
+ &result_len) == MME_SUCCESS))
+ return LIBSPID_SUCCESS;
+ else
+ {
+ LIBSPID_EOC_LOG_1 ("%s: MME send failed\n", __FUNCTION__);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+}
+
+#endif /* __UTESTS__ */
+
+/**
+ * Retrieves current contents of service list in a pointer
+ * to an array of service entries.<BR>
+ * \param entry pointer to an array of services
+ * \param count pointer to an integer for number of specified services
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_NOT_FOUND: entry not found
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+extern libspid_error_t
+libspid_eoc_service_retrieve (libspid_eoc_service_entry_t *entry, int *count)
+{
+ unsigned char index = 0;
+ unsigned char i, ret;
+ unsigned int total_service_entry_nb = LIBSPID_SERVICE_AMOUNT_LIMIT;
+ unsigned int curr_service_entry_nb = LIBSPID_SERVICE_MAX_CNT;
+ libspid_eoc_service_entry_t *curr_service_entry = entry;
+ unsigned char buffer[ETH_DATA_LEN];
+ mme_ctx_t request_ctx, confirm_ctx;
+ unsigned char result;
+ unsigned int result_len;
+ unsigned char mac_address[LIBSPID_MAC_STR_LEN];
+ unsigned char mac_address_bin[ETH_ALEN];
+
+
+ /* check input parameters */
+ if ((entry == NULL) || (count == NULL))
+ return LIBSPID_ERROR_PARAM;
+
+ for (index = 0; index < total_service_entry_nb;
+ index += curr_service_entry_nb)
+ {
+ /* init mme */
+ ret = mme_init (&request_ctx, VS_EOC_CCO_GET_SERVICES_REQ,
+ buffer, ETH_DATA_LEN);
+ if (ret != MME_SUCCESS)
+ return LIBSPID_ERROR_MME;
+ ret = mme_init (&confirm_ctx, VS_EOC_CCO_GET_SERVICES_CNF,
+ buffer, ETH_DATA_LEN);
+ if (ret != MME_SUCCESS)
+ return LIBSPID_ERROR_MME;
+
+ /* Index of the first service to get. */
+ ret = mme_put (&request_ctx, &index, 1, &result_len);
+ if (ret != MME_SUCCESS)
+ return LIBSPID_ERROR_MME;
+
+#ifndef __UTESTS__
+ ret = libspid_network_get_mac (LIBSPID_EOC_PLC_IFACE, mac_address);
+ if (ret != LIBSPID_SUCCESS)
+ return ret;
+#else
+ strcpy ((char *) mac_address, "00:d7:20:00:00:01");
+#endif /* __UTESTS__ */
+
+ ret = libspid_mac_str_to_bin ((char *) mac_address, mac_address_bin);
+ if (ret != LIBSPID_SUCCESS)
+ return ret;
+
+ ret = mme_send (&request_ctx, MME_SEND_REQ_CNF, NULL, mac_address_bin,
+ &confirm_ctx);
+ if (ret != MME_SUCCESS)
+ return LIBSPID_ERROR_MME;
+
+ /* extract SPIDCOM OUI and check if it is correct */
+ if (confirm_ctx.oui != MME_OUI_SPIDCOM)
+ return LIBSPID_ERROR_MME;
+
+ /* collect confirmation result */
+ ret = mme_pull (&confirm_ctx, &result, 1, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ /* Total number of existing services. */
+ ret = mme_pull (&confirm_ctx, &total_service_entry_nb, 1,
+ &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ /* Index of the first service to get */
+ /* there is no need for this parameter */
+ ret = mme_pull (&confirm_ctx, &result, 1, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ /* Number of returned services in this message. */
+ ret = mme_pull (&confirm_ctx, &curr_service_entry_nb, 1, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ *count = total_service_entry_nb;
+
+ for (i = 0; i < curr_service_entry_nb; i++)
+ {
+ unsigned char service_index, service_type, acs_en, param_num;
+ unsigned short int matching_value, qos_prio, dba_dl_pir,
+ dba_ul_pir, dba_dl_cir, dba_ul_cir,
+ max_latency, max_jitter;
+
+ /* collect data */
+ ret = mme_pull (&confirm_ctx, &service_index, 1, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+ sprintf (curr_service_entry->service_index, "%d", service_index);
+
+ ret = mme_pull (&confirm_ctx, &service_type, 1, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+ sprintf (curr_service_entry->service_type, "%d", service_type);
+
+ ret = mme_pull (&confirm_ctx, &matching_value, 2, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+ sprintf (curr_service_entry->matching_value, "%d",matching_value);
+
+ ret = mme_pull (&confirm_ctx, &acs_en, 1, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+ sprintf (curr_service_entry->acs_en, "%d", acs_en);
+
+ ret = mme_pull (&confirm_ctx, &param_num, 1, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ ret = mme_pull (&confirm_ctx, &max_latency, 2, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+ sprintf (curr_service_entry->max_latency, "%d", max_latency);
+
+ ret = mme_pull (&confirm_ctx, &max_jitter, 2, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+ sprintf (curr_service_entry->max_jitter, "%d", max_jitter);
+
+ ret = mme_pull (&confirm_ctx, &dba_dl_pir, 2, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+ sprintf (curr_service_entry->dba_dl_pir, "%d", dba_dl_pir);
+
+ ret = mme_pull (&confirm_ctx, &dba_ul_pir, 2, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+ sprintf (curr_service_entry->dba_ul_pir, "%d", dba_ul_pir);
+
+ ret = mme_pull (&confirm_ctx, &dba_dl_cir, 2, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+ sprintf (curr_service_entry->dba_dl_cir, "%d", dba_dl_cir);
+
+ ret = mme_pull (&confirm_ctx, &dba_ul_cir, 2, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+ sprintf (curr_service_entry->dba_ul_cir, "%d", dba_ul_cir);
+
+ ret = mme_pull (&confirm_ctx, &qos_prio, 2, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+ sprintf (curr_service_entry->qos_prio, "%d", qos_prio);
+
+ curr_service_entry++;
+ }
+ }
+
+ return LIBSPID_SUCCESS;
+}
+
+/**
+ * Set a service with the given index.<BR>
+ * \param index service index
+ * \param entry service definition
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_NOT_FOUND: entry not found
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+extern libspid_error_t
+libspid_eoc_service_set (char *index, libspid_eoc_service_entry_t *entry)
+{
+ const char delimiter = LIBSPID_SERVICE_CONF_DELIMITER[0];
+ char *elt[LIBSPID_SERVICE_PARAM_NUM];
+ libspid_error_t ret;
+ int i;
+
+ /* check input parameters */
+ if ((index == NULL) || (entry == NULL))
+ return LIBSPID_ERROR_PARAM;
+
+ /* allocate buffers */
+ for (i = 0; i < LIBSPID_SERVICE_PARAM_NUM; i++)
+ {
+ elt[i] = (char *) malloc (256*sizeof (char));
+ if (NULL != elt[i])
+ memset (elt[i], 0, 256);
+ else {
+ LIBSPID_EOC_LOG_2 ("%s: error allocating element buffers"
+ " (errno=%d)",
+ __FUNCTION__, errno);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+ }
+
+ strcpy (elt[0], entry->service_name);
+ strcpy (elt[1], entry->service_type);
+ strcpy (elt[2], entry->matching_value);
+ strcpy (elt[3], entry->qos_prio);
+ strcpy (elt[4], entry->dba_dl_pir);
+ strcpy (elt[5], entry->dba_ul_pir);
+ strcpy (elt[6], entry->dba_dl_cir);
+ strcpy (elt[7], entry->dba_ul_cir);
+ strcpy (elt[8], entry->max_latency);
+ strcpy (elt[9], entry->max_jitter);
+ strcpy (elt[10], entry->acs_en);
+
+ ret = libspid_config_write_line (LIBSPID_SERVICE_CONF_PATH,
+ delimiter, index,
+ LIBSPID_SERVICE_PARAM_NUM , elt);
+
+ /* free element buffers */
+ for (i = 0; i < LIBSPID_SERVICE_PARAM_NUM; i++)
+ {
+ if (elt[i])
+ {
+ free (elt[i]);
+ elt[i] = NULL;
+ }
+ }
+
+ if (ret != LIBSPID_SUCCESS)
+ {
+ LIBSPID_EOC_LOG_2 ("%s: cannot write service entry (errno=%d)",
+ __FUNCTION__, errno);
+ return ret;
+ }
+
+ return LIBSPID_SUCCESS;
+}
+
+/* internal helper function for resetting service with given */
+/* index in all affected ports */
+libspid_error_t
+service_port_reset_all (char *index)
+{
+ libspid_eoc_port_entry_t port_entries[LIBSPID_PORT_TOTAL_MAX];
+ int port_count;
+ int i;
+ int ret;
+
+ /* get current contents of port config file */
+ if (LIBSPID_SUCCESS != libspid_eoc_port_get_list (port_entries,
+ &port_count))
+ {
+ return LIBSPID_ERROR_SYSTEM;
+ }
+
+ if (0 == port_count)
+ return LIBSPID_SUCCESS;
+
+ /* iterate through port list and search for service with given index */
+ for (i = 0; i < port_count; i++)
+ {
+ if (0 == strcmp (port_entries[i].service_index, index))
+ {
+ /* if current port entry has given service index, set it to 0 */
+ strcpy (port_entries[i].port_en, "0");
+ strcpy (port_entries[i].service_index, "0");
+ ret = libspid_eoc_port_set (port_entries[i].mac_addr,
+ port_entries[i].port_index,
+ &port_entries[i]);
+ if (ret != LIBSPID_SUCCESS)
+ return ret;
+ }
+ }
+
+ return LIBSPID_SUCCESS;
+
+}
+
+/**
+ * Remove the service entry with the given index.<BR>
+ * \param index service index
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_NOT_FOUND: entry not found
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+extern libspid_error_t
+libspid_eoc_service_remove (char *index)
+{
+ libspid_error_t ret;
+
+ /* check input parameters */
+ if (index == NULL)
+ return LIBSPID_ERROR_PARAM;
+
+ ret = libspid_config_remove_line (LIBSPID_SERVICE_CONF_PATH,
+ LIBSPID_SERVICE_CONF_DELIMITER, index);
+
+ if (ret != LIBSPID_SUCCESS)
+ {
+ LIBSPID_EOC_LOG_2 ("%s: cannot remove service entry (errno=%d)",
+ __FUNCTION__, errno);
+ return ret;
+ }
+
+ /* if service removal was successful, also attempt to reset service */
+ /* index in associated port entries */
+ if (LIBSPID_SUCCESS != service_port_reset_all (index))
+ {
+ LIBSPID_EOC_LOG_1 ("%s: error resetting port entries with "
+ "given service index", __FUNCTION__);
+ }
+
+ return LIBSPID_SUCCESS;
+}
+
+/**
+ * Remove all services.<BR>
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+extern libspid_error_t
+libspid_eoc_service_flush (void)
+{
+ const char delimiters[2] = LIBSPID_SERVICE_CONF_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;
+
+ while (1)
+ {
+ /* Get the key of the current line */
+ memset (key, 0x0, sizeof (key));
+ libspid_config_read_line (LIBSPID_SERVICE_CONF_PATH, delimiters,
+ key, &elt_number, elt, buffer,
+ LIBSPID_CONFIG_LINE_MAX_LEN);
+
+ if (strcmp (key, "") == 0)
+ break;
+
+ error = libspid_eoc_service_remove (key);
+ if (LIBSPID_SUCCESS != error)
+ return error;
+ }
+
+ return LIBSPID_SUCCESS;
+}
+
+/* internal helper function for packing and sending SET_SERVICES MME */
+libspid_error_t
+service_pack_send_set_mme (unsigned char *mme_body,
+ libspid_eoc_service_entry_t *service_entries,
+ int count, int action)
+{
+ unsigned int mme_num, remain, curr_count, i, j, tmp;
+ libspid_error_t error = LIBSPID_SUCCESS;
+ int t, idx;
+
+ /* allocate and initialize pointer to MME body */
+ if (count == 0)
+ return LIBSPID_SUCCESS;
+ else
+ {
+ mme_body = (unsigned char *) malloc ((count
+ * LIBSPID_SERVICE_BYTE_CNT + 2)
+ * sizeof (unsigned char));
+ if (NULL == mme_body)
+ {
+ LIBSPID_EOC_LOG_2 ("%s: error allocating MME body (errno=%d)",
+ __FUNCTION__, errno);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+ memset (mme_body, 0x0, count * LIBSPID_SERVICE_BYTE_CNT + 2);
+
+ /* calculate number of MMEs to fully pack */
+ mme_num = count / LIBSPID_SERVICE_MAX_CNT;
+ /* calculate remainder of service count */
+ remain = count % LIBSPID_SERVICE_MAX_CNT;
+
+ /* pack contents of service list to MMEs */
+ for (i = 0; i <= mme_num; i++)
+ {
+ /* determine count of services for current MME */
+ if (i == mme_num)
+ curr_count = remain;
+ else
+ curr_count = LIBSPID_SERVICE_MAX_CNT;
+
+ /* pack given action (add or remove) */
+ mme_body[0] = action;
+
+ /* pack count of services */
+ mme_body[1] = curr_count;
+
+ /* pack data for services */
+ for (j = 0; j < curr_count; j++)
+ {
+ idx = i * LIBSPID_SERVICE_MAX_CNT + j;
+ t = j * LIBSPID_SERVICE_BYTE_CNT;
+
+ /* pack service index */
+ mme_body[t+2] = (uint8_t)
+ strtol (service_entries[idx].service_index,
+ NULL, 10);
+
+ /* pack classifier rule ID (service type) */
+ mme_body[t+3] = (uint8_t)
+ strtol (service_entries[idx].service_type,
+ NULL, 10);
+
+ /* pack classifier rule value (matching value) */
+ tmp = (uint16_t) strtol (service_entries[idx].matching_value,
+ NULL, 10);
+ memcpy (mme_body+t+4, &tmp, 2);
+
+ /* pack ACS enable */
+ mme_body[t+6] = (uint8_t) strtol (service_entries[idx].acs_en,
+ NULL, 10);
+
+ /* pack number of parameters */
+ mme_body[t+7] = 0x07;
+
+ /* pack service parameters */
+ /* pack max latency */
+ tmp = (uint16_t) strtol (service_entries[idx].max_latency,
+ NULL, 10);
+ memcpy (mme_body + t + 8, &tmp, 2);
+
+ /* pack max jitter */
+ tmp = (uint16_t) strtol (service_entries[idx].max_jitter,
+ NULL, 10);
+ memcpy (mme_body + t + 10, &tmp, 2);
+
+ /* pack down PIR */
+ tmp = (uint16_t) strtol (service_entries[idx].dba_dl_pir,
+ NULL, 10);
+ memcpy (mme_body + t + 12, &tmp, 2);
+
+ /* pack up PIR */
+ tmp = (uint16_t) strtol (service_entries[idx].dba_ul_pir,
+ NULL, 10);
+ memcpy (mme_body + t + 14, &tmp, 2);
+
+ /* pack down CIR */
+ tmp = (uint16_t) strtol (service_entries[idx].dba_dl_cir,
+ NULL, 10);
+ memcpy (mme_body + t + 16, &tmp, 2);
+
+ /* pack up CIR */
+ tmp = (uint16_t) strtol (service_entries[idx].dba_ul_cir,
+ NULL, 10);
+ memcpy (mme_body + t + 18, &tmp, 2);
+
+ /* pack QOS prio */
+ tmp = (uint16_t) strtol (service_entries[idx].qos_prio,
+ NULL, 10);
+ memcpy (mme_body + t + 20, &tmp, 2);
+
+ }
+
+ error = service_send_single_value (VS_EOC_CCO_SET_SERVICES,
+ mme_body, curr_count *
+ LIBSPID_SERVICE_BYTE_CNT + 2);
+ if (error != LIBSPID_SUCCESS)
+ {
+ LIBSPID_EOC_LOG_1 ("%s: service SET MME not sent correctly\n",
+ __FUNCTION__);
+ return error;
+ }
+ }
+ free (mme_body);
+ mme_body = NULL;
+
+ }
+ return LIBSPID_SUCCESS;
+
+}
+
+/**
+ * Synchronize services specified in config file with the current
+ * settings.<BR>
+ * Get list of entries added, changed or removed in config file
+ * and propagate it via MMEs.
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_NOT_FOUND: entry not found
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+extern libspid_error_t
+libspid_eoc_service_sync (void)
+{
+ /* pointer to list of service entries read from config file */
+ libspid_eoc_service_entry_t *service_config_entries;
+ /* pointer to list of retrieved service entries */
+ libspid_eoc_service_entry_t *service_current_entries;
+ /* pointer to list of service entries to be added or modified */
+ libspid_eoc_service_entry_t *service_add_entries;
+ /* pointer to list of service entries to be removed */
+ libspid_eoc_service_entry_t *service_remove_entries;
+ libspid_error_t error = LIBSPID_SUCCESS;
+ unsigned int i, j, config_count, current_count;
+ static unsigned char *add_mme_body;
+ static unsigned char *remove_mme_body;
+ int temp_count;
+ int found = 0;
+ int changed = 0;
+ int add_count = 0;
+ int remove_count = 0;
+
+ /* allocate and initialize pointer to list of service entries
+ read from config file */
+ service_config_entries = (libspid_eoc_service_entry_t *)
+ malloc (LIBSPID_SERVICE_AMOUNT_LIMIT * sizeof
+ (libspid_eoc_service_entry_t));
+
+ if (NULL == service_config_entries)
+ {
+ LIBSPID_EOC_LOG_2 ("%s: error allocating service config "
+ "array(errno=%d)", __FUNCTION__, errno);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+
+ memset (service_config_entries, 0x0,
+ LIBSPID_SERVICE_AMOUNT_LIMIT * sizeof
+ (libspid_eoc_service_entry_t));
+
+ /* allocate and initialize pointer to list of retrieved service entries */
+ service_current_entries = (libspid_eoc_service_entry_t *)
+ malloc (LIBSPID_SERVICE_AMOUNT_LIMIT * sizeof
+ (libspid_eoc_service_entry_t));
+
+ if (NULL == service_current_entries)
+ {
+ LIBSPID_EOC_LOG_2 ("%s: error allocating current service "
+ "array(errno=%d)", __FUNCTION__, errno);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+
+ memset (service_current_entries, 0x0,
+ LIBSPID_SERVICE_AMOUNT_LIMIT * sizeof
+ (libspid_eoc_service_entry_t));
+
+ /* get current contents of service config file */
+ error = libspid_eoc_service_get_list (service_config_entries,
+ &temp_count);
+
+ if (LIBSPID_SUCCESS != error)
+ {
+ LIBSPID_EOC_LOG_1 ("%s: service config file not read correctly\n",
+ __FUNCTION__);
+ return error;
+ }
+
+ /* Inform manager daemon to update QoS rules when */
+ /* service.conf is changed. */
+ if (LIBSPID_SUCCESS != libspid_system_file_update_warn (getpid (),
+ LIBSPID_SERVICE_CONF_PATH))
+ LIBSPID_EOC_LOG_1 ("%s: cannot inform daemon about "
+ "service.conf change", __FUNCTION__);
+
+ config_count = temp_count;
+
+ /* retrieve current contents of service list */
+ error = libspid_eoc_service_retrieve (service_current_entries,
+ &temp_count);
+
+ if (LIBSPID_SUCCESS != error)
+ {
+ LIBSPID_EOC_LOG_1 ("%s: service list not retrieved correctly\n",
+ __FUNCTION__);
+ return error;
+ }
+
+ current_count = temp_count;
+
+ if (0 == config_count)
+ {
+ if (0 == current_count)
+ {
+ LIBSPID_EOC_LOG_1 ("%s: service lists empty, "
+ "nothing to synchronize\n", __FUNCTION__);
+
+ free (service_current_entries);
+ service_current_entries = NULL;
+
+ free (service_config_entries);
+ service_config_entries = NULL;
+
+ return LIBSPID_SUCCESS;
+ }
+ else
+ {
+ /* prepare and send MME with command to remove all services */
+ /* allocate and initialize pointer to MME body */
+ remove_mme_body = (unsigned char *)
+ malloc (sizeof (unsigned char));
+ if (NULL == remove_mme_body)
+ {
+ LIBSPID_EOC_LOG_2 ("%s: error allocating MME body (errno=%d)",
+ __FUNCTION__, errno);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+
+ memset (remove_mme_body, 0x0, 1);
+ remove_mme_body[0] = LIBSPID_SERVICE_ACTION_REMOVE_ALL;
+
+ error = service_send_single_value (VS_EOC_CCO_SET_SERVICES,
+ remove_mme_body, 1);
+ if (error != LIBSPID_SUCCESS)
+ {
+ LIBSPID_EOC_LOG_1 ("%s: MME not sent correctly\n",
+ __FUNCTION__);
+ return error;
+ }
+
+ free (remove_mme_body);
+ remove_mme_body = NULL;
+
+ free (service_current_entries);
+ service_current_entries = NULL;
+
+ free (service_config_entries);
+ service_config_entries = NULL;
+
+ return LIBSPID_SUCCESS;
+ }
+ }
+
+ /* allocate and initialize pointer to list of service entries to */
+ /* be added or modified */
+ service_add_entries = (libspid_eoc_service_entry_t *)
+ malloc (config_count * sizeof
+ (libspid_eoc_service_entry_t));
+
+ if (NULL == service_add_entries)
+ {
+ LIBSPID_EOC_LOG_2 ("%s: error allocating service add array(errno=%d)",
+ __FUNCTION__, errno);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+
+ memset (service_add_entries, 0x0,
+ config_count * sizeof (libspid_eoc_service_entry_t));
+
+ LIBSPID_EOC_LOG_1 ("%s: finding entries to add or modify ...",
+ __FUNCTION__);
+
+ /* find entries to add or modify */
+ /* iterate through service entries of config file
+ * and compare them against retrieved service entries */
+ for (i = 0; i < config_count; i++)
+ {
+ found = 0;
+
+ /* if retrieved list is not empty, iterate through its entries and */
+ /* compare to current config list entry */
+ if (current_count != 0)
+ {
+ for (j=0; j < current_count; j++)
+ {
+ /* check if current config entry exists among */
+ /* retrieved entries */
+ if (0 == strcmp (service_config_entries[i].service_index,
+ service_current_entries[j].service_index))
+ {
+ found = 1;
+
+ /* compare all changeable fields in config entry and */
+ /* retrieved entry (except for service name, which is */
+ /* not included in MME) */
+ /* if all are equal, no need to copy entry to add list, */
+ /* just skip to next iteration */
+ if ((atoi (service_config_entries[i].matching_value) ==
+ atoi (service_current_entries[j].matching_value)) &&
+ (atoi (service_config_entries[i].service_type) ==
+ atoi (service_current_entries[j].service_type)) &&
+ (atoi (service_config_entries[i].qos_prio) ==
+ atoi (service_current_entries[j].qos_prio)) &&
+ (atoi (service_config_entries[i].dba_dl_pir) ==
+ atoi (service_current_entries[j].dba_dl_pir)) &&
+ (atoi (service_config_entries[i].dba_ul_pir) ==
+ atoi (service_current_entries[j].dba_ul_pir)) &&
+ (atoi (service_config_entries[i].dba_dl_cir) ==
+ atoi (service_current_entries[j].dba_dl_cir)) &&
+ (atoi (service_config_entries[i].dba_ul_cir) ==
+ atoi (service_current_entries[j].dba_ul_cir)) &&
+ (atoi (service_config_entries[i].max_latency) ==
+ atoi (service_current_entries[j].max_latency)) &&
+ (atoi (service_config_entries[i].max_jitter) ==
+ atoi (service_current_entries[j].max_jitter)) &&
+ (atoi (service_config_entries[i].acs_en) ==
+ atoi (service_current_entries[j].acs_en)))
+ {
+ changed = 0;
+ break;
+ }
+ else
+ {
+ changed = 1;
+ break;
+ }
+ }
+ else
+ found = 0;
+ }
+
+ }
+ else
+ {
+ found = 0;
+ LIBSPID_EOC_LOG_1 ("%s: current list is empty", __FUNCTION__);
+
+ }
+
+ if ((0 == found) || (1 == changed))
+ {
+ /* if entry is changed or not found, copy config */
+ /* service entry data to add list */
+ strcpy (service_add_entries[add_count].service_index,
+ service_config_entries[i].service_index);
+ strcpy (service_add_entries[add_count].service_name,
+ service_config_entries[i].service_name);
+ strcpy (service_add_entries[add_count].service_type,
+ service_config_entries[i].service_type);
+ strcpy (service_add_entries[add_count].matching_value,
+ service_config_entries[i].matching_value);
+ strcpy (service_add_entries[add_count].qos_prio,
+ service_config_entries[i].qos_prio);
+ strcpy (service_add_entries[add_count].dba_dl_pir,
+ service_config_entries[i].dba_dl_pir);
+ strcpy (service_add_entries[add_count].dba_ul_pir,
+ service_config_entries[i].dba_ul_pir);
+ strcpy (service_add_entries[add_count].dba_dl_cir,
+ service_config_entries[i].dba_dl_cir);
+ strcpy (service_add_entries[add_count].dba_ul_cir,
+ service_config_entries[i].dba_ul_cir);
+ strcpy (service_add_entries[add_count].max_latency,
+ service_config_entries[i].max_latency);
+ strcpy (service_add_entries[add_count].max_jitter,
+ service_config_entries[i].max_jitter);
+ strcpy (service_add_entries[add_count].acs_en,
+ service_config_entries[i].acs_en);
+
+ add_count++;
+ }
+ }
+
+ found = 0;
+
+ LIBSPID_EOC_LOG_1 ("%s: finding entries to remove ...", __FUNCTION__);
+
+ /* allocate and initialize pointer to list of service */
+ /* entries to be removed */
+ service_remove_entries = (libspid_eoc_service_entry_t *)
+ malloc (current_count * sizeof
+ (libspid_eoc_service_entry_t));
+
+ if (NULL == service_remove_entries)
+ {
+ LIBSPID_EOC_LOG_2 ("%s: error allocating service remove "
+ "array(errno=%d)", __FUNCTION__, errno);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+
+ memset (service_remove_entries, 0x0,
+ current_count * sizeof (libspid_eoc_service_entry_t));
+
+ /* find entries to remove */
+ /* if retrieved list is not empty, iterate through retrieved service */
+ /* entries and compare them against service entries of config file */
+ if (current_count != 0)
+ {
+ for (i = 0; i < current_count; i++)
+ {
+ found = 0;
+ /* if config list is not empty, iterate through service entries */
+ /* from config file and compare them to the retrieved entry */
+ for (j = 0; j < config_count; j++)
+ {
+ /* check if retrieved entry exists in config file */
+ if (0 == strcmp (service_current_entries[i].service_index,
+ service_config_entries[j].service_index))
+ {
+ found = 1;
+ break;
+ }
+ }
+
+ if (0 == found)
+ {
+ /* if entry doesn't exist, copy current service entry data */
+ /* to list for removal */
+ strcpy (service_remove_entries[remove_count].service_index,
+ service_current_entries[i].service_index);
+ strcpy (service_remove_entries[remove_count].service_name,
+ service_current_entries[i].service_name);
+ strcpy (service_remove_entries[remove_count].service_type,
+ service_current_entries[i].service_type);
+ strcpy (service_remove_entries[remove_count].matching_value,
+ service_current_entries[i].matching_value);
+ strcpy (service_remove_entries[remove_count].qos_prio,
+ service_current_entries[i].qos_prio);
+ strcpy (service_remove_entries[remove_count].dba_dl_pir,
+ service_current_entries[i].dba_dl_pir);
+ strcpy (service_remove_entries[remove_count].dba_ul_pir,
+ service_current_entries[i].dba_ul_pir);
+ strcpy (service_remove_entries[remove_count].dba_dl_cir,
+ service_current_entries[i].dba_dl_cir);
+ strcpy (service_remove_entries[remove_count].dba_ul_cir,
+ service_current_entries[i].dba_ul_cir);
+ strcpy (service_remove_entries[remove_count].max_latency,
+ service_current_entries[i].max_latency);
+ strcpy (service_remove_entries[remove_count].max_jitter,
+ service_current_entries[i].max_jitter);
+ strcpy (service_remove_entries[remove_count].acs_en,
+ service_current_entries[i].acs_en);
+
+ remove_count++;
+ }
+ }
+ }
+ /* pack and send MME with services to be added or modified */
+ error = service_pack_send_set_mme (add_mme_body, service_add_entries,
+ add_count,
+ LIBSPID_SERVICE_ACTION_ADD_MODIFY);
+
+ if (error != LIBSPID_SUCCESS)
+ {
+ return error;
+ }
+
+ /* pack and send MME with services to be removed */
+ error = service_pack_send_set_mme (remove_mme_body,
+ service_remove_entries, remove_count,
+ LIBSPID_SERVICE_ACTION_REMOVE);
+
+ if (error != LIBSPID_SUCCESS)
+ {
+ return error;
+ }
+
+ free (service_config_entries);
+ service_config_entries = NULL;
+
+ free (service_current_entries);
+ service_current_entries = NULL;
+
+ free (service_add_entries);
+ service_add_entries = NULL;
+
+ free (service_remove_entries);
+ service_remove_entries = NULL;
+
+ return LIBSPID_SUCCESS;
+}
+
+/** internal helper function for check parameters of service.conf */
+int
+service_check_input_parameters (libspid_eoc_service_entry_t *service_entry,
+ libspid_eoc_port_service_lists_t
+ service_port_list,
+ libspid_service_check_error_t *error_types,
+ unsigned int *max_limit,
+ int *service_index)
+{
+ int error_number = 0;
+ int value = 0;
+ int get;
+ unsigned int i = 0;
+ int ret = 0;
+ char *pnumber;
+ libspid_service_type_t type;
+
+ if (service_entry == NULL || error_types == NULL ||
+ max_limit == NULL)
+ {
+ return -1;
+ }
+
+ /** check INDEX */
+ value = strtol (service_entry->service_index, &pnumber, 10);
+ if (*pnumber != '\0')
+ ret = -1;
+ else
+ ret = (value < 0 || value >= LIBSPID_SERVICE_AMOUNT_LIMIT) ? -1 : 0;
+
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_SERVICE_INDEX_FORMAT;
+ error_number++;
+ ret = 0;
+ }
+
+ /** check if index is duplicated */
+ if (service_index[value] == 1)
+ {
+ error_types[error_number] = LIBSPID_ERROR_SERVICE_INDEX_DUPLICATE;
+ error_number++;
+ ret = 0;
+ return error_number;
+ }
+ else
+ service_index[value] = 1;
+
+ /** check name format */
+ for (i = 0; i<strlen (service_entry->service_name); i++)
+ if (!isalnum (service_entry->service_name[i]) &&
+ service_entry->service_name[i] != '_' &&
+ service_entry->service_name[i] != '-') ret = -1;
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_SERVICE_NAME_FORMAT;
+ error_number++;
+ ret = 0;
+ }
+
+ /** check service type value */
+ if (LIBSPID_SUCCESS == libspid_system_nscrtv_eponeoc_mod_eoc (&get))
+ {
+ if (LIBSPID_TRUE == get)
+ {
+ value = strtol (service_entry->service_type, &pnumber, 10);
+ if (*pnumber != '\0' ||
+ strcmp (service_entry->service_type, "") == 0)
+ ret = -1;
+ else
+ ret = (value < 0 || value > 3) ? -1 : 0;
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_SERVICE_TYPE_VALUE;
+ error_number++;
+ ret = 0;
+ }
+ }
+ }
+
+ /** check matching value only for enable ports **/
+ for (i = 0; i < (unsigned int) service_port_list.port_en_count_cnf; i++)
+ {
+ value = strtol (service_entry->matching_value, &pnumber, 10);
+ if (*pnumber != '\0' ||
+ strcmp (service_entry->matching_value,"") == 0)
+ ret = -1;
+
+ if (LIBSPID_SUCCESS == libspid_system_nscrtv_eponeoc_mod_eoc (&get))
+ {
+ if (LIBSPID_TRUE == get)
+ {
+ type = strtol (service_entry->service_type, &pnumber, 10);
+ }else {
+ type = libspid_eoc_service_type_get ();
+ }
+ }else {
+ type = libspid_eoc_service_type_get ();
+ }
+
+ if (type == LIBSPID_SERVICE_TYPE_VID)
+ *max_limit = LIBSPID_SERVICE_MAX_MATCH_VID;
+ else if (type == LIBSPID_SERVICE_TYPE_PRIO)
+ *max_limit = LIBSPID_SERVICE_MAX_MATCH_PRIO;
+ else if (type == LIBSPID_SERVICE_TYPE_TOS)
+ *max_limit = LIBSPID_SERVICE_MAX_MATCH_TOS;
+ else
+ *max_limit = 0;
+
+ /** check matching value if service is enabled in port.conf **/
+ if (strcmp (service_entry->service_index,
+ service_port_list.port_en_entries_cnf[i].service_index)
+ == 0 &&
+ ret == 0)
+ {
+ ret = (value < 0 || (unsigned int) value > *max_limit) ? -1 : 0;
+ }
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_SERVICE_MATCHING_VALUE;
+ error_number++;
+ ret = 0;
+ }
+ }
+ /** check QOS value */
+ value = strtol (service_entry->qos_prio, &pnumber, 10);
+ if (*pnumber != '\0' || strcmp (service_entry->qos_prio,"") == 0)
+ ret = -1;
+ else
+ ret = (value < 0 || value > 7) ? -1 : 0;
+
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_SERVICE_QOS_VALUE;
+ error_number++;
+ ret = 0;
+ }
+ /** check acs value */
+ value = strtol (service_entry->acs_en, &pnumber, 10);
+ if (*pnumber != '\0' || strcmp (service_entry->acs_en,"") == 0)
+ ret = -1;
+ else
+ ret = (value < 0 || value > 1) ? -1 : 0;
+
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_SERVICE_ACS_VALUE;
+ error_number++;
+ ret = 0;
+ }
+
+ /** check latency value */
+ value = strtol (service_entry->max_latency, &pnumber, 10);
+ if (*pnumber != '\0' || strcmp (service_entry->max_latency,"") == 0)
+ ret = -1;
+ else if (value < 0 || value > LIBSPID_SERVICE_MAX_LATENCY) ret = -1;
+
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_SERVICE_LATENCY_VALUE;
+ error_number++;
+ ret = 0;
+ }
+
+ /** check jitter value */
+ value = strtol (service_entry->max_jitter, &pnumber, 10);
+ if (*pnumber != '\0' || strcmp (service_entry->max_jitter,"") == 0)
+ ret = -1;
+ else if (value < 0 || value > LIBSPID_SERVICE_MAX_JITTER) ret = -1;
+
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_SERVICE_JITTER_VALUE;
+ error_number++;
+ ret = 0;
+ }
+
+ /** check pir value */
+ value = strtol (service_entry->dba_dl_pir, &pnumber, 10);
+ if (*pnumber != '\0' || strcmp (service_entry->dba_dl_pir,"") == 0)
+ ret = -1;
+ else if (value < 0 || value > LIBSPID_SERVICE_MAX_DBA_DL_PIR) ret = -1;
+
+ value = strtol (service_entry->dba_ul_pir, &pnumber, 10);
+ if (*pnumber != '\0' || strcmp (service_entry->dba_ul_pir,"") == 0)
+ ret = -1;
+ else if (value < 0 || value > LIBSPID_SERVICE_MAX_DBA_UL_PIR) ret = -1;
+
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_SERVICE_PIR_VALUE;
+ error_number++;
+ ret = 0;
+ }
+
+ /** check cir value */
+ value = strtol (service_entry->dba_dl_cir, &pnumber, 10);
+ if (*pnumber != '\0' || strcmp (service_entry->dba_dl_cir,"") == 0)
+ ret = -1;
+ else if (value < 0 || value > LIBSPID_SERVICE_MAX_DBA_DL_CIR) ret = -1;
+
+ value = strtol (service_entry->dba_ul_cir, &pnumber, 10);
+ if (*pnumber != '\0' || strcmp (service_entry->dba_ul_cir,"") == 0)
+ ret = -1;
+ else if (value < 0 || value > LIBSPID_SERVICE_MAX_DBA_UL_CIR) ret = -1;
+
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_SERVICE_CIR_VALUE;
+ error_number++;
+ ret = 0;
+ }
+
+ /** check pir >= cir */
+ ret = (atoi (service_entry->dba_dl_pir) <
+ atoi (service_entry->dba_dl_cir) ||
+ atoi (service_entry->dba_ul_pir) <
+ atoi (service_entry->dba_ul_cir) ) ? -1 : 0;
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_SERVICE_PIR_CIR_VALUE;
+ error_number++;
+ ret = 0;
+ }
+ return error_number;
+}
+
+/**
+ * Check service.conf file
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_NOT_FOUND: entry not found
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ * \return LIBSPID_ERROR_CHECK: check utility failed
+ */
+extern libspid_error_t
+libspid_eoc_service_check (void)
+{
+ int ret = -1;
+ int i = 0;
+ libspid_eoc_service_entry_t service_entry;
+ libspid_eoc_port_service_lists_t service_port_list;
+ int service_index[LIBSPID_SERVICE_AMOUNT_LIMIT] = {0};
+
+ LIBSPID_EOC_LOG_1 ("%s: Check service.conf...", __FUNCTION__);
+ /* obtain the service list from configuration file */
+ ret = libspid_eoc_service_get_list (service_port_list.service_entries_cnf,
+ &service_port_list.service_count_cnf);
+ if ( ret != LIBSPID_SUCCESS)
+ return ret;
+
+ ret = libspid_eoc_port_get_list (service_port_list.port_entries_cnf,
+ &service_port_list.port_count_cnf);
+ if ( ret != LIBSPID_SUCCESS)
+ return ret;
+
+ /* copy all enable ports to port_en_entries_cnf list */
+ service_port_list.port_en_count_cnf = 0;
+ for (i = 0; i < service_port_list.port_count_cnf; i++)
+ {
+ if (strcmp (service_port_list.port_entries_cnf[i].port_en, "1") == 0)
+ {
+ memcpy (&service_port_list.port_en_entries_cnf
+ [service_port_list.port_en_count_cnf],
+ &service_port_list.port_entries_cnf[i],
+ sizeof (libspid_eoc_port_entry_t));
+ service_port_list.port_en_count_cnf += 1;
+ }
+ }
+
+ for (i = 0; i < service_port_list.service_count_cnf; i++)
+ {
+ int number_of_error = 0;
+ libspid_service_check_error_t error_types[12];
+ unsigned int max_limit = 0;
+
+ service_entry = service_port_list.service_entries_cnf[i];
+
+ /* check format of the input parameters */
+ number_of_error = service_check_input_parameters (&service_entry,
+ service_port_list,
+ error_types,
+ &max_limit,
+ service_index);
+
+ if (number_of_error > 0)
+ {
+ int j = 0;
+ libspid_boolean_t unique_index = LIBSPID_TRUE;
+
+ ret = LIBSPID_ERROR_CHECK;
+ LIBSPID_EOC_LOG_1 ("Error in line:%d\n", i+2);
+
+ for (j = 0; j < number_of_error; j++)
+ {
+ switch (error_types[j])
+ {
+ case LIBSPID_ERROR_SERVICE_INDEX_FORMAT:
+ LIBSPID_EOC_LOG_1 ("Wrong index value specified "
+ "(expected: 0..%d)",
+ LIBSPID_SERVICE_AMOUNT_LIMIT-1);
+ break;
+ case LIBSPID_ERROR_SERVICE_INDEX_DUPLICATE:
+ LIBSPID_EOC_LOG_0 ("INDEX is not unique key.");
+ unique_index = LIBSPID_FALSE;
+ break;
+ case LIBSPID_ERROR_SERVICE_NAME_FORMAT:
+ LIBSPID_EOC_LOG_0 ("Name format is not supported "
+ "(expected characters, digits, "
+ "underscores, or dashes)");
+ break;
+ case LIBSPID_ERROR_SERVICE_TYPE_VALUE:
+ LIBSPID_EOC_LOG_0 ("Wrong service type value "
+ "specified (expected: 0...3)");
+ break;
+ case LIBSPID_ERROR_SERVICE_MATCHING_VALUE:
+ if (max_limit == 0)
+ {
+ LIBSPID_EOC_LOG_1 ("Wrong matching value "
+ "specified (expected: %u)",
+ max_limit);
+ }
+ else
+ {
+ LIBSPID_EOC_LOG_1 ("Wrong matching value "
+ "specified (expected: 0..%u)",
+ max_limit);
+ }
+ break;
+ case LIBSPID_ERROR_SERVICE_QOS_VALUE:
+ LIBSPID_EOC_LOG_0 ("Wrong QoS priority specified "
+ "(expected: 0..7)");
+ break;
+ case LIBSPID_ERROR_SERVICE_ACS_VALUE:
+ LIBSPID_EOC_LOG_0 ("Wrong ACS enable flag specified "
+ "(expected: 0..1)");
+ break;
+ case LIBSPID_ERROR_SERVICE_LATENCY_VALUE:
+ LIBSPID_EOC_LOG_1 ("Wrong LATENCY value "
+ "(expected: 0..%d)",
+ LIBSPID_SERVICE_MAX_LATENCY);
+ break;
+ case LIBSPID_ERROR_SERVICE_JITTER_VALUE:
+ LIBSPID_EOC_LOG_1 ("Wrong JITTER value "
+ "(expected: 0..%d)",
+ LIBSPID_SERVICE_MAX_JITTER);
+ break;
+ case LIBSPID_ERROR_SERVICE_PIR_VALUE:
+ LIBSPID_EOC_LOG_1 ("Wrong PIR value "
+ "(expected: 0..%d)",
+ LIBSPID_SERVICE_MAX_DBA_DL_PIR);
+ break;
+ case LIBSPID_ERROR_SERVICE_CIR_VALUE:
+ LIBSPID_EOC_LOG_1 ("Wrong CIR value "
+ "(expected: 0..%d)",
+ LIBSPID_SERVICE_MAX_DBA_DL_CIR);
+ break;
+ case LIBSPID_ERROR_SERVICE_PIR_CIR_VALUE:
+ LIBSPID_EOC_LOG_0 ("Wrong PIR and CIR value "
+ "(expected PIR >= CIR)");
+ break;
+ default:
+ break;
+ }
+ }
+
+ if (unique_index == LIBSPID_FALSE)
+ break;
+ }
+ else if (number_of_error == -1)
+ return LIBSPID_ERROR_PARAM;
+ }
+
+ for (i = 0; i < service_port_list.port_count_cnf; i++)
+ {
+ int value;
+ value = atoi (service_port_list.port_entries_cnf[i].service_index);
+ /* allow special service index 0 (used as the default value) */
+ if ((value != 0) && (service_index[value] == 0))
+ {
+ LIBSPID_EOC_LOG_1 ("Service index %d defined in port.conf "
+ "but not in service.conf ", value);
+ ret = LIBSPID_ERROR_CHECK;
+ }
+ }
+
+ return ret;
+}
+
+/**
+ * Get QoS rules from services.
+ * \param qos_rules structure to store QoS rules
+ * \return error type (LIBSPID_SUCCESS if success)
+ */
+extern libspid_error_t
+libspid_eoc_qos_rules_get (plcdrv_qos_rules_t *qos_rules)
+{
+ libspid_error_t ret = LIBSPID_SUCCESS;
+ libspid_eoc_port_service_lists_t service_port_list;
+ int i = 0;
+
+ /* Check arguments */
+ if (NULL == qos_rules)
+ {
+ return LIBSPID_ERROR_PARAM;
+ }
+ memset (qos_rules, 0, sizeof (plcdrv_qos_rules_t));
+
+ /* obtain the service list from configuration file */
+ LIBSPID_EOC_LOG_1 ("%s: read service.conf...", __FUNCTION__);
+ if ((ret = libspid_eoc_service_get_list (
+ service_port_list.service_entries_cnf,
+ &service_port_list.service_count_cnf)) != LIBSPID_SUCCESS)
+ return ret;
+
+ for (i = 0; i < service_port_list.service_count_cnf; i++)
+ {
+ libspid_eoc_service_entry_t *entry =
+ &service_port_list.service_entries_cnf[i];
+ sscanf (entry->matching_value, "%hu",
+ &qos_rules->rules[i].matching_value);
+ sscanf (entry->qos_prio, "%hhu",
+ &qos_rules->rules[i].packet_prio);
+ qos_rules->rules_nb++;
+ }
+
+ return ret;
+}
diff --git a/cleopatre/application/libspid/src/storm_eoc.c b/cleopatre/application/libspid/src/storm_eoc.c
new file mode 100644
index 0000000000..1070afab3b
--- /dev/null
+++ b/cleopatre/application/libspid/src/storm_eoc.c
@@ -0,0 +1,622 @@
+/* SPC300 bundle {{{
+ *
+ * Copyright (C) 2012 MStar
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file application/libspid/src/storm_eoc.c
+ * \brief Functions specific to EoC Storm
+ * \ingroup libspid
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <getopt.h>
+#include <syslog.h>
+#include <assert.h>
+#include <arpa/inet.h>
+#include <unistd.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <linux/netlink.h>
+#include <ctype.h>
+#include <string.h>
+
+#include "libspid.h"
+#include "nvram.h"
+#include "libmme.h"
+
+/**
+ * Returns the storm entry for the given
+ * slave MAC address and port index.<BR>
+ * \param mac_address slave MAC address
+ * \param index port index
+ * \param entry storm entry
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_NOT_FOUND: entry not found
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+extern libspid_error_t
+libspid_eoc_storm_get (char *mac_address, char *index,
+ libspid_eoc_storm_entry_t * entry)
+{
+ int i, ret;
+ libspid_eoc_port_v2_entry_t port_v2_entry;
+
+ /* check input parameters */
+ if ((mac_address == NULL) || (index == NULL) || (entry == NULL))
+ return LIBSPID_ERROR_PARAM;
+
+ memset (entry, 0x0, sizeof (entry));
+
+ for (i = 0; i < LIBSPID_MAC_STR_LEN; i++)
+ {
+ mac_address[i] = tolower (mac_address[i]);
+ }
+
+ strcpy (entry->mac_addr, mac_address);
+ strcpy (entry->port_index, index);
+
+ ret = libspid_eoc_port_v2_get (mac_address, index, &port_v2_entry);
+ if (LIBSPID_SUCCESS == ret)
+ {
+ strcpy (entry->bcast_protect_en, port_v2_entry.bcast_protect_en);
+ strcpy (entry->bcast_thres_hold, port_v2_entry.bcast_thres_hold);
+ strcpy (entry->multi_protect_en, port_v2_entry.multi_protect_en);
+ strcpy (entry->multi_thres_hold, port_v2_entry.multi_thres_hold);
+ strcpy (entry->unknow_protect_en, port_v2_entry.unknow_protect_en);
+ strcpy (entry->unknow_thres_hold, port_v2_entry.unknow_thres_hold);
+ }
+
+ return ret;
+}
+
+/**
+ * Set storm port entry with the given slave MAC address and index.<BR>
+ * \param mac_address slave MAC address
+ * \param index storm port index
+ * \param entry storm port entry
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+extern libspid_error_t
+libspid_eoc_storm_set (char *mac_address, char *index,
+ libspid_eoc_storm_entry_t * entry)
+{
+ libspid_error_t ret;
+ libspid_eoc_port_v2_entry_t port_v2_entry;
+
+ /* check input parameters */
+ if ((mac_address == NULL) || (index == NULL) || (entry == NULL))
+ return LIBSPID_ERROR_PARAM;
+
+ /* check that MAC address and port index already exist */
+ ret = libspid_eoc_port_v2_get (mac_address, index, &port_v2_entry);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ return ret;
+ }
+
+ strcpy (port_v2_entry.bcast_protect_en, entry->bcast_protect_en);
+ strcpy (port_v2_entry.bcast_thres_hold, entry->bcast_thres_hold);
+ strcpy (port_v2_entry.multi_protect_en, entry->multi_protect_en);
+ strcpy (port_v2_entry.multi_thres_hold, entry->multi_thres_hold);
+ strcpy (port_v2_entry.unknow_protect_en, entry->unknow_protect_en);
+ strcpy (port_v2_entry.unknow_thres_hold, entry->unknow_thres_hold);
+
+ ret = libspid_eoc_port_v2_set (mac_address, index, &port_v2_entry);
+
+ return ret;
+}
+
+/**
+ * Returns the mac storm list from configuration file in a
+ * pointer to an array of storm port entries.<BR>
+ * \param entry pointer to an array of storm port entries
+ * \param count pointer to an integer for number of storm port entries
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_NOT_FOUND: entry not found
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+extern libspid_error_t
+libspid_eoc_storm_get_list (libspid_eoc_storm_entry_t * entry, int *count)
+{
+ const char delimiters[2] = LIBSPID_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;
+ libspid_eoc_storm_entry_t *entry_ptr;
+ char *index_str;
+ void *user_data = NULL;
+
+ /* check input parameters */
+ if ((entry == NULL) || (count == NULL))
+ return LIBSPID_ERROR_PARAM;
+
+ *count = 0;
+
+ memset (key, 0x0, sizeof (key));
+ memset (entry, 0x0, sizeof (entry));
+
+ entry_ptr = entry;
+
+ /* get the first key */
+ error =
+ libspid_config_read_line_repetitive (LIBSPID_EOC_PORT_V2_FILE,
+ delimiters, key, &elt_number,
+ elt, buffer,
+ LIBSPID_CONFIG_LINE_MAX_LEN,
+ &user_data);
+ if (LIBSPID_SUCCESS != error)
+ return error;
+
+ for (; *count < LIBSPID_PORT_TOTAL_MAX && strcmp (key, "");
+ (*count)++)
+ {
+ /* Get a line from the conf file */
+ elt_number = LIBSPID_CONFIG_ELT_MAX_NB;
+ error =
+ libspid_config_read_line_repetitive (LIBSPID_EOC_PORT_V2_FILE,
+ delimiters, key, &elt_number,elt, buffer,
+ LIBSPID_CONFIG_LINE_MAX_LEN,
+ &user_data);
+ if (LIBSPID_SUCCESS != error)
+ return error;
+
+ /* parse MAC address and port index from buffer */
+ index_str = strchr (buffer, '.');
+ if (index_str != NULL)
+ *index_str++ = 0;
+ else
+ {
+ LIBSPID_EOC_LOG_2 ("%s: error parsing MAC "
+ "address and port number (errno=%d)",
+ __FUNCTION__, errno);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+
+ strcpy (entry_ptr->mac_addr, buffer);
+ strcpy (entry_ptr->port_index, index_str);
+ if (elt_number < LIBSPID_PORT_V2_PARAM_NUM)
+ {
+ strcpy (entry_ptr->bcast_protect_en, "");
+ strcpy (entry_ptr->bcast_thres_hold, "");
+ strcpy (entry_ptr->multi_protect_en, "");
+ strcpy (entry_ptr->multi_thres_hold, "");
+ strcpy (entry_ptr->unknow_protect_en, "");
+ strcpy (entry_ptr->unknow_thres_hold, "");
+ }
+ else
+ {
+ strcpy (entry_ptr->bcast_protect_en, elt[7]);
+ strcpy (entry_ptr->bcast_thres_hold, elt[8]);
+ strcpy (entry_ptr->multi_protect_en, elt[9]);
+ strcpy (entry_ptr->multi_thres_hold, elt[10]);
+ strcpy (entry_ptr->unknow_protect_en, elt[11]);
+ strcpy (entry_ptr->unknow_thres_hold, elt[12]);
+ }
+
+ entry_ptr++;
+ }
+ libspid_config_read_line_repetitive (0, 0, 0, 0, 0, 0, 0, &user_data);
+ return LIBSPID_SUCCESS;
+}
+
+/** internal helper function for checking parameters of storm_protection.conf.conf */
+int
+storm_check_input_parameters (
+ libspid_eoc_storm_entry_t * port_entry,
+ libspid_eoc_storm_entry_t *port_entries_cnf,
+ int port_count_cnf,
+ libspid_storm_check_error_t *error_types)
+{
+ int error_number = 0;
+ int i = 0, value = 0;
+ int ret = 0;
+ char *pnumber;
+
+ if (port_entry == NULL || port_entries_cnf == NULL || error_types == NULL)
+ {
+ return -1;
+ }
+
+ /** check MAC address*/
+ if (strlen (port_entry->mac_addr) != LIBSPID_MAC_STR_LEN - 1)
+ ret = -1;
+
+ for (i = 0; i < LIBSPID_MAC_STR_LEN - 1; i++)
+ {
+ port_entry->mac_addr[i] = tolower (port_entry->mac_addr[i]);
+ if (!((port_entry->mac_addr[i] >= '0'
+ && port_entry->mac_addr[i] <= '9')
+ || (port_entry->mac_addr[i] >= 'a'
+ && port_entry->mac_addr[i] <= 'f')
+ || port_entry->mac_addr[i] == ':'))
+ ret = -1;
+
+ if ((i % 3) == 2 && port_entry->mac_addr[i] != ':')
+ ret = -1;
+ }
+
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_STORM_MAC_FORMAT;
+ error_number++;
+ ret = 0;
+ }
+
+ /** check port INDEX value */
+ value = strtol (port_entry->port_index, &pnumber, 10);
+ if (*pnumber != '\0' || strcmp (port_entry->port_index, "") == 0)
+ ret = -1;
+ else
+ ret = (value < 0 || value > LIBSPID_PORT_PER_SLAVE_MAX - 1) ? -1 : 0;
+
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_STORM_INDEX_VALUE;
+ error_number++;
+ ret = 0;
+ }
+
+ /** check port bcast_protect_en value */
+ ret = (strcmp (port_entry->bcast_protect_en, "1") == 0 ||
+ strcmp (port_entry->bcast_protect_en, "0") == 0) ? 0 : -1;
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_STORM_EN_VALUE;
+ error_number++;
+ ret = 0;
+ }
+
+ /** check port bcast_thres_holdvalue */
+ value = strtol (port_entry->bcast_thres_hold, &pnumber, 10);
+ if (*pnumber != '\0' || strcmp (port_entry->bcast_thres_hold, "") == 0)
+ ret = -1;
+ else
+ ret = (value < LIBSPID_EOC_STORM_BCAST_THRES_HOLD_MIN ||
+ value > LIBSPID_EOC_STORM_BCAST_THRES_HOLD_MAX) ? -1 : 0;
+
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_STORM_THR_VALUE;
+ error_number++;
+ ret = 0;
+ }
+
+ /** check port multi_protect_en value */
+ ret = (strcmp (port_entry->multi_protect_en, "1") == 0 ||
+ strcmp (port_entry->multi_protect_en, "0") == 0) ? 0 : -1;
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_MULT_EN_VALUE;
+ error_number++;
+ ret = 0;
+ }
+
+ /** check port multi_thres_hold value */
+ value = strtol (port_entry->multi_thres_hold, &pnumber, 10);
+ if (*pnumber != '\0' || strcmp (port_entry->multi_thres_hold, "") == 0)
+ ret = -1;
+ else
+ ret = (value < LIBSPID_EOC_STORM_MULTI_THRES_HOLD_MIN ||
+ value > LIBSPID_EOC_STORM_MULTI_THRES_HOLD_MAX) ? -1 : 0;
+
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_MULT_THR_VALUE;
+ error_number++;
+ ret = 0;
+ }
+
+ /** check port unknow_protect_en value */
+ ret = (strcmp (port_entry->unknow_protect_en, "1") == 0 ||
+ strcmp (port_entry->unknow_protect_en, "0") == 0) ? 0 : -1;
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_UNKNOW_EN_VALUE;
+ error_number++;
+ ret = 0;
+ }
+
+ /** check port unknow_thres_hold value */
+ value = strtol (port_entry->unknow_thres_hold, &pnumber, 10);
+ if (*pnumber != '\0' || strcmp (port_entry->unknow_thres_hold, "") == 0)
+ ret = -1;
+ else
+ ret = (value < LIBSPID_EOC_STORM_UNKNOW_THRES_HOLD_MIN ||
+ value > LIBSPID_EOC_STORM_UNKNOW_THRES_HOLD_MAX) ? -1 : 0;
+
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_UNKNOW_THR_VALUE;
+ error_number++;
+ ret = 0;
+ }
+
+ return error_number;
+}
+
+static int
+cmp_string_mac (const void *p1, const void *p2)
+{
+ return strcmp (((libspid_eoc_storm_entry_t *) p1)->mac_addr,
+ ((libspid_eoc_storm_entry_t *) p2)->mac_addr);
+}
+
+/**
+ * Check storm_protection.conf file
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_NOT_FOUND: entry not found
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ * \return LIBSPID_ERROR_CHECK: check utility failed
+ */
+extern libspid_error_t
+libspid_eoc_storm_check (void)
+{
+ int port_count_cnf = 0, wl_count_cnf = 0;;
+ int ret = -1;
+ int i = 0;
+ libspid_eoc_storm_entry_t
+ port_entries_cnf[LIBSPID_PORT_TOTAL_MAX];
+ libspid_eoc_storm_entry_t
+ port_entries_cnf_sort[LIBSPID_PORT_TOTAL_MAX];
+ libspid_eoc_wl_entry_t
+ wl_entries_cnf_sort[LIBSPID_WHITE_LIST_MAX_STA_NUM];
+ libspid_eoc_storm_entry_t port_entry;
+ char key_not_unique[LIBSPID_MAC_STR_LEN + 2];
+ libspid_boolean_t unique_address = LIBSPID_TRUE;
+
+ LIBSPID_EOC_LOG_1 ("%s: Check storm_protection.conf...", __FUNCTION__);
+ /** obtain the port list from configuration file */
+ ret = libspid_eoc_storm_get_list (port_entries_cnf,
+ &port_count_cnf);
+ if (ret != LIBSPID_SUCCESS)
+ {
+ return ret;
+ }
+ ret = libspid_eoc_wl_get_list (wl_entries_cnf_sort, &wl_count_cnf);
+ if (ret != LIBSPID_SUCCESS)
+ {
+ return ret;
+ }
+ memcpy (port_entries_cnf_sort, port_entries_cnf,
+ port_count_cnf * sizeof (libspid_eoc_storm_entry_t));
+
+ /* sort storm_protection.conf */
+ qsort (port_entries_cnf_sort, port_count_cnf,
+ sizeof (libspid_eoc_storm_entry_t), cmp_string_mac);
+
+ /* sort white_list.conf */
+ qsort (wl_entries_cnf_sort, wl_count_cnf,
+ sizeof (libspid_eoc_wl_entry_t), cmp_string_mac);
+
+ /* check if MAC.index is unique key */
+ for (i = 0; i < port_count_cnf - 4; i++)
+ {
+ if (strcmp (port_entries_cnf_sort[i].mac_addr,
+ port_entries_cnf_sort[i + 1].mac_addr) == 0 &&
+ strcmp (port_entries_cnf_sort[i].port_index,
+ port_entries_cnf_sort[i + 1].port_index) == 0)
+ {
+ strcpy (key_not_unique, port_entries_cnf_sort[i].mac_addr);
+ strcat (key_not_unique, ".");
+ strcat (key_not_unique, port_entries_cnf_sort[i].port_index);
+ break;
+ }
+
+ if (strcmp (port_entries_cnf_sort[i].mac_addr,
+ port_entries_cnf_sort[i + 2].mac_addr) == 0 &&
+ strcmp (port_entries_cnf_sort[i].port_index,
+ port_entries_cnf_sort[i + 2].port_index) == 0)
+ {
+ strcpy (key_not_unique, port_entries_cnf_sort[i].mac_addr);
+ strcat (key_not_unique, ".");
+ strcat (key_not_unique, port_entries_cnf_sort[i].port_index);
+ break;
+ }
+
+ if (strcmp (port_entries_cnf_sort[i].mac_addr,
+ port_entries_cnf_sort[i + 3].mac_addr) == 0 &&
+ strcmp (port_entries_cnf_sort[i].port_index,
+ port_entries_cnf_sort[i + 3].port_index) == 0)
+ {
+ strcpy (key_not_unique, port_entries_cnf_sort[i].mac_addr);
+ strcat (key_not_unique, ".");
+ strcat (key_not_unique, port_entries_cnf_sort[i].port_index);
+ break;
+ }
+
+ if (strcmp (port_entries_cnf_sort[i].mac_addr,
+ port_entries_cnf_sort[i + 4].mac_addr) == 0 &&
+ strcmp (port_entries_cnf_sort[i].port_index,
+ port_entries_cnf_sort[i + 4].port_index) == 0)
+ {
+ strcpy (key_not_unique, port_entries_cnf_sort[i].mac_addr);
+ strcat (key_not_unique, ".");
+ strcat (key_not_unique, port_entries_cnf_sort[i].port_index);
+ break;
+ }
+ }
+
+ for (i = 0; i < port_count_cnf; i++)
+ {
+ int number_of_error = 0;
+ libspid_storm_check_error_t
+ error_types[LIBSPID_STORM_NUM_ERROR_TYPES];
+ char test_unique_key[LIBSPID_MAC_STR_LEN + 2] = { 0 };
+ libspid_eoc_storm_entry_t *res;
+ int port_index[LIBSPID_PORT_PER_SLAVE_MAX] = { 0 };
+
+ /* for each MAC address, verify that there is */
+ /* required number of ports */
+ if ((i % 5) == 0)
+ {
+ if (strcmp (port_entries_cnf_sort[i].mac_addr,
+ port_entries_cnf_sort[i + 4].mac_addr) == 0)
+ {
+ port_index[atoi (port_entries_cnf_sort[i].port_index)] = 1;
+ port_index[atoi (port_entries_cnf_sort[i + 1].port_index)] =
+ 1;
+ port_index[atoi (port_entries_cnf_sort[i + 2].port_index)] =
+ 1;
+ port_index[atoi (port_entries_cnf_sort[i + 3].port_index)] =
+ 1;
+ port_index[atoi (port_entries_cnf_sort[i + 4].port_index)] =
+ 1;
+
+ if (!(port_index[0] && port_index[1] && port_index[2] &&
+ port_index[3] && port_index[4]))
+ {
+ LIBSPID_EOC_LOG_2 ("MAC %s must have required number "
+ "of ports(%d)",
+ port_entries_cnf_sort[i].mac_addr,
+ LIBSPID_PORT_PER_SLAVE_MAX);
+ return LIBSPID_ERROR_CHECK;
+ }
+ }
+ else
+ {
+ LIBSPID_EOC_LOG_2 ("MAC %s must have required "
+ "number of ports(%d)",
+ port_entries_cnf_sort[i].mac_addr,
+ LIBSPID_PORT_PER_SLAVE_MAX);
+ return LIBSPID_ERROR_CHECK;
+ }
+ }
+
+ port_entry = port_entries_cnf[i];
+
+ /* Check dependency between storm_protection.conf and white_list.conf file */
+ /* check if MAC defined in storm_protection.conf but not in white_list.conf */
+ res = bsearch (&port_entry, wl_entries_cnf_sort, wl_count_cnf,
+ sizeof (libspid_eoc_wl_entry_t), cmp_string_mac);
+ if (res == NULL)
+ {
+ LIBSPID_EOC_LOG_1 ("MAC (%s) defined in storm_protection.conf "
+ "but not in white_list.conf",
+ port_entry.mac_addr);
+ ret = LIBSPID_ERROR_CHECK;
+ }
+
+ /* if MAC.index is not unique key */
+ /* find error line */
+ strcpy (test_unique_key, port_entry.mac_addr);
+ strcat (test_unique_key, ".");
+ strcat (test_unique_key, port_entry.port_index);
+
+ /** check format of the input parameters */
+ number_of_error = storm_check_input_parameters (&port_entry,
+ port_entries_cnf,
+ port_count_cnf,
+ error_types);
+
+ if (strcmp (key_not_unique, test_unique_key) == 0)
+ {
+ number_of_error += 1;
+ error_types[number_of_error - 1] =
+ LIBSPID_ERROR_PORT_MAC_DUPLICATE;
+ }
+
+ if (number_of_error > 0)
+ {
+ int j = 0;
+
+ ret = LIBSPID_ERROR_CHECK;
+ LIBSPID_EOC_LOG_1 ("Error in line:%d\n", i + 2);
+ for (j = 0; j < number_of_error; j++)
+ {
+ switch (error_types[j])
+ {
+ case LIBSPID_ERROR_STORM_MAC_FORMAT:
+ LIBSPID_EOC_LOG_0 ("Malformed MAC address.");
+ break;
+ case LIBSPID_ERROR_STORM_MAC_DUPLICATE:
+ LIBSPID_EOC_LOG_1 ("MAC_ADDRESS.PORT_NB (%s) is not "
+ "unique key.", key_not_unique);
+ unique_address = LIBSPID_FALSE;
+ break;
+ case LIBSPID_ERROR_STORM_INDEX_VALUE:
+ LIBSPID_EOC_LOG_1 ("Wrong port index value specified "
+ "(expected: 0..%d)",
+ LIBSPID_PORT_PER_SLAVE_MAX - 1);
+ break;
+ case LIBSPID_ERROR_STORM_EN_VALUE:
+ LIBSPID_EOC_LOG_0 ("Wrong port storm en flag specified "
+ "(expected: 0..1)");
+ break;
+ case LIBSPID_ERROR_STORM_THR_VALUE:
+ LIBSPID_EOC_LOG_2 ("Wrong port storm threshold vall "
+ "specified (expected: %d..%d)",
+ LIBSPID_EOC_STORM_BCAST_THRES_HOLD_MIN,
+ LIBSPID_EOC_STORM_BCAST_THRES_HOLD_MAX);
+ break;
+ case LIBSPID_ERROR_MULT_EN_VALUE:
+ LIBSPID_EOC_LOG_0 ("Wrong port muit en specified "
+ "(expected: 0..1)");
+ break;
+ case LIBSPID_ERROR_MULT_THR_VALUE:
+ LIBSPID_EOC_LOG_2 ("Wrong port mult threshold vall "
+ "specified (expected: %d..%d)",
+ LIBSPID_EOC_STORM_MULTI_THRES_HOLD_MIN,
+ LIBSPID_EOC_STORM_MULTI_THRES_HOLD_MAX);
+ break;
+ case LIBSPID_ERROR_UNKNOW_EN_VALUE:
+ LIBSPID_EOC_LOG_0 ("Wrong port unknow en specified "
+ "(expected: 0..1)");
+ break;
+ case LIBSPID_ERROR_UNKNOW_THR_VALUE:
+ LIBSPID_EOC_LOG_2 ("Wrong port unknow threshold vall "
+ "specified (expected: %d..%d)",
+ LIBSPID_EOC_STORM_UNKNOW_THRES_HOLD_MIN,
+ LIBSPID_EOC_STORM_UNKNOW_THRES_HOLD_MAX);
+ break;
+ default:
+ break;
+ }
+ }
+
+ if (unique_address == LIBSPID_FALSE)
+ break;
+ }
+ else if (number_of_error == -1)
+ return LIBSPID_ERROR_PARAM;
+ }
+
+ if (unique_address == LIBSPID_TRUE)
+ {
+ /* Check dependency between storm_protection.conf and white_list.conf file */
+ /* check if MAC defined in white_list.conf but not in storm_protection.conf */
+ for (i = 0; i < wl_count_cnf; i++)
+ {
+ libspid_eoc_wl_entry_t *res;
+ libspid_eoc_wl_entry_t wl_entry;
+
+
+ wl_entry = wl_entries_cnf_sort[i];
+
+ res = bsearch (&wl_entry, port_entries_cnf_sort, port_count_cnf,
+ sizeof (libspid_eoc_storm_entry_t),
+ cmp_string_mac);
+ if (res == NULL)
+ {
+ LIBSPID_EOC_LOG_1 ("MAC (%s) defined in white_list.conf "
+ "but not in storm_protection.conf",
+ wl_entry.mac_addr);
+ ret = LIBSPID_ERROR_CHECK;
+ }
+ }
+ }
+
+ return ret;
+}
diff --git a/cleopatre/application/libspid/src/system.c b/cleopatre/application/libspid/src/system.c
index b7437742a7..598120b9c2 100644
--- a/cleopatre/application/libspid/src/system.c
+++ b/cleopatre/application/libspid/src/system.c
@@ -1,6 +1,6 @@
/* SPC300 bundle {{{
*
- * Copyright (C) 2009 Spidcom
+ * Copyright (C) 2012 MStar
*
* <<<Licence>>>
*
@@ -21,10 +21,17 @@
#include <fcntl.h>
#include <unistd.h>
#include <time.h>
+#include <sys/stat.h>
#include <syslog.h>
#include <sys/file.h>
#include <sys/stat.h>
#include <sys/types.h>
+#include <sys/ioctl.h>
+
+#if defined __UTESTS__ || defined __FTESTS_PC__
+#else
+ #include <mtd/mtd-user.h>
+#endif
#include "libspid.h"
typedef int file_lock_t;
@@ -41,7 +48,8 @@ typedef int file_lock_t;
* LIBSPID_ERROR_SYSTEM, on error.
*/
static libspid_error_t
-libspid_system_file_lock (const char *filename, libspid_boolean_t create, file_lock_t *lock)
+libspid_system_file_lock (const char *filename, libspid_boolean_t create,
+ file_lock_t * lock)
{
if ((NULL == filename) || (NULL == lock))
{
@@ -56,14 +64,14 @@ libspid_system_file_lock (const char *filename, libspid_boolean_t create, file_l
flags |= O_CREAT;
}
- int fd = open (filename, flags, mode); /* if O_CREAT is not specified in
- flags,then mode is ignored. */
+ int fd = open (filename, flags, mode); /* if O_CREAT is not specified in
+ * flags, then mode is ignored. */
if (fd == -1)
{
/* Save errno. */
int save_errno = errno;
- syslog (LOG_ERR, "open(): %m");
+ syslog (LOG_ERR, "open (): %m");
if (save_errno == ENOENT)
{
@@ -80,17 +88,18 @@ libspid_system_file_lock (const char *filename, libspid_boolean_t create, file_l
* the lock is removed whenever the process closes a file descriptor to
* the locked file, even if it's not the fd used when locking.
* So here, calling libspid_config_read_line() or
- * libspid_config_write_line() while holding a lock would release the lock.
+ * libspid_config_write_line() while
+ * holding a lock would release the lock.
* Which is not what is expected.
* By using flock(), the lock is not released when closing the fd in
* libspid_config_read_line() or libspid_config_write_line(). */
if (flock (fd, LOCK_EX) == -1)
{
- syslog (LOG_ERR, "flock(lock): %m");
+ syslog (LOG_ERR, "flock (lock): %m");
if (close (fd) == -1)
{
- syslog (LOG_ERR, "close(): %m");
+ syslog (LOG_ERR, "close (): %m");
}
return LIBSPID_ERROR_SYSTEM;
}
@@ -108,7 +117,7 @@ libspid_system_file_lock (const char *filename, libspid_boolean_t create, file_l
* LIBSPID_ERROR_SYSTEM, on error.
*/
static int
-libspid_system_file_unlock (const file_lock_t *lock)
+libspid_system_file_unlock (const file_lock_t * lock)
{
if (NULL == lock)
{
@@ -119,14 +128,14 @@ libspid_system_file_unlock (const file_lock_t *lock)
if (flock (fd, LOCK_UN) == -1)
{
- syslog (LOG_ERR, "flock(unlock): %m");
+ syslog (LOG_ERR, "flock (unlock): %m");
return LIBSPID_ERROR_SYSTEM;
}
if (close (fd) == -1)
{
- syslog (LOG_ERR, "close(): %m");
+ syslog (LOG_ERR, "close (): %m");
return LIBSPID_ERROR_SYSTEM;
}
@@ -146,7 +155,8 @@ libspid_system_file_unlock (const file_lock_t *lock)
*/
-libspid_error_t libspid_system_get_kernel_version(char *buffer, int buffer_len)
+libspid_error_t
+libspid_system_get_kernel_version (char *buffer, int buffer_len)
{
FILE *fp;
char line_buffer[LIBSPID_CONFIG_LINE_MAX_LEN];
@@ -157,26 +167,26 @@ libspid_error_t libspid_system_get_kernel_version(char *buffer, int buffer_len)
return LIBSPID_ERROR_PARAM;
/* initialize buffer - important for strcat to work properly */
- memset(buffer, 0x0, buffer_len);
+ memset (buffer, 0x0, buffer_len);
fp = fopen (LIBSPID_SYSTEM_VERSION_PATH, "r");
if (fp != NULL)
{
- while ( fgets(line_buffer, LIBSPID_CONFIG_LINE_MAX_LEN - 1, fp) )
+ while (fgets (line_buffer, LIBSPID_CONFIG_LINE_MAX_LEN - 1, fp))
{
/* check for buffer overload */
- len = strlen(line_buffer);
+ len = strlen (line_buffer);
total += len;
- if (total > (unsigned int)buffer_len)
+ if (total > (unsigned int) buffer_len)
{
fclose (fp);
return LIBSPID_ERROR_NO_SPACE;
}
- strcat(buffer, line_buffer);
+ strcat (buffer, line_buffer);
}
- fclose(fp);
+ fclose (fp);
}
else
{
@@ -197,7 +207,8 @@ libspid_error_t libspid_system_get_kernel_version(char *buffer, int buffer_len)
* \return LIBSPID_ERROR_SYSTEM: system error, see errno
*/
-libspid_error_t libspid_system_get_plc_version (char *buffer, const int buffer_len)
+libspid_error_t
+libspid_system_get_plc_version (char *buffer, const int buffer_len)
{
return LIBSPID_SUCCESS;
}
@@ -213,7 +224,8 @@ libspid_error_t libspid_system_get_plc_version (char *buffer, const int buffer_l
* \return LIBSPID_ERROR_SYSTEM: system error, see errno
*/
-libspid_error_t libspid_system_get_av_version (char *buffer, const int buffer_len)
+libspid_error_t
+libspid_system_get_av_version (char *buffer, const int buffer_len)
{
return LIBSPID_SUCCESS;
}
@@ -230,7 +242,8 @@ libspid_error_t libspid_system_get_av_version (char *buffer, const int buffer_le
* \return LIBSPID_ERROR_SYSTEM: system error, see errno
*/
-libspid_error_t libspid_system_get_uptime(unsigned int *total_s, unsigned int *idle_s)
+libspid_error_t
+libspid_system_get_uptime (unsigned int *total_s, unsigned int *idle_s)
{
FILE *fp;
char buf[LIBSPID_CONFIG_LINE_MAX_LEN];
@@ -242,26 +255,31 @@ libspid_error_t libspid_system_get_uptime(unsigned int *total_s, unsigned int *i
if (total_s == NULL || idle_s == NULL)
return LIBSPID_ERROR_PARAM;
/*
- /proc/uptime <--- we will read uptime info from this file
- This file contains information detailing how long the system
- has been on since its last restart. The output of /proc/uptime is quite minimal:
-
- 350735.47 234388.90
-
- The first number is the total number of seconds the system has been up.
- The second number is how much of that time the machine has spent idle, in seconds.
+ * /proc/uptime <--- we will read uptime info from this file
+ * This file contains information detailing how long the system
+ * has been on since its last restart. The output of /proc/uptime is
+ * quite minimal:
+ *
+ * 350735.47 234388.90
+ *
+ * The first number is the total number of seconds the system has been up.
+ * The second number is how much of that time the machine has spent idle,
+ * in seconds.
*/
fp = fopen (LIBSPID_SYSTEM_UPTIME_PATH, "r");
if (fp != NULL)
{
- if ( fgets(buf, LIBSPID_CONFIG_LINE_MAX_LEN - 1, fp) != NULL )
+ if (fgets (buf, LIBSPID_CONFIG_LINE_MAX_LEN - 1, fp) != NULL)
{
- /* we cannot scanf %lf, we do not have double or float type on our ARM */
- res = sscanf (buf, "%d.%d %d.%d", &uptotal, &dummy1, &upidle, &dummy2);
+ /* we cannot scanf %lf, we do not have
+ * double or float type on our ARM */
+ res =
+ sscanf (buf, "%d.%d %d.%d", &uptotal, &dummy1, &upidle,
+ &dummy2);
/* check if all 4 values were read */
if (res != 4)
{
- fclose(fp);
+ fclose (fp);
return LIBSPID_ERROR_SYSTEM;
}
}
@@ -286,7 +304,8 @@ libspid_error_t libspid_system_get_uptime(unsigned int *total_s, unsigned int *i
* \return LIBSPID_ERROR_SYSTEM: system error, see errno
* \return LIBSPID_ERROR_NO_SPACE: not enough space in buffer
*/
-libspid_error_t libspid_system_get_meminfo(char *buffer, int buffer_len)
+libspid_error_t
+libspid_system_get_meminfo (char *buffer, int buffer_len)
{
FILE *fp;
char line_buffer[LIBSPID_CONFIG_LINE_MAX_LEN];
@@ -297,23 +316,23 @@ libspid_error_t libspid_system_get_meminfo(char *buffer, int buffer_len)
return LIBSPID_ERROR_PARAM;
/* initialize buffer - important for strcat to work properly */
- memset(buffer, 0x0, buffer_len);
+ memset (buffer, 0x0, buffer_len);
fp = fopen (LIBSPID_SYSTEM_MEMINFO_PATH, "r");
if (fp != NULL)
{
- while ( fgets(line_buffer, LIBSPID_CONFIG_LINE_MAX_LEN - 1, fp) )
+ while (fgets (line_buffer, LIBSPID_CONFIG_LINE_MAX_LEN - 1, fp))
{
/* check for buffer overload */
- len = strlen(line_buffer);
+ len = strlen (line_buffer);
total += len;
- if (total > (unsigned int)buffer_len)
+ if (total > (unsigned int) buffer_len)
{
fclose (fp);
return LIBSPID_ERROR_NO_SPACE;
}
- strcat(buffer, line_buffer);
+ strcat (buffer, line_buffer);
}
fclose (fp);
@@ -327,13 +346,172 @@ libspid_error_t libspid_system_get_meminfo(char *buffer, int buffer_len)
}
/**
+ * Get the current memory use percent of the system.
+ *
+ * \param percent get use percent
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno
+ */
+libspid_error_t
+libspid_system_get_memusage_percent (int *percent)
+{
+ FILE *fp;
+ char line_buffer[LIBSPID_CONFIG_LINE_MAX_LEN];
+ unsigned int memtotal = 0;
+ unsigned int memfree = 0;
+
+ char *strtok_ctx;
+ char *value;
+ char *ptr;
+
+ if (percent == NULL)
+ return LIBSPID_ERROR_PARAM;
+
+ /* initialize buffer - important for strcat to work properly */
+ fp = fopen (LIBSPID_SYSTEM_MEMINFO_PATH, "r");
+ if (fp != NULL)
+ {
+ while (fgets (line_buffer, LIBSPID_CONFIG_LINE_MAX_LEN - 1, fp))
+ {
+ ptr = strtok_r (line_buffer, " \t", &strtok_ctx);
+ if ((ptr == NULL) || (strlen (ptr) <= 0) || (*ptr == '#'))
+ {
+ continue;
+ }
+
+ /* --- MemTotal --- */
+ if (strcmp (ptr, "MemTotal:") == 0)
+ {
+ value = strtok_r (NULL, " \t", &strtok_ctx);
+ if ((ptr == NULL) || (strlen (ptr) <= 0))
+ {
+ /* put empty string into ip->address */
+ continue;
+ }
+ /* suppress '\n' character */
+ value[strlen (value)] = '\0';
+ /* check for buffer overflow */
+ sscanf (value, "%d", &memtotal);
+ }
+ /* --- MemFree --- */
+ if (strcmp (ptr, "MemFree:") == 0)
+ {
+ value = strtok_r (NULL, " \t", &strtok_ctx);
+ if ((ptr == NULL) || (strlen (ptr) <= 0))
+ {
+ /* put empty string into ip->address */
+ continue;
+ }
+ /* suppress '\n' character */
+ value[strlen (value)] = '\0';
+ /* check for buffer overflow */
+ sscanf (value, "%d", &memfree);
+ }
+ if ((memtotal != 0) && (memfree != 0))
+ break;
+
+ }
+
+ fclose (fp);
+ }
+ else
+ {
+ return LIBSPID_ERROR_SYSTEM;
+ }
+ if ((memtotal == 0) || (memfree == 0) || (memfree > memtotal))
+ {
+ return LIBSPID_ERROR_SYSTEM;
+ }
+ *percent = (memtotal - memfree) * 100 / memtotal;
+
+ return LIBSPID_SUCCESS;
+}
+
+
+/**
+ * Get the current cpuload percent of the system.
+ *
+ * \param percent get use percent
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno
+ */
+libspid_error_t
+libspid_system_get_cpuload_percent (int *percent)
+{
+ libspid_error_t ret = LIBSPID_SUCCESS;
+ char key[LIBSPID_CONFIG_KEY_MAX_LEN + 1] = "cpu";
+ unsigned int elt_number = LIBSPID_CONFIG_ELT_MAX_NB;
+ char *elt[LIBSPID_CONFIG_ELT_MAX_NB] = { NULL };
+ char buffer[LIBSPID_CONFIG_LINE_MAX_LEN] = { 0 };
+ unsigned int user_t, nice_t, system_t, idle_t, iowait_t, irq_t, softirq_t,
+ stealstolen_t, guest_t;
+ unsigned int total_0, total_1, load_0, load_1;
+
+ if (percent == NULL)
+ return LIBSPID_ERROR_PARAM;
+
+ ret = libspid_config_read_line (LIBSPID_SYSTEM_CPUINFO_PATH,
+ LIBSPID_CPUSTAT_INFO_DELIMITER, key,
+ &elt_number, elt, buffer,
+ LIBSPID_CONFIG_LINE_MAX_LEN);
+ if ((ret != LIBSPID_SUCCESS) || (elt_number < 9))
+ return LIBSPID_ERROR_SYSTEM;
+
+ sscanf (elt[0], "%d", &user_t);
+ sscanf (elt[1], "%d", &nice_t);
+ sscanf (elt[2], "%d", &system_t);
+ sscanf (elt[3], "%d", &idle_t);
+ sscanf (elt[4], "%d", &iowait_t);
+ sscanf (elt[5], "%d", &irq_t);
+ sscanf (elt[6], "%d", &softirq_t);
+ sscanf (elt[7], "%d", &stealstolen_t);
+ sscanf (elt[8], "%d", &guest_t);
+
+ total_0 = user_t + nice_t + system_t + idle_t + iowait_t
+ + irq_t + softirq_t + stealstolen_t + guest_t;
+ load_0 = user_t + nice_t + system_t + iowait_t + irq_t
+ + softirq_t + stealstolen_t + guest_t;
+ usleep (500000); /* sleep 500ms */
+
+ ret = libspid_config_read_line (LIBSPID_SYSTEM_CPUINFO_PATH,
+ LIBSPID_CPUSTAT_INFO_DELIMITER, key,
+ &elt_number, elt, buffer,
+ LIBSPID_CONFIG_LINE_MAX_LEN);
+
+ if ((ret != LIBSPID_SUCCESS) || (elt_number < 9))
+ return LIBSPID_ERROR_SYSTEM;
+ sscanf (elt[0], "%d", &user_t);
+ sscanf (elt[1], "%d", &nice_t);
+ sscanf (elt[2], "%d", &system_t);
+ sscanf (elt[3], "%d", &idle_t);
+ sscanf (elt[4], "%d", &iowait_t);
+ sscanf (elt[5], "%d", &irq_t);
+ sscanf (elt[6], "%d", &softirq_t);
+ sscanf (elt[7], "%d", &stealstolen_t);
+ sscanf (elt[8], "%d", &guest_t);
+
+ total_1 = user_t + nice_t + system_t + idle_t + iowait_t + irq_t
+ + softirq_t + stealstolen_t + guest_t;
+ load_1 = user_t + nice_t + system_t + iowait_t + irq_t
+ + softirq_t + stealstolen_t + guest_t;
+
+ *percent = (load_1 - load_0) * 100 / (total_1 - total_0);
+
+ return LIBSPID_SUCCESS;
+}
+
+
+/**
* Reboot the whole system.
*
*/
-void libspid_system_reboot(void)
+void
+libspid_system_reboot (void)
{
- system("reboot");
+ system ("reboot");
}
/**
@@ -343,64 +521,79 @@ void libspid_system_reboot(void)
* \return LIBSPID_ERROR_SYSTEM: system error, see errno
*/
-libspid_error_t libspid_system_save(void)
+libspid_error_t
+libspid_system_save (void)
{
FILE *fp;
- char *ptr, filename[128], *dirptr, tmpbuf[128], command_buffer[256];
+ char *ptr, filename[128], *dirptr, tmpbuf[128], command_buffer[256],
+ mkdir_buffer[256];
int rc = 0;
- char prefix[128] = {0};
+ char prefix[128] = { 0 };
+ struct stat st;
- if ( (fp = fopen(LIBSPID_SAVE_LIST_PATH, "r")) == NULL )
+ /* create save.lst file if it is not present already */
+ if (stat (LIBSPID_SAVE_LIST_PATH, &st) != 0)
+ {
+ sprintf (command_buffer, "touch %s", LIBSPID_SAVE_LIST_PATH);
+ rc = system (command_buffer);
+ if (rc != 0)
+ return LIBSPID_ERROR_SYSTEM;
+ }
+
+ if ((fp = fopen (LIBSPID_SAVE_LIST_PATH, "r")) == NULL)
{
- //syslog(LOG_WARNING, "libspid_save_config: cannot open %s (errno=%d)", LIBSPID_SAVE_LIST_PATH, errno);
return LIBSPID_ERROR_SYSTEM;
}
/* check for /usr/local/etc validity */
- rc = system("mkdir -p /usr/local/etc");
+ sprintf (mkdir_buffer, "mkdir -p %s", LIBSPID_CONF_SAVE_PATH);
+ rc = system (mkdir_buffer);
if (rc != 0)
{
- fclose(fp);
+ fclose (fp);
return LIBSPID_ERROR_SYSTEM;
}
- while(fgets(filename, 127, fp))
+ while (fgets (filename, 127, fp))
{
- if (strlen(filename) > 0)
+ if (strlen (filename) > 0)
{
- filename[strlen(filename) - 1] = '\0';
+ filename[strlen (filename) - 1] = '\0';
}
/* check if the line in cnf file is /etc/<name> or just <name> */
- sprintf(prefix, "%s/", LIBSPID_CONF_ROOT_PATH);
- if ( !strncmp(filename, prefix, strlen(prefix)) )
- ptr = filename + strlen(prefix);
+ sprintf (prefix, "%s/", LIBSPID_CONF_ROOT_PATH);
+ if (!strncmp (filename, prefix, strlen (prefix)))
+ ptr = filename + strlen (prefix);
else
ptr = filename;
- if (0 == strlen(ptr))
+ if (0 == strlen (ptr))
{
continue;
}
strcpy (tmpbuf, ptr);
dirptr = dirname (tmpbuf);
- sprintf(command_buffer, "mkdir -p %s/%.64s", LIBSPID_SAVE_DIR_PATH, dirptr);
- //syslog(LOG_DEBUG, "libspid_save_config: %s", command_buffer);
- rc = system(command_buffer);
- sprintf(command_buffer, "cp -a %s/%.64s %s/%s", LIBSPID_CONF_ROOT_PATH, ptr, LIBSPID_SAVE_DIR_PATH, dirptr);
- //syslog(LOG_DEBUG, "libspid_save_config: %s", command_buffer);
- rc = system(command_buffer);
- if (rc !=0)
+ sprintf (command_buffer, "mkdir -p %s/%.64s", LIBSPID_CONF_SAVE_PATH,
+ dirptr);
+ rc = system (command_buffer);
+ sprintf (command_buffer, "cp -a %s/%.64s %s/%s",
+ LIBSPID_CONF_ROOT_PATH, ptr, LIBSPID_CONF_SAVE_PATH, dirptr);
+ rc = system (command_buffer);
+ if (rc != 0)
{
- fclose(fp);
+ fclose (fp);
return LIBSPID_ERROR_SYSTEM;
}
}
- fclose(fp);
- /* make sure that all *.conf files have been copied, even new ones not in save.lst */
- sprintf(command_buffer, "cp -a %s/*.conf %s", LIBSPID_CONF_ROOT_PATH, LIBSPID_SAVE_DIR_PATH);
- rc = system(command_buffer);
- if (rc !=0)
+ fclose (fp);
+ /* make sure that all *.conf files have been copied,
+ * even new ones not in save.lst */
+ sprintf (command_buffer, "cp -a %s/*.conf %s", LIBSPID_CONF_ROOT_PATH,
+ LIBSPID_CONF_SAVE_PATH);
+ rc = system (command_buffer);
+ if (rc != 0)
{
return LIBSPID_ERROR_SYSTEM;
}
+
return LIBSPID_SUCCESS;
}
@@ -412,20 +605,25 @@ libspid_error_t libspid_system_save(void)
* \return LIBSPID_ERROR_SYSTEM: system error, see errno
*/
-libspid_error_t libspid_system_save_file(const char *filename)
+libspid_error_t
+libspid_system_save_file (const char *filename)
{
- char command_buffer[256];
+ char command_buffer[256], *dirptr, tmpbuf[128];
int rc = 0;
- if(filename == NULL)
+ if (filename == NULL)
{
return LIBSPID_ERROR_PARAM;
}
-
- sprintf(command_buffer, "cp -a %s %s", filename, LIBSPID_SAVE_DIR_PATH);
- //syslog(LOG_DEBUG, "libspid_save_config: %s", command_buffer);
- rc = system(command_buffer);
- if (rc !=0)
+ strcpy (tmpbuf, filename);
+ dirptr = dirname (tmpbuf);
+
+ sprintf (command_buffer, "mkdir -p %s%s", LIBSPID_SAVE_DIR_PATH, dirptr);
+ rc = system (command_buffer);
+ sprintf (command_buffer, "cp -a %s %s%s", filename, LIBSPID_SAVE_DIR_PATH,
+ dirptr);
+ rc = system (command_buffer);
+ if (rc != 0)
{
return LIBSPID_ERROR_SYSTEM;
}
@@ -439,14 +637,16 @@ libspid_error_t libspid_system_save_file(const char *filename)
* \return LIBSPID_ERROR_SYSTEM: system error, see errno
*/
-libspid_error_t libspid_system_factory(void)
+libspid_error_t
+libspid_system_factory (void)
{
int rc;
- char cmd[256] = {0};
+ char cmd[256] = { 0 };
- sprintf(cmd, "rm -rf %s/*", LIBSPID_SAVE_DIR_PATH);
- rc = system(cmd);
- if (rc !=0)
+ sprintf (cmd, "rm -rf %s/* %s", LIBSPID_CONF_SAVE_PATH,
+ LIBSPID_CONF_TRACE_PATH);
+ rc = system (cmd);
+ if (rc != 0)
return LIBSPID_ERROR_SYSTEM;
//syslog("libspid_factory: returned to factory default");
@@ -463,8 +663,10 @@ libspid_error_t libspid_system_factory(void)
* \return LIBSPID_ERROR_SYSTEM: system error, see errno
*/
-libspid_error_t libspid_system_get_nvram(spidcom_nvram_t *nvram)
+libspid_error_t
+libspid_system_get_nvram (spidcom_nvram_t * nvram)
{
+#ifndef __FTESTS_PC__
FILE *fp;
int fd;
char *nvram_mtd_num;
@@ -479,14 +681,17 @@ libspid_error_t libspid_system_get_nvram(spidcom_nvram_t *nvram)
fp = fopen (LIBSPID_SYSTEM_MTD_PATH, "r");
if (fp != NULL)
{
- while ( fgets(line_buffer, LIBSPID_CONFIG_LINE_MAX_LEN - 1, fp) != NULL )
+ while (fgets (line_buffer, LIBSPID_CONFIG_LINE_MAX_LEN - 1, fp) !=
+ NULL)
{
- if ( strstr(line_buffer, NVRAM_MTD_NAME) != NULL )
+ if (strstr (line_buffer, NVRAM_MTD_NAME) != NULL)
{
is_found = 1;
- /* Extract mtd path from line mtd<num>: <size> <erasesize> "nvram" */
- nvram_mtd_num = strtok_r(line_buffer, ": ", &strtok_ctx);
- sprintf(nvram_mtd_path, "%s/%s", LIBSPID_DEV_PATH, nvram_mtd_num);
+ /* Extract mtd path from line
+ * mtd<num>: <size> <erasesize> "nvram" */
+ nvram_mtd_num = strtok_r (line_buffer, ": ", &strtok_ctx);
+ sprintf (nvram_mtd_path, "%s/%s", LIBSPID_DEV_PATH,
+ nvram_mtd_num);
}
}
@@ -503,47 +708,201 @@ libspid_error_t libspid_system_get_nvram(spidcom_nvram_t *nvram)
}
/* open found mtd path using fd, i.e. with open sys call,
- read NVRAM magic string and verify (done below) */
- if ( (fd = open(nvram_mtd_path, O_RDONLY)) < 0 )
+ * read NVRAM magic string and verify (done below) */
+ if ((fd = open (nvram_mtd_path, O_RDONLY)) < 0)
{
return LIBSPID_ERROR_SYSTEM;
}
- if( read(fd, nvram, sizeof(spidcom_nvram_t)) < (int)sizeof(spidcom_nvram_t) )
+ if (read (fd, nvram, sizeof (spidcom_nvram_t)) <
+ (int) sizeof (spidcom_nvram_t))
{
- close(fd);
+ close (fd);
return LIBSPID_ERROR_SYSTEM;
}
- close(fd);
+ close (fd);
/* check NVRAM validity */
- if(!NVRAM_IS_VALID(nvram))
+ if (!NVRAM_IS_VALID (nvram))
{
- return LIBSPID_ERROR_SYSTEM;
+ return LIBSPID_ERROR_SYSTEM;
}
+#endif /* __FTESTS_PC__ */
+ return LIBSPID_SUCCESS;
+}
+
+/**
+ * Set the NVRAM content.
+ *
+ * \param nvram pointer to the new NVRAM contents
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_NOT_FOUND: key not found
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno
+ */
+
+libspid_error_t
+libspid_system_set_nvram (spidcom_nvram_t * nvram)
+{
+#ifndef __FTESTS_PC__
+ FILE *fp;
+ int fd;
+ char *nvram_mtd_num;
+ char nvram_mtd_path[128];
+ char line_buffer[LIBSPID_CONFIG_LINE_MAX_LEN];
+ char *strtok_ctx;
+ int is_found = 0;
+#ifndef __UTESTS__
+ erase_info_t erase;
+#endif
+
+ if (nvram == NULL)
+ return LIBSPID_ERROR_PARAM;
+
+ fp = fopen (LIBSPID_SYSTEM_MTD_PATH, "r");
+ if (fp != NULL)
+ {
+ while (fgets (line_buffer, LIBSPID_CONFIG_LINE_MAX_LEN - 1, fp) !=
+ NULL)
+ {
+ if (strstr (line_buffer, NVRAM_MTD_NAME) != NULL)
+ {
+ is_found = 1;
+ /* Extract mtd path from line
+ * mtd<num>: <size> <erasesize> "nvram" */
+ nvram_mtd_num = strtok_r (line_buffer, ": ", &strtok_ctx);
+ sprintf (nvram_mtd_path, "%s/%s", LIBSPID_DEV_PATH,
+ nvram_mtd_num);
+ }
+ }
+
+ fclose (fp);
+
+ if (is_found == 0)
+ return LIBSPID_ERROR_NOT_FOUND;
+ }
+ else
+ {
+ return LIBSPID_ERROR_SYSTEM;
+ }
+
+ /* open found mtd path using fd */
+ if ((fd = open (nvram_mtd_path, O_RDWR)) < 0)
+ return LIBSPID_ERROR_SYSTEM;
+
+#ifndef __UTESTS__
+ /* erase the NVRAM sector */
+ erase.start = 0;
+ erase.length = 64 * 1024;
+ if (ioctl (fd, MEMERASE, &erase) != 0)
+ {
+ close (fd);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+#endif
+
+ /* store new NVRAM contents */
+ if (write (fd, nvram, sizeof (spidcom_nvram_t)) <
+ (int) sizeof (spidcom_nvram_t))
+ {
+ close (fd);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+ close (fd);
+
+ /* check NVRAM validity */
+
+ if (!NVRAM_IS_VALID (nvram))
+ return LIBSPID_ERROR_SYSTEM;
+#endif /* __FTESTS_PC__ */
+
+ return LIBSPID_SUCCESS;
+}
+
+/**
+ * Returns master date and time inside a provided buffer.
+ * Date and time are given in the format of seconds elapsed since
+ * UNIX Epoch (01/01/1970).
+ *
+ * \param buffer buffer where to put the result
+ * \param buffer_len length of buffer where to put the result
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_NO_SPACE: no enough space in buffer
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno
+ */
+
+libspid_error_t
+libspid_system_get_date (char *buffer, const int buffer_len)
+{
+ time_t now;
+ char time_buffer[LIBSPID_CONFIG_LINE_MAX_LEN];
+
+ /* check validity of parameters */
+ if (buffer == NULL || buffer_len <= 0)
+ return LIBSPID_ERROR_PARAM;
+
+ /* get current time in seconds since UNIX Epoch */
+ now = time (NULL);
+
+ sprintf (time_buffer, "%ld", now);
+
+ /* check length of time buffer */
+ if ((int) strlen (time_buffer) > buffer_len)
+ return LIBSPID_ERROR_NO_SPACE;
+
+ strcpy (buffer, time_buffer);
return LIBSPID_SUCCESS;
}
+/**
+ * Sets master date and time to value provided in buffer.
+ * Date and time are given in the format of seconds elapsed since
+ * UNIX Epoch (01/01/1970).
+ *
+ * \param buffer buffer containing time value
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno
+ */
+
+libspid_error_t
+libspid_system_set_date (const char *buffer)
+{
+ time_t timer;
+
+ if (buffer == NULL)
+ return LIBSPID_ERROR_PARAM;
+
+ if (1 != sscanf (buffer, "%ld", &timer))
+ return LIBSPID_ERROR_PARAM;
+
+ if (0 != stime (&timer))
+ return LIBSPID_ERROR_SYSTEM;
+
+ return LIBSPID_SUCCESS;
+}
/**
* Register a process to be informed about a file modification.
*
- * Each time the file is modified, the registered process will receive a signal SIGHUP,
- * which will be handled by the callback.
+ * Each time the file is modified, the registered process will
+ * receive a signal SIGHUP, which will be handled by the callback.
*
* \param rx_pid identifier of the process requesting to be informed
- * \param filename name of the file on which any modification will trigger a signal
- * intended for the given process
+ * \param filename name of the file on which any modification will
+ * trigger a signal intended for the given process
* \param callback signal handler
* \return error type:
* - LIBSPID_SUCCESS if success
* - LIBSPID_ERROR_PARAM if bad input parameters
- * - LIBSPID_ERROR_NO_SPACE if too much processes registered on the same file
- * - LIBSPID_ERROR_SYSTEM if system error, see errno set by sigaction() system call:
- * - EINVAL if signal_nb is out-of-range (signal_nb <=0 or signal_nb >= NSIG)
+ * - LIBSPID_ERROR_NO_SPACE if too much processes registered on the same file
+ * - LIBSPID_ERROR_SYSTEM if system error, see errno set by
+ * sigaction() system call:
+ * - EINVAL if signal_nb is out-of-range (signal_nb <=0 or signal_nb >= NSIG)
* or is SIGKILL or SIGSTOP
- * - error from libspid_system_file_is_registered(), libspid_config_write_line() or
- * libspid_config_read_line()
+ * - error from libspid_system_file_is_registered(),
+ * libspid_config_write_line() or libspid_config_read_line()
*/
libspid_error_t
libspid_system_file_update_register (pid_t rx_pid, const char *filename,
@@ -551,11 +910,11 @@ libspid_system_file_update_register (pid_t rx_pid, const char *filename,
{
libspid_error_t ret = LIBSPID_SUCCESS;
const char delimiter = *LIBSPID_SIGNAL_INFO_DELIMITER;
- char pid_str[8] = {0};
- char *elt[LIBSPID_CONFIG_ELT_MAX_NB] = {NULL};
- char key[LIBSPID_CONFIG_KEY_MAX_LEN + 1] = {0};
+ char pid_str[8] = { 0 };
+ char *elt[LIBSPID_CONFIG_ELT_MAX_NB] = { NULL };
+ char key[LIBSPID_CONFIG_KEY_MAX_LEN + 1] = { 0 };
unsigned int elt_number = LIBSPID_CONFIG_ELT_MAX_NB;
- char buffer[LIBSPID_CONFIG_LINE_MAX_LEN] = {0};
+ char buffer[LIBSPID_CONFIG_LINE_MAX_LEN] = { 0 };
unsigned int i = 0;
/* Check input parameters. */
@@ -570,17 +929,20 @@ libspid_system_file_update_register (pid_t rx_pid, const char *filename,
/* Initialize key. */
strcpy (key, filename);
- /* Register the given signal handler of the given process to receive signals. */
+ /* Register the given signal handler of the
+ * given process to receive signals. */
if (SIG_ERR == signal (SIGHUP, callback))
{
- syslog (LOG_ERR, "signal(): %m");
+ syslog (LOG_ERR, "signal (): %m");
return LIBSPID_ERROR_SYSTEM;
}
/* Lock the file to prevent race conditions when multiple processes
* concurrently register themselves for updates on the same file. */
file_lock_t lock;
- ret = libspid_system_file_lock (LIBSPID_SIGNAL_INFO_PATH, LIBSPID_TRUE, &lock);
+ ret =
+ libspid_system_file_lock (LIBSPID_SIGNAL_INFO_PATH, LIBSPID_TRUE,
+ &lock);
if (ret != LIBSPID_SUCCESS)
{
return ret;
@@ -588,7 +950,9 @@ libspid_system_file_update_register (pid_t rx_pid, const char *filename,
/* Check "signal.info" file appropriate line. */
ret = libspid_config_read_line (LIBSPID_SIGNAL_INFO_PATH,
- LIBSPID_SIGNAL_INFO_DELIMITER, key, &elt_number, elt, buffer, LIBSPID_CONFIG_LINE_MAX_LEN);
+ LIBSPID_SIGNAL_INFO_DELIMITER, key,
+ &elt_number, elt, buffer,
+ LIBSPID_CONFIG_LINE_MAX_LEN);
if (LIBSPID_ERROR_NOT_FOUND == ret)
{
@@ -599,11 +963,12 @@ libspid_system_file_update_register (pid_t rx_pid, const char *filename,
goto error;
}
- /* Check that the given process has not already registered to the given file update
- * by looping on returned elements, and comparing process identifiers.
+ /* Check that the given process has not already registered to the given
+ * file update by looping on returned elements,
+ * and comparing process identifiers.
* If one matches with the input rx_pid, return LIBSPID_SUCCESS. */
- sprintf (pid_str, "%d", rx_pid);
- for (i=0; i<elt_number; i++)
+ sprintf (pid_str, "%d", rx_pid);
+ for (i = 0; i < elt_number; i++)
{
if (!strcmp (elt[i], pid_str))
{
@@ -612,7 +977,7 @@ libspid_system_file_update_register (pid_t rx_pid, const char *filename,
}
/* To know which process(es) to inform in case the given file is modified,
- * save information into the "signal.info" file. */
+ * save information into the "signal.info" file. */
if (LIBSPID_CONFIG_ELT_MAX_NB <= elt_number)
{
ret = LIBSPID_ERROR_NO_SPACE;
@@ -628,10 +993,10 @@ libspid_system_file_update_register (pid_t rx_pid, const char *filename,
goto error;
}
-success:
+ success:
return libspid_system_file_unlock (&lock);
-error:
+ error:
libspid_system_file_unlock (&lock);
return ret;
@@ -651,11 +1016,11 @@ error:
libspid_error_t
libspid_system_file_update_unregister (pid_t rx_pid, const char *filename)
{
- char key[LIBSPID_CONFIG_KEY_MAX_LEN + 1] = {0};
+ char key[LIBSPID_CONFIG_KEY_MAX_LEN + 1] = { 0 };
unsigned int elt_number = LIBSPID_CONFIG_ELT_MAX_NB;
char *elt[LIBSPID_CONFIG_ELT_MAX_NB] = { NULL };
- char buffer[LIBSPID_CONFIG_LINE_MAX_LEN] = {0};
- char pid_str[8] = {0};
+ char buffer[LIBSPID_CONFIG_LINE_MAX_LEN] = { 0 };
+ char pid_str[8] = { 0 };
const char delimiter = *LIBSPID_SIGNAL_INFO_DELIMITER;
libspid_error_t ret = LIBSPID_SUCCESS;
libspid_boolean_t remove = LIBSPID_FALSE;
@@ -675,7 +1040,9 @@ libspid_system_file_update_unregister (pid_t rx_pid, const char *filename)
/* Lock the file to prevent race conditions when multiple processes
* concurrently unregister themselves for updates on the same file. */
file_lock_t lock;
- ret = libspid_system_file_lock (LIBSPID_SIGNAL_INFO_PATH, LIBSPID_FALSE, &lock);
+ ret =
+ libspid_system_file_lock (LIBSPID_SIGNAL_INFO_PATH, LIBSPID_FALSE,
+ &lock);
if (ret == LIBSPID_ERROR_NOT_FOUND)
{
/* "signal.info" doesn't exist,
@@ -700,8 +1067,8 @@ libspid_system_file_update_unregister (pid_t rx_pid, const char *filename)
/* If the given PID is present in returned elements,
* remove the given PID from elements. */
- sprintf (pid_str, "%d", rx_pid);
- for (i=0; i<elt_number; i++)
+ sprintf (pid_str, "%d", rx_pid);
+ for (i = 0; i < elt_number; i++)
{
if (!strcmp (elt[i], pid_str))
{
@@ -709,7 +1076,7 @@ libspid_system_file_update_unregister (pid_t rx_pid, const char *filename)
}
if (LIBSPID_TRUE == remove)
{
- elt[i] = elt[i+1];
+ elt[i] = elt[i + 1];
}
}
@@ -717,7 +1084,8 @@ libspid_system_file_update_unregister (pid_t rx_pid, const char *filename)
{
/* Remove old line from "signal.info" file. */
if (LIBSPID_SUCCESS != (ret = libspid_config_remove_line
- (LIBSPID_SIGNAL_INFO_PATH, LIBSPID_SIGNAL_INFO_DELIMITER, filename)))
+ (LIBSPID_SIGNAL_INFO_PATH,
+ LIBSPID_SIGNAL_INFO_DELIMITER, filename)))
{
goto error;
}
@@ -725,8 +1093,10 @@ libspid_system_file_update_unregister (pid_t rx_pid, const char *filename)
elt_number--;
if (0 < elt_number)
{
- ret = libspid_config_write_line (LIBSPID_SIGNAL_INFO_PATH, delimiter,
- filename, elt_number, elt);
+ ret =
+ libspid_config_write_line (LIBSPID_SIGNAL_INFO_PATH,
+ delimiter, filename, elt_number,
+ elt);
if (ret != LIBSPID_SUCCESS)
{
goto error;
@@ -736,7 +1106,7 @@ libspid_system_file_update_unregister (pid_t rx_pid, const char *filename)
return libspid_system_file_unlock (&lock);
-error:
+ error:
libspid_system_file_unlock (&lock);
return ret;
@@ -755,14 +1125,14 @@ error:
*/
libspid_error_t
libspid_system_file_update_is_registered (pid_t rx_pid, const char *filename,
- libspid_boolean_t *is_registered)
+ libspid_boolean_t * is_registered)
{
libspid_error_t ret = LIBSPID_SUCCESS;
- char key[LIBSPID_CONFIG_KEY_MAX_LEN + 1] = {0};
+ char key[LIBSPID_CONFIG_KEY_MAX_LEN + 1] = { 0 };
unsigned int elt_number = LIBSPID_CONFIG_ELT_MAX_NB;
- char *elt[LIBSPID_CONFIG_ELT_MAX_NB] = {NULL};
- char buffer[LIBSPID_CONFIG_LINE_MAX_LEN] = {0};
- char pid_str[8] = {0};
+ char *elt[LIBSPID_CONFIG_ELT_MAX_NB] = { NULL };
+ char buffer[LIBSPID_CONFIG_LINE_MAX_LEN] = { 0 };
+ char pid_str[8] = { 0 };
unsigned int i = 0;
/* Check input parameters. */
@@ -778,10 +1148,12 @@ libspid_system_file_update_is_registered (pid_t rx_pid, const char *filename,
*is_registered = LIBSPID_FALSE;
strcpy (key, filename);
- /* Check in "signal.info" file if some processes are registered to the given file. */
+ /* Check in "signal.info" file if some processes are
+ * registered to the given file. */
ret = libspid_config_read_line (LIBSPID_SIGNAL_INFO_PATH,
- LIBSPID_SIGNAL_INFO_DELIMITER, key, &elt_number, elt, buffer,
- LIBSPID_CONFIG_LINE_MAX_LEN);
+ LIBSPID_SIGNAL_INFO_DELIMITER, key,
+ &elt_number, elt, buffer,
+ LIBSPID_CONFIG_LINE_MAX_LEN);
if ((LIBSPID_ERROR_NOT_FOUND == ret)
|| ((LIBSPID_ERROR_SYSTEM == ret) && (ENOENT == errno)))
{
@@ -794,9 +1166,10 @@ libspid_system_file_update_is_registered (pid_t rx_pid, const char *filename,
/* Check if the given process is registered to the given file
* by looping on returned elements, and comparing process identifiers.
- * If one matches with the input rx_pid, set inout is_registered to LIBSPID_TRUE. */
- sprintf (pid_str, "%d", rx_pid);
- for (i=0; i<elt_number; i++)
+ * If one matches with the input rx_pid,
+ * set inout is_registered to LIBSPID_TRUE. */
+ sprintf (pid_str, "%d", rx_pid);
+ for (i = 0; i < elt_number; i++)
{
if (!strcmp (elt[i], pid_str))
{
@@ -819,7 +1192,8 @@ libspid_system_file_update_is_registered (pid_t rx_pid, const char *filename,
* \return error type:
* - LIBSPID_SUCCESS if success
* - LIBSPID_ERROR_PARAM if bad input parameters
- * - LIBSPID_ERROR_SYSTEM if system error, see errno set by kill() system call:
+ * - LIBSPID_ERROR_SYSTEM if system error,
+ * see errno set by kill() system call:
* - EPERM in case of authorization constraints
* - error from libspid_config_read_line()
*/
@@ -827,10 +1201,10 @@ libspid_error_t
libspid_system_file_update_warn (pid_t tx_pid, const char *filename)
{
libspid_error_t ret = LIBSPID_SUCCESS;
- char key[LIBSPID_CONFIG_KEY_MAX_LEN + 1] = {0};
+ char key[LIBSPID_CONFIG_KEY_MAX_LEN + 1] = { 0 };
unsigned int elt_number = LIBSPID_CONFIG_ELT_MAX_NB;
- char *elt[LIBSPID_CONFIG_ELT_MAX_NB] = {NULL};
- char buffer[LIBSPID_CONFIG_LINE_MAX_LEN] = {0};
+ char *elt[LIBSPID_CONFIG_ELT_MAX_NB] = { NULL };
+ char buffer[LIBSPID_CONFIG_LINE_MAX_LEN] = { 0 };
pid_t rx_pid = 0;
unsigned int i = 0;
@@ -845,13 +1219,16 @@ libspid_system_file_update_warn (pid_t tx_pid, const char *filename)
/* Initialize key. */
strcpy (key, filename);
- /* To know which process(es) to inform, get information from the "signal.info" file. */
+ /* To know which process(es) to inform,
+ * get information from the "signal.info" file. */
ret = libspid_config_read_line (LIBSPID_SIGNAL_INFO_PATH,
- LIBSPID_SIGNAL_INFO_DELIMITER, key, &elt_number, elt, buffer,
- LIBSPID_CONFIG_LINE_MAX_LEN);
+ LIBSPID_SIGNAL_INFO_DELIMITER, key,
+ &elt_number, elt, buffer,
+ LIBSPID_CONFIG_LINE_MAX_LEN);
if ((LIBSPID_ERROR_SYSTEM == ret) && (ENOENT == errno))
{
- /* If the "signal.info" file does not exist, it means that no process has registered
+ /* If the "signal.info" file does not exist,
+ * it means that no process has registered
* to any files updates. */
return LIBSPID_SUCCESS;
}
@@ -866,12 +1243,12 @@ libspid_system_file_update_warn (pid_t tx_pid, const char *filename)
}
/* Transmit the signal to the registered processes. */
- for (i=0; i<elt_number; i++)
+ for (i = 0; i < elt_number; i++)
{
/* Check that rx_pid is different from the calling process.
- * Note that if input tx_pid = 0, the calling process will also receive the signal. */
- if ((0 != (rx_pid = atoi (elt[i])))
- && (tx_pid != rx_pid))
+ * Note that if input tx_pid = 0,
+ * the calling process will also receive the signal. */
+ if ((0 != (rx_pid = atoi (elt[i]))) && (tx_pid != rx_pid))
{
if (kill (rx_pid, SIGHUP) != 0 && errno != ESRCH)
{
@@ -883,3 +1260,130 @@ libspid_system_file_update_warn (pid_t tx_pid, const char *filename)
return LIBSPID_SUCCESS;
}
+
+/**
+ * Check if a file has been modified since last check.
+ *
+ * Call this function when a process received a signal
+ * and has to check if a file has been modified since last signal reception.
+ *
+ * \param last check last time when the file has been checked
+ * \param filename name of the file that may have been modified
+ * \return a boolean:
+ * - LIBSPID_TRUE if the file has been modified since last check
+ * - LIBSPID_FALSE otherwise
+ */
+libspid_boolean_t
+libspid_system_file_is_updated (struct timespec last_check,
+ const char *filename)
+{
+ struct stat file_stat;
+ memset (&file_stat, 0, sizeof (struct stat));
+
+ if (stat (filename, &file_stat) == 0)
+ {
+#if defined __UTESTS__ || defined __FTESTS_PC__
+ if ((file_stat.st_mtim.tv_sec > last_check.tv_sec)
+ || ((file_stat.st_mtim.tv_sec == last_check.tv_sec)
+ && (file_stat.st_mtim.tv_nsec >= last_check.tv_nsec)))
+#else
+ if ((file_stat.st_mtime > last_check.tv_sec)
+ || ((file_stat.st_mtime == last_check.tv_sec)
+ && (file_stat.st_mtimensec >= last_check.tv_nsec)))
+#endif
+ {
+ return LIBSPID_TRUE;
+ }
+ }
+ else
+ {
+ syslog (LOG_ERR, "stat: %s", strerror (errno));
+ }
+
+ return LIBSPID_FALSE;
+}
+
+/**
+ * Get the cause of the last system reset.
+ *
+ * \param buffer buffer where the result is put
+ * \param buffer_len size of provided buffer
+ * \return LIBSPID_SUCCESS, on success
+ * LIBSPID_ERROR_NO_SPACE, if not enough space in buffer
+ * LIBSPID_ERROR_PARAM, on bad input parameters
+ * LIBSPID_ERROR_SYSTEM, on system error, see errno
+ */
+libspid_error_t
+libspid_system_get_reset_cause (char *buffer, const int buffer_len)
+{
+ FILE *fp;
+ int real_len;
+ libspid_error_t ret;
+
+ if (buffer == NULL || buffer_len <= 0)
+ return LIBSPID_ERROR_PARAM;
+
+ if (buffer_len < SPC300_RESET_CAUSE_STR_MAX_LEN)
+ return LIBSPID_ERROR_NO_SPACE;
+
+ fp = fopen (LIBSPID_SYSTEM_RESET_CAUSE_PATH, "r");
+ if (fp == NULL)
+ return LIBSPID_ERROR_SYSTEM;
+
+ if (fgets (buffer, buffer_len, fp) != NULL)
+ {
+ /* Remove trailing '\n'. */
+ real_len = strlen (buffer);
+ if (buffer[real_len - 1] == '\n')
+ buffer[real_len - 1] = '\0';
+
+ ret = LIBSPID_SUCCESS;
+ }
+ else
+ {
+ ret = LIBSPID_ERROR_SYSTEM;
+ }
+
+ fclose (fp);
+ return ret;
+}
+
+/**
+ * Get nscrtv_eponeoc_mod_eoc from system config file.
+ * \param value return nscrtv_eponeoc_mod_eoc, LIBSPID_FALSE is no,
+ * LIBSPID_TRUE is yes
+ * \return error type (LIBSPID_SUCCESS if yes)
+ */
+extern libspid_error_t
+libspid_system_nscrtv_eponeoc_mod_eoc (int *value)
+{
+ int ret;
+ char enable[LIBSPID_BOOLEAN_STR_MAX_LEN] = { 0 };
+
+ if (NULL == value)
+ {
+ return LIBSPID_ERROR_PARAM;
+ }
+
+ ret =
+ libspid_config_read_item (LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_NSCRTV_EPONEOC_MOD_EOC,
+ enable, LIBSPID_BOOLEAN_STR_MAX_LEN);
+ if (ret != LIBSPID_SUCCESS)
+ {
+ syslog (LOG_ERR,
+ "libspid_system_nscrtv_eponeoc_mod_eoc:get system.conf error;"
+ "use dufault value, NSCRTV_EPONEOC_MOD_EOC = no");
+ }
+
+ if (ret == LIBSPID_SUCCESS &&
+ LIBSPID_GET_BOOLEAN (enable) == LIBSPID_TRUE)
+ {
+ *value = LIBSPID_TRUE;
+ }
+ else
+ {
+ *value = LIBSPID_FALSE;
+ }
+ return LIBSPID_SUCCESS;
+}
diff --git a/cleopatre/application/libspid/src/tonemap_snr_eoc.c b/cleopatre/application/libspid/src/tonemap_snr_eoc.c
new file mode 100644
index 0000000000..c573c5624a
--- /dev/null
+++ b/cleopatre/application/libspid/src/tonemap_snr_eoc.c
@@ -0,0 +1,433 @@
+/* SPC300 bundle {{{
+ *
+ * Copyright (C) 2011 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file application/libspid/src/tonemap_snr_eoc.c
+ * \brief get functions for tonemap and snr
+ * \ingroup libspid
+ *
+ */
+#include "libspid.h"
+#include "libmme.h"
+
+#define ARRAY_LENGTH(array) (sizeof ((array)) / sizeof ((array)[0]))
+
+/**
+ * Return tonemap parameters from VS_GET_TONEMAP
+ *
+ * \param mac_address_device string containing slave MAC address
+ * \param direction direction 0-TX, 1-RX
+ * \param tonemap return values from VS_GET_TONEMAP
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_MME: mme function failed
+ * \return LIBSPID_ERROR_GEN: bad result or oui received
+ */
+libspid_error_t
+libspid_eoc_get_tonemap (const char *mac_address_device,
+ unsigned char direction,
+ libspid_eoc_tonemap_entry_t *tonemap)
+{
+ mme_ctx_t request_ctx, confirm_ctx;
+ unsigned char snd_buffer[ETH_DATA_LEN];
+ int ret = 0, i = 0;
+ unsigned int result_len = 0;
+ const char *iface = LIBSPID_EOC_PLC_IFACE;
+ unsigned char mac_address[LIBSPID_MAC_STR_LEN];
+ unsigned char mac_address_bin[ETH_ALEN];
+ unsigned char mac_address_device_bin[LIBSPID_MAC_BIN_LEN];
+ unsigned char result = 0;
+ unsigned char direction_value = 0;
+ int reserved_value = 0;
+ unsigned char tmi_value = 0, int_id_value = 0;
+
+
+ if (mac_address_device == NULL || tonemap == NULL)
+ {
+ return LIBSPID_ERROR_PARAM;
+ }
+
+ /** get master MAC address **/
+ ret = libspid_network_get_mac (iface, mac_address);
+ if (ret != LIBSPID_SUCCESS)
+ return ret;
+
+ ret = libspid_mac_str_to_bin ((char *)mac_address, mac_address_bin);
+ if (ret != LIBSPID_SUCCESS) return ret;
+
+ /** MAC address of slave **/
+ ret = libspid_mac_str_to_bin (mac_address_device, mac_address_device_bin);
+ if (ret != LIBSPID_SUCCESS)
+ return ret;
+
+ /** initialize MME for VS_GET_TONEMAP **/
+ ret = mme_init (&request_ctx,
+ VS_GET_TONEMAP | MME_REQ, snd_buffer,
+ (unsigned int) ETH_DATA_LEN);
+ if (ret != MME_SUCCESS)
+ return LIBSPID_ERROR_MME;
+
+ ret = mme_init (&confirm_ctx,
+ VS_GET_TONEMAP | MME_CNF, snd_buffer,
+ (unsigned int) ETH_DATA_LEN);
+ if (ret != MME_SUCCESS)
+ return LIBSPID_ERROR_MME;
+
+ /** attach slave MAC address **/
+ ret = mme_put (&request_ctx, mac_address_device_bin,
+ LIBSPID_MAC_BIN_LEN, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ /** attach direction 0-TX, 1-RX **/
+ if (direction > LIBSPID_EOC_TONEMAP_DIRECTION_RX)
+ direction_value = LIBSPID_EOC_TONEMAP_DIRECTION_TX;
+ else
+ direction_value = direction;
+
+ /** attach TMI with value 255 */
+ /** this is first message that return current valid identifier (INT Id) */
+ tmi_value = LIBSPID_EOC_TONEMAP_TMI_DEFAULT;
+
+ ret = mme_put (&request_ctx, &tmi_value, 1, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ /** attach INT Id (No meaning if TMI=255) **/
+ ret = mme_put (&request_ctx, &int_id_value, 1, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ /** attach direction 0-TX, 1-RX **/
+ ret = mme_put (&request_ctx, &direction_value, 1, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ /** send VS_GET_TONEMAP MME request **/
+ ret = mme_send (&request_ctx, MME_SEND_REQ_CNF, NULL,
+ mac_address_bin, &confirm_ctx);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ /** extract SPIDCOM OUI and check if it is correct **/
+ if (confirm_ctx.oui != MME_OUI_SPIDCOM)
+ return LIBSPID_ERROR_GEN;
+
+ /** collect confirmation result **/
+ ret = mme_pull (&confirm_ctx, &result, 1, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ if (result != 0)
+ return LIBSPID_ERROR_GEN;
+
+ /** pull reserved bytes **/
+ ret = mme_pull (&confirm_ctx, &reserved_value, 4, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ /** collect INT Id that is need for next VS_GET_TONEMAP MME **/
+ ret = mme_pull (&confirm_ctx, &int_id_value, 1, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ /** initialize MME for VS_GET_TONEMAP **/
+ ret = mme_init (&request_ctx,
+ VS_GET_TONEMAP | MME_REQ,
+ snd_buffer, (unsigned int) ETH_DATA_LEN);
+ if (ret != MME_SUCCESS)
+ return LIBSPID_ERROR_MME;
+
+ ret = mme_init (&confirm_ctx,
+ VS_GET_TONEMAP | MME_CNF, snd_buffer,
+ (unsigned int) ETH_DATA_LEN);
+ if (ret != MME_SUCCESS)
+ return LIBSPID_ERROR_MME;
+
+ /** attach slave MAC address **/
+ ret = mme_put (&request_ctx, mac_address_device_bin,
+ LIBSPID_MAC_BIN_LEN, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ /** attach direction 0-TX, 1-RX **/
+ if (direction > LIBSPID_EOC_TONEMAP_DIRECTION_RX)
+ direction_value = LIBSPID_EOC_TONEMAP_DIRECTION_TX;
+ else
+ direction_value = direction;
+
+ /** attach TMI with value 4 **/
+ /** this is second message that return current tonemap parameters **/
+ tmi_value = LIBSPID_EOC_TONEMAP_TMI_INDEX;
+
+ ret = mme_put (&request_ctx, &tmi_value, 1, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ /** attach INT Id that it is received from first message **/
+ ret = mme_put (&request_ctx, &int_id_value, 1, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ /** attach direction 0-TX, 1-RX **/
+ ret = mme_put (&request_ctx, &direction_value, 1, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ /** send VS_GET_TONEMAP MME request **/
+ ret = mme_send (&request_ctx, MME_SEND_REQ_CNF, NULL,
+ mac_address_bin, &confirm_ctx);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ /** extract SPIDCOM OUI and check if it is correct **/
+ if (confirm_ctx.oui != MME_OUI_SPIDCOM)
+ return LIBSPID_ERROR_GEN;
+
+ /** collect confirmation result **/
+ ret = mme_pull (&confirm_ctx, &result, 1, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ if (result != 0)
+ return LIBSPID_ERROR_GEN;
+
+ /** collect tonemap parameters defined in libspid_eoc_tonemap_entry_t **/
+ ret = mme_pull (&confirm_ctx, &reserved_value, 4, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ ret = mme_pull (&confirm_ctx, &tonemap->int_id, 1, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ ret = mme_pull (&confirm_ctx, &tonemap->tmi_default, 1, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ ret = mme_pull (&confirm_ctx, &tonemap->tmi_length, 1, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ for (i=0; i<tonemap->tmi_length; i++)
+ {
+ ret = mme_pull (&confirm_ctx, &tonemap->tmi_data[i], 1, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+ }
+
+ ret = mme_pull (&confirm_ctx, &tonemap->int_length, 1, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ for (i=0; i<tonemap->int_length; i++)
+ {
+ ret = mme_pull (&confirm_ctx, &tonemap->int_et[i], 2, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ ret = mme_pull (&confirm_ctx, &tonemap->int_tmi, 1, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ }
+
+ ret = mme_pull (&confirm_ctx, &tonemap->tmi, 1, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ ret = mme_pull (&confirm_ctx, &tonemap->tm_fec, 1, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ ret = mme_pull (&confirm_ctx, &tonemap->tm_gi, 1, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ ret = mme_pull (&confirm_ctx, tonemap->modulation_list,
+ LIBSPID_EOC_MODULATION_LIST_MAX_SIZE, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ return LIBSPID_SUCCESS;
+}
+
+/**
+ * Return snr parameters from VS_GET_SNR
+ *
+ * \param mac_address_device string containing slave MAC address
+ * \param group carrier_group (0-7)
+ * \param snr return values from VS_GET_SNR
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_MME: mme function failed
+ * \return LIBSPID_ERROR_GEN: bad result or oui received
+ */
+libspid_error_t
+libspid_eoc_get_snr (const char *mac_address_device,
+ unsigned char group,
+ libspid_eoc_snr_entry_t *snr)
+{
+ mme_ctx_t request_ctx, confirm_ctx;
+ unsigned char snd_buffer[ETH_DATA_LEN];
+ unsigned int result_len = 0;
+ const char *iface = LIBSPID_EOC_PLC_IFACE;
+ unsigned char mac_address[LIBSPID_MAC_STR_LEN];
+ unsigned char mac_address_bin[ETH_ALEN];
+ unsigned char mac_address_device_bin[ETH_ALEN];
+ unsigned char result = 0;
+ unsigned char carrier_group = 0;
+ unsigned char int_value = 0, int_id_value = 0;
+ libspid_error_t ret;
+ mme_error_t libmme_ret;
+ int i;
+
+ struct fields_t {
+ void *ptr;
+ unsigned int size;
+ };
+
+ if (mac_address_device == NULL || snr == NULL)
+ return LIBSPID_ERROR_PARAM;
+
+ /** get master MAC address **/
+ ret = libspid_network_get_mac (iface, mac_address);
+ if (ret != LIBSPID_SUCCESS)
+ return ret;
+
+ ret = libspid_mac_str_to_bin ((char *) mac_address, mac_address_bin);
+ if (ret != LIBSPID_SUCCESS)
+ return ret;
+
+ /** MAC address of slave **/
+ ret = libspid_mac_str_to_bin (mac_address_device, mac_address_device_bin);
+ if (ret != LIBSPID_SUCCESS)
+ return ret;
+
+ /** initialize MME for VS_GET_SNR **/
+ if (MME_SUCCESS != mme_init (&request_ctx, VS_GET_SNR_REQ,
+ snd_buffer, ETH_DATA_LEN))
+ return LIBSPID_ERROR_MME;
+
+ if (MME_SUCCESS != mme_init (&confirm_ctx, VS_GET_SNR_CNF,
+ snd_buffer, ETH_DATA_LEN))
+ return LIBSPID_ERROR_MME;
+
+ /* Initialize INT values. */
+ int_value = LIBSPID_EOC_SNR_INT_INDEX;
+ int_id_value = LIBSPID_EOC_SNR_INT_ID;
+
+ /* Patch on carrier group. */
+ if (group > LIBSPID_EOC_SNR_MAX_GROUP)
+ carrier_group = LIBSPID_EOC_SNR_MIN_GROUP;
+ else
+ carrier_group = group;
+
+ const struct fields_t get_snr_req[] = {
+ {mac_address_device_bin, LIBSPID_MAC_BIN_LEN},
+ {&int_value, 1},
+ {&int_id_value, 1},
+ {&carrier_group, 1},
+ };
+
+ for (i = 0; i < ARRAY_LENGTH (get_snr_req); i++)
+ if (MME_SUCCESS != mme_put (
+ &request_ctx, get_snr_req[i].ptr,
+ get_snr_req[i].size, &result_len))
+ return LIBSPID_ERROR_MME;
+
+ /** send VS_GET_SNR MME request **/
+ libmme_ret = mme_send (&request_ctx, MME_SEND_REQ_CNF, NULL,
+ mac_address_bin, &confirm_ctx);
+ if (MME_SUCCESS != libmme_ret)
+ return LIBSPID_ERROR_MME;
+
+ /** extract SPIDCOM OUI and check if it is correct **/
+ if (confirm_ctx.oui != MME_OUI_SPIDCOM)
+ return LIBSPID_ERROR_GEN;
+
+ /** collect confirmation result **/
+ libmme_ret = mme_pull (&confirm_ctx, &result, 1, &result_len);
+ if (MME_SUCCESS != libmme_ret)
+ return LIBSPID_ERROR_MME;
+
+ if (result == 2)
+ {
+ /* From VS MME specification :
+ * "Bad tonemap interval list identifier (list has been updated)".
+ *
+ * So, we must resend a request with the good 'int_id'.
+ */
+ if (MME_SUCCESS != mme_pull (
+ &confirm_ctx, &int_id_value, 1, &result_len))
+ return LIBSPID_ERROR_MME;
+
+ if (MME_SUCCESS != mme_init (&request_ctx, VS_GET_SNR_REQ,
+ snd_buffer, ETH_DATA_LEN))
+ return LIBSPID_ERROR_MME;
+
+ if (MME_SUCCESS != mme_init (&confirm_ctx, VS_GET_SNR_CNF,
+ snd_buffer, ETH_DATA_LEN))
+ return LIBSPID_ERROR_MME;
+
+ for (i = 0; i < ARRAY_LENGTH (get_snr_req); i++)
+ if (MME_SUCCESS != mme_put (
+ &request_ctx, get_snr_req[i].ptr,
+ get_snr_req[i].size, &result_len))
+ return LIBSPID_ERROR_MME;
+
+ libmme_ret = mme_send (&request_ctx, MME_SEND_REQ_CNF, NULL,
+ mac_address_bin, &confirm_ctx);
+ if (MME_SUCCESS != libmme_ret)
+ return LIBSPID_ERROR_MME;
+
+ /** extract SPIDCOM OUI and check if it is correct **/
+ if (confirm_ctx.oui != MME_OUI_SPIDCOM)
+ return LIBSPID_ERROR_GEN;
+
+ /** collect confirmation result **/
+ libmme_ret = mme_pull (&confirm_ctx, &result, 1, &result_len);
+ if (MME_SUCCESS != libmme_ret)
+ return LIBSPID_ERROR_MME;
+ }
+
+ if (result != 0)
+ return LIBSPID_ERROR_GEN;
+
+ /** Collect snr parameters defined in
+ * libspid_eoc_snr_entry_t **/
+ const struct fields_t get_snr_cnf1[] = {
+ {&snr->int_id, 1},
+ {&snr->int_length, 1},
+ };
+
+ for (i = 0; i < ARRAY_LENGTH (get_snr_cnf1); i++)
+ if (MME_SUCCESS != mme_pull (
+ &confirm_ctx, get_snr_cnf1[i].ptr,
+ get_snr_cnf1[i].size, &result_len))
+ return LIBSPID_ERROR_MME;
+
+ /* Field with a size which vary. */
+ for (i = 0; i < snr->int_length; i++)
+ if (MME_SUCCESS != mme_pull (
+ &confirm_ctx, &snr->int_et[i], 2, &result_len))
+ return LIBSPID_ERROR_MME;
+
+ const struct fields_t get_snr_cnf2[] = {
+ {&snr->tm_ber, 2},
+ {&snr->carrier_group, 1},
+ {&snr->snr_list, LIBSPID_EOC_SNR_LIST_MAX_SIZE},
+ };
+
+ for (i = 0; i < ARRAY_LENGTH (get_snr_cnf2); i++)
+ if (MME_SUCCESS != mme_pull (
+ &confirm_ctx, get_snr_cnf2[i].ptr,
+ get_snr_cnf2[i].size, &result_len))
+ return LIBSPID_ERROR_MME;
+
+ return LIBSPID_SUCCESS;
+}
diff --git a/cleopatre/application/libspid/src/trap_eoc.c b/cleopatre/application/libspid/src/trap_eoc.c
new file mode 100644
index 0000000000..ead6741ba1
--- /dev/null
+++ b/cleopatre/application/libspid/src/trap_eoc.c
@@ -0,0 +1,454 @@
+/* SPC300 bundle {{{
+ *
+ * Copyright (C) 2012 MStar
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file application/libspid/src/trap_eoc.c
+ * \brief Functions specific to EoC Trap
+ * \ingroup libspid
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <getopt.h>
+#include <syslog.h>
+#include <assert.h>
+#include <arpa/inet.h>
+#include <unistd.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <linux/netlink.h>
+#include <ctype.h>
+#include <string.h>
+
+#include "libspid.h"
+#include "nvram.h"
+#include "libmme.h"
+
+
+/**
+ * Returns the trap entry for a trap server with the given Ip address.<BR>
+ * \param ip_address ip address of the trap serverip
+ * \param eoc_trap_entry trap List entry
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_NOT_FOUND: entry not found
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+extern libspid_error_t
+libspid_eoc_trap_get (char *ip_address,
+ libspid_eoc_trap_entry_t * eoc_trap_entry)
+{
+ const char delimiters[2] = LIBSPID_TRAP_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;
+
+ /* check input parameters */
+ if ((ip_address == NULL)
+ || (eoc_trap_entry == NULL) || strlen (ip_address) == 0)
+ {
+ return LIBSPID_ERROR_PARAM;
+ }
+
+ strcpy (key, ip_address);
+ strcpy (eoc_trap_entry->ip_address, ip_address);
+ error = libspid_config_read_line (LIBSPID_TRAP_CONF_PATH,
+ delimiters, key, &elt_number,
+ elt, buffer,
+ LIBSPID_CONFIG_LINE_MAX_LEN);
+
+ if (LIBSPID_SUCCESS != error)
+ {
+ return error;
+ }
+
+ if (elt_number < 2)
+ {
+ strcpy (eoc_trap_entry->status, "");
+ strcpy (eoc_trap_entry->community, "");
+ }
+ else
+ {
+ strcpy (eoc_trap_entry->status, elt[0]);
+ strcpy (eoc_trap_entry->community, elt[1]);
+ }
+
+ return LIBSPID_SUCCESS;
+}
+
+
+/**
+ * Returns the whole Trap Table from configuration file in a pointer to an
+ * array of Trap Table entries.<BR>
+ * \param eoc_trap_entry pointer to an array of trap config entries
+ * \param server_ip_count pointer to an integer for count of entries,this
+ * param is in/out,you must give the eoc_trap_entry
+ * max num as in,and will be returnd the num found in the config file
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_NOT_FOUND: entry not found
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+extern libspid_error_t
+libspid_eoc_trap_get_list (libspid_eoc_trap_entry_t * eoc_trap_entry,
+ unsigned int *server_ip_count)
+{
+ const char delimiters[2] = LIBSPID_TRAP_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;
+ libspid_eoc_trap_entry_t *entry_ptr;
+ unsigned int server_count = 0;
+ void *user_data = NULL;
+ unsigned int i = 0;
+
+ /* check input parameters */
+ if ((eoc_trap_entry == NULL) || (server_ip_count == NULL))
+ {
+ return LIBSPID_ERROR_PARAM;
+ }
+
+ if (*server_ip_count == 0 ||
+ *server_ip_count > LIBSPID_EOC_TRAP_SERVER_MAX)
+ {
+ return LIBSPID_ERROR_PARAM;
+ }
+
+ memset (key, 0x0, sizeof (key));
+ memset (eoc_trap_entry, 0x0,
+ sizeof (libspid_eoc_trap_entry_t) * (*server_ip_count));
+ entry_ptr = eoc_trap_entry;
+ /* get the first key */
+ error = libspid_config_read_line_repetitive (LIBSPID_TRAP_CONF_PATH,
+ delimiters, key,
+ &elt_number, elt,
+ buffer,
+ LIBSPID_CONFIG_LINE_MAX_LEN,
+ &user_data);
+
+ if (LIBSPID_SUCCESS != error)
+ {
+ return error;
+ }
+
+ for (i = 0; i < *server_ip_count && strcmp (key, ""); i++)
+ {
+ /* Get a line from the conf file. */
+ elt_number = LIBSPID_CONFIG_ELT_MAX_NB;
+ error = libspid_config_read_line_repetitive (LIBSPID_TRAP_CONF_PATH,
+ delimiters, key,
+ &elt_number,
+ elt, buffer,
+ LIBSPID_CONFIG_LINE_MAX_LEN,
+ &user_data);
+
+ if (LIBSPID_SUCCESS != error)
+ {
+ return error;
+ }
+
+ strcpy (entry_ptr->ip_address, buffer);
+
+ if (elt_number < LIBSPID_EOC_TRAP_PARAM_NUM)
+ {
+ entry_ptr->ip_address[0] = 0;
+ entry_ptr->status[0] = 0;
+ }
+ else
+ {
+ strncpy (entry_ptr->status, elt[0], 2);
+ entry_ptr->status[1] = 0;
+ strncpy (entry_ptr->community, elt[1],
+ sizeof (entry_ptr->community));
+ entry_ptr->community[sizeof (entry_ptr->community) - 1] = 0;
+ }
+
+ entry_ptr++;
+ server_count++;
+ }
+
+ /* Close the file if it contains more then max entries. */
+ *server_ip_count = server_count;
+ libspid_config_read_line_repetitive (0, 0, 0, 0, 0, 0, 0, &user_data);
+ return LIBSPID_SUCCESS;
+}
+
+/**
+ * Set the Trap .<BR>
+ * Also add a trap server ip to the trap config file.<BR>
+ * \param eoc_trap_entry address of the trap config struct
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+extern libspid_error_t
+libspid_eoc_trap_set (libspid_eoc_trap_entry_t * eoc_trap_entry)
+{
+ char *elt_save[LIBSPID_ELT_MAX_NB];
+ const char delimiter = LIBSPID_TRAP_INFO_DELIMITER[0];
+ struct in_addr ip_str;
+
+ if (NULL == eoc_trap_entry)
+ {
+ return LIBSPID_ERROR_PARAM;
+ }
+
+ if (0 == inet_aton (eoc_trap_entry->ip_address, &ip_str))
+ {
+ return LIBSPID_ERROR_PARAM;
+ }
+
+ if (strlen (eoc_trap_entry->status) > 1 ||
+ strlen (eoc_trap_entry->status) <= 0 ||
+ strlen (eoc_trap_entry->community) <=0 )
+ {
+ return LIBSPID_ERROR_PARAM;
+ }
+
+ if (0 != strcmp (eoc_trap_entry->status, LIBSPID_EOC_TRAP_STATUS_IDLE) &&
+ 0 != strcmp (eoc_trap_entry->status, LIBSPID_EOC_TRAP_STATUS_BUSY))
+ {
+ return LIBSPID_ERROR_PARAM;
+ }
+
+ elt_save[0] = eoc_trap_entry->status;
+ elt_save[1] = eoc_trap_entry->community;
+ return libspid_config_write_line (LIBSPID_TRAP_CONF_PATH, delimiter,
+ eoc_trap_entry->ip_address, 2,
+ elt_save);
+}
+
+/**
+ * Remove trap server entry by trapIp.<BR>
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_PARAM: param error
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+extern libspid_error_t
+libspid_eoc_trap_remove (char *ip_addr)
+{
+ const char delimiters[2] = LIBSPID_TRAP_INFO_DELIMITER "\0";
+
+ if (NULL == ip_addr)
+ {
+ return LIBSPID_ERROR_PARAM;
+ }
+
+ return libspid_config_remove_line (LIBSPID_TRAP_CONF_PATH,
+ delimiters, ip_addr);
+}
+
+/**
+ * Remove all trap server entries.<BR>
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_PARAM: param error$
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details$
+ */
+extern libspid_error_t
+libspid_eoc_trap_flush (void)
+{
+ const char delimiters[2] = LIBSPID_TRAP_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;
+
+ while (1)
+ {
+ /* Get the key of the current line */
+ memset (key, 0x0, sizeof (key));
+ libspid_config_read_line (LIBSPID_TRAP_CONF_PATH, delimiters, key,
+ &elt_number, elt, buffer,
+ LIBSPID_CONFIG_LINE_MAX_LEN);
+
+ if (strcmp (key, "") == 0)
+ {
+ break;
+ }
+
+ if (LIBSPID_SUCCESS != (error = libspid_eoc_trap_remove (key)))
+ {
+ return error;
+ }
+ }
+ return LIBSPID_SUCCESS;
+}
+
+
+/** internal helper function for check parameters of trap.conf */
+int
+trap_check_input_parameters (libspid_eoc_trap_entry_t *trap_entry,
+ libspid_trap_check_error_t *error_types)
+{
+ int error_number = 0;
+ int ret = 0;
+
+ struct in_addr ipaddr;
+
+ if (trap_entry == NULL || error_types == NULL)
+ {
+ return -1;
+ }
+
+ /** check ip format */
+ if (0 == inet_aton ((char *)trap_entry->ip_address, &ipaddr))
+ {
+ ret = -1;
+ }
+
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_TRAP_IP_FORMAT;
+ error_number++;
+ ret = 0;
+ }
+
+ /** check status field value */
+ ret = (strcmp (trap_entry->status, "0") == 0 ||
+ strcmp (trap_entry->status, "1") == 0) ? 0 : -1;
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_TRAP_STATUS_FORMAT;
+ error_number++;
+ ret = 0;
+ }
+
+ ret = (strlen (trap_entry->community) < 1 ||
+ strlen (trap_entry->community) > 16) ? -1 : 0;
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_TRAP_COMMUNITY_FORMAT;
+ error_number++;
+ ret = 0;
+ }
+
+ return error_number;
+
+}
+
+/** internal function for compare theip*/
+static int
+cmp_string_ip (const void *p1, const void *p2)
+{
+ return strcmp ((char *)((libspid_eoc_trap_entry_t *)p1)->ip_address,
+ (char *)((libspid_eoc_trap_entry_t *)p2)->ip_address);
+}
+
+
+/**
+ * Check trap.conf file
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_CHECK: check utility failed
+ */
+extern libspid_error_t
+libspid_eoc_trap_check (void)
+{
+ int trap_count_cnf = LIBSPID_EOC_TRAP_SERVER_MAX;
+ int ret = -1;
+ int i = 0;
+ libspid_eoc_trap_entry_t
+ trap_entries_cnf[LIBSPID_EOC_TRAP_SERVER_MAX];
+ libspid_eoc_trap_entry_t
+ trap_entries_cnf_sort[LIBSPID_EOC_TRAP_SERVER_MAX];
+ libspid_eoc_trap_entry_t trap_entry;
+ unsigned char ip_not_unique[LIBSPID_IP_STR_MAX_LEN];
+
+ LIBSPID_EOC_LOG_1 ("%s: Check trap.conf...", __FUNCTION__);
+ /** obtain the maclimitation list from configuration file */
+ ret = libspid_eoc_trap_get_list (trap_entries_cnf,
+ (unsigned int *)&trap_count_cnf);
+
+ if (ret != LIBSPID_SUCCESS)
+ {
+ return ret;
+ }
+
+ memcpy (trap_entries_cnf_sort, trap_entries_cnf,
+ trap_count_cnf * sizeof (libspid_eoc_trap_entry_t));
+ /* sort trap.conf */
+ qsort (trap_entries_cnf_sort, trap_count_cnf,
+ sizeof (libspid_eoc_trap_entry_t), cmp_string_ip);
+
+ /* check if IP is unique key */
+ for (i = 0; i < trap_count_cnf - 1; i++)
+ {
+ if (strcmp ((char *)trap_entries_cnf_sort[i].ip_address,
+ (char *)trap_entries_cnf_sort[i + 1].ip_address) == 0)
+ {
+ LIBSPID_EOC_LOG_0 ("ip_not_unique have.");
+ strcpy ((char *)ip_not_unique,
+ (char *)trap_entries_cnf_sort[i].ip_address);
+ break;
+ }
+ }
+
+ for (i = 0; i < trap_count_cnf; i++)
+ {
+ int number_of_error = 0;
+ libspid_trap_check_error_t
+ error_types[LIBSPID_EOC_TRAP_ERROR_TYPES_NUM];
+ trap_entry = trap_entries_cnf[i];
+
+ /** check format of the input parameters */
+ number_of_error = trap_check_input_parameters (&trap_entry,
+ error_types);
+
+ /* if IP is not unique key */
+ if (strcmp ((char *)ip_not_unique,
+ (char *)trap_entry.ip_address) == 0)
+ {
+ number_of_error += 1;
+ error_types[number_of_error - 1] =
+ LIBSPID_ERROR_TRAP_IP_DUPLICATE;
+ }
+
+ if (number_of_error > 0)
+ {
+ int j = 0;
+ ret = LIBSPID_ERROR_CHECK;
+ libspid_boolean_t unique_address = LIBSPID_TRUE;
+ LIBSPID_EOC_LOG_1 ("Error in line:%d\n", i + 2);
+
+ for (j = 0; j < number_of_error; j++)
+ {
+ switch (error_types[j])
+ {
+ case LIBSPID_ERROR_TRAP_IP_FORMAT:
+ LIBSPID_EOC_LOG_0 ("Malformed Ip address.");
+ break;
+ case LIBSPID_ERROR_TRAP_STATUS_FORMAT:
+ LIBSPID_EOC_LOG_0 ("Wrong status val.");
+ break;
+ case LIBSPID_ERROR_TRAP_COMMUNITY_FORMAT:
+ LIBSPID_EOC_LOG_0 ("community length longer.");
+ break;
+ case LIBSPID_ERROR_TRAP_IP_DUPLICATE:
+ LIBSPID_EOC_LOG_1 ("IP address %s is not "
+ "unique key.", ip_not_unique );
+ unique_address = LIBSPID_FALSE;
+ break;
+ default:
+ break;
+ }
+ }
+ if (unique_address == LIBSPID_FALSE)
+ break;
+ }
+ else if (number_of_error == -1)
+ return LIBSPID_ERROR_PARAM;
+ }
+ return ret;
+}
+
diff --git a/cleopatre/application/libspid/src/upgrade_eoc.c b/cleopatre/application/libspid/src/upgrade_eoc.c
new file mode 100644
index 0000000000..3ed9f6235a
--- /dev/null
+++ b/cleopatre/application/libspid/src/upgrade_eoc.c
@@ -0,0 +1,847 @@
+
+/* SPC300 bundle {{{
+ *
+ * Copyright (C) 2009 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file application/libspid/src/misc_eoc.c
+ * \brief Miscellaneous EoC-specific functions
+ * \ingroup libspid
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <getopt.h>
+#include <syslog.h>
+#include <assert.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/mman.h>
+#include <arpa/inet.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <linux/netlink.h>
+#include <unistd.h>
+
+#include "openssl_md5.h"
+#include "libspid.h"
+#include "nvram.h"
+#include "libmme.h"
+
+/**
+ * Get information on the given image file: software version and board type.
+ * The provided version and board strings are filled from given image file.
+ * Software version buffer length must be >= 16 and board type buffer >= 32.
+ * \param file image file to get information from
+ * \param version string where software version will be stored
+ * \param board string to get board type of image
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno
+ */
+static libspid_error_t
+libspid_image_file_get_info (char *file, char *version, char *board)
+{
+ spidcom_image_desc_t *pdesc = NULL;
+ unsigned char data[SPIDCOM_IMG_DESC_SIZE] = {0};
+ int fd = -1, len = 0;
+
+ /** Check arguments */
+ if ((NULL == file) || (NULL == version) || (NULL == board))
+ {
+ syslog (LOG_ERR, "%s: invalid arguments", __FUNCTION__);
+ return LIBSPID_ERROR_PARAM;
+ }
+
+ /** Read first 1K image block */
+ if ((fd = open (file, O_RDONLY, 0)) < 0)
+ {
+ syslog (LOG_ERR, "%s: open file %s failed (%s)", __FUNCTION__, file,
+ strerror (errno));
+ return LIBSPID_ERROR_SYSTEM;
+ }
+ len = read (fd, data, SPIDCOM_IMG_DESC_SIZE);
+ close (fd);
+ if (SPIDCOM_IMG_DESC_SIZE != len)
+ {
+ syslog (LOG_ERR, "%s: read file %s failed (%s)", __FUNCTION__, file,
+ strerror (errno));
+ return LIBSPID_ERROR_SYSTEM;
+ }
+
+ /** Map the block as image descriptor,
+ * and collect image software version and board type */
+ pdesc = (spidcom_image_desc_t *) data;
+ memcpy (version, pdesc->version, sizeof (pdesc->version));
+ memcpy (board, pdesc->board_type, sizeof (pdesc->board_type));
+
+ return LIBSPID_SUCCESS;
+}
+
+static int
+libspid_update_start (char *mac_address, char *file, char protocol)
+{
+ mme_ctx_t request_ctx, confirm_ctx;
+ unsigned char snd_buffer[ETH_DATA_LEN];
+ int ret;
+ int arch = LIBSPID_UPDATE_ARCH_SPC300;
+ int type = LIBSPID_UPDATE_TYPE_NORMAL;
+ unsigned int result_len = 0;
+ char version[32];
+ char board[32];
+ char *iface = LIBSPID_EOC_BR_IFACE;
+ unsigned char start_update;
+ char server_ip[LIBSPID_CONFIG_LINE_MAX_LEN] = {0};
+ char server_port[LIBSPID_CONFIG_LINE_MAX_LEN] = {0};
+ libspid_ip_t ip;
+ unsigned char md[MD5_DIGEST_LENGTH];
+ MD5_CTX ctx;
+ unsigned char data[1024];
+ int fd, len;
+
+ if (protocol < LIBSPID_TRANSFER_PROTOCOL ||
+ protocol > LIBSPID_TRANSFER_TFTP_PROTOCOL)
+ return LIBSPID_UPDATE_START_GEN;
+
+ /* get image version */
+ memset (version, 0, 32);
+ ret = libspid_image_file_get_info (file, version, board);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ syslog (LOG_ERR, "%s: cannot get info from image file %s",
+ __FUNCTION__, file);
+ return ret;
+ }
+ if (strlen (version) == 0)
+ return LIBSPID_UPDATE_START_GEN;
+
+ /* initialize update MME */
+ ret = mme_init (&request_ctx, VS_UPDATE_START | MME_REQ,
+ snd_buffer, ETH_DATA_LEN);
+ if (ret != MME_SUCCESS)
+ return LIBSPID_UPDATE_START_MME_ERROR;
+ ret = mme_init (&confirm_ctx, VS_UPDATE_START | MME_CNF,
+ snd_buffer, ETH_DATA_LEN);
+ if (ret != MME_SUCCESS)
+ return LIBSPID_UPDATE_START_MME_ERROR;
+
+ ret = mme_put (&request_ctx, &protocol, 1, &result_len);
+ if (ret != MME_SUCCESS)
+ return LIBSPID_UPDATE_START_MME_ERROR;
+ ret = mme_put (&request_ctx, version, 16, &result_len);
+ if (ret != MME_SUCCESS)
+ return LIBSPID_UPDATE_START_MME_ERROR;
+ ret = mme_put (&request_ctx, &arch, 4, &result_len);
+ if (ret != MME_SUCCESS)
+ return LIBSPID_UPDATE_START_MME_ERROR;
+ ret = mme_put (&request_ctx, &type, 4, &result_len);
+ if (ret != MME_SUCCESS)
+ return LIBSPID_UPDATE_START_MME_ERROR;
+ ret = mme_put (&request_ctx, board, 32, &result_len);
+ if (ret != MME_SUCCESS)
+ return LIBSPID_UPDATE_START_MME_ERROR;
+
+
+ strcpy (server_port, LIBSPID_UPDATE_TFTP_SERVER_PORT);
+#ifndef __UTESTS__
+ ret = libspid_network_get_ip (LIBSPID_EOC_BR_IFACE, &ip);
+ if (LIBSPID_SUCCESS != ret)
+ return LIBSPID_UPDATE_START_GEN;
+#else
+ strcpy ((char *) ip.address, "192.168.3.72");
+#endif
+ strcpy (server_ip, (char *) ip.address);
+
+ ret = mme_put (&request_ctx, file, LIBSPID_UPDATE_FILE_STR_MAX_LEN,
+ &result_len);
+ if (ret != MME_SUCCESS)
+ return LIBSPID_UPDATE_START_MME_ERROR;
+ ret = mme_put (&request_ctx, server_ip, LIBSPID_IP_STR_MAX_LEN,
+ &result_len);
+ if (ret != MME_SUCCESS)
+ return LIBSPID_UPDATE_START_MME_ERROR;
+ ret = mme_put (&request_ctx, server_port, LIBSPID_UPDATE_PORT_STR_MAX_LEN,
+ &result_len);
+ if (ret != MME_SUCCESS)
+ return LIBSPID_UPDATE_START_MME_ERROR;
+
+ /* calculate MD5 for image file */
+ if ((fd = open (file, O_RDONLY, 0)) < 0)
+ {
+ LIBSPID_EOC_LOG_2 ("%s: Cannot open image file %s for reading",
+ __FUNCTION__, file);
+ return LIBSPID_UPDATE_START_GEN;
+ }
+
+ if (!MD5_Init (&ctx))
+ {
+ close (fd);
+ LIBSPID_EOC_LOG_1 ("%s: MD5 sum initialization failed", __FUNCTION__);
+ return LIBSPID_UPDATE_START_GEN;
+ }
+
+ while ((len = read (fd, data, 1024)) > 0)
+ MD5_Update (&ctx, data, len);
+ close (fd);
+ if (len < 0)
+ {
+ LIBSPID_EOC_LOG_1 ("%s: MD5 sum update failed", __FUNCTION__);
+ return LIBSPID_UPDATE_START_GEN;
+ }
+
+ MD5_Final (md, &ctx);
+
+ ret = mme_put (&request_ctx, md, MD5_DIGEST_LENGTH, &result_len);
+ if (ret != MME_SUCCESS)
+ return LIBSPID_UPDATE_START_MME_ERROR;
+
+ /* send VS_UPDATE_START MME request */
+ ret = mme_send (&request_ctx, MME_SEND_REQ_CNF, iface,
+ (unsigned char *) mac_address, &confirm_ctx);
+ if (ret != MME_SUCCESS)
+ return LIBSPID_UPDATE_START_MME_ERROR;
+
+ /* extract SPIDCOM OUI and check if it is correct */
+ if (confirm_ctx.oui != MME_OUI_SPIDCOM)
+ return LIBSPID_UPDATE_START_MME_ERROR;
+
+ /* collect confirmation value */
+ ret = mme_pull (&confirm_ctx, &start_update, 1, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_UPDATE_START_MME_ERROR;
+
+ return start_update;
+}
+
+static int
+libspid_update_transfer (char *mac_address, char *file)
+{
+ mme_ctx_t request_ctx, confirm_ctx;
+ unsigned char snd_buffer[ETH_DATA_LEN];
+ int ret, not_done = 1;
+ unsigned int result_len = 0;
+ unsigned int result = 0;
+ char *iface = LIBSPID_EOC_BR_IFACE;
+ FILE *fp;
+ char ptr[LIBSPID_TRANSFER_MAX_SLICE];
+ int psize = -1;
+ int curr_blk_id = 1;
+ int next_blk_id = 1;
+ int cnf_attempt_cnt = 0;
+ int req_attempt_cnt = 0;
+ int slide = 1;
+
+ if ((fp = fopen (file, "rb")) == NULL) return -1;
+
+ while (not_done)
+ {
+ /* read part of the image if needed */
+ if (slide == 1 && curr_blk_id == next_blk_id)
+ psize = fread(ptr, 1, LIBSPID_TRANSFER_MAX_SLICE, fp);
+
+ /* finish the transfer */
+ if (psize == 0) break;
+ if (psize < (int) LIBSPID_TRANSFER_MAX_SLICE) not_done = 0;
+
+ /* initialize transfer MME */
+ mme_init (&request_ctx, VS_UPDATE_TRANSFER_REQ,
+ snd_buffer, ETH_DATA_LEN);
+ mme_init (&confirm_ctx, VS_UPDATE_TRANSFER_CNF,
+ snd_buffer, ETH_DATA_LEN);
+
+ /* attach SPiDCOM VS OID and fill-in the payload */
+ mme_put (&request_ctx, &curr_blk_id, sizeof (curr_blk_id),
+ &result_len);
+ mme_put (&request_ctx, &psize, sizeof (psize), &result_len);
+ mme_put (&request_ctx, ptr, psize, &result_len);
+
+ /* send VS_UPDATE_TRANSFER MME request */
+ ret = mme_send (&request_ctx, MME_SEND_REQ_CNF, iface,
+ (unsigned char *) mac_address, &confirm_ctx);
+ if (ret == MME_ERROR_TIMEOUT)
+ {
+ req_attempt_cnt++;
+ if (req_attempt_cnt == LIBSPID_TRANSFER_RETRY_COUNT)
+ {
+ fclose (fp);
+ LIBSPID_EOC_LOG_1 ("%s: Cannot get CNF message for sent "
+ "upgrade packet", __FUNCTION__);
+ return LIBSPID_UPDATE_TRANSFER_FAILED;
+ }
+ usleep (1000);
+ slide = 0;
+ continue;
+ }
+ else if (ret != MME_SUCCESS)
+ {
+ fclose (fp);
+ return -1;
+ }
+ else
+ {
+ slide = 1;
+ req_attempt_cnt = 0;
+ }
+
+ /* extract SPIDCOM OUI and check if it is correct */
+ if (confirm_ctx.oui != MME_OUI_SPIDCOM)
+ {
+ fclose (fp);
+ return -1;
+ }
+
+ /* collect confirmation value */
+ ret = mme_pull (&confirm_ctx, &result, 1, &result_len);
+ if (ret != MME_SUCCESS)
+ {
+ fclose (fp);
+ return -1;
+ }
+ ret = mme_pull (&confirm_ctx, &next_blk_id, 4, &result_len);
+ if (ret != MME_SUCCESS)
+ {
+ fclose (fp);
+ return -1;
+ }
+
+ if ((result == LIBSPID_UPDATE_TRANSFER_SUCCESS) &&
+ (next_blk_id == curr_blk_id + 1))
+ {
+ curr_blk_id++;
+ cnf_attempt_cnt = 0;
+ slide = 1;
+ }
+ else
+ {
+ cnf_attempt_cnt++;
+ if (cnf_attempt_cnt == LIBSPID_TRANSFER_RETRY_COUNT)
+ {
+ fclose (fp);
+ LIBSPID_EOC_LOG_1 ("%s: Upgrade stream sequence broken",
+ __FUNCTION__);
+ return LIBSPID_UPDATE_TRANSFER_FAILED;
+ }
+ usleep (1000);
+ slide = 0;
+ }
+ }
+
+ fclose (fp);
+
+ return LIBSPID_UPDATE_TRANSFER_SUCCESS;
+}
+
+static int
+libspid_update_end (char *mac_address, char *file)
+{
+ mme_ctx_t request_ctx, confirm_ctx;
+ unsigned char snd_buffer[ETH_DATA_LEN];
+ int ret, fd, len;
+ unsigned int result_len = 0;
+ char *iface = LIBSPID_EOC_BR_IFACE;
+ unsigned char result;
+ unsigned char md[MD5_DIGEST_LENGTH];
+ MD5_CTX ctx;
+ unsigned char data[1024];
+
+ /* initialize update MME */
+ mme_init (&request_ctx, VS_UPDATE_END | MME_REQ,
+ snd_buffer, ETH_DATA_LEN);
+ mme_init (&confirm_ctx, VS_UPDATE_END | MME_CNF,
+ snd_buffer, ETH_DATA_LEN);
+
+ /* calculate MD5 for image file */
+ if ((fd = open (file, O_RDONLY, 0)) < 0)
+ {
+ LIBSPID_EOC_LOG_2 ("%s: Cannot open image file %s for reading",
+ __FUNCTION__, file);
+ return -1;
+ }
+
+ if (!MD5_Init (&ctx))
+ {
+ close (fd);
+ LIBSPID_EOC_LOG_1 ("%s: MD5 sum initialization failed", __FUNCTION__);
+ return -1;
+ }
+
+ while ((len = read (fd, data, 1024)) > 0)
+ MD5_Update (&ctx, data, len);
+ close (fd);
+ if (len < 0)
+ {
+ LIBSPID_EOC_LOG_1 ("%s: MD5 sum update failed", __FUNCTION__);
+ return -1;
+ }
+
+ MD5_Final (md, &ctx);
+
+ /* attach SPiDCOM VS ID and fill in the request body */
+ mme_put (&request_ctx, md, MD5_DIGEST_LENGTH, &result_len);
+
+ /* send VS_UPDATE_END MME request */
+ ret = mme_send (&request_ctx, MME_SEND_REQ_CNF, iface,
+ (unsigned char *) mac_address, &confirm_ctx);
+ if (ret != MME_SUCCESS)
+ return -1;
+
+ /* extract SPIDCOM OUI and check if it is correct */
+ if (confirm_ctx.oui != MME_OUI_SPIDCOM)
+ return -1;
+
+ /* collect confirmation result */
+ ret = mme_pull (&confirm_ctx, &result, 1, &result_len);
+ if (MME_SUCCESS != ret)
+ return -1;
+
+ return result;
+}
+
+static int
+libspid_update_end_ind (char *mac_address)
+{
+ mme_ctx_t indication_ctx;
+ unsigned char snd_buffer[ETH_DATA_LEN];
+ int ret;
+ unsigned int result_len = 0;
+ char *iface = LIBSPID_EOC_BR_IFACE;
+ unsigned char result;
+
+ /* initialize update MME */
+ mme_init (&indication_ctx, VS_UPDATE_END | MME_IND,
+ snd_buffer, ETH_DATA_LEN);
+
+ /* Listen for VS_UPDATE_END indication */
+ ret = mme_listen (&indication_ctx, iface, (unsigned char *) mac_address,
+ NULL, LIBSPID_UPDATE_END_TIMEOUT_SEC);
+ if (ret != LIBSPID_SUCCESS)
+ return -1;
+
+ /* extract SPIDCOM OUI and check if it is correct */
+ if (indication_ctx.oui != MME_OUI_SPIDCOM)
+ return -1;
+
+ /* collect indication result */
+ ret = mme_pull (&indication_ctx, &result, 1, &result_len);
+ if (MME_SUCCESS != ret) return -1;
+
+ return result;
+}
+
+/**
+ * Upgrade image of a remote modem with the given MAC address.<BR>
+ * Image file is specified as a function parameter.<BR>
+ * \param mac_address MAC address of the modem
+ * \param file image file name
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+extern libspid_error_t
+libspid_eoc_upgrade_remote_image (char *mac_address, char *file)
+{
+ char mac_address_bin[ETH_ALEN];
+ int ret;
+
+ /* Check input parameters */
+ if ((mac_address == NULL) || (file == NULL))
+ return LIBSPID_ERROR_PARAM;
+
+#ifdef __FTESTS_PC__
+ return LIBSPID_SUCCESS;
+#endif /* __FTESTS_PC__ */
+
+ ret = libspid_mac_str_to_bin (mac_address,
+ (unsigned char *) mac_address_bin);
+ if (ret != LIBSPID_SUCCESS)
+ return ret;
+
+ /* Check if image file really exists */
+ if (access (file, F_OK))
+ {
+ LIBSPID_EOC_LOG_2 ("%s: Upgrade image file %s doesn't exist",
+ __FUNCTION__, file);
+ return LIBSPID_ERROR_PARAM;
+ }
+
+ /* Trigger image transfer */
+ ret = libspid_update_start (mac_address_bin, file,
+ LIBSPID_TRANSFER_PROTOCOL);
+
+ /* Check if transfer start was successful */
+ switch (ret)
+ {
+ case LIBSPID_UPDATE_START_SUCCESS:
+ break;
+
+ case LIBSPID_UPDATE_START_VERSION_OK:
+ LIBSPID_EOC_LOG_0 ("Software version already installed");
+ return LIBSPID_ERROR_SYSTEM;
+
+ case LIBSPID_UPDATE_START_BAD_ARCH:
+ LIBSPID_EOC_LOG_0 ("Invalid architecture specified");
+ return LIBSPID_ERROR_SYSTEM;
+
+ case LIBSPID_UPDATE_START_BAD_TYPE:
+ LIBSPID_EOC_LOG_0 ("Invalid update type specified");
+ return LIBSPID_ERROR_SYSTEM;
+
+ case LIBSPID_UPDATE_START_MODEM_BUSY:
+ LIBSPID_EOC_LOG_0 ("Another update already in progress");
+ return LIBSPID_ERROR_SYSTEM;
+
+ case LIBSPID_UPDATE_START_BAD_PROTOCOL:
+ LIBSPID_EOC_LOG_0 ("Incompatible protocol version started");
+ return LIBSPID_ERROR_SYSTEM;
+
+ case LIBSPID_UPDATE_START_BAD_BOARD_TYPE:
+ LIBSPID_EOC_LOG_0 ("Mismatch in board type string");
+ return LIBSPID_ERROR_SYSTEM;
+
+ case LIBSPID_UPDATE_START_MME_ERROR:
+ LIBSPID_EOC_LOG_0 ("libspid_update_start: mme function failure");
+ return LIBSPID_ERROR_SYSTEM;
+
+ default:
+ LIBSPID_EOC_LOG_0 ("libspid_update_start: "
+ "general function failure");
+ return LIBSPID_ERROR_SYSTEM;
+ }
+
+ /* Perform image transfer */
+ ret = libspid_update_transfer (mac_address_bin, file);
+
+ /* Check if image was transferred to slave */
+ switch (ret)
+ {
+ case LIBSPID_UPDATE_TRANSFER_SUCCESS:
+ break;
+
+ case LIBSPID_UPDATE_TRANSFER_FAILED:
+ LIBSPID_EOC_LOG_0 ("Image transfer failed");
+ return LIBSPID_ERROR_SYSTEM;
+
+ default:
+ LIBSPID_EOC_LOG_0 ("libspid_update_transfer: "
+ "general function failure");
+ return LIBSPID_ERROR_SYSTEM;
+ }
+
+ /* Finish image transfer */
+ ret = libspid_update_end (mac_address_bin, file);
+
+ /* Check if transfer finished successfully */
+ switch (ret)
+ {
+ case LIBSPID_UPDATE_END_SUCCESS:
+ break;
+
+ case LIBSPID_UPDATE_END_MD5_ERROR:
+ LIBSPID_EOC_LOG_0 ("Image corrupted during transfer");
+ return LIBSPID_ERROR_SYSTEM;
+
+ case LIBSPID_UPDATE_END_FLASH_ERROR:
+ LIBSPID_EOC_LOG_0 ("Image not correctly written into flash");
+ return LIBSPID_ERROR_SYSTEM;
+
+ default:
+ LIBSPID_EOC_LOG_0 ("libspid_update_end: "
+ "general function failure");
+ return LIBSPID_ERROR_SYSTEM;
+ }
+
+ /* Wait for transfer end indication */
+ ret = libspid_update_end_ind (mac_address_bin);
+
+ /* Check if image is successfully stored and selected */
+ switch (ret)
+ {
+ case LIBSPID_UPDATE_END_FLASH_SUCCESS:
+ break;
+
+ case LIBSPID_UPDATE_END_FLASH_FAILURE:
+ LIBSPID_EOC_LOG_0 ("Image not correctly written into flash");
+ return LIBSPID_ERROR_SYSTEM;
+
+ case LIBSPID_UPDATE_END_FLASH_TIMEOUT:
+ LIBSPID_EOC_LOG_0 ("Image transfer timeout occured");
+ return LIBSPID_ERROR_SYSTEM;
+
+ default:
+ LIBSPID_EOC_LOG_0 ("libspid_update_end_ind: "
+ "general function failure");
+ return LIBSPID_ERROR_SYSTEM;
+ }
+
+ return LIBSPID_SUCCESS;
+}
+
+/**
+ * Upgrade image of the local modem. Image file is specified as a parameter.
+ * \param file image file name
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+extern libspid_error_t
+libspid_eoc_upgrade_local_image (char *file)
+{
+ spidcom_image_desc_t desc;
+ spidcom_nvram_t nvram;
+ char mtd_name[32], version[32], board[32];
+ char cmd[50];
+ int rc, fd = -1, type = -1;
+ libspid_error_t ret = -1;
+ struct stat st;
+ char enable[LIBSPID_CONFIG_LINE_MAX_LEN] = {0};
+
+ /* check if image file really exists */
+ if (access (file, F_OK))
+ {
+ LIBSPID_EOC_LOG_2 ("%s: Upgrade image file %s doesn't exist",
+ __FUNCTION__, file);
+ return LIBSPID_ERROR_PARAM;
+ }
+
+ /* get image version */
+ memset (version, 0, 32);
+ ret = libspid_image_file_get_info (file, version, board);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ syslog (LOG_ERR, "%s: cannot get info from image file %s",
+ __FUNCTION__, file);
+ return ret;
+ }
+ if (0 == strlen (version))
+ {
+ LIBSPID_EOC_LOG_1 ("%s: Cannot read image version string",
+ __FUNCTION__);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+
+ /* check current image version */
+ memset (&desc, 0, sizeof (desc));
+ memset (mtd_name, 0, 32);
+ ret = libspid_image_get_desc (LIBSPID_IMAGE_DESC_TYPE_CURRENT,
+ &desc, mtd_name);
+ if (ret == LIBSPID_SUCCESS)
+ {
+ if (!memcmp (version, desc.version, sizeof (desc.version)))
+ {
+ syslog (LOG_WARNING, "%s: software version '%s' already installed",
+ __FUNCTION__, version);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+
+ ret = libspid_config_read_item (
+ LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_UPGRADE_BOARD_TYPE_CHECK,
+ enable, LIBSPID_CONFIG_LINE_MAX_LEN);
+
+ if (ret == LIBSPID_SUCCESS && !strcmp (enable, "yes") &&
+ strlen (board) != 0 && strlen (desc.board_type) != 0)
+ {
+ if (memcmp(board, desc.board_type, sizeof (desc.board_type)))
+ {
+ LIBSPID_EOC_LOG_2 ("%s: Board type string %s is inappropriate"
+ ,__FUNCTION__, board);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+ }
+ }
+ else
+ {
+ LIBSPID_EOC_LOG_1 ("%s: Cannot read current image description",
+ __FUNCTION__);
+ return ret;
+ }
+
+ /* find out the number of available image slots */
+ ret = libspid_system_get_nvram (&nvram);
+ if (ret != LIBSPID_SUCCESS)
+ {
+ LIBSPID_EOC_LOG_1 ("%s: Cannot determine the number of available "
+ "flash images", __FUNCTION__);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+
+ /* get the image name if needed */
+ if (nvram.nb_images != 1)
+ {
+ memset (&desc, 0, sizeof (desc));
+ memset (mtd_name, 0, 32);
+ ret = libspid_image_get_desc (LIBSPID_IMAGE_DESC_TYPE_ALTERNATE,
+ &desc, mtd_name);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ syslog (LOG_ERR, "%s: cannot get alternate image descriptor",
+ __FUNCTION__);
+ return ret;
+ }
+ }
+
+ /* determine image file size */
+ if (stat (file, &st) != 0)
+ {
+ LIBSPID_EOC_LOG_1 ("%s: Cannot determine firmware file size",
+ __FUNCTION__);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+
+ /* make sure flash is properly cleaned */
+ sprintf (cmd, "flash_eraseall %s > /dev/null", mtd_name);
+ rc = system (cmd);
+ if (rc != 0)
+ {
+ LIBSPID_EOC_LOG_2 ("%s: Cannot erase flash device %s",
+ __FUNCTION__, mtd_name);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+
+ /* copy firmware into flash device */
+ sprintf (cmd, "cp %s %s", file, mtd_name);
+ ret = system (cmd);
+ if (ret != 0)
+ {
+ LIBSPID_EOC_LOG_1 ("%s: Cannot copy image file into flash",
+ __FUNCTION__);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+
+ /** Update image descriptor flags of just upgraded image */
+ memset (&desc, 0, sizeof (desc));
+ memset (mtd_name, 0, 32);
+ if (1 == nvram.nb_images)
+ {
+ type = LIBSPID_IMAGE_DESC_TYPE_0;
+ }
+ else
+ {
+ type = LIBSPID_IMAGE_DESC_TYPE_ALTERNATE;
+ }
+ ret = libspid_image_get_desc (type, &desc, mtd_name);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ syslog (LOG_ERR, "%s: libspid_image_get_desc failed", __FUNCTION__);
+ return ret;
+ }
+ if (-1 == (fd = open (mtd_name, O_RDWR)))
+ {
+ /* The open failed. Print an error message and exit. */
+ syslog (LOG_ERR, "%s: error opening file: %s\n",
+ __FUNCTION__, strerror (errno));
+ return LIBSPID_ERROR_SYSTEM;
+ }
+ /* update image descriptor values */
+ desc.is_not_update = 0;
+ /* go to the begining of fd */
+ lseek (fd, 0, SEEK_SET);
+ /* write back updated descriptor to flash */
+ if (sizeof (spidcom_image_desc_t) != write (fd, (void *) &desc,
+ sizeof (spidcom_image_desc_t)))
+ {
+ close (fd);
+ syslog (LOG_ERR, "%s: cannot write in %s (%s)", __FUNCTION__,
+ mtd_name, strerror (errno));
+ return LIBSPID_ERROR_SYSTEM;
+ }
+ close (fd);
+
+ if (nvram.nb_images != 1)
+ {
+ ret = libspid_image_select (LIBSPID_IMAGE_SELECT_SWITCH);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ syslog (LOG_ERR, "%s: cannot switch image", __FUNCTION__);
+ return ret;
+ }
+ }
+
+ return LIBSPID_SUCCESS;
+}
+
+/**
+ * Upgrade image on all slaves. Image file is<BR>
+ * specified as a function parameter.<BR>
+ * \param mac_address MAC address of the modem
+ * \param file image file name
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+extern libspid_error_t
+libspid_eoc_tftp_upgrade_remote_image (char *mac_address, char *file)
+{
+ int ret;
+ char mac_address_bin[ETH_ALEN];
+
+ /* Check input parameters */
+ if ((mac_address == NULL) || (file == NULL))
+ return LIBSPID_ERROR_PARAM;
+
+#ifdef __FTESTS_PC__
+ return LIBSPID_SUCCESS;
+#endif /* __FTESTS_PC__ */
+
+ ret = libspid_mac_str_to_bin (mac_address,
+ (unsigned char *) mac_address_bin);
+ if (ret != LIBSPID_SUCCESS)
+ return ret;
+
+ /* Check if image file really exists */
+ if (access (file, F_OK))
+ {
+ LIBSPID_EOC_LOG_2 ("%s: Upgrade image file %s doesn't exist",
+ __FUNCTION__, file);
+ return LIBSPID_ERROR_PARAM;
+ }
+
+ /* Trigger image transfer */
+ ret = libspid_update_start (mac_address_bin, file,
+ LIBSPID_TRANSFER_TFTP_PROTOCOL);
+
+ /* Check if transfer start was successful */
+ switch (ret)
+ {
+ case LIBSPID_UPDATE_START_SUCCESS:
+ break;
+
+ case LIBSPID_UPDATE_START_VERSION_OK:
+ LIBSPID_EOC_LOG_0 ("Software version already installed");
+ return LIBSPID_ERROR_SYSTEM;
+
+ case LIBSPID_UPDATE_START_BAD_ARCH:
+ LIBSPID_EOC_LOG_0 ("Invalid architecture specified");
+ return LIBSPID_ERROR_SYSTEM;
+
+ case LIBSPID_UPDATE_START_BAD_TYPE:
+ LIBSPID_EOC_LOG_0 ("Invalid update type specified");
+ return LIBSPID_ERROR_SYSTEM;
+
+ case LIBSPID_UPDATE_START_MODEM_BUSY:
+ LIBSPID_EOC_LOG_0 ("Another update already in progress");
+ return LIBSPID_ERROR_SYSTEM;
+
+ case LIBSPID_UPDATE_START_BAD_PROTOCOL:
+ LIBSPID_EOC_LOG_0 ("Incompatible protocol version started");
+ return LIBSPID_ERROR_SYSTEM;
+
+ case LIBSPID_UPDATE_START_BAD_BOARD_TYPE:
+ LIBSPID_EOC_LOG_0 ("Mismatch in board type string");
+ return LIBSPID_ERROR_SYSTEM;
+
+ case LIBSPID_UPDATE_START_MME_ERROR:
+ LIBSPID_EOC_LOG_0 ("libspid_update_start: mme function failure");
+ return LIBSPID_ERROR_SYSTEM;
+
+ default:
+ LIBSPID_EOC_LOG_0 ("libspid_update_start: "
+ "general function failure");
+ return LIBSPID_ERROR_SYSTEM;
+ }
+
+ return LIBSPID_SUCCESS;
+}
diff --git a/cleopatre/application/libspid/src/util.c b/cleopatre/application/libspid/src/util.c
new file mode 100644
index 0000000000..0f02652149
--- /dev/null
+++ b/cleopatre/application/libspid/src/util.c
@@ -0,0 +1,237 @@
+/* SPC300 bundle {{{
+ *
+ * Copyright (C) 2012 MStar
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file application/libspid/src/util.c
+ * \brief Functions specific to EoC Tables
+ * \ingroup libspid
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <getopt.h>
+#include <syslog.h>
+#include <assert.h>
+#include <arpa/inet.h>
+#include <unistd.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <linux/netlink.h>
+#include <ctype.h>
+#include <string.h>
+
+#include "libspid.h"
+
+#define MAGIC_NUM 0x11433235
+
+/**
+ * Init Print table
+ * 1.libspid_ptable_init (&tb); tb.col and tb.row define the
+ * table's row and colume.And Callback for output
+ * 2.
+ * 2-0.libspid_ptable_add (tb, 0, 0, (char*)"mac")
+ * 2-1.libspid_ptable_add (tb, 0, 1, (char*)"ip")
+ * 2-2.libspid_ptable_add (tb, 1, 0, (char*)"00:11:22:33:44:55")
+ * 2-3.libspid_ptable_add (tb, 1, 1, (char*)"192.168.0.1")
+ * 3.libspid_ptable_show (tb) will display the table
+ * 4.libspid_ptable_unint (tb) release tb res
+ * \param table user need gave a not-null print_table_t point
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_NO_SPACE: malloc error
+ * \return LIBSPID_SUCCESS: for successful
+ */
+libspid_error_t
+libspid_ptable_init (print_table_t * table)
+{
+ if (0 == table)
+ return LIBSPID_ERROR_PARAM;
+
+ if (table->col < LIBSPID_PTABLE_COL_MIN ||
+ table->col > LIBSPID_PTABLE_COL_MAX ||
+ table->row < LIBSPID_PTABLE_ROW_MIN ||
+ table->row > LIBSPID_PTABLE_ROW_MAX)
+ {
+ return LIBSPID_ERROR_PARAM;
+ }
+
+ if (NULL == table->print_callback)
+ {
+ return LIBSPID_ERROR_PARAM;
+ }
+
+ table->pptable = malloc (table->col * table->row * sizeof (char *));
+
+ if (0 == table->pptable)
+ return LIBSPID_ERROR_NO_SPACE;
+
+ table->pcol_len = malloc (table->col * sizeof (int));
+
+ if (0 == table->pcol_len)
+ {
+ free (table->pptable);
+ return LIBSPID_ERROR_NO_SPACE;
+ }
+
+ memset (table->pptable, 0, table->col * table->row * sizeof (char *));
+ memset (table->pcol_len, 0, table->col * sizeof (int));
+ table->init = MAGIC_NUM;
+
+ return LIBSPID_SUCCESS;
+}
+
+/**
+ * Add the Contetn to Print table
+ * \param table the struct that init by libspid_ptable_init
+ * \param row & col the table's row and col
+ * \pstr the content of table's unit
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_NO_SPACE: malloc error
+ * \return LIBSPID_SUCCESS: for successful
+ */
+libspid_error_t
+libspid_ptable_add (print_table_t table, unsigned int row,
+ unsigned int col, char *pstr)
+{
+ char *item = 0;
+
+ if (table.init != MAGIC_NUM)
+ return LIBSPID_ERROR_PARAM;
+
+ if (col >= table.col)
+ return LIBSPID_ERROR_PARAM;
+
+ if (row >= table.row)
+ return LIBSPID_ERROR_PARAM;
+
+ if (0 == pstr)
+ return LIBSPID_ERROR_PARAM;
+
+ item = malloc (strlen (pstr) + 1);
+
+ if (item == 0)
+ return LIBSPID_ERROR_NO_SPACE;
+
+ if (table.pptable[row * table.col + col])
+ {
+ free (table.pptable[row * table.col + col]);
+ table.pptable[row * table.col + col] = 0;
+ }
+
+ if (strlen (pstr) > table.pcol_len[col])
+ {
+ table.pcol_len[col] = strlen (pstr);
+ }
+
+ strcpy (item, pstr);
+ table.pptable[row * table.col + col] = item;
+
+ return LIBSPID_SUCCESS;
+}
+
+/**
+ * Print table to the memory that data point.
+ * \param table the struct that init by libspid_ptable_init
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_SUCCESS: for successful
+ */
+libspid_error_t
+libspid_ptable_show (print_table_t table)
+{
+ unsigned int r = 0, c = 0;
+ char arg[255];
+ char tmp[1024];
+
+ if (table.init != MAGIC_NUM)
+ return LIBSPID_ERROR_PARAM;
+
+ if (NULL == table.pptable)
+ return LIBSPID_ERROR_PARAM;
+
+ if (NULL == table.pcol_len)
+ return LIBSPID_ERROR_PARAM;
+
+ for (r = 0; r < table.row; r++)
+ {
+ for (c = 0; c < table.col; c++)
+ {
+ if (0 != table.pptable[r * table.col + c])
+ {
+ break;
+ }
+ }
+
+ if (c == table.col)
+ continue;
+
+ for (c = 0; c < table.col; c++)
+ {
+ sprintf (arg, "%%-%ds ", table.pcol_len[c]);
+
+ if (table.pptable[r * table.col + c])
+ {
+ sprintf (tmp, arg, table.pptable[r * table.col + c]);
+ }
+ else
+ {
+ sprintf (tmp, arg, "-");
+ }
+
+ table.print_callback (tmp);
+ }
+
+ table.print_callback ("\n");
+ }
+
+ return LIBSPID_SUCCESS;
+}
+
+/**
+ * Release res for print table
+ * \param table the struct addr that init by libspid_ptable_initi
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_SUCCESS: for successful
+ */
+libspid_error_t
+libspid_ptable_uninit (print_table_t *table)
+{
+ unsigned int i = 0;
+
+ if (NULL == table)
+ return LIBSPID_ERROR_PARAM;
+
+ if (table->init != MAGIC_NUM)
+ return LIBSPID_ERROR_PARAM;
+
+ if (NULL != table->pptable)
+ {
+ for (i = 0; i < table->col * table->row; i++)
+ {
+ if (table->pptable[i])
+ {
+ free (table->pptable[i]);
+ table->pptable[i] = 0;
+ }
+ }
+
+ free (table->pptable);
+ table->pptable = 0;
+ }
+
+ if (NULL != table->pcol_len)
+ {
+ if (table->pcol_len)
+ {
+ free (table->pcol_len);
+ }
+ }
+
+ memset (table, 0 , sizeof (print_table_t));
+
+ return LIBSPID_SUCCESS;
+}
diff --git a/cleopatre/application/libspid/src/vlan_eoc.c b/cleopatre/application/libspid/src/vlan_eoc.c
new file mode 100644
index 0000000000..566429a276
--- /dev/null
+++ b/cleopatre/application/libspid/src/vlan_eoc.c
@@ -0,0 +1,471 @@
+/* SPC300 bundle {{{
+ *
+ * Copyright (C) 2012 MStar
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file application/libspid/src/vlan_eoc.c
+ * \brief Functions specific to EoC Vlan
+ * \ingroup libspid
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <getopt.h>
+#include <syslog.h>
+#include <assert.h>
+#include <arpa/inet.h>
+#include <unistd.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <linux/netlink.h>
+#include <ctype.h>
+#include <string.h>
+
+#include "libspid.h"
+#include "nvram.h"
+#include "libmme.h"
+
+/**
+ * Returns the whole Vlan Table from configuration file in a pointer to an
+ * array of Vlan Table entries.<BR>
+ * \param eoc_vlan_table_entry pointer to an array of vlan table config
+ * entries
+ * \param vlan_count pointer to an integer for count of entries,this param is
+ * in/out,you must give the eoc_vlan_table_entry
+ * max num as in,and will be returnd the num found in the config file
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_NOT_FOUND: entry not found
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+extern libspid_error_t
+libspid_eoc_vlan_table_get_list (libspid_eoc_vlan_table_entry_t *
+ eoc_vlan_table_entry,
+ unsigned int *vlan_count)
+{
+ const char delimiters[2] = LIBSPID_VLAN_TABLE_CONF_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_LINE_MAX_LEN];
+ libspid_error_t error = LIBSPID_SUCCESS;
+ libspid_eoc_vlan_table_entry_t *entry_ptr;
+ void *user_data = NULL;
+ unsigned int vlan_max_supported_vlans = 4095;
+ char buf[LIBSPID_CONFIG_KEY_MAX_LEN];
+ memset (buf, 0x0, LIBSPID_CONFIG_KEY_MAX_LEN);
+
+ if (LIBSPID_SUCCESS !=
+ (error = libspid_config_read_item (LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_VLAN_MAX_SUPPORTED_VLANS,
+ buf, LIBSPID_CONFIG_KEY_MAX_LEN)))
+ {
+ vlan_max_supported_vlans = LIBSPID_VLAN_TABLE_NUM_MAX;
+ }
+ else
+ {
+ char *pnumber;
+
+ vlan_max_supported_vlans = strtol (buf, &pnumber, 10);
+ if (*pnumber != '\0' || strcmp (buf,"") == 0)
+ vlan_max_supported_vlans = LIBSPID_VLAN_TABLE_NUM_MAX;
+ }
+ /* check input parameters */
+ if ((eoc_vlan_table_entry == NULL) || (vlan_count == NULL))
+ return LIBSPID_ERROR_PARAM;
+
+ memset (key, 0x0, sizeof (key));
+ memset (eoc_vlan_table_entry, 0x0, sizeof (eoc_vlan_table_entry));
+ *vlan_count = 0;
+
+ entry_ptr = eoc_vlan_table_entry;
+
+ /* get the first key */
+ if (LIBSPID_SUCCESS !=
+ (error =
+ libspid_config_read_line_repetitive (LIBSPID_VLAN_TABLE_CONF_PATH,
+ delimiters, key, &elt_number,
+ elt, buffer,
+ LIBSPID_LINE_MAX_LEN,
+ &user_data)))
+ return error;
+
+ for (; *vlan_count < vlan_max_supported_vlans
+ && strcmp (key, ""); (*vlan_count)++)
+ {
+ /* Get a line from the conf file */
+ elt_number = LIBSPID_CONFIG_ELT_MAX_NB;
+ if (LIBSPID_SUCCESS !=
+ (error =
+ libspid_config_read_line_repetitive
+ (LIBSPID_VLAN_TABLE_CONF_PATH, delimiters, key, &elt_number, elt,
+ buffer, LIBSPID_LINE_MAX_LEN, &user_data)))
+ return error;
+
+ entry_ptr->vlan_id = strtol (buffer, NULL, 10);
+ if (0 == entry_ptr->vlan_id)
+ continue;
+
+ if (elt_number < LIBSPID_VLAN_TABLE_PARAM_NUM)
+ {
+ strcpy (entry_ptr->vlan_name, "");
+ entry_ptr->vlan_multicast = 0;
+ }
+ else
+ {
+ char *pnumber;
+
+ strncpy (entry_ptr->vlan_name, elt[0],
+ LIBSPID_VLAN_NAME_STR_MAX_LEN - 1);
+ entry_ptr->vlan_name[LIBSPID_VLAN_NAME_STR_MAX_LEN - 1] = '\0';
+ entry_ptr->vlan_multicast = strtol (elt[1], &pnumber, 10);
+ if (*pnumber != '\0' || strcmp (elt[1],"") == 0)
+ entry_ptr->vlan_multicast = 3;
+ }
+ entry_ptr++;
+ }
+ /* Close the file if it contains more then max entries. */
+ libspid_config_read_line_repetitive (0, 0, 0, 0, 0, 0, 0, &user_data);
+ return LIBSPID_SUCCESS;
+}
+
+/**
+ * Set the Vlan Table .<BR>
+ * Also add a vlan config to the vlan table config file.<BR>
+ * \param index vlan table index
+ * \param entry address of the vlan table config struct
+ * \return LIBSPID_ERROR_NO_SPACE: no space for new entry
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+extern libspid_error_t
+libspid_eoc_vlan_table_set (char *index,
+ libspid_eoc_vlan_table_entry_t * entry)
+{
+ const char delimiter = LIBSPID_VLAN_TABLE_CONF_DELIMITER[0];
+ char *elt[LIBSPID_VLAN_TABLE_PARAM_NUM];
+ libspid_error_t ret;
+ int i;
+
+ /* check input parameters */
+ if ((index == NULL) || (entry == NULL))
+ return LIBSPID_ERROR_PARAM;
+
+ /* allocate buffers */
+ for (i = 0; i < LIBSPID_VLAN_TABLE_PARAM_NUM; i++)
+ {
+ elt[i] = (char *) malloc (256 * sizeof (char));
+ if (NULL != elt[i])
+ memset (elt[i], 0, 256);
+ else
+ {
+ LIBSPID_EOC_LOG_2
+ ("%s: error allocating element buffers (errno=%d)",
+ __FUNCTION__, errno);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+ }
+ strcpy (elt[0], entry->vlan_name);
+ sprintf (elt[1], "%d", entry->vlan_multicast);
+
+
+ ret = libspid_config_write_line (LIBSPID_VLAN_TABLE_CONF_PATH, delimiter,
+ index, LIBSPID_VLAN_TABLE_PARAM_NUM,
+ elt);
+
+ /* free element buffers */
+ for (i = 0; i < LIBSPID_VLAN_TABLE_PARAM_NUM; i++)
+ {
+ if (elt[i])
+ {
+ free (elt[i]);
+ elt[i] = NULL;
+ }
+ }
+
+ if (ret != LIBSPID_SUCCESS)
+ {
+ LIBSPID_EOC_LOG_2 ("%s: cannot write service entry (errno=%d)",
+ __FUNCTION__, errno);
+ return ret;
+ }
+
+ return LIBSPID_SUCCESS;
+}
+
+/**
+ * Get the vlan table .<BR>
+ * Return vlan configs count from vlan table config file .<BR>
+ *\param count numbers of vlan config in vlan table config file
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+*/
+extern libspid_error_t
+libspid_eoc_vlan_get_lines (int *count)
+{
+ int i;
+ char buffer[LIBSPID_LINE_MAX_LEN];
+ FILE *fp = NULL;
+
+ if (NULL == count)
+ {
+ return LIBSPID_ERROR_PARAM;
+ }
+ if (NULL == (fp = fopen (LIBSPID_VLAN_TABLE_CONF_PATH, "r")))
+ {
+ return LIBSPID_ERROR_SYSTEM;
+ }
+
+ i = 0;
+ while (fgets (buffer, LIBSPID_LINE_MAX_LEN, fp))
+ {
+ if ('#' == buffer[0])
+ continue;
+ i++;
+ }
+
+ *count = i;
+ fclose (fp);
+ return LIBSPID_SUCCESS;
+}
+
+/**
+ * Remove the vlan table entry with the given index.<BR>
+ * \param index vlan table index
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_NOT_FOUND: entry not found
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+extern libspid_error_t
+libspid_eoc_vlan_table_remove (char *index)
+{
+ libspid_error_t ret;
+
+ /* check input parameters */
+ if (index == NULL)
+ return LIBSPID_ERROR_PARAM;
+
+ ret = libspid_config_remove_line (LIBSPID_VLAN_TABLE_CONF_PATH,
+ LIBSPID_VLAN_TABLE_CONF_DELIMITER,
+ index);
+
+ if (ret != LIBSPID_SUCCESS)
+ {
+ LIBSPID_EOC_LOG_2 ("%s: cannot remove service entry (errno=%d)",
+ __FUNCTION__, errno);
+ return ret;
+ }
+
+ return LIBSPID_SUCCESS;
+}
+
+/**
+ * Returns the vlan table entry for the given vlan table index.<BR>
+ * \param index vlan table index
+ * \param entry vlan table entry
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_NOT_FOUND: entry not found
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+extern libspid_error_t
+libspid_eoc_vlan_table_get (char *index,
+ libspid_eoc_vlan_table_entry_t * entry)
+{
+ const char delimiters[2] = LIBSPID_VLAN_TABLE_CONF_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_LINE_MAX_LEN];
+ libspid_error_t error;
+
+ /* check input parameters */
+ if ((index == NULL) || (entry == NULL))
+ return LIBSPID_ERROR_PARAM;
+
+ strcpy (key, index);
+ entry->vlan_id = strtol (index, NULL, 10);
+
+ if (LIBSPID_SUCCESS !=
+ (error = libspid_config_read_line (LIBSPID_VLAN_TABLE_CONF_PATH,
+ delimiters, key, &elt_number,
+ elt, buffer,
+ LIBSPID_LINE_MAX_LEN)))
+ return error;
+
+ if (elt_number < LIBSPID_VLAN_TABLE_PARAM_NUM)
+ {
+ strcpy (entry->vlan_name, "");
+ entry->vlan_multicast = 0;
+ }
+ else
+ {
+ char *pnumber;
+
+ strncpy (entry->vlan_name, elt[0], LIBSPID_VLAN_NAME_STR_MAX_LEN - 1);
+ entry->vlan_name[LIBSPID_VLAN_NAME_STR_MAX_LEN - 1] = '\0';
+ entry->vlan_multicast = strtol (elt[1], &pnumber, 10);
+ if (*pnumber != '\0' || strcmp (elt[1],"") == 0)
+ entry->vlan_multicast = 3;
+ }
+ return LIBSPID_SUCCESS;
+}
+
+/** internal helper function for check parameters of vlan_table.conf */
+int
+vlan_check_input_parameters (libspid_eoc_vlan_table_entry_t *vlan_entry,
+ libspid_vlan_table_check_error_t *error_types)
+{
+ int error_number = 0;
+ int ret = 0;
+
+ if (vlan_entry == NULL || error_types == NULL)
+ {
+ return -1;
+ }
+
+
+ /** check vlan id value */
+
+ ret = (vlan_entry->vlan_id < 1 ||
+ vlan_entry->vlan_id > LIBSPID_SERVICE_MAX_MATCH_VID) ? -1 : 0;
+
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_VLAN_ID_FORMAT;
+ error_number++;
+ ret = 0;
+ }
+
+ ret = (vlan_entry->vlan_multicast != 0 &&
+ vlan_entry->vlan_multicast != 1) ? -1 : 0;
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_VLAN_MULTICAST_FORMAT;
+ error_number++;
+ ret = 0;
+ }
+
+
+ return error_number;
+
+}
+
+
+/**
+ * Check vlan_table.conf file
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_NOT_FOUND: entry not found
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ * \return LIBSPID_ERROR_CHECK: check utility failed
+ */
+extern libspid_error_t
+libspid_eoc_vlan_table_check (void)
+{
+ int vlan_count_cnf = 0;
+ int ret = -1;
+ int i = 0;
+ int j = 0;
+ libspid_eoc_vlan_table_entry_t *vlan_entries_cnf;
+ libspid_eoc_vlan_table_entry_t vlan_entry;
+ int vlanid_not_unique = 0;
+ LIBSPID_EOC_LOG_1 ("%s: Check vlan_table...", __FUNCTION__);
+
+ vlan_entries_cnf = (libspid_eoc_vlan_table_entry_t *) malloc
+ (LIBSPID_SERVICE_MAX_MATCH_VID *
+ sizeof (libspid_eoc_vlan_table_entry_t));
+
+ if (NULL == vlan_entries_cnf)
+ return LIBSPID_ERROR_NO_SPACE;
+
+
+ /** obtain the maclimitation list from configuration file */
+ ret = libspid_eoc_vlan_table_get_list (vlan_entries_cnf,
+ (unsigned int *)&vlan_count_cnf);
+
+ if (ret != LIBSPID_SUCCESS)
+ {
+ free (vlan_entries_cnf);
+ return ret;
+ }
+
+
+ /* check if vlan id is unique key */
+ for (i = 0; i < vlan_count_cnf - 1; i++)
+ {
+ vlan_entry = vlan_entries_cnf[i];
+ for (j = i + 1; j < vlan_count_cnf; j++)
+ {
+ if (vlan_entry.vlan_id == vlan_entries_cnf[j].vlan_id)
+ {
+ vlanid_not_unique = vlan_entries_cnf[i].vlan_id;
+ }
+ break;
+ }
+ if (vlanid_not_unique != 0)
+ break;
+ }
+
+ for (i = 0; i < vlan_count_cnf; i++)
+ {
+ int number_of_error = 0;
+ libspid_vlan_table_check_error_t
+ error_types[LIBSPID_VLAN_TABLE_ERROR_TYPES_NUM];
+ vlan_entry = vlan_entries_cnf[i];
+
+
+ /** check format of the input parameters */
+ number_of_error = vlan_check_input_parameters (&vlan_entry,
+ error_types);
+ /* if vlan id is not unique key */
+ /* find error line */
+ if (vlanid_not_unique == vlan_entry.vlan_id)
+ {
+ number_of_error += 1;
+ error_types[number_of_error - 1] = LIBSPID_ERROR_VLAN_ID_DUPLICATE;
+ }
+ if (number_of_error > 0)
+ {
+ int j = 0;
+ ret = LIBSPID_ERROR_CHECK;
+ LIBSPID_EOC_LOG_1 ("Error in line:%d\n", i + 2);
+
+ for (j = 0; j < number_of_error; j++)
+ {
+ switch (error_types[j])
+ {
+ case LIBSPID_ERROR_VLAN_ID_FORMAT:
+ LIBSPID_EOC_LOG_0 ("Malformed vlan id.");
+ break;
+ case LIBSPID_ERROR_VLAN_MULTICAST_FORMAT:
+ LIBSPID_EOC_LOG_0 ("VLAN_MULTICAST error val.");
+ break;
+ case LIBSPID_ERROR_VLAN_ID_DUPLICATE:
+ LIBSPID_EOC_LOG_0 ("vlan id is not unique.");
+ break;
+ default:
+ break;
+ }
+ }
+ if (vlanid_not_unique != 0)
+ break;
+ }
+ else if (number_of_error == -1)
+ {
+ free (vlan_entries_cnf);
+ return LIBSPID_ERROR_PARAM;
+ }
+ }
+
+ free (vlan_entries_cnf);
+ return ret;
+}
+
diff --git a/cleopatre/application/libspid/src/vlan_port_eoc.c b/cleopatre/application/libspid/src/vlan_port_eoc.c
new file mode 100644
index 0000000000..2e0b6cfbb3
--- /dev/null
+++ b/cleopatre/application/libspid/src/vlan_port_eoc.c
@@ -0,0 +1,664 @@
+
+/* SPC300 bundle {{{
+ *
+ * Copyright (C) 2012 MStar
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file application/libspid/src/vlan_port_eoc.c
+ * \brief Functions specific to vlan port
+ * \ingroup libspid
+ *
+ */
+
+#include <sys/types.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <getopt.h>
+#include <syslog.h>
+#include <assert.h>
+#include <arpa/inet.h>
+#include <unistd.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <linux/netlink.h>
+#include <ctype.h>
+
+#include "libspid.h"
+#include "libmme.h"
+
+
+/**
+ * Returns the vlan port table entry for the given slave MAC address and vlan
+ * port table index.<BR>
+ * \param mac_address slave MAC address
+ * \param index vlan port table index
+ * \param entry vlan port table entry
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_NOT_FOUND: entry not found
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+extern libspid_error_t
+libspid_eoc_vlan_port_get (char *mac_address, char *index,
+ libspid_eoc_vlan_port_table_entry_t * entry)
+{
+ int i, ret;
+ libspid_eoc_port_v2_entry_t port_v2_entry;
+
+ /* check input parameters */
+ if ((mac_address == NULL) || (index == NULL) || (entry == NULL))
+ return LIBSPID_ERROR_PARAM;
+
+ memset (entry, 0x0, sizeof (entry));
+
+ for (i = 0; i < LIBSPID_MAC_STR_LEN; i++)
+ {
+ mac_address[i] = tolower (mac_address[i]);
+ }
+
+ strcpy (entry->vlan_port_mac, mac_address);
+ strcpy (entry->vlan_port_index, index);
+
+ ret = libspid_eoc_port_v2_get (mac_address, index, &port_v2_entry);
+ if (LIBSPID_SUCCESS == ret)
+ {
+ strcpy (entry->vlan_port_pvid, port_v2_entry.vlan_port_pvid);
+ strcpy (entry->vlan_port_tpid, port_v2_entry.vlan_port_tpid);
+ strcpy (entry->vlan_port_prio, port_v2_entry.vlan_port_prio);
+ strcpy (entry->vlan_port_mode, port_v2_entry.vlan_port_mode);
+ }
+
+ return ret;
+}
+
+/**
+ * Returns the whole vlan port table list from configuration file in
+ * a pointer to an array of vlan port table entries.<BR>
+ * \param entry pointer to an array of vlan port table entries
+ * \param count pointer to an integer for number of vlan port table entries
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_NOT_FOUND: entry not found
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+extern libspid_error_t
+libspid_eoc_vlan_port_get_list (libspid_eoc_vlan_port_table_entry_t * entry,
+ int *count)
+{
+ const char delimiters[2] = LIBSPID_PORT_V2_CONF_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_LINE_MAX_LEN] = { 0 };
+ libspid_error_t error;
+ libspid_eoc_vlan_port_table_entry_t *entry_ptr;
+ char *index_str;
+ void *user_data = NULL;
+
+ /* check input parameters */
+ if ((entry == NULL) || (count == NULL))
+ return LIBSPID_ERROR_PARAM;
+
+ *count = 0;
+ memset (key, 0x0, sizeof (key));
+ memset (entry, 0x0, sizeof (entry));
+ entry_ptr = entry;
+
+ /* get the first key */
+ if (LIBSPID_SUCCESS !=
+ (error =
+ libspid_config_read_line_repetitive
+ (LIBSPID_EOC_PORT_V2_FILE, delimiters, key, &elt_number, elt,
+ buffer, LIBSPID_LINE_MAX_LEN, &user_data)))
+ return error;
+
+ for (; *count < LIBSPID_PORT_TOTAL_MAX && strcmp (key, ""); (*count)++)
+ {
+ /* Get a line from the conf file */
+ elt_number = LIBSPID_CONFIG_ELT_MAX_NB;
+
+ if (LIBSPID_SUCCESS !=
+ (error =
+ libspid_config_read_line_repetitive
+ (LIBSPID_EOC_PORT_V2_FILE, delimiters, key, &elt_number,
+ elt, buffer, LIBSPID_LINE_MAX_LEN, &user_data)))
+ return error;
+
+ /* parse MAC address and vlan port table index from buffer */
+ index_str = strchr (buffer, '.');
+
+ if (index_str != NULL)
+ *index_str++ = 0;
+ else
+ {
+ LIBSPID_EOC_LOG_2 ("%s: error parsing MAC "
+ "address and port number (errno=%d)",
+ __FUNCTION__, errno);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+
+ strcpy (entry_ptr->vlan_port_mac, buffer);
+ strcpy (entry_ptr->vlan_port_index, index_str);
+
+ if (elt_number < LIBSPID_PORT_V2_PARAM_NUM)
+ {
+ strcpy (entry_ptr->vlan_port_pvid, "");
+ strcpy (entry_ptr->vlan_port_tpid, "");
+ strcpy (entry_ptr->vlan_port_prio, "");
+ strcpy (entry_ptr->vlan_port_mode, "");
+ }
+ else
+ {
+ strncpy (entry_ptr->vlan_port_pvid, elt[3],
+ sizeof (entry_ptr->vlan_port_pvid));
+ entry_ptr->vlan_port_pvid[sizeof (entry_ptr->vlan_port_pvid) -
+ 1] = 0;
+ strncpy (entry_ptr->vlan_port_tpid, elt[4],
+ sizeof (entry_ptr->vlan_port_tpid));
+ entry_ptr->vlan_port_tpid[sizeof (entry_ptr->vlan_port_tpid) -
+ 1] = 0;
+ strncpy (entry_ptr->vlan_port_prio, elt[5],
+ sizeof (entry_ptr->vlan_port_prio));
+ entry_ptr->vlan_port_prio[sizeof (entry_ptr->vlan_port_prio) -
+ 1] = 0;
+ strncpy (entry_ptr->vlan_port_mode, elt[6],
+ sizeof (entry_ptr->vlan_port_mode));
+ entry_ptr->vlan_port_mode[sizeof (entry_ptr->vlan_port_mode) -
+ 1] = 0;
+ }
+
+ entry_ptr++;
+ }
+
+ libspid_config_read_line_repetitive (0, 0, 0, 0, 0, 0, 0, &user_data);
+ return LIBSPID_SUCCESS;
+}
+
+/**
+ * Set vlan port table entry with the given slave MAC address and index.<BR>
+ * \param mac_address slave MAC address
+ * \param index vlan port table index
+ * \param entry port entry
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_NOT_FOUND: entry not found
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+extern libspid_error_t
+libspid_eoc_vlan_port_set (char *mac_address, char *index,
+ libspid_eoc_vlan_port_table_entry_t * entry)
+{
+ libspid_error_t ret;
+ libspid_eoc_port_v2_entry_t port_v2_entry;
+
+ /* check input parameters */
+ if ((mac_address == NULL) || (index == NULL) || (entry == NULL))
+ return LIBSPID_ERROR_PARAM;
+
+ /* check that MAC address and port index already exist */
+ ret = libspid_eoc_port_v2_get (mac_address, index, &port_v2_entry);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ return ret;
+ }
+
+ strcpy (port_v2_entry.vlan_port_pvid, entry->vlan_port_pvid);
+ strcpy (port_v2_entry.vlan_port_tpid, entry->vlan_port_tpid);
+ strcpy (port_v2_entry.vlan_port_prio, entry->vlan_port_prio);
+ strcpy (port_v2_entry.vlan_port_mode, entry->vlan_port_mode);
+
+ ret = libspid_eoc_port_v2_set (mac_address, index, &port_v2_entry);
+
+ return ret;
+}
+
+/** internal helper function for checking parameters of port.conf */
+int
+vlan_port_check_input_parameters (libspid_eoc_vlan_port_table_entry_t *
+ port_entry,
+ libspid_eoc_vlan_port_table_entry_t *
+ port_entries_cnf, int port_count_cnf,
+ libspid_vlan_port_check_error_t *
+ error_types)
+{
+ int error_number = 0;
+ int i = 0, value = 0;
+ int ret = 0;
+ char *pnumber;
+ libspid_eoc_vlan_table_entry_t vlan_table_entry;
+
+ if (port_entry == NULL || port_entries_cnf == NULL || error_types == NULL)
+ {
+ return -1;
+ }
+
+ /** check MAC address*/
+ if (strlen (port_entry->vlan_port_mac) != LIBSPID_MAC_STR_LEN - 1)
+ ret = -1;
+
+ for (i = 0; i < LIBSPID_MAC_STR_LEN - 1; i++)
+ {
+ port_entry->vlan_port_mac[i] = tolower (port_entry->vlan_port_mac[i]);
+
+ if (!((port_entry->vlan_port_mac[i] >= '0'
+ && port_entry->vlan_port_mac[i] <= '9')
+ || (port_entry->vlan_port_mac[i] >= 'a'
+ && port_entry->vlan_port_mac[i] <= 'f')
+ || port_entry->vlan_port_mac[i] == ':'))
+ ret = -1;
+
+ if ((i % 3) == 2 && port_entry->vlan_port_mac[i] != ':')
+ ret = -1;
+ }
+
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_VLAN_PORT_MAC_FORMAT;
+ error_number++;
+ ret = 0;
+ }
+
+ /** check port INDEX value */
+ value = strtol (port_entry->vlan_port_index, &pnumber, 10);
+
+ if (*pnumber != '\0' || strcmp (port_entry->vlan_port_index, "") == 0)
+ ret = -1;
+ else
+ ret = (value < 0 || value > LIBSPID_PORT_PER_SLAVE_MAX - 1) ? -1 : 0;
+
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_VLAN_PORT_INDEX_VALUE;
+ error_number++;
+ ret = 0;
+ }
+
+ /** check vlan pvid value */
+ value = strtol (port_entry->vlan_port_pvid, &pnumber, 10);
+
+ if (*pnumber != '\0' || strcmp (port_entry->vlan_port_pvid, "") == 0)
+ ret = -1;
+ else
+ ret = (value < 0 || value > LIBSPID_SERVICE_MAX_MATCH_VID) ? -1 : 0;
+
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_VLAN_PORT_PVID_VALUE;
+ error_number++;
+ ret = 0;
+ }
+ /** check if vlan pvid defined in vlan.conf*/
+ if (0 != strcmp ("0", port_entry->vlan_port_pvid))
+ {
+ if (LIBSPID_SUCCESS != libspid_eoc_vlan_table_get (
+ port_entry->vlan_port_pvid,
+ &vlan_table_entry))
+ ret = -1;
+ }
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_VLAN_PORT_VLAN_DEFINED;
+ error_number++;
+ ret = 0;
+ }
+
+ /** check vlan tpid value */
+ value = strtol (port_entry->vlan_port_tpid, &pnumber, 10);
+ if (*pnumber != '\0' || strcmp (port_entry->vlan_port_tpid, "") == 0)
+ ret = -1;
+ else
+ ret = (value < 0 || value > 65536) ? -1 : 0;
+
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_VLAN_PORT_TPID_VALUE;
+ error_number++;
+ ret = 0;
+ }
+
+ /** check vlan priovalue */
+ value = strtol (port_entry->vlan_port_prio, &pnumber, 10);
+ if (*pnumber != '\0' || strcmp (port_entry->vlan_port_prio, "") == 0)
+ ret = -1;
+ else
+ ret = (value < 0 || value > LIBSPID_SERVICE_MAX_MATCH_PRIO) ? -1 : 0;
+
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_VLAN_PORT_PRIO_VALUE;
+ error_number++;
+ ret = 0;
+ }
+
+
+ /** check vlan mode value */
+ value = strtol (port_entry->vlan_port_mode, &pnumber, 10);
+
+ if (*pnumber != '\0' || strcmp (port_entry->vlan_port_mode, "") == 0)
+ ret = -1;
+ else
+ ret = (value < 0 || value > 3) ? -1 : 0;
+
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_VLAN_PORT_MODE_VALUE;
+ error_number++;
+ ret = 0;
+ }
+
+ return error_number;
+}
+
+
+/**
+*compare two mac address strings
+*/
+static int
+cmp_string_mac (const void *p1, const void *p2)
+{
+ return strcmp (((libspid_eoc_vlan_port_table_entry_t *) p1)->
+ vlan_port_mac,
+ ((libspid_eoc_vlan_port_table_entry_t *) p2)->
+ vlan_port_mac);
+}
+
+
+/**
+ * Check vlan_porttable.conf file
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_NOT_FOUND: entry not found
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ * \return LIBSPID_ERROR_CHECK: check utility failed
+ */
+extern libspid_error_t
+libspid_eoc_vlan_port_check (void)
+{
+ int port_count_cnf = 0, wl_count_cnf = 0;;
+ int ret = -1;
+ int i = 0;
+ libspid_eoc_vlan_port_table_entry_t *port_entries_cnf;
+ libspid_eoc_vlan_port_table_entry_t *port_entries_cnf_sort;
+ libspid_eoc_wl_entry_t
+ wl_entries_cnf_sort[LIBSPID_WHITE_LIST_MAX_STA_NUM];
+ libspid_eoc_vlan_port_table_entry_t port_entry;
+ char key_not_unique[LIBSPID_MAC_STR_LEN + 2];
+ libspid_boolean_t unique_address = LIBSPID_TRUE;
+ port_entries_cnf = (libspid_eoc_vlan_port_table_entry_t *) malloc
+ (LIBSPID_PORT_TOTAL_MAX *
+ sizeof (libspid_eoc_vlan_port_table_entry_t));
+
+ if (NULL == port_entries_cnf)
+ return LIBSPID_ERROR_NO_SPACE;
+
+ port_entries_cnf_sort = (libspid_eoc_vlan_port_table_entry_t *) malloc
+ (LIBSPID_PORT_TOTAL_MAX *
+ sizeof (libspid_eoc_vlan_port_table_entry_t));
+
+ if (NULL == port_entries_cnf_sort)
+ {
+ free (port_entries_cnf);
+ return LIBSPID_ERROR_NO_SPACE;
+ }
+
+ LIBSPID_EOC_LOG_1 ("%s: Check vlan_porttable.conf...", __FUNCTION__);
+ /** obtain the vlan port table list from configuration file */
+ ret = libspid_eoc_vlan_port_get_list (port_entries_cnf, &port_count_cnf);
+
+ if (ret != LIBSPID_SUCCESS)
+ {
+ free (port_entries_cnf);
+ free (port_entries_cnf_sort);
+ return ret;
+ }
+
+ ret = libspid_eoc_wl_get_list (wl_entries_cnf_sort, &wl_count_cnf);
+
+ if (ret != LIBSPID_SUCCESS)
+ {
+ free (port_entries_cnf);
+ free (port_entries_cnf_sort);
+ return ret;
+ }
+
+ memcpy (port_entries_cnf_sort, port_entries_cnf,
+ port_count_cnf * sizeof (libspid_eoc_vlan_port_table_entry_t));
+ /* sort vlan_porttable.conf */
+ qsort (port_entries_cnf_sort, port_count_cnf,
+ sizeof (libspid_eoc_vlan_port_table_entry_t), cmp_string_mac);
+ /* sort white_list.conf */
+ qsort (wl_entries_cnf_sort, wl_count_cnf,
+ sizeof (libspid_eoc_wl_entry_t), cmp_string_mac);
+
+ /* check if MAC.index is unique key */
+ for (i = 0; i < port_count_cnf - 4; i++)
+ {
+ if (strcmp (port_entries_cnf_sort[i].vlan_port_mac,
+ port_entries_cnf_sort[i + 1].vlan_port_mac) == 0 &&
+ strcmp (port_entries_cnf_sort[i].vlan_port_index,
+ port_entries_cnf_sort[i + 1].vlan_port_index) == 0)
+ {
+ strcpy (key_not_unique, port_entries_cnf_sort[i].vlan_port_mac);
+ strcat (key_not_unique, ".");
+ strcat (key_not_unique, port_entries_cnf_sort[i].vlan_port_index);
+ break;
+ }
+
+ if (strcmp (port_entries_cnf_sort[i].vlan_port_mac,
+ port_entries_cnf_sort[i + 2].vlan_port_mac) == 0 &&
+ strcmp (port_entries_cnf_sort[i].vlan_port_index,
+ port_entries_cnf_sort[i + 2].vlan_port_index) == 0)
+ {
+ strcpy (key_not_unique, port_entries_cnf_sort[i].vlan_port_mac);
+ strcat (key_not_unique, ".");
+ strcat (key_not_unique, port_entries_cnf_sort[i].vlan_port_index);
+ break;
+ }
+
+ if (strcmp (port_entries_cnf_sort[i].vlan_port_mac,
+ port_entries_cnf_sort[i + 3].vlan_port_mac) == 0 &&
+ strcmp (port_entries_cnf_sort[i].vlan_port_index,
+ port_entries_cnf_sort[i + 3].vlan_port_index) == 0)
+ {
+ strcpy (key_not_unique, port_entries_cnf_sort[i].vlan_port_mac);
+ strcat (key_not_unique, ".");
+ strcat (key_not_unique, port_entries_cnf_sort[i].vlan_port_index);
+ break;
+ }
+
+ if (strcmp (port_entries_cnf_sort[i].vlan_port_mac,
+ port_entries_cnf_sort[i + 4].vlan_port_mac) == 0 &&
+ strcmp (port_entries_cnf_sort[i].vlan_port_index,
+ port_entries_cnf_sort[i + 4].vlan_port_index) == 0)
+ {
+ strcpy (key_not_unique, port_entries_cnf_sort[i].vlan_port_mac);
+ strcat (key_not_unique, ".");
+ strcat (key_not_unique, port_entries_cnf_sort[i].vlan_port_index);
+ break;
+ }
+ }
+
+ for (i = 0; i < port_count_cnf; i++)
+ {
+ int number_of_error = 0;
+ libspid_vlan_port_check_error_t
+ error_types[LIBSPID_VLAN_PORT_ERROR_TYPES_NUM];
+ char test_unique_key[LIBSPID_MAC_STR_LEN + 2] = { 0 };
+ libspid_eoc_vlan_port_table_entry_t *res;
+ int port_index[5] = { 0 };
+
+ /* for each MAC address, verify that there is */
+ /* required number of ports */
+ if ((i % 5) == 0)
+ {
+ if (strcmp (port_entries_cnf_sort[i].vlan_port_mac,
+ port_entries_cnf_sort[i + 4].vlan_port_mac) == 0)
+ {
+ port_index[atoi (port_entries_cnf_sort[i].vlan_port_index)] =
+ 1;
+ port_index[atoi
+ (port_entries_cnf_sort[i + 1].vlan_port_index)] =
+ 1;
+ port_index[atoi
+ (port_entries_cnf_sort[i + 2].vlan_port_index)] =
+ 1;
+ port_index[atoi
+ (port_entries_cnf_sort[i + 3].vlan_port_index)] =
+ 1;
+ port_index[atoi
+ (port_entries_cnf_sort[i + 4].vlan_port_index)] =
+ 1;
+
+ if (!(port_index[0] && port_index[1] && port_index[2] &&
+ port_index[3] && port_index[4]))
+ {
+ LIBSPID_EOC_LOG_2 ("MAC %s must have required number "
+ "of ports(%d)",
+ port_entries_cnf_sort[i].vlan_port_mac,
+ LIBSPID_PORT_PER_SLAVE_MAX);
+ free (port_entries_cnf);
+ free (port_entries_cnf_sort);
+ return LIBSPID_ERROR_CHECK;
+ }
+ }
+ else
+ {
+ LIBSPID_EOC_LOG_2 ("MAC %s must have required "
+ "number of ports(%d)",
+ port_entries_cnf_sort[i].vlan_port_mac,
+ LIBSPID_PORT_PER_SLAVE_MAX);
+ free (port_entries_cnf);
+ free (port_entries_cnf_sort);
+ return LIBSPID_ERROR_CHECK;
+ }
+ }
+
+ port_entry = port_entries_cnf[i];
+ /* Check dependency between vlan_porttable.conf and
+ * white_list.conf file */
+ /* check if MAC defined in vlan_porttable.conf but
+ * not in white_list.conf */
+ res = bsearch (&port_entry, wl_entries_cnf_sort, wl_count_cnf,
+ sizeof (libspid_eoc_wl_entry_t), cmp_string_mac);
+
+ if (res == NULL)
+ {
+ LIBSPID_EOC_LOG_1
+ ("MAC (%s) defined in vlan_porttable.conf but not "
+ "in white_list.conf", port_entry.vlan_port_mac);
+ free (port_entries_cnf);
+ free (port_entries_cnf_sort);
+ return LIBSPID_ERROR_CHECK;
+ }
+
+ /* if MAC.index is not unique key */
+ /* find error line */
+ strcpy (test_unique_key, port_entry.vlan_port_mac);
+ strcat (test_unique_key, ".");
+ strcat (test_unique_key, port_entry.vlan_port_index);
+ /** check format of the input parameters */
+ number_of_error = vlan_port_check_input_parameters (&port_entry,
+ port_entries_cnf,
+ port_count_cnf,
+ error_types);
+
+ if (strcmp (key_not_unique, test_unique_key) == 0)
+ {
+ number_of_error += 1;
+ error_types[number_of_error - 1] =
+ LIBSPID_ERROR_VLAN_PORT_MAC_DUPLICATE;
+ }
+
+ if (number_of_error > 0)
+ {
+ int j = 0;
+ ret = LIBSPID_ERROR_CHECK;
+ LIBSPID_EOC_LOG_1 ("Error in line:%d\n", i + 2);
+
+ for (j = 0; j < number_of_error; j++)
+ {
+ switch (error_types[j])
+ {
+ case LIBSPID_ERROR_VLAN_PORT_MAC_FORMAT:
+ LIBSPID_EOC_LOG_0 ("Malformed MAC address.");
+ break;
+ case LIBSPID_ERROR_VLAN_PORT_MAC_DUPLICATE:
+ LIBSPID_EOC_LOG_1 ("MAC_ADDRESS.PORT_NB (%s) is not "
+ "unique key.", key_not_unique);
+ unique_address = LIBSPID_FALSE;
+ break;
+ case LIBSPID_ERROR_VLAN_PORT_INDEX_VALUE:
+ LIBSPID_EOC_LOG_1 ("Wrong port index value specified "
+ "(expected: 0..%d)",
+ LIBSPID_PORT_PER_SLAVE_MAX - 1);
+ break;
+ case LIBSPID_ERROR_VLAN_PORT_PVID_VALUE:
+ LIBSPID_EOC_LOG_0 ("Wrong port vlan pvid value specified "
+ "(expected: 0..4095)");
+ break;
+ case LIBSPID_ERROR_VLAN_PORT_TPID_VALUE:
+ LIBSPID_EOC_LOG_0 ("Wrong port vlan tpid value specified"
+ "specified (expected: 0..65535)");
+ break;
+ case LIBSPID_ERROR_VLAN_PORT_PRIO_VALUE:
+ LIBSPID_EOC_LOG_1 ("Wrong port vlan prio value specified "
+ "(expected: 0..%d)",
+ LIBSPID_SERVICE_MAX_MATCH_PRIO);
+ break;
+ case LIBSPID_ERROR_VLAN_PORT_MODE_VALUE:
+ LIBSPID_EOC_LOG_0 ("Wrong port vlan mode value specified "
+ "specified (expected: 0..3)");
+ break;
+ case LIBSPID_ERROR_VLAN_PORT_VLAN_DEFINED:
+ LIBSPID_EOC_LOG_0 ("VlanID not defined in vlan table");
+ break;
+ default:
+ break;
+ }
+ }
+
+ if (unique_address == LIBSPID_FALSE)
+ break;
+ }
+ else if (number_of_error == -1)
+ {
+ free (port_entries_cnf);
+ free (port_entries_cnf_sort);
+ return LIBSPID_ERROR_PARAM;
+ }
+ }
+
+ if (unique_address == LIBSPID_TRUE)
+ {
+ /* Check dependency between vlan_porttable.conf and
+ * white_list.conf file */
+ /* check if MAC defined in white_list.conf but not in port.conf */
+ for (i = 0; i < wl_count_cnf; i++)
+ {
+ libspid_eoc_wl_entry_t *res;
+ libspid_eoc_wl_entry_t wl_entry;
+ wl_entry = wl_entries_cnf_sort[i];
+ res = bsearch (&wl_entry, port_entries_cnf_sort, port_count_cnf,
+ sizeof (libspid_eoc_vlan_port_table_entry_t),
+ cmp_string_mac);
+
+ if (res == NULL)
+ {
+ LIBSPID_EOC_LOG_1 ("MAC (%s) defined in white_list.conf "
+ "but not in vlan_porttable.conf",
+ wl_entry.mac_addr);
+ free (port_entries_cnf);
+ free (port_entries_cnf_sort);
+ return LIBSPID_ERROR_CHECK;
+ }
+ }
+ }
+
+ free (port_entries_cnf);
+ free (port_entries_cnf_sort);
+ return ret;
+}
diff --git a/cleopatre/application/libspid/src/wl_eoc.c b/cleopatre/application/libspid/src/wl_eoc.c
new file mode 100644
index 0000000000..6e722af011
--- /dev/null
+++ b/cleopatre/application/libspid/src/wl_eoc.c
@@ -0,0 +1,2132 @@
+
+/* SPC300 bundle {{{
+ *
+ * Copyright (C) 2012 MStar
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file application/libspid/src/wl_eoc.c
+ * \brief Functions specific to EoC White List
+ * \ingroup libspid
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <getopt.h>
+#include <syslog.h>
+#include <assert.h>
+#include <arpa/inet.h>
+#include <unistd.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <linux/netlink.h>
+#include <ctype.h>
+#include <string.h>
+
+#include "openssl_md5.h"
+#include "libspid.h"
+#include "nvram.h"
+#include "libmme.h"
+
+#ifdef __UTESTS__
+libspid_error_t
+wl_send_single_value (unsigned int mmtype, const void *value,
+ unsigned int length);
+int
+wl_compute_dak (const unsigned char *dpw, unsigned char *dak);
+#endif
+
+/**
+ * Returns the White List entry for a slave with the given MAC address.<BR>
+ * \param mac_address MAC address of the slave
+ * \param eoc_wl_entry White List entry
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_NOT_FOUND: entry not found
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+extern libspid_error_t
+libspid_eoc_wl_get (char *mac_address, libspid_eoc_wl_entry_t *eoc_wl_entry)
+{
+ const char delimiters[2] = LIBSPID_WHITE_LIST_CONF_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;
+ int i;
+
+ /* check input parameters */
+ if ((mac_address == NULL) || (eoc_wl_entry == NULL))
+ {
+ return LIBSPID_ERROR_PARAM;
+ }
+
+ for (i = 0; i < LIBSPID_MAC_STR_LEN; i++)
+ {
+ mac_address[i] = tolower (mac_address[i]);
+ }
+
+ strcpy (key, mac_address);
+ strcpy (eoc_wl_entry->mac_addr, mac_address);
+
+ if (LIBSPID_SUCCESS !=
+ (error = libspid_config_read_line (LIBSPID_WHITE_LIST_CONF_PATH,
+ delimiters, key, &elt_number,
+ elt, buffer,
+ LIBSPID_CONFIG_LINE_MAX_LEN)))
+ return error;
+
+ if (elt_number < LIBSPID_EOC_WL_PARAM_NUM)
+ {
+ strcpy ((char*)eoc_wl_entry->ip_address, (char*)"");
+ strcpy (eoc_wl_entry->tei, "");
+ strcpy (eoc_wl_entry->auth, "");
+ strcpy (eoc_wl_entry->output_level, "");
+ strcpy (eoc_wl_entry->start_time, "");
+ strcpy (eoc_wl_entry->end_time, "");
+ strcpy (eoc_wl_entry->dpw, "");
+ }
+ else
+ {
+ strcpy ((char*)eoc_wl_entry->ip_address, (char*)elt[0]);
+ strcpy (eoc_wl_entry->tei, elt[1]);
+ strcpy (eoc_wl_entry->auth, elt[2]);
+ strcpy (eoc_wl_entry->output_level, elt[3]);
+ strcpy (eoc_wl_entry->start_time, elt[4]);
+ strcpy (eoc_wl_entry->end_time, elt[5]);
+ strncpy (eoc_wl_entry->dpw, elt[6], LIBSPID_SECU_PWD_SIZE_MAX-1);
+ eoc_wl_entry->dpw[LIBSPID_SECU_PWD_SIZE_MAX-1] = '\0';
+ }
+
+ return LIBSPID_SUCCESS;
+}
+
+/**
+ * Returns the whole White List from configuration file in a pointer
+ * to an array of White List entries.<BR>
+ * \param eoc_wl_entry pointer to an array of White List entries
+ * \param mac_address_count pointer to an integer for count of entries
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_NOT_FOUND: entry not found
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+extern libspid_error_t
+libspid_eoc_wl_get_list (libspid_eoc_wl_entry_t *eoc_wl_entry,
+ int *mac_address_count)
+{
+ const char delimiters[2] = LIBSPID_WHITE_LIST_CONF_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;
+ libspid_eoc_wl_entry_t *entry_ptr;
+ void * user_data = NULL;
+
+ /* check input parameters */
+ if ((eoc_wl_entry == NULL) || (mac_address_count == NULL))
+ {
+ return LIBSPID_ERROR_PARAM;
+ }
+
+ memset (key, 0x0, sizeof (key));
+ memset (eoc_wl_entry, 0x0, sizeof (eoc_wl_entry));
+ *mac_address_count = 0;
+
+ entry_ptr = eoc_wl_entry;
+
+ /* get the first key */
+ error = libspid_config_read_line_repetitive (LIBSPID_WHITE_LIST_CONF_PATH,
+ delimiters, key, &elt_number,
+ elt, buffer,
+ LIBSPID_CONFIG_LINE_MAX_LEN,
+ &user_data);
+ if (LIBSPID_SUCCESS != error)
+ return error;
+
+ for (; *mac_address_count < LIBSPID_WHITE_LIST_CONF_LINE_MAX_NB
+ && strcmp (key, ""); (*mac_address_count)++)
+ {
+ /* Get a line from the conf file. */
+ elt_number = LIBSPID_CONFIG_ELT_MAX_NB;
+ error = libspid_config_read_line_repetitive (
+ LIBSPID_WHITE_LIST_CONF_PATH, delimiters, key,
+ &elt_number, elt, buffer,
+ LIBSPID_CONFIG_LINE_MAX_LEN, &user_data);
+ if (LIBSPID_SUCCESS != error)
+ return error;
+
+ strcpy (entry_ptr->mac_addr, buffer);
+ if (elt_number < LIBSPID_EOC_WL_PARAM_NUM)
+ {
+ strcpy ((char*)entry_ptr->ip_address, (char*)"");
+ strcpy (entry_ptr->tei, "");
+ strcpy (entry_ptr->auth, "");
+ strcpy (entry_ptr->output_level, "");
+ strcpy (entry_ptr->start_time, "");
+ strcpy (entry_ptr->end_time, "");
+ strcpy (entry_ptr->dpw, "");
+ }
+ else
+ {
+ strcpy ((char*)entry_ptr->ip_address, (char*)elt[0]);
+ strcpy (entry_ptr->tei, elt[1]);
+ strcpy (entry_ptr->auth, elt[2]);
+ strcpy (entry_ptr->output_level, elt[3]);
+ strcpy (entry_ptr->start_time, elt[4]);
+ strcpy (entry_ptr->end_time, elt[5]);
+ strcpy (entry_ptr->dpw, elt[6]);
+ strncpy (entry_ptr->dpw, elt[6], LIBSPID_SECU_PWD_SIZE_MAX-1);
+ entry_ptr->dpw[LIBSPID_SECU_PWD_SIZE_MAX-1] = '\0';
+
+ }
+
+ entry_ptr++;
+ }
+ /* Close the file if it contains more then max entries. */
+ libspid_config_read_line_repetitive (0, 0, 0, 0, 0, 0, 0, &user_data);
+ return LIBSPID_SUCCESS;
+}
+
+/* internal helper function: adds port list entries for slave with given */
+/* MAC address - initial port parameters set to 0 */
+libspid_error_t
+libspid_eoc_ports_add (char *mac_address)
+{
+ int i;
+ int ret;
+
+ char *port_elt[4] = {"0", "0", "0", "0"};
+ char port_key[LIBSPID_CONFIG_KEY_MAX_LEN];
+ const char port_delimiter = LIBSPID_PORT_CONF_DELIMITER[0];
+
+ /* check input parameter */
+ if (mac_address == NULL)
+ {
+ return LIBSPID_ERROR_PARAM;
+ }
+
+ for (i = 0; i < LIBSPID_PORT_PER_SLAVE_MAX; i++)
+ {
+ sprintf (port_key, "%s.%d", mac_address, i);
+ ret = libspid_config_write_line (LIBSPID_PORT_CONF_PATH,
+ port_delimiter, port_key, 4,
+ port_elt);
+ if (ret != LIBSPID_SUCCESS)
+ {
+ LIBSPID_EOC_LOG_2 ("%s: cannot write port list entry (errno=%d)",
+ __FUNCTION__, errno);
+ return ret;
+ }
+ }
+
+ return LIBSPID_SUCCESS;
+}
+/* internal helper function: removes port list entries for slave */
+/* with given MAC address */
+libspid_error_t
+libspid_eoc_ports_remove (char *mac_address)
+{
+ int i,j;
+ int ret;
+ char port_key[LIBSPID_CONFIG_KEY_MAX_LEN];
+
+ /* check input parameter */
+ if (mac_address == NULL)
+ {
+ return LIBSPID_ERROR_PARAM;
+ }
+
+ for (i = 0; i < LIBSPID_PORT_PER_SLAVE_MAX; i++)
+ {
+ /* make sure MAC address is in lowercase */
+ for (j = 0; j < LIBSPID_MAC_STR_LEN; j++)
+ {
+ mac_address[j] = tolower (mac_address[j]);
+ }
+ sprintf (port_key, "%s.%d", mac_address, i);
+ ret = libspid_config_remove_line (LIBSPID_PORT_CONF_PATH,
+ LIBSPID_PORT_CONF_DELIMITER,
+ port_key);
+ if (ret != LIBSPID_SUCCESS)
+ {
+ LIBSPID_EOC_LOG_3 ("%s: cannot remove port list entry %s "
+ "(errno=%d)", __FUNCTION__, port_key, errno);
+ return ret;
+ }
+ }
+
+ return LIBSPID_SUCCESS;
+}
+
+/* internal helper function: adds port list entries for slave with given */
+/* MAC address - initial port parameters set to 0 */
+libspid_error_t
+libspid_eoc_maclimits_add (char *mac_address)
+{
+ int ret;
+
+ char *maclimit_elt[1];
+ char elt[LIBSPID_CONFIG_ELT_MAX_LEN];
+ char maclimit_key[LIBSPID_CONFIG_KEY_MAX_LEN];
+ const char maclimit_delimiter = LIBSPID_MAC_LIMIT_CONF_DELIMITER[0];
+ int maclimit_default_num = LIBSPID_MAC_LIMIT_DEFAULT_NUM;
+ /* check input parameter */
+ if (mac_address == NULL)
+ {
+ return LIBSPID_ERROR_PARAM;
+ }
+ maclimit_elt[0] = elt;
+ if (libspid_eoc_maclimit_get_defaultnum (&maclimit_default_num) ==
+ LIBSPID_SUCCESS)
+ {
+ sprintf (elt, "%d", maclimit_default_num);
+ }
+ else
+ {
+ sprintf (elt, "%d", LIBSPID_MAC_LIMIT_DEFAULT_NUM);
+ }
+ strcpy (maclimit_key, mac_address);
+
+ ret = libspid_config_write_line (LIBSPID_MAC_LIMITATION_CONF_PATH,
+ maclimit_delimiter, maclimit_key, 1,
+ maclimit_elt);
+ if (ret != LIBSPID_SUCCESS)
+ {
+ LIBSPID_EOC_LOG_2 ("%s: cannot write maclimit list entry (errno=%d)",
+ __FUNCTION__, errno);
+ return ret;
+ }
+
+ return LIBSPID_SUCCESS;
+}
+/* internal helper function: removes port list entries for slave */
+/* with given MAC address */
+libspid_error_t
+libspid_eoc_maclimits_remove (char *mac_address)
+{
+ int j;
+ int ret;
+ char maclimit_key[LIBSPID_CONFIG_KEY_MAX_LEN];
+
+ /* check input parameter */
+ if (mac_address == NULL)
+ {
+ return LIBSPID_ERROR_PARAM;
+ }
+
+
+ /* make sure MAC address is in lowercase */
+ for (j = 0; j < LIBSPID_MAC_STR_LEN; j++)
+ {
+ mac_address[j] = tolower (mac_address[j]);
+ }
+ strcpy (maclimit_key, mac_address);
+ ret = libspid_config_remove_line (LIBSPID_MAC_LIMITATION_CONF_PATH,
+ LIBSPID_PORT_CONF_DELIMITER,
+ maclimit_key);
+ if (ret != LIBSPID_SUCCESS)
+ {
+ LIBSPID_EOC_LOG_3 ("%s: cannot remove maclimit list entry %s "
+ "(errno=%d)", __FUNCTION__, maclimit_key, errno);
+ return ret;
+ }
+
+
+ return LIBSPID_SUCCESS;
+}
+
+/* internal helper function: adds port_v2 list entries for slave */
+/* with given MAC address */
+libspid_error_t
+libspid_eoc_ports_v2_add (char *mac_address)
+{
+ int i;
+ int ret;
+ char thres_hold[3][64];
+ char *port_elt[LIBSPID_PORT_V2_PARAM_NUM] = {"1", "2", "2",
+ "0", "33024", "0", "0",
+ "0", thres_hold[0],
+ "0", thres_hold[1],
+ "0", thres_hold[2]};
+ char port_key[LIBSPID_CONFIG_KEY_MAX_LEN];
+ const char port_delimiter = LIBSPID_PORT_V2_CONF_DELIMITER[0];
+
+ sprintf (thres_hold[0], "%d", LIBSPID_EOC_STORM_BCAST_THRES_HOLD_MIN);
+ sprintf (thres_hold[1], "%d", LIBSPID_EOC_STORM_MULTI_THRES_HOLD_MIN);
+ sprintf (thres_hold[2], "%d", LIBSPID_EOC_STORM_UNKNOW_THRES_HOLD_MIN);
+
+ /* check input parameter */
+ if (mac_address == NULL)
+ {
+ return LIBSPID_ERROR_PARAM;
+ }
+
+ for (i = 0; i < LIBSPID_ETHERNET_PORT_PER_SLAVE_MAX; i++)
+ {
+ sprintf (port_key, "%s.%d", mac_address, i);
+ ret = libspid_config_write_line (LIBSPID_EOC_PORT_V2_FILE,
+ port_delimiter, port_key,
+ LIBSPID_PORT_V2_PARAM_NUM,
+ port_elt);
+ if (ret != LIBSPID_SUCCESS)
+ {
+ LIBSPID_EOC_LOG_2 ("%s: cannot write port list entry (errno=%d)",
+ __FUNCTION__, errno);
+ return ret;
+ }
+ }
+
+ return LIBSPID_SUCCESS;
+}
+
+/* internal helper function: removes port_v2 list entries for slave */
+/* with given MAC address */
+libspid_error_t
+libspid_eoc_ports_v2_remove (char *mac_address)
+{
+ int i,j;
+ int ret;
+ char port_key[LIBSPID_CONFIG_KEY_MAX_LEN];
+
+ /* check input parameter */
+ if (mac_address == NULL)
+ {
+ return LIBSPID_ERROR_PARAM;
+ }
+
+ for (i = 0; i < LIBSPID_PORT_PER_SLAVE_MAX; i++)
+ {
+ /* make sure MAC address is in lowercase */
+ for (j = 0; j < LIBSPID_MAC_STR_LEN; j++)
+ {
+ mac_address[j] = tolower (mac_address[j]);
+ }
+ sprintf (port_key, "%s.%d", mac_address, i);
+ ret = libspid_config_remove_line (LIBSPID_EOC_PORT_V2_FILE,
+ LIBSPID_PORT_V2_CONF_DELIMITER,
+ port_key);
+ if (ret != LIBSPID_SUCCESS)
+ {
+ LIBSPID_EOC_LOG_3 ("%s: cannot remove ethernet list entry %s "
+ "(errno=%d)", __FUNCTION__, port_key, errno);
+ return ret;
+ }
+ }
+
+ return LIBSPID_SUCCESS;
+}
+
+/* internal helper function: adds igmp list entries for slave with given */
+libspid_error_t
+libspid_eoc_igmp_snooping_add (char *mac_address)
+{
+ int ret;
+ char *igmp_elt[] = {"1"};
+ const char igmp_delimiter = LIBSPID_EOC_IGMP_SNOOPING_CONF_DELIMITER[0];
+
+ /* check input parameter */
+ if (mac_address == NULL)
+ {
+ return LIBSPID_ERROR_PARAM;
+ }
+
+
+ ret = libspid_config_write_line (LIBSPID_IGMP_CONF_PATH,
+ igmp_delimiter, mac_address,
+ LIBSPID_EOC_IGMP_SNOOPING_PARAM_NUM,
+ igmp_elt);
+ if (ret != LIBSPID_SUCCESS)
+ {
+ LIBSPID_EOC_LOG_2 ("%s: cannot write igmp snooping list entry (errno=%d)",
+ __FUNCTION__, errno);
+ return ret;
+ }
+
+ return LIBSPID_SUCCESS;
+}
+
+/* internal helper function: removes igmp list entries for slave */
+/* with given MAC address */
+libspid_error_t
+libspid_eoc_igmp_snooping_remove (char *mac_address)
+{
+ int i;
+ int ret;
+
+ /* check input parameter */
+ if (mac_address == NULL)
+ {
+ return LIBSPID_ERROR_PARAM;
+ }
+
+ /* make sure MAC address is in lowercase */
+ for (i = 0; i < LIBSPID_MAC_STR_LEN; i++)
+ {
+ mac_address[i] = tolower (mac_address[i]);
+ }
+
+ ret = libspid_config_remove_line (LIBSPID_IGMP_CONF_PATH,
+ LIBSPID_EOC_IGMP_SNOOPING_CONF_DELIMITER,
+ mac_address);
+ if (ret != LIBSPID_SUCCESS)
+ {
+ LIBSPID_EOC_LOG_3 ("%s: cannot remove igmp list entry %s "
+ "(errno=%d)", __FUNCTION__, mac_address, errno);
+ return ret;
+ }
+
+ return LIBSPID_SUCCESS;
+}
+
+/* internal helper function: add ethctl list entries for slave with given */
+libspid_error_t
+libspid_eoc_ethctls_add (char *mac_address)
+{
+ int ret;
+ char *ethctl_elt[] = {"0", "0", "1", "3", "0", "0", "0", "300"};
+ const char ethctl_delimiter = LIBSPID_ETHCTL_DELIMITER[0];
+
+ /* check input parameter */
+ if (mac_address == NULL)
+ {
+ return LIBSPID_ERROR_PARAM;
+ }
+
+ ret = libspid_config_write_line (LIBSPID_ETHCTL_CONF_PATH,
+ ethctl_delimiter, mac_address,
+ LIBSPID_ETHCTL_PARAM_NUM,
+ ethctl_elt);
+ if (ret != LIBSPID_SUCCESS)
+ {
+ LIBSPID_EOC_LOG_2 ("%s: cannot write ethctl list entry (errno=%d)",
+ __FUNCTION__, errno);
+ return ret;
+ }
+
+ return LIBSPID_SUCCESS;
+}
+
+/* internal helper function: removes ethctl list entries for slave
+ * with given MAC address
+ */
+libspid_error_t
+libspid_eoc_ethctls_remove (char *mac_address)
+{
+ int i;
+ int ret;
+
+ /* check input parameter */
+ if (mac_address == NULL)
+ {
+ return LIBSPID_ERROR_PARAM;
+ }
+
+ /* make sure MAC address is in lowercase */
+ for (i = 0; i < LIBSPID_MAC_STR_LEN; i++)
+ {
+ mac_address[i] = tolower (mac_address[i]);
+ }
+
+ ret = libspid_config_remove_line (LIBSPID_ETHCTL_CONF_PATH,
+ LIBSPID_DELIMITER,
+ mac_address);
+ if (ret != LIBSPID_SUCCESS)
+ {
+ LIBSPID_EOC_LOG_3 ("%s: cannot remove ethctl list entry %s "
+ "(errno=%d)", __FUNCTION__, mac_address, errno);
+ return ret;
+ }
+
+ return LIBSPID_SUCCESS;
+}
+
+/**
+ * Set the White List entry for a slave with the given MAC address.<BR>
+ * Also add relevant port list entries for given MAC address.<BR>
+ * \param mac_address MAC address of the slave
+ * \param eoc_wl_entry new White List entry contents
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_NOT_FOUND: entry not found
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+extern libspid_error_t
+libspid_eoc_wl_set (char *mac_address, libspid_eoc_wl_entry_t *eoc_wl_entry)
+{
+ const char delimiter = LIBSPID_WHITE_LIST_CONF_DELIMITER[0];
+ char *elt[LIBSPID_EOC_WL_PARAM_NUM];
+ libspid_error_t ret;
+
+ int i;
+
+ libspid_eoc_wl_entry_t wl_get_entry;
+ int slave_added = 0;
+
+
+ /* check input parameters */
+ if ((mac_address == NULL) || (eoc_wl_entry == NULL))
+ {
+ return LIBSPID_ERROR_PARAM;
+ }
+
+ /* check if adding entry for a new slave */
+ ret = libspid_eoc_wl_get (mac_address, &wl_get_entry);
+ if (LIBSPID_ERROR_NOT_FOUND == ret)
+ {
+ slave_added = 1;
+ }
+ else if (LIBSPID_SUCCESS != ret)
+ {
+ return LIBSPID_ERROR_SYSTEM;
+ }
+
+ /* allocate buffers */
+ for (i = 0; i < LIBSPID_EOC_WL_PARAM_NUM; i++)
+ {
+ elt[i] = (char *) malloc (64 * sizeof (char));
+ if (NULL != elt[i])
+ {
+ memset (elt[i], 0, 64);
+ }
+ else
+ {
+ LIBSPID_EOC_LOG_2 ("%s: error allocating element buffers "
+ "(errno=%d)", __FUNCTION__, errno);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+ }
+
+ strcpy (elt[0],(char *)eoc_wl_entry->ip_address);
+ strcpy (elt[1], eoc_wl_entry->tei);
+ strcpy (elt[2], eoc_wl_entry->auth);
+ strcpy (elt[3], eoc_wl_entry->output_level);
+ strcpy (elt[4], eoc_wl_entry->start_time);
+ strcpy (elt[5], eoc_wl_entry->end_time);
+ strcpy (elt[6], eoc_wl_entry->dpw);
+
+
+ ret = libspid_config_write_line (LIBSPID_WHITE_LIST_CONF_PATH, delimiter,
+ mac_address, LIBSPID_EOC_WL_PARAM_NUM , elt);
+
+ /* free element buffers */
+ for (i = 0; i < LIBSPID_EOC_WL_PARAM_NUM; i++)
+ {
+ if (elt[i])
+ {
+ free (elt[i]);
+ elt[i] = NULL;
+ }
+ }
+
+ if (ret != LIBSPID_SUCCESS)
+ {
+ LIBSPID_EOC_LOG_2 ("%s: cannot write White List entry (errno=%d)",
+ __FUNCTION__, errno);
+ return ret;
+ }
+ else
+ {
+ if (slave_added)
+ {
+ /* create port entries if new slave is added */
+ ret = libspid_eoc_ports_add (mac_address);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ return ret;
+ }
+
+ /* create mac limitation entries for slave */
+ ret = libspid_eoc_maclimits_add (mac_address);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ return ret;
+ }
+
+ ret = libspid_eoc_ports_v2_add (mac_address);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ return ret;
+ }
+
+ /* create igmp entries for slave */
+ ret = libspid_eoc_igmp_snooping_add (mac_address);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ return ret;
+ }
+
+ /* create ethctls entries for slave */
+ ret = libspid_eoc_ethctls_add (mac_address);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ return ret;
+ }
+ }
+ return LIBSPID_SUCCESS;
+ }
+}
+
+/**
+ * Remove the White List entry with the given MAC address.<BR>
+ * Also remove relevant port list entries for given MAC address.<BR>
+ * \param mac_address MAC address of the slave
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_NOT_FOUND: entry not found
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+extern libspid_error_t
+libspid_eoc_wl_remove (char *mac_address)
+{
+ libspid_error_t ret;
+
+ /* check input parameters */
+ if (mac_address == NULL)
+ {
+ return LIBSPID_ERROR_PARAM;
+ }
+
+ ret = libspid_config_remove_line (LIBSPID_WHITE_LIST_CONF_PATH,
+ LIBSPID_WHITE_LIST_CONF_DELIMITER,
+ mac_address);
+
+ if (ret != LIBSPID_SUCCESS)
+ {
+ LIBSPID_EOC_LOG_2 ("%s: cannot remove White List entry (errno=%d)",
+ __FUNCTION__, errno);
+ return ret;
+ }
+ else
+ {
+ /* remove port entries for slave */
+ ret = libspid_eoc_ports_remove (mac_address);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ return ret;
+ }
+
+ /* remove mac limitation entries for slave */
+ ret = libspid_eoc_maclimits_remove (mac_address);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ return ret;
+ }
+
+ /* remove port_v2 entries for slave */
+ ret = libspid_eoc_ports_v2_remove (mac_address);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ return ret;
+ }
+ /* remove igmp entries for slave */
+ ret = libspid_eoc_igmp_snooping_remove (mac_address);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ return ret;
+ }
+
+ /* remove ethctl entries for slave */
+ ret = libspid_eoc_ethctls_remove (mac_address);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ return ret;
+ }
+ /* remove update.info entry for slave (if existing) */
+ ret = libspid_config_remove_line (LIBSPID_UPDATE_INFO_PATH,
+ LIBSPID_UPDATE_INFO_DELIMITER,
+ mac_address);
+ if ((LIBSPID_SUCCESS != ret) && (LIBSPID_ERROR_NOT_FOUND != ret))
+ {
+ LIBSPID_EOC_LOG_2 ("%s: cannot remove update.info entry "
+ "(errno=%d)", __FUNCTION__, errno);
+ return ret;
+ }
+
+ /* save update file to flash */
+ ret = libspid_system_save_file (LIBSPID_UPDATE_INFO_PATH);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ LIBSPID_EOC_LOG_2 ("%s: cannot save update.info to flash "
+ "(errno=%d)", __FUNCTION__, errno);
+ return ret;
+ }
+
+ return LIBSPID_SUCCESS;
+ }
+}
+
+/**
+ * Change MAC address in white_list.conf and port.conf.<BR>
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ * \return LIBSPID_ERROR_NOT_FOUND: entry not found
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ */
+extern libspid_error_t
+libspid_eoc_wl_mac_change (char *mac_address_old, char *mac_address_new)
+{
+
+ libspid_eoc_wl_entry_t wl_get_entry;
+ libspid_eoc_port_entry_t port_get_entry[LIBSPID_PORT_PER_SLAVE_MAX];
+ libspid_eoc_storm_entry_t storm_get_entry[LIBSPID_PORT_PER_SLAVE_MAX];
+
+ libspid_eoc_vlan_port_table_entry_t
+ vlanport_get_entry[LIBSPID_PORT_PER_SLAVE_MAX];
+
+ libspid_eoc_ethernet_port_entry_t
+ ethernetport_get_entry[LIBSPID_PORT_PER_SLAVE_MAX];
+
+ libspid_eoc_maclimit_entry_t maclimit_get_entry;
+
+ libspid_eoc_igmp_snooping_entry_t igmp_get_entry;
+ libspid_eoc_ethctl_entry_t ethctl_get_entry;
+ char index[2];
+ int ret = 0, i = 0;
+
+ /* check input parameters */
+ if (mac_address_old == NULL ||
+ mac_address_new == NULL)
+ {
+ return LIBSPID_ERROR_PARAM;
+ }
+
+ /* check if new mac address exist in white list */
+ ret = libspid_eoc_wl_get (mac_address_new, &wl_get_entry);
+ if (ret != LIBSPID_ERROR_NOT_FOUND)
+ {
+ /* stop if mac exist */
+ if (ret == LIBSPID_SUCCESS)
+ {
+ LIBSPID_EOC_LOG_1 ("MAC address %s exist", mac_address_new);
+ return LIBSPID_ERROR_PARAM;
+ }
+ else
+ return ret;
+ }
+
+ ret = libspid_eoc_wl_get (mac_address_old, &wl_get_entry);
+ if (ret == LIBSPID_ERROR_NOT_FOUND)
+ {
+ /* stop if mac doesn't exist */
+ LIBSPID_EOC_LOG_1 ("MAC address %s doesn't exist", mac_address_old);
+ return LIBSPID_ERROR_PARAM;
+ }
+ else if (ret != LIBSPID_SUCCESS)
+ {
+ return LIBSPID_ERROR_SYSTEM;
+ }
+
+ for (i = 0; i < LIBSPID_PORT_PER_SLAVE_MAX; i++)
+ {
+ /* check that MAC address and port index already exist */
+ sprintf (index, "%d", i);
+ ret = libspid_eoc_port_get (mac_address_old, index,
+ &port_get_entry[i]);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ return ret;
+ }
+
+ /* check that MAC address and storm index already exist */
+ ret = libspid_eoc_storm_get (mac_address_old, index,
+ &storm_get_entry[i]);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ return ret;
+ }
+
+ /* check that MAC address and ethernet index already exist */
+ ret = libspid_eoc_ethernet_port_get (mac_address_old, index,
+ &ethernetport_get_entry[i]);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ return ret;
+ }
+
+ /* check that MAC address and vlanport index already exist */
+ ret = libspid_eoc_vlan_port_get (mac_address_old, index,
+ &vlanport_get_entry[i]);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ return ret;
+ }
+ }
+
+ /* check that MAC address and maclimit already exist */
+ ret = libspid_eoc_maclimit_get (mac_address_old, &maclimit_get_entry);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ return ret;
+ }
+
+ /* check that MAC address and igmp already exist */
+ ret = libspid_eoc_igmp_snooping_get (mac_address_old, &igmp_get_entry);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ return ret;
+ }
+
+ /* check that MAC address and ethctl already exist */
+ ret = libspid_eoc_ethctl_get (mac_address_old, &ethctl_get_entry);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ return ret;
+ }
+
+ ret = libspid_eoc_wl_remove (mac_address_old);
+ if (ret != LIBSPID_SUCCESS)
+ {
+ LIBSPID_EOC_LOG_1 ("Failed to remove slave %s", mac_address_new);
+ return ret;
+ }
+
+ ret = libspid_eoc_wl_set (mac_address_new, &wl_get_entry);
+ if ( ret != LIBSPID_SUCCESS)
+ {
+ LIBSPID_EOC_LOG_1 ("Failed to set white_list entry for slave (%s)",
+ mac_address_new);
+ return ret;
+ }
+
+ for (i = 0; i < LIBSPID_PORT_PER_SLAVE_MAX; i++)
+ {
+ sprintf (index, "%d", i);
+ ret = libspid_eoc_port_set (mac_address_new, index,
+ &port_get_entry[i]);
+ if ( ret != LIBSPID_SUCCESS)
+ {
+ LIBSPID_EOC_LOG_1 ("Failed to set port for slave %s",
+ mac_address_new);
+ return ret;
+ }
+
+ ret = libspid_eoc_storm_set (mac_address_new, index,
+ &storm_get_entry[i]);
+ if ( ret != LIBSPID_SUCCESS)
+ {
+ LIBSPID_EOC_LOG_1 ("Failed to set port storm for slave %s",
+ mac_address_new);
+ return ret;
+ }
+
+ ret = libspid_eoc_vlan_port_set (mac_address_new, index,
+ &vlanport_get_entry[i]);
+ if ( ret != LIBSPID_SUCCESS)
+ {
+ LIBSPID_EOC_LOG_1 ("Failed to set vlanport for slave %s",
+ mac_address_new);
+ return ret;
+ }
+
+
+ ret = libspid_eoc_ethernet_port_set (mac_address_new, index,
+ &ethernetport_get_entry[i]);
+ if ( ret != LIBSPID_SUCCESS)
+ {
+ LIBSPID_EOC_LOG_1 ("Failed to set ethernet port for slave %s",
+ mac_address_new);
+ return ret;
+ }
+
+ }
+
+ ret = libspid_eoc_maclimit_set (mac_address_new, &maclimit_get_entry);
+ if ( ret != LIBSPID_SUCCESS)
+ {
+ LIBSPID_EOC_LOG_1 ("Failed to set maclimit for slave %s",
+ mac_address_new);
+ return ret;
+ }
+
+ ret = libspid_eoc_igmp_snooping_set (mac_address_new, &igmp_get_entry);
+ if ( ret != LIBSPID_SUCCESS)
+ {
+ LIBSPID_EOC_LOG_1 ("Failed to set igmp for slave %s",
+ mac_address_new);
+ return ret;
+ }
+
+ ret = libspid_eoc_ethctl_set (mac_address_new, &ethctl_get_entry);
+ if ( ret != LIBSPID_SUCCESS)
+ {
+ LIBSPID_EOC_LOG_1 ("Failed to set ethctl for slave %s",
+ mac_address_new);
+ return ret;
+ }
+ return LIBSPID_SUCCESS;
+}
+
+
+/**
+ * Remove all White List entries.<BR>
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+extern libspid_error_t
+libspid_eoc_wl_flush (void)
+{
+ const char delimiters[2] = LIBSPID_WHITE_LIST_CONF_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;
+
+ while (1)
+ {
+ /* Get the key of the current line */
+ memset (key, 0x0, sizeof (key));
+ libspid_config_read_line (LIBSPID_WHITE_LIST_CONF_PATH, delimiters,
+ key, &elt_number, elt, buffer,
+ LIBSPID_CONFIG_LINE_MAX_LEN);
+
+ if (strcmp (key, "") == 0)
+ break;
+
+ if (LIBSPID_SUCCESS != (error = libspid_eoc_wl_remove (key)))
+ return error;
+ }
+
+ return LIBSPID_SUCCESS;
+}
+
+#ifndef __UTESTS__
+static libspid_error_t
+wl_send_single_value (unsigned int mmtype, const void *value,
+ unsigned int length)
+{
+ unsigned char buffer[ETH_DATA_LEN];
+ mme_ctx_t request_ctx, confirm_ctx;
+ unsigned char result;
+ unsigned int result_len;
+ char *iface = LIBSPID_EOC_PLC_IFACE;
+ unsigned char mac_address[LIBSPID_MAC_STR_LEN];
+ unsigned char mac_address_bin[ETH_ALEN];
+ int ret;
+
+ /* init mme */
+ mme_init (&request_ctx, mmtype | MME_REQ, buffer, ETH_DATA_LEN);
+ mme_init (&confirm_ctx, mmtype | MME_CNF, buffer, ETH_DATA_LEN);
+
+ if (value != NULL)
+ mme_put (&request_ctx, value, length, &result_len);
+
+ ret = libspid_network_get_mac (iface, mac_address);
+ if (ret != LIBSPID_SUCCESS)
+ return ret;
+
+ ret = libspid_mac_str_to_bin ((char *)mac_address, mac_address_bin);
+ if (ret != LIBSPID_SUCCESS)
+ return ret;
+
+ if ((mme_send (&request_ctx, MME_SEND_REQ_CNF, NULL, mac_address_bin,
+ &confirm_ctx) == MME_SUCCESS)
+ && (confirm_ctx.oui == MME_OUI_SPIDCOM)
+ && (mme_pull (&confirm_ctx, &result, sizeof (result),
+ &result_len) == MME_SUCCESS))
+ {
+ return LIBSPID_SUCCESS;
+ }
+ else
+ return LIBSPID_ERROR_SYSTEM;
+}
+
+int
+wl_compute_dak (const unsigned char *dpw, unsigned char *dak)
+{
+ assert (dpw);
+ assert (dak);
+ libspid_secu_pbkdf1 (dpw, strlen ((char *)dpw), LIBSPID_SECU_SALT_TYPE_DAK,
+ LIBSPID_SECU_PBKDF1_ITERATION,
+ dak, LIBSPID_SECU_OUTPUT_KEY_SIZE);
+ return 0;
+}
+#endif /* __UTESTS__ */
+
+/**
+ * Retrieves current contents of White List in a pointer to an array
+ * of White List entries.<BR>
+ * \param eoc_wl_entry pointer to an array of White List entries
+ * \param mac_address_count pointer to an integer for count of entries
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_NOT_FOUND: entry not found
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+extern libspid_error_t
+libspid_eoc_wl_retrieve (libspid_eoc_wl_entry_t *eoc_wl_entry,
+ int *mac_address_count)
+{
+ unsigned char index = 0, i, ret = 0;
+ unsigned int total_wl_entry_nb = LIBSPID_WHITE_LIST_MAX_STA_NUM, \
+ curr_wl_entry_nb = LIBSPID_EOC_WL_MAX_STA_CNT;
+ libspid_eoc_wl_entry_t *curr_wl_entry = eoc_wl_entry;
+ unsigned char buffer[ETH_DATA_LEN];
+ mme_ctx_t request_ctx, confirm_ctx;
+ unsigned char result;
+ unsigned int result_len;
+ unsigned char mac_address[LIBSPID_MAC_STR_LEN];
+ unsigned char mac_address_bin[ETH_ALEN];
+
+ /* check input parameters */
+ if ((eoc_wl_entry == NULL) || (mac_address_count == NULL))
+ {
+ return LIBSPID_ERROR_PARAM;
+ }
+
+ for (index = 0; index < total_wl_entry_nb; index += curr_wl_entry_nb)
+ {
+ /* init mme */
+ ret = mme_init (&request_ctx, VS_EOC_CCO_GET_WL_REQ, buffer,
+ ETH_DATA_LEN);
+ if (ret != MME_SUCCESS)
+ return LIBSPID_ERROR_MME;
+ ret = mme_init (&confirm_ctx, VS_EOC_CCO_GET_WL_CNF, buffer,
+ ETH_DATA_LEN);
+ if (ret != MME_SUCCESS)
+ return LIBSPID_ERROR_MME;
+
+ /* Index of the first entry to be read from the Cesar white_list. */
+ ret = mme_put (&request_ctx, &index, 1, &result_len);
+ if (ret != MME_SUCCESS)
+ return LIBSPID_ERROR_MME;
+
+#ifndef __UTESTS__
+ ret = libspid_network_get_mac (LIBSPID_EOC_PLC_IFACE, mac_address);
+ if (ret != LIBSPID_SUCCESS)
+ return ret;
+#else
+ strcpy ((char *) mac_address, "00:d7:20:00:00:01");
+#endif /* __UTESTS__ */
+
+ ret = libspid_mac_str_to_bin ((char *) mac_address, mac_address_bin);
+ if (ret != LIBSPID_SUCCESS)
+ return ret;
+
+ ret = mme_send (&request_ctx, MME_SEND_REQ_CNF, NULL, mac_address_bin,
+ &confirm_ctx);
+ if (ret != MME_SUCCESS)
+ return LIBSPID_ERROR_MME;
+
+ /* extract SPIDCOM OUI and check if it is correct */
+ if (confirm_ctx.oui != MME_OUI_SPIDCOM)
+ return LIBSPID_ERROR_MME;
+
+ /* collect confirmation result */
+ ret = mme_pull (&confirm_ctx, &result, 1, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ /* Total number of the white_list entries on Cesar */
+ ret = mme_pull (&confirm_ctx, &total_wl_entry_nb, 1, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ /* Index of the first entry to be read from the Cesar white_list */
+ /* there is no need for this parameter */
+ ret = mme_pull (&confirm_ctx, &result, 1, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ /* Number of the white_list entries contained within current MME. */
+ ret = mme_pull (&confirm_ctx, &curr_wl_entry_nb, 1, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ *mac_address_count = total_wl_entry_nb;
+
+ for (i = 0; i < curr_wl_entry_nb; i++)
+ {
+ unsigned char mac_addr_bin[ETH_ALEN];
+ unsigned int mac_addr_bin_len = 0;
+ unsigned char tei, auth, output_level, sta_dak[16], sta_dpw[64],
+ action;
+ unsigned int start_time, end_time;
+
+ /* collect MAC address */
+ ret = mme_pull (&confirm_ctx, mac_addr_bin,
+ ETH_ALEN, &mac_addr_bin_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ ret = libspid_mac_bin_to_str (mac_addr_bin,
+ curr_wl_entry->mac_addr);
+ if (LIBSPID_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ /* collect TEI */
+ ret = mme_pull (&confirm_ctx, &tei, 1, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+ sprintf (curr_wl_entry->tei, "%d", tei);
+
+ /* collect authorization status of station */
+ ret = mme_pull (&confirm_ctx, &auth, 1, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+ sprintf (curr_wl_entry->auth, "%d", auth);
+
+ /* collect RF output level of station */
+ ret = mme_pull (&confirm_ctx, &output_level, 1, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+ sprintf (curr_wl_entry->output_level, "%d", output_level);
+
+ /* collect start of time limitation for station */
+ ret = mme_pull (&confirm_ctx, &start_time, 4, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+ sprintf (curr_wl_entry->start_time, "%.2d:%.2d",
+ start_time/3600, (start_time % (60 * 60)) / 60);
+
+ /* collect end of time limitation for station */
+ ret = mme_pull (&confirm_ctx, &end_time, 4, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+ sprintf (curr_wl_entry->end_time, "%.2d:%.2d",
+ end_time/3600, (end_time % (60 * 60)) / 60);
+
+ /* collect Device Access Key for station */
+ ret = mme_pull (&confirm_ctx, sta_dak, 16, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+ ret = libspid_binary_to_hexstring (sta_dak,
+ LIBSPID_SECU_OUTPUT_KEY_SIZE,
+ curr_wl_entry->dak);
+ if (ret != LIBSPID_SUCCESS)
+ return ret;
+
+ /* collect Device Password for station */
+ ret = mme_pull (&confirm_ctx, sta_dpw, 64, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+ memcpy (curr_wl_entry->dpw, sta_dpw, LIBSPID_SECU_PWD_SIZE_MAX);
+
+ /* collect action required for station */
+ ret = mme_pull (&confirm_ctx, &action, 1, &result_len);
+ if (MME_SUCCESS != ret)
+ return LIBSPID_ERROR_MME;
+
+ curr_wl_entry++;
+ }
+ }
+
+ return LIBSPID_SUCCESS;
+}
+
+/* internal helper function for comparing current white list */
+/* contents and config file */
+libspid_error_t
+wl_compare_lists (libspid_eoc_wl_entry_t *wl_config_entries,
+ int config_count,
+ libspid_eoc_wl_entry_t *wl_current_entries,
+ int current_count,
+ libspid_eoc_wl_info_entry_t *wl_entries,
+ int *diff_count)
+{
+ unsigned char wl_entries_checked [LIBSPID_WHITE_LIST_MAX_STA_NUM];
+ int current_pointer_low = 0, current_pointer_high = current_count;
+ /* DAK computed from DPW in config file */
+ unsigned char dak[1024];
+
+ /* string to store DAK converted to be compared with current entry */
+ char dak_str[1024];
+
+ char hex[256];
+
+ libspid_error_t error = LIBSPID_SUCCESS;
+ int i, j;
+
+ unsigned int time_hr, time_min;
+
+ unsigned int start_time_sec_config, start_time_sec_current;
+ unsigned int end_time_sec_config, end_time_sec_current;
+
+ unsigned int count;
+
+ int found = 0;
+ int changed = 0;
+
+ memset (dak, 0x0, LIBSPID_SECU_OUTPUT_KEY_SIZE);
+ memset (dak_str, 0x0, LIBSPID_SECU_PWD_SIZE_MAX);
+ memset (hex, 0x0, 10);
+ memset (wl_entries_checked, 0, LIBSPID_WHITE_LIST_MAX_STA_NUM);
+
+ count = 0;
+
+ /* make sure MAC addresses are always in the same case */
+ for (i = 0; i < config_count; i++)
+ for (j = 0; wl_config_entries[i].mac_addr[j]; j++)
+ wl_config_entries[i].mac_addr[j] =
+ tolower (wl_config_entries[i].mac_addr[j]);
+ for (i = 0; i < current_count; i++)
+ for (j = 0; wl_current_entries[i].mac_addr[j]; j++)
+ wl_current_entries[i].mac_addr[j] =
+ tolower (wl_current_entries[i].mac_addr[j]);
+
+ /* find entries to add or modify iterate through white list */
+ /* entries of config file */
+ /* and compare them against white list entries retrieved from Cesar */
+ LIBSPID_EOC_LOG_1 ("%s: Checking for entries to add or modify...\n",
+ __FUNCTION__);
+ for (i = 0; i < config_count; i++)
+ {
+ found = 0;
+
+ /* if Cesar list is not empty, iterate through white list entries
+ * retrieved from Cesar and compare to current config list entry */
+ if (current_count != 0)
+ {
+ /* convert start time and end time to seconds */
+ sscanf (wl_config_entries[i].start_time, "%d:%d",
+ &time_hr, &time_min);
+ start_time_sec_config = time_hr * 60 * 60 + time_min * 60;
+
+ sscanf (wl_config_entries[i].end_time, "%d:%d",
+ &time_hr, &time_min);
+ end_time_sec_config = time_hr * 60 * 60 + time_min * 60;
+
+ for (j = current_pointer_low; j < current_pointer_high; j++)
+ {
+ /* check if current config entry exists on Cesar */
+ if (!wl_entries_checked [j]
+ && !strcmp (wl_config_entries[i].mac_addr,
+ wl_current_entries[j].mac_addr))
+ {
+ found = 1;
+
+ /* convert start time and end time to seconds */
+ sscanf (wl_current_entries[j].start_time, "%d:%d",
+ &time_hr, &time_min);
+ start_time_sec_current = time_hr * 60 * 60 + time_min * 60;
+
+ sscanf (wl_current_entries[j].end_time, "%d:%d",
+ &time_hr, &time_min);
+ end_time_sec_current = time_hr * 60 * 60 + time_min * 60;
+
+ if (atoi (wl_config_entries[i].tei)
+ != atoi (wl_current_entries[j].tei))
+ {
+ LIBSPID_EOC_LOG_2 ("Error: TEI(%s) is changed "
+ "for MAC %s\n",
+ wl_current_entries[j].tei,
+ wl_current_entries[j].mac_addr);
+ return LIBSPID_ERROR_GEN;
+ }
+
+ /* compare all changeable fields in config file and Cesar
+ * if all are equal, no need to copy entry to send list, just skip to next iteration */
+ if ((atoi (wl_config_entries[i].auth) ==
+ atoi (wl_current_entries[j].auth)) &&
+ (atoi (wl_config_entries[i].output_level) ==
+ atoi (wl_current_entries[j].output_level)) &&
+ (start_time_sec_config == start_time_sec_current) &&
+ (end_time_sec_config == end_time_sec_current) &&
+ (0 == strcmp (wl_config_entries[i].dpw,
+ wl_current_entries[j].dpw)))
+ changed = 0;
+ else
+ changed = 1;
+
+ wl_entries_checked [j] = 1;
+ if (j == current_pointer_low)
+ current_pointer_low++;
+ if (j == current_pointer_high - 1)
+ current_pointer_high--;
+
+ break;
+ }
+ }
+ }
+
+ if ((0 == found) || (1 == changed))
+ {
+ /* compute DAK from DPW */
+ error = wl_compute_dak ((unsigned char *)
+ wl_config_entries[i].dpw, dak);
+ if (error != LIBSPID_SUCCESS)
+ return error;
+
+ /* convert DAK to string */
+ error = libspid_binary_to_hexstring (
+ dak, LIBSPID_SECU_OUTPUT_KEY_SIZE, dak_str);
+ if (error != LIBSPID_SUCCESS)
+ return error;
+
+ /* if entry is changed or not found, copy current */
+ /* config white list entry data to list for sending */
+ /* and set field for action to add or modify */
+ strcpy (wl_entries[count].mac_addr,
+ wl_config_entries[i].mac_addr);
+ strcpy (wl_entries[count].tei, wl_config_entries[i].tei);
+ strcpy (wl_entries[count].auth, wl_config_entries[i].auth);
+ strcpy (wl_entries[count].output_level,
+ wl_config_entries[i].output_level);
+ strcpy (wl_entries[count].start_time,
+ wl_config_entries[i].start_time);
+ strcpy (wl_entries[count].end_time,
+ wl_config_entries[i].end_time);
+ strcpy (wl_entries[count].dpw, wl_config_entries[i].dpw);
+ strcpy (wl_entries[count].dak, dak_str);
+ strcpy (wl_entries[count].action,
+ LIBSPID_WHITE_LIST_INFO_VALUE_ACTION_ADD_MODIFY);
+
+ count++;
+ }
+ }
+
+ /* Find entries to remove. Iterate through retrieved white list entries
+ * and compare them against white list entries of config file */
+ LIBSPID_EOC_LOG_1 ("%s: Checking for entries to remove...\n",
+ __FUNCTION__);
+ for (i = 0; i < current_count; i++)
+ {
+ if (strcmp (wl_current_entries[i].tei, "0") == 0)
+ continue;
+
+ if (!wl_entries_checked [i])
+ {
+ /* if entry doesn't exist, copy current white list entry data to */
+ /* list for sending and set field for action to remove */
+ strcpy (wl_entries[count].mac_addr,
+ wl_current_entries[i].mac_addr);
+ strcpy (wl_entries[count].tei,
+ wl_current_entries[i].tei);
+ strcpy (wl_entries[count].auth,
+ wl_current_entries[i].auth);
+ strcpy (wl_entries[count].output_level,
+ wl_current_entries[i].output_level);
+ strcpy (wl_entries[count].start_time,
+ wl_current_entries[i].start_time);
+ strcpy (wl_entries[count].end_time,
+ wl_current_entries[i].end_time);
+ /* DAK is retrieved in DPW field */
+ strcpy (wl_entries[count].dpw, wl_current_entries[i].dpw);
+ strcpy (wl_entries[count].dak, wl_current_entries[i].dak);
+ strcpy (wl_entries[count].action,
+ LIBSPID_WHITE_LIST_INFO_VALUE_ACTION_REMOVE);
+
+ count++;
+ }
+ }
+
+ *diff_count = count;
+
+ return LIBSPID_SUCCESS;
+}
+
+/**
+ * Synchronize white list contents between config file and current settings.<BR>
+ * Get list of entries added, changed or removed in config file and propagate
+ * it via MMEs.
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_NOT_FOUND: entry not found
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_GEN: general error
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+extern libspid_error_t
+libspid_eoc_wl_sync (void)
+{
+ /* pointer to list of white list entries read from config file */
+ libspid_eoc_wl_entry_t *wl_config_entries;
+ /* pointer to list of retrieved white list entries */
+ libspid_eoc_wl_entry_t *wl_current_entries;
+ /* pointer to list of white list entries with actions */
+ /* to be sent via MMEs */
+ libspid_eoc_wl_info_entry_t *wl_entries;
+
+ libspid_error_t error = LIBSPID_SUCCESS;
+ unsigned int i, j, time_hr, time_min, time_sec, config_count, \
+ current_count, curr_count, mme_num, remain;
+ int t, idx, temp_count, count;
+ int ret = 0;
+ char enable[LIBSPID_CONFIG_LINE_MAX_LEN] = {0};
+
+ static unsigned char *mme_body;
+
+ ret = libspid_config_read_item (
+ LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_PLC_FORWARDING_ENABLE,
+ enable, LIBSPID_CONFIG_LINE_MAX_LEN);
+ if (ret == LIBSPID_SUCCESS
+ && strcmp (enable, LIBSPID_SYSTEM_CONF_VALUE_NO) == 0)
+ {
+ LIBSPID_EOC_LOG_1 ("%s: PLC forwarding is disabled", __FUNCTION__);
+ return LIBSPID_SUCCESS;
+ }
+
+ /* allocate and initialize pointer to list of white list */
+ /* entries read from config file */
+ wl_config_entries = (libspid_eoc_wl_entry_t *)
+ malloc (LIBSPID_WHITE_LIST_MAX_STA_NUM * sizeof
+ (libspid_eoc_wl_entry_t));
+
+ if (NULL == wl_config_entries)
+ {
+ LIBSPID_EOC_LOG_2 ("%s: error allocating config white list "
+ "array(errno=%d)", __FUNCTION__, errno);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+
+ memset (wl_config_entries, 0x0,
+ LIBSPID_WHITE_LIST_MAX_STA_NUM * sizeof (libspid_eoc_wl_entry_t));
+
+ /* allocate and initialize pointer to list of retrieved white */
+ /* list entries */
+ wl_current_entries = (libspid_eoc_wl_entry_t *)
+ malloc (LIBSPID_WHITE_LIST_MAX_STA_NUM * sizeof
+ (libspid_eoc_wl_entry_t));
+
+ if (NULL == wl_current_entries)
+ {
+ LIBSPID_EOC_LOG_2 ("%s: error allocating current white list "
+ "array(errno=%d)", __FUNCTION__, errno);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+
+ memset (wl_current_entries, 0x0,
+ LIBSPID_WHITE_LIST_MAX_STA_NUM * sizeof (libspid_eoc_wl_entry_t));
+
+ /* get current contents of white list config file */
+ error = libspid_eoc_wl_get_list (wl_config_entries, &temp_count);
+
+ if (LIBSPID_SUCCESS != error)
+ {
+ LIBSPID_EOC_LOG_1 ("%s: White list config file not read correctly\n",
+ __FUNCTION__);
+ return error;
+ }
+
+ config_count = temp_count;
+
+ /* retrieve current contents of white list */
+ error = libspid_eoc_wl_retrieve (wl_current_entries, &temp_count);
+
+ if (LIBSPID_SUCCESS != error)
+ {
+ LIBSPID_EOC_LOG_1 ("%s: White list not retrieved correctly\n",
+ __FUNCTION__);
+ return error;
+ }
+
+ current_count = temp_count;
+
+ if ((0 == config_count) && (0 == current_count))
+ {
+ LIBSPID_EOC_LOG_1 ("%s: White lists empty, nothing to synchronize\n",
+ __FUNCTION__);
+
+ free (wl_current_entries);
+ wl_current_entries = NULL;
+
+ free (wl_config_entries);
+ wl_config_entries = NULL;
+
+ return LIBSPID_SUCCESS;
+ }
+
+ /* allocate and initialize pointer to list of white list entries */
+ /* with actions to be sent via MMEs */
+ wl_entries = (libspid_eoc_wl_info_entry_t *)
+ malloc ((2 * LIBSPID_WHITE_LIST_MAX_STA_NUM)*
+ sizeof (libspid_eoc_wl_info_entry_t));
+
+ if (NULL == wl_entries)
+ {
+ LIBSPID_EOC_LOG_2 ("%s: error allocating send white list "
+ "array(errno=%d)", __FUNCTION__, errno);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+
+ memset (wl_entries, 0x0, (2 * LIBSPID_WHITE_LIST_MAX_STA_NUM) *
+ sizeof (libspid_eoc_wl_info_entry_t));
+
+ /* allocate and initialize pointer to MME body */
+ mme_body = (unsigned char *)
+ malloc ((LIBSPID_EOC_WL_MAX_STA_CNT *
+ LIBSPID_EOC_WL_BYTE_NR_STA + 1) *
+ sizeof (unsigned char));
+ if (NULL == mme_body)
+ {
+ LIBSPID_EOC_LOG_2 ("%s: error allocating MME body (errno=%d)",
+ __FUNCTION__, errno);
+ return LIBSPID_ERROR_SYSTEM;
+ }
+
+ memset (mme_body, 0x0,
+ LIBSPID_EOC_WL_MAX_STA_CNT * LIBSPID_EOC_WL_BYTE_NR_STA + 1);
+
+ /* compare contents of config file and current white lists and produce */
+ /* difference list with actions to be sent via MMEs */
+ error = wl_compare_lists (wl_config_entries, config_count,
+ wl_current_entries, current_count,
+ wl_entries, &count);
+
+ if (LIBSPID_SUCCESS != error)
+ {
+ LIBSPID_EOC_LOG_1 ("%s: Lists not compared correctly\n",
+ __FUNCTION__);
+ return error;
+ }
+
+ /* calculate number of MMEs to fully pack */
+ mme_num = count / LIBSPID_EOC_WL_MAX_STA_CNT;
+ /* calculate remainder of station count */
+ remain = count % LIBSPID_EOC_WL_MAX_STA_CNT;
+
+ /* pack contents of difference list to MMEs */
+ for (i = 0; i <= mme_num; i++)
+ {
+ /* determine count of stations for current MME */
+ if (i == mme_num)
+ {
+ curr_count = remain;
+ }
+ else
+ {
+ curr_count = LIBSPID_EOC_WL_MAX_STA_CNT;
+ }
+ /* pack count of stations */
+ mme_body[0] = curr_count;
+
+ /* pack data for stations */
+ for (j = 0; j < curr_count; j++)
+ {
+ idx = i * LIBSPID_EOC_WL_MAX_STA_CNT + j;
+ t = j * LIBSPID_EOC_WL_BYTE_NR_STA;
+
+ /* pack MAC address */
+ error = libspid_mac_str_to_bin (wl_entries[idx].mac_addr,
+ mme_body + t + 1);
+ if (error != LIBSPID_SUCCESS)
+ return error;
+
+ /* pack TEI */
+ mme_body[t + 7] = (uint8_t) strtol (wl_entries[idx].tei, NULL, 10);
+
+ /* pack authorisation */
+ mme_body[t + 8] = (uint8_t) strtol (wl_entries[idx].auth, NULL, 10);
+
+ /* pack output_level */
+ mme_body[t + 9] = (uint8_t) strtol (wl_entries[idx].output_level,
+ NULL, 10);
+
+ /* pack start time */
+ sscanf (wl_entries[idx].start_time, "%d:%d", &time_hr, &time_min);
+ time_sec = time_hr * 60 * 60 + time_min * 60;
+ memcpy (mme_body+t+10, &time_sec, 4);
+
+ /* pack end time */
+ sscanf (wl_entries[idx].end_time, "%d:%d", &time_hr, &time_min);
+ time_sec = time_hr * 60 * 60 + time_min * 60;
+ memcpy (mme_body + t + 14, &time_sec, 4);
+
+ /* pack DAK */
+ error = libspid_hexstring_to_binary (
+ wl_entries[idx].dak,
+ mme_body + t + 18,
+ LIBSPID_SECU_OUTPUT_KEY_SIZE);
+ if (error != LIBSPID_SUCCESS)
+ return error;
+
+ /* pack DPW */
+ memset (mme_body + t + 34, 0, LIBSPID_SECU_PWD_SIZE_MAX);
+ strcpy ((char *) mme_body + t + 34, wl_entries[idx].dpw);
+
+ /* pack action */
+ mme_body[t + 98] = (uint8_t) strtol (wl_entries[idx].action,
+ NULL, 10);
+ }
+
+ error = wl_send_single_value (VS_EOC_CCO_SET_WL, mme_body,
+ curr_count * LIBSPID_EOC_WL_BYTE_NR_STA
+ + 1);
+
+ if (error != LIBSPID_SUCCESS)
+ {
+ LIBSPID_EOC_LOG_1 ("%s: MME not sent correctly\n", __FUNCTION__);
+ return error;
+ }
+ }
+
+ free (wl_config_entries);
+ wl_config_entries = NULL;
+
+ free (wl_current_entries);
+ wl_current_entries = NULL;
+
+ free (wl_entries);
+ wl_entries = NULL;
+
+ free (mme_body);
+ mme_body = NULL;
+
+ return LIBSPID_SUCCESS;
+}
+
+/** internal helper function for check parameters of white_list.conf */
+int
+wl_check_input_parameters (libspid_eoc_wl_entry_t *wl_entry,
+ libspid_eoc_wl_entry_t *wl_entries_cnf,
+ int wl_count_cnf,
+ libspid_wl_check_error_t *error_types,
+ int *tei_index)
+{
+ int error_number = 0;
+ int i = 0, value = 0;
+ int ret = 0;
+ int hrs = 0, mins = 0, start_time = 0, end_time = 0;
+ char *pnumber;
+ struct in_addr ipaddr;
+
+ if (wl_entry == NULL || wl_entries_cnf == NULL ||
+ error_types == NULL)
+ {
+ return -1;
+ }
+
+ /** check MAC address*/
+ if (strlen (wl_entry->mac_addr) != LIBSPID_MAC_STR_LEN - 1) ret = -1;
+
+ for (i = 0; i < LIBSPID_MAC_STR_LEN - 1; i++)
+ {
+ /* MAC address is stored in lower case */
+ wl_entry->mac_addr[i] = tolower (wl_entry->mac_addr[i]);
+ if (!((wl_entry->mac_addr[i] >= '0' &&
+ wl_entry->mac_addr[i] <= '9') ||
+ (wl_entry->mac_addr[i] >= 'a' &&
+ wl_entry->mac_addr[i] <= 'f') ||
+ wl_entry->mac_addr[i] == ':'))
+ ret = -1;
+
+ if ((i % 3) == 2 && wl_entry->mac_addr[i] != ':')
+ ret = -1;
+ }
+
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_WL_MAC_FORMAT;
+ error_number++;
+ ret = 0;
+ }
+
+ /** check ip format */
+ if (0 == inet_aton ((char *)wl_entry->ip_address, &ipaddr))
+ {
+ ret = -1;
+ }
+
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_WL_IP_FORMAT;
+ error_number++;
+ ret = 0;
+ }
+
+ /** check TEI value */
+ value = strtol (wl_entry->tei, &pnumber, 10);
+ if (*pnumber != '\0' || strcmp (wl_entry->tei,"") == 0)
+ ret = -1;
+ else
+ ret = (value < LIBSPID_EOC_WL_TEI_MIN ||
+ value > LIBSPID_EOC_WL_TEI_MAX) ? -1 : 0;
+
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_WL_TEI_VALUE;
+ error_number++;
+ ret = 0;
+ }
+
+ /** check if MAC-TEI pair in configuration file has any conflicts */
+ if (tei_index[value] == 1)
+ {
+ error_types[error_number] = LIBSPID_ERROR_WL_TEI_DUPLICATE;
+ error_number++;
+ ret = 0;
+ }
+ else
+ tei_index[value] = 1;
+
+ /** check authorization field value */
+ ret = (strcmp (wl_entry->auth, "0") == 0 ||
+ strcmp (wl_entry->auth, "1") == 0) ? 0 : -1;
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_WL_AUTH_VALUE;
+ error_number++;
+ ret = 0;
+ }
+
+ /** check output level value */
+ value = strtol (wl_entry->output_level, &pnumber, 10);
+ if (*pnumber != '\0' || strcmp (wl_entry->output_level,"") == 0)
+ ret = -1;
+ else
+ ret = ((value < LIBSPID_EOC_WL_RF_OUTPUT_LEVEL_MIN && value != 0) ||
+ value > LIBSPID_EOC_WL_RF_OUTPUT_LEVEL_MAX) ? -1 : 0;
+
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_WL_OUTPUT_VALUE;
+ error_number++;
+ ret = 0;
+ }
+
+ /** check start time value */
+ if (strlen (wl_entry->start_time) != 5) ret = -1;
+
+ for (i = 0; i < 5; i++)
+ {
+ if (!((wl_entry->start_time[i] >= '0' &&
+ wl_entry->start_time[i] <= '9') ||
+ wl_entry->start_time[i] == ':'))
+ ret = -1;
+
+ if ((i % 3) == 2 && wl_entry->start_time[i] != ':')
+ ret = -1;
+ }
+
+ if (!(wl_entry->start_time[0] >= '0' && wl_entry->start_time[0] <= '2'))
+ ret = -1;
+ if (!(wl_entry->start_time[3] >= '0' && wl_entry->start_time[3] <= '6'))
+ ret = -1;
+ if (wl_entry->start_time[0] == '2' &&
+ !(wl_entry->start_time[1] >= '0' &&
+ wl_entry->start_time[1] <= '3'))
+ ret = -1;
+
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_WL_STIME_VALUE;
+ error_number++;
+ ret = 0;
+ }
+
+ /** check end time value */
+ if (strlen (wl_entry->end_time) != 5) ret = -1;
+
+ for (i = 0; i < 5; i++)
+ {
+ if (!((wl_entry->end_time[i] >= '0' &&
+ wl_entry->end_time[i] <= '9') ||
+ wl_entry->end_time[i] == ':'))
+ ret = -1;
+
+ if ((i % 3) == 2 && wl_entry->end_time[i] != ':')
+ ret = -1;
+ }
+
+ if (!(wl_entry->end_time[0] >= '0' && wl_entry->end_time[0] <= '2'))
+ ret = -1;
+ if (!(wl_entry->end_time[3] >= '0' && wl_entry->end_time[3] <= '6'))
+ ret = -1;
+ if (wl_entry->end_time[0] == '2' &&
+ !(wl_entry->end_time[1] >= '0' &&
+ wl_entry->end_time[1] <= '3'))
+ ret = -1;
+
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_WL_ETIME_VALUE;
+ error_number++;
+ ret = 0;
+ }
+
+ /** check DPW length */
+ ret = (strlen (wl_entry->dpw) < LIBSPID_SECU_PWD_SIZE_MIN ||
+ strlen (wl_entry->dpw) > LIBSPID_SECU_PWD_SIZE_MAX) ? -1 : 0;
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_WL_DPW_VALUE;
+ error_number++;
+ ret = 0;
+ }
+
+ /** start time must be less than end time */
+ hrs = 10 * (wl_entry->start_time[0] - '0') +
+ (wl_entry->start_time[1] - '0');
+ mins = 10 * (wl_entry->start_time[3] - '0') +
+ (wl_entry->start_time[4] - '0');
+ start_time = 60 * hrs + mins;
+
+ hrs = 10 * (wl_entry->end_time[0] - '0') +
+ (wl_entry->end_time[1] - '0');
+ mins = 10 * (wl_entry->end_time[3] - '0') +
+ (wl_entry->end_time[4] - '0');
+ end_time = 60 * hrs + mins;
+
+ ret = (start_time >= end_time) ? -1 : 0;
+
+ if (ret != 0)
+ {
+ error_types[error_number] = LIBSPID_ERROR_WL_PTIME_VALUE;
+ error_number++;
+ ret = 0;
+ }
+
+ return error_number;
+}
+
+static int
+cmp_string_mac (const void *p1, const void *p2)
+{
+ return strcmp (((libspid_eoc_wl_entry_t *)p1)->mac_addr,
+ ((libspid_eoc_wl_entry_t *)p2)->mac_addr);
+}
+
+static int
+cmp_string_ip (const void *p1, const void *p2)
+{
+ return strcmp ((char *)((libspid_eoc_wl_entry_t *)p1)->ip_address,
+ (char *)((libspid_eoc_wl_entry_t *)p2)->ip_address);
+}
+
+/**
+ * Check white_list.conf file
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_NOT_FOUND: entry not found
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ * \return LIBSPID_ERROR_CHECK: check utility failed
+ */
+extern libspid_error_t
+libspid_eoc_wl_check (void)
+{
+ int wl_count_cnf = 0;
+ int ret = -1;
+ int i = 0;
+ libspid_eoc_wl_entry_t wl_entries_cnf[LIBSPID_WHITE_LIST_MAX_STA_NUM];
+ libspid_eoc_wl_entry_t wl_entries_cnf_sort[LIBSPID_WHITE_LIST_MAX_STA_NUM];
+ libspid_eoc_wl_entry_t wl_entry;
+ char key_not_unique[LIBSPID_MAC_STR_LEN] = "";
+ unsigned char ip_not_unique[LIBSPID_IP_STR_MAX_LEN] = "";
+ int tei_index[255] = {0};
+
+ LIBSPID_EOC_LOG_1 ("%s: Check white_list.conf...", __FUNCTION__);
+ /** obtain the white list from configuration file */
+ ret = libspid_eoc_wl_get_list (wl_entries_cnf, &wl_count_cnf);
+ if (ret != LIBSPID_SUCCESS)
+ {
+ return ret;
+ }
+
+ memcpy (wl_entries_cnf_sort, wl_entries_cnf,
+ wl_count_cnf * sizeof (libspid_eoc_wl_entry_t));
+
+ /* sort white_list.conf*/
+ qsort (wl_entries_cnf_sort, wl_count_cnf,
+ sizeof (libspid_eoc_wl_entry_t), cmp_string_mac);
+
+ /* check if MAC is unique key */
+ for (i = 0; i < wl_count_cnf - 1; i++)
+ {
+ if (strcmp (wl_entries_cnf_sort[i].mac_addr,
+ wl_entries_cnf_sort[i + 1].mac_addr) == 0)
+ {
+ strcpy (key_not_unique, wl_entries_cnf_sort[i].mac_addr);
+ break;
+ }
+ }
+
+ /* sort white_list.conf*/
+ qsort (wl_entries_cnf_sort, wl_count_cnf,
+ sizeof (libspid_eoc_wl_entry_t), cmp_string_ip);
+ /* check if IP is unique key */
+ for (i = 0; i < wl_count_cnf - 1; i++)
+ {
+ if (strcmp ((char *)wl_entries_cnf_sort[i].ip_address,
+ (char *)wl_entries_cnf_sort[i + 1].ip_address) == 0)
+ {
+ strcpy ((char *)ip_not_unique,
+ (char *)wl_entries_cnf_sort[i].ip_address);
+ break;
+ }
+ }
+
+ for (i = 0; i < wl_count_cnf; i++)
+ {
+ int number_of_error = 0;
+ libspid_wl_check_error_t error_types[LIBSPID_EOC_WL_ERROR_TYPES_NUM];
+
+ wl_entry = wl_entries_cnf[i];
+
+ /** check format of the input parameters */
+ number_of_error = wl_check_input_parameters (&wl_entry,
+ wl_entries_cnf,
+ wl_count_cnf,
+ error_types, tei_index);
+
+ /* if MAC is not unique key */
+ /* find error line */
+ if (strcmp (key_not_unique, wl_entry.mac_addr) == 0)
+ {
+ number_of_error += 1;
+ error_types[number_of_error - 1] = LIBSPID_ERROR_WL_MAC_DUPLICATE;
+ }
+
+ /* if IP is not unique key */
+ if ((strcmp ((char *)ip_not_unique,
+ (char *)wl_entry.ip_address) == 0) &&
+ (strcmp ((char *)ip_not_unique,
+ (char *)LIBSPID_EOC_WL_IP_DEFAULT) != 0))
+ {
+ number_of_error += 1;
+ error_types[number_of_error - 1] = LIBSPID_ERROR_WL_IP_DUPLICATE;
+ }
+
+ if (number_of_error > 0)
+ {
+ int j = 0;
+ libspid_boolean_t unique_address = LIBSPID_TRUE;
+
+ ret = LIBSPID_ERROR_CHECK;
+
+ LIBSPID_EOC_LOG_1 ("Error in line:%d\n", i + 2);
+
+ for (j = 0; j < number_of_error; j++)
+ {
+ switch (error_types[j])
+ {
+ case LIBSPID_ERROR_WL_MAC_FORMAT:
+ LIBSPID_EOC_LOG_0 ("Malformed MAC address.");
+ break;
+ case LIBSPID_ERROR_WL_IP_FORMAT:
+ LIBSPID_EOC_LOG_0 ("bad IP address format.");
+ break;
+ case LIBSPID_ERROR_WL_TEI_VALUE:
+ LIBSPID_EOC_LOG_0 ("Wrong TEI value "
+ "(expected: 3..254)");
+ break;
+ case LIBSPID_ERROR_WL_AUTH_VALUE:
+ LIBSPID_EOC_LOG_0 ("Wrong authorization field "
+ "value (expected: 0..1).");
+ break;
+ case LIBSPID_ERROR_WL_OUTPUT_VALUE:
+ LIBSPID_EOC_LOG_2 ("Wrong output level value "
+ "(expected: 0 or %d..%d)",
+ LIBSPID_EOC_WL_RF_OUTPUT_LEVEL_MIN,
+ LIBSPID_EOC_WL_RF_OUTPUT_LEVEL_MAX);
+ break;
+ case LIBSPID_ERROR_WL_STIME_VALUE:
+ LIBSPID_EOC_LOG_0 ("Malformed start time "
+ "(expected: hh:mm)");
+ break;
+ case LIBSPID_ERROR_WL_ETIME_VALUE:
+ LIBSPID_EOC_LOG_0 ("Malformed end time "
+ "(expected: hh:mm)");
+ break;
+ case LIBSPID_ERROR_WL_DPW_VALUE:
+ LIBSPID_EOC_LOG_0 ("Inappropriate DPW length "
+ "(expected: 16..64)");
+ break;
+ case LIBSPID_ERROR_WL_PTIME_VALUE:
+ LIBSPID_EOC_LOG_0 ("End time has to be greater "
+ "than start time");
+ break;
+ case LIBSPID_ERROR_WL_MAC_DUPLICATE:
+ LIBSPID_EOC_LOG_1 ("MAC address %s is not "
+ "unique key.",key_not_unique );
+ unique_address = LIBSPID_FALSE;
+ break;
+ case LIBSPID_ERROR_WL_IP_DUPLICATE:
+ LIBSPID_EOC_LOG_1 ("IP address %s is not "
+ "unique key.",ip_not_unique );
+ unique_address = LIBSPID_FALSE;
+ break;
+ case LIBSPID_ERROR_WL_TEI_DUPLICATE:
+ LIBSPID_EOC_LOG_0 ("MAC-TEI pair has conflicts with "
+ "an entry in configuration file");
+ break;
+ default:
+ break;
+ }
+ }
+
+ if (unique_address == LIBSPID_FALSE)
+ break;
+ }
+ else if (number_of_error == -1)
+ return LIBSPID_ERROR_PARAM;
+ }
+
+ return ret;
+}
+
+/**
+ * Set output level for all slaves in white_list_conf
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_NOT_FOUND: entry not found
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+extern libspid_error_t
+libspid_eoc_wl_set_output_level (char *output_level)
+{
+ int wl_count_cnf = 0;
+ int ret = -1;
+ int i = 0;
+ libspid_eoc_wl_entry_t wl_entries_cnf[LIBSPID_WHITE_LIST_MAX_STA_NUM];
+ libspid_eoc_wl_entry_t wl_entry;
+
+ if (output_level == NULL)
+ return LIBSPID_ERROR_PARAM;
+
+ ret = libspid_eoc_wl_get_list (wl_entries_cnf, &wl_count_cnf);
+ if ( ret != LIBSPID_SUCCESS)
+ {
+ return ret;
+ }
+
+ for (i = 0; i < wl_count_cnf; i++)
+ {
+ wl_entry = wl_entries_cnf[i];
+ strcpy (wl_entry.output_level, output_level);
+
+ ret = libspid_eoc_wl_set (wl_entry.mac_addr, &wl_entry);
+ if ( ret != LIBSPID_SUCCESS)
+ {
+ return ret;
+ }
+ }
+
+ return LIBSPID_SUCCESS;
+}
+
+/**
+ * Check if slave MAC address exist in white_list.conf and slave is allowed
+ * \param str MAC address string
+ * \return error type (LIBSPID_SUCCESS if success)
+ * \return LIBSPID_ERROR_PARAM: bad input parameters
+ * \return LIBSPID_ERROR_AUTH: slave is not allowed
+ * \return LIBSPID_ERROR_NOT_FOUND: entry not found
+ * \return LIBSPID_ERROR_SYSTEM: system error, see errno for details
+ */
+
+libspid_error_t
+libspid_eoc_wl_authorization (char *mac_addr)
+{
+ int ret = 0;
+ libspid_eoc_wl_entry_t wl_entry;
+
+ if (mac_addr == NULL)
+ return LIBSPID_ERROR_PARAM;
+
+ /* returns the White List entry for a slave with the given MAC address */
+ ret = libspid_eoc_wl_get (mac_addr, &wl_entry);
+ if (ret != LIBSPID_SUCCESS)
+ return ret;
+
+ if (strcmp (wl_entry.auth, "0") == 0)
+ return LIBSPID_ERROR_AUTH;
+
+ return LIBSPID_SUCCESS;
+}
diff --git a/cleopatre/application/managerd/Module b/cleopatre/application/managerd/Module
index 5e47b8b0d9..de048acbc8 100644
--- a/cleopatre/application/managerd/Module
+++ b/cleopatre/application/managerd/Module
@@ -1 +1,2 @@
-SOURCES := bridge.c gpio_event.c managerd.c mme_nl.c vs_mme.c
+SOURCES := bridge.c gpio_event.c managerd.c mme_nl.c vs_mme.c \
+ js_eoc_mme.c vs_eoc_mme.c qos_eoc.c
diff --git a/cleopatre/application/managerd/inc/bridge.h b/cleopatre/application/managerd/inc/bridge.h
index b1d3723e01..5b9599e848 100644
--- a/cleopatre/application/managerd/inc/bridge.h
+++ b/cleopatre/application/managerd/inc/bridge.h
@@ -29,6 +29,7 @@
/** Interfaces name */
#define BR_IFNAME "br0"
#define LO_IFNAME "lo"
+#define PLC_IFNAME "plc0"
#define ETH_IFNAME "eth0"
/** Reception timeout in seconds */
@@ -58,10 +59,9 @@ enum bridge_status bridge_processing(struct managerd_ctx *ctx, uint8_t *buffer,
* \param ctx managerd context.
* \param buffer frame pointer.
* \param len length allowed.
- * \param is_local boolean; TRUE: get packet from loopback, else: get packet from bridge
* \return received length or error code.
*/
-int bridge_receive(struct managerd_ctx *ctx, uint8_t *buffer, int len, int is_local);
+int bridge_receive (struct managerd_ctx *ctx, uint8_t *buffer, int len);
/**
* Send a frame to BR interface.
diff --git a/cleopatre/application/managerd/inc/gpio_event.h b/cleopatre/application/managerd/inc/gpio_event.h
index d2f590acb6..7c69325dc9 100644
--- a/cleopatre/application/managerd/inc/gpio_event.h
+++ b/cleopatre/application/managerd/inc/gpio_event.h
@@ -24,7 +24,10 @@
struct managerd_ctx;
/** GPIO number for SC button and it associated LED */
+#ifdef CONFIG_SIMPLE_CONNECT
#define SC_BUT_GPIO_NUM 1
+#endif
+#define RFS_BUT_GPIO_NUM CONFIG_RFS_GPIO_NUM
/** LED GPIO numbers */
#if !defined (CONFIG_HAVE_POWER_LED)
@@ -38,6 +41,32 @@ struct managerd_ctx;
/** name of the gpio device */
#define GPIO_DEVICE_NAME "/dev/gpio"
+/** Button on/off management */
+#define BUTTON_ON 0
+#define BUTTON_OFF 1
+
+/** RFS button wait time in seconds */
+#define RFS_BUTTON_WAITTIME_SEC 8
+
+/**
+ * GPIO init.
+ *
+ * \param ctx managerd context
+ * \return error code
+ */
+int
+gpio_init (struct managerd_ctx *ctx);
+
+/**
+ * GPIO uninit.
+ *
+ * \param ctx managerd context
+ */
+void
+gpio_uninit (struct managerd_ctx *ctx);
+
+#ifdef CONFIG_SIMPLE_CONNECT
+
/**
* Simple Connect detection event.
*
@@ -48,7 +77,7 @@ int
simple_connect_event (struct managerd_ctx *ctx);
/**
- * Open and set GPIO direction.
+ * Open and set GPIO direction for simple connect
*
* \param ctx managerd context
* \return error code
@@ -64,6 +93,8 @@ simple_connect_init (struct managerd_ctx *ctx);
void
simple_connect_uninit (struct managerd_ctx *ctx);
+#endif /* CONFIG_SIMPLE_CONNECT */
+
/**
* Handle SIGALRM reception.
*
@@ -128,4 +159,29 @@ led_init (struct managerd_ctx *ctx);
void
led_uninit (struct managerd_ctx *ctx);
+/**
+ * Restore factory settings detection event.
+ *
+ * \param ctx managerd context.
+ * \return error code.
+ */
+int
+restore_factory_settings_event (struct managerd_ctx *ctx);
+
+/**
+ * Set GPIO direction for restore factory settings.
+ *
+ * \param ctx managerd context
+ * \return error code
+ */
+int
+restore_factory_settings_init (struct managerd_ctx *ctx);
+
+/**
+ * Reset GPIO value for RFS.
+ *
+ * \param ctx managerd context
+ */
+void
+restore_factory_settings_uninit (struct managerd_ctx *ctx);
#endif /* GPIO_EVENT_H */
diff --git a/cleopatre/application/managerd/inc/js_eoc_mme.h b/cleopatre/application/managerd/inc/js_eoc_mme.h
new file mode 100644
index 0000000000..3e836a85d9
--- /dev/null
+++ b/cleopatre/application/managerd/inc/js_eoc_mme.h
@@ -0,0 +1,79 @@
+/*
+ * cleopatre/application/managerd/inc/js_eoc_mme.h
+ *
+ * (C) Copyright 2009 SPiDCOM Technologies
+ *
+ * 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., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef JS_EOC_MME_H
+#define JS_EOC_MME_H
+
+#include "libmme.h"
+#include "libspid.h"
+#include "managerd.h"
+#include "bridge.h"
+
+typedef struct {
+ uint8_t oui[3];
+ uint8_t index;
+ uint8_t control;
+} __attribute__ ((__packed__)) js_eoc_get_info_req_t;
+
+typedef struct {
+ uint8_t oui[3];
+ uint8_t status;
+ uint16_t tei;
+ uint8_t attenuation;
+ uint8_t snr;
+ uint16_t phy_uplink_speed;
+ uint16_t phy_dwlink_speed;
+ uint8_t output_power;
+ uint32_t tx_success_cnt;
+ uint32_t tx_crc_error_cnt;
+ uint32_t tx_other_error_cnt;
+ uint32_t rx_success_cnt;
+ uint32_t rx_crc_error_cnt;
+ uint32_t rx_other_error_cnt;
+} __attribute__ ((__packed__)) js_eoc_get_info_cnf_t;
+
+typedef struct {
+ uint8_t oui[3];
+ uint8_t index;
+ uint8_t control;
+} __attribute__ ((__packed__)) js_eoc_diagnostic_info_req_t;
+
+typedef struct {
+ uint8_t oui[3];
+ uint8_t status;
+ uint8_t assoc_status;
+ uint8_t nid[7];
+ uint8_t num_slots;
+ uint8_t mmac[6];
+ uint16_t est_avg_phy_rate;
+ uint8_t num_good_assoc_auth;
+ uint16_t num_cannot_assoc;
+ uint32_t num_assoc_failure;
+ uint32_t num_cannot_auth;
+ uint32_t num_leave;
+} __attribute__ ((__packed__)) js_eoc_diagnostic_info_cnf_t;
+
+extern enum bridge_status
+js_eoc_mme_get_info (struct managerd_ctx *ctx, MME_t *request, int len);
+extern enum bridge_status
+js_eoc_mme_diagnostic_info (struct managerd_ctx *ctx, MME_t *request, int len);
+
+#endif /* JS_EOC_MME_H */
diff --git a/cleopatre/application/managerd/inc/managerd.h b/cleopatre/application/managerd/inc/managerd.h
index 381779e68b..57e16a2938 100644
--- a/cleopatre/application/managerd/inc/managerd.h
+++ b/cleopatre/application/managerd/inc/managerd.h
@@ -26,6 +26,8 @@
#include <net/if.h>
#include <linux/if_ether.h>
#include <linux/netlink.h>
+#include <sys/time.h>
+#include <stdio.h> /* for FILE */
#include "../../linux/gpio.h"
#include "libspid.h"
@@ -35,19 +37,57 @@
#define BROADCAST_ADDR "\xff\xff\xff\xff\xff\xff"
+typedef enum {
+ AUTOCONF_IDLE,
+ AUTOCONF_TRANSFER
+} autoconf_state_t;
+
+typedef enum {
+ MANAGERD_IF_BR = 0,
+ MANAGERD_IF_LO = 1,
+ MANAGERD_IF_PLC = 2
+} managerd_if_t;
+
+/** Auto-configure context */
+struct autoconf_ctx {
+ int next_blk_id;
+ FILE *fp;
+ int size;
+ autoconf_state_t state;
+ struct timeval tv;
+ int (*set_timer) (struct autoconf_ctx *, time_t);
+ int (*check_timer) (struct autoconf_ctx *);
+};
+
/** Context structure */
struct managerd_ctx {
int sock_br; /* bridge socket */
int sock_lo; /* loopback socket */
+ int sock_plc; /* plc socket */
int sock_mme; /* netlink socket for rx/tx MME to/from AV stack */
int gpio_fd;
struct sockaddr_ll br_sll;
+ struct sockaddr_ll lo_sll;
+ struct sockaddr_ll plc_sll;
struct sockaddr_nl mme_snl;
uint8_t br_mac_addr[ETH_ALEN];
union gpio_info sc_gpio;
union gpio_info sc_it;
union gpio_info led_gpio;
+ union gpio_info rfs_gpio;
int is_sc_available;
+ int is_rfs_available;
+ struct autoconf_ctx autoconf;
+ int previous_rfs_button_value;
+ struct timeval rfs_start_time;
+ int is_rx_if_plc;
+ managerd_if_t rx_if;
+ int js_eoc_mme_get_info_recv;
+ int js_eoc_mme_diagnostic_info_recv;
+ char file[LIBSPID_UPDATE_FILE_STR_MAX_LEN];
+ char server_ip[LIBSPID_IP_STR_MAX_LEN];
+ char server_port[LIBSPID_UPDATE_PORT_STR_MAX_LEN];
+ char md5_sum[MD5_DIGEST_LENGTH];
/* hpav.info last values */
struct
{
@@ -62,6 +102,12 @@ struct managerd_ctx {
/* Simple Connect button value */
libspid_boolean_t is_sc_button;
} hpav_info;
+ struct timespec qos_last_check;
};
+typedef enum {
+ MANAGERD_SUCCESS,
+ MANAGERD_EOC_MAKE_VS_EOC_GET_DEVICE_INFO_CNF_ERROR
+} managerd_error_t;
+
#endif /* MANAGERD_H */
diff --git a/cleopatre/application/managerd/inc/qos_eoc.h b/cleopatre/application/managerd/inc/qos_eoc.h
new file mode 100644
index 0000000000..aeab3b1a63
--- /dev/null
+++ b/cleopatre/application/managerd/inc/qos_eoc.h
@@ -0,0 +1,41 @@
+/*
+ * cleopatre/application/managerd/inc/qos_eoc.h
+ *
+ * (C) Copyright 2011 SPiDCOM Technologies
+ *
+ * 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., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+#ifndef QOS_EOC_H
+#define QOS_EOC_H
+
+#ifndef __UTESTS__
+# include <sys/ioctl.h>
+#else
+# define SIOCDEVPRIVATE 0
+extern int ioctl (int d, int request, void *argp);
+#endif
+
+struct managerd_ctx;
+
+/**
+ * Check if the files are newer than last update time and configure plcdrv
+ * \param ctx managerd context
+ * \return 0 on success, -1 otherwise
+ */
+int
+qos_eoc_event (struct managerd_ctx *ctx);
+
+#endif /* QOS_EOC_H */
diff --git a/cleopatre/application/managerd/inc/vs_eoc_mme.h b/cleopatre/application/managerd/inc/vs_eoc_mme.h
new file mode 100644
index 0000000000..91a6ad0085
--- /dev/null
+++ b/cleopatre/application/managerd/inc/vs_eoc_mme.h
@@ -0,0 +1,154 @@
+/*
+ * cleopatre/application/managerd/inc/vs_eoc_mme.h
+ *
+ * (C) Copyright 2009 SPiDCOM Technologies
+ *
+ * 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., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+#ifndef VS_EOC_MME_H
+#define VS_EOC_MME_H
+
+#include <linux/if_packet.h>
+#include <netinet/in.h>
+#include <net/if.h>
+#include <linux/if_ether.h>
+#include "../../linux/gpio.h"
+
+#include "libspid.h"
+#include "libmme.h"
+#include "managerd.h"
+#include "bridge.h"
+
+#define AUTOCONF_TAR_FILE "/tmp/config.tar"
+#define AUTOCONF_TAR_SLAVE_FILE "/init.d/S88slave"
+#define AUTOCONF_SLAVE_FILE "/etc/init.d/S88slave"
+#define AUTOCONF_TMP_FILE "/tmp/autoconf.txt"
+#define AUTOCONF_SLAVE_MD5_FILE "/usr/local/etc/md5"
+#define AUTOCONFIG_UNCOMPRESS_ETC_PATH "/etc"
+#define AUTOCONFIG_UNCOMPRESS_PATH "/usr/local/etc"
+#define AUTOCONF_INTERVAL_SEC 30
+
+typedef struct {
+ uint8_t oui[3];
+ uint8_t result;
+ int8_t model_no[64];
+ int8_t sw_version[64];
+ uint8_t downstream_attenuation;
+ uint8_t eth_port_nb;
+} __attribute__ ((__packed__)) vs_eoc_get_device_info_cnf_t;
+
+typedef struct {
+ uint8_t oui[3];
+ uint8_t command;
+} __attribute__ ((__packed__)) vs_eoc_get_device_info_req_t;
+
+typedef struct {
+ uint8_t oui[3];
+ uint8_t protocol;
+ uint8_t md5_sum[MD5_DIGEST_LENGTH];
+} __attribute__ ((__packed__)) vs_eoc_autoconf_start_req_t;
+
+typedef struct {
+ uint8_t oui[3];
+ uint8_t status;
+} __attribute__ ((__packed__)) vs_eoc_autoconf_start_cnf_t;
+
+typedef struct {
+ uint8_t oui[3];
+ uint32_t id;
+ uint32_t len;
+ uint8_t data[LIBSPID_TRANSFER_MAX_SLICE];
+} __attribute__ ((__packed__)) vs_eoc_autoconf_transfer_req_t;
+
+typedef struct {
+ uint8_t oui[3];
+ uint8_t status;
+ uint32_t id;
+} __attribute__ ((__packed__)) vs_eoc_autoconf_transfer_cnf_t;
+
+typedef struct {
+ uint8_t oui[3];
+ uint8_t md5_sum[MD5_DIGEST_LENGTH];
+} __attribute__ ((__packed__)) vs_eoc_autoconf_end_req_t;
+
+typedef struct {
+ uint8_t oui[3];
+ uint8_t status;
+} __attribute__ ((__packed__)) vs_eoc_autoconf_end_cnf_t;
+
+typedef struct {
+ uint8_t oui[3];
+ uint8_t result;
+ uint8_t ip_address[LIBSPID_IP_BIN_LEN];
+ uint8_t netmask[LIBSPID_IP_BIN_LEN];
+ uint8_t broadcast[LIBSPID_IP_BIN_LEN];
+ uint8_t gateway[LIBSPID_IP_BIN_LEN];
+ uint8_t mode;
+} __attribute__ ((__packed__)) vs_mme_eoc_get_network_parameters_cnf_t;
+
+typedef struct {
+ uint8_t oui[3];
+ uint8_t interface;
+} __attribute__ ((__packed__)) vs_mme_eoc_get_network_parameters_req_t;
+
+typedef struct {
+ uint8_t oui[3];
+ uint8_t result;
+} __attribute__ ((__packed__)) vs_mme_eoc_set_network_parameters_cnf_t;
+
+typedef struct {
+ uint8_t oui[3];
+ uint8_t interface;
+ uint8_t ip_address[LIBSPID_IP_BIN_LEN];
+ uint8_t netmask[LIBSPID_IP_BIN_LEN];
+ uint8_t broadcast[LIBSPID_IP_BIN_LEN];
+ uint8_t gateway[LIBSPID_IP_BIN_LEN];
+ uint8_t mode;
+} __attribute__ ((__packed__)) vs_mme_eoc_set_network_parameters_req_t;
+
+typedef struct {
+ uint8_t oui[3];
+ uint8_t output_level;
+} __attribute__ ((__packed__)) vs_mme_eoc_set_output_level_t;
+
+extern enum bridge_status
+vs_mme_eoc_get_device_info (struct managerd_ctx *ctx, MME_t *request,
+ MME_t * confirm, int len);
+extern enum bridge_status
+vs_mme_eoc_autoconf_start (struct managerd_ctx *ctx,
+ MME_t *request, MME_t *confirm, int len);
+extern enum bridge_status
+vs_mme_eoc_autoconf_transfer (struct managerd_ctx *ctx, MME_t *request,
+ MME_t *confirm, int len);
+extern enum bridge_status
+vs_mme_eoc_autoconf_end (struct managerd_ctx *ctx,
+ MME_t *request, MME_t *confirm, int len);
+extern enum bridge_status
+vs_mme_eoc_get_network_parameters (struct managerd_ctx *ctx, MME_t *request,
+ MME_t *confirm, int len);
+extern enum bridge_status
+vs_mme_eoc_set_network_parameters (struct managerd_ctx *ctx, MME_t *request,
+ MME_t *confirm, int len);
+extern enum bridge_status
+vs_eoc_mme_diagnostic_info (struct managerd_ctx *ctx,
+ uint8_t *buffer, int len);
+extern enum bridge_status
+vs_eoc_mme_get_info (struct managerd_ctx *ctx, uint8_t *buffer, int len);
+extern enum bridge_status
+vs_eoc_mme_set_output_level (struct managerd_ctx *ctx,
+ uint8_t *buffer, int len);
+
+#endif /* VS_EOC_MME_H */
diff --git a/cleopatre/application/managerd/inc/vs_mme.h b/cleopatre/application/managerd/inc/vs_mme.h
index 80bd46cf94..e2470d5938 100644
--- a/cleopatre/application/managerd/inc/vs_mme.h
+++ b/cleopatre/application/managerd/inc/vs_mme.h
@@ -27,9 +27,24 @@
#define SPC300_ID 0x0001
#define PLC_VERSION_PATH "/proc/net/plc/version"
+#define FIRMWARE_LABEL "PLC Firmware"
#define MME_RESULT_SUCCESS 0
#define MME_RESULT_FAILURE 1
+#define MME_RESULT_TIMEOUT 2
+#define MME_RESULT_BAD_IDX 2
+
+#define MAX_NVRAM_BLK 64
+
+/** if function fwrite failed during update, retry flash write */
+#define FLASH_RETRY_COUNT 2
+
+/** tftp update action **/
+#define TFTP_UPDATE_ACTION_NONE "0"
+
+/** tftp update status **/
+#define TFTP_UPDATE_SUCCESS "2"
+#define TFTP_UPDATE_FAILED "3"
typedef struct {
uint8_t oui[3];
@@ -60,6 +75,11 @@ typedef struct {
typedef struct {
uint8_t oui[3];
uint8_t result;
+} __attribute__ ((__packed__)) vs_factory_cnf_t;
+
+typedef struct {
+ uint8_t oui[3];
+ uint8_t result;
uint32_t rx_bytes_low;
uint32_t rx_bytes_high;
uint32_t rx_packets_low;
@@ -79,8 +99,105 @@ typedef struct {
uint32_t tx_carrier;
} __attribute__ ((__packed__)) vs_eth_stats_cnf_t;
+typedef struct {
+ uint8_t oui[3];
+ uint8_t index;
+} __attribute__ ((__packed__)) vs_get_nvram_req_t;
+
+typedef struct {
+ uint8_t oui[3];
+ uint8_t result;
+ uint8_t index;
+ uint8_t data[1024];
+} __attribute__ ((__packed__)) vs_get_nvram_cnf_t;
+
+typedef struct {
+ uint8_t oui[3];
+ uint8_t protocol;
+ uint8_t version_id[16];
+ uint32_t arch;
+ uint32_t type;
+ uint8_t board_type[32];
+ uint8_t file[LIBSPID_UPDATE_FILE_STR_MAX_LEN];
+ uint8_t server_ip[LIBSPID_IP_STR_MAX_LEN];
+ uint8_t server_port[LIBSPID_UPDATE_PORT_STR_MAX_LEN];
+ uint8_t md5_sum[MD5_DIGEST_LENGTH];
+} __attribute__ ((__packed__)) vs_update_start_req_t;
+
+typedef struct {
+ uint8_t oui[3];
+ uint8_t status;
+} __attribute__ ((__packed__)) vs_update_start_cnf_t;
+
+typedef struct {
+ uint8_t oui[3];
+ uint32_t id;
+ uint32_t len;
+ uint8_t data[LIBSPID_TRANSFER_MAX_SLICE];
+} __attribute__ ((__packed__)) vs_update_transfer_req_t;
+
+typedef struct {
+ uint8_t oui[3];
+ uint8_t status;
+ uint32_t id;
+} __attribute__ ((__packed__)) vs_update_transfer_cnf_t;
+
+typedef struct {
+ uint8_t oui[3];
+ uint8_t md5_sum[MD5_DIGEST_LENGTH];
+} __attribute__ ((__packed__)) vs_update_end_req_t;
+
+typedef struct {
+ uint8_t oui[3];
+ uint8_t status;
+} __attribute__ ((__packed__)) vs_update_end_cnf_t;
+
+typedef struct {
+ uint8_t oui[3];
+ uint8_t status;
+} __attribute__ ((__packed__)) vs_update_end_ind_t;
+
+struct firmware_slice {
+ uint8_t slice[LIBSPID_TRANSFER_MAX_SLICE];
+ uint32_t size;
+ struct firmware_slice *next;
+};
+
+typedef struct firmware_slice firmware_slice_t;
+
+typedef struct {
+ int lock;
+ int next_blk_id;
+ int bsize;
+ long fsize;
+ int flash_sector;
+ FILE *fp;
+ firmware_slice_t *head;
+ firmware_slice_t *curr;
+ char mtd_name[32];
+ pthread_t timer;
+ pthread_t writer;
+ pthread_mutex_t mutex;
+ int exit_timer;
+ int exit_writer;
+ int nb_img;
+ unsigned char mac[ETH_ALEN];
+ int protocol;
+ int tftp_write;
+} __attribute__ ((__packed__)) update_ctx_t;
+
extern enum bridge_status vs_mme_get_version (struct managerd_ctx *ctx, MME_t *request, MME_t * confirm, int len);
extern enum bridge_status vs_mme_eth_stats (struct managerd_ctx *ctx, MME_t *request, MME_t * confirm, int len);
extern enum bridge_status vs_mme_reset (struct managerd_ctx *ctx, MME_t *request, MME_t *confirm, int len);
-
+extern enum bridge_status vs_mme_reset_handler (struct managerd_ctx *ctx, MME_t *request, MME_t * confirm, int len);
+extern enum bridge_status vs_mme_factory (struct managerd_ctx *ctx,
+ MME_t *request, MME_t *confirm,
+ int len);
+extern enum bridge_status vs_mme_update_start (struct managerd_ctx *ctx, MME_t *request, MME_t *confirm, int len);
+extern enum bridge_status vs_mme_update_transfer (struct managerd_ctx *ctx, MME_t *request, MME_t *confirm, int len);
+extern enum bridge_status vs_mme_update_end (struct managerd_ctx *ctx, MME_t *request, MME_t *confirm, int len);
+extern enum bridge_status vs_mme_tftp_update_end_recv_indication (struct managerd_ctx *ctx, MME_t *request, MME_t *confirm, int len);
+enum bridge_status
+vs_mme_get_nvram (struct managerd_ctx *ctx, MME_t *request,
+ MME_t *confirm, int len);
#endif /* VS_MME_H */
diff --git a/cleopatre/application/managerd/src/bridge.c b/cleopatre/application/managerd/src/bridge.c
index 5d4e3aed73..705e3b2f2e 100644
--- a/cleopatre/application/managerd/src/bridge.c
+++ b/cleopatre/application/managerd/src/bridge.c
@@ -34,6 +34,10 @@
#include <linux/if_ether.h>
#include <asm/byteorder.h>
+#include "libmme.h"
+#include "libspid.h"
+#include "vs_eoc_mme.h"
+#include "js_eoc_mme.h"
#include "bridge.h"
/**
@@ -47,39 +51,140 @@
* \param max_len size max of buffer.
* \return bridge status.
*/
-enum bridge_status bridge_processing(struct managerd_ctx *ctx, uint8_t *buffer, int *len, int max_len)
+enum bridge_status
+bridge_processing (struct managerd_ctx *ctx, uint8_t *buffer, int *len, int max_len)
{
MME_t *mmehdr;
uint8_t confirm_buffer[MAX_PKT_LEN];
MME_t *confirm;
//Check arguments
- assert(ctx != NULL);
- assert(buffer != NULL);
- assert(len != NULL);
- assert((*len > 0) && (*len <= max_len));
+ assert (ctx != NULL);
+ assert (buffer != NULL);
+ assert (len != NULL);
+ assert ((*len > 0) && (*len <= max_len));
mmehdr = (MME_t *) buffer;
confirm = (MME_t *) confirm_buffer;
/* check if this MME needs to be internally processed */
- switch(mmehdr->mmtype)
+ switch (mmehdr->mmtype)
{
case VS_GET_VERSION_REQ:
return vs_mme_get_version (ctx, mmehdr, confirm, MAX_PKT_LEN);
+ case VS_GET_VERSION_CNF:
+ return TO_DROP;
+
case VS_ETH_STATS_REQ:
return vs_mme_eth_stats (ctx, mmehdr, confirm, MAX_PKT_LEN);
+ case VS_ETH_STATS_CNF:
+ return TO_DROP;
+
case VS_RESET_REQ:
return vs_mme_reset (ctx, mmehdr, confirm, MAX_PKT_LEN);
+ case VS_RESET_CNF:
+ return TO_DROP;
+
+ case VS_RESET_IND:
+ return vs_mme_reset_handler (ctx, mmehdr, confirm, MAX_PKT_LEN);
+
+ case VS_FACTORY_REQ:
+ return vs_mme_factory (ctx, mmehdr, confirm, MAX_PKT_LEN);
+
+ case VS_FACTORY_CNF:
+ return TO_DROP;
+
+ case VS_GET_NVRAM_REQ:
+ return vs_mme_get_nvram (ctx, mmehdr, confirm, MAX_PKT_LEN);
+
+ case VS_GET_NVRAM_CNF:
+ return TO_DROP;
+
+ case VS_EOC_GET_DEVICE_INFO_REQ:
+ return vs_mme_eoc_get_device_info (ctx, mmehdr, confirm, MAX_PKT_LEN);
+
+ case VS_EOC_GET_DEVICE_INFO_CNF:
+ return TO_DROP;
+
+ case VS_EOC_AUTOCONF_START_REQ:
+ return vs_mme_eoc_autoconf_start (ctx, mmehdr, confirm, MAX_PKT_LEN);
+
+ case VS_EOC_AUTOCONF_START_CNF:
+ return TO_DROP;
+
+ case VS_EOC_AUTOCONF_TRANSFER_REQ:
+ return vs_mme_eoc_autoconf_transfer (ctx, mmehdr, confirm, MAX_PKT_LEN);
+
+ case VS_EOC_AUTOCONF_TRANSFER_CNF:
+ return TO_DROP;
+
+ case VS_EOC_AUTOCONF_END_REQ:
+ return vs_mme_eoc_autoconf_end (ctx, mmehdr, confirm, MAX_PKT_LEN);
+
+ case VS_EOC_AUTOCONF_END_CNF:
+ return TO_DROP;
+
+ case VS_UPDATE_START_REQ:
+ return vs_mme_update_start (ctx, mmehdr, confirm, MAX_PKT_LEN);
+
+ case VS_UPDATE_START_CNF:
+ return TO_DROP;
+
+ case VS_UPDATE_TRANSFER_REQ:
+ return vs_mme_update_transfer (ctx, mmehdr, confirm, MAX_PKT_LEN);
+
+ case VS_UPDATE_TRANSFER_CNF:
+ return TO_DROP;
+
+ case VS_UPDATE_TRANSFER_IND:
+ return TO_DROP;
+
+ case VS_UPDATE_END_REQ:
+ return vs_mme_update_end (ctx, mmehdr, confirm, MAX_PKT_LEN);
+
+ case VS_UPDATE_END_CNF:
+ return TO_DROP;
+
+ case VS_UPDATE_END_IND:
+ return vs_mme_tftp_update_end_recv_indication (ctx, mmehdr, confirm, MAX_PKT_LEN);
+
+ case JS_EOC_GET_INFO_REQ:
+ return js_eoc_mme_get_info (ctx, mmehdr, *len);
+
+ case JS_EOC_DIAGNOSTIC_INFO_REQ:
+ return js_eoc_mme_diagnostic_info (ctx, mmehdr, *len);
+
+ case VS_EOC_GET_NETWORK_PARAMETERS_REQ:
+ return vs_mme_eoc_get_network_parameters (ctx, mmehdr, confirm, MAX_PKT_LEN);
+
+ case VS_EOC_GET_NETWORK_PARAMETERS_CNF:
+ return TO_DROP;
+
+ case VS_EOC_SET_NETWORK_PARAMETERS_REQ:
+ return vs_mme_eoc_set_network_parameters (ctx, mmehdr, confirm, MAX_PKT_LEN);
+
+ case VS_EOC_SET_NETWORK_PARAMETERS_CNF:
+ return TO_DROP;
+
+ case VS_EOC_GET_TOPO_CNF:
+ return TO_DROP;
+
+ case CM_NW_STATS_CNF:
+ return TO_DROP;
+
default:
break;
}
- /* if not, give it to plcdrv */
- mme_nl_send (ctx, buffer, *len);
+ if ((mmehdr->mmtype < MS_MIN)
+ || (mmehdr->mmtype >= VS_MIN))
+ {
+ /* AV or VS MME: give it to MME interface */
+ mme_nl_send (ctx, buffer, *len);
+ }
return TO_DROP;
}
@@ -90,23 +195,32 @@ enum bridge_status bridge_processing(struct managerd_ctx *ctx, uint8_t *buffer,
* \param ctx managerd context.
* \param buffer frame pointer.
* \param len length allowed.
- * \param is_local boolean; TRUE: get packet from loopback, else: get packet from bridge
* \return received length or error code.
*/
-int bridge_receive(struct managerd_ctx *ctx, uint8_t *buffer, int len, int is_local)
+int
+bridge_receive (struct managerd_ctx *ctx, uint8_t *buffer, int len)
{
- //Receive a raw packet from BR interface
- if(is_local)
+ /* Receive a raw packet */
+ if (MANAGERD_IF_LO == ctx->rx_if)
{
- len = recv(ctx->sock_lo, buffer, len, 0);
+ len = recv (ctx->sock_lo, buffer, len, 0);
+ }
+ else if ((MANAGERD_IF_PLC == ctx->rx_if) && (ctx->is_rx_if_plc))
+ {
+ len = recv (ctx->sock_plc, buffer, len, 0);
+ }
+ else if (MANAGERD_IF_BR == ctx->rx_if)
+ {
+ len = recv (ctx->sock_br, buffer, len, 0);
}
else
{
- len = recv(ctx->sock_br, buffer, len, 0);
+ syslog (LOG_WARNING, "receive failed: undefined interface");
+ return -1;
}
- if(0 >= len)
+ if (0 >= len)
{
- syslog(LOG_WARNING, "receive failed on %s (%s)", is_local ? LO_IFNAME : BR_IFNAME, strerror(errno));
+ syslog (LOG_WARNING, "receive failed (%s)", strerror (errno));
return -1;
}
return len;
@@ -121,22 +235,41 @@ int bridge_receive(struct managerd_ctx *ctx, uint8_t *buffer, int len, int is_lo
* \return error code.
*/
-int bridge_send(struct managerd_ctx *ctx, uint8_t *buffer, int len)
+int
+bridge_send (struct managerd_ctx *ctx, uint8_t *buffer, int len)
{
struct ethhdr *ethhdr;
- int is_local = 0;
ethhdr = (struct ethhdr *)buffer;
+ if (MANAGERD_IF_LO == ctx->rx_if)
+ ctx->rx_if = MANAGERD_IF_BR;
+
/* check destination mac address */
- if(!memcmp (ethhdr->h_dest, ctx->br_mac_addr, ETH_ALEN))
+ if (!memcmp (ethhdr->h_dest, ctx->br_mac_addr, ETH_ALEN))
{
- is_local = 1;
+ ctx->rx_if = MANAGERD_IF_LO;
}
//Send a raw packet to right interface
- len = send (is_local ? ctx->sock_lo : ctx->sock_br, buffer, len, 0);
+ if (MANAGERD_IF_LO == ctx->rx_if)
+ {
+ len = send (ctx->sock_lo, buffer, len, 0);
+ }
+ else if ((ctx->is_rx_if_plc) && (MANAGERD_IF_PLC == ctx->rx_if))
+ {
+ len = send (ctx->sock_plc, buffer, len, 0);
+ }
+ else if (MANAGERD_IF_BR == ctx->rx_if)
+ {
+ len = send (ctx->sock_br, buffer, len, 0);
+ }
+ else
+ {
+ syslog (LOG_WARNING, "send failed: undefined interface");
+ return -1;
+ }
if(0 > len)
{
- syslog(LOG_WARNING, "send failed on %s (%s)", is_local ? LO_IFNAME : BR_IFNAME, strerror(errno));
+ syslog (LOG_WARNING, "send failed (%s)", strerror (errno));
return -1;
}
return 0;
@@ -148,73 +281,82 @@ int bridge_send(struct managerd_ctx *ctx, uint8_t *buffer, int len)
* \param ctx managerd context.
* \return error code.
*/
-int bridge_init(struct managerd_ctx *ctx)
+int
+bridge_init (struct managerd_ctx *ctx)
{
- struct sockaddr_ll sll;
struct ifreq ifr;
//Check arguments
- assert(ctx != NULL);
+ assert (ctx != NULL);
+
+ /* Ticket #2040:
+ * If we are on an EoC slave, we need to listen to plc0 interface */
+#ifdef MANAGERD_SLAVE
+ ctx->is_rx_if_plc = 1;
+#else
+ ctx->is_rx_if_plc = 0;
+#endif
+ ctx->rx_if = MANAGERD_IF_BR;
//Create a receive connection on BR interface
- if(0 > (ctx->sock_br = socket(AF_PACKET, SOCK_RAW, ETH_P_HPAV)))
+ if (0 > (ctx->sock_br = socket (AF_PACKET, SOCK_RAW, ETH_P_HPAV)))
{
- syslog(LOG_WARNING, "cannot open socket on %s (%s)", BR_IFNAME, strerror(errno));
+ syslog (LOG_WARNING, "cannot open socket on %s (%s)", BR_IFNAME, strerror (errno));
return -1;
}
//Prepare BR socket address
- strncpy(ifr.ifr_name, (char*)BR_IFNAME, IFNAMSIZ);
- if(-1 == (ioctl(ctx->sock_br, SIOCGIFINDEX, &ifr)))
+ strncpy (ifr.ifr_name, (char*)BR_IFNAME, IFNAMSIZ);
+ if (-1 == (ioctl (ctx->sock_br, SIOCGIFINDEX, &ifr)))
{
- syslog(LOG_WARNING, "cannot get interface %s index (%s)", BR_IFNAME, strerror(errno));
- close(ctx->sock_br);
+ syslog (LOG_WARNING, "cannot get interface %s index (%s)", BR_IFNAME, strerror (errno));
+ close (ctx->sock_br);
return -1;
}
ctx->br_sll.sll_family = AF_PACKET;
ctx->br_sll.sll_ifindex = ifr.ifr_ifindex;
- ctx->br_sll.sll_protocol = htons(ETH_P_HPAV);
+ ctx->br_sll.sll_protocol = htons (ETH_P_HPAV);
//Find BR mac address
- if(-1 == (ioctl(ctx->sock_br, SIOCGIFHWADDR, &ifr)))
+ if (-1 == (ioctl (ctx->sock_br, SIOCGIFHWADDR, &ifr)))
{
- syslog(LOG_WARNING, "cannot get interface %s mac address (%s)", BR_IFNAME, strerror(errno));
- close(ctx->sock_br);
+ syslog (LOG_WARNING, "cannot get interface %s mac address (%s)", BR_IFNAME, strerror (errno));
+ close (ctx->sock_br);
return -1;
}
- memcpy(ctx->br_mac_addr, ifr.ifr_hwaddr.sa_data, ETH_ALEN);
+ memcpy (ctx->br_mac_addr, ifr.ifr_hwaddr.sa_data, ETH_ALEN);
//Bind BR socket to this interface
- if(-1 == (bind(ctx->sock_br, (struct sockaddr *)&ctx->br_sll, sizeof(struct sockaddr_ll))))
+ if (-1 == (bind (ctx->sock_br, (struct sockaddr *)&ctx->br_sll, sizeof (struct sockaddr_ll))))
{
- syslog(LOG_WARNING, "cannot bind raw socket to interface %s (%s)", BR_IFNAME, strerror(errno));
- close(ctx->sock_br);
+ syslog (LOG_WARNING, "cannot bind raw socket to interface %s (%s)", BR_IFNAME, strerror (errno));
+ close (ctx->sock_br);
return -1;
}
//Create a receive connection on LO interface
- if(0 > (ctx->sock_lo = socket(AF_PACKET, SOCK_RAW, ETH_P_HPAV)))
+ if (0 > (ctx->sock_lo = socket (AF_PACKET, SOCK_RAW, ETH_P_HPAV)))
{
- syslog(LOG_WARNING, "cannot open socket on %s (%s)", LO_IFNAME, strerror(errno));
- close(ctx->sock_br);
+ syslog (LOG_WARNING, "cannot open socket on %s (%s)", LO_IFNAME, strerror (errno));
+ close (ctx->sock_br);
return -1;
}
//Prepare LO socket address
- strncpy(ifr.ifr_name, (char*)LO_IFNAME, IFNAMSIZ);
- if(-1 == (ioctl(ctx->sock_lo, SIOCGIFINDEX, &ifr)))
+ strncpy (ifr.ifr_name, (char*)LO_IFNAME, IFNAMSIZ);
+ if(-1 == (ioctl (ctx->sock_lo, SIOCGIFINDEX, &ifr)))
{
- syslog(LOG_WARNING, "cannot get interface %s index (%s)", LO_IFNAME, strerror(errno));
- close(ctx->sock_br);
- close(ctx->sock_lo);
+ syslog (LOG_WARNING, "cannot get interface %s index (%s)", LO_IFNAME, strerror (errno));
+ close (ctx->sock_br);
+ close (ctx->sock_lo);
return -1;
}
- sll.sll_family = AF_PACKET;
- sll.sll_ifindex = ifr.ifr_ifindex;
- sll.sll_protocol = htons(ETH_P_HPAV);
+ ctx->lo_sll.sll_family = AF_PACKET;
+ ctx->lo_sll.sll_ifindex = ifr.ifr_ifindex;
+ ctx->lo_sll.sll_protocol = htons (ETH_P_HPAV);
//Bind LO socket to this interface
- if(-1 == (bind(ctx->sock_lo, (struct sockaddr *)&sll, sizeof(struct sockaddr_ll))))
+ if (-1 == (bind (ctx->sock_lo, (struct sockaddr *) &ctx->lo_sll, sizeof (struct sockaddr_ll))))
{
syslog (LOG_WARNING, "cannot bind raw socket to interface %s (%s)", LO_IFNAME, strerror (errno));
close (ctx->sock_br);
@@ -222,6 +364,43 @@ int bridge_init(struct managerd_ctx *ctx)
return -1;
}
+ /* Create a receive connection on PLC interface */
+ if (0 > (ctx->sock_plc = socket (AF_PACKET, SOCK_RAW, ETH_P_HPAV)))
+ {
+ syslog (LOG_WARNING, "cannot open socket on %s (%s)", PLC_IFNAME,
+ strerror (errno));
+ close (ctx->sock_br);
+ close (ctx->sock_lo);
+ return -1;
+ }
+
+ /* Prepare PLC socket address */
+ strncpy (ifr.ifr_name, (char*) PLC_IFNAME, IFNAMSIZ);
+ if (-1 == (ioctl (ctx->sock_plc, SIOCGIFINDEX, &ifr)))
+ {
+ syslog (LOG_WARNING, "cannot get interface %s index (%s)",
+ PLC_IFNAME, strerror (errno));
+ close (ctx->sock_br);
+ close (ctx->sock_lo);
+ close (ctx->sock_plc);
+ return -1;
+ }
+ ctx->plc_sll.sll_family = AF_PACKET;
+ ctx->plc_sll.sll_ifindex = ifr.ifr_ifindex;
+ ctx->plc_sll.sll_protocol = htons (ETH_P_HPAV);
+
+ /* Bind PLC socket to this interface */
+ if (-1 == (bind (ctx->sock_plc, (struct sockaddr *) &ctx->plc_sll,
+ sizeof (struct sockaddr_ll))))
+ {
+ syslog (LOG_WARNING, "cannot bind raw socket to interface %s (%s)",
+ PLC_IFNAME, strerror (errno));
+ close (ctx->sock_br);
+ close (ctx->sock_lo);
+ close (ctx->sock_plc);
+ return -1;
+ }
+
return 0;
}
@@ -230,13 +409,19 @@ int bridge_init(struct managerd_ctx *ctx)
*
* \param ctx managerd context.
*/
-void bridge_uninit(struct managerd_ctx *ctx)
+void
+bridge_uninit (struct managerd_ctx *ctx)
{
//Check arguments
- assert(ctx != NULL);
+ assert (ctx != NULL);
//Close BR connections
- close(ctx->sock_br);
+ close (ctx->sock_br);
//Close LO connections
- close(ctx->sock_lo);
+ close (ctx->sock_lo);
+ if (ctx->is_rx_if_plc)
+ {
+ //Close PLC connections
+ close (ctx->sock_plc);
+ }
}
diff --git a/cleopatre/application/managerd/src/gpio_event.c b/cleopatre/application/managerd/src/gpio_event.c
index e157c2eab1..165496c6b4 100644
--- a/cleopatre/application/managerd/src/gpio_event.c
+++ b/cleopatre/application/managerd/src/gpio_event.c
@@ -40,6 +40,50 @@
int gpio_fd = -1;
/**
+ * GPIO init.
+ *
+ * \param ctx managerd context
+ * \return error code
+ */
+int
+gpio_init (struct managerd_ctx *ctx)
+{
+ /* Open GPIO device */
+ if (0 > (ctx->gpio_fd = open (GPIO_DEVICE_NAME, O_RDWR)))
+ {
+ syslog (LOG_WARNING, "cannot open gpio device (%s)", strerror (errno));
+ return -1;
+ }
+
+ /* Set GPIO info for buttons interruption */
+ ctx->sc_it.gpioit.enable = 1;
+ ctx->sc_it.gpioit.mask = 0;
+
+ /* Set GPIO interrupt for buttons */
+ if (0 > ioctl (ctx->gpio_fd, GPIOIOC_SETIT,
+ (unsigned long *) &ctx->sc_it))
+ {
+ syslog (LOG_WARNING, "cannot call ioctl for buttons interruption (%s)", strerror (errno));
+ }
+
+ return 0;
+}
+
+/**
+ * GPIO uninit.
+ *
+ * \param ctx managerd context
+ */
+void
+gpio_uninit (struct managerd_ctx *ctx)
+{
+ /* Close GPIO device */
+ close (ctx->gpio_fd);
+}
+
+#ifdef CONFIG_SIMPLE_CONNECT
+
+/**
* Simple Connect detection event.
*
* \param ctx managerd context
@@ -48,6 +92,9 @@ int gpio_fd = -1;
int
simple_connect_event (struct managerd_ctx *ctx)
{
+ /* Check arguments */
+ assert (ctx != NULL);
+
if (!ctx->is_sc_available)
return 0;
@@ -67,8 +114,110 @@ simple_connect_event (struct managerd_ctx *ctx)
return 0;
}
+#endif /* CONFIG_SIMPLE_CONNECT */
+
+/**
+ * Restore factory settings detection event.
+ *
+ * \param ctx managerd context.
+ * \return error code.
+ */
+int
+restore_factory_settings_event (struct managerd_ctx *ctx)
+{
+ /* Check arguments */
+ assert (ctx != NULL);
+
+ if (!ctx->is_rfs_available) return 0;
+
+ /* Read RFS button GPIO */
+ if (0 > ioctl (ctx->gpio_fd, GPIOIOC_GETVALUE, (unsigned long*) &ctx->rfs_gpio))
+ {
+ syslog (LOG_WARNING, "cannot call ioctl for RFS gpio (%s)", strerror (errno));
+ return -1;
+ }
+
+ /* if RFS button stays on */
+ if (ctx->previous_rfs_button_value != ctx->rfs_gpio.gpioval.val)
+ {
+ /* Store GPIO value for next pass */
+ ctx->previous_rfs_button_value = ctx->rfs_gpio.gpioval.val;
+
+ /* Store time when button is pressed */
+ gettimeofday (&ctx->rfs_start_time, 0);
+
+ }
+ else if (BUTTON_ON == ctx->rfs_gpio.gpioval.val)
+ {
+ struct timeval rfs_now;
+ struct timeval rfs_waittime;
+
+ /* Check if button is pressed */
+ gettimeofday (&rfs_now, 0);
+ timersub (&rfs_now, &ctx->rfs_start_time, &rfs_waittime);
+
+ if (rfs_waittime.tv_sec > RFS_BUTTON_WAITTIME_SEC)
+ {
+ if (libspid_system_factory () != LIBSPID_SUCCESS)
+ {
+ syslog (LOG_WARNING, "Restore system factory failed");
+ return -1;
+ }
+ libspid_system_reboot ();
+ }
+ }
+
+ return 0;
+}
+
/**
- * Open and set GPIO direction.
+ * Set GPIO direction for restore factory settings.
+ *
+ * \param ctx managerd context
+ * \return error code
+ */
+int
+restore_factory_settings_init (struct managerd_ctx *ctx)
+{
+ /* Check arguments */
+ assert (ctx != NULL);
+
+ /* Set GPIO info for RFS button */
+ ctx->rfs_gpio.gpiodir.num = RFS_BUT_GPIO_NUM;
+ ctx->rfs_gpio.gpiodir.dir = SPC300_GPIO_DIRECTION_INPUT;
+
+ /* Set gpio direction for Restore Factory Settings */
+ if(0 > (ioctl(ctx->gpio_fd, GPIOIOC_SETDIRECTION,
+ (unsigned long *) &ctx->rfs_gpio)))
+ {
+ syslog (LOG_WARNING, "cannot call ioctl for RFS gpio (%s)", strerror(errno));
+ }
+ else
+ {
+ ctx->is_rfs_available = 1;
+ ctx->previous_rfs_button_value = BUTTON_OFF;
+ }
+
+ return 0;
+}
+
+/**
+ * Reset GPIO value for RFS.
+ *
+ * \param ctx managerd context
+ */
+void
+restore_factory_settings_uninit (struct managerd_ctx *ctx)
+{
+ /* Check argument */
+ assert (ctx != NULL);
+
+}
+
+#ifdef CONFIG_SIMPLE_CONNECT
+
+/**
+ * Open and set GPIO direction for simple connect.
*
* \param ctx managerd context
* \return error code
@@ -83,17 +232,10 @@ simple_connect_init (struct managerd_ctx *ctx)
ctx->sc_gpio.gpiodir.num = SC_BUT_GPIO_NUM;
ctx->sc_gpio.gpiodir.dir = SPC300_GPIO_DIRECTION_INPUT;
- /* Set GPIO info for SC button interruption */
+ /* Set GPIO info for buttons interruption */
ctx->sc_it.gpioit.enable = 1;
ctx->sc_it.gpioit.mask = (1 << SC_BUT_GPIO_NUM);
- /* Open GPIO device */
- if (0 > (ctx->gpio_fd = open (GPIO_DEVICE_NAME, O_RDWR)))
- {
- syslog (LOG_WARNING, "cannot open gpio device (%s)", strerror (errno));
- return -1;
- }
-
/* Set gpio direction for Simple Connect */
if (0 > ioctl (ctx->gpio_fd, GPIOIOC_SETDIRECTION,
(unsigned long *) &ctx->sc_gpio))
@@ -105,11 +247,11 @@ simple_connect_init (struct managerd_ctx *ctx)
ctx->is_sc_available = 1;
}
- /* Set GPIO interrupt for SC button */
+ /* Set GPIO interrupt for buttons */
if (0 > ioctl (ctx->gpio_fd, GPIOIOC_SETIT,
(unsigned long *) &ctx->sc_it))
{
- syslog (LOG_WARNING, "cannot call ioctl for SC interruption (%s)", strerror (errno));
+ syslog (LOG_WARNING, "cannot call ioctl for buttons interruption (%s)", strerror (errno));
}
return 0;
@@ -126,7 +268,7 @@ simple_connect_uninit (struct managerd_ctx *ctx)
/* Check arguments */
assert (ctx != NULL);
- /* Reet GPIO info for SC button interruption */
+ /* Reset GPIO info for SC button interruption */
ctx->sc_it.gpioit.enable = 0;
ctx->sc_it.gpioit.mask = 0;
@@ -136,11 +278,10 @@ simple_connect_uninit (struct managerd_ctx *ctx)
{
syslog (LOG_WARNING, "cannot call ioctl for SC interruption (%s)", strerror (errno));
}
-
- /* Close GPIO device */
- close (ctx->gpio_fd);
}
+#endif /* CONFIG_SIMPLE_CONNECT */
+
/**
* Handle SIGALRM reception.
*
diff --git a/cleopatre/application/managerd/src/js_eoc_mme.c b/cleopatre/application/managerd/src/js_eoc_mme.c
new file mode 100644
index 0000000000..b204e4eafa
--- /dev/null
+++ b/cleopatre/application/managerd/src/js_eoc_mme.c
@@ -0,0 +1,94 @@
+/*
+ * cleopatre/application/managerd/src/js_eoc_mme.c
+ *
+ * (C) Copyright 2010 SPiDCOM Technologies
+ *
+ * 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., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <syslog.h>
+
+#include "js_eoc_mme.h"
+
+
+ /**
+ * Receive a JS_EOC_GET_INFO MME on the bridge interface.
+ * => Send a VS_EOC_GET_INFO MME to MME interface.
+ *
+ * \param ctx managerd context
+ * \param request MME containg JS_EOC_GET_INFO request
+ * \param len request buffer length
+ * \return error code
+ */
+enum bridge_status
+js_eoc_mme_get_info (struct managerd_ctx *ctx, MME_t *request, int len)
+{
+ assert (NULL != ctx);
+ assert (NULL != request);
+ assert ((len > 0) && (len <= MAX_PKT_LEN));
+
+ /* check for request content */
+ if (memcmp ((char*) request + sizeof (MME_t), OUI_JIANGSU, 3))
+ return TO_DROP;
+
+ /* set SPiDCOM OUI and MMTYPE */
+ memcpy ((char*) request + sizeof (MME_t), OUI_SPIDCOM, 3);
+ request->mmtype = VS_EOC_GET_INFO;
+
+ /* increment counter of OUI and MMTYPE modification */
+ ctx->js_eoc_mme_get_info_recv++;
+
+ /* give request MME to MME interface */
+ mme_nl_send (ctx, (uint8_t*) request, len);
+
+ return TO_DROP;
+}
+
+/**
+ * Receive a JS_EOC_DIAGNOSTIC_INFO MME on the bridge interface.
+ * => Send a VS_EOC_DIAGNOSTIC_INFO MME to MME interface.
+ *
+ * \param ctx managerd context
+ * \param request MME containg JS_EOC_GET_DIAGNOSTIC request
+ * \param len request buffer length
+ * \return error code
+ */
+enum bridge_status
+js_eoc_mme_diagnostic_info (struct managerd_ctx *ctx, MME_t *request, int len)
+{
+ assert (NULL != ctx);
+ assert (NULL != request);
+ assert ((len > 0) && (len <= MAX_PKT_LEN));
+
+ /* check for request content */
+ if (memcmp ((char*) request + sizeof (MME_t), OUI_JIANGSU, 3))
+ return TO_DROP;
+
+ /* set SPiDCOM OUI and MMTYPE */
+ memcpy ((char*) request + sizeof (MME_t), OUI_SPIDCOM, 3);
+ request->mmtype = VS_EOC_DIAGNOSTIC_INFO;
+
+ /* increment counter of OUI and MMTYPE modification */
+ ctx->js_eoc_mme_diagnostic_info_recv++;
+
+ /* give request MME to MME interface */
+ mme_nl_send (ctx, (uint8_t*) request, len);
+
+ return TO_DROP;
+}
diff --git a/cleopatre/application/managerd/src/managerd.c b/cleopatre/application/managerd/src/managerd.c
index 6d6b28c9df..08943c2d49 100644
--- a/cleopatre/application/managerd/src/managerd.c
+++ b/cleopatre/application/managerd/src/managerd.c
@@ -30,6 +30,8 @@
#include "mme_nl.h"
#include "gpio_event.h"
#include "managerd.h"
+#include "libspid.h"
+#include "qos_eoc.h"
/* Global variable indicating if a SIGHUP signal occurred,
* has been caught in managerd signal handler,
@@ -121,7 +123,8 @@ managerd_process_signal (struct managerd_ctx *ctx)
ctx->hpav_info.is_backup_cco = hpav_info.is_backup_cco;
}
- return 0;
+ /* check qos files update */
+ return qos_eoc_event (ctx);
}
/**
@@ -133,20 +136,21 @@ managerd_process_signal (struct managerd_ctx *ctx)
* \param ctx managerd context.
* \return error code.
*/
-static int managerd_process(struct managerd_ctx *ctx)
+static int
+managerd_process (struct managerd_ctx *ctx)
{
uint8_t *buffer;
int result = 0;
int len;
//Check arguments
- assert(ctx != NULL);
+ assert (ctx != NULL);
//Allocate buffer for bridge part
- buffer = (uint8_t*)malloc(MAX_PKT_LEN);
- if(NULL == buffer)
+ buffer = (uint8_t*) malloc (MAX_PKT_LEN);
+ if (NULL == buffer)
{
- syslog(LOG_WARNING, "cannot allocate memory (%s)", strerror(errno));
+ syslog (LOG_WARNING, "cannot allocate memory (%s)", strerror (errno));
return -1;
}
@@ -159,13 +163,16 @@ static int managerd_process(struct managerd_ctx *ctx)
//Configure timeout
timeout.tv_sec = WAIT_TOUT;
timeout.tv_usec = 0;
- FD_ZERO(&readfds);
+ FD_ZERO (&readfds);
FD_ZERO (&exceptfds);
- FD_SET(ctx->sock_br, &readfds);
- FD_SET(ctx->sock_lo, &readfds);
+ FD_SET (ctx->sock_br, &readfds);
+ FD_SET (ctx->sock_lo, &readfds);
FD_SET (ctx->sock_mme, &readfds);
FD_SET (ctx->gpio_fd, &exceptfds);
-
+ if (ctx->is_rx_if_plc)
+ {
+ FD_SET (ctx->sock_plc, &readfds);
+ }
//Select
result = select (ctx->gpio_fd + 1, &readfds, NULL, &exceptfds, &timeout);
@@ -187,24 +194,44 @@ static int managerd_process(struct managerd_ctx *ctx)
}
else if (0 == result)
{
- /* No reception coming */
+ /* No reception coming check rfs button*/
+ if (restore_factory_settings_event (ctx) < 0)
+ break;
+ else if ((ctx->autoconf.check_timer != NULL) && (ctx->autoconf.check_timer (&ctx->autoconf) < 0))
+ break;
+ else
+ continue;
}
else if (FD_ISSET (ctx->sock_br, &readfds)
- || FD_ISSET (ctx->sock_lo, &readfds))
+ || FD_ISSET (ctx->sock_lo, &readfds)
+ || ((ctx->is_rx_if_plc) && FD_ISSET (ctx->sock_plc, &readfds)))
{
+ if (FD_ISSET (ctx->sock_br, &readfds))
+ {
+ ctx->rx_if = MANAGERD_IF_BR;
+ }
+ else if (FD_ISSET (ctx->sock_lo, &readfds))
+ {
+ ctx->rx_if = MANAGERD_IF_LO;
+ }
+ else if ((ctx->is_rx_if_plc) && FD_ISSET (ctx->sock_plc, &readfds))
+ {
+ ctx->rx_if = MANAGERD_IF_PLC;
+ }
//Receive a frame from bridge: process it
- len = bridge_receive(ctx, buffer, MAX_PKT_LEN, FD_ISSET (ctx->sock_lo, &readfds) /* check for local if */);
- if(0 >= len)
+ len = bridge_receive (ctx, buffer, MAX_PKT_LEN);
+ if (0 >= len)
{
result = -1;
- break;
+ continue;
}
+
//Processing this reception
- if(TO_SEND == bridge_processing(ctx, buffer, &len, MAX_PKT_LEN))
+ if (TO_SEND == bridge_processing (ctx, buffer, &len, MAX_PKT_LEN))
{
//Send the process result to bridge interface
- len = bridge_send(ctx, buffer, len);
- if(0 > len)
+ len = bridge_send (ctx, buffer, len);
+ if (0 > len)
{
result = -1;
break;
@@ -214,26 +241,33 @@ static int managerd_process(struct managerd_ctx *ctx)
else if FD_ISSET (ctx->sock_mme, &readfds)
{
//Receive a frame from MME if
- len = mme_nl_receive(ctx, buffer, MAX_PKT_LEN);
- if(0 >= len)
+ len = mme_nl_receive (ctx, buffer, MAX_PKT_LEN);
+ if (0 >= len)
{
result = -1;
break;
}
- //relay it to the bridge
- len = bridge_send(ctx, buffer, len);
- if(0 > len)
+
+ /* Processing this reception */
+ if (TO_SEND == mme_nl_processing (ctx, buffer, &len, MAX_PKT_LEN))
{
- result = -1;
- break;
+ /* Relay it to the bridge */
+ len = bridge_send (ctx, buffer, len);
+ if (0 > len)
+ {
+ result = -1;
+ break;
+ }
}
}
else if (FD_ISSET (ctx->gpio_fd, &exceptfds))
{
+#ifdef CONFIG_SIMPLE_CONNECT
/* Manage simple connect */
- if (0 > simple_connect_event (ctx))
+ if (simple_connect_event (ctx) < 0)
break;
else
+#endif
continue;
}
@@ -247,7 +281,7 @@ static int managerd_process(struct managerd_ctx *ctx)
}
//Freeing buffer
- free(buffer);
+ free (buffer);
return result;
}
@@ -257,39 +291,70 @@ static int managerd_process(struct managerd_ctx *ctx)
* \param ctx managerd context.
* \return error code.
*/
-static int managerd_init(struct managerd_ctx *ctx)
+static int
+managerd_init (struct managerd_ctx *ctx)
{
+ pid_t pid = getpid ();
+
//Check arguments
- assert(ctx != NULL);
+ assert (ctx != NULL);
//Set context
- memset(ctx, '\0', sizeof(struct managerd_ctx));
+ memset (ctx, '\0', sizeof (struct managerd_ctx));
//Initialize bridge part
- if(0 > bridge_init(ctx))
+ if (0 > bridge_init (ctx))
return -1;
//Initialize mme part
if (0 > mme_nl_init (ctx))
{
bridge_uninit (ctx);
+ if (!ctx->is_rx_if_plc)
+ close (ctx->sock_plc);
return -1;
}
+ if (0 > gpio_init (ctx))
+ {
+ bridge_uninit (ctx);
+ mme_nl_uninit (ctx);
+ return -1;
+ }
+
+#ifdef CONFIG_SIMPLE_CONNECT
//Initialize simple connect part (open "/dev/gpio")
if (0 > simple_connect_init (ctx))
{
bridge_uninit (ctx);
mme_nl_uninit (ctx);
+ gpio_uninit (ctx);
return -1;
}
+#endif
/* Initialize led part (need "/dev/gpio") */
if (0 > led_init (ctx))
{
bridge_uninit (ctx);
mme_nl_uninit (ctx);
+#ifdef CONFIG_SIMPLE_CONNECT
simple_connect_uninit (ctx);
+#endif
+ gpio_uninit (ctx);
+ return -1;
+ }
+
+ /* Initialize rfs part (need "/dev/gpio") */
+ if (0 > restore_factory_settings_init (ctx))
+ {
+ bridge_uninit (ctx);
+ mme_nl_uninit (ctx);
+ led_uninit (ctx);
+#ifdef CONFIG_SIMPLE_CONNECT
+ simple_connect_uninit (ctx);
+#endif
+ gpio_uninit (ctx);
return -1;
}
@@ -304,15 +369,61 @@ static int managerd_init(struct managerd_ctx *ctx)
* according to current hpav.info contents. */
is_process_signal_needed = 1;
+ /* set jiangsu send flag and timeout to zero */
+ ctx->js_eoc_mme_get_info_recv = 0;
+ ctx->js_eoc_mme_diagnostic_info_recv = 0;
+
/* Register to hpav.info file update */
- if (LIBSPID_SUCCESS != libspid_system_file_update_register (getpid(),
+ if (LIBSPID_SUCCESS != libspid_system_file_update_register (pid,
LIBSPID_HPAV_INFO_PATH, managerd_signal_handler))
{
- syslog (LOG_WARNING, "libspid system file update register failed");
+ syslog (LOG_WARNING, "libspid system file update register to %s failed",
+ LIBSPID_HPAV_INFO_PATH);
+ bridge_uninit (ctx);
+ mme_nl_uninit (ctx);
+ restore_factory_settings_uninit (ctx);
+ led_uninit (ctx);
+#ifdef CONFIG_SIMPLE_CONNECT
+ simple_connect_uninit (ctx);
+#endif
+ gpio_uninit (ctx);
+ return -1;
+ }
+
+ /* Register to eoc.conf file update */
+ if (LIBSPID_SUCCESS != libspid_system_file_update_register (pid,
+ LIBSPID_EOC_CONF_PATH, managerd_signal_handler))
+ {
+ syslog (LOG_WARNING, "libspid system file update register to %s failed",
+ LIBSPID_EOC_CONF_PATH);
bridge_uninit (ctx);
mme_nl_uninit (ctx);
+ restore_factory_settings_uninit (ctx);
led_uninit (ctx);
+#ifdef CONFIG_SIMPLE_CONNECT
simple_connect_uninit (ctx);
+#endif
+ gpio_uninit (ctx);
+ libspid_system_file_update_unregister (getpid (), LIBSPID_HPAV_INFO_PATH);
+ return -1;
+ }
+
+ /* Register to service.conf file update */
+ if (LIBSPID_SUCCESS != libspid_system_file_update_register (pid,
+ LIBSPID_SERVICE_CONF_PATH, managerd_signal_handler))
+ {
+ syslog (LOG_WARNING, "libspid system file update register to %s failed",
+ LIBSPID_SERVICE_CONF_PATH);
+ bridge_uninit (ctx);
+ mme_nl_uninit (ctx);
+ restore_factory_settings_uninit (ctx);
+ led_uninit (ctx);
+#ifdef CONFIG_SIMPLE_CONNECT
+ simple_connect_uninit (ctx);
+#endif
+ gpio_uninit (ctx);
+ libspid_system_file_update_unregister (getpid (), LIBSPID_HPAV_INFO_PATH);
+ libspid_system_file_update_unregister (getpid (), LIBSPID_EOC_CONF_PATH);
return -1;
}
@@ -327,25 +438,37 @@ static int managerd_init(struct managerd_ctx *ctx)
*
* \param ctx managerd context.
*/
-static void managerd_uninit(struct managerd_ctx *ctx)
+static void
+managerd_uninit (struct managerd_ctx *ctx)
{
+ pid_t pid = getpid ();
+
//Check arguments
- assert(ctx != NULL);
+ assert (ctx != NULL);
+
+ /* Unregister to hpav.info, eoc.conf, service.conf files update */
+ libspid_system_file_update_unregister (pid, LIBSPID_HPAV_INFO_PATH);
+ libspid_system_file_update_unregister (pid, LIBSPID_EOC_CONF_PATH);
+ libspid_system_file_update_unregister (pid, LIBSPID_SERVICE_CONF_PATH);
//Uninitialize bridge part
- bridge_uninit(ctx);
+ bridge_uninit (ctx);
//Uninitialize mme part
- mme_nl_uninit(ctx);
+ mme_nl_uninit (ctx);
+
+ /* Uninitialize rfs part (need "/dev/gpio") */
+ restore_factory_settings_uninit (ctx);
/* Uninitialize led part (need "/dev/gpio") */
led_uninit (ctx);
+#ifdef CONFIG_SIMPLE_CONNECT
//Uninitialize simple connect part (close "/dev/gpio")
- simple_connect_uninit(ctx);
+ simple_connect_uninit (ctx);
+#endif
- /* Unregister to file update. */
- libspid_system_file_update_unregister (getpid (), LIBSPID_HPAV_INFO_PATH);
+ gpio_uninit (ctx);
}
/**
@@ -355,33 +478,36 @@ static void managerd_uninit(struct managerd_ctx *ctx)
* \param argv arguments pointer.
* \return error code.
*/
-int main(int argc, char **argv)
+int
+main (int argc, char **argv)
{
struct managerd_ctx ctx;
int result;
//Open syslog file
- openlog("managerd", LOG_PID, LOG_DAEMON);
+ openlog ("managerd", LOG_PID, LOG_DAEMON);
//Initialize manager daemon
- if(0 != managerd_init(&ctx))
+ if (0 != managerd_init (&ctx))
{
- closelog();
+ closelog ();
return -1;
}
syslog (LOG_NOTICE, "Manager Daemon Running");
+ // send reset info (VS_MME_RESET.IND)
+ vs_mme_reset_ind ();
+
//Start manager daemon core
- result = managerd_process(&ctx);
+ result = managerd_process (&ctx);
syslog (LOG_NOTICE, "Manager Daemon exiting");
//Uninitialize manager daemon
- managerd_uninit(&ctx);
+ managerd_uninit (&ctx);
//Open syslog file
- closelog();
+ closelog ();
return result;
}
-
diff --git a/cleopatre/application/managerd/src/mme_nl.c b/cleopatre/application/managerd/src/mme_nl.c
index 3ffae23918..daa745c25b 100644
--- a/cleopatre/application/managerd/src/mme_nl.c
+++ b/cleopatre/application/managerd/src/mme_nl.c
@@ -39,6 +39,53 @@
#include "ioctl.h"
#include "mme_nl.h"
+#include "bridge.h"
+#include "vs_eoc_mme.h"
+
+/**
+ * Processing a received frame from MME interface before sending it.
+ * Analyse received frame on buffer pointer, processing it
+ * and give it on buffer pointer.
+ *
+ * \param ctx managerd context.
+ * \param buffer received frame.
+ * \param len received frame length that will be updated
+ * \param max_len size max of buffer
+ * \return bridge status
+ */
+extern enum bridge_status
+mme_nl_processing (struct managerd_ctx *ctx, uint8_t *buffer,
+ int *len, int max_len)
+{
+ MME_t *mmehdr;
+
+ /* Check arguments */
+ assert (ctx != NULL);
+ assert (buffer != NULL);
+ assert (len != NULL);
+ assert ((*len > 0) && (*len <= max_len));
+
+ mmehdr = (MME_t *) buffer;
+
+ /* Check if this MME needs to be internally processed */
+ switch (mmehdr->mmtype)
+ {
+ case VS_EOC_GET_INFO | MME_CNF:
+ return vs_eoc_mme_get_info (ctx, (uint8_t *) mmehdr, *len);
+
+ case VS_EOC_DIAGNOSTIC_INFO | MME_CNF:
+ return vs_eoc_mme_diagnostic_info (ctx, (uint8_t *) mmehdr, *len);
+
+ case VS_EOC_CCO_SET_OUT_LEV | MME_IND:
+ return vs_eoc_mme_set_output_level (ctx, (uint8_t *) mmehdr,
+ *len);
+
+ default:
+ break;
+ }
+
+ return TO_SEND;
+}
#define PLC_IFNAME "plc0"
@@ -50,7 +97,8 @@
* \param len length allowed.
* \return received length or error code.
*/
-int mme_nl_receive(struct managerd_ctx *ctx, uint8_t *buffer, int len)
+int
+mme_nl_receive (struct managerd_ctx *ctx, uint8_t *buffer, int len)
{
struct msghdr msg;
struct nlmsghdr *nlh;
@@ -59,13 +107,13 @@ int mme_nl_receive(struct managerd_ctx *ctx, uint8_t *buffer, int len)
int msg_len;
/* create message from MME netlink */
- nlh=(struct nlmsghdr *)malloc (sizeof(struct nlmsghdr) + len);
- memset(nlh, 0, sizeof(struct nlmsghdr) + len);
- memset(&kernel_addr, 0, sizeof(kernel_addr));
+ nlh = (struct nlmsghdr *)malloc (sizeof (struct nlmsghdr) + len);
+ memset (nlh, 0, sizeof (struct nlmsghdr) + len);
+ memset (&kernel_addr, 0, sizeof (kernel_addr));
iov.iov_base = (void *)nlh;
iov.iov_len = NLMSG_LENGTH(len);
msg.msg_name = (void *)&kernel_addr;
- msg.msg_namelen = sizeof(kernel_addr);
+ msg.msg_namelen = sizeof (kernel_addr);
msg.msg_iov = &iov;
msg.msg_iovlen = 1;
@@ -97,7 +145,8 @@ int mme_nl_receive(struct managerd_ctx *ctx, uint8_t *buffer, int len)
* \param len length to send.
* \return error code.
*/
-int mme_nl_send(struct managerd_ctx *ctx, uint8_t *buffer, int len)
+int
+mme_nl_send (struct managerd_ctx *ctx, uint8_t *buffer, int len)
{
struct sockaddr_nl kernel_addr;
struct nlmsghdr *nlh;
@@ -106,31 +155,30 @@ int mme_nl_send(struct managerd_ctx *ctx, uint8_t *buffer, int len)
struct msghdr msg;
/* fill the netlink address to send msg */
- memset(&kernel_addr, 0, sizeof(kernel_addr));
+ memset (&kernel_addr, 0, sizeof (kernel_addr));
kernel_addr.nl_family = AF_NETLINK;
kernel_addr.nl_pid = 0; /* For Linux Kernel */
kernel_addr.nl_groups = 0; /* unicast */
/* fill message */
- nlh=(struct nlmsghdr *)malloc (sizeof(struct nlmsghdr) + len);
- memset(nlh, 0, sizeof(struct nlmsghdr));
+ nlh = (struct nlmsghdr *)malloc (sizeof (struct nlmsghdr) + len);
+ memset (nlh, 0, sizeof (struct nlmsghdr));
memcpy (NLMSG_DATA (nlh), buffer, len);
/* fill the netlink message header */
nlh->nlmsg_len = NLMSG_LENGTH(len);
- nlh->nlmsg_pid = getpid(); /* self pid */
+ nlh->nlmsg_pid = getpid (); /* self pid */
nlh->nlmsg_flags = 0;
/* fill message info */
- memset(&msg, 0, sizeof(msg));
+ memset (&msg, 0, sizeof (msg));
msg.msg_name = (void *)&kernel_addr;
- msg.msg_namelen = sizeof(kernel_addr);
+ msg.msg_namelen = sizeof (kernel_addr);
msg.msg_iov = &iov;
msg.msg_iovlen = 1;
iov.iov_base = (void *)nlh;
iov.iov_len = NLMSG_LENGTH(len);
-
- if((msg_len = sendmsg (ctx->sock_mme, &msg, 0)) < 0)
+ if ((msg_len = sendmsg (ctx->sock_mme, &msg, 0)) < 0)
{
syslog (LOG_WARNING, "sendmsg error (%d)", errno);
free (nlh);
@@ -146,69 +194,39 @@ int mme_nl_send(struct managerd_ctx *ctx, uint8_t *buffer, int len)
* \param ctx managerd context.
* \return error code.
*/
-int mme_nl_init(struct managerd_ctx *ctx)
+int
+mme_nl_init (struct managerd_ctx *ctx)
{
struct plcdrv_setpid user_data;
struct ifreq ifr;
- int sock_plc;
- struct sockaddr_ll plc_sll;
//Check arguments
- assert(ctx != NULL);
-
+ assert (ctx != NULL);
+
memset (&user_data, 0, sizeof (struct plcdrv_setpid));
memset (&ifr, 0, sizeof (struct ifreq));
- /* Create a receive connection on PLC interface */
- if (0 > (sock_plc = socket (AF_PACKET, SOCK_RAW, ETH_P_HPAV)))
- {
- syslog (LOG_WARNING, "cannot open socket on %s (%s)", PLC_IFNAME,
- strerror (errno));
- return -1;
- }
-
- /* Prepare PLC socket address */
- strncpy (ifr.ifr_name, (char*) PLC_IFNAME, IFNAMSIZ);
- if (-1 == (ioctl (sock_plc, SIOCGIFINDEX, &ifr)))
- {
- syslog (LOG_WARNING, "cannot get interface %s index (%s)",
- PLC_IFNAME, strerror (errno));
- close (sock_plc);
- return -1;
- }
- plc_sll.sll_family = AF_PACKET;
- plc_sll.sll_ifindex = ifr.ifr_ifindex;
- plc_sll.sll_protocol = htons (ETH_P_HPAV);
-
- /* Bind PLC socket to this interface */
- if (-1 == (bind (sock_plc, (struct sockaddr *) &plc_sll,
- sizeof (struct sockaddr_ll))))
- {
- syslog (LOG_WARNING, "cannot bind raw socket to interface %s (%s)",
- PLC_IFNAME, strerror (errno));
- close (sock_plc);
- return -1;
- }
-
/* Set managerd pid for reception on mme netlink */
user_data.nl = NETLINK_PLC_MME;
user_data.pid = getpid ();
ifr.ifr_data = (void *) &user_data;
strncpy (ifr.ifr_name, (char*) PLC_IFNAME, IFNAMSIZ);
- if (0 > (ioctl (sock_plc, PLCDRV_IOCTL_SETPID, &ifr)))
+ if (0 > (ioctl (ctx->sock_plc, PLCDRV_IOCTL_SETPID, &ifr)))
{
syslog (LOG_WARNING, "cannot call ioctl SETPID (%s)", strerror (errno));
- close (sock_plc);
return -1;
}
- /* We do not need PLC connection anymore => close it. */
- close (sock_plc);
+ if (!ctx->is_rx_if_plc)
+ {
+ /* We do not need PLC connection anymore => close it. */
+ close (ctx->sock_plc);
+ }
/* open netlink socket */
if (0 > (ctx->sock_mme = socket (PF_NETLINK, SOCK_RAW, NETLINK_PLC_MME)))
{
- syslog (LOG_WARNING, "cannot open socket on %s (%s)", MME_IFNAME, strerror(errno));
+ syslog (LOG_WARNING, "cannot open socket on %s (%s)", MME_IFNAME, strerror (errno));
return -1;
}
memset (&ctx->mme_snl, 0, sizeof (ctx->mme_snl));
@@ -230,12 +248,13 @@ int mme_nl_init(struct managerd_ctx *ctx)
*
* \param ctx managerd context.
*/
-void mme_nl_uninit(struct managerd_ctx *ctx)
+void
+mme_nl_uninit (struct managerd_ctx *ctx)
{
//Check arguments
- assert(ctx != NULL);
+ assert (ctx != NULL);
//Close MME connections
- close(ctx->sock_mme);
+ close (ctx->sock_mme);
}
diff --git a/cleopatre/application/managerd/src/qos_eoc.c b/cleopatre/application/managerd/src/qos_eoc.c
new file mode 100644
index 0000000000..db65c9792a
--- /dev/null
+++ b/cleopatre/application/managerd/src/qos_eoc.c
@@ -0,0 +1,77 @@
+/*
+ * cleopatre/application/managerd/src/qos_eoc.c
+ *
+ * (C) Copyright 2011 SPiDCOM Technologies
+ *
+ * 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., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+#include <stdio.h>
+#include <string.h>
+#include <syslog.h>
+#include <errno.h>
+#include <net/if.h>
+#include <time.h>
+
+#include "libspid.h"
+#include "bridge.h"
+#include "qos_eoc.h"
+
+int
+qos_eoc_event (struct managerd_ctx *ctx)
+{
+ struct ifreq ifr;
+ memset (&ifr, 0, sizeof (struct ifreq));
+ strncpy (ifr.ifr_name, (char*) PLC_IFNAME, IFNAMSIZ);
+
+ /* check if file eoc.conf has changed */
+ if (libspid_system_file_is_updated (ctx->qos_last_check,
+ LIBSPID_EOC_CONF_PATH))
+ {
+ /* get service type */
+ libspid_service_type_t service_type = libspid_eoc_service_type_get ();
+ ifr.ifr_data = (void *) &service_type;
+ /* send configuration to plcdrv */
+ if (0 > ioctl (ctx->sock_plc, PLCDRV_IOCTL_SETQOS_TYPE, &ifr))
+ {
+ syslog (LOG_ERR, "cannot call ioctl SETQOS_TYPE (%s)",
+ strerror (errno));
+ return -1;
+ }
+ }
+
+ /* check if file service.conf has changed */
+ if (libspid_system_file_is_updated (ctx->qos_last_check,
+ LIBSPID_SERVICE_CONF_PATH))
+ {
+ /* get qos rules */
+ plcdrv_qos_rules_t qos_rules;
+ if (LIBSPID_SUCCESS != libspid_eoc_qos_rules_get (&qos_rules))
+ return -1;
+ ifr.ifr_data = (void *) &qos_rules;
+ /* send configuration to plcdrv */
+ if (0 > ioctl (ctx->sock_plc, PLCDRV_IOCTL_SETQOS_RULES, &ifr))
+ {
+ syslog (LOG_ERR, "cannot call ioctl SETQOS_RULES (%s)",
+ strerror (errno));
+ return -1;
+ }
+ }
+
+ /* update time of change */
+ clock_gettime (CLOCK_REALTIME, &ctx->qos_last_check);
+
+ return 0;
+}
diff --git a/cleopatre/application/managerd/src/vs_eoc_mme.c b/cleopatre/application/managerd/src/vs_eoc_mme.c
new file mode 100644
index 0000000000..42dbd3168c
--- /dev/null
+++ b/cleopatre/application/managerd/src/vs_eoc_mme.c
@@ -0,0 +1,886 @@
+/*
+ * cleopatre/application/managerd/src/eoc.c
+ *
+ * (C) Copyright 2009 SPiDCOM Technologies
+ *
+ * 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., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <unistd.h>
+#include <errno.h>
+#include <linux/if_packet.h>
+#include <sys/ioctl.h>
+#include <net/if.h>
+#include <syslog.h>
+#include <assert.h>
+#include <linux/if_ether.h>
+#include <asm/byteorder.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/wait.h>
+
+#include "libspid.h"
+#include "libmme.h"
+#include "vs_mme.h"
+#include "vs_eoc_mme.h"
+#include "openssl_md5.h"
+
+extern update_ctx_t update_ctx;
+
+static void
+_prepare_confirm (struct managerd_ctx *ctx, MME_t *request,
+ MME_t *confirm, int len)
+{
+ memset (confirm, '\0', len);
+ memcpy (confirm->mme_dest, request->mme_src, ETH_ALEN);
+ memcpy (confirm->mme_src, ctx->br_mac_addr, ETH_ALEN);
+ confirm->mtype = request->mtype;
+ confirm->mmv = request->mmv;
+ confirm->mmtype = (request->mmtype & ~MME_TYPE_MASK) | MME_CNF;
+ confirm->fmi = 0;
+}
+
+/**
+ * Send a VS_EOC_GET_DEVICE_INFO MME to BR interface.
+ *
+ * \param ctx managerd context.
+ * \param request MME containg VS_EOC_GET_DEVICE_INFO request.
+ * \param confirm MME buffer to put VS_EOC_GET_DEVICE_INFO confirm.
+ * \param len confirm buffer length.
+ * \return error code.
+ */
+enum bridge_status
+vs_mme_eoc_get_device_info (struct managerd_ctx *ctx, MME_t *request,
+ MME_t *confirm, int len)
+{
+ vs_eoc_get_device_info_cnf_t *get_device_info_cnf;
+ vs_eoc_get_device_info_req_t *get_device_info_req;
+ spidcom_nvram_t nvram;
+ spidcom_image_desc_t image_desc;
+ char mtd_name[64];
+ uint8_t default_downstream_attenuation;
+ char image_version[LIBSPID_IMAGE_VERSION_STR_MAX_LEN];
+
+ assert (NULL != ctx);
+ assert (NULL != request);
+ assert (NULL != confirm);
+ assert ((unsigned int) len >= sizeof (vs_eoc_get_device_info_cnf_t)
+ + sizeof (MME_t));
+
+ /* Init variables */
+ memset (nvram.product_name, 0, 64);
+ nvram.eth1_port_nb = 0;
+ memset (mtd_name, 0, sizeof (mtd_name));
+ memset (image_desc.description, 0, 64);
+ default_downstream_attenuation = 0;
+
+ get_device_info_req = (vs_eoc_get_device_info_req_t *)
+ ((unsigned char*) request + sizeof (MME_t));
+ get_device_info_cnf = (vs_eoc_get_device_info_cnf_t *)
+ ((unsigned char*) confirm + sizeof (MME_t));
+
+ /* check for request content */
+ if (memcmp (get_device_info_req->oui, OUI_SPIDCOM, 3))
+ return TO_DROP;
+
+ /* prepare confirm packet */
+ _prepare_confirm (ctx, request, confirm, len);
+
+ /* set get_version inside confirm buffer */
+ memcpy (get_device_info_cnf->oui, OUI_SPIDCOM, 3);
+ get_device_info_cnf->result = 0;
+
+ if (libspid_system_get_nvram (&nvram) != LIBSPID_SUCCESS)
+ return TO_DROP;
+
+ /* Get model number */
+ memcpy (get_device_info_cnf->model_no, nvram.product_name, 64);
+
+ /* Get port amount */
+ get_device_info_cnf->eth_port_nb = nvram.eth1_port_nb;
+
+ memset (image_version, 0, LIBSPID_IMAGE_VERSION_STR_MAX_LEN-1);
+
+ if (libspid_image_get_running_version (image_version) != LIBSPID_SUCCESS)
+ return TO_DROP;
+
+ /* Get software version */
+ memcpy (get_device_info_cnf->sw_version, image_version,
+ LIBSPID_IMAGE_VERSION_STR_MAX_LEN-1);
+
+ /* Get downstream attenuation */
+ get_device_info_cnf->downstream_attenuation
+ = default_downstream_attenuation;
+
+ /* send confirm MME */
+ bridge_send (ctx, (uint8_t *)confirm,
+ sizeof (MME_t) + sizeof (vs_eoc_get_device_info_cnf_t));
+
+ return TO_DROP;
+}
+
+static int
+_set_timer (struct autoconf_ctx *ctx, time_t sec)
+{
+ gettimeofday (&ctx->tv, NULL);
+ ctx->tv.tv_sec += sec;
+
+ return 1;
+}
+
+static int
+_check_timer (struct autoconf_ctx *ctx)
+{
+ struct timeval ctv;
+
+ gettimeofday (&ctv, NULL);
+
+ if ((ctv.tv_sec > ctx->tv.tv_sec) && (ctx->state == AUTOCONF_TRANSFER))
+ {
+ ctx->state = AUTOCONF_IDLE;
+ return 1;
+ }
+ else
+ return 0;
+}
+
+/**
+ * Send a VS_EOC_AUTOCONF_START MME to BR interface
+ *
+ * \param ctx managerd context
+ * \param request MME containg VS_EOC_AUTOCONF_START request
+ * \param confirm MME buffer to put VS_EOC_AUTOCONF_START confirm
+ * \param len confirm buffer length
+ * \return error code
+ */
+extern enum bridge_status
+vs_mme_eoc_autoconf_start (struct managerd_ctx *ctx, MME_t *request,
+ MME_t *confirm, int len)
+{
+ vs_eoc_autoconf_start_req_t *autoconf_start_req;
+ vs_eoc_autoconf_start_cnf_t *autoconf_start_cnf;
+ int ret;
+ char enable[LIBSPID_CONFIG_LINE_MAX_LEN] = {0};
+ unsigned char md5_sum[MD5_DIGEST_LENGTH] = {0};
+ FILE *fp;
+
+ assert (ctx != NULL);
+ assert (request != NULL);
+ assert (confirm != NULL);
+ assert ((unsigned int) len >= sizeof (vs_eoc_autoconf_start_cnf_t)
+ + sizeof (MME_t));
+
+ /* check for request content */
+ if (memcmp ((char*) request + sizeof (MME_t), OUI_SPIDCOM, 3))
+ return TO_DROP;
+
+ /* check if remote configuration is allowed */
+ ret = libspid_config_read_item (LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_REMOTE_UPDATE,
+ enable, LIBSPID_CONFIG_LINE_MAX_LEN);
+
+ if (ret == LIBSPID_SUCCESS && strcmp (enable, "no") == 0)
+ return TO_DROP;
+
+ autoconf_start_req = (vs_eoc_autoconf_start_req_t*)
+ ((unsigned char*) request + sizeof (MME_t));
+ autoconf_start_cnf = (vs_eoc_autoconf_start_cnf_t*)
+ ((unsigned char*) confirm + sizeof (MME_t));
+
+ /* prepare confirm packet */
+ _prepare_confirm (ctx, request, confirm, len);
+ memcpy (autoconf_start_cnf->oui, OUI_SPIDCOM, 3);
+
+ if (access (AUTOCONF_SLAVE_MD5_FILE, F_OK) == 0)
+ {
+ if ((fp = fopen (AUTOCONF_SLAVE_MD5_FILE, "r")) != NULL)
+ {
+ if (fread (md5_sum, 1, MD5_DIGEST_LENGTH, fp)
+ != MD5_DIGEST_LENGTH)
+ {
+ fclose (fp);
+ return TO_DROP;
+ }
+ fclose (fp);
+ }
+ else
+ return TO_DROP;
+ }
+
+ if (ctx->autoconf.state != AUTOCONF_IDLE)
+ {
+ autoconf_start_cnf->status = LIBSPID_EOC_AUTOCONF_START_MODEM_BUSY;
+ }
+ else if (autoconf_start_req->protocol > LIBSPID_TRANSFER_PROTOCOL)
+ {
+ autoconf_start_cnf->status = LIBSPID_EOC_AUTOCONF_START_BAD_PROTOCOL;
+ }
+ else if (memcmp (md5_sum, autoconf_start_req->md5_sum, MD5_DIGEST_LENGTH)
+ == 0)
+ {
+ autoconf_start_cnf->status = LIBSPID_EOC_AUTOCONF_START_CONFIG_EXIST;
+ }
+ else
+ {
+ ctx->autoconf.fp = fopen (AUTOCONF_TAR_FILE, "wb");
+
+ if (ctx->autoconf.fp == NULL)
+ {
+ syslog (LOG_WARNING,"Cannot open configure file %s for writing",
+ AUTOCONF_TAR_FILE);
+ autoconf_start_cnf->status = LIBSPID_EOC_AUTOCONF_START_FAILED;
+ }
+ else
+ {
+ ctx->autoconf.set_timer = &_set_timer;
+ ctx->autoconf.check_timer = &_check_timer;
+ (*ctx->autoconf.set_timer) (&ctx->autoconf,
+ AUTOCONF_INTERVAL_SEC);
+
+ ctx->autoconf.state = AUTOCONF_TRANSFER;
+ autoconf_start_cnf->status = LIBSPID_EOC_AUTOCONF_START_SUCCESS;
+ ctx->autoconf.next_blk_id = 1;
+ }
+ }
+
+ /* send confirmation MME */
+ bridge_send (ctx, (uint8_t*) confirm,
+ sizeof (MME_t) + sizeof (vs_eoc_autoconf_start_cnf_t));
+
+ return TO_DROP;
+}
+
+/**
+ * Send a VS_EOC_AUTOCONF_TRANSFER MME to BR interface
+ *
+ * \param ctx managerd context
+ * \param request MME containg VS_EOC_AUTOCONF_TRANSFER request
+ * \param confirm MME buffer to put VS_EOC_AUTOCONF_TRANSFER confirm
+ * \param len confirm buffer length
+ * \return error code
+ */
+extern enum bridge_status
+vs_mme_eoc_autoconf_transfer (struct managerd_ctx *ctx, MME_t *request,
+ MME_t *confirm, int len)
+{
+ vs_eoc_autoconf_transfer_req_t *autoconf_transfer_req;
+ vs_eoc_autoconf_transfer_cnf_t *autoconf_transfer_cnf;
+
+ assert (ctx != NULL);
+ assert (request != NULL);
+ assert (confirm != NULL);
+ assert ((unsigned int) len >= sizeof (vs_eoc_autoconf_transfer_cnf_t)
+ + sizeof (MME_t));
+
+ /* check for request content */
+ if (memcmp ((char*) request + sizeof (MME_t), OUI_SPIDCOM, 3))
+ return TO_DROP;
+
+ autoconf_transfer_req = (vs_eoc_autoconf_transfer_req_t*)
+ ((unsigned char*) request + sizeof (MME_t));
+ autoconf_transfer_cnf = (vs_eoc_autoconf_transfer_cnf_t*)
+ ((unsigned char*) confirm + sizeof (MME_t));
+
+ /* prepare confirm packet */
+ _prepare_confirm (ctx, request, confirm, len);
+ memcpy (autoconf_transfer_cnf->oui, OUI_SPIDCOM, 3);
+
+ if (ctx->autoconf.state != AUTOCONF_TRANSFER)
+ {
+ autoconf_transfer_cnf->status = LIBSPID_EOC_AUTOCONF_TRANSFER_FAILED;
+ autoconf_transfer_cnf->id = 0;
+ }
+ else if ((unsigned int) ctx->autoconf.next_blk_id
+ == autoconf_transfer_req->id)
+ {
+ int nb_written;
+
+ nb_written = fwrite (autoconf_transfer_req->data, 1,
+ autoconf_transfer_req->len, ctx->autoconf.fp);
+ if ((unsigned int) nb_written == autoconf_transfer_req->len)
+ {
+ autoconf_transfer_cnf->status = LIBSPID_UPDATE_TRANSFER_SUCCESS;
+ autoconf_transfer_cnf->id = ++ctx->autoconf.next_blk_id;
+ ctx->autoconf.size += autoconf_transfer_req->len;
+ }
+ else
+ {
+ fseek (ctx->autoconf.fp, -nb_written, SEEK_CUR);
+ autoconf_transfer_cnf->status = LIBSPID_UPDATE_TRANSFER_FAILED;
+ autoconf_transfer_cnf->id = ctx->autoconf.next_blk_id;
+ }
+ }
+ else
+ {
+ autoconf_transfer_cnf->status = LIBSPID_UPDATE_TRANSFER_FAILED;
+ autoconf_transfer_cnf->id = ctx->autoconf.next_blk_id;
+ }
+
+ /* send confirmation MME */
+ bridge_send (ctx, (uint8_t*) confirm,
+ sizeof (MME_t) + sizeof (vs_eoc_autoconf_transfer_cnf_t));
+
+ return TO_DROP;
+}
+
+static int
+autoconf_spawn (char* pgm, char** args)
+{
+ pid_t pid = fork ();
+
+ if (pid < 0)
+ {
+ syslog (LOG_WARNING,"Cannot fork child process");
+ return -1;
+ }
+ else if (pid == 0)
+ {
+ pid = fork ();
+ if (pid < 0)
+ {
+ syslog (LOG_WARNING,"Cannot fork child process");
+ exit (EXIT_FAILURE);
+ }
+ else if (pid > 0)
+ exit (EXIT_SUCCESS);
+
+ execvp (pgm, args);
+
+ syslog (LOG_WARNING,"An error occurred in executing %s", pgm);
+ exit (EXIT_FAILURE);
+ }
+
+ if (waitpid (pid, NULL, 0) != pid)
+ {
+ syslog (LOG_WARNING,"Failed on waiting child process");
+ return -1;
+ }
+
+ return 0;
+}
+
+/**
+ * Send a VS_EOC_AUTOCONF_END MME to BR interface
+ *
+ * \param ctx managerd context
+ * \param request MME containg VS_EOC_AUTOCONF_END request
+ * \param confirm MME buffer to put VS_EOC_AUTOCONF_END confirm
+ * \param len confirm buffer length
+ * \return error code
+ */
+extern enum bridge_status
+vs_mme_eoc_autoconf_end (struct managerd_ctx *ctx, MME_t *request,
+ MME_t *confirm, int len)
+{
+ vs_eoc_autoconf_end_req_t *autoconf_end_req;
+ vs_eoc_autoconf_end_cnf_t *autoconf_end_cnf;
+ unsigned char md[MD5_DIGEST_LENGTH];
+ unsigned char data[1024];
+ MD5_CTX md5_ctx;
+ int size, i;
+ FILE *fp;
+
+ assert (ctx != NULL);
+ assert (request != NULL);
+ assert (confirm != NULL);
+ assert ((unsigned int) len >= sizeof (vs_eoc_autoconf_end_cnf_t)
+ + sizeof (MME_t));
+
+ /* check for request content */
+ if (memcmp ((char*) request + sizeof (MME_t), OUI_SPIDCOM, 3))
+ return TO_DROP;
+
+ autoconf_end_req = (vs_eoc_autoconf_end_req_t *)
+ ((unsigned char *) request + sizeof (MME_t));
+ autoconf_end_cnf = (vs_eoc_autoconf_end_cnf_t *)
+ ((unsigned char *) confirm + sizeof (MME_t));
+
+ /* prepare confirm packet */
+ _prepare_confirm (ctx, request, confirm, len);
+ memcpy (autoconf_end_cnf->oui, OUI_SPIDCOM, 3);
+
+ if (ctx->autoconf.state == AUTOCONF_TRANSFER)
+ {
+ /* Calculate MD5 value of the received configuration file */
+ MD5_Init (&md5_ctx);
+
+ /* reopen received configuration file */
+ if (ctx->autoconf.fp != NULL) fclose (ctx->autoconf.fp);
+ ctx->autoconf.fp = fopen (AUTOCONF_TAR_FILE, "rb");
+
+ /* calculate MD5 chechsum */
+ for (i=0; i<ctx->autoconf.size; i+=1024)
+ {
+ if (ctx->autoconf.size - i > 1024)
+ size = fread (data, 1, 1024, ctx->autoconf.fp);
+ else
+ size = fread (data, 1, ctx->autoconf.size - i,
+ ctx->autoconf.fp);
+ MD5_Update (&md5_ctx, data, size);
+ }
+
+ MD5_Final (md, &md5_ctx);
+ fclose (ctx->autoconf.fp);
+
+ if (memcmp (autoconf_end_req->md5_sum, md, MD5_DIGEST_LENGTH))
+ {
+ autoconf_end_cnf->status = LIBSPID_UPDATE_END_MD5_ERROR;
+ }
+ else
+ {
+ char cmd[256];
+ char *script;
+ struct stat st;
+ int ret;
+
+ autoconf_end_cnf->status = LIBSPID_UPDATE_END_SUCCESS;
+
+ /* Unpack the received archive in /etc */
+ sprintf (cmd, "tar -xv -C %s -f %s > /dev/null",
+ AUTOCONFIG_UNCOMPRESS_ETC_PATH, AUTOCONF_TAR_FILE);
+ ret = system (cmd);
+ if (ret != 0)
+ autoconf_end_cnf->status = LIBSPID_EOC_AUTOCONF_END_FAILED;
+
+ /* Unpack the received archive in /usr/local/etc */
+ sprintf (cmd, "tar -xv -C %s -f %s > /dev/null",
+ AUTOCONFIG_UNCOMPRESS_PATH, AUTOCONF_TAR_FILE);
+ ret = system (cmd);
+ if (ret != 0)
+ autoconf_end_cnf->status = LIBSPID_EOC_AUTOCONF_END_FAILED;
+
+ /* Get the slave script basename */
+ script = strchr (AUTOCONF_TAR_SLAVE_FILE, '/');
+ script++;
+
+ /* Check if immediate configuration is required */
+ sprintf (cmd, "tar tvf %s | grep -v local | grep %s > %s",
+ AUTOCONF_TAR_FILE, script, AUTOCONF_TMP_FILE);
+ ret = system (cmd);
+ /* no need to check return value */
+ /* if ret == 0 immediate configuration
+ is required for S88slave file */
+ /* if ret != 0 we do not have S88slave file;
+ continue for auto-configuration */
+
+ stat (AUTOCONF_TMP_FILE, &st);
+ if (st.st_size)
+ {
+ char* args[] = { AUTOCONF_SLAVE_FILE, "restart", NULL };
+
+ sprintf (cmd, "chmod +x %s", AUTOCONF_SLAVE_FILE);
+ ret = system (cmd);
+ if (ret != 0)
+ autoconf_end_cnf->status = LIBSPID_EOC_AUTOCONF_END_FAILED;
+
+ sprintf (cmd, "cp -p %s /usr/local%s", AUTOCONF_SLAVE_FILE,
+ AUTOCONF_SLAVE_FILE);
+ ret = system (cmd);
+ if (ret != 0)
+ autoconf_end_cnf->status = LIBSPID_EOC_AUTOCONF_END_FAILED;
+
+ autoconf_spawn (AUTOCONF_SLAVE_FILE, args);
+ }
+
+ /* Clean-up */
+ sprintf (cmd, "rm -f %s %s", AUTOCONF_TAR_FILE,
+ AUTOCONF_TMP_FILE);
+ ret = system (cmd);
+ if (ret != 0)
+ autoconf_end_cnf->status = LIBSPID_EOC_AUTOCONF_END_FAILED;
+
+ if ((fp = fopen (AUTOCONF_SLAVE_MD5_FILE, "w")) != NULL)
+ {
+ if (fwrite (md, 1, MD5_DIGEST_LENGTH, fp)
+ != MD5_DIGEST_LENGTH)
+ autoconf_end_cnf->status = LIBSPID_EOC_AUTOCONF_END_FAILED;
+ fclose (fp);
+ }
+ else
+ autoconf_end_cnf->status = LIBSPID_EOC_AUTOCONF_END_FAILED;
+
+ }
+ }
+ else
+ {
+ autoconf_end_cnf->status = LIBSPID_EOC_AUTOCONF_END_FAILED;
+ fclose (ctx->autoconf.fp);
+ }
+
+
+ ctx->autoconf.state = AUTOCONF_IDLE;
+
+ /* send confirmation MME */
+ bridge_send (ctx, (uint8_t*) confirm,
+ sizeof (MME_t) + sizeof (vs_eoc_autoconf_end_cnf_t));
+
+ return TO_DROP;
+}
+
+/**
+ * Send a VS_EOC_GET_NETWORK_PARAMETERS to BR interface
+ *
+ * \param ctx managerd context
+ * \param request MME containg VS_EOC_GET_NETWORK_PARAMETERS request
+ * \param confirm MME buffer to put VS_EOC_GET_NETWORK_PARAMETERS
+ * \param len confirm buffer length
+ * \return error code
+ */
+extern enum bridge_status
+vs_mme_eoc_get_network_parameters (struct managerd_ctx *ctx, MME_t *request,
+ MME_t *confirm, int len)
+{
+ vs_mme_eoc_get_network_parameters_cnf_t *get_network_parameters_cnf;
+ vs_mme_eoc_get_network_parameters_req_t *get_network_parameters_req;
+ libspid_ip_t ip;
+ libspid_ip_t default_ip;
+ int ret;
+ char interface[5];
+
+ assert (NULL != ctx);
+ assert (NULL != request);
+ assert (NULL != confirm);
+ assert ((unsigned int) len
+ >= sizeof (vs_mme_eoc_get_network_parameters_cnf_t)
+ + sizeof (MME_t));
+
+ strcpy ((char *) default_ip.address, "0.0.0.0");
+ strcpy ((char *) default_ip.netmask, "0.0.0.0");
+ strcpy ((char *) default_ip.broadcast, "0.0.0.0");
+ strcpy ((char *) default_ip.gateway, "0.0.0.0");
+
+ get_network_parameters_req = (vs_mme_eoc_get_network_parameters_req_t *)
+ ((unsigned char *) request + sizeof (MME_t));
+ get_network_parameters_cnf = (vs_mme_eoc_get_network_parameters_cnf_t *)
+ ((unsigned char *) confirm + sizeof (MME_t));
+
+ /* check for request content */
+ if (memcmp (get_network_parameters_req->oui, OUI_SPIDCOM, 3))
+ return TO_DROP;
+
+ /* prepare confirm packet */
+ _prepare_confirm (ctx, request, confirm, len);
+
+ get_network_parameters_cnf->result = 0;
+
+ if (get_network_parameters_req->interface == LIBSPID_NETWORK_INTERFACE_BR)
+ strcpy (interface, LIBSPID_EOC_BR_IFACE);
+ else if (get_network_parameters_req->interface
+ == LIBSPID_NETWORK_INTERFACE_PLC)
+ strcpy (interface, LIBSPID_EOC_PLC_IFACE);
+ else if (get_network_parameters_req->interface
+ == LIBSPID_NETWORK_INTERFACE_ETH)
+ strcpy (interface, LIBSPID_EOC_ETH_IFACE);
+ else
+ get_network_parameters_cnf->result = 1;
+
+ /* get ip address/netmask/broadcast from socket*/
+ ret = libspid_network_get_realip (interface, &ip);
+ memcpy (get_network_parameters_cnf->oui, OUI_SPIDCOM, 3);
+
+ if (ret != LIBSPID_SUCCESS)
+ {
+ get_network_parameters_cnf->result = 1;
+
+ libspid_ip_str_to_bin ((char *) default_ip.address,
+ get_network_parameters_cnf->ip_address);
+ libspid_ip_str_to_bin ((char *) default_ip.netmask,
+ get_network_parameters_cnf->netmask);
+ libspid_ip_str_to_bin ((char *) default_ip.broadcast,
+ get_network_parameters_cnf->broadcast);
+ libspid_ip_str_to_bin ((char *) default_ip.gateway,
+ get_network_parameters_cnf->gateway);
+ get_network_parameters_cnf->mode = 0;
+ }
+ else
+ {
+ if (strcmp ((char *) ip.address,"") == 0)
+ ret = libspid_ip_str_to_bin (
+ (char *) default_ip.address,
+ get_network_parameters_cnf->ip_address);
+ else
+ ret = libspid_ip_str_to_bin (
+ (char *) ip.address,
+ get_network_parameters_cnf->ip_address);
+ if (ret != LIBSPID_SUCCESS)
+ get_network_parameters_cnf->result = 1;
+
+ if (strcmp ((char *) ip.netmask,"") == 0)
+ ret = libspid_ip_str_to_bin ((char *) default_ip.netmask,
+ get_network_parameters_cnf->netmask);
+ else
+ ret = libspid_ip_str_to_bin ((char *) ip.netmask,
+ get_network_parameters_cnf->netmask);
+ if (ret != LIBSPID_SUCCESS)
+ get_network_parameters_cnf->result = 1;
+
+ if (strcmp ((char *) ip.broadcast,"") == 0)
+ ret = libspid_ip_str_to_bin (
+ (char *) default_ip.broadcast,
+ get_network_parameters_cnf->broadcast);
+ else
+ ret = libspid_ip_str_to_bin (
+ (char *) ip.broadcast,
+ get_network_parameters_cnf->broadcast);
+ if (ret != LIBSPID_SUCCESS)
+ get_network_parameters_cnf->result = 1;
+
+ if (strcmp ((char *) ip.gateway,"") == 0)
+ ret = libspid_ip_str_to_bin ((char *) default_ip.gateway,
+ get_network_parameters_cnf->gateway);
+ else
+ ret = libspid_ip_str_to_bin ((char *) ip.gateway,
+ get_network_parameters_cnf->gateway);
+ if (ret != LIBSPID_SUCCESS)
+ get_network_parameters_cnf->result = 1;
+
+ get_network_parameters_cnf->mode = ip.mode;
+ }
+
+ /* send confirm MME */
+ bridge_send (ctx, (uint8_t *) confirm, sizeof (MME_t)
+ + sizeof (vs_mme_eoc_get_network_parameters_cnf_t));
+
+ return TO_DROP;
+}
+
+/**
+ * Send a VS_EOC_SET_NETWORK_PARAMETERS to BR interface
+ *
+ * \param ctx managerd context
+ * \param request MME containg VS_EOC_SET_NETWORK_PARAMETERS request
+ * \param confirm MME buffer to put VS_EOC_SET_NETWORK_PARAMETERS
+ * \param len confirm buffer length
+ * \return error code
+ */
+extern enum bridge_status
+vs_mme_eoc_set_network_parameters (struct managerd_ctx *ctx, MME_t *request,
+ MME_t *confirm, int len)
+{
+ vs_mme_eoc_set_network_parameters_cnf_t *set_network_parameters_cnf;
+ vs_mme_eoc_set_network_parameters_req_t *set_network_parameters_req;
+ libspid_ip_t ip;
+ int ret;
+ char interface[5];
+
+ assert (NULL != ctx);
+ assert (NULL != request);
+ assert (NULL != confirm);
+ assert ((unsigned int) len
+ >= sizeof (vs_mme_eoc_set_network_parameters_cnf_t)
+ + sizeof (MME_t));
+
+ set_network_parameters_req = (vs_mme_eoc_set_network_parameters_req_t *)
+ ((unsigned char *) request + sizeof (MME_t));
+ set_network_parameters_cnf = (vs_mme_eoc_set_network_parameters_cnf_t *)
+ ((unsigned char *) confirm + sizeof (MME_t));
+
+ /* check for request content */
+ if (memcmp (set_network_parameters_req->oui, OUI_SPIDCOM, 3))
+ return TO_DROP;
+
+ /* prepare confirm packet */
+ _prepare_confirm (ctx, request, confirm, len);
+
+ set_network_parameters_cnf->result = 0;
+
+ if (set_network_parameters_req->interface == LIBSPID_NETWORK_INTERFACE_BR)
+ strcpy (interface, LIBSPID_EOC_BR_IFACE);
+ else if (set_network_parameters_req->interface
+ == LIBSPID_NETWORK_INTERFACE_PLC)
+ strcpy (interface, LIBSPID_EOC_PLC_IFACE);
+ else if (set_network_parameters_req->interface
+ == LIBSPID_NETWORK_INTERFACE_ETH)
+ strcpy (interface, LIBSPID_EOC_ETH_IFACE);
+ else
+ set_network_parameters_cnf->result = 1;
+
+ memcpy (set_network_parameters_cnf->oui, OUI_SPIDCOM, 3);
+
+
+ ret = libspid_ip_bin_to_str (set_network_parameters_req->ip_address,
+ (char *) ip.address);
+ if (ret != LIBSPID_SUCCESS)
+ set_network_parameters_cnf->result = 1;
+
+ ret = libspid_ip_bin_to_str (set_network_parameters_req->netmask,
+ (char *) ip.netmask);
+ if (ret != LIBSPID_SUCCESS)
+ set_network_parameters_cnf->result = 1;
+
+ ret = libspid_ip_bin_to_str (set_network_parameters_req->broadcast,
+ (char *) ip.broadcast);
+ if (ret != LIBSPID_SUCCESS)
+ set_network_parameters_cnf->result = 1;
+
+ ret = libspid_ip_bin_to_str (set_network_parameters_req->gateway,
+ (char *) ip.gateway);
+ if (ret != LIBSPID_SUCCESS)
+ set_network_parameters_cnf->result = 1;
+
+ ip.mode = set_network_parameters_req->mode;
+
+ ret = libspid_network_set_realip (interface, &ip);
+ if (ret != LIBSPID_SUCCESS)
+ set_network_parameters_cnf->result = 1;
+
+ /* send confirm MME */
+ bridge_send (ctx, (uint8_t *) confirm, sizeof (MME_t)
+ + sizeof (vs_mme_eoc_set_network_parameters_cnf_t));
+
+ return TO_DROP;
+}
+
+/**
+ * Receive a VS_EOC_CCO_SET_OUT_LEV.IND MME on MME interface.
+ *
+ * \param ctx managerd context
+ * \param buffer received frame
+ * \param len request buffer length
+ * \return error code
+ */
+extern enum bridge_status
+vs_eoc_mme_get_info (struct managerd_ctx *ctx, uint8_t *buffer, int len)
+{
+ MME_t *mmehdr;
+
+ /* Check arguments */
+ assert (ctx != NULL);
+ assert (buffer != NULL);
+ assert ((len > 0) && (len <= MAX_PKT_LEN));
+
+ mmehdr = (MME_t *) buffer;
+
+ /* Check for request content */
+ if (memcmp ((char*) buffer + sizeof (MME_t), OUI_SPIDCOM, 3))
+ return TO_DROP;
+
+ /* If needed, set Jiangsu OUI and MMTYPE */
+ if (!ctx->js_eoc_mme_get_info_recv)
+ return TO_SEND;
+ memcpy ((char*) buffer + sizeof (MME_t), OUI_JIANGSU, 3);
+ mmehdr->mmtype = JS_EOC_GET_INFO | MME_CNF;
+ ctx->js_eoc_mme_get_info_recv--;
+
+ bridge_send (ctx, buffer, len);
+ return TO_DROP;
+}
+
+/**
+ * Receive a VS_EOC_DIAGNOSTIC_INFO MME on MME interface.
+ * => Send a JS_EOC_DIAGNOSTIC_INFO MME to bridge interface.
+ *
+ * \param ctx managerd context
+ * \param buffer received frame
+ * \param len request buffer length
+ * \return error code
+ */
+extern enum bridge_status
+vs_eoc_mme_diagnostic_info (struct managerd_ctx *ctx,
+ uint8_t *buffer, int len)
+{
+ MME_t *mmehdr;
+
+ /* Check arguments */
+ assert (ctx != NULL);
+ assert (buffer != NULL);
+ assert ((len > 0) && (len <= MAX_PKT_LEN));
+
+ mmehdr = (MME_t *) buffer;
+
+ /* Check for request content */
+ if (memcmp ((char*) buffer + sizeof (MME_t), OUI_SPIDCOM, 3))
+ return TO_DROP;
+
+ /* If needed, set Jiangsu OUI and MMTYPE */
+ if (!ctx->js_eoc_mme_diagnostic_info_recv)
+ return TO_SEND;
+ memcpy ((char*) buffer + sizeof (MME_t), OUI_JIANGSU, 3);
+ mmehdr->mmtype = JS_EOC_DIAGNOSTIC_INFO | MME_CNF;
+ ctx->js_eoc_mme_diagnostic_info_recv--;
+
+ bridge_send (ctx, buffer, len);
+ return TO_DROP;
+}
+
+/**
+ * Reveives output_level in range [0..255] and store value in eoc.conf. After
+ * reboot this value is used to set output level through afe and SPC300
+ * internal registers.
+ *
+ * \param ctx managerd context
+ * \param buffer received frame
+ * \param len request buffer length
+ * \return error code
+ */
+extern enum bridge_status
+vs_eoc_mme_set_output_level (struct managerd_ctx *ctx,
+ uint8_t *buffer, int len)
+{
+ MME_t *mmehdr;
+
+ /* Check arguments */
+ assert (ctx != NULL);
+ assert (buffer != NULL);
+ assert ((len > 0) && (len <= MAX_PKT_LEN));
+
+ mmehdr = (MME_t *) buffer;
+
+ /* Check for request content */
+ if (memcmp ((char*) buffer + sizeof (MME_t), OUI_SPIDCOM, 3))
+ return TO_DROP;
+
+ vs_mme_eoc_set_output_level_t * output_level =
+ (vs_mme_eoc_set_output_level_t *)((char*) buffer + sizeof (MME_t));
+ /* configure item in file */
+ /* read topology change status from eoc.conf file */
+ char level[LIBSPID_CONFIG_LINE_MAX_LEN];
+ memset (level, 0, sizeof (level));
+ int ret = libspid_config_read_item (LIBSPID_EOC_CONF_PATH,
+ LIBSPID_EOC_CONF_LABEL_OUTPUT_LEVEL,
+ level, LIBSPID_CONFIG_LINE_MAX_LEN);
+ if (ret != LIBSPID_ERROR_NOT_FOUND)
+ {
+ if (ret != LIBSPID_SUCCESS)
+ {
+ syslog (LOG_WARNING, "Reading of output_level from eoc.conf "
+ "file failed");
+ return TO_DROP;
+ }
+ }
+ int saved_level = atoi (level);
+ printf ("output level %d saved_level %d\n", output_level->output_level,
+ saved_level);
+ if (output_level->output_level != saved_level)
+ {
+ sprintf (level, "%d", output_level->output_level);
+ int ret = libspid_config_write_item (
+ LIBSPID_EOC_CONF_PATH,
+ LIBSPID_EOC_CONF_LABEL_OUTPUT_LEVEL, level);
+ ret = libspid_system_save_file (LIBSPID_EOC_CONF_PATH);
+ if (ret != LIBSPID_SUCCESS)
+ syslog (LOG_WARNING, "%s: managerd system error. "
+ "Cannot save file.\n",
+ LIBSPID_EOC_CONF_PATH);
+ }
+ return TO_DROP;
+}
diff --git a/cleopatre/application/managerd/src/vs_mme.c b/cleopatre/application/managerd/src/vs_mme.c
index a1693660cd..a91007f3dd 100644
--- a/cleopatre/application/managerd/src/vs_mme.c
+++ b/cleopatre/application/managerd/src/vs_mme.c
@@ -25,14 +25,35 @@
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
+#include <fcntl.h>
+#include <signal.h>
+#include <sys/time.h>
+#include <errno.h>
+#include "openssl_md5.h"
#include "bridge.h"
#include "vs_mme.h"
-#define FIRMWARE_LABEL "irmware"
+/* Image update indicators and containers */
+update_ctx_t update_ctx = { .lock = 0};
-static void _prepare_confirm (struct managerd_ctx *ctx, MME_t *request, MME_t *confirm, int len)
+/**
+ * Generic function to prepare a MME.CNF from a MME.REQ.
+ *
+ * \param ctx managerd context
+ * \param request MME containg request
+ * \param confirm MME buffer to put confirm
+ * \param len confirm buffer length
+ * \return error code
+ */
+static int
+vs_mme_prepare_confirm (struct managerd_ctx *ctx, MME_t *request, MME_t *confirm,
+ int len)
{
+ assert (NULL != ctx);
+ assert (NULL != request);
+ assert (NULL != confirm);
+
memset (confirm, '\0', len);
memcpy (confirm->mme_dest, request->mme_src, ETH_ALEN);
memcpy (confirm->mme_src, ctx->br_mac_addr, ETH_ALEN);
@@ -40,6 +61,8 @@ static void _prepare_confirm (struct managerd_ctx *ctx, MME_t *request, MME_t *c
confirm->mmv = request->mmv;
confirm->mmtype = (request->mmtype & ~MME_TYPE_MASK) | MME_CNF;
confirm->fmi = 0;
+
+ return 0;
}
/**
@@ -51,7 +74,8 @@ static void _prepare_confirm (struct managerd_ctx *ctx, MME_t *request, MME_t *c
* \param len confirm buffer length.
* \return error code.
*/
-enum bridge_status vs_mme_get_version (struct managerd_ctx *ctx, MME_t *request, MME_t *confirm, int len)
+enum bridge_status
+vs_mme_get_version (struct managerd_ctx *ctx, MME_t *request, MME_t *confirm, int len)
{
vs_get_version_cnf_t *get_version_cnf;
spidcom_image_desc_t desc;
@@ -59,6 +83,7 @@ enum bridge_status vs_mme_get_version (struct managerd_ctx *ctx, MME_t *request,
FILE *fp;
char tmp_buffer[256];
char label[64], version[64];
+ char image_version[LIBSPID_IMAGE_VERSION_STR_MAX_LEN];
int index;
assert (NULL != ctx);
@@ -74,7 +99,10 @@ enum bridge_status vs_mme_get_version (struct managerd_ctx *ctx, MME_t *request,
sizeof (MME_t));
/* prepare confirm packet */
- _prepare_confirm (ctx, request, confirm, len);
+ if (0 != vs_mme_prepare_confirm (ctx, request, confirm, len))
+ {
+ syslog (LOG_ERR, "%s: cannot prepare confirmation", __FUNCTION__);
+ }
/* set get_version inside confirm buffer */
memcpy (get_version_cnf->oui, OUI_SPIDCOM, 3);
@@ -83,12 +111,16 @@ enum bridge_status vs_mme_get_version (struct managerd_ctx *ctx, MME_t *request,
/* get current image version */
memset (&desc, '\0', sizeof (desc));
+ memset (image_version, 0, LIBSPID_IMAGE_VERSION_STR_MAX_LEN-1);
+
+ if (libspid_image_get_running_version (image_version) != LIBSPID_SUCCESS)
+ return TO_DROP;
if (LIBSPID_SUCCESS == libspid_image_get_desc (LIBSPID_IMAGE_DESC_TYPE_CURRENT,
&desc, mtd_name))
{
- memcpy (get_version_cnf->applicative_version, desc.version,
- sizeof (desc.version));
+ memcpy (get_version_cnf->applicative_version, image_version,
+ LIBSPID_IMAGE_VERSION_STR_MAX_LEN-1);
}
/* Retrieve index of current image from MTD path */
@@ -141,7 +173,8 @@ enum bridge_status vs_mme_get_version (struct managerd_ctx *ctx, MME_t *request,
* \param len confirm buffer length.
* \return error code.
*/
-enum bridge_status vs_mme_eth_stats (struct managerd_ctx *ctx, MME_t *request, MME_t *confirm, int len)
+enum bridge_status
+vs_mme_eth_stats (struct managerd_ctx *ctx, MME_t *request, MME_t *confirm, int len)
{
vs_eth_stats_req_t *eth_stats_req;
vs_eth_stats_cnf_t *eth_stats_cnf;
@@ -154,36 +187,40 @@ enum bridge_status vs_mme_eth_stats (struct managerd_ctx *ctx, MME_t *request, M
assert (NULL != ctx);
assert (NULL != request);
assert (NULL != confirm);
- assert ((unsigned int)len >= sizeof(vs_eth_stats_cnf_t) + sizeof(MME_t));
+ assert ((unsigned int) len >= sizeof (vs_eth_stats_cnf_t) + sizeof (MME_t));
- eth_stats_req = (vs_eth_stats_req_t *)((unsigned char*)request + sizeof(MME_t));
- eth_stats_cnf = (vs_eth_stats_cnf_t *)((unsigned char*)confirm + sizeof(MME_t));
+ eth_stats_req = (vs_eth_stats_req_t *) ((unsigned char*)request + sizeof (MME_t));
+ eth_stats_cnf = (vs_eth_stats_cnf_t *) ((unsigned char*)confirm + sizeof (MME_t));
- if(memcmp (eth_stats_req->oui, OUI_SPIDCOM, 3))
+ if (memcmp (eth_stats_req->oui, OUI_SPIDCOM, 3))
return TO_DROP;
/* prepare confirm packet */
- _prepare_confirm (ctx, request, confirm, len);
+ if (0 != vs_mme_prepare_confirm (ctx, request, confirm, len))
+ {
+ syslog (LOG_ERR, "%s: cannot prepare confirmation", __FUNCTION__);
+ }
+
memcpy (eth_stats_cnf->oui, OUI_SPIDCOM, 3);
eth_stats_cnf->result = MME_RESULT_FAILURE;
/* check request type */
- if(ETH_STATS_COMMAND_GET == eth_stats_req->command)
+ if (ETH_STATS_COMMAND_GET == eth_stats_req->command)
{
- if((fp = fopen ("/proc/net/dev", "r")) == NULL)
+ if ((fp = fopen ("/proc/net/dev", "r")) == NULL)
goto failed;
/* read the 2 comment lines */
- fgets (tmp_buffer, sizeof(tmp_buffer), fp);
- fgets (tmp_buffer, sizeof(tmp_buffer), fp);
+ fgets (tmp_buffer, sizeof (tmp_buffer), fp);
+ fgets (tmp_buffer, sizeof (tmp_buffer), fp);
/* read all line until found eth0 */
- while(fgets (tmp_buffer, sizeof(tmp_buffer), fp))
+ while (fgets (tmp_buffer, sizeof (tmp_buffer), fp))
{
- if((ptr = strchr (tmp_buffer, ':')) == NULL)
+ if ((ptr = strchr (tmp_buffer, ':')) == NULL)
continue;
*ptr = '\0';
ptr++;
- if((sscanf (tmp_buffer, "%s", name) == 1)
- && !strncmp (name, ETH_IFNAME, strlen(ETH_IFNAME))
+ if ((sscanf (tmp_buffer, "%s", name) == 1)
+ && !strncmp (name, ETH_IFNAME, strlen (ETH_IFNAME))
&& (sscanf (ptr, "%Lu %Lu %lu %lu %lu %lu %*s %*s %Lu %Lu %lu %lu %lu %lu %lu %*s",
&rx_bytes,
&rx_packets,
@@ -217,15 +254,17 @@ enum bridge_status vs_mme_eth_stats (struct managerd_ctx *ctx, MME_t *request, M
}
failed:
- bridge_send (ctx, (uint8_t *)confirm, sizeof(MME_t) + sizeof(vs_eth_stats_cnf_t));
+ bridge_send (ctx, (uint8_t *)confirm, sizeof (MME_t) + sizeof (vs_eth_stats_cnf_t));
return TO_DROP;
}
-
-static void* _reboot_handler (void* arg)
+static void*
+_reboot_handler (void* arg)
{
- sleep(2);
- libspid_system_reboot();
+ sleep (2);
+ if (update_ctx.lock == 0)
+ libspid_system_reboot ();
+
return NULL;
}
@@ -238,7 +277,8 @@ static void* _reboot_handler (void* arg)
* \param len confirm buffer length
* \return error code
*/
-enum bridge_status vs_mme_reset (struct managerd_ctx *ctx, MME_t *request, MME_t *confirm, int len)
+enum bridge_status
+vs_mme_reset (struct managerd_ctx *ctx, MME_t *request, MME_t *confirm, int len)
{
vs_reset_cnf_t *reset_cnf;
pthread_attr_t attr;
@@ -247,27 +287,1254 @@ enum bridge_status vs_mme_reset (struct managerd_ctx *ctx, MME_t *request, MME_t
assert (NULL != ctx);
assert (NULL != request);
assert (NULL != confirm);
- assert ((unsigned int)len >= sizeof(vs_reset_cnf_t) + sizeof(MME_t));
+ assert ((unsigned int) len >= sizeof (vs_reset_cnf_t) + sizeof (MME_t));
/* check for request content */
- if (memcmp((char*) request + sizeof(MME_t), OUI_SPIDCOM, 3)) return TO_DROP;
+ if (memcmp ((char*) request + sizeof (MME_t), OUI_SPIDCOM, 3))
+ return TO_DROP;
- reset_cnf = (vs_reset_cnf_t *) ((unsigned char*) confirm + sizeof(MME_t));
+ reset_cnf = (vs_reset_cnf_t *) ((unsigned char*) confirm + sizeof (MME_t));
/* prepare confirmation packet */
- _prepare_confirm(ctx, request, confirm, len);
- memcpy(reset_cnf->oui, OUI_SPIDCOM, 3);
+ if (0 != vs_mme_prepare_confirm (ctx, request, confirm, len))
+ {
+ syslog (LOG_ERR, "%s: cannot prepare confirmation", __FUNCTION__);
+ }
+
+ memcpy (reset_cnf->oui, OUI_SPIDCOM, 3);
reset_cnf->result = 0;
+ /*reboot is not allowed*/
+ if (update_ctx.lock == 1) reset_cnf->result = 1;
+
+ /* send confirmation MME */
+ bridge_send (ctx, (uint8_t*) confirm, sizeof (MME_t) + sizeof (vs_reset_cnf_t));
+
+ if (update_ctx.lock == 0)
+ {
+ /* reset the modem in a dedicated thread */
+ pthread_attr_init (&attr);
+ pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED);
+ pthread_create (&reset_job, &attr, &_reboot_handler, NULL);
+ pthread_attr_destroy (&attr);
+ }
+
+ return TO_DROP;
+}
+
+/**
+ * Send a VS_RESET.IND signal to onlined
+ *
+ * \param ctx managerd context
+ * \param request MME containg VS_RESET request
+ * \param confirm MME buffer to put VS_RESET confirm
+ * \param len confirm buffer length
+ * \return error code
+ */
+enum bridge_status
+vs_mme_reset_handler (struct managerd_ctx *ctx, MME_t *request,
+ MME_t *confirm, int len)
+{
+ char mac[LIBSPID_MAC_STR_LEN];
+ int ret;
+
+ assert (NULL != ctx);
+ assert (NULL != request);
+ assert (NULL != confirm);
+ assert ((unsigned int) len >= sizeof (MME_t));
+
+ libspid_mac_bin_to_str (request->mme_src, mac);
+
+ syslog (LOG_WARNING, "Reset indication received from modem %s", mac);
+
+ /* online daemon needs to be informed */
+ ret = libspid_system_file_update_warn (getpid (),
+ LIBSPID_ONLINE_INFO_PATH);
+ if (ret != LIBSPID_SUCCESS)
+ {
+ syslog (LOG_WARNING, "Cannot inform online daemon about VS_RESET.IND "
+ "reception, ret = %d", ret);
+ return TO_DROP;
+ }
+
+ return TO_DROP;
+}
+
+/**
+ * Receive VS_FACTORY.REQ MME and restore to factory defaults.
+ *
+ * \param ctx managerd context
+ * \param request MME containg VS_FACTORY request
+ * \param confirm MME buffer to put VS_FACTORY confirm
+ * \param len confirm buffer length
+ * \return error code
+ */
+enum bridge_status
+vs_mme_factory (struct managerd_ctx *ctx, MME_t *request, MME_t *confirm,
+ int len)
+{
+ vs_factory_cnf_t *factory_cnf;
+ int ret;
+
+ assert (NULL != ctx);
+ assert (NULL != request);
+ assert (NULL != confirm);
+ assert ((unsigned int) len >= sizeof (vs_factory_cnf_t) + sizeof (MME_t));
+
+ /* check for request content */
+ if (memcmp ((char*) request + sizeof (MME_t), OUI_SPIDCOM, 3))
+ return TO_DROP;
+
+ factory_cnf = (vs_factory_cnf_t *) ((unsigned char*) confirm +
+ sizeof (MME_t));
+
+ /* prepare confirmation packet */
+ if (0 != vs_mme_prepare_confirm (ctx, request, confirm, len))
+ {
+ syslog (LOG_ERR, "%s: cannot prepare confirmation", __FUNCTION__);
+ }
+
+ memcpy (factory_cnf->oui, OUI_SPIDCOM, 3);
+
+ ret = libspid_system_factory ();
+ if (LIBSPID_SUCCESS == ret)
+ factory_cnf->result = 0;
+ else
+ factory_cnf->result = 1;
+
+ /* send confirmation MME */
+ bridge_send (ctx, (uint8_t*) confirm,
+ sizeof (MME_t) + sizeof (vs_factory_cnf_t));
+
+ return TO_DROP;
+}
+
+
+/**
+ * Send a VS_GET_NVRAM MME to BR interface
+ *
+ * \param ctx managerd context
+ * \param request MME containg VS_GET_NVRAM request
+ * \param confirm MME buffer to put VS_GET_NVRAM confirm
+ * \param len confirm buffer length
+ * \return error code
+ */
+enum bridge_status
+vs_mme_get_nvram (struct managerd_ctx *ctx, MME_t *request,
+ MME_t *confirm, int len)
+{
+ vs_get_nvram_req_t *get_nvram_req;
+ vs_get_nvram_cnf_t *get_nvram_cnf;
+ spidcom_nvram_t nvram;
+ uint8_t *nvram_ptr = (uint8_t*) &nvram;
+
+ assert (NULL != ctx);
+ assert (NULL != request);
+ assert (NULL != confirm);
+ assert ((unsigned int) len >= sizeof (vs_reset_cnf_t) + sizeof (MME_t));
+
+ /* check for request content */
+ if (memcmp ((char*) request + sizeof (MME_t), OUI_SPIDCOM, 3))
+ return TO_DROP;
+
+ get_nvram_req = (vs_get_nvram_req_t *)
+ ((unsigned char*) request + sizeof (MME_t));
+ get_nvram_cnf = (vs_get_nvram_cnf_t *)
+ ((unsigned char*) confirm + sizeof (MME_t));
+
+ /* prepare confirmation packet */
+ if (0 != vs_mme_prepare_confirm (ctx, request, confirm, len))
+ {
+ syslog (LOG_ERR, "%s: cannot prepare confirmation", __FUNCTION__);
+ }
+ memcpy (get_nvram_cnf->oui, OUI_SPIDCOM, 3);
+
+ /* Initialize confirmation */
+ get_nvram_cnf->index = get_nvram_req->index;
+ memset (get_nvram_cnf->data, 0, 1024);
+
+ /* Collect the result */
+ if (libspid_system_get_nvram (&nvram) != LIBSPID_SUCCESS)
+ {
+ get_nvram_cnf->result = MME_RESULT_FAILURE;
+ }
+ else if (1024 * ((unsigned int) get_nvram_req->index) >= sizeof (nvram)
+ || get_nvram_req->index >= MAX_NVRAM_BLK)
+ {
+ get_nvram_cnf->result = MME_RESULT_BAD_IDX;
+ }
+ else
+ {
+ get_nvram_cnf->result = MME_RESULT_SUCCESS;
+ memcpy (get_nvram_cnf->data,
+ nvram_ptr + 1024 * get_nvram_cnf->index,
+ sizeof (nvram) >= 1024 * ((unsigned int) get_nvram_cnf->index
+ + 1) ? 1024 : sizeof (nvram)%1024);
+ }
+
+ /* send confirmation MME */
+ bridge_send (ctx, (uint8_t*) confirm,
+ sizeof (MME_t) + sizeof (vs_get_nvram_cnf_t));
+
+ return TO_DROP;
+}
+
+/**
+ * Uninitialize update context.
+ *
+ * \param ctx managerd context
+ */
+static void
+vs_mme_update_uninit_ctx (struct managerd_ctx *ctx)
+{
+ assert (NULL != ctx);
+
+ /* close flash memory */
+ if (update_ctx.fp != NULL) fclose(update_ctx.fp);
+
+ /* delete image slices */
+ while (update_ctx.head != NULL)
+ {
+ update_ctx.curr = update_ctx.head->next;
+ free (update_ctx.head);
+ update_ctx.head = update_ctx.curr;
+ }
+
+ /* enable new transfer */
+ update_ctx.lock = 0;
+ update_ctx.protocol = 0;
+
+ /* send threads into idle state */
+ update_ctx.exit_timer = 2; /* stop timer */
+ update_ctx.exit_writer = 1;
+}
+
+/**
+ * Send indication.
+ *
+ * \param ctx managerd context
+ * \param mme_type type for indication
+ * \param result result field to write in IND
+ * \return error code
+ */
+static int
+vs_mme_send_indication (struct managerd_ctx *ctx,
+ unsigned short mme_type,
+ unsigned char result)
+{
+ mme_ctx_t indication_ctx, response_ctx;
+ unsigned char snd_buffer[ETH_DATA_LEN];
+ unsigned int result_len = 0;
+ char *iface = LIBSPID_EOC_PLC_IFACE;
+
+ /* initialize indication MME */
+ if (MME_SUCCESS != mme_init (&indication_ctx,
+ mme_type | MME_IND,
+ snd_buffer,
+ (unsigned int) ETH_DATA_LEN))
+ {
+ syslog (LOG_ERR, "%s: cannot initialize mme", __FUNCTION__);
+ return -1;
+ }
+
+ /* attach flash write result */
+ if (MME_SUCCESS != mme_put (&indication_ctx, &result, 1, &result_len))
+ {
+ syslog (LOG_ERR, "%s: cannot write result in mme", __FUNCTION__);
+ return -1;
+ }
+
+ /* send indication MME */
+ if (MME_SUCCESS != mme_send (&indication_ctx, MME_SEND_IND, iface,
+ update_ctx.mac, &response_ctx))
+ {
+ syslog (LOG_ERR, "%s: cannot send mme", __FUNCTION__);
+ return -1;
+ }
+
+ return 0;
+}
+
+/**
+ * Timeout handler for VS_UPDATE_TRANSFER.REQ reception.
+ *
+ * \param arg address of managerd context
+ */
+static void*
+vs_mme_update_timeout_handler (void *arg)
+{
+ static int retries = 0;
+
+ assert (NULL != arg);
+ struct managerd_ctx *ctx = (struct managerd_ctx *) arg;
+
+ while (1)
+ {
+ if (update_ctx.lock && update_ctx.protocol
+ == LIBSPID_TRANSFER_PROTOCOL)
+ {
+ sleep (MME_TOUT);
+ if (0 == update_ctx.exit_timer)
+ {
+ retries++;
+ if (retries >= LIBSPID_TRANSFER_RETRY_COUNT)
+ {
+ retries = 0;
+ if (update_ctx.nb_img > 1)
+ {
+ char mtd_name[64] = {0};
+ int fd = -1;
+ spidcom_image_desc_t desc;
+
+ if (LIBSPID_SUCCESS != libspid_image_get_desc
+ (LIBSPID_IMAGE_DESC_TYPE_ALTERNATE, &desc, mtd_name))
+ {
+ syslog (LOG_ERR, "%s: cannot get image "
+ "descriptor alternate",
+ __FUNCTION__);
+ }
+ else
+ {
+ if (-1 == (fd = open (mtd_name, O_RDWR)))
+ {
+ /* The open failed.
+ Print an error message and exit. */
+ syslog (LOG_ERR, "%s: cannot open %s (%s)\n",
+ __FUNCTION__, mtd_name,
+ strerror (errno));
+ }
+ else
+ {
+ /* update image descriptor values */
+ desc.is_valid = 0;
+ /* go to the begining of fd */
+ lseek (fd, 0, SEEK_SET);
+ /* write back updated descriptor to flash */
+ if (sizeof (spidcom_image_desc_t)
+ != write (fd, (void *) &desc,
+ sizeof (spidcom_image_desc_t)))
+ {
+ syslog (LOG_ERR, "%s: cannot write %s (%s)",
+ __FUNCTION__, mtd_name,
+ strerror (errno));
+ }
+ close (fd);
+ }
+ }
+ }
+ pthread_mutex_lock (&update_ctx.mutex);
+ if (0 != vs_mme_send_indication (ctx,
+ VS_UPDATE_END,
+ MME_RESULT_TIMEOUT))
+ {
+ syslog (LOG_ERR, "%s: cannot send vs_update_end.ind",
+ __FUNCTION__);
+ }
+ vs_mme_update_uninit_ctx (ctx);
+ pthread_mutex_unlock (&update_ctx.mutex);
+ }
+ }
+ else
+ {
+ if (1 == update_ctx.exit_timer)
+ {
+ pthread_mutex_lock (&update_ctx.mutex);
+ /* next packet to receive => enable timer */
+ update_ctx.exit_timer = 0;
+ pthread_mutex_unlock (&update_ctx.mutex);
+ }
+ }
+ }
+ }
+}
+
+/**
+ * Handler to write in flash memory.
+ *
+ * \param arg address of managerd context
+ */
+static void*
+vs_mme_update_flash_store_handler (void *arg)
+{
+ assert (NULL != arg);
+ struct managerd_ctx *ctx = (struct managerd_ctx *) arg;
+
+ while (1)
+ {
+ pthread_mutex_lock (&update_ctx.mutex);
+
+ if (update_ctx.exit_writer == 0)
+ {
+ int rc = -1, count = 0;
+ char cmd[50];
+
+ /* stop timer */
+ update_ctx.exit_timer = 2;
+
+ /** Copy image stored in SDRAM into flash. */
+repeat_update:
+ memset (cmd, 0, 50);
+ sprintf (cmd, "flash_eraseall %s > /dev/null",
+ update_ctx.mtd_name);
+ rc = system (cmd);
+ if (rc != 0)
+ {
+ syslog (LOG_ERR, "%s: cannot erase flash device %s",
+ __FUNCTION__, update_ctx.mtd_name);
+ if (0 != vs_mme_send_indication (ctx, VS_UPDATE_END,
+ MME_RESULT_FAILURE))
+ {
+ syslog (LOG_ERR, "%s: cannot send vs_update_end.ind",
+ __FUNCTION__);
+ }
+ goto flash_access_done;
+ }
+
+ update_ctx.fp = fopen (update_ctx.mtd_name, "wb");
+ if (update_ctx.fp == NULL)
+ {
+ syslog (LOG_ERR, "%s: cannot open flash device %s "
+ "for writing (%s)",
+ __FUNCTION__, update_ctx.mtd_name, strerror (errno));
+ if (0 != vs_mme_send_indication (ctx, VS_UPDATE_END,
+ MME_RESULT_FAILURE))
+ {
+ syslog (LOG_ERR, "%s: cannot send vs_update_end.ind",
+ __FUNCTION__);
+ }
+ goto flash_access_done;
+ }
+
+ update_ctx.curr = update_ctx.head;
+ while (update_ctx.curr != NULL)
+ {
+ if (fwrite (update_ctx.curr->slice, update_ctx.curr->size, 1,
+ update_ctx.fp) != 1)
+ {
+ syslog (LOG_ERR, "%s: cannot write %s (%s)",
+ __FUNCTION__, update_ctx.mtd_name,
+ strerror (errno));
+ fclose (update_ctx.fp);
+ if (++count < FLASH_RETRY_COUNT)
+ goto repeat_update;
+ if (0 != vs_mme_send_indication (ctx,
+ VS_UPDATE_END,
+ MME_RESULT_FAILURE))
+ {
+ syslog (LOG_ERR, "%s: cannot send vs_update_end.ind",
+ __FUNCTION__);
+ }
+ goto flash_access_done;
+ }
+ update_ctx.curr = update_ctx.curr->next;
+ }
+
+ if (0 != vs_mme_send_indication (ctx, VS_UPDATE_END,
+ MME_RESULT_SUCCESS))
+ {
+ syslog (LOG_ERR, "%s: cannot send vs_update_end.ind",
+ __FUNCTION__);
+ }
+
+ /** Switch image in case of 2 images stored in flash. */
+ if (1 != update_ctx.nb_img)
+ {
+ char mtd_name[64] = {0};
+ int fd = -1, mme_result = -1;
+ spidcom_image_desc_t desc;
+
+ sleep (2);
+
+ if (LIBSPID_SUCCESS != libspid_image_get_desc \
+ (LIBSPID_IMAGE_DESC_TYPE_ALTERNATE, &desc, mtd_name))
+ {
+ syslog (LOG_ERR, "%s: cannot get image "
+ "descriptor alternate",
+ __FUNCTION__);
+ }
+ else
+ {
+ if (-1 == (fd = open (mtd_name, O_RDWR)))
+ {
+ /* The open failed. Print an error message and exit.*/
+ syslog (LOG_ERR, "%s: cannot open %s (%s)",
+ __FUNCTION__, mtd_name, strerror (errno));
+ }
+ else
+ {
+ /* update image descriptor values */
+ desc.is_not_update = 0;
+ /* go to the begining of fd */
+ lseek (fd, 0, SEEK_SET);
+ /* write back updated descriptor to flash */
+ if (sizeof(spidcom_image_desc_t) != write (fd,
+ (void *) &desc, sizeof (spidcom_image_desc_t)))
+ {
+ syslog (LOG_ERR, "%s: cannot write %s (%s)",
+ __FUNCTION__, mtd_name, strerror (errno));
+ }
+ close (fd);
+ }
+ }
+
+ /* select new image */
+ if (libspid_image_select (LIBSPID_IMAGE_SELECT_SWITCH)
+ == LIBSPID_SUCCESS)
+ {
+ mme_result = MME_RESULT_SUCCESS;
+ }
+ else
+ {
+ mme_result = MME_RESULT_FAILURE;
+ }
+ if (0 != vs_mme_send_indication (ctx, VS_UPDATE_END,
+ mme_result))
+ {
+ syslog (LOG_ERR, "%s: cannot send vs_update_end.ind",
+ __FUNCTION__);
+ }
+ }
+
+flash_access_done:
+ vs_mme_update_uninit_ctx (ctx);
+ }
+
+ pthread_mutex_unlock (&update_ctx.mutex);
+
+ sleep (1);
+ }
+}
+
+/**
+ * Timeout handler for VS_UPDATE_TRANSFER.REQ reception.
+ *
+ * \param ctx managerd context
+ * \param mac destination mac address
+ */
+static int
+vs_mme_update_init_ctx (struct managerd_ctx *ctx, char *mac)
+{
+ spidcom_image_desc_t desc;
+ spidcom_nvram_t nvram;
+ pthread_attr_t attr;
+ static int triggered = 0;
+ int type = -1;
+
+ assert (NULL != ctx);
+ assert (NULL != mac);
+
+ memset (&update_ctx, 0, sizeof (update_ctx_t));
+
+ update_ctx.bsize = LIBSPID_UPDATE_FLASH_SECTOR_64K;
+ update_ctx.fsize = 0;
+ update_ctx.lock = 1;
+ update_ctx.next_blk_id = 1;
+ update_ctx.flash_sector = 0;
+ update_ctx.head = update_ctx.curr = NULL;
+ update_ctx.fp = NULL;
+ update_ctx.exit_timer = 0; /* enable timer */
+ update_ctx.exit_writer = 1;
+ update_ctx.protocol = LIBSPID_TRANSFER_PROTOCOL;
+
+ if (LIBSPID_SUCCESS != libspid_system_get_nvram (&nvram))
+ {
+ syslog (LOG_ERR, "%s: cannot get nvram contents", __FUNCTION__);
+ return -1;
+ }
+ update_ctx.nb_img = nvram.nb_images;
+
+ memcpy (update_ctx.mac, mac, ETH_ALEN);
+
+ if (update_ctx.nb_img == 1)
+ {
+ type = LIBSPID_IMAGE_DESC_TYPE_CURRENT;
+ }
+ else
+ {
+ type = LIBSPID_IMAGE_DESC_TYPE_ALTERNATE;
+ }
+
+ if (LIBSPID_SUCCESS != libspid_image_get_desc (type, &desc,
+ update_ctx.mtd_name))
+ {
+ syslog (LOG_ERR, "%s: cannot get image descriptor", __FUNCTION__);
+ return -1;
+ }
+
+ pthread_mutex_init (&update_ctx.mutex, NULL);
+
+ /* create a timeout monitor and flash writer threads */
+ if (triggered == 0)
+ {
+ pthread_attr_init (&attr);
+ pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED);
+
+ pthread_create (&update_ctx.timer, &attr,
+ &vs_mme_update_timeout_handler, (void *) ctx);
+ pthread_create (&update_ctx.writer, &attr,
+ &vs_mme_update_flash_store_handler, (void *) ctx);
+
+ pthread_attr_destroy (&attr);
+ }
+ triggered++;
+
+ return 0;
+}
+
+/**
+ * Timeout handler for image download via tftp and flash write.
+ *
+ * \param arg address of managerd context
+ */
+static void*
+vs_mme_tftp_update_timeout_handler (void *arg)
+{
+ static int retries_number = 0;
+ unsigned char result = 0;
+ int ret = 0;
+ char cmd[512] = {0};
+
+ assert (NULL != arg);
+ struct managerd_ctx *ctx = (struct managerd_ctx *) arg;
+
+ while (1)
+ {
+ if (update_ctx.lock == 1
+ && update_ctx.protocol == LIBSPID_TRANSFER_TFTP_PROTOCOL)
+ {
+ sleep (MME_TOUT);
+ if (update_ctx.tftp_write == 0)
+ {
+ if (retries_number <= LIBSPID_TRANSFER_RETRY_COUNT)
+ {
+ char file_name[LIBSPID_CONFIG_LINE_MAX_LEN];
+ char *file;
+
+ file = strrchr (ctx->file, '/');
+ if (file == NULL)
+ {
+ strcpy (file_name, ctx->file);
+ }
+ else
+ {
+ file++;
+ strcpy (file_name, file);
+ }
+
+ sprintf (cmd, "tftp -g -r %s -l %s%s %s %s",
+ ctx->file, LIBSPID_EOC_TMP_PATH, file_name,
+ ctx->server_ip, ctx->server_port);
+ ret = system (cmd);
+ if (ret == 0)
+ {
+ update_ctx.tftp_write = 1;
+ retries_number = 0;
+ }
+ else
+ retries_number++;
+ }
+ else
+ {
+ update_ctx.lock = 0;
+ update_ctx.protocol = 0;
+ update_ctx.tftp_write = 0;
+ retries_number = 0;
+ result = LIBSPID_UPDATE_END_FLASH_TFTP_FAILURE;
+ if (0 != vs_mme_send_indication (ctx,
+ VS_UPDATE_END,
+ result))
+ {
+ syslog (LOG_ERR, "%s: cannot send vs_update_start.ind",
+ __FUNCTION__);
+ }
+ }
+ }
+ else if (update_ctx.tftp_write == 1)
+ {
+ char file_name[LIBSPID_CONFIG_LINE_MAX_LEN];
+ char *file;
+ MD5_CTX md5_ctx;
+ unsigned char md[MD5_DIGEST_LENGTH];
+ int fd, len;
+ unsigned char data[1024];
+
+ strcpy (file_name, LIBSPID_EOC_TMP_PATH);
+ file = strrchr (ctx->file, '/');
+ if (file == NULL)
+ strcat (file_name, ctx->file);
+ else
+ {
+ file++;
+ strcat (file_name, file);
+ }
+
+ /* Calculate MD5 value of the received image */
+ if (1 != MD5_Init (&md5_ctx))
+ {
+ syslog (LOG_ERR, "%s: cannot initialize md5",
+ __FUNCTION__);
+ result = LIBSPID_UPDATE_END_FLASH_TFTP_FAILURE;
+ }
+ else
+ {
+ /* calculate MD5 for image file */
+ fd = open (file_name, O_RDONLY, 0);
+
+ while ((len = read (fd, data, 1024)) > 0)
+ MD5_Update (&md5_ctx, data, len);
+ close (fd);
+
+ if (1 != MD5_Final (md, &md5_ctx))
+ {
+ syslog (LOG_ERR, "%s: cannot finalize md5",
+ __FUNCTION__);
+ result = LIBSPID_UPDATE_END_FLASH_TFTP_FAILURE;
+ }
+ else
+ {
+ if (memcmp (ctx->md5_sum, md,
+ MD5_DIGEST_LENGTH) != 0)
+ result = LIBSPID_UPDATE_END_FLASH_TFTP_FAILURE;
+ else
+ {
+ ret = libspid_eoc_upgrade_local_image (file_name);
+ if (ret == LIBSPID_SUCCESS)
+ result = LIBSPID_UPDATE_END_FLASH_TFTP_SUCCESS;
+ else
+ result = LIBSPID_UPDATE_END_FLASH_TFTP_FAILURE;
+ }
+ }
+ }
+
+ if (0 != vs_mme_send_indication (ctx, VS_UPDATE_END,
+ result))
+ {
+ syslog (LOG_ERR, "%s: cannot send vs_update_start.ind",
+ __FUNCTION__);
+ }
+ update_ctx.lock = 0;
+ update_ctx.protocol = 0;
+ update_ctx.tftp_write = 0;
+ }
+ else
+ {
+ update_ctx.lock = 0;
+ update_ctx.protocol = 0;
+ update_ctx.tftp_write = 0;
+ }
+
+ }
+ }
+}
+
+/**
+ * Init parameters for tftp update
+ *
+ * \param ctx managerd context
+ * \param mac destination mac address
+ */
+static int
+vs_mme_tftp_update_init_ctx (struct managerd_ctx *ctx, char *mac)
+{
+ pthread_attr_t attr;
+ static int triggered = 0;
+
+ assert (NULL != ctx);
+ assert (NULL != mac);
+
+ memset (&update_ctx, 0, sizeof (update_ctx_t));
+
+ update_ctx.lock = 1;
+ update_ctx.protocol = LIBSPID_TRANSFER_TFTP_PROTOCOL;
+ update_ctx.tftp_write = 0;
+ update_ctx.exit_writer = 1;
+ memcpy (update_ctx.mac, mac, ETH_ALEN);
+
+ /* create a timeout monitor and flash writer thread */
+ if (triggered == 0)
+ {
+ pthread_attr_init (&attr);
+ pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED);
+
+ pthread_create (&update_ctx.timer, &attr,
+ &vs_mme_tftp_update_timeout_handler, (void *) ctx);
+
+ pthread_attr_destroy (&attr);
+ }
+ triggered++;
+
+ return 0;
+}
+
+/**
+ * Send a VS_UPDATE_START.CNF MME to BR interface.
+ *
+ * \param ctx managerd context
+ * \param request MME containg VS_UPDATE_START request
+ * \param confirm MME buffer to put VS_UPDATE_START confirm
+ * \param len confirm buffer length
+ * \return error code
+ */
+extern enum bridge_status
+vs_mme_update_start (struct managerd_ctx *ctx, MME_t *request, MME_t *confirm,
+ int len)
+{
+ vs_update_start_req_t *update_start_req;
+ vs_update_start_cnf_t *update_start_cnf;
+ spidcom_image_desc_t desc;
+ char mtd_name[32];
+ uint8_t version_id[32];
+ uint8_t board_type[32];
+ int check_bt, ret;
+ char enable[LIBSPID_CONFIG_LINE_MAX_LEN] = {0};
+
+ assert (ctx != NULL);
+ assert (request != NULL);
+ assert (confirm != NULL);
+ assert ((unsigned int) len >= sizeof(vs_update_start_cnf_t)
+ + sizeof (MME_t));
+
+ /* check for request content */
+ if (memcmp ((char*) request + sizeof (MME_t), OUI_SPIDCOM, 3))
+ return TO_DROP;
+
+ /* check if remote upgrade is allowed */
+ ret = libspid_config_read_item (LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_REMOTE_UPDATE,
+ enable, LIBSPID_CONFIG_LINE_MAX_LEN);
+ if (ret == LIBSPID_SUCCESS && strcmp (enable, "no") == 0)
+ return TO_DROP;
+
+ update_start_req = (vs_update_start_req_t*)
+ ((unsigned char*) request + sizeof (MME_t));
+ update_start_cnf = (vs_update_start_cnf_t*)
+ ((unsigned char*) confirm + sizeof (MME_t));
+
+ /* prepare confirm packet */
+ if (0 != vs_mme_prepare_confirm (ctx, request, confirm, len))
+ {
+ syslog (LOG_ERR, "%s: cannot prepare confirmation", __FUNCTION__);
+ }
+ memcpy (update_start_cnf->oui, OUI_SPIDCOM, 3);
+
+ /* see if board type has to be checked */
+ ret = libspid_config_read_item (
+ LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_UPGRADE_BOARD_TYPE_CHECK,
+ enable, LIBSPID_CONFIG_LINE_MAX_LEN);
+ check_bt = (ret == LIBSPID_SUCCESS && !strcmp (enable, "yes")) ? 1 : 0;
+
+ /* get image description */
+ memset (&desc, '\0', sizeof (desc));
+ memset (version_id, '\0', 32);
+ if (LIBSPID_SUCCESS != libspid_image_get_desc \
+ (LIBSPID_IMAGE_DESC_TYPE_CURRENT, &desc, mtd_name))
+ {
+ syslog (LOG_ERR, "%s: cannot get current image descriptor",
+ __FUNCTION__);
+ }
+ else
+ {
+ memcpy (version_id, desc.version, sizeof (desc.version));
+ memcpy (board_type, desc.board_type, sizeof (desc.board_type));
+ }
+
+ if (update_ctx.lock)
+ {
+ update_start_cnf->status = LIBSPID_UPDATE_START_MODEM_BUSY;
+ }
+ else
+ {
+ if (update_start_req->protocol > LIBSPID_TRANSFER_TFTP_PROTOCOL)
+ update_start_cnf->status = LIBSPID_UPDATE_START_BAD_PROTOCOL;
+ else if (memcmp (update_start_req->version_id, version_id, 16) == 0)
+ update_start_cnf->status = LIBSPID_UPDATE_START_VERSION_OK;
+ else if (update_start_req->arch != LIBSPID_UPDATE_ARCH_SPC300)
+ update_start_cnf->status = LIBSPID_UPDATE_START_BAD_ARCH;
+ else if (update_start_req->type != LIBSPID_UPDATE_TYPE_NORMAL)
+ update_start_cnf->status = LIBSPID_UPDATE_START_BAD_TYPE;
+ else if (check_bt != 0
+ && strlen ((char *) update_start_req->board_type) != 0
+ && strcmp ((char *) update_start_req->board_type,
+ (char *) board_type) != 0)
+ update_start_cnf->status = LIBSPID_UPDATE_START_BAD_BOARD_TYPE;
+ else
+ {
+ update_start_cnf->status = LIBSPID_UPDATE_START_SUCCESS;
+
+ if (update_start_req->protocol == LIBSPID_TRANSFER_TFTP_PROTOCOL)
+ {
+ strcpy (ctx->file, (char *) update_start_req->file);
+ strcpy (ctx->server_ip, (char *) update_start_req->server_ip);
+ strcpy (ctx->server_port,
+ (char *) update_start_req->server_port);
+ memcpy (ctx->md5_sum, update_start_req->md5_sum,
+ MD5_DIGEST_LENGTH);
+ if (0 != vs_mme_tftp_update_init_ctx (ctx, (char *)
+ confirm->mme_dest))
+ {
+ syslog (LOG_ERR, "%s: cannot initialize update context",
+ __FUNCTION__);
+ }
+ }
+ else
+ {
+ if (0 != vs_mme_update_init_ctx (ctx, (char *)
+ confirm->mme_dest))
+ {
+ syslog (LOG_ERR, "%s: cannot initialize update context",
+ __FUNCTION__);
+ }
+ }
+ }
+ }
+
/* send confirmation MME */
- bridge_send(ctx, (uint8_t*) confirm, sizeof(MME_t) + sizeof(vs_reset_cnf_t));
+ bridge_send (ctx, (uint8_t*) confirm,
+ sizeof (MME_t) + sizeof (vs_update_start_cnf_t));
+
+ return TO_DROP;
+}
+
+/**
+ * Send a VS_UPDATE_TRANSFER.CNF MME to BR interface.
+ *
+ * \param ctx managerd context
+ * \param request MME containg VS_UPDATE_TRANSFER request
+ * \param confirm MME buffer to put VS_UPDATE_TRANSFER confirm
+ * \param len confirm buffer length
+ * \return error code
+ */
+extern enum bridge_status
+vs_mme_update_transfer (struct managerd_ctx *ctx, MME_t *request,
+ MME_t *confirm, int len)
+{
+ vs_update_transfer_req_t *update_transfer_req;
+ vs_update_transfer_cnf_t *update_transfer_cnf;
+
+ assert (ctx != NULL);
+ assert (request != NULL);
+ assert (confirm != NULL);
+ assert ((unsigned int) len >= sizeof (vs_update_transfer_cnf_t)
+ + sizeof (MME_t));
+
+ /* check for request content */
+ if (memcmp ((char*) request + sizeof (MME_t), OUI_SPIDCOM, 3))
+ return TO_DROP;
+
+ update_transfer_req = (vs_update_transfer_req_t*)
+ ((unsigned char*) request + sizeof (MME_t));
+ update_transfer_cnf = (vs_update_transfer_cnf_t*)
+ ((unsigned char*) confirm + sizeof (MME_t));
+
+ pthread_mutex_lock (&update_ctx.mutex);
- /* reset the modem in a dedicated thread */
- pthread_attr_init(&attr);
- pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
- pthread_create(&reset_job, &attr, &_reboot_handler, NULL);
- pthread_attr_destroy(&attr);
+ /* packet received => disable timer */
+ update_ctx.exit_timer = 1;
+
+ /* prepare confirm packet */
+ if (0 != vs_mme_prepare_confirm (ctx, request, confirm, len))
+ {
+ syslog (LOG_ERR, "%s: cannot prepare confirmation", __FUNCTION__);
+ }
+ memcpy (update_transfer_cnf->oui, OUI_SPIDCOM, 3);
+
+ /* save image slice into flash */
+ if (update_ctx.lock == 0)
+ {
+ update_transfer_cnf->status = LIBSPID_UPDATE_TRANSFER_FAILED;
+ update_transfer_cnf->id = 0;
+ }
+ else if ((unsigned int) update_ctx.next_blk_id == update_transfer_req->id)
+ {
+ /** Store the being transferred image into SDRAM.
+ * Will be copied into flash at the end of the transfer. */
+ int alloc_ok = 0;
+ if (update_ctx.head == NULL)
+ {
+ update_ctx.head = (firmware_slice_t*) malloc
+ (sizeof (firmware_slice_t));
+ if (update_ctx.head != NULL)
+ {
+ update_ctx.head->next = NULL;
+ update_ctx.curr = update_ctx.head;
+ alloc_ok = 1;
+ }
+ }
+ else
+ {
+ update_ctx.curr->next = (firmware_slice_t*) malloc
+ (sizeof (firmware_slice_t));
+ if (update_ctx.curr->next != NULL)
+ {
+ update_ctx.curr = update_ctx.curr->next;
+ update_ctx.curr->next = NULL;
+ alloc_ok = 1;
+ }
+ }
+
+ if (alloc_ok)
+ {
+ memcpy (update_ctx.curr->slice, update_transfer_req->data,
+ update_transfer_req->len);
+ update_ctx.curr->size = update_transfer_req->len;
+ update_ctx.fsize += update_transfer_req->len;
+
+ update_transfer_cnf->status = LIBSPID_UPDATE_TRANSFER_SUCCESS;
+ update_transfer_cnf->id = ++update_ctx.next_blk_id;
+ }
+ else
+ {
+ update_transfer_cnf->status = LIBSPID_UPDATE_TRANSFER_FAILED;
+ update_transfer_cnf->id = update_ctx.next_blk_id;
+ }
+ }
+ else
+ {
+ update_transfer_cnf->status = LIBSPID_UPDATE_TRANSFER_FAILED;
+ update_transfer_cnf->id = update_ctx.next_blk_id;
+ }
+
+ pthread_mutex_unlock (&update_ctx.mutex);
+
+ /* send confirmation MME */
+ bridge_send (ctx, (uint8_t*) confirm,
+ sizeof (MME_t) + sizeof (vs_update_transfer_cnf_t));
+
+ return TO_DROP;
+}
+
+/**
+ * Send a VS_UPDATE_END.CNF MME to BR interface.
+ *
+ * \param ctx managerd context
+ * \param request MME containg VS_UPDATE_END request
+ * \param confirm MME buffer to put VS_UPDATE_END confirm
+ * \param len confirm buffer length
+ * \return error code
+ */
+extern enum bridge_status
+vs_mme_update_end (struct managerd_ctx *ctx, MME_t *request, MME_t *confirm,
+ int len)
+{
+ vs_update_end_req_t *update_end_req;
+ vs_update_end_cnf_t *update_end_cnf;
+ unsigned char md[MD5_DIGEST_LENGTH];
+ MD5_CTX md5_ctx;
+
+ assert (ctx != NULL);
+ assert (request != NULL);
+ assert (confirm != NULL);
+ assert ((unsigned int) len >= sizeof (vs_update_end_cnf_t)
+ + sizeof (MME_t));
+
+ /* check for request content */
+ if (memcmp ((char*) request + sizeof (MME_t), OUI_SPIDCOM, 3))
+ return TO_DROP;
+
+ update_end_req = (vs_update_end_req_t*)
+ ((unsigned char*) request + sizeof (MME_t));
+ update_end_cnf = (vs_update_end_cnf_t*)
+ ((unsigned char*) confirm + sizeof (MME_t));
+
+ if (update_ctx.protocol == LIBSPID_TRANSFER_PROTOCOL)
+ {
+ pthread_mutex_lock (&update_ctx.mutex);
+
+ /* stop timer */
+ update_ctx.exit_timer = 2;
+ }
+
+ /* prepare confirm packet */
+ if (0 != vs_mme_prepare_confirm (ctx, request, confirm, len))
+ {
+ syslog (LOG_ERR, "%s: cannot prepare confirmation", __FUNCTION__);
+ }
+ memcpy (update_end_cnf->oui, OUI_SPIDCOM, 3);
+
+ /* Calculate MD5 value of the received image */
+ if (1 != MD5_Init (&md5_ctx))
+ {
+ syslog (LOG_ERR, "%s: cannot initialize md5", __FUNCTION__);
+ }
+
+ if (update_ctx.protocol == LIBSPID_TRANSFER_PROTOCOL)
+ {
+ update_ctx.curr = update_ctx.head;
+ while (update_ctx.curr != NULL)
+ {
+ if (1 != MD5_Update (&md5_ctx, update_ctx.curr->slice,
+ update_ctx.curr->size))
+ {
+ syslog (LOG_ERR, "%s: cannot update md5", __FUNCTION__);
+ }
+ update_ctx.curr = update_ctx.curr->next;
+ }
+ }
+
+ if (1 != MD5_Final (md, &md5_ctx))
+ {
+ syslog (LOG_ERR, "%s: cannot finalize md5", __FUNCTION__);
+ }
+
+ if (update_ctx.lock == 0
+ || memcmp (update_end_req->md5_sum, md, MD5_DIGEST_LENGTH) != 0)
+ {
+ update_end_cnf->status = LIBSPID_UPDATE_END_MD5_ERROR;
+ update_ctx.exit_writer = 1;
+ }
+ else
+ {
+ update_end_cnf->status = LIBSPID_UPDATE_END_SUCCESS;
+ update_ctx.exit_writer = 0;
+ }
+
+ if (update_ctx.protocol == LIBSPID_TRANSFER_PROTOCOL)
+ pthread_mutex_unlock (&update_ctx.mutex);
+
+ /* send confirmation MME */
+ bridge_send (ctx, (uint8_t*) confirm,
+ sizeof (MME_t) + sizeof (vs_update_end_cnf_t));
+
+ return TO_DROP;
+}
+
+/**
+* Announce system boot by broadcasting VS_RESET.IND
+*/
+static void*
+vs_mme_reset_ind_handler ()
+{
+ mme_ctx_t indication_ctx, response_ctx;
+ unsigned char snd_buffer[ETH_DATA_LEN];
+ int ret;
+ char *iface = LIBSPID_EOC_PLC_IFACE;
+ unsigned char mac_address[ETH_ALEN] = "\xff\xff\xff\xff\xff\xff";
+
+ /* initialize indication MME for VS_RESET */
+ ret = mme_init (&indication_ctx, VS_RESET | MME_IND,
+ snd_buffer, (unsigned int) ETH_DATA_LEN);
+ if (ret == MME_SUCCESS)
+ {
+ if (ret == MME_SUCCESS)
+ {
+ /* wait for the bridge is ready */
+ sleep (5);
+ /* send indication MME */
+ ret = mme_send (&indication_ctx, MME_SEND_IND, iface,
+ mac_address, &response_ctx);
+ }
+ }
+
+ return 0;
+}
+
+void
+vs_mme_reset_ind ()
+{
+ pthread_t reset_thread;
+
+ pthread_create (&reset_thread, NULL, &vs_mme_reset_ind_handler, NULL);
+ pthread_detach (reset_thread);
+ return;
+}
+
+/**
+ * Receive a VS_UPDATE_END.IND MME on MME interface.
+ *
+ * \param ctx managerd context
+ * \param request MME containg VS_UPDATE_END request
+ * \param confirm MME buffer to put VS_UPDATE_END confirm
+ * \param len confirm buffer length
+ * \return error code
+ */
+extern enum bridge_status
+vs_mme_tftp_update_end_recv_indication (struct managerd_ctx *ctx,
+ MME_t *request, MME_t *confirm,
+ int len)
+{
+ char mac[LIBSPID_MAC_STR_LEN];
+ vs_update_end_ind_t *vs_tftp_update_end_ind;
+ int ret = 0;
+ unsigned char status = 0;
+ const char delimiters[2] = LIBSPID_UPDATE_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];
+ char buffer[LIBSPID_CONFIG_LINE_MAX_LEN];
+
+ assert (NULL != ctx);
+ assert (NULL != request);
+ assert (NULL != confirm);
+ assert ((unsigned int) len >= sizeof (MME_t));
+
+ vs_tftp_update_end_ind = (vs_update_end_ind_t *)
+ ((unsigned char *) request + sizeof (MME_t));
+
+ ret = libspid_mac_bin_to_str (request->mme_src, mac);
+ if (ret != LIBSPID_SUCCESS)
+ return TO_DROP;
+
+ status = vs_tftp_update_end_ind->status;
+
+ /* Check if image is successfully stored and selected */
+ switch (status)
+ {
+ /* this is check in libspid function for mme update*/
+ case LIBSPID_UPDATE_END_FLASH_SUCCESS:
+ return TO_DROP;
+
+ case LIBSPID_UPDATE_END_FLASH_FAILURE:
+ return TO_DROP;
+
+ case LIBSPID_UPDATE_END_FLASH_TIMEOUT:
+ return TO_DROP;
+
+ /* this is check for tftp update */
+ case LIBSPID_UPDATE_END_FLASH_TFTP_SUCCESS:
+ syslog (LOG_WARNING,"Image transfer to slave %s is successful.",
+ mac);
+ break;
+
+ case LIBSPID_UPDATE_END_FLASH_TFTP_FAILURE:
+ syslog (LOG_WARNING,"TFTP update failed for slave %s. "
+ "Image not correctly written into flash",
+ mac);
+ break;
+
+ default:
+ return TO_DROP;
+ }
+
+ strcpy (key, mac);
+ ret = libspid_config_read_line (LIBSPID_UPDATE_INFO_PATH,
+ delimiters, key, &elt_number,
+ elt, buffer, LIBSPID_CONFIG_LINE_MAX_LEN);
+
+ /* write in update.info file status of update */
+ if (ret != LIBSPID_SUCCESS)
+ strcpy (elt[0], "unknown image");
+
+ strcpy (elt[1], TFTP_UPDATE_ACTION_NONE);
+ if (status == LIBSPID_UPDATE_END_FLASH_TFTP_SUCCESS)
+ strcpy (elt[2], TFTP_UPDATE_SUCCESS);
+ else
+ strcpy (elt[2], TFTP_UPDATE_FAILED);
+
+ ret = libspid_config_write_line (LIBSPID_UPDATE_INFO_PATH, delimiters[0],
+ mac, 4, elt);
+ if (ret != LIBSPID_SUCCESS)
+ {
+ syslog (LOG_WARNING,"Unable to write in update.info file");
+ return TO_DROP;
+ }
+
+ ret = libspid_system_save_file (LIBSPID_UPDATE_INFO_PATH);
+ if (ret != LIBSPID_SUCCESS)
+ {
+ syslog (LOG_WARNING,"Unable to save update.info file");
+ }
return TO_DROP;
}
diff --git a/cleopatre/application/onlined/Makefile b/cleopatre/application/onlined/Makefile
new file mode 100644
index 0000000000..2ea3acd50a
--- /dev/null
+++ b/cleopatre/application/onlined/Makefile
@@ -0,0 +1,78 @@
+BIN=onlined
+OBJPATH=obj
+SRCPATH=src
+INCPATH=inc
+EXEPATH = .
+
+CLEO_DIR = ../..
+LINUX_DIR = $(CLEO_DIR)/linux-2.6.25.10-spc300
+LIBSPID_DIR = $(CLEO_DIR)/application/libspid
+LIBMME_DIR = $(CLEO_DIR)/application/libmme
+
+LIBSPID_SO_BIN = $(LIBSPID_DIR)/libspid.so
+LIBMME_SO_BIN = $(LIBMME_DIR)/libmme.so
+
+ifeq ($(CC_FOR_TARGET),) #direct compile
+CC=arm-linux-gcc
+CC_WITH_CFLAGS=$(CC) -I/opt/spidcom/spc300/usr/include -g -Os
+CC_WITHOUT_CFLAGS=$(CC)
+else #compile from buildroot
+CC_WITH_CFLAGS=$(CC)
+CC_WITHOUT_CFLAGS=$(CC_FOR_TARGET)
+endif
+
+RESPONSE_FILE = extra_flags
+INCLUDES = -I$(INCPATH) \
+ -I$(LINUX_DIR)/include \
+ -I$(LINUX_DIR)/include/asm-arm/arch-spc300 \
+ -I$(CLEO_DIR)/include \
+ $(shell $(LIBSPID_DIR)/libspid-config --I_opts)
+
+EXTRA_CFLAGS = $(INCLUDES) -MMD -Wall \
+ @$(CLEO_DIR)/$(RESPONSE_FILE)
+
+LIBS = $(shell $(LIBSPID_DIR)/libspid-config --L_opts) \
+ $(shell $(LIBSPID_DIR)/libspid-config --libs)
+
+ifeq ($(TEST),y)
+CC = $(CC_FOR_TEST)
+AR = $(AR_FOR_TEST)
+CC_WITH_CFLAGS=$(CC) $(CFLAGS_FOR_TEST)
+CC_WITHOUT_CFLAGS = $(CC) $(CFLAGS_FOR_TEST) -static
+OBJPATH = $(CLEO_DIR)/$(OBJPATH_FOR_TEST)
+LIBMME_OBJPATH = $(CLEO_DIR)/$(OBJPATH_FOR_TEST)
+LIBSPID_OBJPATH = $(CLEO_DIR)/$(OBJPATH_FOR_TEST)
+EXEPATH = $(OBJPATH)
+EXTRA_CFLAGS = -I$(INCPATH) \
+ -I$(LINUX_DIR)/include/asm-arm/arch-spc300 \
+ $(shell $(LIBSPID_DIR)/libspid-config --I_opts) \
+ -MMD -Wall
+endif
+
+SRCS=$(subst $(SRCPATH)/,,$(wildcard $(SRCPATH)/*.c))
+OBJS=$(addprefix $(OBJPATH)/,$(SRCS:.c=.o))
+DEPS=$(patsubst %o,%d,$(OBJS))
+
+all: $(EXEPATH)/$(BIN)
+
+$(EXEPATH)/$(BIN): $(OBJS) $(LIBSPID_SO_BIN) $(LIBMME_SO_BIN)
+ $(CC_WITHOUT_CFLAGS) -o $@ $(OBJS) $(LIBS)
+
+$(OBJPATH)/%.o: $(SRCPATH)/%.c
+ $(CC_WITH_CFLAGS) $(EXTRA_CFLAGS) -o $@ -c $<
+
+$(OBJS): | $(OBJPATH)
+
+$(OBJPATH):
+ mkdir $(OBJPATH)
+
+$(LIBSPID_SO_BIN) $(LIBMME_SO_BIN):
+ $(error libspid or libmme output files are not found)
+
+-include $(DEPS)
+
+.PHONY: all clean
+
+clean:
+ rm -f $(OBJS) $(DEPS) $(BIN)
+ rmdir $(OBJPATH)
diff --git a/cleopatre/application/onlined/inc/onlined.h b/cleopatre/application/onlined/inc/onlined.h
new file mode 100644
index 0000000000..229e392982
--- /dev/null
+++ b/cleopatre/application/onlined/inc/onlined.h
@@ -0,0 +1,193 @@
+/* SPC300-eoc bundle {{{
+ *
+ * Copyright (C) 2010 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file application/onlined/inc/onlined.h
+ * \brief structures and defines of onlined
+ * \ingroup onlined
+ *
+ *
+ */
+#ifndef ONLINED_H
+#define ONLINED_H
+
+#include <linux/if_packet.h>
+#include <linux/if_ether.h>
+#include <syslog.h>
+
+#include "libspid.h"
+
+#ifdef __FTESTS_PC__
+ #define ONLINED_IFACE "tap0"
+#else
+ #define ONLINED_IFACE "br0"
+#endif
+
+#if defined __UTESTS__ || defined __FTESTS_PC__
+ #define ONLINED_DEFAULT_TOPO_REFRESH_PERIOD_SEC 5
+ #define ONLINED_TFTP_UPDATE_CHECK_SEC 5
+#else
+ #define ONLINED_DEFAULT_TOPO_REFRESH_PERIOD_SEC 60
+ #define ONLINED_TFTP_UPDATE_CHECK_SEC 720
+#endif
+
+#define ONLINED_DEFAULT_STREAM_QUALITY 226
+#define ONLINED_MAX_THROUGHPUT_MBPS 140
+
+#define ONLINED_HEADER_LENGTH LIBSPID_ONLINE_INFO_HEADER_LENGTH
+
+/**
+ * list of network status
+ */
+typedef enum {
+ ONLINED_SLAVE_STATUS_UNASSOCIATED = 0,
+ ONLINED_SLAVE_STATUS_ASSOCIATED = 1,
+ ONLINED_SLAVE_STATUS_AUTHENTICATING = 2,
+ ONLINED_SLAVE_STATUS_AUTHENTICATING_RST = 3,
+ ONLINED_SLAVE_STATUS_NB = 4
+} onlined_nw_stat_t;
+
+/**
+ * list of slave status in online.info
+ */
+typedef enum {
+ ONLINED_SLAVE_INFO_UNAUTHORIZED = 0,
+ ONLINED_SLAVE_INFO_AUTHORIZED = 1
+} onlines_info_stat_t;
+
+typedef struct mac_node {
+ char mac[LIBSPID_MAC_STR_LEN];
+ int authorisation;
+ libspid_boolean_t autoconf_failed;
+ int mac_limitations;
+ struct mac_node *next;
+} mac_node_t;
+
+typedef struct {
+ char mac[LIBSPID_MAC_STR_LEN];
+ struct timeval tftp_start_time;
+ int status;
+} tftp_node_t;
+
+/** main context of onlined daemon */
+typedef struct {
+ /** path of the white_list.info file */
+ char *eoc_online_info_path;
+ /** netlink socket descriptor for PLC driver comm */
+ int plc_sock;
+ /** onlined netlink address descriptor for PLC driver comm */
+ struct sockaddr_ll sll;
+ /* refresh period in seconds */
+ int t_refresh;
+ /* current topology */
+ mac_node_t *curr_mac_list;
+ /* previous topology */
+ mac_node_t *prev_mac_list;
+ /* current value of MAC limitation */
+ int mac_limitation;
+ /** send mac limitation */
+ libspid_boolean_t send_mac_limitation;
+ uint8_t br_mac_addr[ETH_ALEN];
+ /* current value of output_level_all*/
+ int output_level_all;
+ /* send autoconfiguration */
+ libspid_boolean_t send_autoconfiguration;
+ /* new slave on network */
+ libspid_boolean_t new_slave;
+ /* slave status (offline, online) */
+ libspid_boolean_t slave_offline;
+ /* tftp update is running */
+ libspid_boolean_t tftp_update_running;
+ /* tftp update list */
+ tftp_node_t tftp_mac_list[LIBSPID_WHITE_LIST_MAX_STA_NUM];
+ /* number of element in tftp update list */
+ int tftp_list_number;
+ /* time of last modification for port and service conf files */
+ time_t port_modification_time;
+ time_t service_modification_time;
+ time_t mac_limit_modification_time;
+ time_t vlan_port_modification_time;
+ time_t ethernet_port_modification_time;
+ time_t storm_modification_time;
+ time_t wl_ip_modification_time;
+ time_t igmp_snooping_modification_time;
+ time_t ethctl_modification_time;
+} onlined_ctx_t;
+
+/** structure containing STA's MAC address together */
+/** with average Tx/Rx PHY data rate */
+typedef struct {
+ /** STA's MAC address */
+ unsigned char mac_addr_bin[ETH_ALEN];
+ /** STA's TX PHY data rate */
+ char tx_phy_data_rate;
+ /** STA's RX PHY data rate */
+ char rx_phy_data_rate;
+} onlined_nw_stats_t;
+
+/**
+ * list of errors returned by onlined functions
+ */
+typedef enum {
+ ONLINED_SUCCESS = 0,
+ /** bad input parameters */
+ ONLINED_ERROR_PARAM,
+ /** netlink socket creation error */
+ ONLINED_ERROR_NETLINK_SOCKET = 10,
+ /** bind error */
+ ONLINED_ERROR_BIND = 12,
+ /** function fopen returned error */
+ ONLINED_ERROR_FOPEN = 14,
+ /** MME returned wrong result */
+ ONLINED_ERROR_MME_WRONG_RESULT = 16,
+ /** MME returned wrong MAC address (00:00:00:00:00:00) */
+ ONLINED_ERROR_MME_WRONG_MAC = 17,
+ /** number of MAC addresses is zero */
+ ONLINED_ERROR_MME_WRONG_N_MAC_ADDR = 18,
+ /** value for authorisation in MME is different from '0' or '1'*/
+ ONLINED_ERROR_MME_AUTHORISATION_WRONG_VALUE = 20,
+ /** MME payload still contains some data */
+ ONLINED_ERROR_MME_CONTAIN_REDUNDANT_DATA = 22,
+ /** error in conversion between bin and string */
+ /** representation of MAC address */
+ ONLINED_ERROR_LIBSPID_BIN_STR_CONVERSION = 24,
+ /** Error in file operations */
+ ONLINED_ERROR_FOPS = 30,
+ /** Remote image upgrade error */
+ ONLINED_ERROR_UPGRADE = 40,
+ /** Remote slave autoconfiguration error */
+ ONLINED_ERROR_AUTOCONF = 50,
+ /** Autoconfiguration is not allowed */
+ ONLINED_AUTOCONF_NOT_ALLOWED = 60,
+ /** Autoconfiguration exist */
+ ONLINED_AUTOCONF_EXIST = 65,
+ /** Error in unregistering for informing about file modification */
+ ONLINED_ERROR_UNREGISTER = 70,
+ /** Error reading mac limitation **/
+ ONLINED_ERROR_MAC_LIMITATION = 80,
+ /** Error reading output level all **/
+ ONLINED_ERROR_OUTPUT_LEVEL_ALL = 90,
+ /** general error */
+ ONLINED_ERROR_GEN = 95,
+} onlined_error_t;
+
+
+/**
+ * Initialize online daemon context.
+ * \return onlined daemon context
+ */
+onlined_ctx_t *
+onlined_init ();
+
+/**
+ * Uninitialize online dameon context.
+ * \param ctx onlined daemon context
+ */
+onlined_error_t
+onlined_uninit (onlined_ctx_t *ctx);
+
+#endif /* ONLINED_H */
diff --git a/cleopatre/application/onlined/inc/onlined_configure.h b/cleopatre/application/onlined/inc/onlined_configure.h
new file mode 100644
index 0000000000..eea76288eb
--- /dev/null
+++ b/cleopatre/application/onlined/inc/onlined_configure.h
@@ -0,0 +1,80 @@
+/* SPC300-eoc bundle {{{
+ *
+ * Copyright (C) 2010 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file application/onlined/inc/onlined_configure.h
+ * \brief structures and defines of autoconfigure feature
+ * \ingroup onlined
+ *
+ */
+
+#ifndef ONLINED_CONFIGURE_H
+#define ONLINED_CONFIGURE_H
+
+#define ONLINED_AUTOCONF_CREATE_EN 1
+#define ONLINED_MAX_PORT_NUM LIBSPID_PORT_PER_SLAVE_MAX
+#define ONLINED_MAX_SERVICE_NUM LIBSPID_SERVICE_AMOUNT_LIMIT
+
+#if defined __UTESTS__ || defined __FTESTS_PC__
+#define ONLINED_AUTOCONF_TMP_DIR "/tmp/utests/autoconf"
+#define ONLINED_AUTOCONF_TMP_SLAVE_CONF "/tmp/utests/autoconf/slave.conf"
+#define ONLINED_AUTOCONF_DIR "/tmp/utests/local/autoconf"
+#else
+#define ONLINED_AUTOCONF_TMP_DIR "/tmp/autoconf"
+#define ONLINED_AUTOCONF_TMP_SLAVE_CONF "/tmp/autoconf/slave.conf"
+#define ONLINED_AUTOCONF_DIR "/usr/local/autoconf"
+#endif /* __FTESTS_PC__ */
+
+#define ONLINED_AUTOCONF_INITD_DIR ONLINED_AUTOCONF_TMP_DIR"/init.d"
+#define ONLINED_AUTOCONF_NETWORK_DIR ONLINED_AUTOCONF_TMP_DIR"/network"
+#define ONLINED_AUTOCONF_SLAVE_FILE ONLINED_AUTOCONF_INITD_DIR"/S88slave"
+#define ONLINED_AUTOCONF_DEFAULT_CONF ONLINED_AUTOCONF_DIR"/default.tar"
+
+#define ONLINED_AUTOCONF_HEADER "#! /bin/sh\n"
+#define ONLINED_AUTOCONF_VLAN_MSG "\n# VLAN tagging\n"
+#define ONLINED_AUTOCONF_TC_MSG "\n# Traffic Limitation\n"
+#define ONLINED_AUTOCONF_BROADSTORM_MSG "\n# Broadcast Storm\n"
+#define ONLINED_AUTOCONF_ETHPORT_MSG "\n# Ethernet port \n"
+#define ONLINED_AUTOCONF_IGMP_MSG "\n# Trap IGMP\n"
+#define ONLINED_AUTOCONF_ETHCTL_MSG "\n# Mirror Flow and Aging Time \n"
+#define ONLINED_AUTOCONF_EXIT "\nexit\n"
+
+/* NOTE : Kernel Warning generated if no rules are found on erase operation */
+#define ONLINED_AUTOCONF_TC_INIT_QDISC(if,fp,tmp) {\
+ sprintf (tmp, "tc qdisc del dev %s root \n", if); \
+ fwrite (tmp, 1, strlen (tmp), fp); \
+ memset (tmp, 0, sizeof (tmp)); \
+}
+
+/* For quantum story, */
+/* see http://mailman.ds9a.nl/pipermail/lartc/2003q1/007508.html */
+#define ONLINED_AUTOCONF_TC_QUANTUM_DEFAULT 10
+int
+onlined_create_autoconf_dir (void);
+int
+onlined_remove_autoconf_dir (void);
+onlined_error_t
+onlined_configure (onlined_ctx_t * ctx, char *mac);
+onlined_error_t
+onlined_broadcast_storm (onlined_ctx_t * ctx, char *mac, int nvram_nb_eth_port,
+ int nb_service);
+onlined_error_t
+onlined_bw_limit (onlined_ctx_t * ctx, char *mac, int nvram_nb_eth_port,
+ int *nb_service);
+onlined_error_t
+onlined_broadcast_storm_mod_eoc (onlined_ctx_t * ctx, char *mac, int nb_service);
+onlined_error_t
+onlined_mirror_flow_agingtime_mod_eoc (onlined_ctx_t * ctx, char *mac);
+onlined_error_t
+onlined_eth_port_mod_eoc (onlined_ctx_t *ctx, char *mac, int nvram_nb_eth_port);
+onlined_error_t
+onlined_trap_igmp_mod_eoc (onlined_ctx_t * ctx, char *mac);
+onlined_error_t
+onlined_ip_set_for_slave (char *ip_address);
+onlined_error_t
+onlined_tag_vlan (onlined_ctx_t * ctx, char *mac, int nvram_nb_eth_port);
+#endif /* ONLINED_CONFIGURE_H */
diff --git a/cleopatre/application/onlined/inc/onlined_mme.h b/cleopatre/application/onlined/inc/onlined_mme.h
new file mode 100644
index 0000000000..27bfcbbf3a
--- /dev/null
+++ b/cleopatre/application/onlined/inc/onlined_mme.h
@@ -0,0 +1,55 @@
+/* SPC300-eoc bundle {{{
+ *
+ * Copyright (C) 2010 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file application/onlined/inc/onlined_mme.h
+ * \brief structures and defines of onlined_mme
+ * \ingroup onlined
+ *
+ *
+ */
+#ifndef ONLINED_MME_H
+#define ONLINED_MME_H
+
+#define DATA_SIZE 256
+#define MAX_LINE_SIZE 150
+
+#if defined __UTESTS__ || defined __FTESTS_PC__
+#define ONLINE_INFO_TMP_PATH "/tmp/utests/etc/online.info_tmp"
+#else
+#define ONLINE_INFO_TMP_PATH "/var/run/info/online.info_tmp"
+#endif
+
+#include "onlined.h"
+#include "libmme.h"
+
+
+void
+onlined_log (int prio, const char *format, ...);
+onlined_error_t
+onlined_test_mme_content (const mme_ctx_t * ctx, unsigned short mmtype);
+int
+onlined_snd_rcv_mmes (onlined_ctx_t *ctx);
+onlined_error_t
+onlined_get_device_info (const onlined_ctx_t * ctx,
+ unsigned char * mac_addr_bin, char ** s_line);
+onlined_error_t
+onlined_get_nw_stats (const onlined_ctx_t * ctx,
+ unsigned char * mac_plc0_bin,
+ onlined_nw_stats_t * nw_stats);
+onlined_error_t
+onlined_test_wrong_content (const mme_ctx_t * ctx);
+onlined_error_t
+onlined_upgrade (onlined_ctx_t * ctx, char *mac);
+onlined_error_t
+onlined_check_slave_config (onlined_ctx_t * ctx);
+onlined_error_t
+onlined_write_update_info_file (const onlined_ctx_t * ctx, char *mac, char
+ *file, int action, int status,
+ int last_action);
+
+#endif /* ONLINED_MME_H */
diff --git a/cleopatre/application/onlined/src/onlined.c b/cleopatre/application/onlined/src/onlined.c
new file mode 100644
index 0000000000..9e203e79a9
--- /dev/null
+++ b/cleopatre/application/onlined/src/onlined.c
@@ -0,0 +1,424 @@
+/* SPC300-eoc bundle {{{
+ *
+ * Copyright (C) 2010 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file application/onlined/src/onlined.c
+ * \brief Daemon that creates online.info file
+ * \ingroup onlined
+ *
+ * This daemon is responsible for storing MAC adresses of the stations and
+ * other specified data in the file named online.info
+ *
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <syslog.h>
+#include <unistd.h> /* for getpid() */
+#include <sys/stat.h>
+
+#include "onlined_mme.h"
+#include "libmme.h"
+#include "libspid.h"
+
+/* Global variable indicating if a SIGHUP signal occurred */
+libspid_boolean_t is_process_signal_needed;
+
+/**
+ * Handle SIGHUP reception.
+ * \param signal_nb signal identifier
+ */
+void
+onlined_signal_handler (int signal_nb)
+{
+ /* check if SIGHUP signal has been received (other signals ignored) */
+ if (signal_nb == SIGHUP)
+ is_process_signal_needed = LIBSPID_TRUE;
+}
+
+/**
+ * This function is called after reception of a SIGHUP signal.
+ * Function is used to add code to process signal
+ *
+ * \param ctx onlined context
+ * \return -1 on error, 0 otherwise
+ */
+int
+onlined_process_signal (onlined_ctx_t *ctx)
+{
+ return 0;
+}
+
+/**
+ * Initialize online daemon context.
+ * \return onlined daemon context
+ */
+onlined_ctx_t *
+onlined_init ()
+{
+ static onlined_ctx_t onlined_ctx; /* main context */
+
+ FILE *fp = NULL;
+ char buffer[LIBSPID_CONFIG_LINE_MAX_LEN];
+ char br_mac_addr_str[LIBSPID_MAC_STR_LEN];
+ unsigned char br_mac_addr_bin[ETH_ALEN];
+ struct stat statbuf;
+ int value;
+
+ /* init memory */
+ memset (&onlined_ctx, 0, sizeof (onlined_ctx_t));
+ memset (buffer, 0, LIBSPID_CONFIG_LINE_MAX_LEN);
+
+ /* create / open-and-delete online.info_tmp file */
+ fp = fopen (ONLINE_INFO_TMP_PATH, "w");
+ if (fp == NULL)
+ {
+ return NULL;
+ }
+ fclose (fp);
+
+ /* assign refresh period */
+ onlined_ctx.t_refresh = ONLINED_DEFAULT_TOPO_REFRESH_PERIOD_SEC;
+
+ /* set send_autoconfiguration default value */
+ onlined_ctx.send_autoconfiguration = LIBSPID_FALSE;
+
+ /* topology is still unknown */
+ onlined_ctx.curr_mac_list = onlined_ctx.prev_mac_list = NULL;
+
+ /* read MAC limitation from slave.conf file */
+ if (LIBSPID_SUCCESS != libspid_config_read_item (
+ LIBSPID_SLAVE_CONF_PATH,
+ LIBSPID_SLAVE_CONF_LABEL_MAC_LIMITATION,
+ buffer,
+ LIBSPID_CONFIG_LINE_MAX_LEN))
+ {
+ onlined_log (LOG_WARNING, "Cannot read initial "
+ "value of MAC limitation");
+ return NULL;
+ }
+
+ /* store MAC limitation to onlined context */
+ if (1 != sscanf (buffer, "%d", &onlined_ctx.mac_limitation))
+ {
+ onlined_log (LOG_WARNING, "Error parsing initial "
+ "value of MAC limitation");
+ return NULL;
+ }
+
+ /* read output_level_all from slave.conf file */
+ if (LIBSPID_SUCCESS != libspid_config_read_item (
+ LIBSPID_SLAVE_CONF_PATH,
+ LIBSPID_SLAVE_CONF_LABEL_OUTPUT_LEVEL,
+ buffer,
+ LIBSPID_CONFIG_LINE_MAX_LEN))
+ {
+ onlined_log (LOG_WARNING, "Cannot read initial "
+ "value of output_level_all");
+ return NULL;
+ }
+
+ /* store output_level_all to onlined context */
+ if (1 != sscanf (buffer, "%d", &onlined_ctx.output_level_all))
+ {
+ onlined_log (LOG_WARNING, "Error parsing initial "
+ "value of output_level_all");
+ return NULL;
+ }
+
+ /* ignore VS_RESET.IND until fully operational */
+ is_process_signal_needed = LIBSPID_FALSE;
+
+ /* register to online.info file update */
+ if (LIBSPID_SUCCESS != libspid_system_file_update_register (
+ getpid (),
+ LIBSPID_ONLINE_INFO_PATH,
+ onlined_signal_handler))
+ {
+ onlined_log (LOG_WARNING, "Cannot register to "
+ "track online.info file update");
+ return NULL;
+ }
+
+ /* register to slave.conf file update */
+ if (LIBSPID_SUCCESS != libspid_system_file_update_register (
+ getpid (),
+ LIBSPID_SLAVE_CONF_PATH,
+ onlined_signal_handler))
+ {
+ onlined_log (LOG_WARNING, "Cannot register to "
+ "track slave.conf file update");
+ return NULL;
+ }
+
+
+#ifdef __FTESTS_PC__
+ sprintf (br_mac_addr_str, "%s", "aa:bb:cc:dd:ee:ff");
+#else
+ if (LIBSPID_SUCCESS !=
+ libspid_system_nscrtv_eponeoc_mod_eoc (&value))
+ {
+ onlined_log (LOG_WARNING,
+ "libspid_system_nscrtv_eponeoc_mode_eoc failed");
+ return NULL;
+ }
+ if (LIBSPID_TRUE == value)
+ {
+ /* register to maclimitation.conf file update */
+ if (LIBSPID_SUCCESS != libspid_system_file_update_register (
+ getpid (),
+ LIBSPID_MAC_LIMITATION_CONF_PATH,
+ onlined_signal_handler))
+ {
+ onlined_log (LOG_WARNING, "Cannot register to "
+ "track maclimitation.conf "
+ "file update");
+ return NULL;
+ }
+ }
+
+ if (LIBSPID_SUCCESS != libspid_network_get_mac (
+ ONLINED_IFACE,
+ (unsigned char *)br_mac_addr_str))
+ {
+ return NULL;
+ }
+#endif /* __FTESTS_PC__ */
+ if (LIBSPID_SUCCESS != libspid_mac_str_to_bin (br_mac_addr_str,
+ br_mac_addr_bin))
+ {
+ return NULL;
+ }
+
+ memcpy (onlined_ctx.br_mac_addr, br_mac_addr_bin, ETH_ALEN);
+
+ /* set tftp_update_running to false */
+ onlined_ctx.tftp_update_running = LIBSPID_FALSE;
+
+#ifndef __UTESTS__
+ if (libspid_eoc_port_check () != LIBSPID_SUCCESS)
+ {
+ onlined_ctx.port_modification_time = 0;
+ }
+
+ if (libspid_eoc_service_check () != LIBSPID_SUCCESS)
+ {
+ onlined_ctx.service_modification_time = 0;
+ }
+
+ if (LIBSPID_TRUE == value)
+ {
+ if (libspid_eoc_maclimit_check () != LIBSPID_SUCCESS)
+ {
+ onlined_ctx.mac_limit_modification_time = 0;
+ }
+
+ if (libspid_eoc_vlan_port_check () != LIBSPID_SUCCESS)
+ {
+ onlined_ctx.vlan_port_modification_time = 0;
+ }
+
+ if (libspid_eoc_ethernet_port_check () != LIBSPID_SUCCESS)
+ {
+ onlined_ctx.ethernet_port_modification_time = 0;
+ }
+ if (libspid_eoc_storm_check () != LIBSPID_SUCCESS)
+ {
+ onlined_ctx.storm_modification_time = 0;
+ }
+ if (libspid_eoc_wl_check () != LIBSPID_SUCCESS)
+ {
+ onlined_ctx.wl_ip_modification_time = 0;
+ }
+ if (libspid_eoc_igmp_snooping_check () != LIBSPID_SUCCESS)
+ {
+ onlined_ctx.igmp_snooping_modification_time = 0;
+ }
+ if (libspid_eoc_ethctl_check () != LIBSPID_SUCCESS)
+ {
+ onlined_ctx.ethctl_modification_time = 0;
+ }
+ }
+#endif /* __UTESTS__ */
+
+ if (stat (LIBSPID_PORT_CONF_PATH, &statbuf) == 0)
+ onlined_ctx.port_modification_time = statbuf.st_mtime;
+
+ if (stat (LIBSPID_SERVICE_CONF_PATH, &statbuf) == 0)
+ onlined_ctx.service_modification_time = statbuf.st_mtime;
+
+ if (stat (LIBSPID_MAC_LIMITATION_CONF_PATH, &statbuf) == 0)
+ onlined_ctx.mac_limit_modification_time = statbuf.st_mtime;
+
+ return &onlined_ctx;
+}
+
+/**
+ * Uninitialize online dameon context.
+ * \param ctx onlined daemon context
+ */
+onlined_error_t
+onlined_uninit (onlined_ctx_t *ctx)
+{
+ int value;
+ while (ctx->prev_mac_list != NULL)
+ {
+ mac_node_t *tmp_node = ctx->prev_mac_list;
+ ctx->prev_mac_list = ctx->prev_mac_list->next;
+ free (tmp_node);
+ }
+
+ /* unregister to eoc.info file update */
+ if (LIBSPID_SUCCESS != libspid_system_file_update_unregister (
+ getpid (),
+ LIBSPID_EOC_INFO_PATH))
+ {
+ onlined_log (LOG_WARNING, "Cannot unregister to "
+ "track eoc.info file update");
+ return ONLINED_ERROR_UNREGISTER;
+ }
+
+ /* unregister to slave.conf file update */
+ if (LIBSPID_SUCCESS != libspid_system_file_update_unregister (
+ getpid (),
+ LIBSPID_SLAVE_CONF_PATH))
+ {
+ onlined_log (LOG_WARNING, "Cannot unregister to "
+ "track slave.conf file update");
+ return ONLINED_ERROR_UNREGISTER;
+ }
+
+ if (LIBSPID_SUCCESS !=
+ libspid_system_nscrtv_eponeoc_mod_eoc (&value))
+ {
+ onlined_log (LOG_WARNING,
+ "libspid_system_nscrtv_eponeoc_mode_eoc failed");
+ return ONLINED_ERROR_PARAM;
+ }
+
+ if (LIBSPID_TRUE == value)
+ {
+ /* unregister to maclimitation.conf file update */
+ if (LIBSPID_SUCCESS != libspid_system_file_update_unregister (
+ getpid (),
+ LIBSPID_MAC_LIMITATION_CONF_PATH))
+ {
+ onlined_log (LOG_WARNING, "Cannot unregister to "
+ "track maclimitation.conf "
+ "file update");
+ return ONLINED_ERROR_UNREGISTER;
+ }
+ }
+ onlined_log (LOG_WARNING, "successfully completed");
+ return ONLINED_SUCCESS;
+}
+
+#ifndef __UTESTS__
+/**
+ * Main program entry point.
+ * \param argc number of command line arguments
+ * \param argv command line arguments
+ * \return ONLINED_SUCCESS upon success, according error code if failed
+ *
+ * Main function of onlined daemon. Ensures that file online.info is created
+ * and is empty. Reads Trefresh from master.conf file. Calls function
+ * snd_rcv_mmes (&ctx) to communicate with Cesar.
+ */
+int
+main (int argc, char **argv)
+{
+ FILE *fp = NULL;
+ onlined_ctx_t *ctx = onlined_init ();
+ if (NULL == ctx)
+ {
+ return ONLINED_ERROR_FOPEN;
+ }
+
+ while (1)
+ {
+ /* clear the online.info_tmp file content */
+ fp = fopen (ONLINE_INFO_TMP_PATH, "w");
+ if (fp == NULL)
+ {
+ syslog (LOG_WARNING, "file online.info_tmp can not be cleared.");
+ }
+ fclose (fp);
+
+ /* send/receive data from Cesar */
+ switch (onlined_snd_rcv_mmes (ctx))
+ {
+ case ONLINED_ERROR_MME_WRONG_RESULT:
+ syslog (LOG_WARNING, "MME returned wrong "
+ "result (1 instead of 0)");
+ break;
+ case ONLINED_ERROR_MME_WRONG_N_MAC_ADDR:
+ syslog (LOG_WARNING, "MME returned number of "
+ "MAC addresses bigger than 128");
+ break;
+ case ONLINED_ERROR_MME_WRONG_MAC:
+ syslog (LOG_WARNING, "MME returned incorrect "
+ "MAC address (00:00:00:00:00:00)");
+ break;
+ case ONLINED_ERROR_MME_AUTHORISATION_WRONG_VALUE:
+ syslog (LOG_WARNING, "MME returned wrong value for "
+ "authorisation (different than 0 or 1)");
+ break;
+ case ONLINED_ERROR_MME_CONTAIN_REDUNDANT_DATA:
+ syslog (LOG_WARNING, "MME contains redundant data");
+ break;
+ case ONLINED_ERROR_LIBSPID_BIN_STR_CONVERSION:
+ syslog (LOG_WARNING, "error in the conversion of MAC address "
+ "from bin to string or vice versa");
+ break;
+ case ONLINED_ERROR_FOPS:
+ syslog (LOG_WARNING, "error creating online.info file ");
+ break;
+ case MME_ERROR_GEN:
+ syslog (LOG_WARNING, "libmme returned: general error ");
+ break;
+ case MME_ERROR_NOT_INIT:
+ syslog (LOG_WARNING, "libmme returned: "
+ "not enough available space");
+ break;
+ case MME_ERROR_ENOUGH:
+ syslog (LOG_WARNING, "libmme returned: "
+ "not enough available data");
+ break;
+ case MME_ERROR_TIMEOUT:
+ syslog (LOG_WARNING, "libmme returned: "
+ "timeout on waiting on response");
+ break;
+ case MME_ERROR_SPACE:
+ syslog (LOG_WARNING, "libmme returned: "
+ "not enough available space");
+ break;
+ case MME_ERROR_TXRX:
+ syslog (LOG_WARNING, "libmme returned: "
+ "socket send/receive error");
+ break;
+ default:
+ break;
+ }
+
+ /* handle online.info and slave.conf file changes */
+ if (is_process_signal_needed)
+ {
+ /* process signal generated by file change */
+ if (0 == onlined_process_signal (ctx))
+ is_process_signal_needed = LIBSPID_FALSE;
+ else
+ syslog (LOG_WARNING, "error processing signal!");
+ }
+
+ /* sleep Trefresh seconds before next communication */
+ /* session with Cesar */
+ sleep (ctx->t_refresh);
+ }
+
+ return onlined_uninit (ctx);
+}
+#endif /* !__UTESTS__ */
diff --git a/cleopatre/application/onlined/src/onlined_configure.c b/cleopatre/application/onlined/src/onlined_configure.c
new file mode 100644
index 0000000000..a6ab053db7
--- /dev/null
+++ b/cleopatre/application/onlined/src/onlined_configure.c
@@ -0,0 +1,1725 @@
+/* SPC300-eoc project {{{
+ *
+ * Copyright (C) 2010 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file application/onlined/src/onlined_configure.c
+ * \brief slave autoconfiguration
+ * \ingroup onlined
+ *
+ * Performs slave autoconfiguration when it appears online
+ */
+
+#include <ctype.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <asm/param.h>
+#include <sys/stat.h>
+
+#include "onlined_mme.h"
+#include "onlined_configure.h"
+#include "libspid.h"
+
+int
+onlined_remove_autoconf_dir (void)
+{
+ int rc;
+ char cmd[256];
+
+ sprintf (cmd, "rm -rf %s", ONLINED_AUTOCONF_TMP_DIR);
+ rc = system (cmd);
+ if (rc != 0)
+ {
+ onlined_log (LOG_WARNING, "Cannot delete %s directory",
+ ONLINED_AUTOCONF_TMP_DIR);
+ return -1;
+ }
+
+ return 0;
+}
+
+int
+onlined_create_autoconf_dir (void)
+{
+ int ret = 0;
+ ret += mkdir (ONLINED_AUTOCONF_TMP_DIR, 0777);
+ ret += mkdir (ONLINED_AUTOCONF_INITD_DIR, 0777);
+ ret += mkdir (ONLINED_AUTOCONF_NETWORK_DIR, 0777);
+ return ret;
+}
+
+static int
+onlined_untar_config (char *path)
+{
+ char cmd[256];
+ int rc;
+
+ if (path == NULL)
+ {
+ onlined_log (LOG_WARNING, "Pointer on path invalid");
+ return -1;
+ }
+
+ sprintf (cmd, "tar -C %s -xvf %s > /dev/null",
+ ONLINED_AUTOCONF_TMP_DIR, path);
+ rc = system (cmd);
+ if (rc != 0)
+ {
+ onlined_log (LOG_WARNING, "Cannot unpack %s file", path);
+ return -1;
+ }
+
+ return 0;
+}
+
+static int
+onlined_tar_config (char *mac_address, char *path)
+{
+ char cmd[256];
+ int i, rc;
+ char mac[LIBSPID_MAC_STR_LEN] = {0};
+
+ if (mac_address == NULL)
+ {
+ onlined_log (LOG_WARNING, "Pointer on mac address invalid");
+ return -1;
+ }
+
+ if (path == NULL)
+ {
+ onlined_log (LOG_WARNING, "Pointer on path invalid");
+ return -1;
+ }
+
+ strcpy (mac, mac_address);
+
+ /* Switch ":" to "_" in MAC addresses */
+ for (i = 0; i < strlen (mac); i++)
+ mac[i] = (mac[i] == ':') ? '_' : mac[i];
+
+ sprintf (cmd, "cd %s; tar -cvf %s.tar * > /dev/null",
+ ONLINED_AUTOCONF_TMP_DIR, mac);
+ rc = system (cmd);
+ if (rc != 0)
+ {
+ onlined_log (LOG_WARNING, "Cannot create configuration archive "
+ "for slave %s", mac_address);
+ return -1;
+ }
+
+ sprintf (path, "%s/%s.tar", ONLINED_AUTOCONF_TMP_DIR, mac);
+
+ return 0;
+}
+
+static int
+onlined_find_config (char *mac, char *path)
+{
+ int i;
+ char mac_lower[LIBSPID_MAC_STR_LEN] = {0};
+ char mac_upper[LIBSPID_MAC_STR_LEN] = {0};
+
+ if (mac == NULL)
+ {
+ onlined_log (LOG_WARNING, "Pointer on mac address invalid");
+ return 0;
+ }
+
+ if (path == NULL)
+ {
+ onlined_log (LOG_WARNING, "Pointer on path invalid");
+ return 0;
+ }
+
+ strcpy (mac_lower, mac);
+ strcpy (mac_upper, mac);
+
+ /* Switch ":" to "_" in MAC addresses */
+ for (i = 0; i < strlen (mac); i++)
+ {
+ mac_lower[i] = tolower (mac_lower[i]);
+ mac_lower[i] = (mac_lower[i] == ':') ? '_' : mac_lower[i];
+
+ mac_upper[i] = toupper (mac_upper[i]);
+ mac_upper[i] = (mac_upper[i] == ':') ? '_' : mac_upper[i];
+ }
+
+ /* Check if configuration archive really exists (lower case) */
+ sprintf (path, "%s/%s.tar", ONLINED_AUTOCONF_DIR, mac_lower);
+ if (!access (path, F_OK)) return 1;
+
+ /* Check if configuration archive really exists (upper case) */
+ sprintf (path, "%s/%s.tar", ONLINED_AUTOCONF_DIR, mac_upper);
+ if (!access (path, F_OK)) return 1;
+
+ /* Check if default configuration archive really exists */
+ sprintf (path, "%s", ONLINED_AUTOCONF_DEFAULT_CONF);
+ if (!access (path, F_OK)) return 1;
+
+ /* No predefined configuration available */
+ path = '\0';
+ return 0;
+}
+
+static void
+onlined_read_vlan_config (int service_type,
+ libspid_eoc_port_entry_t *entries,
+ int *vlan_mark_id, int *vlan_en, int *vlan_prio)
+{
+ libspid_eoc_service_entry_t service;
+
+ if (entries == NULL)
+ return;
+
+ if (vlan_mark_id == NULL)
+ return;
+
+ if (vlan_en == NULL)
+ return;
+
+ if (vlan_prio == NULL)
+ return;
+
+ *vlan_prio = 0;
+
+ switch (service_type)
+ {
+ case LIBSPID_SERVICE_TYPE_PRIO:
+ *vlan_mark_id = atoi (entries->vlan_mark_id);
+ *vlan_en = !strcmp (entries->vlan_tag_en, "1");
+ if (LIBSPID_SUCCESS == libspid_eoc_service_get (
+ entries->service_index, &service))
+ *vlan_prio = atoi (service.matching_value);
+ break;
+
+ case LIBSPID_SERVICE_TYPE_VID:
+ if (LIBSPID_SUCCESS == libspid_eoc_service_get (
+ entries->service_index, &service))
+ {
+ *vlan_mark_id = atoi (service.matching_value);
+ *vlan_prio = atoi (service.qos_prio);
+ }
+ else
+ *vlan_mark_id = atoi (entries->vlan_mark_id);
+
+ *vlan_en = !strcmp (entries->port_en, "1");
+ break;
+
+ default:
+ *vlan_mark_id = atoi (entries->vlan_mark_id);
+ *vlan_en = !strcmp (entries->vlan_tag_en, "1");
+ break;
+ }
+}
+
+static int
+onlined_get_port_number (char *mac)
+{
+ mme_ctx_t request_ctx, confirm_ctx;
+ unsigned char snd_buffer[ETH_DATA_LEN];
+ unsigned int len = 0;
+ char *iface = ONLINED_IFACE;
+ unsigned char mac_bin[ETH_ALEN];
+ unsigned char result = 0, index = 0;
+ spidcom_nvram_t nvram;
+ int ret;
+
+#ifdef __UTESTS__
+ return 1;
+#endif
+
+ if (mac == NULL)
+ {
+ onlined_log (LOG_WARNING, "Pointer on mac address invalid");
+ return -1;
+ }
+
+ /* initialize VS_GET_NVRAM MME */
+ ret = mme_init (&request_ctx, VS_GET_NVRAM | MME_REQ,
+ snd_buffer, (unsigned int) ETH_DATA_LEN);
+ if (ret != MME_SUCCESS)
+ return -1;
+ ret = mme_init (&confirm_ctx, VS_GET_NVRAM | MME_CNF,
+ snd_buffer, (unsigned int) ETH_DATA_LEN);
+ if (ret != MME_SUCCESS)
+ return -1;
+
+ ret = mme_put (&request_ctx, &index, 1, &len);
+ if (ret != MME_SUCCESS)
+ return -1;
+
+ /* send request and wait for confirmation */
+ ret = libspid_mac_str_to_bin (mac, mac_bin);
+ if (ret != LIBSPID_SUCCESS)
+ return -1;
+
+ ret = mme_send (&request_ctx, MME_SEND_REQ_CNF, iface,
+ mac_bin, &confirm_ctx);
+ if (MME_SUCCESS != ret)
+ return -1;
+
+ if (confirm_ctx.oui != MME_OUI_SPIDCOM)
+ return -1;
+ /* collect confirmation result */
+ ret = mme_pull (&confirm_ctx, &result, 1, &len);
+ if (MME_SUCCESS != ret || result != 0)
+ return -1;
+
+ /* collect index of the block NVRAM */
+ ret = mme_pull (&confirm_ctx, &index, 1, &len);
+ if (MME_SUCCESS != ret || index != 0)
+ return -1;
+
+ /* map NVRAM contents */
+ ret = mme_pull (&confirm_ctx, &nvram, (uint)NVRAM_DYNAMIC_OFFSET, &len);
+ if (MME_SUCCESS != ret)
+ return -1;
+
+ return nvram.eth1_port_nb;
+}
+
+/**
+ * Adds vlan tag rules in configuration file for the slave
+ * with given MAC address
+ * \param ctx onlined context
+ * \param mac slave's MAC address
+ * \param nvram_nb_eth_port number of ports
+ * \return ONLINED_SUCCESS: upon success, or error code if failed
+ * \return ONLINED_ERROR_PARAM: bad input parameters
+ * \return ONLINED_ERROR_FOPS: error in file operations
+ * \return ONLINED_ERROR_GEN: general error
+ */
+onlined_error_t
+onlined_tag_vlan (onlined_ctx_t * ctx, char *mac, int nvram_nb_eth_port)
+{
+ libspid_eoc_port_entry_t entries[ONLINED_MAX_PORT_NUM];
+ libspid_eoc_vlan_port_table_entry_t
+ vlan_port_entries[ONLINED_MAX_PORT_NUM];
+ int i, port_num = 0;
+ int ret = LIBSPID_SUCCESS;
+ FILE *fp;
+ char tmp[256];
+ char index[8];
+ int service_type;
+ int vlanID;
+ int vlan_tag_set;
+ int vlan_prio;
+ struct stat statbuf;
+ int mode_value;
+
+ if (mac == NULL || ctx == NULL)
+ {
+ onlined_log (LOG_WARNING, "bad input parameters");
+ return ONLINED_ERROR_PARAM;
+ }
+ if (LIBSPID_SUCCESS !=
+ libspid_system_nscrtv_eponeoc_mod_eoc (&mode_value))
+ {
+ onlined_log (LOG_WARNING,
+ "libspid_system_nscrtv_eponeoc_mode_eoc failed");
+ return ONLINED_ERROR_AUTOCONF;
+ }
+
+ if (LIBSPID_TRUE == mode_value)
+ {
+ if (stat (LIBSPID_EOC_PORT_V2_FILE, &statbuf) != 0)
+ return ONLINED_ERROR_FOPS;
+ else if (statbuf.st_mtime != ctx->vlan_port_modification_time)
+ {
+ if (libspid_eoc_vlan_port_check () != LIBSPID_SUCCESS)
+ {
+ onlined_log (LOG_WARNING,
+ "vlan_porttable.conf check failed");
+ return ONLINED_ERROR_GEN;
+ }
+ else
+ ctx->vlan_port_modification_time = statbuf.st_mtime;
+ }
+ }
+
+ for (i = 0; i < ONLINED_MAX_PORT_NUM; i++)
+ {
+ sprintf (index, "%d", i);
+ ret = libspid_eoc_vlan_port_get (mac, index,
+ &vlan_port_entries[i]);
+ if (ret == LIBSPID_ERROR_NOT_FOUND) continue;
+ }
+
+ if (stat (LIBSPID_PORT_CONF_PATH, &statbuf) != 0)
+ return ONLINED_ERROR_FOPS;
+ else if (statbuf.st_mtime != ctx->port_modification_time)
+ {
+ if (libspid_eoc_port_check () != LIBSPID_SUCCESS)
+ {
+ onlined_log (LOG_WARNING, "port.conf check failed");
+ return ONLINED_ERROR_GEN;
+ }
+ else
+ ctx->port_modification_time = statbuf.st_mtime;
+ }
+
+ if (stat (LIBSPID_SERVICE_CONF_PATH, &statbuf) != 0)
+ return ONLINED_ERROR_FOPS;
+ else if (statbuf.st_mtime != ctx->service_modification_time)
+ {
+ if (libspid_eoc_service_check () != LIBSPID_SUCCESS)
+ {
+ onlined_log (LOG_WARNING, "service.conf check failed");
+ return ONLINED_ERROR_GEN;
+ }
+ else
+ ctx->service_modification_time = statbuf.st_mtime;
+ }
+
+ for (i = 0; i < ONLINED_MAX_PORT_NUM; i++)
+ {
+ sprintf (index, "%d", i);
+ ret = libspid_eoc_port_get (mac, index, &entries[port_num]);
+ if (ret == LIBSPID_ERROR_NOT_FOUND) continue;
+ port_num++;
+ }
+
+ /* read service type */
+ service_type = libspid_eoc_service_type_get ();
+
+ if ((fp = fopen (ONLINED_AUTOCONF_SLAVE_FILE, "a")) == NULL)
+ {
+ /* TODO : Add Warning maybe */
+ return ONLINED_ERROR_FOPS;
+ }
+
+ fwrite (ONLINED_AUTOCONF_VLAN_MSG, 1,
+ strlen (ONLINED_AUTOCONF_VLAN_MSG), fp);
+ memset (tmp, 0, sizeof (tmp));
+
+ switch (nvram_nb_eth_port)
+ {
+ case 1:
+ /* With one port (VCONFIG can be used) */
+ if (LIBSPID_TRUE == mode_value)
+ {
+ vlanID = atoi (vlan_port_entries[0].vlan_port_pvid);
+ vlan_tag_set = atoi (vlan_port_entries[0].vlan_port_mode);
+ vlan_prio = atoi (vlan_port_entries[0].vlan_port_prio);
+
+ }else if (LIBSPID_FALSE == mode_value) {
+ onlined_read_vlan_config (service_type, &entries[0],
+ &vlanID, &vlan_tag_set, &vlan_prio);
+ }
+
+ sprintf (tmp, "for PLC in $(ls /proc/net/vlan | grep plc)\n"
+ "do\n"
+ "if [ -f \"/proc/net/vlan/$PLC\" ]\n"
+ "then\n"
+ "ifconfig $PLC down\n"
+ "vconfig rem $PLC\n"
+ "brctl addif br0 plc0\n"
+ "fi\n"
+ "done\n"
+ );
+ fwrite (tmp, 1, strlen (tmp), fp);
+
+ if (vlan_tag_set)
+ {
+ sprintf (tmp, "vconfig add plc0 %d\n"
+ "brctl delif br0 plc0\n"
+ "brctl addif br0 plc0.%d\n"
+ "ifconfig plc0.%d 0.0.0.0\n",
+ vlanID,
+ vlanID,
+ vlanID);
+ fwrite (tmp, 1, strlen (tmp), fp);
+ }
+ break;
+
+ default:
+ /* With many ports (ETHTOOL used) */
+ for (i = 0; i < port_num; i++)
+ {
+ if (LIBSPID_TRUE == mode_value)
+ {
+ vlanID = atoi (vlan_port_entries[i].vlan_port_pvid);
+ vlan_tag_set = atoi (vlan_port_entries[i].vlan_port_mode);
+ vlan_prio = atoi (vlan_port_entries[i].vlan_port_prio);
+ }else if (LIBSPID_FALSE == mode_value) {
+ onlined_read_vlan_config (service_type, &entries[i], &vlanID,
+ &vlan_tag_set, &vlan_prio);
+ }
+ sprintf (tmp, "ethtool -vl eth0 "
+ "set-phy-vid %d:%d "
+ "set-phy-state %d:%s "
+ "set-phy-prio %d:%d\n",
+ atoi (entries[i].port_index),
+ vlanID,
+ atoi (entries[i].port_index),
+ vlan_tag_set ? "on" : "off",
+ atoi (entries[i].port_index),
+ vlan_prio);
+ fwrite (tmp, 1, strlen (tmp), fp);
+ }
+ break;
+ }
+ fclose (fp);
+ return ONLINED_SUCCESS;
+}
+
+/**
+ * In HTB class, the quantum is the amount of byte which is
+ * release on every token.
+ * 1500 < (rate/quantum) < 60000 , to avoid warning messages from kernel.
+ */
+static void
+onlined_bw_limit_quantum_check (char *buffer, int rate)
+{
+ /* 8 is for byte, 60 is the quantum max in kB. */
+ uint quantum_min = (rate / (8 * 60)) + 1;
+ uint quantum_max = (rate / 12 ); /* 12 = ((8/1000) *1500) */
+
+ if (buffer == NULL)
+ return;
+
+ if (quantum_max <= 0)
+ quantum_max = 1;
+
+ /* If the rate requested is too high, the quantum could be too small */
+ if (quantum_min > ONLINED_AUTOCONF_TC_QUANTUM_DEFAULT)
+ {
+ sprintf (buffer,"quantum %d", quantum_min);
+ return;
+ }
+
+ if (quantum_max < ONLINED_AUTOCONF_TC_QUANTUM_DEFAULT)
+ {
+ sprintf (buffer,"quantum %d", quantum_max);
+ return;
+ }
+}
+
+/**
+ * Write TC rules for a device.
+ * \param fp the file descriptor.
+ * \param device the device to set rules.
+ * \param rate the bandwidth rate limit.
+ *
+ * Using configurations inspired by http://lartc.org/lartc.html
+ * section 15.8.3. The actual script (HTB). It configures two
+ * queues, one for TCP ack (with higher priority) and another for
+ * other traffic, this improves the TCP bidirectional flow.
+ */
+static void
+onlined_bw_limit_single_port_tc_rules (FILE *fp, const char *device,
+ uint rate)
+{
+ char tmp[256];
+ char tmp_quantum[16];
+
+ memset (tmp, 0, sizeof (tmp));
+ memset (tmp_quantum, 0, sizeof (tmp_quantum));
+
+ onlined_bw_limit_quantum_check (tmp_quantum, rate);
+
+ sprintf (tmp, "tc qdisc add dev %s root handle 1: "
+ "htb r2q %d default 20\n",
+ device, ONLINED_AUTOCONF_TC_QUANTUM_DEFAULT);
+ fwrite (tmp, 1, strlen (tmp), fp);
+ memset (tmp, 0, sizeof (tmp));
+ sprintf (tmp, "tc class add dev %s parent 1: "
+ "classid 1:1 htb rate %dkbit %s\n",
+ device, rate, tmp_quantum);
+ fwrite (tmp, 1, strlen (tmp), fp);
+ /* High priority queue. */
+ memset (tmp, 0, sizeof (tmp));
+ sprintf (tmp, "tc class add dev %s parent 1:1 "
+ "classid 1:10 htb rate %dkbit %s prio 1\n",
+ device, rate, tmp_quantum);
+ fwrite (tmp, 1, strlen (tmp), fp);
+ /* Low priority queue. */
+ memset (tmp, 0, sizeof (tmp));
+ sprintf (tmp, "tc class add dev %s parent 1:1 "
+ "classid 1:20 htb rate %dkbit %s prio 2\n",
+ device, rate, tmp_quantum);
+ fwrite (tmp, 1, strlen (tmp), fp);
+ /* both get Stochastic Fairness. */
+ memset (tmp, 0, sizeof (tmp));
+ sprintf (tmp, "tc qdisc add dev %s parent 1:10 "
+ "handle 10: sfq perturb 10\n", device);
+ fwrite (tmp, 1, strlen (tmp), fp);
+ memset (tmp, 0, sizeof (tmp));
+ sprintf (tmp, "tc qdisc add dev %s parent 1:20 "
+ "handle 20: sfq perturb 10\n", device);
+ fwrite (tmp, 1, strlen (tmp), fp);
+ /* Tc filter to speed up TCP Ack. */
+ memset (tmp, 0, sizeof (tmp));
+ sprintf (tmp, "tc filter add dev %s parent 1: "
+ "protocol ip prio 10 u32 match ip protocol 6 0xff "
+ "match u8 0x05 0x0f at 0 match u16 0x0000 0xffc0 at 2 "
+ "match u8 0x10 0xff at 33 flowid 1:10\n", device);
+ fwrite (tmp, 1, strlen (tmp), fp);
+}
+
+/**
+ * Adds traffic control rules in configuration file to limit bandwidth
+ * for the slave with given MAC address
+ * \param ctx onlined context
+ * \param mac slave's MAC address
+ * \param nvram_nb_eth_port number of ports
+ * \param nb_service number of services
+ * \return ONLINED_SUCCESS: upon success, or error code if failed
+ * \return ONLINED_ERROR_PARAM: bad input parameters
+ * \return ONLINED_ERROR_FOPS: error in file operations
+ * \return ONLINED_ERROR_GEN: general error
+ */
+onlined_error_t
+onlined_bw_limit (onlined_ctx_t * ctx, char *mac, int nvram_nb_eth_port,
+ int *nb_service)
+{
+ libspid_eoc_port_entry_t entries[ONLINED_MAX_PORT_NUM];
+ libspid_eoc_service_entry_t service[ONLINED_MAX_PORT_NUM];
+ libspid_eoc_vlan_port_table_entry_t
+ vlan_port_entries[ONLINED_MAX_PORT_NUM];
+ int port_num = 0;
+ int i;
+ int ret = LIBSPID_SUCCESS;
+ FILE *fp;
+ char tmp[256];
+ char tmp_quantum[16];
+ char tmp_default_class[16];
+ char index[8];
+ int service_type;
+ int vlanID;
+ int vlan_tag_set;
+ int unused;
+ struct stat statbuf;
+ int mode_value;
+
+ if (mac == NULL || ctx == NULL || nb_service == NULL)
+ {
+ onlined_log (LOG_WARNING, "bad input parameters");
+ return ONLINED_ERROR_PARAM;
+ }
+
+ if (LIBSPID_SUCCESS !=
+ libspid_system_nscrtv_eponeoc_mod_eoc (&mode_value))
+ {
+ onlined_log (LOG_WARNING,
+ "libspid_system_nscrtv_eponeoc_mode_eoc failed");
+ return ONLINED_ERROR_AUTOCONF;
+ }
+
+ if (stat (LIBSPID_PORT_CONF_PATH, &statbuf) != 0)
+ return ONLINED_ERROR_FOPS;
+ else if (statbuf.st_mtime != ctx->port_modification_time)
+ {
+ if (libspid_eoc_port_check () != LIBSPID_SUCCESS)
+ {
+ onlined_log (LOG_WARNING, "port.conf check failed");
+ return ONLINED_ERROR_GEN;
+ }
+ else
+ ctx->port_modification_time = statbuf.st_mtime;
+ }
+
+ if (stat (LIBSPID_SERVICE_CONF_PATH, &statbuf) != 0)
+ return ONLINED_ERROR_FOPS;
+ else if (statbuf.st_mtime != ctx->service_modification_time)
+ {
+ if (libspid_eoc_service_check () != LIBSPID_SUCCESS)
+ {
+ onlined_log (LOG_WARNING, "service.conf check failed");
+ return ONLINED_ERROR_GEN;
+ }
+ else
+ ctx->service_modification_time = statbuf.st_mtime;
+
+ }
+ if (LIBSPID_TRUE == mode_value)
+ {
+ if (stat (LIBSPID_EOC_PORT_V2_FILE, &statbuf) != 0)
+ return ONLINED_ERROR_FOPS;
+ else if (statbuf.st_mtime != ctx->vlan_port_modification_time)
+ {
+ if (libspid_eoc_vlan_port_check () != LIBSPID_SUCCESS)
+ {
+ onlined_log (LOG_WARNING,
+ "vlan_porttable.conf check failed");
+ return ONLINED_ERROR_GEN;
+ }
+ else
+ ctx->vlan_port_modification_time = statbuf.st_mtime;
+ }
+ }
+
+ for (i = 0; i < ONLINED_MAX_PORT_NUM; i++)
+ {
+ sprintf (index, "%d", i);
+ ret = libspid_eoc_vlan_port_get (mac, index,
+ &vlan_port_entries[i]);
+ if (ret == LIBSPID_ERROR_NOT_FOUND) continue;
+ }
+ for (i = 0; i < ONLINED_MAX_PORT_NUM; i++)
+ {
+ sprintf (index, "%d", i);
+ ret = libspid_eoc_port_get (mac, index, &entries[port_num]);
+ /* FIXME : abnormal to allow that */
+ if (ret == LIBSPID_ERROR_NOT_FOUND) continue;
+ port_num++;
+ }
+
+ if (port_num == 0)
+ {
+ /* no port found = no service */
+ onlined_log (LOG_WARNING, "Autoconfiguration : no port "
+ "found for slave %s", mac);
+ return ONLINED_SUCCESS;
+ }
+
+ if ((fp = fopen (ONLINED_AUTOCONF_SLAVE_FILE, "a")) == NULL)
+ return ONLINED_ERROR_FOPS;
+
+ fwrite (ONLINED_AUTOCONF_TC_MSG, 1,
+ strlen (ONLINED_AUTOCONF_TC_MSG), fp);
+ memset (tmp, 0, sizeof (tmp));
+ memset (tmp_quantum, 0, sizeof (tmp_quantum));
+ *nb_service = 0;
+ service_type = libspid_eoc_service_type_get ();
+
+ /* Search the first service available */
+ for (i = 0; i < port_num; i++)
+ {
+ char *service_index;
+
+ if (strcmp (entries[i].port_en, "1"))
+ continue;
+
+ service_index = entries[i].service_index;
+ if (LIBSPID_SUCCESS == libspid_eoc_service_get (service_index,
+ &service[0]))
+ {
+ *nb_service = 1;
+ break;
+ }
+ }
+
+ /* Erase current rules (S88Slave script is called twice) */
+ switch (nvram_nb_eth_port)
+ {
+ case 1: /* With one port (VCONFIG can be used) */
+ ONLINED_AUTOCONF_TC_INIT_QDISC ("eth0", fp, tmp);
+
+ /* Note: On vlanID changes, rules are not erased. */
+ /* But as previous vlan is removed, no problem. */
+ ONLINED_AUTOCONF_TC_INIT_QDISC ("plc0", fp, tmp);
+
+ if (LIBSPID_TRUE == mode_value)
+ {
+ vlanID = atoi (vlan_port_entries[0].vlan_port_pvid);
+ vlan_tag_set = atoi (vlan_port_entries[0].vlan_port_mode);
+ }
+ else
+ {
+ onlined_read_vlan_config (service_type, &entries[0], &vlanID,
+ &vlan_tag_set, &unused);
+ }
+ break;
+
+ default: /* With many ports (ETHTOOL used) */
+ ONLINED_AUTOCONF_TC_INIT_QDISC ("eth0", fp, tmp);
+ ONLINED_AUTOCONF_TC_INIT_QDISC ("plc0", fp, tmp);
+ break;
+ }
+
+ if (*nb_service == 0)
+ {
+ onlined_log (LOG_WARNING, "Autoconfiguration : no service enable "
+ "found for slave %s", mac);
+ fclose (fp);
+ return ONLINED_SUCCESS;
+ }
+
+ /* Configure marking on plc and eth */
+ sprintf (tmp, "echo \"ETH_MARK %d\" > /proc/net/set_mark\n",
+ service_type);
+ fwrite (tmp, 1, strlen (tmp), fp);
+ sprintf (tmp, "echo \"PLC_MARK %d\" > /proc/net/plc/set_mark\n",
+ service_type);
+ fwrite (tmp, 1, strlen (tmp), fp);
+
+ switch (nvram_nb_eth_port)
+ {
+ case 1:
+ { /* With one port (VCONFIG can be used) */
+ uint dba_dl_pir = atoi (service[0].dba_dl_pir);
+ uint dba_ul_pir = atoi (service[0].dba_ul_pir);
+
+ onlined_bw_limit_single_port_tc_rules (fp, "eth0", dba_dl_pir);
+ onlined_bw_limit_single_port_tc_rules (fp, "plc0", dba_ul_pir);
+ }
+ break;
+
+ default:
+ if (LIBSPID_FALSE == mode_value)
+ { /* With many ports (ETHTOOL used) */
+ /* Determine how many services are different */
+ for (i = 1; i < port_num; i++)
+ {
+ int is_already_done = 0;
+ int j;
+
+ if (strcmp (entries[i].port_en, "1"))
+ continue;
+
+ for (j = 0; j < *nb_service; j++)
+ {
+ if (!strcmp (entries[i].service_index,
+ service[j].service_index))
+ is_already_done = 1;
+ }
+
+ if (!is_already_done)
+ {
+ if (LIBSPID_SUCCESS ==
+ libspid_eoc_service_get (entries[i].service_index,
+ &service[*nb_service]))
+ *nb_service += 1;
+ }
+ }
+
+ memset (tmp_default_class, 0, sizeof (tmp_default_class));
+ if (service_type == LIBSPID_SERVICE_TYPE_NONE)
+ {
+ if (*nb_service != 1)
+ {
+ onlined_log (LOG_WARNING, "Autoconfiguration : only one "
+ "service is allowed for slave "
+ "%s", mac);
+ fclose (fp);
+ return ONLINED_SUCCESS;
+ }
+ else
+ {
+ uint service_index =
+ atoi (service[0].service_index) + 10;
+
+ sprintf (tmp_default_class, "default %d", service_index);
+ }
+ }
+
+ /* Add general rules for tc script */
+ sprintf (tmp,
+ "tc qdisc add dev plc0 root handle 1: htb r2q %d %s\n",
+ ONLINED_AUTOCONF_TC_QUANTUM_DEFAULT, tmp_default_class);
+ fwrite (tmp, 1, strlen (tmp), fp);
+ sprintf (tmp,
+ "tc qdisc add dev eth0 root handle 1: htb r2q %d %s\n",
+ ONLINED_AUTOCONF_TC_QUANTUM_DEFAULT, tmp_default_class);
+ fwrite (tmp, 1, strlen (tmp), fp);
+
+ /* Create HTB class (FIFO) */
+ for (i = 0; i < *nb_service; i++)
+ {
+ uint dba_dl_pir = atoi (service[i].dba_dl_pir);
+ uint dba_ul_pir = atoi (service[i].dba_ul_pir);
+ uint service_index = atoi (service[i].service_index) + 10;
+
+ onlined_bw_limit_quantum_check (tmp_quantum, dba_dl_pir);
+ sprintf (tmp, "tc class add dev eth0 parent 1: classid 1:%d "
+ "htb rate %dkbit %s\n",
+ service_index, dba_dl_pir, tmp_quantum);
+ fwrite (tmp, 1, strlen (tmp), fp);
+ memset (tmp, 0, sizeof (tmp));
+ memset (tmp_quantum, 0, sizeof (tmp_quantum));
+
+ onlined_bw_limit_quantum_check (tmp_quantum, dba_ul_pir);
+ sprintf (tmp, "tc class add dev plc0 parent 1: "
+ "classid 1:%d htb rate %dkbit %s\n",
+ service_index, dba_ul_pir, tmp_quantum);
+ fwrite (tmp, 1, strlen (tmp), fp);
+ memset (tmp, 0, sizeof (tmp));
+ memset (tmp_quantum, 0, sizeof (tmp_quantum));
+ }
+
+ /* Attach filters to streams */
+ for (i = 0; i < *nb_service; i++)
+ {
+ uint qos_prio = atoi (service[i].qos_prio);
+ uint matching_value = atoi (service[i].matching_value);
+ uint service_index = atoi (service[i].service_index) + 10;
+
+ switch (service_type)
+ {
+ case LIBSPID_SERVICE_TYPE_VID: /* VLAN-ID filter */
+ case LIBSPID_SERVICE_TYPE_PRIO: /* VLAN-PRIO Filter */
+ sprintf (tmp,
+ "tc filter add dev eth0 parent 1: protocol "
+ "all prio %d handle %d fw flowid 1:%d\n",
+ qos_prio, matching_value, service_index);
+ fwrite (tmp, 1, strlen (tmp), fp);
+ memset (tmp, 0, sizeof (tmp));
+ sprintf (tmp,
+ "tc filter add dev plc0 parent 1: protocol "
+ "all prio %d handle %d fw flowid 1:%d\n",
+ qos_prio, matching_value, service_index);
+ fwrite (tmp, 1, strlen (tmp), fp);
+ memset (tmp, 0, sizeof (tmp));
+ break;
+
+ case LIBSPID_SERVICE_TYPE_TOS: /* TOS Filter */
+ sprintf (tmp,
+ "tc filter add dev eth0 parent 1: protocol "
+ "all prio %d u32 match ip tos %d 0xff "
+ "flowid 1:%d\n",
+ qos_prio, matching_value, service_index);
+ fwrite (tmp, 1, strlen (tmp), fp);
+ memset (tmp, 0, sizeof (tmp));
+ sprintf (tmp,
+ "tc filter add dev plc0 parent 1: protocol "
+ "all prio %d u32 match ip tos %d 0xff "
+ "flowid 1:%d\n",
+ qos_prio, matching_value, service_index);
+ fwrite (tmp, 1, strlen (tmp), fp);
+ memset (tmp, 0, sizeof (tmp));
+ break;
+
+ case 0: /* No filter, because we have only 1 class ! */
+ break;
+ }
+ }
+ }
+ else if (LIBSPID_TRUE == mode_value)
+ {
+ unsigned int qos;
+ unsigned int txrate;
+ unsigned int rxrate;
+ libspid_eoc_service_entry_t service_entry_ctx;
+
+ for (i = 0; i < ONLINED_MAX_PORT_NUM; i++)
+ {
+ if (strcmp (entries[i].port_en, "1")) continue;
+ if (LIBSPID_SUCCESS !=
+ libspid_eoc_service_get (entries[i].service_index,
+ &service_entry_ctx)) continue;
+
+ qos = atoi (service_entry_ctx.qos_prio);
+ /* convert units kbps to kBps and reduce the gap of
+ * the actual and the theoretical values*/
+ txrate = (int)(((atoi (service_entry_ctx.dba_dl_pir) + 7)
+ * 1.05) / 8);
+ rxrate = ((atoi (service_entry_ctx.dba_ul_pir) + 7) / 8);
+
+ sprintf (tmp, "ethtool -qr eth0 set-port-qos %d:%d "
+ "set-port-txrate %d:%d set-port-rxrate %d:%d\n",
+ i, qos, i, txrate, i, rxrate);
+ fwrite (tmp, 1, strlen (tmp), fp);
+ }
+ }
+ break;
+ }
+
+ fclose (fp);
+ return ONLINED_SUCCESS;
+}
+
+/**
+ * Adds broadcast traffic control rules in configuration file
+ * for the slave with given MAC address
+ * \param ctx onlined context
+ * \param mac slave's MAC address
+ * \param nvram_nb_eth_port number of ports
+ * \param nb_service number of services
+ * \return ONLINED_SUCCESS: upon success, or error code if failed
+ * \return ONLINED_ERROR_PARAM: bad input parameters
+ * \return ONLINED_ERROR_FOPS: error in file operations
+ * \return ONLINED_ERROR_GEN: general error
+ */
+onlined_error_t
+onlined_broadcast_storm (onlined_ctx_t * ctx, char *mac,
+ int nvram_nb_eth_port,
+ int nb_service)
+{
+ FILE *fp;
+ char tmp[256];
+ char tmp_quantum[16];
+ char tmp_dev[16];
+ libspid_eoc_port_entry_t entries;
+ libspid_eoc_service_entry_t service;
+ int service_type;
+ int vlan_tag_set;
+ int vlanID;
+ int unused;
+ char buffer[LIBSPID_LINE_MAX_LEN];
+ int broadcast_limit_en = 0;
+ int broadcast_limit_value = 0;
+ int unknown_limit_en = 0;
+ int unknown_limit_value = 0;
+ int i;
+ int mode_value;
+ libspid_eoc_storm_entry_t storm_entry;
+
+ if (mac == NULL)
+ {
+ onlined_log (LOG_WARNING, "Pointer on mac address invalid");
+ return ONLINED_ERROR_PARAM;
+ }
+
+ if (LIBSPID_SUCCESS != libspid_system_nscrtv_eponeoc_mod_eoc (&mode_value))
+ {
+ onlined_log (LOG_WARNING, "eponeoc_mode_eoc failed!\n");
+ return ONLINED_ERROR_FOPEN;
+ }
+
+ if (LIBSPID_TRUE == mode_value)
+ {
+ if (LIBSPID_SUCCESS != libspid_eoc_storm_get (mac, "0", &storm_entry))
+ {
+ onlined_log (LOG_WARNING, "get storm failed!\n");
+ return ONLINED_ERROR_FOPEN;
+ }
+ /* read broadcast fields */
+ broadcast_limit_en = atoi (storm_entry.bcast_protect_en);
+ broadcast_limit_value = atoi (storm_entry.bcast_thres_hold);
+ /* read unkwown fields */
+ unknown_limit_en = atoi (storm_entry.unknow_protect_en);
+ unknown_limit_value = atoi (storm_entry.unknow_thres_hold);
+ }
+ else
+ {
+ /* read broadcast fields */
+ if (LIBSPID_SUCCESS == libspid_config_read_item (
+ LIBSPID_MASTER_CONF_PATH,
+ LIBSPID_MASTER_CONF_LABEL_BCAST_LIMIT_ENABLE,
+ buffer,
+ LIBSPID_LINE_MAX_LEN))
+ {
+ for (i = 0; i < strlen (buffer); i++)
+ buffer[i] = tolower (buffer[i]);
+
+ if ((strcmp (buffer, "yes") == 0) || (strcmp (buffer, "y") == 0))
+ broadcast_limit_en = 1;
+
+ if (LIBSPID_SUCCESS ==
+ libspid_config_read_item (
+ LIBSPID_MASTER_CONF_PATH,
+ LIBSPID_MASTER_CONF_LABEL_BCAST_LIMIT_VALUE,
+ buffer,
+ LIBSPID_LINE_MAX_LEN))
+ {
+ sscanf (buffer, "%d", &broadcast_limit_value);
+ }
+
+ if (broadcast_limit_value <= 0)
+ {
+ broadcast_limit_en = 0;
+ }
+ }
+ /* read unkwown fields */
+ if (LIBSPID_SUCCESS == libspid_config_read_item (
+ LIBSPID_MASTER_CONF_PATH,
+ LIBSPID_MASTER_CONF_LABEL_UNKNOWN_LIMIT_ENABLE,
+ buffer,
+ LIBSPID_LINE_MAX_LEN))
+ {
+ for (i = 0; i < strlen (buffer); i++)
+ buffer[i] = tolower (buffer[i]);
+
+ if ((strcmp (buffer, "yes") == 0) || (strcmp (buffer, "y") == 0))
+ unknown_limit_en = 1;
+
+ if (LIBSPID_SUCCESS ==
+ libspid_config_read_item (
+ LIBSPID_MASTER_CONF_PATH,
+ LIBSPID_MASTER_CONF_LABEL_UNKNOWN_LIMIT_VALUE,
+ buffer, LIBSPID_LINE_MAX_LEN))
+ {
+ sscanf (buffer, "%d", &unknown_limit_value);
+ }
+
+ if (unknown_limit_value <= 0)
+ {
+ unknown_limit_en = 0;
+ }
+ }
+
+ }
+
+ /* No limitation requested */
+ if (broadcast_limit_en == 0 && unknown_limit_en == 0)
+ return ONLINED_SUCCESS;
+
+ if ((fp = fopen (ONLINED_AUTOCONF_SLAVE_FILE, "a")) == NULL)
+ return ONLINED_ERROR_FOPEN;
+
+ fwrite (ONLINED_AUTOCONF_BROADSTORM_MSG, 1,
+ strlen (ONLINED_AUTOCONF_BROADSTORM_MSG), fp);
+ memset (tmp, 0, sizeof (tmp));
+ memset (tmp_quantum, 0, sizeof (tmp_quantum));
+ memset (tmp_dev, 0, sizeof (tmp_dev));
+ sprintf (tmp_dev, "plc0");
+
+ /* bw_limit function have NOT declared QDISC rules, */
+ /* must be done here so. */
+ switch (nb_service)
+ {
+ case 0:
+ /* Add general rules for tc script */
+ /* Qdisc rules have NOT been written by bw_limit function. */
+ sprintf (tmp, "tc qdisc add dev %s root handle 1: htb r2q %d\n",
+ tmp_dev, ONLINED_AUTOCONF_TC_QUANTUM_DEFAULT);
+ fwrite (tmp, 1, strlen (tmp), fp);
+ memset (tmp, 0, sizeof (tmp));
+ break;
+
+ default:
+ /* Qdisc rules have been already written by bw_limit function. */
+ break;
+ }
+
+ if (broadcast_limit_en)
+ {
+ const uint broadcast_mark = 0xFFFFFFFF;
+
+ sprintf (tmp, "tc filter add dev %s parent 1: "
+ "protocol all handle %u fw police rate %dkbit burst "
+ "%db drop flowid 1:\n",
+ tmp_dev, broadcast_mark, broadcast_limit_value,
+ LIBSPID_MAX_PKT_SIZE);
+ fwrite (tmp, 1, strlen (tmp), fp);
+ memset (tmp, 0, sizeof (tmp));
+ }
+
+ if (unknown_limit_en)
+ {
+ const uint unknown_mark = 0xFFFFFFFE;
+
+ sprintf (tmp,
+ "tc filter add dev %s parent 1: protocol all handle %u "
+ "fw police rate %dkbit burst %db drop flowid 1:\n",
+ tmp_dev, unknown_mark, unknown_limit_value,
+ LIBSPID_MAX_PKT_SIZE);
+ fwrite (tmp, 1, strlen (tmp), fp);
+ memset (tmp, 0, sizeof (tmp));
+ }
+
+ fclose (fp);
+ return ONLINED_SUCCESS;
+}
+
+/**
+ * Adds broadcast traffic control rules in configuration file
+ * for the slave with given MAC address
+ * \param ctx onlined context
+ * \param mac slave's MAC address
+ * \return ONLINED_SUCCESS: upon success, or error code if failed
+ * \return ONLINED_ERROR_PARAM: bad input parameters
+ * \return ONLINED_ERROR_FOPS: error in file operations
+ * \return ONLINED_ERROR_GEN: general error
+ */
+onlined_error_t
+onlined_broadcast_storm_mod_eoc (onlined_ctx_t * ctx, char *mac,
+ int nb_service)
+{
+ FILE *fp;
+ char tmp[256];
+ libspid_eoc_storm_entry_t storm_entry;
+ int i;
+ char index[8];
+ struct stat statbuf;
+ int unknow_global_en = 0;
+ int unknow_global_thr = 1;
+
+ if (mac == NULL)
+ {
+ onlined_log (LOG_WARNING, "Pointer on mac address invalid");
+ return ONLINED_ERROR_PARAM;
+ }
+
+ if (stat (LIBSPID_EOC_PORT_V2_FILE, &statbuf) != 0)
+ return ONLINED_ERROR_FOPS;
+ else if (statbuf.st_mtime != ctx->storm_modification_time)
+ {
+ if (libspid_eoc_storm_check () != LIBSPID_SUCCESS)
+ {
+ onlined_log (LOG_WARNING,
+ "storm_protection.conf check failed");
+ return ONLINED_ERROR_GEN;
+ }
+ else
+ ctx->storm_modification_time = statbuf.st_mtime;
+ }
+
+ if ((fp = fopen (ONLINED_AUTOCONF_SLAVE_FILE, "a")) == NULL)
+ return ONLINED_ERROR_FOPEN;
+
+ fwrite (ONLINED_AUTOCONF_BROADSTORM_MSG, 1,
+ strlen (ONLINED_AUTOCONF_BROADSTORM_MSG), fp);
+
+ for (i = 0; i < LIBSPID_PORT_PER_SLAVE_MAX; i++)
+ {
+ sprintf (index, "%d", i);
+ if (LIBSPID_SUCCESS !=
+ libspid_eoc_storm_get (mac,
+ index, &storm_entry)) continue;
+
+ sprintf (tmp, "ethtool -stm eth0 set-stm-state %d:%s "
+ "set-stm-thr %d:%d set-mult-state %d:%s\n",
+ i, (atoi (storm_entry.bcast_protect_en) ? "on" : "off"),
+ i, atoi (storm_entry.bcast_thres_hold),
+ i, (atoi (storm_entry.multi_protect_en) ? "on" : "off"));
+ fwrite (tmp, 1, strlen (tmp), fp);
+
+ if (atoi (storm_entry.unknow_protect_en))
+ {
+ unknow_global_en = 1;
+ if (atoi (storm_entry.unknow_thres_hold) > unknow_global_thr)
+ unknow_global_thr = atoi (storm_entry.unknow_thres_hold);
+ }
+ }
+
+ /* bw_limit function have NOT declared QDISC rules, */
+ /* must be done here so. */
+ switch (nb_service)
+ {
+ case 0:
+ /* Add general rules for tc script */
+ /* Qdisc rules have NOT been written by bw_limit function. */
+ sprintf (tmp, "tc qdisc add dev %s root handle 1: htb r2q %d\n",
+ "plc0", ONLINED_AUTOCONF_TC_QUANTUM_DEFAULT);
+ fwrite (tmp, 1, strlen (tmp), fp);
+ memset (tmp, 0, sizeof (tmp));
+ break;
+
+ default:
+ /* Qdisc rules have been already written by bw_limit function. */
+ break;
+ }
+ if (unknow_global_en)
+ {
+ const uint unknown_mark = 0xFFFFFFFE;
+ sprintf (tmp,
+ "tc filter add dev %s parent 1: protocol all handle %u "
+ "fw police rate %dkbit burst %db drop flowid 1:\n",
+ "plc0", unknown_mark,
+ unknow_global_thr,
+ LIBSPID_MAX_PKT_SIZE);
+ fwrite (tmp, 1, strlen (tmp), fp);
+ memset (tmp, 0, sizeof (tmp));
+ }
+ fclose (fp);
+ return ONLINED_SUCCESS;
+}
+
+/**
+ * Adds ethernet port control rules in configuration file
+ * for the slave with given MAC address
+ * \param ctx onlined context
+ * \param mac slave's MAC address
+ * \return ONLINED_SUCCESS: upon success, or error code if failed
+ * \return ONLINED_ERROR_PARAM: bad input parameters
+ * \return ONLINED_ERROR_FOPS: error in file operations
+ * \return ONLINED_ERROR_GEN: general error
+ */
+onlined_error_t
+onlined_eth_port_mod_eoc (onlined_ctx_t *ctx, char *mac,
+ int nvram_nb_eth_port)
+{
+ FILE *fp;
+ char tmp[256];
+ libspid_eoc_ethernet_port_entry_t ethport_entry;
+ int i;
+ char index[8];
+ struct stat statbuf;
+
+ if (mac == NULL)
+ {
+ onlined_log (LOG_WARNING, "Pointer on mac address invalid");
+ return ONLINED_ERROR_PARAM;
+ }
+ if (stat (LIBSPID_EOC_PORT_V2_FILE, &statbuf) != 0)
+ return ONLINED_ERROR_FOPS;
+ else if (statbuf.st_mtime != ctx->ethernet_port_modification_time)
+ {
+ if (libspid_eoc_ethernet_port_check () != LIBSPID_SUCCESS)
+ {
+ onlined_log (LOG_WARNING,
+ "etherne_porttable.conf check failed");
+ return ONLINED_ERROR_GEN;
+ }
+ else
+ ctx->ethernet_port_modification_time = statbuf.st_mtime;
+ }
+
+ if ((fp = fopen (ONLINED_AUTOCONF_SLAVE_FILE, "a")) == NULL)
+ return ONLINED_ERROR_FOPEN;
+
+ fwrite (ONLINED_AUTOCONF_ETHPORT_MSG, 1,
+ strlen (ONLINED_AUTOCONF_ETHPORT_MSG), fp);
+
+ if (1 == nvram_nb_eth_port)
+ {
+ sprintf (index, "%d", 0);
+ if (LIBSPID_SUCCESS !=
+ libspid_eoc_ethernet_port_get (mac, index, &ethport_entry))
+ {
+ onlined_log (LOG_WARNING, "get ethport failed.\n");
+ return ONLINED_ERROR_FOPS;
+ }
+ sprintf (tmp, "ethtool -s eth0 autoneg %s\n"
+ "ethtool -s eth0 speed %s\n"
+ "ethtool -s eth0 duplex %s\n",
+ ((1 == atoi (ethport_entry.auto_neg)) ? "on" : "off"),
+ ((2 == atoi (ethport_entry.speed)) ? "100" : "10"),
+ ((2 == atoi (ethport_entry.duplex)) ? "full" : "half"));
+ fwrite (tmp, 1, strlen (tmp), fp);
+ }
+ else
+ {
+ for (i = 0; i < LIBSPID_PORT_PER_SLAVE_MAX; i++)
+ {
+ sprintf (index, "%d", i);
+ if (LIBSPID_SUCCESS !=
+ libspid_eoc_ethernet_port_get (mac, index, &ethport_entry))
+ continue;
+
+ sprintf (tmp, "ethtool -phy eth0 set-phy-aneg %d:%s "
+ "set-phy-speed %d:%s set-phy-duplex %d:%s\n",
+ i, ((1 == atoi (ethport_entry.auto_neg)) ? "on" : "off"),
+ i, ((2 == atoi (ethport_entry.speed)) ? "100" : "10"),
+ i, ((2 == atoi (ethport_entry.duplex)) ? "full" :
+ "half"));
+ fwrite (tmp, 1, strlen (tmp), fp);
+ }
+ }
+ fclose (fp);
+ return ONLINED_SUCCESS;
+}
+
+/**
+ * Adds trap IGMP rules in configuration file
+ * for the slave with given MAC address
+ * \param ctx onlined context
+ * \param mac slave's MAC address
+ * \return ONLINED_SUCCESS: upon success, or error code if failed
+ * \return ONLINED_ERROR_PARAM: bad input parameters
+ * \return ONLINED_ERROR_FOPS: error in file operations
+ * \return ONLINED_ERROR_GEN: general error
+ */
+onlined_error_t
+onlined_trap_igmp_mod_eoc (onlined_ctx_t * ctx, char *mac)
+{
+ FILE *fp;
+ char tmp[256];
+ libspid_eoc_igmp_snooping_entry_t igmp_entry;
+ struct stat statbuf;
+
+ if (mac == NULL)
+ {
+ onlined_log (LOG_WARNING, "Pointer on mac address invalid");
+ return ONLINED_ERROR_PARAM;
+ }
+ if (stat (LIBSPID_IGMP_CONF_PATH, &statbuf) != 0)
+ return ONLINED_ERROR_FOPS;
+ else if (statbuf.st_mtime != ctx->igmp_snooping_modification_time)
+ {
+ if (libspid_eoc_igmp_snooping_check () != LIBSPID_SUCCESS)
+ {
+ onlined_log (LOG_WARNING, "igmp.conf check failed");
+ return ONLINED_ERROR_GEN;
+ }
+ else
+ ctx->igmp_snooping_modification_time = statbuf.st_mtime;
+ }
+
+ if ((fp = fopen (ONLINED_AUTOCONF_SLAVE_FILE, "a")) == NULL)
+ return ONLINED_ERROR_FOPEN;
+
+ fwrite (ONLINED_AUTOCONF_IGMP_MSG, 1,
+ strlen (ONLINED_AUTOCONF_IGMP_MSG), fp);
+
+ if (LIBSPID_SUCCESS != libspid_eoc_igmp_snooping_get (mac, &igmp_entry))
+ {
+ onlined_log (LOG_WARNING, "libspid_eoc_igmp_snooping_get failed,"
+ "Trap IGMP configure failed.\n");
+ fclose (fp);
+ return ONLINED_ERROR_AUTOCONF;
+ }
+
+ sprintf (tmp, "ethtool -igmp eth0 set-trap-igmp %s\n",
+ atoi (igmp_entry.igmp_snooping_en) ? "fwd" : "discard");
+
+ fwrite (tmp, 1, strlen (tmp), fp);
+
+ fclose (fp);
+ return ONLINED_SUCCESS;
+}
+
+/**
+ * Adds ethctl rules in configuration file
+ * for the slave with given MAC address
+ * \param ctx onlined context
+ * \param mac slave's MAC address
+ * \return ONLINED_SUCCESS: upon success, or error code if failed
+ * \return ONLINED_ERROR_PARAM: bad input parameters
+ * \return ONLINED_ERROR_FOPS: error in file operations
+ * \return ONLINED_ERROR_GEN: general error
+ */
+onlined_error_t
+onlined_mirror_flow_agingtime_mod_eoc (onlined_ctx_t * ctx, char *mac)
+{
+ FILE *fp;
+ char tmp[256];
+ libspid_eoc_ethctl_entry_t ethctl_entry;
+ struct stat statbuf;
+ libspid_mirror_type_t mirr_type;
+ int mirror_source_port;
+ int mirror_dest_port;
+
+ if (mac == NULL)
+ {
+ onlined_log (LOG_WARNING, "Pointer on mac address invalid");
+ return ONLINED_ERROR_PARAM;
+ }
+ if (stat (LIBSPID_ETHCTL_CONF_PATH, &statbuf) != 0)
+ return ONLINED_ERROR_FOPS;
+ else if (statbuf.st_mtime != ctx->ethctl_modification_time)
+ {
+ if (libspid_eoc_ethctl_check () != LIBSPID_SUCCESS)
+ {
+ onlined_log (LOG_WARNING, "ethctl.conf check failed");
+ return ONLINED_ERROR_GEN;
+ }
+ else
+ ctx->ethctl_modification_time = statbuf.st_mtime;
+ }
+
+ if ((fp = fopen (ONLINED_AUTOCONF_SLAVE_FILE, "a")) == NULL)
+ return ONLINED_ERROR_FOPEN;
+
+ fwrite (ONLINED_AUTOCONF_ETHCTL_MSG, 1,
+ strlen (ONLINED_AUTOCONF_ETHCTL_MSG), fp);
+
+ if (LIBSPID_SUCCESS != libspid_eoc_ethctl_get (mac, &ethctl_entry))
+ {
+ onlined_log (LOG_WARNING, "libspid_eoc_ethctl_get failed,"
+ "ethctl configure failed.\n");
+ fclose (fp);
+ return ONLINED_ERROR_AUTOCONF;
+ }
+
+ mirr_type = atoi (ethctl_entry.mirror_type);
+ mirror_source_port = atoi (ethctl_entry.mirror_source_port) - 1;
+ mirror_dest_port = atoi (ethctl_entry.mirror_dest_port) - 1;
+ switch (mirr_type)
+ {
+ case LIBSPID_MIRROR_TYPE_COPY_IN:
+ sprintf (tmp, "ethtool -mir eth0 set-mir-type rx "
+ "set-mir-en %s set-mir-rport %d "
+ "set-mir-tport %d set-mir-dport %d\n",
+ atoi (ethctl_entry.mirror_en) ? "on" : "off",
+ mirror_source_port, mirror_source_port,
+ mirror_dest_port);
+ break;
+ case LIBSPID_MIRROR_TYPE_COPY_OUT:
+ sprintf (tmp, "ethtool -mir eth0 set-mir-type tx "
+ "set-mir-en %s set-mir-rport %d "
+ "set-mir-tport %d set-mir-dport %d\n",
+ atoi (ethctl_entry.mirror_en) ? "on" : "off",
+ mirror_source_port, mirror_source_port,
+ mirror_dest_port);
+ break;
+ case LIBSPID_MIRROR_TYPE_COPY_ALL:
+ sprintf (tmp, "ethtool -mir eth0 set-mir-type rxtx "
+ "set-mir-en %s set-mir-rport %d "
+ "set-mir-tport %d set-mir-dport %d\n",
+ atoi (ethctl_entry.mirror_en) ? "on" : "off",
+ mirror_source_port, mirror_source_port,
+ mirror_dest_port);
+ break;
+ default:
+ sprintf (tmp, "ethtool -mir eth0 set-mir-type rx "
+ "set-mir-en off set-mir-rport %d "
+ "set-mir-tport %d set-mir-dport %d\n",
+ mirror_source_port, mirror_source_port,
+ mirror_dest_port);
+ break;
+ }
+
+ fwrite (tmp, 1, strlen (tmp), fp);
+
+ sprintf (tmp, "ethtool -fat eth0 set-flow-en %s "
+ "set-aging-time %s\n",
+ atoi (ethctl_entry.flow_ctl_en) ? "on" : "off",
+ ethctl_entry.aging_time);
+
+ fwrite (tmp, 1, strlen (tmp), fp);
+
+ fclose (fp);
+ return ONLINED_SUCCESS;
+}
+
+/**
+ * Setting ip address for slave
+ * through interfaces file with given MAC address
+ * \param ip_address slave's ip address
+ * \return ONLINED_SUCCESS: upon success, or error code if failed
+ * \return ONLINED_ERROR_PARAM: bad input parameters
+ * \return ONLINED_ERROR_FOPS: error in file operations
+ * \return ONLINED_ERROR_GEN: general error
+ */
+onlined_error_t
+onlined_ip_set_for_slave (char *ip_address)
+{
+ FILE *fp;
+
+ fp = fopen (LIBSPID_NETWORK_FOR_SLAVE_CONF_PATH, "w+");
+ if (NULL == fp)
+ {
+ onlined_log (LOG_WARNING, "open %s failed!\n");
+ return ONLINED_ERROR_AUTOCONF;
+ }
+
+ fprintf (fp,
+ "auto lo eth0 plc0 br0\n\n"
+ "# Configure Loopback\n"
+ "iface lo inet loopback\n\n"
+ "# Configure Ethernet interface\n"
+ "iface eth0 inet static\n"
+ "\taddress 0.0.0.0\n"
+ "\tnetmask 255.255.255.255\n\n"
+ "iface plc0 inet static\n"
+ "\taddress 0.0.0.0\n"
+ "\tnetmask 255.255.255.255\n\n"
+ "iface br0 inet static\n"
+ "\taddress %s\n"
+ "\tnetmask 255.255.255.0\n"
+ "\tpre-up brctl addbr br0\n"
+ "\tpre-up brctl addif br0 eth0\n"
+ "\tpre-up brctl addif br0 plc0\n"
+ "\tpre-up brctl setfd br0 1\n"
+ "\tpost-down brctl delif br0 eth0\n"
+ "\tpost-down brctl delif br0 plc0\n"
+ "\tpost-down brctl delbr br0", ip_address);
+
+ fclose (fp);
+
+ return ONLINED_SUCCESS;
+}
+
+/**
+ * Send configuration file to the slave with the given address
+ * \param ctx onlined context
+ * \param mac interface MAC address
+ * \return ONLINED_SUCCESS: upon success or error code if failed
+ * \return ONLINED_ERROR_PARAM: bad input parameters
+ * \return ONLINED_AUTOCONF_NOT_ALLOWED: auto-configuration is not allowed
+ * \return ONLINED_ERROR_AUTOCONF: auto-configuration error
+ * \return ONLINED_AUTOCONF_EXIST: auto-configuration exists
+ */
+onlined_error_t
+onlined_configure (onlined_ctx_t * ctx, char *mac)
+{
+ int ret;
+ char enable[LIBSPID_CONFIG_LINE_MAX_LEN] = {0};
+ FILE *fp;
+ char path[256];
+ int rc;
+ char cmd[256];
+ int value;
+ libspid_eoc_wl_entry_t wl_entry;
+ struct stat statbuf;
+
+ if (mac == NULL || ctx == NULL)
+ {
+ onlined_log (LOG_WARNING, "bad input parameters");
+ return ONLINED_ERROR_PARAM;
+ }
+ if (LIBSPID_SUCCESS !=
+ libspid_system_nscrtv_eponeoc_mod_eoc (&value))
+ {
+ onlined_log (LOG_WARNING,
+ "libspid_system_nscrtv_eponeoc_mode_eoc failed");
+ return ONLINED_ERROR_AUTOCONF;
+ }
+
+ /* Check if the autoconfiguration is enabled */
+ ret = libspid_config_read_item (LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_AUTOCONF,
+ enable, LIBSPID_CONFIG_LINE_MAX_LEN);
+
+ if (ret != LIBSPID_SUCCESS || strcmp (enable, "yes") != 0)
+ {
+ onlined_log (LOG_WARNING, "Autoconfiguration of slave %s "
+ "is not allowed", mac);
+ return ONLINED_AUTOCONF_NOT_ALLOWED;
+ }
+
+ /* Start with fresh configuration */
+ if (onlined_remove_autoconf_dir () != 0)
+ return ONLINED_ERROR_AUTOCONF;
+ if (onlined_create_autoconf_dir () != 0)
+ return ONLINED_ERROR_AUTOCONF;
+
+ if (ONLINED_AUTOCONF_CREATE_EN)
+ {
+ /* write the autoconfiguration file's common header */
+ if ((fp = fopen (ONLINED_AUTOCONF_SLAVE_FILE, "w")) != NULL)
+ {
+ fwrite (ONLINED_AUTOCONF_HEADER, 1,
+ strlen (ONLINED_AUTOCONF_HEADER), fp);
+ fclose (fp);
+ }
+ else
+ return ONLINED_ERROR_AUTOCONF;
+ }
+
+ /* Check if slave's configuration file already exists */
+ if (onlined_find_config (mac, path))
+ {
+ if (onlined_untar_config (path))
+ {
+ onlined_log (LOG_WARNING, "Cannot unpack configuration "
+ "file for slave %s", mac);
+ return ONLINED_ERROR_AUTOCONF;
+ }
+ }
+ else if (!ONLINED_AUTOCONF_CREATE_EN)
+ {
+ return ONLINED_SUCCESS;
+ }
+
+ if (ONLINED_AUTOCONF_CREATE_EN)
+ {
+ int nb_serv = 0;
+ int nvram_nb_eth_port;
+
+ /* MME reply used inside configuration functions. */
+ nvram_nb_eth_port = onlined_get_port_number (mac);
+
+ if (nvram_nb_eth_port == -1)
+ onlined_log (LOG_WARNING, "Autoconfiguration : read number of "
+ "ethernet ports for slave %s failed",
+ mac);
+ else
+ {
+ /* Add here your configuration file creation */
+ if (onlined_tag_vlan (ctx, mac, nvram_nb_eth_port) != 0)
+ return ONLINED_ERROR_AUTOCONF;
+ if (onlined_bw_limit (ctx, mac, nvram_nb_eth_port, &nb_serv) != 0)
+ return ONLINED_ERROR_AUTOCONF;
+ if (LIBSPID_TRUE == value)
+ {
+ if (onlined_eth_port_mod_eoc (ctx, mac, nvram_nb_eth_port) != 0)
+ return ONLINED_ERROR_AUTOCONF;
+
+ if (nvram_nb_eth_port == 1)
+ {
+ if (onlined_broadcast_storm (ctx, mac,
+ nvram_nb_eth_port, nb_serv) != 0)
+ return ONLINED_ERROR_AUTOCONF;
+ }
+ else
+ {
+ if (onlined_broadcast_storm_mod_eoc (ctx, mac, nb_serv) != 0)
+ return ONLINED_ERROR_AUTOCONF;
+ if (onlined_trap_igmp_mod_eoc (ctx, mac) != 0)
+ return ONLINED_ERROR_AUTOCONF;
+ if (onlined_mirror_flow_agingtime_mod_eoc (ctx, mac) != 0)
+ return ONLINED_ERROR_AUTOCONF;
+ }
+
+ } else {
+ if (onlined_broadcast_storm (ctx, mac,
+ nvram_nb_eth_port, nb_serv) != 0)
+ return ONLINED_ERROR_AUTOCONF;
+ }
+ }
+ /* set slave's ip if NSCRTV_EPONEOC_MOD_EOC = yes */
+ if (LIBSPID_TRUE == value)
+ {
+ if (stat (LIBSPID_WHITE_LIST_CONF_PATH, &statbuf) != 0)
+ return ONLINED_ERROR_FOPS;
+ else if (statbuf.st_mtime != ctx->wl_ip_modification_time)
+ {
+ if (libspid_eoc_wl_check () != LIBSPID_SUCCESS)
+ {
+ onlined_log (LOG_WARNING,
+ "white_list.conf check failed");
+ return ONLINED_ERROR_GEN;
+ }
+ else
+ ctx->wl_ip_modification_time = statbuf.st_mtime;
+ }
+ if (LIBSPID_SUCCESS == libspid_eoc_wl_get (mac, &wl_entry))
+ {
+ if (ONLINED_SUCCESS !=
+ onlined_ip_set_for_slave ((char *)wl_entry.ip_address))
+ {
+ onlined_log (LOG_WARNING, "set ip for slave faild!\n");
+ return ONLINED_ERROR_AUTOCONF;
+ }
+ }
+ }
+ /* finish slave's file with an exit command */
+ if ((fp = fopen (ONLINED_AUTOCONF_SLAVE_FILE, "a")) != NULL)
+ {
+ fwrite (ONLINED_AUTOCONF_EXIT, 1,
+ strlen (ONLINED_AUTOCONF_EXIT), fp);
+ fclose (fp);
+ }
+ else
+ return ONLINED_ERROR_AUTOCONF;
+ }
+
+ sprintf (cmd, "cp %s %s",
+ LIBSPID_SLAVE_CONF_PATH, ONLINED_AUTOCONF_TMP_DIR);
+ rc = system (cmd);
+ if (rc != 0)
+ {
+ onlined_log (LOG_WARNING, "Copy slave.conf file failed");
+ return ONLINED_ERROR_AUTOCONF;
+ }
+ if (LIBSPID_TRUE == value)
+ {
+ char maclimit_cur[LIBSPID_CONFIG_KEY_MAX_LEN];
+ if (LIBSPID_SUCCESS != libspid_config_read_item (
+ LIBSPID_MAC_LIMITATION_CONF_PATH,
+ mac, maclimit_cur, LIBSPID_CONFIG_KEY_MAX_LEN))
+ {
+ onlined_log (LOG_WARNING, "get maclimit entry failed.\n");
+ return ONLINED_ERROR_FOPS;
+ }
+
+ if (LIBSPID_SUCCESS != libspid_config_write_item (
+ ONLINED_AUTOCONF_TMP_SLAVE_CONF,
+ LIBSPID_SLAVE_CONF_LABEL_MAC_LIMITATION,
+ maclimit_cur))
+ {
+ onlined_log (LOG_WARNING, "write maclimit value failed.\n");
+ return ONLINED_ERROR_FOPS;
+ }
+ }
+
+ if (onlined_tar_config (mac, path))
+ {
+ onlined_log (LOG_WARNING,
+ "Cannot create .tar file for slave %s", mac);
+ return ONLINED_ERROR_AUTOCONF;
+ }
+
+ ret = libspid_eoc_configure (mac, path);
+ /* Check return value */
+ switch (ret)
+ {
+ case LIBSPID_SUCCESS:
+ return ONLINED_SUCCESS;
+
+ case LIBSPID_ERROR_AUTOCONF_EXIST:
+ return ONLINED_AUTOCONF_EXIST;
+
+ default:
+ return ONLINED_ERROR_AUTOCONF;
+ }
+
+}
diff --git a/cleopatre/application/onlined/src/onlined_mme.c b/cleopatre/application/onlined/src/onlined_mme.c
new file mode 100644
index 0000000000..97550f8969
--- /dev/null
+++ b/cleopatre/application/onlined/src/onlined_mme.c
@@ -0,0 +1,1545 @@
+/* SPC300-eoc project {{{
+ *
+ * Copyright (C) 2010 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file application/onlined/src/onlined_mme.c
+ * \brief communication with Cesar
+ * \ingroup onlined
+ *
+ * Performs communication with Cesar
+ */
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <pthread.h>
+#include <unistd.h>
+#include <sys/stat.h>
+#include <stdarg.h>
+#include <libgen.h>
+#include <sys/time.h>
+
+#include "onlined_mme.h"
+#include "onlined_configure.h"
+#include "libspid.h"
+
+/**
+ * Log onlined messages
+ * \param prio priority of the message
+ * \param format message format
+ */
+void
+onlined_log (int prio, const char* fmt, ...)
+{
+ va_list args;
+
+#ifndef __UTESTS__
+ openlog ("onlined", 0, LOG_DAEMON);
+#endif
+
+ va_start (args, fmt);
+ vsyslog (prio, fmt, args);
+ va_end (args);
+
+#ifndef __UTESTS__
+ closelog ();
+#endif
+}
+
+/**
+ * Tests received MME agains wrong content
+ * \param ctx onlined daemon context
+ * \param mmtype MME type
+ * \return ONLINED_SUCCESS upon success, according error code if failed
+ *
+ * Tests VS_EOC_GET_TOPO and CM_NW_STATS responce agains wrong content.
+ */
+onlined_error_t
+onlined_test_mme_content (const mme_ctx_t * ctx, unsigned short mmtype)
+{
+ unsigned int i = 0, j = 0, n_mac_addr = 0, correct_mac = 0;
+
+ if (NULL == ctx )
+ return ONLINED_ERROR_PARAM;
+
+ /* check VS_EOC_GET_TOPO */
+ if (mmtype == (VS_EOC_GET_TOPO | MME_CNF))
+ {
+ n_mac_addr = ctx->buffer[1];
+
+ /* test number of MAC addresses */
+ if (n_mac_addr > 128)
+ return ONLINED_ERROR_MME_WRONG_N_MAC_ADDR;
+
+ /* test MAC, authorisation */
+ for (i = 1; i < n_mac_addr + 1; i++)
+ {
+ /* test if MAC is 00:00:00:00:00:00 */
+ for (j = 0; j < ETH_ALEN; j++)
+ {
+ correct_mac = 0;
+
+ if (ctx->buffer[10 + (i - 2) * 8 + j] != '\0')
+ {
+ correct_mac = 1;
+ break;
+ }
+ }
+
+ if (correct_mac == 0)
+ return ONLINED_ERROR_MME_WRONG_MAC;
+
+ /* test value for authorisation */
+ if (ctx->buffer[10 + (i - 2) * 8 + ETH_ALEN]
+ >= ONLINED_SLAVE_STATUS_NB)
+ {
+ return ONLINED_ERROR_MME_AUTHORISATION_WRONG_VALUE;
+ }
+ }
+
+ /* test if there is redundant data after the last expected data */
+ for (i = 0; i < ETH_DATA_LEN - (13 + 8 * (n_mac_addr - 1)); i++)
+ {
+ if (ctx->buffer[10 + 8 * (n_mac_addr - 1) + i] != '\0')
+ {
+ return ONLINED_ERROR_MME_CONTAIN_REDUNDANT_DATA;
+ }
+ }
+ }
+ /* check CM_NW_STATS */
+ else if (mmtype == (CM_NW_STATS | MME_CNF))
+ {
+ n_mac_addr = ctx->buffer[0];
+
+ /* test number of MAC addresses */
+ if (n_mac_addr > 128)
+ return ONLINED_ERROR_MME_WRONG_N_MAC_ADDR;
+
+ /* test MAC */
+ for (i = 1; i < n_mac_addr + 1; i++)
+ {
+ /* test if MAC is 00:00:00:00:00:00 */
+ for (j = 0; j < ETH_ALEN; j++)
+ {
+ correct_mac = 0;
+
+ if (ctx->buffer[9 + (i - 2) * 8 + j] != '\0')
+ {
+ correct_mac = 1;
+ break;
+ }
+ }
+
+ if (correct_mac == 0)
+ return ONLINED_ERROR_MME_WRONG_MAC;
+ }
+
+ /* test if there is redundant data after the last expected data */
+ for (i = 0; i < ETH_DATA_LEN - (9 + 8 * (n_mac_addr - 1)); i++)
+ {
+ if (ctx->buffer[9 + 8 * (n_mac_addr - 1) + i] != '\0')
+ {
+ return ONLINED_ERROR_MME_CONTAIN_REDUNDANT_DATA;
+ }
+ }
+ }
+ else
+ return ONLINED_ERROR_PARAM;
+
+ return ONLINED_SUCCESS;
+}
+
+/**
+ * Sends VS_EOC_GET_DEVICE_INFO MME to Cesar, receives confirmation and stores
+ * result into according buffer which will be
+ * written into the online.info file
+ * \param ctx onlined daemon context
+ * \param mac_addr_bin destination MAC address
+ * \param s_line array of pointers to buffers which will be written to
+ * online.info file
+ * \return ONLINED_SUCCESS upon success, according error code if failed
+ *
+ * Sends VS_EOC_GET_DEVICE_INFO MME to Cesar, receives confirmation and stores
+ * result into according buffer which will be
+ * written into the online.info file
+ */
+onlined_error_t
+onlined_get_device_info (const onlined_ctx_t * ctx,
+ unsigned char * mac_addr_bin, char ** s_line)
+{
+ mme_ctx_t mme_get_device_info_request_ctx,
+ mme_get_device_info_confirm_ctx;
+ char *iface = ONLINED_IFACE;
+ unsigned char device_info_snd_buffer[ETH_DATA_LEN];
+ unsigned char device_info_rcv_buffer[ETH_DATA_LEN];
+ unsigned int model_number_len;
+ char eth_port_nb;
+ unsigned int eth_port_nb_len;
+ unsigned int software_version_len;
+ char downstream_attenuation;
+ unsigned int downstream_attenuation_len;
+ int ret;
+ char result;
+ unsigned int result_len;
+
+ if (NULL == ctx || NULL == mac_addr_bin || NULL == s_line)
+ return ONLINED_ERROR_PARAM;
+
+ /* init memory */
+ memset (device_info_snd_buffer, 0, ETH_DATA_LEN);
+ memset (device_info_rcv_buffer, 0, ETH_DATA_LEN);
+ model_number_len = 0;
+ software_version_len = 0;
+ downstream_attenuation = 0;
+ eth_port_nb = 0;
+ eth_port_nb_len = 0;
+ downstream_attenuation_len = 0;
+ result_len = 0;
+ result = 1;
+ ret = 1;
+
+ /* init request mme for VS_EOC_GET_DEVICE_INFO */
+ ret = mme_init (&mme_get_device_info_request_ctx,
+ VS_EOC_GET_DEVICE_INFO | MME_REQ,
+ device_info_snd_buffer, (unsigned int)ETH_DATA_LEN);
+ if (ret != MME_SUCCESS)
+ {
+ return ret;
+ }
+
+ /* init confirm mme for VS_EOC_GET_DEVICE_INFO */
+ ret = mme_init (&mme_get_device_info_confirm_ctx,
+ VS_EOC_GET_DEVICE_INFO | MME_CNF,
+ device_info_rcv_buffer, (unsigned int)ETH_DATA_LEN);
+ if (ret != MME_SUCCESS)
+ {
+ return ret;
+ }
+
+ /* send reqest mme and receive confirm mme */
+ ret = mme_send (&mme_get_device_info_request_ctx,
+ MME_SEND_REQ_CNF, iface, mac_addr_bin,
+ &mme_get_device_info_confirm_ctx);
+ if (MME_SUCCESS != ret)
+ {
+ return ret;
+ }
+
+ /* examinate mme send/receive result */
+ ret = mme_pull (&mme_get_device_info_confirm_ctx,
+ (void *)&result, 1, &result_len);
+ if (MME_SUCCESS != ret)
+ {
+ return ret;
+ }
+
+ if (result != 0 )
+ {
+ return ONLINED_ERROR_MME_WRONG_RESULT;
+ }
+
+ /* get model number */
+ ret = mme_pull (&mme_get_device_info_confirm_ctx,
+ s_line[0], 64, &model_number_len);
+ if (MME_SUCCESS != ret)
+ {
+ return ret;
+ }
+
+ /* get software version, it can be up to 16 bytes long */
+ ret = mme_pull (&mme_get_device_info_confirm_ctx,
+ s_line[3], 64, &software_version_len);
+ if (MME_SUCCESS != ret)
+ return ret;
+ s_line[3][16] = 0;
+
+ /* get downstream attenuation */
+ ret = mme_pull (&mme_get_device_info_confirm_ctx,
+ (void *)&downstream_attenuation, 1,
+ &downstream_attenuation_len);
+ if (MME_SUCCESS != ret)
+ {
+ return ret;
+ }
+
+ sprintf (s_line[4], "%d", downstream_attenuation);
+
+ /* get port amount */
+ ret = mme_pull (&mme_get_device_info_confirm_ctx,
+ (void *)&eth_port_nb, 1, &eth_port_nb_len);
+ if (MME_SUCCESS != ret)
+ {
+ return ret;
+ }
+
+ sprintf (s_line[1], "%d", eth_port_nb);
+
+ return ONLINED_SUCCESS;
+}
+
+
+/**
+ * Sends CM_NW_STATS MME to Cesar, receives confirmation and stores
+ * result into according structures which will be
+ * written into the online.info file
+ * \param ctx onlined daemon context
+ * \param mac_plc0_bin plc0 interface MAC address (Cesar)
+ * \param number_of_mac_addr_get_topo number of MAC addresses
+ * returned by VS_EOC_GET_TOPO MME
+ * \param nw_stats array of structures holding STA MAC Address,
+ * and it's TX/RX PHY data rate
+ * \return ONLINED_SUCCESS upon success, according error code if failed
+ *
+ * Sends CM_NW_STATS MME to Cesar, receives confirmation and stores
+ * result into according array of structures which will
+ * be written into the online.info file
+ */
+onlined_error_t
+onlined_get_nw_stats (const onlined_ctx_t * ctx,
+ unsigned char * mac_plc0_bin,
+ onlined_nw_stats_t * nw_stats)
+{
+ mme_ctx_t mme_cm_nw_stats_request_ctx, mme_cm_nw_stats_confirm_ctx;
+ unsigned char nw_stats_snd_buffer[ETH_DATA_LEN];
+ unsigned char nw_stats_rcv_buffer[ETH_DATA_LEN];
+ unsigned char number_of_mac_addr;
+ unsigned int number_of_mac_addr_len;
+ unsigned int mac_addr_bin_len;
+ unsigned int tx_phy_data_rate_len;
+ unsigned int rx_phy_data_rate_len;
+ int i;
+ int ret;
+
+ if (NULL == ctx || NULL == mac_plc0_bin || NULL == nw_stats)
+ return ONLINED_ERROR_PARAM;
+
+ /* init memory */
+ memset (nw_stats_snd_buffer, 0, ETH_DATA_LEN);
+ memset (nw_stats_rcv_buffer, 0, ETH_DATA_LEN);
+ number_of_mac_addr_len = 0;
+ mac_addr_bin_len = 0;
+ tx_phy_data_rate_len = 0;
+ rx_phy_data_rate_len = 0;
+ number_of_mac_addr = 0;
+ ret = 1;
+
+ /* init request mme for CM_NW_STATS */
+ ret = mme_init (&mme_cm_nw_stats_request_ctx,
+ CM_NW_STATS | MME_REQ, nw_stats_snd_buffer,
+ (unsigned int)ETH_DATA_LEN);
+ if (ret != MME_SUCCESS)
+ {
+ return ret;
+ }
+
+ /* init confirm mme for CM_NW_STATS */
+ ret = mme_init (&mme_cm_nw_stats_confirm_ctx,
+ CM_NW_STATS | MME_CNF, nw_stats_rcv_buffer,
+ (unsigned int)ETH_DATA_LEN);
+ if (ret != MME_SUCCESS)
+ {
+ return ret;
+ }
+
+ /* send reqest mme and receive confirm mme */
+ ret = mme_send (&mme_cm_nw_stats_request_ctx,
+ MME_SEND_REQ_CNF, NULL, mac_plc0_bin,
+ &mme_cm_nw_stats_confirm_ctx);
+ if (MME_SUCCESS != ret)
+ {
+ return ret;
+ }
+
+ /* test for wrong MME content */
+ ret = onlined_test_mme_content (&mme_cm_nw_stats_confirm_ctx,
+ CM_NW_STATS | MME_CNF);
+ if (ONLINED_SUCCESS != ret)
+ {
+ return ret;
+ }
+
+ /* get the number of received MAC addresses */
+ ret = mme_pull (&mme_cm_nw_stats_confirm_ctx, (void *)&number_of_mac_addr,
+ 1, &number_of_mac_addr_len);
+ if (MME_SUCCESS != ret)
+ {
+ return ret;
+ }
+
+ /* Fetch average PHY data rate for each STA */
+ for (i = 0; i < number_of_mac_addr; i++)
+ {
+ /* get MAC address from MME */
+ ret = mme_pull (&mme_cm_nw_stats_confirm_ctx, nw_stats->mac_addr_bin,
+ ETH_ALEN, &mac_addr_bin_len);
+ if (MME_SUCCESS != ret)
+ {
+ return ret;
+ }
+
+ /* get avarage TX PHY datarate for each STA from MME */
+ ret = mme_pull (&mme_cm_nw_stats_confirm_ctx,
+ (void *)&(nw_stats->tx_phy_data_rate), 1,
+ &tx_phy_data_rate_len);
+ if (MME_SUCCESS != ret)
+ {
+ return ret;
+ }
+
+ /* get avarage RX PHY datarate for each STA from MME */
+ ret = mme_pull (&mme_cm_nw_stats_confirm_ctx,
+ (void *)&(nw_stats->rx_phy_data_rate), 1,
+ &rx_phy_data_rate_len);
+ if (MME_SUCCESS != ret)
+ {
+ return ret;
+ }
+
+ nw_stats++;
+ }
+
+ return ONLINED_SUCCESS;
+}
+
+/* reverse string s in place */
+static void
+reverse (char *s)
+{
+ int i, j;
+ char c;
+
+ for (i = 0, j = strlen (s) - 1; i < j; i++, j--)
+ {
+ c = s[i];
+ s[i] = s[j];
+ s[j] = c;
+ }
+}
+
+/* convert n to hexa characters in s */
+static char*
+itoa (int n, char* s, int b)
+{
+ int i, sign;
+
+ if ((sign = n) < 0)
+ n = -n;
+ i = 0;
+ do
+ {
+ if (n % b > 9)
+ s[i++] = n % b + 'a' - 10;
+ else
+ s[i++] = n % b + '0';
+ } while ((n /= b) > 0);
+ if (sign < 0)
+ s[i++] = '-';
+ s[i] = '\0';
+ reverse (s);
+
+ return s;
+}
+
+static char*
+onlined_ltrim (char *string, char junk)
+{
+ char *original = string;
+ char *p = original;
+ int trimmed = 0;
+
+ do
+ {
+ if (*original != junk || trimmed)
+ {
+ trimmed = 1;
+ *p++ = *original;
+ }
+ }
+ while (*original++ != '\0');
+ return string;
+}
+/**
+* Write and save /etc/update.info file
+* \param ctx onlined daemon context
+* \param mac MAC address
+* \param file file name
+* \param action update action
+* \param status update status
+* \return ONLINED_SUCCESS upon success, or error code if failed
+* \return ONLINED_ERROR_PARAM error input parameter
+* \return ONLINED_ERROR_UPGRADE error of writing or saving update.info file
+*/
+onlined_error_t
+onlined_write_update_info_file (const onlined_ctx_t * ctx, char *mac,
+ char *file, int action, int status,
+ int last_action)
+{
+ int ret = 0;
+ char *elt[LIBSPID_CONFIG_ELT_MAX_NB];
+ const char delimiters[2] = LIBSPID_UPDATE_INFO_DELIMITER "\0";
+
+ if (ctx == NULL || mac == NULL || file == NULL)
+ return ONLINED_ERROR_PARAM;
+
+ elt[0] = (char *)malloc (LIBSPID_UPDATE_FILE_STR_MAX_LEN * sizeof (char));
+ elt[1] = (char *)malloc (2 * sizeof (char));
+ elt[2] = (char *)malloc (2 * sizeof (char));
+ elt[3] = (char *) malloc (2 * sizeof (char));
+
+ strcpy (elt[0], file);
+ itoa (action, elt[1], 10);
+ itoa (status, elt[2], 10);
+ itoa (last_action, elt[3], 10);
+
+ ret = libspid_config_write_line (LIBSPID_UPDATE_INFO_PATH, delimiters[0],
+ mac, 4, elt);
+ if (ret != LIBSPID_SUCCESS)
+ {
+ onlined_log (LOG_WARNING, "Unable to write in update.info file");
+ free (elt[0]);
+ free (elt[1]);
+ free (elt[2]);
+ free (elt[3]);
+ return ONLINED_ERROR_UPGRADE;
+ }
+
+ ret = libspid_system_save_file (LIBSPID_UPDATE_INFO_PATH);
+ if (ret != LIBSPID_SUCCESS)
+ {
+ onlined_log (LOG_WARNING, "Unable to save update.info file");
+ free (elt[0]);
+ free (elt[1]);
+ free (elt[2]);
+ free (elt[3]);
+ return ONLINED_ERROR_UPGRADE;
+ }
+
+ free (elt[0]);
+ free (elt[1]);
+ free (elt[2]);
+ free (elt[3]);
+
+ return ONLINED_SUCCESS;
+}
+
+/**
+ * Upgrade software image for the slave with the given address
+ * \param ctx onlined daemon context
+ * \param mac interface MAC address
+ * \return ONLINED_SUCCESS upon success, or error code if failed
+ */
+onlined_error_t
+onlined_upgrade (onlined_ctx_t * ctx, char *mac)
+{
+ int ret, rc = ONLINED_SUCCESS, i;
+ char enable[LIBSPID_CONFIG_LINE_MAX_LEN] = {0};
+ char slave_image[LIBSPID_CONFIG_LINE_MAX_LEN] = {0};
+ int action = 0;
+ int status = 0;
+ int last_action = 0;
+ char cmd[256];
+ const char delimiters[2] = LIBSPID_UPDATE_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];
+ char buffer[LIBSPID_CONFIG_LINE_MAX_LEN];
+
+ if (NULL == ctx || NULL == mac)
+ return ONLINED_ERROR_PARAM;
+
+ /* Check if upgrade is allowed (e.g. through SNMP agent) */
+ strcpy (key, mac);
+
+ ret = libspid_config_read_line (LIBSPID_UPDATE_INFO_PATH, delimiters,
+ key, &elt_number, elt,
+ buffer, LIBSPID_CONFIG_LINE_MAX_LEN);
+ if (ret == LIBSPID_SUCCESS)
+ {
+ strcpy (slave_image, elt[0]);
+ action = atoi (elt[1]);
+ status = atoi (elt[2]);
+ last_action = atoi (elt[3]);
+ }
+ else
+ {
+ return rc;
+ }
+
+ for (i = 0; i < ctx->tftp_list_number; i++)
+ {
+ if (strcmp (ctx->tftp_mac_list[i].mac, mac) == 0
+ && ctx->tftp_mac_list[i].status == LIBSPID_UPDATE_RUNNING)
+ return LIBSPID_SUCCESS;
+
+ }
+
+ /* remove leading slashes if they exist */
+ onlined_ltrim (slave_image, '/');
+
+ /* if slave is offline but update is started */
+ if (action == LIBSPID_UPDATE_ACTION_UPDATE
+ && ctx->slave_offline == LIBSPID_TRUE)
+ {
+ onlined_log (LOG_WARNING, "Starting image transfer to slave %s", mac);
+ onlined_log (LOG_WARNING, "Image transfer will be started when "
+ "slave %s appears on the network", mac);
+ goto update_info_file;
+ }
+
+ /* start update, upload or tftp_update */
+ if (action == LIBSPID_UPDATE_ACTION_UPDATE
+ || action == LIBSPID_UPDATE_ACTION_TFTP_UPDATE
+ || (action == LIBSPID_UPDATE_ACTION_UPLOAD
+ && ctx->new_slave == LIBSPID_TRUE))
+ {
+ char filepath[LIBSPID_CONFIG_LINE_MAX_LEN] = {0};
+ char *image_bname;
+
+ /* write status running in case of action is upload */
+ /* and status is failed */
+ /* this is possible after update for offline slaves */
+ ret = onlined_write_update_info_file (ctx, mac, slave_image,
+ action, LIBSPID_UPDATE_RUNNING,
+ last_action);
+ if (ret != LIBSPID_SUCCESS)
+ onlined_log (LOG_WARNING, "Error update update.info file");
+
+ /* Check if the upgrade is enabled */
+ ret = libspid_config_read_item (LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_AUTOUPDATE,
+ enable, LIBSPID_CONFIG_LINE_MAX_LEN);
+ if (ret != LIBSPID_SUCCESS || strcmp (enable, "yes") != 0)
+ {
+ onlined_log (LOG_WARNING, "Update or upload of slave %s "
+ "is not allowed", mac);
+ ret = -1;
+ goto update_info_file;
+ }
+ else
+ {
+ /* create image storage directory */
+ sprintf (cmd, "mkdir -p %s", LIBSPID_UPDATE_DIR_PATH);
+ ret = system (cmd);
+ if (ret == -1)
+ {
+ onlined_log (LOG_WARNING, "Cannot create image directory");
+ goto update_info_file;
+ }
+
+ image_bname = basename (slave_image);
+ strcpy (filepath, LIBSPID_UPDATE_DIR_PATH);
+ strcat (filepath, "/");
+ strcat (filepath, image_bname);
+
+ /* Fetch upgrade image file from an FTP server if needed */
+ if (access (filepath, F_OK))
+ {
+ char server_ip[LIBSPID_CONFIG_LINE_MAX_LEN] = {0};
+ char server_port[LIBSPID_CONFIG_LINE_MAX_LEN] = {0};
+ char server_login[LIBSPID_CONFIG_LINE_MAX_LEN] = {0};
+ char server_pwd[LIBSPID_CONFIG_LINE_MAX_LEN] = {0};
+ FILE *pin;
+ char slice[64], buffer[1024];
+
+ /* Make sure unique image file is downloaded */
+ sprintf (cmd, "rm -rf %s/*", LIBSPID_UPDATE_DIR_PATH);
+ ret = system (cmd);
+ if (ret == -1)
+ {
+ onlined_log (LOG_WARNING, "Cannot clean image directory");
+ goto update_info_file;
+ }
+
+ /* Get FTP server parameters */
+ ret = libspid_config_read_item (
+ LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_UPGRADE_SERVER_IP,
+ server_ip, LIBSPID_CONFIG_LINE_MAX_LEN);
+ if (ret != LIBSPID_SUCCESS)
+ {
+ onlined_log (LOG_WARNING, "Cannot read FTP "
+ "server address");
+ goto update_info_file;
+ }
+ ret = libspid_config_read_item (
+ LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_UPGRADE_SERVER_PORT,
+ server_port, LIBSPID_CONFIG_LINE_MAX_LEN);
+ if (ret != LIBSPID_SUCCESS)
+ {
+ onlined_log (LOG_WARNING, "Cannot read FTP server port");
+ goto update_info_file;
+ }
+ ret = libspid_config_read_item (
+ LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_UPGRADE_SERVER_LOGIN,
+ server_login, LIBSPID_CONFIG_LINE_MAX_LEN);
+ if (ret != LIBSPID_SUCCESS)
+ {
+ onlined_log (LOG_WARNING, "Cannot read "
+ "FTP server login name");
+ goto update_info_file;
+ }
+ ret = libspid_config_read_item (
+ LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_UPGRADE_SERVER_PASSWORD,
+ server_pwd, LIBSPID_CONFIG_LINE_MAX_LEN);
+ if (ret != LIBSPID_SUCCESS)
+ {
+ onlined_log (LOG_WARNING, "Cannot read FTP "
+ "server login password");
+ goto update_info_file;
+ }
+
+ /* Download image file from server */
+#if defined __UTESTS__ || defined __FTESTS_PC__
+ sprintf (cmd, "touch %s", filepath);
+#else
+ sprintf (cmd, "ftpget -u %s -p %s -P %s %s %s %s 2>&1",
+ server_login, server_pwd, server_port,
+ server_ip, filepath, slave_image);
+#endif
+
+ pin = popen (cmd, "r");
+ memset (buffer, 0, sizeof (buffer));
+ while (fgets (slice, sizeof (slice), pin) != NULL)
+ strcat (buffer, slice);
+ pclose (pin);
+
+ if (strlen (buffer))
+ {
+ onlined_log (LOG_WARNING, "Cannot fetch image %s "
+ "from an FTP server at %s:%s "
+ "(login: %s, pwd: %s)",
+ slave_image, server_ip,
+ server_port, server_login,
+ server_pwd);
+ onlined_log (LOG_WARNING, "%s", buffer);
+ ret = -1;
+ goto update_info_file;
+ }
+ }
+
+ onlined_log (LOG_WARNING, "Starting image transfer "
+ "to slave %s", mac);
+
+ if (action != LIBSPID_UPDATE_ACTION_TFTP_UPDATE)
+ {
+ ret = libspid_eoc_upgrade_remote_image (mac, filepath);
+ if (ret == LIBSPID_SUCCESS)
+ onlined_log (LOG_WARNING, "Image transfer to slave %s "
+ "is successful (image %s)",
+ mac, filepath);
+ else
+ onlined_log (LOG_WARNING, "Image transfer to slave %s "
+ "failed (image %s)",
+ mac, filepath);
+ }
+ else
+ {
+ if (ctx->tftp_update_running == LIBSPID_FALSE)
+ {
+#if defined __UTESTS__ || defined __FTESTS_PC__
+ ret = 0;
+#else
+ sprintf (cmd, "udpsvd -v -E 0 %s tftpd &",
+ LIBSPID_UPDATE_TFTP_SERVER_PORT);
+ ret = system (cmd);
+#endif
+ if (ret != 0)
+ {
+ onlined_log (LOG_WARNING, "TFTP server is "
+ "not started");
+
+ ret = onlined_write_update_info_file (
+ ctx, mac,
+ slave_image,
+ LIBSPID_UPDATE_ACTION_NONE,
+ LIBSPID_UPDATE_FAILED,
+ last_action);
+ if (ret != LIBSPID_SUCCESS)
+ onlined_log (LOG_WARNING, "Error update "
+ "update.info file");
+ return ONLINED_ERROR_UPGRADE;
+ }
+ ctx->tftp_update_running = LIBSPID_TRUE;
+ }
+
+ ret = libspid_eoc_tftp_upgrade_remote_image (mac, filepath);
+ if (ret == LIBSPID_SUCCESS)
+ {
+ ctx->tftp_mac_list[ctx->tftp_list_number].status =
+ LIBSPID_UPDATE_RUNNING;
+ strcpy (ctx->tftp_mac_list[ctx->tftp_list_number].mac,
+ mac);
+ gettimeofday (&ctx->tftp_mac_list[ctx->tftp_list_number]
+ .tftp_start_time, 0);
+ ctx->tftp_list_number += 1;
+
+ rc = ONLINED_SUCCESS;
+ }
+ else
+ {
+ ret = onlined_write_update_info_file (
+ ctx, mac, slave_image,
+ LIBSPID_UPDATE_ACTION_NONE,
+ LIBSPID_UPDATE_FAILED,
+ last_action);
+ if (ret != LIBSPID_SUCCESS)
+ onlined_log (LOG_WARNING, "Error update "
+ "update.info file");
+ return ONLINED_ERROR_UPGRADE;
+ }
+
+ return rc;
+ }
+ }
+
+update_info_file:
+ if (ctx->slave_offline)
+ {
+ /* slave is offline; move from update to upload */
+ action = LIBSPID_UPDATE_ACTION_UPLOAD;
+ status = LIBSPID_UPDATE_FAILED;
+ }
+ else
+ {
+ /* refresh update.info */
+ action = LIBSPID_UPDATE_ACTION_NONE;
+ if (ret == LIBSPID_SUCCESS)
+ {
+ status = LIBSPID_UPDATE_SUCCESS;
+ rc = ONLINED_SUCCESS;
+ }
+ else
+ {
+ status = LIBSPID_UPDATE_FAILED;
+ rc = ONLINED_ERROR_UPGRADE;
+ }
+ }
+
+ ret = onlined_write_update_info_file (ctx, mac, slave_image,
+ action, status,
+ last_action);
+ if (ret != LIBSPID_SUCCESS)
+ {
+ rc = ONLINED_ERROR_UPGRADE;
+ }
+
+ }
+
+ return rc;
+}
+
+/**
+ * Implements communication with Cesar.
+ * \param ctx onlined daemon context
+ * \return ONLINED_SUCCESS upon success, according error code if failed
+ *
+ * Implements communication between Cesar and Cleopatre using socket created
+ * in the function mme_send.
+ * Writes specified data to online.info file using libmme function
+ * libspid_config_write_line.
+ */
+int
+onlined_snd_rcv_mmes (onlined_ctx_t * ctx)
+{
+ const char delimiter = ';';
+ mme_ctx_t mme_request_ctx, mme_confirm_ctx;
+ unsigned char snd_buffer[ETH_DATA_LEN];
+ unsigned char rcv_buffer[ETH_DATA_LEN];
+ char result;
+ unsigned char number_of_mac_addr;
+ unsigned int result_len;
+ unsigned int number_of_mac_addr_len;
+ unsigned char mac_addr_bin[ETH_ALEN];
+ char mac_addr_str[LIBSPID_MAC_STR_LEN];
+ unsigned int mac_addr_bin_len;
+ unsigned char br_mac_addr_bin[ETH_ALEN];
+ int ret;
+ int i, j, k;
+ char *s_line[ONLINED_HEADER_LENGTH];
+ char authorisation;
+ unsigned int authorisation_len;
+ char upstream_attenuation;
+ unsigned int upstream_attenuation_len;
+ onlined_nw_stats_t *nw_stats;
+ char default_model_number[64];
+ char default_authorisation[64];
+ char default_software_version[64];
+ char default_downstream_attenuation[64];
+ char default_upstream_attenuation[64];
+ char default_eth_port_nb[64];
+ char default_downstream_quality[64];
+ char default_upstream_quality[64];
+ char default_tx_phy_data_rate[64];
+ char default_rx_phy_data_rate[64];
+ char unauthorized_model_number[64];
+ char unauthorized_authorisation[64];
+ char unauthorized_software_version[64];
+ char unauthorized_downstream_attenuation[64];
+ char unauthorized_upstream_attenuation[64];
+ char unauthorized_eth_port_nb[64];
+ char unauthorized_downstream_quality[64];
+ char unauthorized_upstream_quality[64];
+ char unauthorized_tx_phy_data_rate[64];
+ char unauthorized_rx_phy_data_rate[64];
+ char *header[ONLINED_HEADER_LENGTH] = {
+ "MODEL_NB", "PORT_AMOUNT", "AUTHORISATION", "SW_VERSION",
+ "DOWNSTR_ATTENUATION", "UPSTR_ATTENUATION", "DOWNSTR_QUALITY",
+ "UPSTR_QUALITY", "DOWNSTR_DATARATE", "UPSTR_DATARATE"
+ };
+ char *header_key = "#MAC_ADDR";
+ libspid_eoc_wl_entry_t wl_entries[LIBSPID_WHITE_LIST_MAX_STA_NUM];
+ int count_slave_in_wl;
+ int mod_eoc_value;
+ char maclimit_value[LIBSPID_CONFIG_KEY_MAX_LEN];
+
+ if (NULL == ctx)
+ return ONLINED_ERROR_PARAM;
+
+ /* init memory */
+ memset (snd_buffer, 0, ETH_DATA_LEN);
+ memset (rcv_buffer, 0, ETH_DATA_LEN);
+ memset (mac_addr_bin, 0, ETH_ALEN);
+ memset (mac_addr_str, 0, LIBSPID_MAC_STR_LEN);
+ memset (br_mac_addr_bin, 0, ETH_ALEN);
+ memcpy (default_model_number, "SPiDCOMUnknownModem", 64);
+ memcpy (default_authorisation, "0", 64);
+ memcpy (default_software_version, "unknown", 64);
+ memcpy (default_downstream_attenuation, "00", 64);
+ memcpy (default_upstream_attenuation, "00", 64);
+ memcpy (default_eth_port_nb, "0", 64);
+ memcpy (default_downstream_quality, "00", 64);
+ memcpy (default_upstream_quality, "00", 64);
+ memcpy (default_tx_phy_data_rate, "00", 64);
+ memcpy (default_rx_phy_data_rate, "00", 64);
+ memcpy (unauthorized_model_number, "SPiDCOMUnauthorizedModem", 64);
+ memcpy (unauthorized_authorisation, "0", 64);
+ memcpy (unauthorized_software_version, "unauthorized", 64);
+ memcpy (unauthorized_downstream_attenuation, "00", 64);
+ memcpy (unauthorized_upstream_attenuation, "00", 64);
+ memcpy (unauthorized_eth_port_nb, "0", 64);
+ memcpy (unauthorized_downstream_quality, "00", 64);
+ memcpy (unauthorized_upstream_quality, "00", 64);
+ memcpy (unauthorized_tx_phy_data_rate, "00", 64);
+ memcpy (unauthorized_rx_phy_data_rate, "00", 64);
+ number_of_mac_addr = 0;
+ number_of_mac_addr_len = 0;
+ mac_addr_bin_len = 0;
+ result = 1;
+ result_len = 0;
+ upstream_attenuation = 0;
+ upstream_attenuation_len = 0;
+ authorisation = 0;
+ authorisation_len = 0;
+ ret = ONLINED_SUCCESS;
+ i = j = k = 0;
+
+ if (LIBSPID_SUCCESS !=
+ libspid_system_nscrtv_eponeoc_mod_eoc (&mod_eoc_value))
+ {
+ onlined_log (LOG_WARNING,
+ "libspid_system_nscrtv_eponeoc_mode_eoc failed");
+ return ONLINED_ERROR_AUTOCONF;
+ }
+
+ /* write header to online.info_tmp file */
+ ret = libspid_config_write_line (ONLINE_INFO_TMP_PATH, delimiter,
+ header_key, ONLINED_HEADER_LENGTH,
+ header);
+ if (LIBSPID_SUCCESS != ret)
+ onlined_log (LOG_WARNING,
+ "Can not write header to online.info file");
+
+ /* init request mme */
+ ret = mme_init (&mme_request_ctx, VS_EOC_GET_TOPO | MME_REQ,
+ snd_buffer, (unsigned int) ETH_DATA_LEN);
+ if (ret != MME_SUCCESS)
+ {
+ return ret;
+ }
+
+ /* init confirm mme */
+ ret = mme_init (&mme_confirm_ctx, VS_EOC_GET_TOPO | MME_CNF,
+ rcv_buffer, (unsigned int) ETH_DATA_LEN);
+ if (ret != MME_SUCCESS)
+ {
+ return ret;
+ }
+
+ /* get the bridge MAC address */
+ memcpy (br_mac_addr_bin, ctx->br_mac_addr, ETH_ALEN);
+
+ /* send reqest mme and receive confirm mme */
+ ret = mme_send (&mme_request_ctx, MME_SEND_REQ_CNF, NULL,
+ br_mac_addr_bin, &mme_confirm_ctx);
+ if (MME_SUCCESS != ret)
+ {
+ return ret;
+ }
+
+ /* test for wrong MME content */
+ ret = onlined_test_mme_content (&mme_confirm_ctx,
+ VS_EOC_GET_TOPO | MME_CNF);
+ if (ONLINED_SUCCESS != ret)
+ {
+ return ret;
+ }
+
+ /* examinate mme send/receive result */
+ ret = mme_pull (&mme_confirm_ctx, (void *)&result, 1, &result_len);
+ if (MME_SUCCESS != ret)
+ {
+ return ret;
+ }
+
+ if (result != 0)
+ {
+ return ONLINED_ERROR_MME_WRONG_RESULT;
+ }
+
+ /* get the number of received MAC addresses */
+ ret = mme_pull (&mme_confirm_ctx, (void *)&number_of_mac_addr, 1,
+ &number_of_mac_addr_len);
+ if (MME_SUCCESS != ret)
+ {
+ return ret;
+ }
+
+ /* allocate and init memory for s_line */
+ for (i = 0; i < ONLINED_HEADER_LENGTH; i++)
+ {
+ s_line[i] = (char *) malloc (64*sizeof (char));
+ memset (s_line[i], 0, 64);
+ }
+
+ /* allocate and init array of structures containing network stats */
+ nw_stats = (onlined_nw_stats_t *)
+ malloc (number_of_mac_addr * sizeof (onlined_nw_stats_t));
+ for (i = 0; i < number_of_mac_addr; i++)
+ {
+ memset ((nw_stats + i)->mac_addr_bin, 0, ETH_ALEN);
+ (nw_stats + i)->tx_phy_data_rate = 0;
+ (nw_stats + i)->rx_phy_data_rate = 0;
+ }
+
+ /* call CM_NW_STATS MME */
+ ret = onlined_get_nw_stats (ctx, br_mac_addr_bin, nw_stats);
+ if (MME_SUCCESS != ret)
+ onlined_log (LOG_WARNING, "CM_NW_STATS returned error."
+ "Default values "
+ "will be used for online.info file.");
+
+ for (i = 0; i < number_of_mac_addr; i++)
+ {
+ /* get MAC address from MME */
+ ret = mme_pull (&mme_confirm_ctx, (void *) mac_addr_bin,
+ ETH_ALEN, &mac_addr_bin_len);
+ if (MME_SUCCESS != ret)
+ {
+ break;
+ }
+
+ /* ... and covert it to string */
+ ret = libspid_mac_bin_to_str (mac_addr_bin, mac_addr_str);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ ret = ONLINED_ERROR_LIBSPID_BIN_STR_CONVERSION;
+ break;
+ }
+
+ /* put Tx/Rx PHY avarage data rate into s_line */
+ for (k = 0; k < number_of_mac_addr; k++)
+ {
+ if (memcmp (mac_addr_bin, nw_stats[k].mac_addr_bin, ETH_ALEN) == 0)
+ {
+ int tmp;
+
+ /* stream quality in percentage */
+ tmp = (100 * nw_stats[k].tx_phy_data_rate)
+ / ONLINED_DEFAULT_STREAM_QUALITY;
+ sprintf (s_line[6], "%d", tmp);
+
+ tmp = (100 * nw_stats[k].rx_phy_data_rate)
+ / ONLINED_DEFAULT_STREAM_QUALITY;
+ sprintf (s_line[7], "%d", tmp);
+
+ /* data rate */
+ tmp = (ONLINED_MAX_THROUGHPUT_MBPS
+ * nw_stats[k].tx_phy_data_rate)
+ / ONLINED_DEFAULT_STREAM_QUALITY;
+ sprintf (s_line[8], "%d", tmp);
+
+ tmp = (ONLINED_MAX_THROUGHPUT_MBPS
+ * nw_stats[k].rx_phy_data_rate)
+ / ONLINED_DEFAULT_STREAM_QUALITY;
+ sprintf (s_line[9], "%d", tmp);
+ }
+ }
+
+ /* get STA authorisation from MME */
+ ret = mme_pull (&mme_confirm_ctx,
+ (void *)&authorisation, 1, &authorisation_len);
+ if (MME_SUCCESS != ret)
+ {
+ break;
+ }
+
+ switch (authorisation)
+ {
+ case ONLINED_SLAVE_STATUS_UNASSOCIATED:
+ case ONLINED_SLAVE_STATUS_ASSOCIATED:
+
+ memcpy (s_line[0], unauthorized_model_number,
+ sizeof (unauthorized_model_number));
+ memcpy (s_line[1], unauthorized_eth_port_nb,
+ sizeof (unauthorized_eth_port_nb));
+ memcpy (s_line[2], unauthorized_authorisation,
+ sizeof (unauthorized_authorisation));
+ memcpy (s_line[3], unauthorized_software_version,
+ sizeof (unauthorized_software_version));
+ memcpy (s_line[4], unauthorized_downstream_attenuation,
+ sizeof (unauthorized_downstream_attenuation));
+ memcpy (s_line[5], unauthorized_upstream_attenuation,
+ sizeof (unauthorized_upstream_attenuation));
+ memcpy (s_line[6], unauthorized_downstream_quality,
+ sizeof (unauthorized_downstream_quality));
+ memcpy (s_line[7], unauthorized_upstream_quality,
+ sizeof (unauthorized_upstream_quality));
+ memcpy (s_line[8], unauthorized_tx_phy_data_rate,
+ sizeof (unauthorized_tx_phy_data_rate));
+ memcpy (s_line[9], unauthorized_rx_phy_data_rate,
+ sizeof (unauthorized_rx_phy_data_rate));
+
+ sprintf (s_line[2], "%d", ONLINED_SLAVE_INFO_UNAUTHORIZED);
+ break;
+
+ case ONLINED_SLAVE_STATUS_AUTHENTICATING:
+ case ONLINED_SLAVE_STATUS_AUTHENTICATING_RST:
+ sprintf (s_line[2], "%d", ONLINED_SLAVE_INFO_AUTHORIZED);
+ break;
+
+ default:
+ break;
+ }
+
+ /* get attenuation from MME */
+ ret = mme_pull (&mme_confirm_ctx, (void *)&upstream_attenuation, 1,
+ &upstream_attenuation_len);
+ if (MME_SUCCESS != ret)
+ {
+ break;
+ }
+
+ sprintf (s_line[5], "%d", upstream_attenuation);
+
+ /* call VS_EOC_GET_DEVICE_INFO MME only on authorised slaves */
+ if (authorisation != ONLINED_SLAVE_STATUS_ASSOCIATED
+ && authorisation != ONLINED_SLAVE_STATUS_UNASSOCIATED)
+ {
+ ret = onlined_get_device_info (ctx, mac_addr_bin, s_line);
+ }
+
+ /* put default values in online.info if GET_DEVICE_INFO fails */
+ if (MME_SUCCESS != ret)
+ {
+ memcpy (s_line[0], default_model_number,
+ sizeof (default_model_number));
+ memcpy (s_line[1], default_eth_port_nb,
+ sizeof (default_eth_port_nb));
+ memcpy (s_line[3], default_software_version,
+ sizeof (default_software_version));
+ memcpy (s_line[4], default_downstream_attenuation,
+ sizeof (default_downstream_attenuation));
+ memcpy (s_line[5], default_upstream_attenuation,
+ sizeof (default_upstream_attenuation));
+ memcpy (s_line[6], default_downstream_quality,
+ sizeof (default_downstream_quality));
+ memcpy (s_line[7], default_upstream_quality,
+ sizeof (default_upstream_quality));
+ memcpy (s_line[8], default_tx_phy_data_rate,
+ sizeof (default_tx_phy_data_rate));
+ memcpy (s_line[9], default_rx_phy_data_rate,
+ sizeof (default_rx_phy_data_rate));
+ onlined_log (LOG_WARNING, "VS_EOC_GET_DEVICE_INFO on slave %s "
+ "have returned an error", mac_addr_str);
+ }
+
+ /* write line to file */
+ ret = libspid_config_write_line (ONLINE_INFO_TMP_PATH, delimiter,
+ mac_addr_str, ONLINED_HEADER_LENGTH,
+ s_line);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ break;
+ }
+
+ /* store discovered topology */
+ mac_node_t *node_ptr = (mac_node_t*) malloc (sizeof (mac_node_t));
+ node_ptr->next = ctx->curr_mac_list;
+ strcpy (node_ptr->mac, mac_addr_str);
+ node_ptr->authorisation = authorisation;
+ node_ptr->autoconf_failed = LIBSPID_FALSE;
+
+ if (LIBSPID_TRUE == mod_eoc_value)
+ {
+ memset (maclimit_value, 0x0, LIBSPID_CONFIG_KEY_MAX_LEN);
+ if (LIBSPID_SUCCESS ==
+ libspid_config_read_item (LIBSPID_MAC_LIMITATION_CONF_PATH,
+ mac_addr_str, maclimit_value, LIBSPID_CONFIG_KEY_MAX_LEN))
+ {
+ node_ptr->mac_limitations = atoi (maclimit_value);
+ }
+ else
+ {
+ node_ptr->mac_limitations = LIBSPID_MAC_LIMIT_DEFAULT_NUM;
+ }
+ }
+ else
+ {
+ node_ptr->mac_limitations = LIBSPID_MAC_LIMIT_DEFAULT_NUM;
+ }
+
+ ctx->curr_mac_list = node_ptr;
+
+ /* clear s_line buffers */
+ for (j = 0; j < ONLINED_HEADER_LENGTH; j++)
+ {
+ memset (s_line[j], 0, 64);
+ }
+ }
+
+ /* copy online_info_tmp file into online.info file */
+ if (ONLINED_SUCCESS == rename (ONLINE_INFO_TMP_PATH,
+ LIBSPID_ONLINE_INFO_PATH))
+ chmod (LIBSPID_ONLINE_INFO_PATH, S_IREAD);
+ else
+ ret = ONLINED_ERROR_FOPS;
+
+ ret = onlined_check_slave_config (ctx);
+ if (ret != ONLINED_SUCCESS)
+ return ret;
+
+ /* Perform slave upgrade and configuration if required */
+ mac_node_t *curr_node = ctx->curr_mac_list;
+ while (curr_node != NULL)
+ {
+ mac_node_t *prev_node = ctx->prev_mac_list;
+ libspid_boolean_t autoconf_failed = LIBSPID_FALSE;
+
+ ctx->new_slave = LIBSPID_FALSE;
+
+ while (prev_node != NULL)
+ {
+ if (prev_node->autoconf_failed == LIBSPID_TRUE)
+ autoconf_failed = LIBSPID_TRUE;
+ if (strcmp (curr_node->mac, prev_node->mac) == 0)
+ {
+ if (autoconf_failed == LIBSPID_TRUE)
+ ctx->new_slave = LIBSPID_TRUE;
+ if (LIBSPID_TRUE == mod_eoc_value)
+ {
+ if (curr_node->mac_limitations
+ != prev_node->mac_limitations)
+ ctx->new_slave = LIBSPID_TRUE;
+ }
+ break;
+ }
+ prev_node = prev_node->next;
+ }
+
+ if (curr_node->authorisation
+ == ONLINED_SLAVE_STATUS_AUTHENTICATING_RST)
+ ctx->new_slave = LIBSPID_TRUE;
+
+ if (ctx->new_slave == LIBSPID_TRUE
+ || ctx->send_autoconfiguration == LIBSPID_TRUE)
+ {
+ int ret;
+ if (autoconf_failed == LIBSPID_FALSE
+ && ctx->new_slave == LIBSPID_TRUE)
+ onlined_log (LOG_WARNING, "Slave %s appeared on the network",
+ curr_node->mac);
+
+ ret = onlined_configure (ctx, curr_node->mac);
+ switch (ret)
+ {
+ case ONLINED_SUCCESS:
+ onlined_log (LOG_WARNING, "Autoconfiguration of "
+ "slave %s is successful", curr_node->mac);
+ if (libspid_eoc_reboot (curr_node->mac) !=
+ LIBSPID_SUCCESS)
+ onlined_log (LOG_WARNING, "Reboot slave %s failed",
+ curr_node->mac);
+ break;
+
+ case ONLINED_AUTOCONF_NOT_ALLOWED:
+ break;
+
+ case ONLINED_AUTOCONF_EXIST:
+ break;
+
+ default:
+ curr_node->autoconf_failed = LIBSPID_TRUE;
+ onlined_log (LOG_WARNING,
+ "Autoconfiguration of slave %s "
+ "failed", curr_node->mac);
+ break;
+ }
+
+ }
+
+ ctx->slave_offline = LIBSPID_FALSE;
+ /* call for all online slaves */
+ if (onlined_upgrade (ctx, curr_node->mac) != ONLINED_SUCCESS)
+ onlined_log (LOG_WARNING, "Slave %s update failed",
+ curr_node->mac);
+
+ curr_node = curr_node->next;
+ }
+
+ if (ctx->send_autoconfiguration == LIBSPID_TRUE)
+ ctx->send_autoconfiguration = LIBSPID_FALSE;
+
+ if (ctx->tftp_update_running == LIBSPID_TRUE)
+ {
+ char cmd[256];
+ int ret = 0, i, tftp_count_cnf, status;
+ 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];
+ const char delimiters[2] = LIBSPID_UPDATE_INFO_DELIMITER "\0";
+ char slave_image[LIBSPID_CONFIG_LINE_MAX_LEN];
+ int last_action = 0;
+ tftp_count_cnf = ctx->tftp_list_number;
+
+ for (i = 0; i < tftp_count_cnf; i++)
+ {
+ struct timeval tftp_time_now;
+ struct timeval tftp_time_diff;
+
+ gettimeofday (&tftp_time_now, 0);
+ timersub (&tftp_time_now, &ctx->tftp_mac_list[i].tftp_start_time,
+ &tftp_time_diff);
+
+ strcpy (key, ctx->tftp_mac_list[i].mac);
+ ret = libspid_config_read_line (LIBSPID_UPDATE_INFO_PATH,
+ delimiters, key,
+ &elt_number, elt, buffer,
+ LIBSPID_CONFIG_LINE_MAX_LEN);
+
+ strcpy (slave_image, elt[0]);
+ status = atoi (elt[2]);
+ if (status != LIBSPID_UPDATE_RUNNING)
+ {
+ ctx->tftp_list_number -= 1;
+ continue;
+ }
+
+ last_action = atoi (elt[3]);
+
+ if (tftp_time_diff.tv_sec > ONLINED_TFTP_UPDATE_CHECK_SEC)
+ {
+ ret = onlined_write_update_info_file (
+ ctx, ctx->tftp_mac_list[i].mac, slave_image,
+ LIBSPID_UPDATE_ACTION_NONE,
+ LIBSPID_UPDATE_FAILED, last_action);
+
+ if (ret != LIBSPID_SUCCESS)
+ return ONLINED_ERROR_UPGRADE;
+ onlined_log (LOG_WARNING, "tftp_update timeout for slave "
+ "%s.Modem update failed",
+ ctx->tftp_mac_list[i].mac);
+ ctx->tftp_list_number -= 1;
+ }
+
+ }
+
+ if (ctx->tftp_list_number == 0)
+ {
+#ifndef __FTESTS_PC__
+ sprintf (cmd, "killall udpsvd");
+ ret = system (cmd);
+ if (ret != 0)
+ onlined_log (LOG_WARNING, "Failed to stop TFTP server.");
+ else
+ ctx->tftp_update_running = LIBSPID_FALSE;
+#else
+ ctx->tftp_update_running = LIBSPID_FALSE;
+#endif
+ }
+ }
+
+ /* check white_list for offline slaves */
+ if (libspid_eoc_wl_get_list (wl_entries, &count_slave_in_wl)
+ == LIBSPID_SUCCESS)
+ {
+ int i;
+ for (i=0; i < count_slave_in_wl; i++)
+ {
+ int is_online=0;
+
+ mac_node_t *curr_node = ctx->curr_mac_list;
+
+ while (curr_node != NULL)
+ {
+ if (strcmp (curr_node->mac, wl_entries[i].mac_addr) == 0)
+ {
+ is_online = 1;
+ break;
+ }
+ curr_node = curr_node->next;
+ }
+ if (0 == is_online)
+ {
+ ctx->new_slave = LIBSPID_FALSE;
+ ctx->slave_offline = LIBSPID_TRUE;
+ /*call for offline slaves*/
+ if (onlined_upgrade (ctx, wl_entries[i].mac_addr)
+ != ONLINED_SUCCESS)
+ onlined_log (LOG_WARNING, "Slave %s update failed",
+ wl_entries[i].mac_addr);
+ }
+ }
+ }
+ else
+ onlined_log (LOG_WARNING, "Error reading white_list. Update failed");
+
+ /* Prepare next iteration */
+ while (ctx->prev_mac_list != NULL)
+ {
+ mac_node_t *tmp_node = ctx->prev_mac_list;
+ ctx->prev_mac_list = ctx->prev_mac_list->next;
+ free (tmp_node);
+ }
+ ctx->prev_mac_list = ctx->curr_mac_list;
+ ctx->curr_mac_list = NULL;
+
+ /* free s_line buffers */
+ for (i = 0; i < ONLINED_HEADER_LENGTH; i++)
+ {
+ free (s_line[i]);
+ }
+
+ /* free nw_stats array */
+ free (nw_stats);
+
+ return ret;
+}
+
+/**
+ * Check slave.conf file and set flag to start autoconfiguration
+ * \param ctx onlined daemon context
+ * \return ONLINED_SUCCESS upon success, or error code if failed
+ */
+onlined_error_t
+onlined_check_slave_config (onlined_ctx_t * ctx)
+{
+ char buffer[LIBSPID_CONFIG_LINE_MAX_LEN];
+ int curr_mac_limitation = 0;
+ int curr_output_level_all = 0;
+ int mod_eoc_value;
+
+ if (NULL == ctx)
+ return ONLINED_ERROR_PARAM;
+
+ if (LIBSPID_SUCCESS != libspid_system_nscrtv_eponeoc_mod_eoc (
+ &mod_eoc_value))
+ {
+ onlined_log (LOG_WARNING, "libspid_system_nscrtv_eponeoc_mod_eoc "
+ "failed, check slave config failed.\n");
+ return ONLINED_ERROR_FOPS;
+ }
+
+ if (LIBSPID_TRUE != mod_eoc_value)
+ {
+ /* read MAC limitation from slave.conf file */
+ if (LIBSPID_SUCCESS !=
+ libspid_config_read_item (LIBSPID_SLAVE_CONF_PATH,
+ LIBSPID_SLAVE_CONF_LABEL_MAC_LIMITATION,
+ buffer, LIBSPID_CONFIG_LINE_MAX_LEN))
+ {
+ onlined_log (LOG_WARNING, "Cannot read current value "
+ "of MAC limitation");
+ return ONLINED_ERROR_MAC_LIMITATION;
+ }
+
+ if (1 != sscanf (buffer, "%d", &curr_mac_limitation))
+ {
+ onlined_log (LOG_WARNING, "Error parsing current value "
+ "of MAC limitation");
+ return ONLINED_ERROR_MAC_LIMITATION;
+ }
+ /* check if there was a change in MAC limitation value */
+ if (curr_mac_limitation != ctx->mac_limitation)
+ {
+ if (curr_mac_limitation <= LIBSPID_EOC_WL_EXT_MAC_LIMIT_MAX
+ && curr_mac_limitation >=
+ LIBSPID_EOC_WL_EXT_MAC_LIMIT_MIN)
+ {
+ /* store new value to onlined context */
+ ctx->mac_limitation = curr_mac_limitation;
+
+ /* propagate new MAC limitation value
+ * to all online slaves */
+ ctx->send_autoconfiguration = LIBSPID_TRUE;
+ }
+ else
+ {
+ onlined_log (LOG_WARNING, "Wrong MAC limitation value "
+ "(expected: %d..%d)",
+ LIBSPID_EOC_WL_EXT_MAC_LIMIT_MIN,
+ LIBSPID_EOC_WL_EXT_MAC_LIMIT_MAX);
+ ctx->send_autoconfiguration = LIBSPID_FALSE;
+ return ONLINED_ERROR_MAC_LIMITATION;
+ }
+ }
+ }
+
+ /* read output_level_all from slave.conf file */
+ if (LIBSPID_SUCCESS !=
+ libspid_config_read_item (LIBSPID_SLAVE_CONF_PATH,
+ LIBSPID_SLAVE_CONF_LABEL_OUTPUT_LEVEL,
+ buffer, LIBSPID_CONFIG_LINE_MAX_LEN))
+ {
+ onlined_log (LOG_WARNING, "Cannot read current value "
+ "of output_level_all");
+ return ONLINED_ERROR_OUTPUT_LEVEL_ALL;
+ }
+
+ if (1 != sscanf (buffer, "%d", &curr_output_level_all))
+ {
+ onlined_log (LOG_WARNING, "Error parsing current value "
+ "of output_level_all");
+ return ONLINED_ERROR_OUTPUT_LEVEL_ALL;
+ }
+
+ /* check if there was a change in output_level_all value */
+ if (curr_output_level_all != ctx->output_level_all)
+ {
+ if (curr_output_level_all <= LIBSPID_EOC_WL_RF_OUTPUT_LEVEL_MAX
+ && curr_output_level_all >= LIBSPID_EOC_WL_RF_OUTPUT_LEVEL_MIN)
+ {
+ /* store new value to onlined context */
+ ctx->output_level_all = curr_output_level_all;
+
+ /* propagate new MAC limitation value to all online slaves */
+ ctx->send_autoconfiguration = LIBSPID_TRUE;
+ }
+ else
+ {
+ onlined_log (LOG_WARNING, "Wrong output_level_all value "
+ "(expected: %d..%d)",
+ LIBSPID_EOC_WL_RF_OUTPUT_LEVEL_MIN,
+ LIBSPID_EOC_WL_RF_OUTPUT_LEVEL_MAX);
+ ctx->send_autoconfiguration = LIBSPID_FALSE;
+ return ONLINED_ERROR_OUTPUT_LEVEL_ALL;
+ }
+ }
+ return ONLINED_SUCCESS;
+}
diff --git a/cleopatre/application/spidgoahead/.gitignore b/cleopatre/application/spidgoahead/.gitignore
new file mode 100644
index 0000000000..487f4b5400
--- /dev/null
+++ b/cleopatre/application/spidgoahead/.gitignore
@@ -0,0 +1,4 @@
+obj
+/.compiled
+/web.tar
+/httpd
diff --git a/cleopatre/application/spidgoahead/LINUX/main.c b/cleopatre/application/spidgoahead/LINUX/main.c
new file mode 100644
index 0000000000..07a9bdb3d8
--- /dev/null
+++ b/cleopatre/application/spidgoahead/LINUX/main.c
@@ -0,0 +1,473 @@
+/*
+ * main.c -- Main program for the GoAhead WebServer (LINUX version)
+ *
+ * Copyright (c) GoAhead Software Inc., 1995-2000. All Rights Reserved.
+ *
+ * See the file "license.txt" for usage and redistribution license requirements
+ *
+ * $Id: main.c,v 1.5 2003/09/11 14:03:46 bporter Exp $
+ */
+
+/******************************** Description *********************************/
+
+/*
+ * Main program for for the GoAhead WebServer. This is a demonstration
+ * main program to initialize and configure the web server.
+ */
+
+/********************************* Includes ***********************************/
+
+#include "../uemf.h"
+#include "../wsIntrn.h"
+#include <signal.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+
+#ifdef WEBS_SSL_SUPPORT
+#include "../websSSL.h"
+#endif
+
+#ifdef USER_MANAGEMENT_SUPPORT
+#include "../um.h"
+void formDefineUserMgmt (void);
+#endif
+
+#include "libspid.h"
+
+/*********************************** Locals ***********************************/
+/*
+ * Change configuration here
+ */
+
+static char_t *rootWeb = T("/usr/share/httpd/web"); /* Root web directory */
+static char_t *password = T(""); /* Security password */
+static int port = 80; /* Server port */
+static int retries = 5; /* Server port retries */
+static int finished; /* Finished flag */
+static libspid_ip_t ip;
+
+/****************************** Forward Declarations **************************/
+
+static int initWebs ();
+static int aspTest (int eid, webs_t wp, int argc, char_t **argv);
+static void formTest (webs_t wp, char_t *path, char_t *query);
+static int websHomePageHandler (webs_t wp, char_t *urlPrefix, char_t *webDir,
+ int arg, char_t *url, char_t *path, char_t *query);
+extern void defaultErrorHandler (int etype, char_t *msg);
+extern void defaultTraceHandler (int level, char_t *buf);
+#ifdef B_STATS
+static void printMemStats (int handle, char_t *fmt, ...);
+static void memLeaks ();
+#endif
+
+/*********************************** Code *************************************/
+/*
+ * Main -- entry point from LINUX
+ */
+
+int
+main (int argc, char** argv)
+{
+ int ret = 0;
+ char enable[LIBSPID_CONFIG_LINE_MAX_LEN] = {0};
+ char sys_reset_cause[SPC300_RESET_CAUSE_STR_MAX_LEN];
+
+ 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 == strcmp (sys_reset_cause,
+ LIBSPID_WEB_RESET_INFO_RESET_BY_WEB_YES))
+ {
+ ret = libspid_config_write_item (
+ LIBSPID_WEB_RESET_INFO_PATH,
+ LIBSPID_WEB_RESET_INFO_LABEL_RESET_BY_WEB,
+ LIBSPID_WEB_RESET_INFO_RESET_BY_WEB_NO);
+ if (LIBSPID_SUCCESS == ret)
+ {
+ libspid_system_save_file (LIBSPID_WEB_RESET_INFO_PATH);
+ }
+
+ libspid_config_write_item (
+ LIBSPID_WEB_RESET_INFO_PATH,
+ LIBSPID_WEB_RESET_INFO_LABEL_RESET_BY_WEB,
+ LIBSPID_WEB_RESET_INFO_RESET_BY_WEB_YES);
+ }
+
+ ret = libspid_config_read_item (LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_HTTP_SERVICE,
+ enable, LIBSPID_CONFIG_LINE_MAX_LEN);
+
+ /*
+ * http service is disabled for HTTP_SERVICE = no
+ * in /etc/system.conf
+ * in other case it is enabled
+ */
+ if (ret == LIBSPID_SUCCESS && strcmp (enable, LIBSPID_SYSTEM_CONF_VALUE_NO) == 0)
+ return 0;
+ /*
+ * Initialize the memory allocator. Allow use of malloc and start
+ * with a 60K heap. For each page request approx 8KB is allocated.
+ * 60KB allows for several concurrent page requests. If more space
+ * is required, malloc will be used for the overflow.
+ */
+ bopen (NULL, (60 * 1024), B_USE_MALLOC);
+ signal (SIGPIPE, SIG_IGN);
+
+ /*
+ * Initialize the web server
+ */
+ if (initWebs () < 0) {
+ return -1;
+ }
+
+#ifdef WEBS_SSL_SUPPORT
+ websSSLOpen ();
+#endif
+
+ /*
+ * Basic event loop. SocketReady returns true when a socket is ready for
+ * service. SocketSelect will block until an event occurs. SocketProcess
+ * will actually do the servicing.
+ */
+ while (!finished) {
+ if (socketReady (-1) || socketSelect (-1, 1000)) {
+ socketProcess (-1);
+ }
+ websCgiCleanup ();
+ emfSchedProcess ();
+ }
+
+#ifdef WEBS_SSL_SUPPORT
+ websSSLClose ();
+#endif
+
+#ifdef USER_MANAGEMENT_SUPPORT
+ umClose ();
+#endif
+
+ /*
+ * Close the socket module, report memory leaks and close the memory allocator
+ */
+ websCloseServer ();
+ socketClose ();
+#ifdef B_STATS
+ memLeaks ();
+#endif
+ bclose ();
+ return 0;
+}
+
+/******************************************************************************/
+/*
+ * Initialize the web server.
+ */
+
+static int initWebs ()
+{
+ struct hostent *hp;
+ struct in_addr intaddr;
+ char host[128], dir[128], webdir[128];
+ char *cp;
+ char_t wbuf[128];
+
+ /*
+ * Initialize the socket subsystem
+ */
+ socketOpen ();
+
+#ifdef USER_MANAGEMENT_SUPPORT
+ /*
+ * Initialize the User Management database
+ */
+ umOpen ();
+ umRestore (UM_TXT_FILENAME);
+#endif
+
+ /*
+ * Define the local Ip address, host name, default home page and the
+ * root web directory.
+ */
+ if (gethostname (host, sizeof(host)) < 0) {
+ error (E_L, E_LOG, T("Can't get hostname"));
+ return -1;
+ }
+ // Spidcom modification
+ if (libspid_network_get_ip ("br0", &ip) != LIBSPID_SUCCESS)
+ strcpy (host, "127.0.0.1");
+ else
+ strcpy (host, ip.address);
+ // End
+ if ((hp = gethostbyname (host)) == NULL) {
+ error (E_L, E_LOG, T("Can't get host address"));
+ return -1;
+ }
+ memcpy ((char *) &intaddr, (char *) hp->h_addr_list[0],
+ (size_t) hp->h_length);
+
+
+
+ /*
+ * Set ../web as the root web. Modify this to suit your needs
+ */
+ sprintf (webdir, "%s", rootWeb);
+
+ /*
+ * Configure the web server options before opening the web server
+ */
+ websSetDefaultDir (webdir);
+ cp = inet_ntoa (intaddr);
+ ascToUni (wbuf, cp, min(strlen (cp) + 1, sizeof (wbuf)));
+ websSetIpaddr (wbuf);
+ ascToUni (wbuf, host, min(strlen (host) + 1, sizeof (wbuf)));
+ websSetHost (wbuf);
+
+ /*
+ * Configure the web server options before opening the web server
+ */
+ websSetDefaultPage (T("index.asp"));
+ websSetPassword (password);
+
+ /*
+ * Open the web server on the given port. If that port is taken, try
+ * the next sequential port for up to "retries" attempts.
+ */
+ websOpenServer (port, retries);
+
+ /*
+ * First create the URL handlers. Note: handlers are called in sorted order
+ * with the longest path handler examined first. Here we define the security
+ * handler, forms handler and the default web page handler.
+ */
+ websUrlHandlerDefine (T(""), NULL, 0, websSecurityHandler,
+ WEBS_HANDLER_FIRST);
+ websUrlHandlerDefine (T("/goform"), NULL, 0, websFormHandler, 0);
+ websUrlHandlerDefine (T("/cgi-bin"), NULL, 0, websCgiHandler, 0);
+ websUrlHandlerDefine (T(""), NULL, 0, websDefaultHandler,
+ WEBS_HANDLER_LAST);
+
+ /*
+ * Now define two test procedures. Replace these with your application
+ * relevant ASP script procedures and form functions.
+ */
+ websAspDefine (T("aspTest"), aspTest);
+ websFormDefine (T("formTest"), formTest);
+ spidcom_register_all ();
+
+ /*
+ * Create the Form handlers for the User Management pages
+ */
+#ifdef USER_MANAGEMENT_SUPPORT
+ formDefineUserMgmt ();
+#endif
+
+ /*
+ * Create a handler for the default home page
+ */
+ websUrlHandlerDefine (T("/"), NULL, 0, websHomePageHandler, 0);
+ return 0;
+}
+
+/******************************************************************************/
+/*
+ * Test Javascript binding for ASP. This will be invoked when "aspTest" is
+ * embedded in an ASP page. See web/asp.asp for usage. Set browser to
+ * "localhost/asp.asp" to test.
+ */
+
+static int aspTest (int eid, webs_t wp, int argc, char_t **argv)
+{
+ char_t *name, *address;
+
+ if (ejArgs (argc, argv, T("%s %s"), &name, &address) < 2) {
+ websError (wp, 400, T("Insufficient args\n"));
+ return -1;
+ }
+ return websWrite (wp, T("Name: %s, Address %s"), name, address);
+}
+
+/******************************************************************************/
+/*
+ * Test form for posted data (in-memory CGI). This will be called when the
+ * form in web/forms.asp is invoked. Set browser to "localhost/forms.asp" to test.
+ */
+
+static void formTest (webs_t wp, char_t *path, char_t *query)
+{
+ char_t *name, *address;
+
+ name = websGetVar (wp, T("name"), T("Joe Smith"));
+ address = websGetVar (wp, T("address"), T("1212 Milky Way Ave."));
+
+ websHeader (wp);
+ websWrite (wp, T("<body><h2>Name: %s, Address: %s</h2>\n"), name, address);
+ websFooter (wp);
+ websDone (wp, 200);
+}
+
+/******************************************************************************/
+/*
+ * Home page handler
+ */
+
+static int websHomePageHandler (webs_t wp, char_t *urlPrefix, char_t *webDir,
+ int arg, char_t *url, char_t *path, char_t *query)
+{
+ /*
+ * If the empty or "/" URL is invoked, redirect default URLs to the home page
+ */
+ if (*url == '\0' || gstrcmp (url, T("/")) == 0) {
+ websRedirect (wp, T("index.asp"));
+ return 1;
+ }
+ return 0;
+}
+
+/******************************************************************************/
+/*
+ * Default error handler. The developer should insert code to handle
+ * error messages in the desired manner.
+ */
+
+void defaultErrorHandler (int etype, char_t *msg)
+{
+#if 0
+ write(1, msg, gstrlen(msg));
+#endif
+}
+
+/******************************************************************************/
+/*
+ * Trace log. Customize this function to log trace output
+ */
+
+void defaultTraceHandler (int level, char_t *buf)
+{
+ /*
+ * The following code would write all trace regardless of level
+ * to stdout.
+ */
+#if 0
+ if (buf) {
+ write(1, buf, gstrlen(buf));
+ }
+#endif
+}
+
+/******************************************************************************/
+/*
+ * Returns a pointer to an allocated qualified unique temporary file name.
+ * This filename must eventually be deleted with bfree();
+ */
+
+char_t *websGetCgiCommName ()
+{
+ char_t *pname1, *pname2;
+
+ pname1 = tempnam (NULL, T("cgi"));
+ pname2 = bstrdup (B_L, pname1);
+ free (pname1);
+ return pname2;
+}
+
+/******************************************************************************/
+/*
+ * Launch the CGI process and return a handle to it.
+ */
+
+int websLaunchCgiProc (char_t *cgiPath, char_t **argp, char_t **envp,
+ char_t *stdIn, char_t *stdOut)
+{
+ int pid, fdin, fdout, hstdin, hstdout, rc;
+
+ fdin = fdout = hstdin = hstdout = rc = -1;
+ if ((fdin = open (stdIn, O_RDWR | O_CREAT, 0666)) < 0 ||
+ (fdout = open (stdOut, O_RDWR | O_CREAT, 0666)) < 0 ||
+ (hstdin = dup (0)) == -1 ||
+ (hstdout = dup (1)) == -1 ||
+ dup2 (fdin, 0) == -1 ||
+ dup2 (fdout, 1) == -1) {
+ goto DONE;
+ }
+
+ rc = pid = fork ();
+ if (pid == 0)
+ {
+ /*
+ * if pid == 0, then we are in the child process
+ */
+ if (execve (cgiPath, argp, envp) == -1) {
+ printf ("content-type: text/html\n\n"
+ "Execution of cgi process failed\n");
+ }
+ exit (0);
+ }
+
+DONE:
+ if (hstdout >= 0) {
+ dup2 (hstdout, 1);
+ close (hstdout);
+ }
+ if (hstdin >= 0) {
+ dup2 (hstdin, 0);
+ close (hstdin);
+ }
+ if (fdout >= 0) {
+ close (fdout);
+ }
+ if (fdin >= 0) {
+ close (fdin);
+ }
+ return rc;
+}
+
+/******************************************************************************/
+/*
+ * Check the CGI process. Return 0 if it does not exist; non 0 if it does.
+ */
+
+int websCheckCgiProc (int handle)
+{
+ /*
+ * Check to see if the CGI child process has terminated or not yet.
+ */
+ if (waitpid (handle, NULL, WNOHANG) == handle) {
+ return 0;
+ } else {
+ return 1;
+ }
+}
+
+/******************************************************************************/
+
+#ifdef B_STATS
+static void memLeaks ()
+{
+ int fd;
+
+ if ((fd = gopen (T("leak.txt"), O_CREAT | O_TRUNC | O_WRONLY, 0666)) >= 0) {
+ bstats (fd, printMemStats);
+ close (fd);
+ }
+}
+
+/******************************************************************************/
+/*
+ * Print memory usage / leaks
+ */
+
+static void printMemStats (int handle, char_t *fmt, ...)
+{
+ va_list args;
+ char_t buf[256];
+
+ va_start (args, fmt);
+ vsprintf (buf, fmt, args);
+ va_end (args);
+ write (handle, buf, strlen(buf));
+}
+#endif
+
+/******************************************************************************/
diff --git a/cleopatre/application/spidgoahead/LINUX/spidcom_asp_functions.c b/cleopatre/application/spidgoahead/LINUX/spidcom_asp_functions.c
new file mode 100644
index 0000000000..19736fd09e
--- /dev/null
+++ b/cleopatre/application/spidgoahead/LINUX/spidcom_asp_functions.c
@@ -0,0 +1,437 @@
+/*-----------------------------------------------------------------------------
+File: spidcom_functions.c
+ Description: Asp functions definition used intenally by GoAhead web server.
+ Project: HTTP server
+ Target: SPiDCOM modem w/ SPC300
+ Version: 0.1
+ Revision list: -
+ Company: SPiDCOM
+ Author: Uros Gardasevic
+ Date: September 2009.
+-----------------------------------------------------------------------------*/
+
+
+
+
+/**
+ *
+ * \brief Function naming:
+ * \brief If it is data-function, it is in format : spidcom_asp_desc_h, where h stands for head, because function will be called in head section of html page.
+ * \brief If it is action-function, it is in format : spidcom_asp_desc_b, where b stands for body, because function will be called in body section of html page.
+ * \brief It is important because of error reporting to the end user.
+ *
+ */
+
+
+/**
+ * For function called from head section, error will be reported during the load of body, and for function called from body section, error will be reported
+ * wright away on the place from where it is actualy called.
+ */
+
+
+
+
+#include "../uemf.h"
+#include "../wsIntrn.h"
+#ifdef WEBS_SSL_SUPPORT
+#include "../websSSL.h"
+#endif
+#ifdef USER_MANAGEMENT_SUPPORT
+#include "../um.h"
+void formDefineUserMgmt(void);
+#endif
+
+
+
+#include "libspid.h"
+
+typedef char mac_t[6];
+
+
+
+char* human_readable(int return_value)
+{
+ switch(return_value){
+ case LIBSPID_SUCCESS:
+ return "Success";
+ break;
+ case LIBSPID_ERROR_PARAM:
+ return "Bad input parameters";
+ break;
+ case LIBSPID_ERROR_NO_SPACE:
+ return "Not enough aviable space";
+ break;
+ case LIBSPID_ERROR_NOT_FOUND:
+ return "Item / data not found";
+ break;
+ case LIBSPID_ERROR_SYSTEM:
+ return "System error.";
+ default:
+ /*
+ * Not possible but ok...
+ */
+ return "Unknown error";
+ break;
+ }
+}
+
+
+
+/*
+ *
+ * MASTER-only functions
+ *
+ */
+
+
+/*
+ *
+ * MASTER AND SLAVE functions
+ *
+ */
+
+/**
+ * Write the IP setting of a network interface.
+
+ *
+ * \param interface string containing network interface name (“br0â€, “plc0†or “eth0â€)
+ * This argument is fetched by ejArgs() function.
+ * \return ip_data separated by ':' on success, or string containing error description on error.
+ */
+
+
+static int spidcom_asp_get_ip_data_h(int eid, webs_t wp, int argc, char_t **argv){
+
+ libspid_ip_t ip_data;
+ libspid_error_t return_value;
+ char *interface;
+
+ if ( ejArgs(argc, argv, T("%s"), &interface) < 1) {
+ websError(wp, 400, T("Insufficient args\n"));
+ return -1;
+ }
+
+ if ((return_value = libspid_network_get_ip(interface, &ip_data)) == LIBSPID_SUCCESS)
+ websWrite(wp, "\"%s:%s:%s:%s:%s\"", ip_data.mode?"DHCP":"STATIC", ip_data.address, ip_data.netmask, ip_data.broadcast, ip_data.gateway);
+ else
+ websWrite(wp, "\"error: Ip data : %s\"", human_readable(return_value));
+
+ return 0;
+}
+
+
+/**
+ * Write the MAC address of a network interface.
+
+ *
+ * \param interface string containing network interface name (“br0â€, “plc0†or “eth0â€)
+ * This argument is fetched by ejArgs() function.
+ * \return mac string on success, or string containing error description on error.
+ */
+
+
+static int spidcom_asp_get_mac_h(int eid, webs_t wp, int argc, char_t **argv)
+{
+
+ libspid_error_t return_value;
+ char *interface;
+ char mac[24];
+
+ if ( ejArgs(argc, argv, T("%s"), &interface) < 1) {
+ websError(wp, 400, T("Insufficient args\n"));
+ return -1;
+ }
+
+ if ((return_value = libspid_network_get_mac(interface, mac)) == LIBSPID_SUCCESS)
+ websWrite(wp, "\"%s\"", mac);
+ else
+ websWrite(wp, "\"error: MAC data : %s\"", human_readable(return_value));
+
+ return 0;
+}
+
+
+
+/**
+ * Write the local statistics values.
+
+ *
+ * \param mac_address string containing mac address of the device
+ * This argument is fetched by ejArgs() function.
+ * \return Eoc statistics values separated by ':' on success, or string containing error description on error.
+ */
+
+static int spidcom_asp_get_stat_h(int eid, webs_t wp, int argc, char_t **argv)
+{
+
+ FILE *fp;
+ char *interface;
+ char filename[16] = "/proc/net/dev";
+ char word[80];
+ char buffer[LIBSPID_LINE_MAX_LEN];
+ char *delimiter = NULL;
+ int index = 0, range = 0;
+ int stat[20];
+ int found_intefrace = 0, found_delimiter=0; //flag
+ int length = 0;
+
+
+
+ interface = websGetVar(wp,"interface", "0"); // Get intrerface name from QUERY_STRING
+ if ((fp = fopen(filename, "r")) == NULL) // open file for fething data
+ {
+ websWrite(wp, "\"error: Statistics. File not exist.\"");
+ return 0;
+ }
+
+ fgets(buffer, LIBSPID_LINE_MAX_LEN-1, fp ); //Eliminate first two lines
+ fgets(buffer, LIBSPID_LINE_MAX_LEN-1, fp );
+
+
+ while (!feof(fp))
+ {
+ if (found_intefrace && (index<16)) // interface found and not all data is readed yet
+ {
+ fscanf(fp, "%d", &stat[index++] ); // so please read it then...
+ if (index == 16) // dont circle anymore if there is no need...
+ break;
+ }
+ else
+ { // Search for paticular inteface
+ fscanf(fp, "%s", &word);
+ if ( (word[0] < '0') || (word[0] > '9')) // ignore integer values
+ {
+ if ( (delimiter = strchr(word, ':'))){ // extract the interface name
+ length = strlen(word); // remeber size of readed word
+ *(delimiter) = 0;
+ }
+ if (!strcmp(word, interface))
+ {
+ found_intefrace++; // interface found, raise the flag...
+ if ( length > (strlen(word)+1) ) // if there is no white space between interface name and value read it over here
+ stat[index++] = atoi(delimiter + 1);
+ }
+ }
+ }
+ }
+ if(found_intefrace)
+ {
+ range = index;
+ for (index = 0; index < (range/2); index++) // send the data to the browser
+ websWrite(wp, T("%d:%d:"), stat[index], stat[index+8]);
+ }
+ else
+ {
+ websWrite(wp, "\"error: Statistics : Intreface not found\"");
+ fclose(fp);
+ return 0;
+ }
+ fclose(fp);
+ return 0;
+}
+
+
+static int spidcom_asp_eoc_get_topo_h(int eid, webs_t wp, int argc, char_t **argv)
+{
+
+ mac_t mac_address_list[LIBSPID_ONLINE_INFO_LINE_MAX_NB];
+ int mac_address_count = 0;
+ libspid_error_t return_value;
+ int i = 0, end = 0;
+ char mac[LIBSPID_MAC_STR_LEN];
+
+
+ if ((return_value = libspid_eoc_get_topo(mac_address_list[0], &mac_address_count)) == LIBSPID_SUCCESS)
+ {
+ for (i ; i < mac_address_count; i ++)
+ {
+ libspid_mac_bin_to_str(mac_address_list[i], mac);
+ websWrite(wp, "%s-", mac);
+ }
+ }
+ else
+ {
+ websWrite(wp, "\"error: Online station : %s\"", human_readable(return_value));
+ }
+ return 0;
+}
+
+
+
+
+/**
+ * Reboot the modem. ASP page which contain call to this function must have \param doit=yes in its QUERY_STRING.
+ */
+
+static int spidcom_asp_reboot_b (int eid, webs_t wp, int argc, char_t **argv)
+{
+ char *doit;
+ int ret;
+ doit = websGetVar (wp, T ("doit"), T ("no"));
+ if (!(strcmp (doit, "yes")))
+ {
+ websWrite (wp, "<head><META HTTP-EQUIV=\"Refresh\" CONTENT=\"20; URL=br0.asp\"></head>\n");
+ websWrite (wp, "<h2> System is rebooting. Wait for page to be refreshed.</h2>");
+
+ ret = libspid_config_write_item (
+ LIBSPID_WEB_RESET_INFO_PATH,
+ LIBSPID_WEB_RESET_INFO_LABEL_RESET_BY_WEB,
+ LIBSPID_WEB_RESET_INFO_RESET_BY_WEB_YES);
+ if (LIBSPID_SUCCESS != ret)
+ websWrite (wp, "Write web_reset.info error<br>");
+
+ ret = libspid_system_save_file (LIBSPID_WEB_RESET_INFO_PATH);
+ if (LIBSPID_SUCCESS != ret)
+ websWrite (wp, "save web_reset.info error<br>");
+
+ libspid_system_reboot ();
+ }
+ else
+ websWrite (wp, "Not allowed. Please try again.");
+
+ return 0;
+}
+
+
+
+
+static int spidcom_asp_eoc_action(int eid, webs_t wp, int argc, char_t **argv)
+{
+ char *mac;
+ char *action;
+ libspid_error_t return_value;
+ libspid_eoc_link_quality_t link_quality;
+ libspid_eoc_dev_info_t eoc_dev_info;
+ libspid_eoc_rt_stat_t eoc_rt_stat;
+
+
+ mac = websGetVar(wp, "mac", "00:00:00:00:00:00");
+ action = websGetVar(wp, "action", "none");
+
+
+ memset(&link_quality, 0, sizeof(link_quality));
+ memset(&eoc_dev_info, 0, sizeof(eoc_dev_info));
+ memset(&eoc_rt_stat, 0, sizeof(eoc_rt_stat));
+
+
+ if (!strcmp(action,"get_link"))
+ {
+ if ((return_value = libspid_eoc_get_link(mac, &link_quality)) == LIBSPID_SUCCESS)
+ websWrite(wp, "\"%d:%d:%d:%d\"", link_quality.down_att, link_quality.up_att, link_quality.down_quality, link_quality.up_quality);
+ else
+ websWrite(wp, "\"error: EOC : %s\"", human_readable(return_value));
+ }
+ else
+ if (!strcmp(action,"get_device_info"))
+ {
+ if ((return_value = libspid_eoc_get_device_info(mac, &eoc_dev_info)) == LIBSPID_SUCCESS)
+ websWrite(wp, "\"%s:%d:%s\"", eoc_dev_info.model_no, eoc_dev_info.eth_port_nb, eoc_dev_info.sw_version);
+ else
+ websWrite(wp, "\"error: EOC :%s\"", human_readable(return_value));
+ }
+ else
+ if (!strcmp(action,"get_stat"))
+ {
+ if ((return_value = libspid_eoc_get_stat(mac, &eoc_rt_stat)) == LIBSPID_SUCCESS)
+ websWrite(wp, "\"%d:%d:%d:%d:%d:%d:%d:%d:%d:%d\"", eoc_rt_stat.tx_pkt , eoc_rt_stat.tx_byte, eoc_rt_stat.tx_bcast, eoc_rt_stat.tx_mcast, eoc_rt_stat.tx_dropped, eoc_rt_stat.rx_pkt , eoc_rt_stat.rx_byte, eoc_rt_stat.rx_bcast, eoc_rt_stat.rx_mcast, eoc_rt_stat.rx_dropped);
+ else
+ websWrite(wp, "\"error: EOC : %s\"", human_readable(return_value));
+ }
+ else
+ if (!strcmp(action,"reboot"))
+ {
+ if ((return_value = libspid_eoc_reboot(mac)) == LIBSPID_SUCCESS)
+ websWrite(wp, "\"Station with %s address is rebooted\"", mac);
+ else
+ websWrite(wp, "\"error: EOC : %s\"", human_readable(return_value));
+ }
+ else
+ if (!strcmp(action,"reset_stat"))
+ {
+ if ((return_value = libspid_eoc_reboot(mac)) == LIBSPID_SUCCESS)
+ websWrite(wp, "\"Station with %s address reset statistics\"", mac);
+ else
+ websWrite(wp, "\"error: EOC : %s\"", human_readable(return_value));
+ }
+
+ return 0;
+}
+
+static void spidcom_form_action(webs_t wp, char_t *path, char_t *query)
+{
+ char_t *reboot,
+ *inter,
+ *ipmode;
+
+ libspid_ip_mode_t ip_mode;
+ libspid_ip_t ip_data;
+ libspid_error_t return_value;
+
+
+
+ ipmode = websGetVar(wp, T("dhcp"), T("static"));
+ if (!(strcmp(ipmode,"static")))
+ ip_data.mode = LIBSPID_IP_MODE_STATIC;
+ else
+ if(!(strcmp(ipmode,"dhcp")))
+ ip_data.mode = LIBSPID_IP_MODE_DHCP;
+
+
+ strcpy(ip_data.address, websGetVar(wp, T("ip"), T("0.0.0.0")));
+ strcpy(ip_data.netmask, websGetVar(wp, T("nm"), T("0.0.0.0")));
+ strcpy(ip_data.broadcast, websGetVar(wp, T("bc"), T("0.0.0.0")));
+ strcpy(ip_data.gateway, websGetVar(wp, T("gw"), T("0.0.0.0")));
+
+ inter = websGetVar(wp, T("inter"), T("none"));
+ reboot = websGetVar(wp, T("reboot"), T("no"));
+
+ if (!strcmp(reboot, "yes"))
+ {
+ websRedirect(wp, "count.asp?doit=yes");
+ return;
+ }
+
+ websHeader(wp);
+
+ websWrite(wp, T("<head><META HTTP-EQUIV=\"Refresh\" CONTENT=\"3; URL=../%s.asp\">\n"), inter);
+ websWrite(wp, T("<link rel=\"stylesheet\" href=\"/../style/normal_ws.css\" type=\"text/css\">\n</head>\n<body>\n"), inter);
+
+ websWrite(wp, T("<h3>"));
+
+ if ((return_value = libspid_network_set_ip (inter, &ip_data)) == LIBSPID_SUCCESS)
+ ;//websWrite(wp, "libspid_network_set_ip : ok<br>");
+ else
+ websWrite(wp, "\"error: IP data : %s\" <br>", human_readable(return_value));
+
+
+ if ((return_value = libspid_system_save()) == LIBSPID_SUCCESS)
+ ;//websWrite(wp, "libspid_system_save : ok <br>");
+ else
+ websWrite(wp, "\"error: Save problem : %s\"<br>", human_readable(return_value));
+
+
+ websWrite(wp, T("</h3>"));
+ websWrite(wp, T("</body>\n"));
+ websFooter(wp);
+ websDone(wp, 200);
+
+}
+
+
+/**
+ *
+ * Bind actual asp name used in HTML to the implemented C function.
+ *
+ */
+
+void spidcom_register_all()
+{
+ websAspDefine(T("spidcomAspEocGetTopo"), spidcom_asp_eoc_get_topo_h);
+ websAspDefine(T("spidcomAspGetStatistics"), spidcom_asp_get_stat_h); // We bind spidcomAspGetStatistic to my function
+ websAspDefine(T("spidcomAspGetIpData"), spidcom_asp_get_ip_data_h);
+ websAspDefine(T("spidcomAspGetMac"), spidcom_asp_get_mac_h);
+ websAspDefine(T("spidcomAspReboot"), spidcom_asp_reboot_b);
+
+ websAspDefine(T("spidcomAction"), spidcom_asp_eoc_action);
+ websFormDefine(T("formAction"), spidcom_form_action);
+}
diff --git a/cleopatre/application/spidgoahead/Makefile b/cleopatre/application/spidgoahead/Makefile
new file mode 100644
index 0000000000..23663400bc
--- /dev/null
+++ b/cleopatre/application/spidgoahead/Makefile
@@ -0,0 +1,98 @@
+TARGET := .compiled
+TARGET_DEPS := httpd web.tar
+OBJPATH := obj
+INCPATH := .
+SRCPATH := .
+SUBMOD := LINUX
+
+CLEO_DIR := ../..
+LINUX_DIR := $(CLEO_DIR)/linux-2.6.25.10-spc300
+LIBSPID_DIR := $(CLEO_DIR)/application/libspid
+LIBMME_DIR := $(CLEO_DIR)/application/libmme
+
+
+LIBSPID_SO_BIN := $(LIBSPID_DIR)/libspid.so
+LIBMME_SO_BIN := $(LIBMME_DIR)/libmme.so
+
+ifeq ($(SSL_SUPPORT),y)
+ifeq ($(STAGING_DIR),)
+$(error STAGING_DIR is not set by buildroot.)
+endif
+
+SSL_INC := -I$(STAGING_DIR)/usr/include/openssl
+SSL_LIB := $(STAGING_DIR)/usr/lib/libssl.a $(STAGING_DIR)/usr/lib/libcrypto.a
+SSL_SW := -DWEBS_SSL_SUPPORT -DOPENSSL
+else
+SRC2AVOID := websSSL.c
+endif
+SRC2AVOID := $(SRC2AVOID) webcomp.c
+
+
+ifeq ($(CC_FOR_TARGET),) #direct compile
+CC=arm-linux-gcc
+CC_WITH_CFLAGS=$(CC) -I/opt/spidcom/spc300/usr/include -g -Os
+CC_WITHOUT_CFLAGS=$(CC)
+else #compile from buildroot
+CC_WITH_CFLAGS=$(CC)
+CC_WITHOUT_CFLAGS=$(CC_FOR_TARGET)
+endif
+
+RESPONSE_FILE := extra_flags
+INCLUDES := -I$(INCPATH) \
+ -I$(LINUX_DIR)/include/asm-arm/arch-spc300 \
+ -I$(CLEO_DIR)/include \
+ $(SSL_INC) \
+ $(shell $(LIBSPID_DIR)/libspid-config --I_opts)
+
+EXTRA_CFLAGS := $(INCLUDES) -MMD -Wall \
+ @$(CLEO_DIR)/$(RESPONSE_FILE) \
+ -DWEBS -DUEMF -DOS="LINUX" -DLINUX \
+ -DUSER_MANAGEMENT_SUPPORT \
+ $(SSL_SW)
+
+LIBS := $(SSL_LIB) \
+ $(shell $(LIBSPID_DIR)/libspid-config --L_opts) \
+ $(shell $(LIBSPID_DIR)/libspid-config --libs)
+
+ALL_SRCS := $(wildcard $(SUBMOD)/*.c) $(wildcard *.c)
+SRCS := $(filter-out $(SRC2AVOID),$(ALL_SRCS))
+OBJS := $(addprefix $(OBJPATH)/,$(SRCS:.c=.o))
+DEPS := $(patsubst %o,%d,$(OBJS))
+
+all: $(TARGET)
+
+$(TARGET): $(TARGET_DEPS)
+ @touch $@
+
+httpd: $(OBJS) $(LIBSPID_SO_BIN) $(LIBMME_SO_BIN) $(SSL_LIB)
+ $(CC_WITHOUT_CFLAGS) -o $@ $(OBJS) $(LIBS)
+
+#TODO: 'httpd' dependency is a patch. Should be redo.
+web.tar: httpd
+ tar -cf $@ web
+
+$(OBJPATH)/%.o: %.c
+ $(CC_WITH_CFLAGS) $(EXTRA_CFLAGS) -o $@ -c $<
+
+$(OBJPATH/$(SUBMOD))/%.o: $(SUBMOD)/%.c
+ $(CC_WITH_CFLAGS) $(EXTRA_CFLAGS) -o $@ -c $<
+
+$(OBJS): | $(OBJPATH)
+
+$(OBJPATH):
+ mkdir -p $(OBJPATH)/$(SUBMOD)
+
+$(LIBSPID_SO_BIN) $(LIBMME_SO_BIN):
+ $(error libspid or libmme output files are not found)
+
+$(SSL_LIB):
+ $(error openssl output files are not found)
+
+-include $(DEPS)
+
+.PHONY: all clean
+
+clean:
+ rm -f $(TARGET) $(TARGET_DEPS)
+ rm -f $(OBJS) $(DEPS)
+ rmdir -p $(OBJPATH)/$(SUBMOD)
diff --git a/cleopatre/application/spidgoahead/asp.c b/cleopatre/application/spidgoahead/asp.c
new file mode 100644
index 0000000000..050e3fd881
--- /dev/null
+++ b/cleopatre/application/spidgoahead/asp.c
@@ -0,0 +1,322 @@
+/*
+ * asp.c -- Active Server Page Support
+ *
+ * Copyright (c) GoAhead Software Inc., 1995-2000. All Rights Reserved.
+ *
+ * See the file "license.txt" for usage and redistribution license requirements
+ *
+ * $Id: asp.c,v 1.3 2002/10/24 14:44:50 bporter Exp $
+ */
+
+/******************************** Description *********************************/
+
+/*
+ * The ASP module processes ASP pages and executes embedded scripts. It
+ * support an open scripting architecture with in-built support for
+ * Ejscript(TM).
+ */
+
+/********************************* Includes ***********************************/
+
+#include "wsIntrn.h"
+
+/********************************** Locals ************************************/
+
+static sym_fd_t websAspFunctions = -1; /* Symbol table of functions */
+static int aspOpenCount = 0; /* count of apps using this module */
+
+/***************************** Forward Declarations ***************************/
+
+static char_t *strtokcmp(char_t *s1, char_t *s2);
+static char_t *skipWhite(char_t *s);
+
+/************************************* Code ***********************************/
+/*
+ * Create script spaces and commands
+ */
+
+int websAspOpen()
+{
+ if (++aspOpenCount == 1) {
+/*
+ * Create the table for ASP functions
+ */
+ websAspFunctions = symOpen(WEBS_SYM_INIT * 2);
+
+/*
+ * Create standard ASP commands
+ */
+ websAspDefine(T("write"), websAspWrite);
+ }
+ return 0;
+}
+
+/************************************* Code ***********************************/
+/*
+ * Close Asp symbol table.
+ */
+
+void websAspClose()
+{
+ if (--aspOpenCount <= 0) {
+ if (websAspFunctions != -1) {
+ symClose(websAspFunctions);
+ websAspFunctions = -1;
+ }
+ }
+}
+
+/******************************************************************************/
+/*
+ * Process ASP requests and expand all scripting commands. We read the
+ * entire ASP page into memory and then process. If you have really big
+ * documents, it is better to make them plain HTML files rather than ASPs.
+ */
+
+int websAspRequest(webs_t wp, char_t *lpath)
+{
+ websStatType sbuf;
+ char *rbuf;
+ char_t *token, *lang, *result, *path, *ep, *cp, *buf, *nextp;
+ char_t *last;
+ int rc, engine, len, ejid;
+
+ a_assert(websValid(wp));
+ a_assert(lpath && *lpath);
+
+ rc = -1;
+ buf = NULL;
+ rbuf = NULL;
+ engine = EMF_SCRIPT_EJSCRIPT;
+ wp->flags |= WEBS_HEADER_DONE;
+ path = websGetRequestPath(wp);
+
+/*
+ * Create Ejscript instance in case it is needed
+ */
+ ejid = ejOpenEngine(wp->cgiVars, websAspFunctions);
+ if (ejid < 0) {
+ websError(wp, 200, T("Can't create Ejscript engine"));
+ goto done;
+ }
+ ejSetUserHandle(ejid, (int) wp);
+
+ if (websPageStat(wp, lpath, path, &sbuf) < 0) {
+ websError(wp, 200, T("Can't stat %s"), lpath);
+ goto done;
+ }
+
+/*
+ * Create a buffer to hold the ASP file in-memory
+ */
+ len = sbuf.size * sizeof(char);
+ if ((rbuf = balloc(B_L, len + 1)) == NULL) {
+ websError(wp, 200, T("Can't get memory"));
+ goto done;
+ }
+ rbuf[len] = '\0';
+
+ if (websPageReadData(wp, rbuf, len) != len) {
+ websError(wp, 200, T("Cant read %s"), lpath);
+ goto done;
+ }
+ websPageClose(wp);
+
+/*
+ * Convert to UNICODE if necessary.
+ */
+ if ((buf = ballocAscToUni(rbuf, len)) == NULL) {
+ websError(wp, 200, T("Can't get memory"));
+ goto done;
+ }
+
+/*
+ * Scan for the next "<%"
+ */
+ last = buf;
+ rc = 0;
+ while (rc == 0 && *last && ((nextp = gstrstr(last, T("<%"))) != NULL)) {
+ websWriteBlock(wp, last, (nextp - last));
+ nextp = skipWhite(nextp + 2);
+
+/*
+ * Decode the language
+ */
+ token = T("language");
+
+ if ((lang = strtokcmp(nextp, token)) != NULL) {
+ if ((cp = strtokcmp(lang, T("=javascript"))) != NULL) {
+ engine = EMF_SCRIPT_EJSCRIPT;
+ } else {
+ cp = nextp;
+ }
+ nextp = cp;
+ }
+
+/*
+ * Find tailing bracket and then evaluate the script
+ */
+ if ((ep = gstrstr(nextp, T("%>"))) != NULL) {
+
+ *ep = '\0';
+ last = ep + 2;
+ nextp = skipWhite(nextp);
+/*
+ * Handle backquoted newlines
+ */
+ for (cp = nextp; *cp; ) {
+ if (*cp == '\\' && (cp[1] == '\r' || cp[1] == '\n')) {
+ *cp++ = ' ';
+ while (*cp == '\r' || *cp == '\n') {
+ *cp++ = ' ';
+ }
+ } else {
+ cp++;
+ }
+ }
+
+/*
+ * Now call the relevant script engine. Output is done directly
+ * by the ASP script procedure by calling websWrite()
+ */
+ if (*nextp) {
+ result = NULL;
+ if (engine == EMF_SCRIPT_EJSCRIPT) {
+ rc = scriptEval(engine, nextp, &result, ejid);
+ } else {
+ rc = scriptEval(engine, nextp, &result, (int) wp);
+ }
+ if (rc < 0) {
+/*
+ * On an error, discard all output accumulated so far
+ * and store the error in the result buffer. Be careful if the
+ * user has called websError() already.
+ */
+ if (websValid(wp)) {
+ if (result) {
+ websWrite(wp, T("<h2><b>ASP Error: %s</b></h2>\n"),
+ result);
+ websWrite(wp, T("<pre>%s</pre>"), nextp);
+ bfree(B_L, result);
+ } else {
+ websWrite(wp, T("<h2><b>ASP Error</b></h2>\n%s\n"),
+ nextp);
+ }
+ websWrite(wp, T("</body></html>\n"));
+ rc = 0;
+ }
+ goto done;
+ }
+ }
+
+ } else {
+ websError(wp, 200, T("Unterminated script in %s: \n"), lpath);
+ rc = -1;
+ goto done;
+ }
+ }
+/*
+ * Output any trailing HTML page text
+ */
+ if (last && *last && rc == 0) {
+ websWriteBlock(wp, last, gstrlen(last));
+ }
+ rc = 0;
+
+/*
+ * Common exit and cleanup
+ */
+done:
+ if (websValid(wp)) {
+ websPageClose(wp);
+ if (ejid >= 0) {
+ ejCloseEngine(ejid);
+ }
+ }
+ bfreeSafe(B_L, buf);
+ bfreeSafe(B_L, rbuf);
+ return rc;
+}
+
+/******************************************************************************/
+/*
+ * Define an ASP Ejscript function. Bind an ASP name to a C procedure.
+ */
+
+int websAspDefine(char_t *name,
+ int (*fn)(int ejid, webs_t wp, int argc, char_t **argv))
+{
+ return ejSetGlobalFunctionDirect(websAspFunctions, name,
+ (int (*)(int, void*, int, char_t**)) fn);
+}
+
+/******************************************************************************/
+/*
+ * Asp write command. This implemements <% write("text"); %> command
+ */
+
+int websAspWrite(int ejid, webs_t wp, int argc, char_t **argv)
+{
+ int i;
+
+ a_assert(websValid(wp));
+
+ for (i = 0; i < argc; ) {
+ a_assert(argv);
+ if (websWriteBlock(wp, argv[i], gstrlen(argv[i])) < 0) {
+ return -1;
+ }
+ if (++i < argc) {
+ if (websWriteBlock(wp, T(" "), 2) < 0) {
+ return -1;
+ }
+ }
+ }
+ return 0;
+}
+
+/******************************************************************************/
+/*
+ * strtokcmp -- Find s2 in s1. We skip leading white space in s1.
+ * Return a pointer to the location in s1 after s2 ends.
+ */
+
+static char_t *strtokcmp(char_t *s1, char_t *s2)
+{
+ int len;
+
+ s1 = skipWhite(s1);
+ len = gstrlen(s2);
+ for (len = gstrlen(s2); len > 0 && (tolower(*s1) == tolower(*s2)); len--) {
+ if (*s2 == '\0') {
+ return s1;
+ }
+ s1++;
+ s2++;
+ }
+ if (len == 0) {
+ return s1;
+ }
+ return NULL;
+}
+
+/******************************************************************************/
+/*
+ * Skip white space
+ */
+
+static char_t *skipWhite(char_t *s)
+{
+ a_assert(s);
+
+ if (s == NULL) {
+ return s;
+ }
+ while (*s && gisspace(*s)) {
+ s++;
+ }
+ return s;
+}
+
+/******************************************************************************/
+
diff --git a/cleopatre/application/spidgoahead/balloc.c b/cleopatre/application/spidgoahead/balloc.c
new file mode 100644
index 0000000000..ea5fc5f9dd
--- /dev/null
+++ b/cleopatre/application/spidgoahead/balloc.c
@@ -0,0 +1,974 @@
+/*
+ * balloc.c -- Block allocation module
+ *
+ * Copyright (c) GoAhead Software Inc., 1995-2000. All Rights Reserved.
+ *
+ * See the file "license.txt" for usage and redistribution license requirements
+ *
+ * $Id: balloc.c,v 1.4 2002/12/02 15:34:19 bporter Exp $
+ */
+
+/******************************** Description *********************************/
+
+/*
+ * This module implements a very fast block allocation scheme suitable for
+ * ROMed environments. It maintains block class queues for rapid allocation
+ * and minimal fragmentation. This module does not coalesce blocks. The
+ * storage space may be populated statically or via the traditional malloc
+ * mechanisms. Large blocks greater than the maximum class size may be
+ * allocated from the O/S or run-time system via malloc. To permit the use
+ * of malloc, call bopen with flags set to B_USE_MALLOC (this is the default).
+ * It is recommended that bopen be called first thing in the application.
+ * If it is not, it will be called with default values on the first call to
+ * balloc(). Note that this code is not designed for multi-threading purposes
+ * and it depends on newly declared variables being initialized to zero.
+ */
+
+/********************************* Includes ***********************************/
+
+#define IN_BALLOC
+
+#ifdef UEMF
+ #include "uemf.h"
+#else
+ #include "basic/basicInternal.h"
+#endif
+
+#include <stdarg.h>
+#include <stdlib.h>
+
+#ifndef NO_BALLOC
+/********************************* Defines ************************************/
+
+/*
+ * Define B_STATS if you wish to track memory block and stack usage
+ */
+#ifdef B_STATS
+/*
+ * Optional statistics
+ */
+
+typedef struct {
+ long alloc; /* Block allocation calls */
+ long inuse; /* Blocks in use */
+} bStatsType;
+
+typedef struct {
+ char_t file[FNAMESIZE];
+ long allocated; /* Bytes currently allocated */
+ long count; /* Current block count */
+ long times; /* Count of alloc attempts */
+ long largest; /* largest allocated here */
+ int q;
+} bStatsFileType;
+
+/*
+ * This one is very expensive but great stats
+ */
+typedef struct {
+ void *ptr; /* Pointer to memory */
+ bStatsFileType *who; /* Who allocated the memory */
+} bStatsBlkType;
+
+static bStatsType bStats[B_MAX_CLASS]; /* Per class stats */
+static bStatsFileType bStatsFiles[B_MAX_FILES];/* Per file stats */
+static bStatsBlkType bStatsBlks[B_MAX_BLOCKS];/* Per block stats */
+static int bStatsBlksMax = 0; /* Max block entry */
+static int bStatsFilesMax = 0; /* Max file entry */
+static int bStatsMemInUse = 0; /* Memory currently in use */
+static int bStatsBallocInUse = 0; /* Memory currently balloced */
+static int bStatsMemMax = 0; /* Max memory ever used */
+static int bStatsBallocMax = 0; /* Max memory ever balloced */
+static void *bStackMin = (void*) -1;/* Miniumum stack position */
+static void *bStackStart; /* Starting stack position */
+static int bStatsMemMalloc = 0; /* Malloced memory */
+#endif /* B_STATS */
+
+/*
+ * ROUNDUP4(size) returns the next higher integer value of size that is
+ * divisible by 4, or the value of size if size is divisible by 4.
+ * ROUNDUP4() is used in aligning memory allocations on 4-byte boundaries.
+ *
+ * Note: ROUNDUP4() is only required on some operating systems (IRIX).
+ */
+
+#define ROUNDUP4(size) ((size) % 4) ? (size) + (4 - ((size) % 4)) : (size)
+
+/********************************** Locals ************************************/
+/*
+ * bQhead blocks are created as the original memory allocation is freed up.
+ * See bfree.
+ */
+static bType *bQhead[B_MAX_CLASS]; /* Per class block q head */
+static char *bFreeBuf; /* Pointer to free memory */
+static char *bFreeNext; /* Pointer to next free mem */
+static int bFreeSize; /* Size of free memory */
+static int bFreeLeft; /* Size of free left for use */
+static int bFlags = B_USE_MALLOC; /* Default to auto-malloc */
+static int bopenCount = 0; /* Num tasks using balloc */
+
+/*************************** Forward Declarations *****************************/
+
+#ifdef B_STATS
+static void bStatsAlloc(B_ARGS_DEC, void *ptr, int q, int size);
+static void bStatsFree(B_ARGS_DEC, void *ptr, int q, int size);
+static void bstatsWrite(int handle, char_t *fmt, ...);
+static int bStatsFileSort(const void *cp1, const void *cp2);
+#endif /* B_STATS */
+
+#if (defined (B_FILL) || defined (B_VERIFY_CAUSES_SEVERE_OVERHEAD))
+static void bFillBlock(void *buf, int bufsize);
+#endif
+
+#ifdef B_VERIFY_CAUSES_SEVERE_OVERHEAD
+static void verifyUsedBlock(bType *bp, int q);
+static void verifyFreeBlock(bType *bp, int q);
+void verifyBallocSpace();
+#endif
+
+static int ballocGetSize(int size, int *q);
+
+/********************************** Code **************************************/
+/*
+ * Initialize the balloc module. bopen should be called the very first thing
+ * after the application starts and bclose should be called the last thing
+ * before exiting. If bopen is not called, it will be called on the first
+ * allocation with default values. "buf" points to memory to use of size
+ * "bufsize". If buf is NULL, memory is allocated using malloc. flags may
+ * be set to B_USE_MALLOC if using malloc is okay. This routine will allocate
+ * an initial buffer of size bufsize for use by the application.
+ */
+
+int bopen(void *buf, int bufsize, int flags)
+{
+ bFlags = flags;
+
+#ifdef BASTARD_TESTING
+ srand(time(0L));
+#endif /* BASTARD_TESTING */
+
+/*
+ * If bopen already called by a shared process, just increment the count
+ * and return;
+ */
+ if (++bopenCount > 1) {
+ return 0;
+ }
+
+ if (buf == NULL) {
+ if (bufsize == 0) {
+ bufsize = B_DEFAULT_MEM;
+ }
+#ifdef IRIX
+ bufsize = ROUNDUP4(bufsize);
+#endif
+ if ((buf = malloc(bufsize)) == NULL) {
+ /* resetting bopenCount lets client code decide to attempt to call
+ * bopen() again with a smaller memory request, should it desire to.
+ * Fix suggested by Simon Byholm.
+ */
+ --bopenCount;
+ return -1;
+ }
+#ifdef B_STATS
+ bStatsMemMalloc += bufsize;
+#endif
+ } else {
+ bFlags |= B_USER_BUF;
+ }
+
+ bFreeSize = bFreeLeft = bufsize;
+ bFreeBuf = bFreeNext = buf;
+ memset(bQhead, 0, sizeof(bQhead));
+#if (defined (B_FILL) || defined (B_VERIFY_CAUSES_SEVERE_OVERHEAD))
+ bFillBlock(buf, bufsize);
+#endif
+#ifdef B_STATS
+ bStackStart = &buf;
+#endif
+#ifdef B_VERIFY_CAUSES_SEVERE_OVERHEAD
+ verifyFreeBlock(buf, bufsize);
+#endif
+ return 0;
+}
+
+/******************************************************************************/
+/*
+ * Close down the balloc module and free all malloced memory.
+ */
+
+void bclose()
+{
+#ifdef B_VERIFY_CAUSES_SEVERE_OVERHEAD
+ verifyBallocSpace();
+#endif
+ if (--bopenCount <= 0 && !(bFlags & B_USER_BUF)) {
+ free(bFreeBuf);
+ bopenCount = 0;
+ }
+}
+
+/******************************************************************************/
+/*
+ * Allocate a block of the requested size. First check the block
+ * queues for a suitable one.
+ */
+
+void *balloc(B_ARGS_DEC, int size)
+{
+ bType *bp;
+ int q, memSize;
+
+/*
+ * Call bopen with default values if the application has not yet done so
+ */
+ if (bFreeBuf == NULL) {
+ if (bopen(NULL, B_DEFAULT_MEM, 0) < 0) {
+ return NULL;
+ }
+ }
+#ifdef B_VERIFY_CAUSES_SEVERE_OVERHEAD
+ verifyBallocSpace();
+#endif
+ if (size < 0) {
+ return NULL;
+ }
+
+#ifdef BASTARD_TESTING
+ if (rand() == 0x7fff) {
+ return NULL;
+ }
+#endif /* BASTARD_TESTING */
+
+
+ memSize = ballocGetSize(size, &q);
+
+ if (q >= B_MAX_CLASS) {
+/*
+ * Size if bigger than the maximum class. Malloc if use has been okayed
+ */
+ if (bFlags & B_USE_MALLOC) {
+#ifdef B_STATS
+ bstats(0, NULL);
+#endif
+#ifdef IRIX
+ memSize = ROUNDUP4(memSize);
+#endif
+ bp = (bType*) malloc(memSize);
+ if (bp == NULL) {
+ traceRaw(T("B: malloc failed\n"));
+ return NULL;
+ }
+#ifdef B_STATS
+ bStatsMemMalloc += memSize;
+#endif
+#if (defined (B_FILL) || defined (B_VERIFY_CAUSES_SEVERE_OVERHEAD))
+ bFillBlock(bp, memSize);
+#endif
+
+ } else {
+ traceRaw(T("B: malloc failed\n"));
+ return NULL;
+ }
+
+/*
+ * the u.size is the actual size allocated for data
+ */
+ bp->u.size = memSize - sizeof(bType);
+ bp->flags = B_MALLOCED;
+
+ } else if ((bp = bQhead[q]) != NULL) {
+/*
+ * Take first block off the relevant q if non-empty
+ */
+ bQhead[q] = bp->u.next;
+#ifdef B_VERIFY_CAUSES_SEVERE_OVERHEAD
+ verifyFreeBlock(bp, q);
+#endif
+#if (defined (B_FILL) || defined (B_VERIFY_CAUSES_SEVERE_OVERHEAD))
+ bFillBlock(bp, memSize);
+#endif
+ bp->u.size = memSize - sizeof(bType);
+ bp->flags = 0;
+
+ } else {
+ if (bFreeLeft > memSize) {
+/*
+ * The q was empty, and the free list has spare memory so
+ * create a new block out of the primary free block
+ */
+ bp = (bType*) bFreeNext;
+#ifdef B_VERIFY_CAUSES_SEVERE_OVERHEAD
+ verifyFreeBlock(bp, q);
+#endif
+ bFreeNext += memSize;
+ bFreeLeft -= memSize;
+#if (defined (B_FILL) || defined (B_VERIFY_CAUSES_SEVERE_OVERHEAD))
+ bFillBlock(bp, memSize);
+#endif
+ bp->u.size = memSize - sizeof(bType);
+ bp->flags = 0;
+
+ } else if (bFlags & B_USE_MALLOC) {
+#ifdef B_STATS
+ static int once = 0;
+ if (once++ == 0) {
+ bstats(0, NULL);
+ }
+#endif
+/*
+ * Nothing left on the primary free list, so malloc a new block
+ */
+#ifdef IRIX
+ memSize = ROUNDUP4(memSize);
+#endif
+ if ((bp = (bType*) malloc(memSize)) == NULL) {
+ traceRaw(T("B: malloc failed\n"));
+ return NULL;
+ }
+#ifdef B_STATS
+ bStatsMemMalloc += memSize;
+#endif
+#if (defined (B_FILL) || defined (B_VERIFY_CAUSES_SEVERE_OVERHEAD))
+ bFillBlock(bp, memSize);
+#endif
+ bp->u.size = memSize - sizeof(bType);
+ bp->flags = B_MALLOCED;
+
+ } else {
+ traceRaw(T("B: malloc failed\n"));
+ return NULL;
+ }
+ }
+
+#ifdef B_STATS
+ bStatsAlloc(B_ARGS, bp, q, memSize);
+#endif
+ bp->flags |= B_INTEGRITY;
+
+/*
+ * The following is a good place to put a breakpoint when trying to reduce
+ * determine and reduce maximum memory use.
+ */
+#if 0
+#ifdef B_STATS
+ if (bStatsBallocInUse == bStatsBallocMax) {
+ bstats(0, NULL);
+ }
+#endif
+#endif
+ return (void*) ((char*) bp + sizeof(bType));
+}
+
+/******************************************************************************/
+/*
+ * Free a block back to the relevant free q. We don't free back to the O/S
+ * or run time system unless the block is greater than the maximum class size.
+ * We also do not coalesce blocks.
+ */
+
+void bfree(B_ARGS_DEC, void *mp)
+{
+ bType *bp;
+ int q, memSize;
+
+#ifdef B_VERIFY_CAUSES_SEVERE_OVERHEAD
+ verifyBallocSpace();
+#endif
+ bp = (bType*) ((char*) mp - sizeof(bType));
+
+ a_assert((bp->flags & B_INTEGRITY_MASK) == B_INTEGRITY);
+
+ if ((bp->flags & B_INTEGRITY_MASK) != B_INTEGRITY) {
+ return;
+ }
+
+ memSize = ballocGetSize(bp->u.size, &q);
+
+#ifdef B_VERIFY_CAUSES_SEVERE_OVERHEAD
+ verifyUsedBlock(bp,q);
+#endif
+#ifdef B_STATS
+ bStatsFree(B_ARGS, bp, q, bp->u.size+sizeof(bType));
+#endif
+ if (bp->flags & B_MALLOCED) {
+ free(bp);
+ return;
+ }
+
+#ifdef B_VERIFY_CAUSES_SEVERE_OVERHEAD
+ bFillBlock(bp, memSize);
+#endif
+
+/*
+ * Simply link onto the head of the relevant q
+ */
+ bp->u.next = bQhead[q];
+ bQhead[q] = bp;
+
+ bp->flags = B_FILL_WORD;
+}
+
+/******************************************************************************/
+/*
+ * Safe free
+ */
+
+void bfreeSafe(B_ARGS_DEC, void *mp)
+{
+ if (mp) {
+ bfree(B_ARGS, mp);
+ }
+}
+
+/******************************************************************************/
+#ifdef UNICODE
+/*
+ * Duplicate a string, allow NULL pointers and then dup an empty string.
+ */
+
+char *bstrdupA(B_ARGS_DEC, char *s)
+{
+ char *cp;
+ int len;
+
+ if (s == NULL) {
+ s = "";
+ }
+ len = strlen(s) + 1;
+ if (cp = balloc(B_ARGS, len)) {
+ strcpy(cp, s);
+ }
+ return cp;
+}
+
+#endif /* UNICODE */
+/******************************************************************************/
+/*
+ * Duplicate an ascii string, allow NULL pointers and then dup an empty string.
+ * If UNICODE, bstrdup above works with wide chars, so we need this routine
+ * for ascii strings.
+ */
+
+char_t *bstrdup(B_ARGS_DEC, char_t *s)
+{
+ char_t *cp;
+ int len;
+
+ if (s == NULL) {
+ s = T("");
+ }
+ len = gstrlen(s) + 1;
+ if ((cp = balloc(B_ARGS, len * sizeof(char_t))) != NULL) {
+ gstrcpy(cp, s);
+ }
+ return cp;
+}
+
+/******************************************************************************/
+/*
+ * Reallocate a block. Allow NULL pointers and just do a malloc.
+ * Note: if the realloc fails, we return NULL and the previous buffer is
+ * preserved.
+ */
+
+void *brealloc(B_ARGS_DEC, void *mp, int newsize)
+{
+ bType *bp;
+ void *newbuf;
+
+ if (mp == NULL) {
+ return balloc(B_ARGS, newsize);
+ }
+ bp = (bType*) ((char*) mp - sizeof(bType));
+ a_assert((bp->flags & B_INTEGRITY_MASK) == B_INTEGRITY);
+
+/*
+ * If the allocated memory already has enough room just return the previously
+ * allocated address.
+ */
+ if (bp->u.size >= newsize) {
+ return mp;
+ }
+ if ((newbuf = balloc(B_ARGS, newsize)) != NULL) {
+ memcpy(newbuf, mp, bp->u.size);
+ bfree(B_ARGS, mp);
+ }
+ return newbuf;
+}
+
+/******************************************************************************/
+/*
+ * Find the size of the block to be balloc'ed. It takes in a size, finds the
+ * smallest binary block it fits into, adds an overhead amount and returns.
+ * q is the binary size used to keep track of block sizes in use. Called
+ * from both balloc and bfree.
+ */
+
+static int ballocGetSize(int size, int *q)
+{
+ int mask;
+
+ mask = (size == 0) ? 0 : (size-1) >> B_SHIFT;
+ for (*q = 0; mask; mask >>= 1) {
+ *q = *q + 1;
+ }
+ return ((1 << (B_SHIFT + *q)) + sizeof(bType));
+}
+
+/******************************************************************************/
+#if (defined (B_FILL) || defined (B_VERIFY_CAUSES_SEVERE_OVERHEAD))
+/*
+ * Fill the block (useful during development to catch zero fill assumptions)
+ */
+
+static void bFillBlock(void *buf, int bufsize)
+{
+ memset(buf, B_FILL_CHAR, bufsize);
+}
+#endif
+
+/******************************************************************************/
+#ifdef B_STATS
+/*
+ * Statistics. Do output via calling the writefn callback function with
+ * "handle" as the output file handle.
+ */
+
+void bstats(int handle, void (*writefn)(int handle, char_t *fmt, ...))
+{
+ bStatsFileType *fp, *files;
+ bStatsBlkType *blkp;
+ bType *bp;
+ char_t *cp;
+ int q, count, mem, total, len;
+ static int recurseProtect = 0;
+
+ if (recurseProtect++ > 0) {
+ recurseProtect--;
+ return;
+ }
+
+ if (writefn == NULL) {
+ writefn = bstatsWrite;
+ }
+
+/*
+ * Print stats for each memory block
+ */
+ (*writefn)(handle, T("\nMemory Stats\n"));
+
+/*
+ * The following tabular format is now used for the output.
+ * Q Size Free Bytes Inuse Bytes Allocs
+ * dd ddddd ddd ddddd dddd ddddd dddd
+ */
+ (*writefn)(handle, " Q Size Free Bytes Inuse Bytes Allocs\n");
+
+ total = 0;
+ for (q = 0; q < B_MAX_CLASS; q++) {
+ count = 0;
+ for (bp = bQhead[q]; bp; bp = bp->u.next) {
+ count++;
+ }
+ mem = count * (1 << (q + B_SHIFT));
+ total += mem;
+ (*writefn)(handle,
+ T("%2d %5d %4d %6d %4d %5d %4d\n"),
+ q, 1 << (q + B_SHIFT), count, mem, bStats[q].inuse,
+ bStats[q].inuse * (1 << (q + B_SHIFT)), bStats[q].alloc);
+ }
+
+ (*writefn)(handle, T("\n"));
+
+/*
+ * Print summary stats
+ *
+ * bFreeSize Initial memory reserved with bopen call
+ * bStatsMemMalloc memory from calls to system MALLOC
+ * bStatsMemMax
+ * bStatsBallocMax largest amount of memory from balloc calls
+ * bStatsMemInUse
+ * bStatsBallocInUse present balloced memory being used
+ * bStatsBlksMax);
+ * bStackStart
+ * bStackMin);
+ * total);
+ * bFreeLeft);
+ *
+ */
+ (*writefn)(handle, T("Initial free list size %7d\n"), bFreeSize);
+ (*writefn)(handle, T("Max memory malloced %7d\n"), bStatsMemMalloc);
+ (*writefn)(handle, T("Max memory ever used %7d\n"), bStatsMemMax);
+ (*writefn)(handle, T("Max memory ever balloced %7d\n"), bStatsBallocMax);
+ (*writefn)(handle, T("Memory currently in use %7d\n"), bStatsMemInUse);
+ (*writefn)(handle, T("Memory currently balloced %7d\n"), bStatsBallocInUse);
+ (*writefn)(handle, T("Max blocks allocated %7d\n"), bStatsBlksMax);
+ (*writefn)(handle, T("Maximum stack used %7d\n"),
+ (int) bStackStart - (int) bStackMin);
+
+ (*writefn)(handle, T("Free memory on all queues %7d\n"), total);
+ (*writefn)(handle, T("Free list buffer left %7d\n"), bFreeLeft);
+ (*writefn)(handle, T("Total free memory %7d\n"), bFreeLeft + total);
+
+/*
+ * Print per file allocation stats. Sort the copied table.
+ */
+ len = sizeof(bStatsFileType) * B_MAX_FILES;
+ files = malloc(len);
+ if (files == NULL) {
+ (*writefn)(handle, T("Can't allocate stats memory\n"));
+ recurseProtect--;
+ return;
+ }
+ memcpy(files, bStatsFiles, len);
+ qsort(files, bStatsFilesMax, sizeof(bStatsFileType), bStatsFileSort);
+
+ (*writefn)(handle, T("\nMemory Currently Allocated\n"));
+ total = 0;
+ (*writefn)(handle,
+ T(" bytes, blocks in use, total times,")
+ T("largest, q\n"));
+
+ for (fp = files; fp < &files[bStatsFilesMax]; fp++) {
+ if (fp->file[0]) {
+ (*writefn)(handle, T("%18s, %7d, %5d, %6d, %7d,%4d\n"),
+ fp->file, fp->allocated, fp->count, fp->times, fp->largest,
+ fp->q);
+ total += fp->allocated;
+ }
+ }
+ (*writefn)(handle, T("\nTotal allocated %7d\n\n"), total);
+
+/*
+ * Dump the actual strings
+ */
+ (*writefn)(handle, T("\nStrings\n"));
+ for (blkp = &bStatsBlks[bStatsBlksMax - 1]; blkp >= bStatsBlks; blkp--) {
+ if (blkp->ptr) {
+ cp = (char_t*) ((char*) blkp->ptr + sizeof(bType));
+ fp = blkp->who;
+ if (gisalnum(*cp)) {
+ (*writefn)(handle, T("%-50s allocated by %s\n"), cp,
+ fp->file);
+ }
+ }
+ }
+ free(files);
+ recurseProtect--;
+}
+
+/******************************************************************************/
+/*
+ * File sort function. Used to sort per file stats
+ */
+
+static int bStatsFileSort(const void *cp1, const void *cp2)
+{
+ bStatsFileType *s1, *s2;
+
+ s1 = (bStatsFileType*) cp1;
+ s2 = (bStatsFileType*) cp2;
+
+ if (s1->allocated < s2->allocated)
+ return -1;
+ else if (s1->allocated == s2->allocated)
+ return 0;
+ return 1;
+}
+
+/******************************************************************************/
+/*
+ * Accumulate allocation statistics
+ */
+
+static void bStatsAlloc(B_ARGS_DEC, void *ptr, int q, int size)
+{
+ int memSize;
+ bStatsFileType *fp;
+ bStatsBlkType *bp;
+ char_t name[FNAMESIZE + 10];
+
+ gsprintf(name, T("%s:%d"), B_ARGS);
+
+ bStats[q].alloc++;
+ bStats[q].inuse++;
+ bStatsMemInUse += size;
+ if (bStatsMemInUse > bStatsMemMax) {
+ bStatsMemMax = bStatsMemInUse;
+ }
+ memSize = (1 << (B_SHIFT + q)) + sizeof(bType);
+ bStatsBallocInUse += memSize;
+ if (bStatsBallocInUse > bStatsBallocMax) {
+ bStatsBallocMax = bStatsBallocInUse;
+ }
+
+/*
+ * Track maximum stack usage. Assumes a stack growth down. Approximate as
+ * we only measure this on block allocation.
+ */
+ if ((void*) &file < bStackMin) {
+ bStackMin = (void*) &file;
+ }
+
+/*
+ * Find the file and adjust the stats for this file
+ */
+ for (fp = bStatsFiles; fp < &bStatsFiles[bStatsFilesMax]; fp++) {
+ if (fp->file[0] == file[0] && gstrcmp(fp->file, name) == 0) {
+ fp->allocated += size;
+ fp->count++;
+ fp->times++;
+ if (fp->largest < size) {
+ fp->largest = size;
+ fp->q = q;
+ }
+ break;
+ }
+ }
+
+/*
+ * New entry: find the first free slot and create a new entry
+ */
+ if (fp >= &bStatsFiles[bStatsFilesMax]) {
+ for (fp = bStatsFiles; fp < &bStatsFiles[B_MAX_FILES]; fp++) {
+ if (fp->file[0] == '\0') {
+ gstrncpy(fp->file, name, TSZ(fp->file));
+ fp->allocated += size;
+ fp->count++;
+ fp->times++;
+ fp->largest = size;
+ fp->q = q;
+ if ((fp - bStatsFiles) >= bStatsFilesMax) {
+ bStatsFilesMax = (fp - bStatsFiles) + 1;
+ }
+ break;
+ }
+ }
+ }
+
+/*
+ * Update the per block stats. Allocate a new slot.
+ */
+ for (bp = bStatsBlks; bp < &bStatsBlks[B_MAX_BLOCKS]; bp++) {
+ if (bp->ptr == NULL) {
+ bp->ptr = ptr;
+ bp->who = fp;
+ if ((bp - bStatsBlks) >= bStatsBlksMax) {
+ bStatsBlksMax = (bp - bStatsBlks) + 1;
+ }
+ break;
+ }
+ }
+}
+
+/******************************************************************************/
+/*
+ * Free statistics
+ */
+
+static void bStatsFree(B_ARGS_DEC, void *ptr, int q, int size)
+{
+ int memSize;
+ bStatsFileType *fp;
+ bStatsBlkType *bp;
+
+ memSize = (1 << (B_SHIFT + q)) + sizeof(bType);
+ bStatsMemInUse -= size;
+ bStatsBallocInUse -= memSize;
+ bStats[q].inuse--;
+
+/*
+ * Update the per block stats. Try from the end first
+ */
+ for (bp = &bStatsBlks[bStatsBlksMax - 1]; bp >= bStatsBlks; bp--) {
+ if (bp->ptr == ptr) {
+ bp->ptr = NULL;
+ fp = bp->who;
+ bp->who = NULL;
+ fp->allocated -= size;
+ fp->count--;
+ return;
+ }
+ }
+}
+
+/******************************************************************************/
+/*
+ * Default output function. Just send to trace channel.
+ */
+
+#undef sprintf
+static void bstatsWrite(int handle, char_t *fmt, ...)
+{
+ va_list args;
+ char_t buf[BUF_MAX];
+
+ va_start(args, fmt);
+ vsprintf(buf, fmt, args);
+ va_end(args);
+ traceRaw(buf);
+}
+
+
+#else /* not B_STATS */
+/******************************************************************************/
+/*
+ * Dummy bstats for external calls that aren't protected by #if B_STATS.
+ */
+
+void bstats(int handle, void (*writefn)(int handle, char_t *fmt, ...))
+{
+}
+#endif /* B_STATS */
+
+/******************************************************************************/
+#ifdef B_VERIFY_CAUSES_SEVERE_OVERHEAD
+/*
+ * The following routines verify the integrity of the balloc memory space.
+ * These functions use the B_FILL feature. Corruption is defined
+ * as bad integrity flags in allocated blocks or data other than B_FILL_CHAR
+ * being found anywhere in the space which is unallocated and that is not a
+ * next pointer in the free queues. a_assert is called if any corruption is
+ * found. CAUTION: These functions add severe processing overhead and should
+ * only be used when searching for a tough corruption problem.
+ */
+
+/******************************************************************************/
+/*
+ * verifyUsedBlock verifies that a block which was previously allocated is
+ * still uncorrupted.
+ */
+
+static void verifyUsedBlock(bType *bp, int q)
+{
+ int memSize, size;
+ char *p;
+
+ memSize = (1 << (B_SHIFT + q)) + sizeof(bType);
+ a_assert((bp->flags & ~B_MALLOCED) == B_INTEGRITY);
+ size = bp->u.size;
+ for (p = ((char *)bp)+sizeof(bType)+size; p < ((char*)bp)+memSize; p++) {
+ a_assert(*p == B_FILL_CHAR);
+ }
+}
+
+/******************************************************************************/
+/*
+ * verifyFreeBlock verifies that a previously free'd block in one of the queues
+ * is still uncorrupted.
+ */
+
+static void verifyFreeBlock(bType *bp, int q)
+{
+ int memSize;
+ char *p;
+
+ memSize = (1 << (B_SHIFT + q)) + sizeof(bType);
+ for (p = ((char *)bp)+sizeof(void*); p < ((char*)bp)+memSize; p++) {
+ a_assert(*p == B_FILL_CHAR);
+ }
+ bp = (bType *)p;
+ a_assert((bp->flags & ~B_MALLOCED) == B_INTEGRITY ||
+ bp->flags == B_FILL_WORD);
+}
+
+/******************************************************************************/
+/*
+ * verifyBallocSpace reads through the entire balloc memory space and
+ * verifies that all allocated blocks are uncorrupted and that, with the
+ * exception of free list next pointers, all other unallocated space is
+ * filled with B_FILL_CHAR.
+ */
+
+void verifyBallocSpace()
+{
+ int q;
+ char *p;
+ bType *bp;
+
+/*
+ * First verify all the free blocks.
+ */
+ for (q = 0; q < B_MAX_CLASS; q++) {
+ for (bp = bQhead[q]; bp != NULL; bp = bp->u.next) {
+ verifyFreeBlock(bp, q);
+ }
+ }
+
+/*
+ * Now verify other space
+ */
+ p = bFreeBuf;
+ while (p < (bFreeBuf + bFreeSize)) {
+ bp = (bType *)p;
+ if (bp->u.size > 0xFFFFF) {
+ p += sizeof(bp->u);
+ while (p < (bFreeBuf + bFreeSize) && *p == B_FILL_CHAR) {
+ p++;
+ }
+ } else {
+ a_assert(((bp->flags & ~B_MALLOCED) == B_INTEGRITY) ||
+ bp->flags == B_FILL_WORD);
+ p += (sizeof(bType) + bp->u.size);
+ while (p < (bFreeBuf + bFreeSize) && *p == B_FILL_CHAR) {
+ p++;
+ }
+ }
+ }
+}
+#endif /* B_VERIFY_CAUSES_SEVERE_OVERHEAD */
+
+/******************************************************************************/
+
+#else /* NO_BALLOC */
+int bopen(void *buf, int bufsize, int flags)
+{
+ return 0;
+}
+
+/******************************************************************************/
+
+void bclose()
+{
+}
+
+/******************************************************************************/
+
+void bstats(int handle, void (*writefn)(int handle, char_t *fmt, ...))
+{
+}
+
+/******************************************************************************/
+
+char_t *bstrdupNoBalloc(char_t *s)
+{
+#ifdef UNICODE
+ if (s) {
+ return wcsdup(s);
+ } else {
+ return wcsdup(T(""));
+ }
+#else
+ return bstrdupANoBalloc(s);
+#endif
+}
+
+/******************************************************************************/
+
+char *bstrdupANoBalloc(char *s)
+{
+ char* buf;
+
+ if (s == NULL) {
+ s = "";
+ }
+ buf = malloc(strlen(s)+1);
+ strcpy(buf, s);
+ return buf;
+}
+
+#endif /* NO_BALLOC */
+/******************************************************************************/
+
+
diff --git a/cleopatre/application/spidgoahead/base64.c b/cleopatre/application/spidgoahead/base64.c
new file mode 100644
index 0000000000..106cbee4f9
--- /dev/null
+++ b/cleopatre/application/spidgoahead/base64.c
@@ -0,0 +1,150 @@
+/*
+ * base64.c -- Base64 Mime encoding
+ *
+ * Copyright (c) GoAhead Software Inc., 1995-2000. All Rights Reserved.
+ *
+ * See the file "license.txt" for usage and redistribution license requirements
+ *
+ * $Id: base64.c,v 1.3 2002/10/24 14:44:50 bporter Exp $
+ */
+
+/******************************** Description *********************************/
+
+/*
+ * The base64 command encodes and decodes a string in mime base64 format
+ */
+
+/********************************* Includes ***********************************/
+
+#include "wsIntrn.h"
+
+/******************************** Local Data **********************************/
+/*
+ * Mapping of ANSI chars to base64 Mime encoding alphabet (see below)
+ */
+
+static char_t map64[] = {
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1,
+ -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
+ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1,
+ -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
+ 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+};
+
+static char_t alphabet64[] = {
+ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
+ 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
+ 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
+ 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f',
+ 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
+ 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
+ 'w', 'x', 'y', 'z', '0', '1', '2', '3',
+ '4', '5', '6', '7', '8', '9', '+', '/',
+};
+
+/*********************************** Code *************************************/
+/*
+ * Decode a buffer from "string" and into "outbuf"
+ */
+
+int websDecode64(char_t *outbuf, char_t *string, int outlen)
+{
+ unsigned long shiftbuf;
+ char_t *cp, *op;
+ int c, i, j, shift;
+
+ op = outbuf;
+ *op = '\0';
+ cp = string;
+ while (*cp && *cp != '=') {
+/*
+ * Map 4 (6bit) input bytes and store in a single long (shiftbuf)
+ */
+ shiftbuf = 0;
+ shift = 18;
+ for (i = 0; i < 4 && *cp && *cp != '='; i++, cp++) {
+ c = map64[*cp & 0xff];
+ if (c == -1) {
+ error(E_L, E_LOG, T("Bad string: %s at %c index %d"), string,
+ c, i);
+ return -1;
+ }
+ shiftbuf = shiftbuf | (c << shift);
+ shift -= 6;
+ }
+/*
+ * Interpret as 3 normal 8 bit bytes (fill in reverse order).
+ * Check for potential buffer overflow before filling.
+ */
+ --i;
+ if ((op + i) >= &outbuf[outlen]) {
+ gstrcpy(outbuf, T("String too big"));
+ return -1;
+ }
+ for (j = 0; j < i; j++) {
+ *op++ = (char_t) ((shiftbuf >> (8 * (2 - j))) & 0xff);
+ }
+ *op = '\0';
+ }
+ return 0;
+}
+
+
+/******************************************************************************/
+/*
+ * Encode a buffer from "string" into "outbuf"
+ */
+
+void websEncode64(char_t *outbuf, char_t *string, int outlen)
+{
+ unsigned long shiftbuf;
+ char_t *cp, *op;
+ int x, i, j, shift;
+
+ op = outbuf;
+ *op = '\0';
+ cp = string;
+ while (*cp) {
+/*
+ * Take three characters and create a 24 bit number in shiftbuf
+ */
+ shiftbuf = 0;
+ for (j = 2; j >= 0 && *cp; j--, cp++) {
+ shiftbuf |= ((*cp & 0xff) << (j * 8));
+ }
+/*
+ * Now convert shiftbuf to 4 base64 letters. The i,j magic calculates
+ * how many letters need to be output.
+ */
+ shift = 18;
+ for (i = ++j; i < 4 && op < &outbuf[outlen] ; i++) {
+ x = (shiftbuf >> shift) & 0x3f;
+ *op++ = alphabet64[(shiftbuf >> shift) & 0x3f];
+ shift -= 6;
+ }
+/*
+ * Pad at the end with '='
+ */
+ while (j-- > 0) {
+ *op++ = '=';
+ }
+ *op = '\0';
+ }
+}
+/******************************************************************************/
+
diff --git a/cleopatre/application/spidgoahead/cgi.c b/cleopatre/application/spidgoahead/cgi.c
new file mode 100644
index 0000000000..3e47abccd6
--- /dev/null
+++ b/cleopatre/application/spidgoahead/cgi.c
@@ -0,0 +1,332 @@
+/*
+ * cgi.c -- CGI processing (for the GoAhead Web server
+ *
+ * Copyright (c) GoAhead Software Inc., 1995-2000. All Rights Reserved.
+ *
+ * See the file "license.txt" for usage and redistribution license requirements
+ *
+ * $Id: cgi.c,v 1.3 2002/10/24 14:44:50 bporter Exp $
+ */
+
+/********************************** Description *******************************/
+/*
+ * This module implements the /cgi-bin handler. CGI processing differs from
+ * goforms processing in that each CGI request is executed as a separate
+ * process, rather than within the webserver process. For each CGI request the
+ * environment of the new process must be set to include all the CGI variables
+ * and its standard input and output must be directed to the socket. This
+ * is done using temporary files.
+ */
+
+/*********************************** Includes *********************************/
+#include "wsIntrn.h"
+#ifdef UEMF
+ #include "uemf.h"
+#else
+ #include "basic/basicInternal.h"
+#endif
+
+/************************************ Locals **********************************/
+typedef struct { /* Struct for CGI tasks which have completed */
+ webs_t wp; /* pointer to session websRec */
+ char_t *stdIn; /* file desc. for task's temp input fd */
+ char_t *stdOut; /* file desc. for task's temp output fd */
+ char_t *cgiPath; /* path to executable process file */
+ char_t **argp; /* pointer to buf containing argv tokens */
+ char_t **envp; /* pointer to array of environment strings */
+ int handle; /* process handle of the task */
+ long fplacemark; /* seek location for CGI output file */
+} cgiRec;
+static cgiRec **cgiList; /* hAlloc chain list of wp's to be closed */
+static int cgiMax; /* Size of hAlloc list */
+
+/************************************* Code ***********************************/
+
+/*
+ * Process a form request. Returns 1 always to indicate it handled the URL
+ */
+int websCgiHandler(webs_t wp, char_t *urlPrefix, char_t *webDir, int arg,
+ char_t *url, char_t *path, char_t* query)
+{
+ cgiRec *cgip;
+ sym_t *s;
+ char_t cgiBuf[FNAMESIZE], *stdIn, *stdOut, cwd[FNAMESIZE];
+ char_t *cp, *cgiName, *cgiPath, **argp, **envp, **ep;
+ int n, envpsize, argpsize, pHandle, cid;
+ a_assert(websValid(wp));
+ a_assert(url && *url);
+ a_assert(path && *path == '/');
+ websStats.cgiHits++;
+/*
+ * Extract the form name and then build the full path name. The form
+ * name will follow the first '/' in path.
+ */
+ gstrncpy(cgiBuf, path, TSZ(cgiBuf));
+ if ((cgiName = gstrchr(&cgiBuf[1], '/')) == NULL) {
+ websError(wp, 200, T("Missing CGI name"));
+ return 1;
+ }
+ cgiName++;
+ if ((cp = gstrchr(cgiName, '/')) != NULL) {
+ *cp = '\0';
+ }
+ fmtAlloc(&cgiPath, FNAMESIZE, T("%s/%s/%s"), websGetDefaultDir(),
+ CGI_BIN, cgiName);
+#ifndef VXWORKS
+/*
+ * See if the file exists and is executable. If not error out.
+ * Don't do this step for VxWorks, since the module may already
+ * be part of the OS image, rather than in the file system.
+ */
+ {
+ gstat_t sbuf;
+ if (gstat(cgiPath, &sbuf) != 0 || (sbuf.st_mode & S_IFREG) == 0) {
+ websError(wp, 200, T("CGI process file does not exist"));
+ bfree(B_L, cgiPath);
+ return 1;
+ }
+#if (defined (WIN) || defined (CE))
+ if (gstrstr(cgiPath, T(".exe")) == NULL &&
+ gstrstr(cgiPath, T(".bat")) == NULL) {
+#elif (defined (NW))
+ if (gstrstr(cgiPath, T(".nlm")) == NULL) {
+#else
+ if (gaccess(cgiPath, X_OK) != 0) {
+#endif /* WIN || CE */
+ websError(wp, 200, T("CGI process file is not executable"));
+ bfree(B_L, cgiPath);
+ return 1;
+ }
+ }
+#endif /* ! VXWORKS */
+
+
+/*
+ * Get the CWD for resetting after launching the child process CGI
+ */
+ ggetcwd(cwd, FNAMESIZE);
+/*
+ * Retrieve the directory of the child process CGI
+ */
+ if ((cp = gstrrchr(cgiPath, '/')) != NULL) {
+ *cp = '\0';
+ gchdir(cgiPath);
+ *cp = '/';
+ }
+/*
+ * Build command line arguments. Only used if there is no non-encoded
+ * = character. This is indicative of a ISINDEX query. POST separators
+ * are & and others are +. argp will point to a balloc'd array of
+ * pointers. Each pointer will point to substring within the
+ * query string. This array of string pointers is how the spawn or
+ * exec routines expect command line arguments to be passed. Since
+ * we don't know ahead of time how many individual items there are in
+ * the query string, the for loop includes logic to grow the array
+ * size via brealloc.
+ */
+ argpsize = 10;
+ argp = balloc(B_L, argpsize * sizeof(char_t *));
+ *argp = cgiPath;
+ n = 1;
+ if (gstrchr(query, '=') == NULL) {
+ websDecodeUrl(query, query, gstrlen(query));
+ for (cp = gstrtok(query, T(" ")); cp != NULL; ) {
+ *(argp+n) = cp;
+ n++;
+ if (n >= argpsize) {
+ argpsize *= 2;
+ argp = brealloc(B_L, argp, argpsize * sizeof(char_t *));
+ }
+ cp = gstrtok(NULL, T(" "));
+ }
+ }
+ *(argp+n) = NULL;
+/*
+ * Add all CGI variables to the environment strings to be passed
+ * to the spawned CGI process. This includes a few we don't
+ * already have in the symbol table, plus all those that are in
+ * the cgiVars symbol table. envp will point to a balloc'd array of
+ * pointers. Each pointer will point to a balloc'd string containing
+ * the keyword value pair in the form keyword=value. Since we don't
+ * know ahead of time how many environment strings there will be the
+ * for loop includes logic to grow the array size via brealloc.
+ */
+ envpsize = WEBS_SYM_INIT;
+ envp = balloc(B_L, envpsize * sizeof(char_t *));
+ n = 0;
+ fmtAlloc(envp+n, FNAMESIZE, T("%s=%s"),T("PATH_TRANSLATED"), cgiPath);
+ n++;
+ fmtAlloc(envp+n, FNAMESIZE, T("%s=%s/%s"),T("SCRIPT_NAME"),
+ CGI_BIN, cgiName);
+ n++;
+ fmtAlloc(envp+n, FNAMESIZE, T("%s=%s"),T("REMOTE_USER"), wp->userName);
+ n++;
+ fmtAlloc(envp+n, FNAMESIZE, T("%s=%s"),T("AUTH_TYPE"), wp->authType);
+ n++;
+ for (s = symFirst(wp->cgiVars); s != NULL; s = symNext(wp->cgiVars)) {
+ if (s->content.valid && s->content.type == string &&
+ gstrcmp(s->name.value.string, T("REMOTE_HOST")) != 0 &&
+ gstrcmp(s->name.value.string, T("HTTP_AUTHORIZATION")) != 0) {
+ fmtAlloc(envp+n, FNAMESIZE, T("%s=%s"), s->name.value.string,
+ s->content.value.string);
+ n++;
+ if (n >= envpsize) {
+ envpsize *= 2;
+ envp = brealloc(B_L, envp, envpsize * sizeof(char_t *));
+ }
+ }
+ }
+ *(envp+n) = NULL;
+/*
+ * Create temporary file name(s) for the child's stdin and stdout.
+ * For POST data the stdin temp file (and name) should already exist.
+ */
+ if (wp->cgiStdin == NULL) {
+ wp->cgiStdin = websGetCgiCommName();
+ }
+ stdIn = wp->cgiStdin;
+ stdOut = websGetCgiCommName();
+/*
+ * Now launch the process. If not successful, do the cleanup of resources.
+ * If successful, the cleanup will be done after the process completes.
+ */
+ if ((pHandle = websLaunchCgiProc(cgiPath, argp, envp, stdIn, stdOut))
+ == -1) {
+ websError(wp, 200, T("failed to spawn CGI task"));
+ for (ep = envp; *ep != NULL; ep++) {
+ bfreeSafe(B_L, *ep);
+ }
+ bfreeSafe(B_L, cgiPath);
+ bfreeSafe(B_L, argp);
+ bfreeSafe(B_L, envp);
+ bfreeSafe(B_L, stdOut);
+ } else {
+/*
+ * If the spawn was successful, put this wp on a queue to be
+ * checked for completion.
+ */
+ cid = hAllocEntry((void***) &cgiList, &cgiMax, sizeof(cgiRec));
+ cgip = cgiList[cid];
+ cgip->handle = pHandle;
+ cgip->stdIn = stdIn;
+ cgip->stdOut = stdOut;
+ cgip->cgiPath = cgiPath;
+ cgip->argp = argp;
+ cgip->envp = envp;
+ cgip->wp = wp;
+ cgip->fplacemark = 0;
+ websTimeoutCancel(wp);
+ }
+/*
+ * Restore the current working directory after spawning child CGI
+ */
+ gchdir(cwd);
+ return 1;
+}
+
+
+
+/******************************************************************************/
+/*
+ * Any entry in the cgiList need to be checked to see if it has
+ */
+void websCgiGatherOutput (cgiRec *cgip)
+{
+ gstat_t sbuf;
+ char_t cgiBuf[FNAMESIZE];
+ if ((gstat(cgip->stdOut, &sbuf) == 0) &&
+ (sbuf.st_size > cgip->fplacemark)) {
+ int fdout;
+ fdout = gopen(cgip->stdOut, O_RDONLY | O_BINARY, 0444 );
+/*
+ * Check to see if any data is available in the
+ * output file and send its contents to the socket.
+ */
+ if (fdout >= 0) {
+ webs_t wp = cgip->wp;
+ int nRead;
+/*
+ * Write the HTTP header on our first pass
+ */
+ if (cgip->fplacemark == 0) {
+ websWrite(wp, T("HTTP/1.0 200 OK\r\n"));
+ }
+ glseek(fdout, cgip->fplacemark, SEEK_SET);
+ while ((nRead = gread(fdout, cgiBuf, FNAMESIZE)) > 0) {
+ websWriteBlock(wp, cgiBuf, nRead);
+ cgip->fplacemark += nRead;
+ }
+ gclose(fdout);
+ }
+ }
+}
+
+
+
+/******************************************************************************/
+/*
+ * Any entry in the cgiList need to be checked to see if it has
+ * completed, and if so, process its output and clean up.
+ */
+void websCgiCleanup()
+{
+ cgiRec *cgip;
+ webs_t wp;
+ char_t **ep;
+ int cid, nTries;
+ for (cid = 0; cid < cgiMax; cid++) {
+ if ((cgip = cgiList[cid]) != NULL) {
+ wp = cgip->wp;
+ websCgiGatherOutput (cgip);
+ if (websCheckCgiProc(cgip->handle) == 0) {
+/*
+ * We get here if the CGI process has terminated. Clean up.
+ */
+ nTries = 0;
+/*
+ * Make sure we didn't miss something during a task switch.
+ * Maximum wait is 100 times 10 msecs (1 second).
+ */
+ while ((cgip->fplacemark == 0) && (nTries < 100)) {
+ websCgiGatherOutput(cgip);
+/*
+ * There are some cases when we detect app exit
+ * before the file is ready.
+ */
+ if (cgip->fplacemark == 0) {
+#ifdef WIN
+ Sleep(10);
+#endif /* WIN*/
+ }
+ nTries++;
+ }
+ if (cgip->fplacemark == 0) {
+ websError(wp, 200, T("CGI generated no output"));
+ } else {
+ websDone(wp, 200);
+ }
+/*
+ * Remove the temporary re-direction files
+ */
+ gunlink(cgip->stdIn);
+ gunlink(cgip->stdOut);
+/*
+ * Free all the memory buffers pointed to by cgip.
+ * The stdin file name (wp->cgiStdin) gets freed as
+ * part of websFree().
+ */
+ cgiMax = hFree((void***) &cgiList, cid);
+ for (ep = cgip->envp; ep != NULL && *ep != NULL; ep++) {
+ bfreeSafe(B_L, *ep);
+ }
+ bfreeSafe(B_L, cgip->cgiPath);
+ bfreeSafe(B_L, cgip->argp);
+ bfreeSafe(B_L, cgip->envp);
+ bfreeSafe(B_L, cgip->stdOut);
+ bfreeSafe(B_L, cgip);
+ }
+ }
+ }
+}
+/******************************************************************************/
+
diff --git a/cleopatre/application/spidgoahead/default.c b/cleopatre/application/spidgoahead/default.c
new file mode 100644
index 0000000000..a2ba7def3e
--- /dev/null
+++ b/cleopatre/application/spidgoahead/default.c
@@ -0,0 +1,603 @@
+/*
+ * default.c -- Default URL handler. Includes support for ASP.
+ *
+ * Copyright (c) GoAhead Software Inc., 1995-2000. All Rights Reserved.
+ *
+ * See the file "license.txt" for usage and redistribution license requirements
+ *
+ * $Id: default.c,v 1.9 2003/04/11 18:10:28 bporter Exp $
+ */
+
+/******************************** Description *********************************/
+
+/*
+ * This module provides default URL handling and Active Server Page support.
+ *
+ * In many cases we don't check the return code of calls to websWrite as
+ * it is easier, smaller and non-fatal to continue even when the requesting
+ * browser has gone away.
+ */
+
+/********************************* Includes ***********************************/
+
+#include "wsIntrn.h"
+
+/*********************************** Locals ***********************************/
+
+static char_t *websDefaultPage; /* Default page name */
+static char_t *websDefaultDir; /* Default Web page directory */
+
+/**************************** Forward Declarations ****************************/
+
+static void websDefaultWriteEvent(webs_t wp);
+
+/*********************************** Code *************************************/
+/*
+ * Process a default URL request. This will validate the URL and handle "../"
+ * and will provide support for Active Server Pages. As the handler is the
+ * last handler to run, it always indicates that it has handled the URL
+ * by returning 1.
+ */
+
+int websDefaultHandler(webs_t wp, char_t *urlPrefix, char_t *webDir, int arg,
+ char_t *url, char_t *path, char_t *query)
+{
+ websStatType sbuf;
+ char_t *lpath, *tmp, *date;
+ int bytes, flags, nchars;
+
+ a_assert(websValid(wp));
+ a_assert(url && *url);
+ a_assert(path);
+ a_assert(query);
+
+/*
+ * Validate the URL and ensure that ".."s don't give access to unwanted files
+ */
+ flags = websGetRequestFlags(wp);
+
+ if (websValidateUrl(wp, path) < 0)
+ {
+ /*
+ * preventing a cross-site scripting exploit -- you may restore the
+ * following line of code to revert to the original behavior...
+ */
+ /*websError(wp, 500, T("Invalid URL %s"), url);*/
+ websError(wp, 500, T("Invalid URL"));
+ return 1;
+ }
+ lpath = websGetRequestLpath(wp);
+ nchars = gstrlen(lpath) - 1;
+ if (lpath[nchars] == '/' || lpath[nchars] == '\\') {
+ lpath[nchars] = '\0';
+ }
+
+/*
+ * If the file is a directory, redirect using the nominated default page
+ */
+ if (websPageIsDirectory(lpath)) {
+ nchars = gstrlen(path);
+ if (path[nchars-1] == '/' || path[nchars-1] == '\\') {
+ path[--nchars] = '\0';
+ }
+ nchars += gstrlen(websDefaultPage) + 2;
+ fmtAlloc(&tmp, nchars, T("%s/%s"), path, websDefaultPage);
+ websRedirect(wp, tmp);
+ bfreeSafe(B_L, tmp);
+ return 1;
+ }
+
+/*
+ * Open the document. Stat for later use.
+ */
+ if (websPageOpen(wp, lpath, path, SOCKET_RDONLY | SOCKET_BINARY,
+ 0666) < 0)
+ {
+ /* 10 Dec 02 BgP -- according to
+ * <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html>,
+ * the proper code to return here is NOT 400 (old code), which is used
+ * to indicate a malformed request. Here, the request is good, but the
+ * error we need to tell the client about is 404 (Not Found).
+ */
+ /*
+ * 17 Mar 03 BgP -- prevent a cross-site scripting exploit
+ websError(wp, 404, T("Cannot open URL %s"), url);
+ */
+
+ websError(wp, 404, T("Cannot open URL"));
+ return 1;
+ }
+
+ if (websPageStat(wp, lpath, path, &sbuf) < 0) {
+ /*
+ * 17 Mar 03 BgP
+ * prevent a cross-site scripting exploit
+ websError(wp, 400, T("Cannot stat page for URL %s"), url);
+ */
+ websError(wp, 400, T("Cannot stat page for URL"));
+ return 1;
+ }
+
+/*
+ * If the page has not been modified since the user last received it and it
+ * is not dynamically generated each time (ASP), then optimize request by
+ * sending a 304 Use local copy response
+ */
+ websStats.localHits++;
+#ifdef WEBS_IF_MODIFIED_SUPPORT
+ if (flags & WEBS_IF_MODIFIED && !(flags & WEBS_ASP)) {
+ if (sbuf.mtime <= wp->since) {
+ websWrite(wp, T("HTTP/1.0 304 Use local copy\r\n"));
+
+/*
+ * by license terms the following line of code must
+ * not be modified.
+ */
+ websWrite(wp, T("Server: %s\r\n"), WEBS_NAME);
+
+ if (flags & WEBS_KEEP_ALIVE) {
+ websWrite(wp, T("Connection: keep-alive\r\n"));
+ }
+ websWrite(wp, T("\r\n"));
+ websSetRequestFlags(wp, flags |= WEBS_HEADER_DONE);
+ websDone(wp, 304);
+ return 1;
+ }
+ }
+#endif
+
+/*
+ * Output the normal HTTP response header
+ */
+ if ((date = websGetDateString(NULL)) != NULL) {
+ websWrite(wp, T("HTTP/1.0 200 OK\r\nDate: %s\r\n"), date);
+
+/*
+ * By license terms the following line of code must not be modified.
+ */
+ websWrite(wp, T("Server: %s\r\n"), WEBS_NAME);
+ bfree(B_L, date);
+ }
+ flags |= WEBS_HEADER_DONE;
+
+/*
+ * If this is an ASP request, ensure the remote browser doesn't cache it.
+ * Send back both HTTP/1.0 and HTTP/1.1 cache control directives
+ */
+ if (flags & WEBS_ASP) {
+ bytes = 0;
+ websWrite(wp, T("Pragma: no-cache\r\nCache-Control: no-cache\r\n"));
+
+ } else {
+ if ((date = websGetDateString(&sbuf)) != NULL) {
+ websWrite(wp, T("Last-modified: %s\r\n"), date);
+ bfree(B_L, date);
+ }
+ bytes = sbuf.size;
+ }
+
+ if (bytes) {
+ websWrite(wp, T("Content-length: %d\r\n"), bytes);
+ websSetRequestBytes(wp, bytes);
+ }
+ websWrite(wp, T("Content-type: %s\r\n"), websGetRequestType(wp));
+
+ if ((flags & WEBS_KEEP_ALIVE) && !(flags & WEBS_ASP)) {
+ websWrite(wp, T("Connection: keep-alive\r\n"));
+ }
+ websWrite(wp, T("\r\n"));
+
+/*
+ * All done if the browser did a HEAD request
+ */
+ if (flags & WEBS_HEAD_REQUEST) {
+ websDone(wp, 200);
+ return 1;
+ }
+
+/*
+ * Evaluate ASP requests
+ */
+ if (flags & WEBS_ASP) {
+ if (websAspRequest(wp, lpath) < 0) {
+ return 1;
+ }
+ websDone(wp, 200);
+ return 1;
+ }
+
+#ifdef WEBS_SSL_SUPPORT
+ if (wp->flags & WEBS_SECURE) {
+ websDefaultWriteEvent(wp);
+ } else {
+ websSetRequestSocketHandler(wp, SOCKET_WRITABLE, websDefaultWriteEvent);
+ }
+#else
+/*
+ * For normal web documents, return the data via background write
+ */
+ websSetRequestSocketHandler(wp, SOCKET_WRITABLE, websDefaultWriteEvent);
+#endif
+ return 1;
+}
+
+
+#ifdef WIN32
+
+static int badPath(char_t* path, char_t* badPath, int badLen)
+{
+ int retval = 0;
+ int len = gstrlen(path);
+ int i = 0;
+
+ if (len <= badLen +1)
+ {
+ for (i = 0; i < badLen; ++i)
+ {
+ if (badPath[i] != gtolower(path[i]))
+ {
+ return 0;
+ }
+ }
+ /* if we get here, the first 'badLen' characters match.
+ * If 'path' is 1 character larger than 'badPath' and that extra
+ * character is NOT a letter or a number, we have a bad path.
+ */
+ retval = 1;
+ if (badLen + 1 == len)
+ {
+ /* e.g. path == "aux:" */
+ if (gisalnum(path[len-1]))
+ {
+ /* the last character is alphanumeric, so we let this path go
+ * through.
+ */
+ retval = 0;
+ }
+ }
+ }
+
+ return retval;
+}
+
+
+static int isBadWindowsPath(char_t** parts, int partCount)
+{
+ /*
+ * If we're running on Windows 95/98/ME, malicious users can crash the
+ * OS by requesting an URL with any of several reserved DOS device names
+ * in them (AUX, NUL, etc.).
+ * If we're running on any of those OS versions, we scan the URL
+ * for paths with any of these elements before
+ * trying to access them. If any of the subdirectory names match one
+ * of our prohibited links, we declare this to be a 'bad' path, and return
+ * 1 to indicate this. This may be an overly heavy-handed approach, but should
+ * prevent the DOS attack.
+ * NOTE that this function is only compiled in when we are running on Win32,
+ * and only has an effect when we are running on Win95/98, or ME. On all other
+ * versions of Windows, we check the version info, and return 0 immediately.
+ *
+ * According to http://packetstormsecurity.nl/0003-exploits/SCX-SA-01.txt:
+
+ * II. Problem Description
+ * When the Microsoft Windows operating system is parsing a path that
+ * is being crafted like "c:\[device]\[device]" it will halt, and crash
+ * the entire operating system.
+ * Four device drivers have been found to crash the system. The CON,
+ * NUL, AUX, CLOCK$ and CONFIG$ are the two device drivers which are
+ * known to crash. Other devices as LPT[x]:, COM[x]: and PRN have not
+ * been found to crash the system.
+ * Making combinations as CON\NUL, NUL\CON, AUX\NUL, ... seems to
+ * crash Ms Windows as well.
+ * Calling a path such as "C:\CON\[filename]" won't result in a crash
+ * but in an error-message. Creating the map "CON", "CLOCK$", "AUX"
+ * "NUL" or "CONFIG$" will also result in a simple error-message
+ * saying: ''creating that map isn't allowed''.
+ *
+ * returns 1 if it finds a bad path element.
+ */
+ OSVERSIONINFO version;
+ int i;
+ version.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
+ if (GetVersionEx(&version))
+ {
+ if (VER_PLATFORM_WIN32_NT != version.dwPlatformId)
+ {
+ /*
+ * we are currently running on 95/98/ME.
+ */
+ for (i = 0; i < partCount; ++i)
+ {
+ /*
+ * check against the prohibited names. If any of our requested
+ * subdirectories match any of these, return '1' immediately.
+ */
+
+ if (
+ (badPath(parts[i], T("con"), 3)) ||
+ (badPath(parts[i], T("nul"), 3)) ||
+ (badPath(parts[i], T("aux"), 3)) ||
+ (badPath(parts[i], T("clock$"), 6)) ||
+ (badPath(parts[i], T("config$"), 7)) )
+ {
+ return 1;
+ }
+ }
+ }
+ }
+ /*
+ * either we're not on one of the bad OS versions, or the request has
+ * no problems.
+ */
+ return 0;
+}
+#endif
+
+
+/******************************************************************************/
+/*
+ * Validate the URL path and process ".." path segments. Return -1 if the URL
+ * is bad.
+ */
+
+int websValidateUrl(webs_t wp, char_t *path)
+{
+ /*
+ Thanks to Dhanwa T (dhanwa@polyserve.com) for this fix -- previously,
+ if an URL was requested having more than (the hardcoded) 64 parts,
+ the webServer would experience a hard crash as it attempted to
+ write past the end of the array 'parts'.
+ */
+
+#define kMaxUrlParts 64
+ char_t *parts[kMaxUrlParts]; /* Array of ptr's to URL parts */
+ char_t *token, *dir, *lpath;
+ int i, len, npart;
+
+ a_assert(websValid(wp));
+ a_assert(path);
+
+ dir = websGetRequestDir(wp);
+ if (dir == NULL || *dir == '\0') {
+ return -1;
+ }
+
+/*
+ * Copy the string so we don't destroy the original
+ */
+ path = bstrdup(B_L, path);
+ websDecodeUrl(path, path, gstrlen(path));
+
+ len = npart = 0;
+ parts[0] = NULL;
+
+ /*
+ * 22 Jul 02 -- there were reports that a directory traversal exploit was
+ * possible in the WebServer running under Windows if directory paths
+ * outside the server's specified root web were given by URL-encoding the
+ * backslash character, like:
+ *
+ * GoAhead is vulnerable to a directory traversal bug. A request such as
+ *
+ * GoAhead-server/../../../../../../../ results in an error message
+ * 'Cannot open URL'.
+
+ * However, by encoding the '/' character, it is possible to break out of
+ * the
+ * web root and read arbitrary files from the server.
+ * Hence a request like:
+ *
+ * GoAhead-server/..%5C..%5C..%5C..%5C..%5C..%5C/winnt/win.ini returns the
+ * contents of the win.ini file.
+ * (Note that the description uses forward slashes (0x2F), but the example
+ * uses backslashes (0x5C). In my tests, forward slashes are correctly
+ * trapped, but backslashes are not. The code below substitutes forward
+ * slashes for backslashes before attempting to validate that there are no
+ * unauthorized paths being accessed.
+ */
+ token = gstrchr(path, '\\');
+ while (token != NULL)
+ {
+ *token = '/';
+ token = gstrchr(token, '\\');
+ }
+
+ token = gstrtok(path, T("/"));
+
+/*
+ * Look at each directory segment and process "." and ".." segments
+ * Don't allow the browser to pop outside the root web.
+ */
+ while (token != NULL)
+ {
+ if (npart >= kMaxUrlParts)
+ {
+ /*
+ * malformed URL -- too many parts for us to process.
+ */
+ bfree(B_L, path);
+ return -1;
+ }
+ if (gstrcmp(token, T("..")) == 0)
+ {
+ if (npart > 0)
+ {
+ npart--;
+ }
+
+ }
+ else if (gstrcmp(token, T(".")) != 0)
+ {
+ parts[npart] = token;
+ len += gstrlen(token) + 1;
+ npart++;
+ }
+ token = gstrtok(NULL, T("/"));
+ }
+
+#ifdef WIN32
+ if (isBadWindowsPath(parts, npart))
+ {
+ bfree(B_L, path);
+ return -1;
+ }
+
+#endif
+
+/*
+ * Create local path for document. Need extra space all "/" and null.
+ */
+ if (npart || (gstrcmp(path, T("/")) == 0) || (path[0] == '\0'))
+ {
+ lpath = balloc(B_L, (gstrlen(dir) + 1 + len + 1) * sizeof(char_t));
+ gstrcpy(lpath, dir);
+
+ for (i = 0; i < npart; i++)
+ {
+ gstrcat(lpath, T("/"));
+ gstrcat(lpath, parts[i]);
+ }
+ websSetRequestLpath(wp, lpath);
+ bfree(B_L, path);
+ bfree(B_L, lpath);
+
+ }
+ else
+ {
+ bfree(B_L, path);
+ return -1;
+ }
+ return 0;
+}
+
+/******************************************************************************/
+/*
+ * Do output back to the browser in the background. This is a socket
+ * write handler.
+ */
+
+static void websDefaultWriteEvent(webs_t wp)
+{
+ int len, wrote, flags, bytes, written;
+ char *buf;
+
+ a_assert(websValid(wp));
+
+ flags = websGetRequestFlags(wp);
+
+ websSetTimeMark(wp);
+
+ wrote = bytes = 0;
+ written = websGetRequestWritten(wp);
+
+/*
+ * We only do this for non-ASP documents
+ */
+ if ( !(flags & WEBS_ASP)) {
+ bytes = websGetRequestBytes(wp);
+/*
+ * Note: websWriteDataNonBlock may return less than we wanted. It will
+ * return -1 on a socket error
+ */
+ if ((buf = balloc(B_L, PAGE_READ_BUFSIZE)) == NULL) {
+ websError(wp, 200, T("Can't get memory"));
+ } else {
+ while ((len = websPageReadData(wp, buf, PAGE_READ_BUFSIZE)) > 0) {
+ if ((wrote = websWriteDataNonBlock(wp, buf, len)) < 0) {
+ break;
+ }
+ written += wrote;
+ if (wrote != len) {
+ websPageSeek(wp, - (len - wrote));
+ break;
+ }
+ }
+/*
+ * Safety. If we are at EOF, we must be done
+ */
+ if (len == 0) {
+ a_assert(written >= bytes);
+ written = bytes;
+ }
+ bfree(B_L, buf);
+ }
+ }
+
+/*
+ * We're done if an error, or all bytes output
+ */
+ websSetRequestWritten(wp, written);
+ if (wrote < 0 || written >= bytes) {
+ websDone(wp, 200);
+ }
+}
+
+/******************************************************************************/
+/*
+ * Closing down. Free resources.
+ */
+
+void websDefaultClose()
+{
+ if (websDefaultPage) {
+ bfree(B_L, websDefaultPage);
+ websDefaultPage = NULL;
+ }
+ if (websDefaultDir) {
+ bfree(B_L, websDefaultDir);
+ websDefaultDir = NULL;
+ }
+}
+
+/******************************************************************************/
+/*
+ * Get the default page for URL requests ending in "/"
+ */
+
+char_t *websGetDefaultPage()
+{
+ return websDefaultPage;
+}
+
+/******************************************************************************/
+/*
+ * Get the default web directory
+ */
+
+char_t *websGetDefaultDir()
+{
+ return websDefaultDir;
+}
+
+/******************************************************************************/
+/*
+ * Set the default page for URL requests ending in "/"
+ */
+
+void websSetDefaultPage(char_t *page)
+{
+ a_assert(page && *page);
+
+ if (websDefaultPage) {
+ bfree(B_L, websDefaultPage);
+ }
+ websDefaultPage = bstrdup(B_L, page);
+}
+
+/******************************************************************************/
+/*
+ * Set the default web directory
+ */
+
+void websSetDefaultDir(char_t *dir)
+{
+ a_assert(dir && *dir);
+ if (websDefaultDir) {
+ bfree(B_L, websDefaultDir);
+ }
+ websDefaultDir = bstrdup(B_L, dir);
+}
+
+/******************************************************************************/
+
+
diff --git a/cleopatre/application/spidgoahead/default.css b/cleopatre/application/spidgoahead/default.css
new file mode 100644
index 0000000000..9b6f39c035
--- /dev/null
+++ b/cleopatre/application/spidgoahead/default.css
@@ -0,0 +1,188 @@
+/*
+:Author: David Goodger
+:Contact: goodger@users.sourceforge.net
+:date: $Date: 2003/03/18 21:43:49 $
+:version: $Revision: 1.1 $
+:copyright: This stylesheet has been placed in the public domain.
+
+Default cascading style sheet for the HTML output of Docutils.
+*/
+
+.first {
+ margin-top: 0 }
+
+.last {
+ margin-bottom: 0 }
+
+a.toc-backref {
+ text-decoration: none ;
+ color: black }
+
+dd {
+ margin-bottom: 0.5em }
+
+div.abstract {
+ margin: 2em 5em }
+
+div.abstract p.topic-title {
+ font-weight: bold ;
+ text-align: center }
+
+div.attention, div.caution, div.danger, div.error, div.hint,
+div.important, div.note, div.tip, div.warning {
+ margin: 2em ;
+ border: medium outset ;
+ padding: 1em }
+
+div.attention p.admonition-title, div.caution p.admonition-title,
+div.danger p.admonition-title, div.error p.admonition-title,
+div.warning p.admonition-title {
+ color: red ;
+ font-weight: bold ;
+ font-family: sans-serif }
+
+div.hint p.admonition-title, div.important p.admonition-title,
+div.note p.admonition-title, div.tip p.admonition-title {
+ font-weight: bold ;
+ font-family: sans-serif }
+
+div.dedication {
+ margin: 2em 5em ;
+ text-align: center ;
+ font-style: italic }
+
+div.dedication p.topic-title {
+ font-weight: bold ;
+ font-style: normal }
+
+div.figure {
+ margin-left: 2em }
+
+div.footer, div.header {
+ font-size: smaller }
+
+div.system-messages {
+ margin: 5em }
+
+div.system-messages h1 {
+ color: red }
+
+div.system-message {
+ border: medium outset ;
+ padding: 1em }
+
+div.system-message p.system-message-title {
+ color: red ;
+ font-weight: bold }
+
+div.topic {
+ margin: 2em }
+
+h1.title {
+ text-align: center }
+
+h2.subtitle {
+ text-align: center }
+
+hr {
+ width: 75% }
+
+ol.simple, ul.simple {
+ margin-bottom: 1em }
+
+ol.arabic {
+ list-style: decimal }
+
+ol.loweralpha {
+ list-style: lower-alpha }
+
+ol.upperalpha {
+ list-style: upper-alpha }
+
+ol.lowerroman {
+ list-style: lower-roman }
+
+ol.upperroman {
+ list-style: upper-roman }
+
+p.caption {
+ font-style: italic }
+
+p.credits {
+ font-style: italic ;
+ font-size: smaller }
+
+p.label {
+ white-space: nowrap }
+
+p.topic-title {
+ font-weight: bold }
+
+pre.address {
+ margin-bottom: 0 ;
+ margin-top: 0 ;
+ font-family: serif ;
+ font-size: 100% }
+
+pre.line-block {
+ font-family: serif ;
+ font-size: 100% }
+
+pre.literal-block, pre.doctest-block {
+ margin-left: 2em ;
+ margin-right: 2em ;
+ background-color: #eeeeee }
+
+span.classifier {
+ font-family: sans-serif ;
+ font-style: oblique }
+
+span.classifier-delimiter {
+ font-family: sans-serif ;
+ font-weight: bold }
+
+span.interpreted {
+ font-family: sans-serif }
+
+span.option-argument {
+ font-style: italic }
+
+span.pre {
+ white-space: pre }
+
+span.problematic {
+ color: red }
+
+table {
+ margin-top: 0.5em ;
+ margin-bottom: 0.5em }
+
+table.citation {
+ border-left: solid thin gray ;
+ padding-left: 0.5ex }
+
+table.docinfo {
+ margin: 2em 4em }
+
+table.footnote {
+ border-left: solid thin black ;
+ padding-left: 0.5ex }
+
+td, th {
+ padding-left: 0.5em ;
+ padding-right: 0.5em ;
+ vertical-align: top }
+
+th.docinfo-name, th.field-name {
+ font-weight: bold ;
+ text-align: left ;
+ white-space: nowrap }
+
+h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt {
+ font-size: 100% }
+
+tt {
+ background-color: #eeeeee }
+
+ul.auto-toc {
+ list-style-type: none }
diff --git a/cleopatre/application/spidgoahead/doc/spc300_spidgoahead_archi.odt b/cleopatre/application/spidgoahead/doc/spc300_spidgoahead_archi.odt
new file mode 100644
index 0000000000..a71c8f7038
--- /dev/null
+++ b/cleopatre/application/spidgoahead/doc/spc300_spidgoahead_archi.odt
Binary files differ
diff --git a/cleopatre/application/spidgoahead/ej.h b/cleopatre/application/spidgoahead/ej.h
new file mode 100644
index 0000000000..ddcc4633d3
--- /dev/null
+++ b/cleopatre/application/spidgoahead/ej.h
@@ -0,0 +1,47 @@
+/*
+ * ej.h -- Ejscript(TM) header
+ *
+ * Copyright (c) GoAhead Software Inc., 1992-2000. All Rights Reserved.
+ *
+ * See the file "license.txt" for information on usage and redistribution
+ *
+ * $Id: ej.h,v 1.3 2002/10/24 14:44:50 bporter Exp $
+ */
+
+#ifndef _h_EJ
+#define _h_EJ 1
+
+/******************************** Description *********************************/
+
+/*
+ * GoAhead Ejscript(TM) header. This defines the Ejscript API and internal
+ * structures.
+ */
+
+/********************************* Includes ***********************************/
+
+#ifndef UEMF
+ #include "basic/basic.h"
+ #include "emf/emf.h"
+#else
+ #include "uemf.h"
+#endif
+
+/********************************** Defines ***********************************/
+
+/******************************** Prototypes **********************************/
+
+extern int ejArgs(int argc, char_t **argv, char_t *fmt, ...);
+extern void ejSetResult(int eid, char_t *s);
+extern int ejOpenEngine(sym_fd_t variables, sym_fd_t functions);
+extern void ejCloseEngine(int eid);
+extern int ejSetGlobalFunction(int eid, char_t *name,
+ int (*fn)(int eid, void *handle, int argc, char_t **argv));
+extern void ejSetVar(int eid, char_t *var, char_t *value);
+extern int ejGetVar(int eid, char_t *var, char_t **value);
+extern char_t *ejEval(int eid, char_t *script, char_t **emsg);
+
+#endif /* _h_EJ */
+
+/*****************************************************************************/
+
diff --git a/cleopatre/application/spidgoahead/ejIntrn.h b/cleopatre/application/spidgoahead/ejIntrn.h
new file mode 100644
index 0000000000..6459683ee3
--- /dev/null
+++ b/cleopatre/application/spidgoahead/ejIntrn.h
@@ -0,0 +1,231 @@
+/*
+ * ejIntrn.h -- Ejscript(TM) header
+ *
+ * Copyright (c) GoAhead Software, Inc., 1992-2000
+ *
+ * See the file "license.txt" for information on usage and redistribution
+ *
+ * $Id: ejIntrn.h,v 1.3 2002/10/24 14:44:50 bporter Exp $
+ */
+
+#ifndef _h_EJINTERNAL
+#define _h_EJINTERNAL 1
+
+/******************************** Description *********************************/
+
+/*
+ * GoAhead Ejscript(TM) header. This defines the Ejscript API and internal
+ * structures.
+ */
+
+/********************************* Includes ***********************************/
+
+#include <ctype.h>
+#include <stdarg.h>
+#include <stdlib.h>
+
+#ifdef CE
+#ifndef UEMF
+ #include <io.h>
+#endif
+#endif
+
+#ifdef LYNX
+ #include <unistd.h>
+#endif
+
+#ifdef QNX4
+ #include <dirent.h>
+#endif
+
+#ifdef UEMF
+ #include "uemf.h"
+#else
+ #include <param.h>
+ #include <stat.h>
+ #include "basic/basicInternal.h"
+ #include "emf/emfInternal.h"
+#endif
+
+#include "ej.h"
+
+/********************************** Defines ***********************************/
+/*
+ * Constants
+ */
+#define EJ_INC 110 /* Growth for tags/tokens */
+#define EJ_SCRIPT_INC 1023 /* Growth for ej scripts */
+#define EJ_OFFSET 1 /* hAlloc doesn't like 0 entries */
+#define EJ_MAX_RECURSE 100 /* Sanity for maximum recursion */
+
+/*
+ * Ejscript Lexical analyser tokens
+ */
+#define TOK_ERR -1 /* Any error */
+#define TOK_LPAREN 1 /* ( */
+#define TOK_RPAREN 2 /* ) */
+#define TOK_IF 3 /* if */
+#define TOK_ELSE 4 /* else */
+#define TOK_LBRACE 5 /* { */
+#define TOK_RBRACE 6 /* } */
+#define TOK_LOGICAL 7 /* ||, &&, ! */
+#define TOK_EXPR 8 /* +, -, /, % */
+#define TOK_SEMI 9 /* ; */
+#define TOK_LITERAL 10 /* literal string */
+#define TOK_FUNCTION 11 /* function name */
+#define TOK_NEWLINE 12 /* newline white space */
+#define TOK_ID 13 /* function name */
+#define TOK_EOF 14 /* End of script */
+#define TOK_COMMA 15 /* Comma */
+#define TOK_VAR 16 /* var */
+#define TOK_ASSIGNMENT 17 /* = */
+#define TOK_FOR 18 /* for */
+#define TOK_INC_DEC 19 /* ++, -- */
+#define TOK_RETURN 20 /* return */
+
+/*
+ * Expression operators
+ */
+#define EXPR_LESS 1 /* < */
+#define EXPR_LESSEQ 2 /* <= */
+#define EXPR_GREATER 3 /* > */
+#define EXPR_GREATEREQ 4 /* >= */
+#define EXPR_EQ 5 /* == */
+#define EXPR_NOTEQ 6 /* != */
+#define EXPR_PLUS 7 /* + */
+#define EXPR_MINUS 8 /* - */
+#define EXPR_DIV 9 /* / */
+#define EXPR_MOD 10 /* % */
+#define EXPR_LSHIFT 11 /* << */
+#define EXPR_RSHIFT 12 /* >> */
+#define EXPR_MUL 13 /* * */
+#define EXPR_ASSIGNMENT 14 /* = */
+#define EXPR_INC 15 /* ++ */
+#define EXPR_DEC 16 /* -- */
+#define EXPR_BOOL_COMP 17 /* ! */
+/*
+ * Conditional operators
+ */
+#define COND_AND 1 /* && */
+#define COND_OR 2 /* || */
+#define COND_NOT 3 /* ! */
+
+/*
+ * States
+ */
+#define STATE_ERR -1 /* Error state */
+#define STATE_EOF 1 /* End of file */
+#define STATE_COND 2 /* Parsing a "(conditional)" stmt */
+#define STATE_COND_DONE 3
+#define STATE_RELEXP 4 /* Parsing a relational expr */
+#define STATE_RELEXP_DONE 5
+#define STATE_EXPR 6 /* Parsing an expression */
+#define STATE_EXPR_DONE 7
+#define STATE_STMT 8 /* Parsing General statement */
+#define STATE_STMT_DONE 9
+#define STATE_STMT_BLOCK_DONE 10 /* End of block "}" */
+#define STATE_ARG_LIST 11 /* Function arg list */
+#define STATE_ARG_LIST_DONE 12
+#define STATE_DEC_LIST 16 /* Declaration list */
+#define STATE_DEC_LIST_DONE 17
+#define STATE_DEC 18
+#define STATE_DEC_DONE 19
+
+#define STATE_RET 20 /* Return statement */
+
+#define STATE_BEGIN STATE_STMT
+
+/*
+ * Flags. Used in ej_t and as parameter to parse()
+ */
+#define FLAGS_EXE 0x1 /* Execute statements */
+#define FLAGS_VARIABLES 0x2 /* Allocated variables store */
+#define FLAGS_FUNCTIONS 0x4 /* Allocated function store */
+
+/*
+ * Function call structure
+ */
+typedef struct {
+ char_t *fname; /* Function name */
+ char_t **args; /* Args for function (halloc) */
+ int nArgs; /* Number of args */
+} ejfunc_t;
+
+/*
+ * EJ evaluation block structure
+ */
+typedef struct ejEval {
+ ringq_t tokbuf; /* Current token */
+ ringq_t script; /* Input script for parsing */
+ char_t *putBackToken; /* Putback token string */
+ int putBackTokenId; /* Putback token ID */
+ char_t *line; /* Current line */
+ int lineLength; /* Current line length */
+ int lineNumber; /* Parse line number */
+ int lineColumn; /* Column in line */
+} ejinput_t;
+
+/*
+ * Per Ejscript session structure
+ */
+typedef struct ej {
+ ejinput_t *input; /* Input evaluation block */
+ sym_fd_t functions; /* Symbol table for functions */
+ sym_fd_t *variables; /* hAlloc list of variables */
+ int variableMax; /* Number of entries */
+ ejfunc_t *func; /* Current function */
+ char_t *result; /* Current expression result */
+ char_t *error; /* Error message */
+ char_t *token; /* Pointer to token string */
+ int tid; /* Current token id */
+ int eid; /* Halloc handle */
+ int flags; /* Flags */
+ int userHandle; /* User defined handle */
+} ej_t;
+
+/******************************** Prototypes **********************************/
+
+extern int ejOpenBlock(int eid);
+extern int ejCloseBlock(int eid, int vid);
+extern char_t *ejEvalBlock(int eid, char_t *script, char_t **emsg);
+#ifndef __NO_EJ_FILE
+extern char_t *ejEvalFile(int eid, char_t *path, char_t **emsg);
+#endif
+extern int ejRemoveGlobalFunction(int eid, char_t *name);
+extern void *ejGetGlobalFunction(int eid, char_t *name);
+extern int ejSetGlobalFunctionDirect(sym_fd_t functions, char_t *name,
+ int (*fn)(int eid, void *handle, int argc, char_t **argv));
+extern void ejError(ej_t* ep, char_t* fmt, ...);
+extern void ejSetUserHandle(int eid, int handle);
+extern int ejGetUserHandle(int eid);
+extern int ejGetLineNumber(int eid);
+extern char_t *ejGetResult(int eid);
+extern void ejSetLocalVar(int eid, char_t *var, char_t *value);
+extern void ejSetGlobalVar(int eid, char_t *var, char_t *value);
+
+extern int ejLexOpen(ej_t* ep);
+extern void ejLexClose(ej_t* ep);
+extern int ejLexOpenScript(ej_t* ep, char_t *script);
+extern void ejLexCloseScript(ej_t* ep);
+extern void ejLexSaveInputState(ej_t* ep, ejinput_t* state);
+extern void ejLexFreeInputState(ej_t* ep, ejinput_t* state);
+extern void ejLexRestoreInputState(ej_t* ep, ejinput_t* state);
+extern int ejLexGetToken(ej_t* ep, int state);
+extern void ejLexPutbackToken(ej_t* ep, int tid, char_t *string);
+
+extern sym_fd_t ejGetVariableTable(int eid);
+extern sym_fd_t ejGetFunctionTable(int eid);
+
+extern int ejEmfOpen(int eid);
+extern void ejEmfClose(int eid);
+
+extern int ejEmfDbRead(int eid, void *handle, int argc, char_t **argv);
+extern int ejEmfDbReadKeyed(int eid, void *handle, int argc, char_t **argv);
+extern int ejEmfDbTableGetNrow(int eid, void *handle, int argc, char_t **argv);
+extern int ejEmfDbDeleteRow(int eid, void *handle, int argc, char_t **argv);
+extern int ejEmfTrace(int eid, void *handle, int argc, char_t **argv);
+extern int ejEmfDbWrite(int eid, void *handle, int argc, char_t **argv);
+extern int ejEmfDbCollectTable(int eid, void *handle, int argc, char_t **argv);
+
+#endif /* _h_EJINTERNAL */
+
diff --git a/cleopatre/application/spidgoahead/ejlex.c b/cleopatre/application/spidgoahead/ejlex.c
new file mode 100644
index 0000000000..14b0d68b0d
--- /dev/null
+++ b/cleopatre/application/spidgoahead/ejlex.c
@@ -0,0 +1,722 @@
+/*
+ * ejlex.c -- Ejscript(TM) Lexical Analyser
+ *
+ * Copyright (c) GoAhead Software Inc., 1995-2000. All Rights Reserved.
+ *
+ * See the file "license.txt" for usage and redistribution license requirements
+ *
+ * $Id: ejlex.c,v 1.4 2002/10/24 14:44:50 bporter Exp $
+ */
+
+/******************************** Description *********************************/
+
+/*
+ * Ejscript lexical analyser. This implementes a lexical analyser for a
+ * a subset of the JavaScript language.
+ */
+
+/********************************** Includes **********************************/
+
+#include "ejIntrn.h"
+
+#ifdef UEMF
+ #include "uemf.h"
+#else
+ #include "basic/basicInternal.h"
+#endif
+
+/********************************** Defines ***********************************/
+#define OCTAL 8
+#define HEX 16
+/****************************** Forward Declarations **************************/
+
+static int getLexicalToken(ej_t* ep, int state);
+static int tokenAddChar(ej_t *ep, int c);
+static int inputGetc(ej_t* ep);
+static void inputPutback(ej_t* ep, int c);
+static int charConvert(ej_t* ep, int base, int maxDig);
+
+/************************************* Code ***********************************/
+/*
+ * Setup the lexical analyser
+ */
+
+int ejLexOpen(ej_t* ep)
+{
+ return 0;
+}
+
+/******************************************************************************/
+/*
+ * Close the lexicial analyser
+ */
+
+void ejLexClose(ej_t* ep)
+{
+}
+
+/******************************************************************************/
+/*
+ * Open a new input script
+ */
+
+int ejLexOpenScript(ej_t* ep, char_t *script)
+{
+ ejinput_t *ip;
+
+ a_assert(ep);
+ a_assert(script);
+
+ if ((ep->input = balloc(B_L, sizeof(ejinput_t))) == NULL) {
+ return -1;
+ }
+ ip = ep->input;
+ memset(ip, 0, sizeof(*ip));
+
+ a_assert(ip);
+ a_assert(ip->putBackToken == NULL);
+ a_assert(ip->putBackTokenId == 0);
+
+/*
+ * Create the parse token buffer and script buffer
+ */
+ if (ringqOpen(&ip->tokbuf, EJ_INC, -1) < 0) {
+ return -1;
+ }
+ if (ringqOpen(&ip->script, EJ_SCRIPT_INC, -1) < 0) {
+ return -1;
+ }
+/*
+ * Put the Ejscript into a ring queue for easy parsing
+ */
+ ringqPutStr(&ip->script, script);
+
+ ip->lineNumber = 1;
+ ip->lineLength = 0;
+ ip->lineColumn = 0;
+ ip->line = NULL;
+
+ return 0;
+}
+
+/******************************************************************************/
+/*
+ * Close the input script
+ */
+
+void ejLexCloseScript(ej_t* ep)
+{
+ ejinput_t *ip;
+
+ a_assert(ep);
+
+ ip = ep->input;
+ a_assert(ip);
+
+ if (ip->putBackToken) {
+ bfree(B_L, ip->putBackToken);
+ ip->putBackToken = NULL;
+ }
+ ip->putBackTokenId = 0;
+
+ if (ip->line) {
+ bfree(B_L, ip->line);
+ ip->line = NULL;
+ }
+
+ ringqClose(&ip->tokbuf);
+ ringqClose(&ip->script);
+
+ bfree(B_L, ip);
+}
+
+/******************************************************************************/
+/*
+ * Save the input state
+ */
+
+void ejLexSaveInputState(ej_t* ep, ejinput_t* state)
+{
+ ejinput_t *ip;
+
+ a_assert(ep);
+
+ ip = ep->input;
+ a_assert(ip);
+
+ *state = *ip;
+ if (ip->putBackToken) {
+ state->putBackToken = bstrdup(B_L, ip->putBackToken);
+ }
+}
+
+/******************************************************************************/
+/*
+ * Restore the input state
+ */
+
+void ejLexRestoreInputState(ej_t* ep, ejinput_t* state)
+{
+ ejinput_t *ip;
+
+ a_assert(ep);
+
+ ip = ep->input;
+ a_assert(ip);
+
+ ip->tokbuf = state->tokbuf;
+ ip->script = state->script;
+ ip->putBackTokenId = state->putBackTokenId;
+ if (ip->putBackToken) {
+ bfree(B_L, ip->putBackToken);
+ }
+ if (state->putBackToken) {
+ ip->putBackToken = bstrdup(B_L, state->putBackToken);
+ }
+}
+
+/******************************************************************************/
+/*
+ * Free a saved input state
+ */
+
+void ejLexFreeInputState(ej_t* ep, ejinput_t* state)
+{
+ if (state->putBackToken) {
+ bfree(B_L, state->putBackToken);
+ state->putBackToken = NULL;
+ }
+}
+
+/******************************************************************************/
+/*
+ * Get the next Ejscript token
+ */
+
+int ejLexGetToken(ej_t* ep, int state)
+{
+ ep->tid = getLexicalToken(ep, state);
+ /*
+ * commented out 04 Apr 02 Bg Porter -- we found a case where very long
+ * arguments to write() were being corrupted downstream in the trace call
+ * (the ep->token pointer was being overwritten with the trace message.
+ * restore this if it's useful for your debugging.
+ trace(9, T("ejGetToken: %d, \"%s\"\n"), ep->tid, ep->token);
+ */
+ return ep->tid;
+}
+
+/******************************************************************************/
+/*
+ * Get the next Ejscript token
+ */
+
+static int getLexicalToken(ej_t* ep, int state)
+{
+ ringq_t *inq, *tokq;
+ ejinput_t* ip;
+ int done, tid, c, quote, style;
+
+ a_assert(ep);
+ ip = ep->input;
+ a_assert(ip);
+
+ inq = &ip->script;
+ tokq = &ip->tokbuf;
+
+ ep->tid = -1;
+ tid = -1;
+ ep->token = T("");
+
+ ringqFlush(tokq);
+
+ if (ip->putBackTokenId > 0) {
+ ringqPutStr(tokq, ip->putBackToken);
+ tid = ip->putBackTokenId;
+ ip->putBackTokenId = 0;
+ ep->token = (char_t*) tokq->servp;
+ return tid;
+ }
+
+ if ((c = inputGetc(ep)) < 0) {
+ return TOK_EOF;
+ }
+
+ for (done = 0; !done; ) {
+ switch (c) {
+ case -1:
+ return TOK_EOF;
+
+ case ' ':
+ case '\t':
+ case '\r':
+ do {
+ if ((c = inputGetc(ep)) < 0)
+ break;
+ } while (c == ' ' || c == '\t' || c == '\r');
+ break;
+
+ case '\n':
+ return TOK_NEWLINE;
+
+ case '(':
+ tokenAddChar(ep, c);
+ return TOK_LPAREN;
+
+ case ')':
+ tokenAddChar(ep, c);
+ return TOK_RPAREN;
+
+ case '{':
+ tokenAddChar(ep, c);
+ return TOK_LBRACE;
+
+ case '}':
+ tokenAddChar(ep, c);
+ return TOK_RBRACE;
+
+ case '+':
+ if ((c = inputGetc(ep)) < 0) {
+ ejError(ep, T("Syntax Error"));
+ return TOK_ERR;
+ }
+ if (c != '+' ) {
+ inputPutback(ep, c);
+ tokenAddChar(ep, EXPR_PLUS);
+ return TOK_EXPR;
+ }
+ tokenAddChar(ep, EXPR_INC);
+ return TOK_INC_DEC;
+
+ case '-':
+ if ((c = inputGetc(ep)) < 0) {
+ ejError(ep, T("Syntax Error"));
+ return TOK_ERR;
+ }
+ if (c != '-' ) {
+ inputPutback(ep, c);
+ tokenAddChar(ep, EXPR_MINUS);
+ return TOK_EXPR;
+ }
+ tokenAddChar(ep, EXPR_DEC);
+ return TOK_INC_DEC;
+
+ case '*':
+ tokenAddChar(ep, EXPR_MUL);
+ return TOK_EXPR;
+
+ case '%':
+ tokenAddChar(ep, EXPR_MOD);
+ return TOK_EXPR;
+
+ case '/':
+/*
+ * Handle the division operator and comments
+ */
+ if ((c = inputGetc(ep)) < 0) {
+ ejError(ep, T("Syntax Error"));
+ return TOK_ERR;
+ }
+ if (c != '*' && c != '/') {
+ inputPutback(ep, c);
+ tokenAddChar(ep, EXPR_DIV);
+ return TOK_EXPR;
+ }
+ style = c;
+/*
+ * Eat comments. Both C and C++ comment styles are supported.
+ */
+ while (1) {
+ if ((c = inputGetc(ep)) < 0) {
+ ejError(ep, T("Syntax Error"));
+ return TOK_ERR;
+ }
+ if (c == '\n' && style == '/') {
+ break;
+ } else if (c == '*') {
+ c = inputGetc(ep);
+ if (style == '/') {
+ if (c == '\n') {
+ break;
+ }
+ } else {
+ if (c == '/') {
+ break;
+ }
+ }
+ }
+ }
+/*
+ * Continue looking for a token, so get the next character
+ */
+ if ((c = inputGetc(ep)) < 0) {
+ return TOK_EOF;
+ }
+ break;
+
+ case '<': /* < and <= */
+ if ((c = inputGetc(ep)) < 0) {
+ ejError(ep, T("Syntax Error"));
+ return TOK_ERR;
+ }
+ if (c == '<') {
+ tokenAddChar(ep, EXPR_LSHIFT);
+ return TOK_EXPR;
+ } else if (c == '=') {
+ tokenAddChar(ep, EXPR_LESSEQ);
+ return TOK_EXPR;
+ }
+ tokenAddChar(ep, EXPR_LESS);
+ inputPutback(ep, c);
+ return TOK_EXPR;
+
+ case '>': /* > and >= */
+ if ((c = inputGetc(ep)) < 0) {
+ ejError(ep, T("Syntax Error"));
+ return TOK_ERR;
+ }
+ if (c == '>') {
+ tokenAddChar(ep, EXPR_RSHIFT);
+ return TOK_EXPR;
+ } else if (c == '=') {
+ tokenAddChar(ep, EXPR_GREATEREQ);
+ return TOK_EXPR;
+ }
+ tokenAddChar(ep, EXPR_GREATER);
+ inputPutback(ep, c);
+ return TOK_EXPR;
+
+ case '=': /* "==" */
+ if ((c = inputGetc(ep)) < 0) {
+ ejError(ep, T("Syntax Error"));
+ return TOK_ERR;
+ }
+ if (c == '=') {
+ tokenAddChar(ep, EXPR_EQ);
+ return TOK_EXPR;
+ }
+ inputPutback(ep, c);
+ return TOK_ASSIGNMENT;
+
+ case '!': /* "!=" or "!"*/
+ if ((c = inputGetc(ep)) < 0) {
+ ejError(ep, T("Syntax Error"));
+ return TOK_ERR;
+ }
+ if (c == '=') {
+ tokenAddChar(ep, EXPR_NOTEQ);
+ return TOK_EXPR;
+ }
+ inputPutback(ep, c);
+ tokenAddChar(ep, EXPR_BOOL_COMP);
+ return TOK_EXPR;
+
+ case ';':
+ tokenAddChar(ep, c);
+ return TOK_SEMI;
+
+ case ',':
+ tokenAddChar(ep, c);
+ return TOK_COMMA;
+
+ case '|': /* "||" */
+ if ((c = inputGetc(ep)) < 0 || c != '|') {
+ ejError(ep, T("Syntax Error"));
+ return TOK_ERR;
+ }
+ tokenAddChar(ep, COND_OR);
+ return TOK_LOGICAL;
+
+ case '&': /* "&&" */
+ if ((c = inputGetc(ep)) < 0 || c != '&') {
+ ejError(ep, T("Syntax Error"));
+ return TOK_ERR;
+ }
+ tokenAddChar(ep, COND_AND);
+ return TOK_LOGICAL;
+
+ case '\"': /* String quote */
+ case '\'':
+ quote = c;
+ if ((c = inputGetc(ep)) < 0) {
+ ejError(ep, T("Syntax Error"));
+ return TOK_ERR;
+ }
+
+ while (c != quote) {
+/*
+ * check for escape sequence characters
+ */
+ if (c == '\\') {
+ c = inputGetc(ep);
+
+ if (gisdigit(c)) {
+/*
+ * octal support, \101 maps to 65 = 'A'. put first char
+ * back so converter will work properly.
+ */
+ inputPutback(ep, c);
+ c = charConvert(ep, OCTAL, 3);
+
+ } else {
+ switch (c) {
+ case 'n':
+ c = '\n'; break;
+ case 'b':
+ c = '\b'; break;
+ case 'f':
+ c = '\f'; break;
+ case 'r':
+ c = '\r'; break;
+ case 't':
+ c = '\t'; break;
+ case 'x':
+/*
+ * hex support, \x41 maps to 65 = 'A'
+ */
+ c = charConvert(ep, HEX, 2);
+ break;
+ case 'u':
+/*
+ * unicode support, \x0401 maps to 65 = 'A'
+ */
+ c = charConvert(ep, HEX, 2);
+ c = c*16 + charConvert(ep, HEX, 2);
+
+ break;
+ case '\'':
+ case '\"':
+ case '\\':
+ break;
+ default:
+ ejError(ep, T("Invalid Escape Sequence"));
+ return TOK_ERR;
+ }
+ }
+ if (tokenAddChar(ep, c) < 0) {
+ return TOK_ERR;
+ }
+ } else {
+ if (tokenAddChar(ep, c) < 0) {
+ return TOK_ERR;
+ }
+ }
+ if ((c = inputGetc(ep)) < 0) {
+ ejError(ep, T("Unmatched Quote"));
+ return TOK_ERR;
+ }
+ }
+ return TOK_LITERAL;
+
+ case '0': case '1': case '2': case '3': case '4':
+ case '5': case '6': case '7': case '8': case '9':
+ do {
+ if (tokenAddChar(ep, c) < 0) {
+ return TOK_ERR;
+ }
+ if ((c = inputGetc(ep)) < 0)
+ break;
+ } while (gisdigit(c));
+ inputPutback(ep, c);
+ return TOK_LITERAL;
+
+ default:
+/*
+ * Identifiers or a function names
+ */
+ while (1) {
+ if (c == '\\') {
+/*
+ * just ignore any \ characters.
+ */
+ } else if (tokenAddChar(ep, c) < 0) {
+ break;
+ }
+ if ((c = inputGetc(ep)) < 0) {
+ break;
+ }
+ if (!gisalnum(c) && c != '$' && c != '_' &&
+ c != '\\') {
+ break;
+ }
+ }
+ if (! gisalpha(*tokq->servp) && *tokq->servp != '$' &&
+ *tokq->servp != '_') {
+ ejError(ep, T("Invalid identifier %s"), tokq->servp);
+ return TOK_ERR;
+ }
+/*
+ * Check for reserved words (only "if", "else", "var", "for"
+ * and "return" at the moment)
+ */
+ if (state == STATE_STMT) {
+ if (gstrcmp(ep->token, T("if")) == 0) {
+ return TOK_IF;
+ } else if (gstrcmp(ep->token, T("else")) == 0) {
+ return TOK_ELSE;
+ } else if (gstrcmp(ep->token, T("var")) == 0) {
+ return TOK_VAR;
+ } else if (gstrcmp(ep->token, T("for")) == 0) {
+ return TOK_FOR;
+ } else if (gstrcmp(ep->token, T("return")) == 0) {
+ if ((c == ';') || (c == '(')) {
+ inputPutback(ep, c);
+ }
+ return TOK_RETURN;
+ }
+ }
+
+/*
+ * Skip white space after token to find out whether this is
+ * a function or not.
+ */
+ while (c == ' ' || c == '\t' || c == '\r' || c == '\n') {
+ if ((c = inputGetc(ep)) < 0)
+ break;
+ }
+
+ tid = (c == '(') ? TOK_FUNCTION : TOK_ID;
+ done++;
+ }
+ }
+
+/*
+ * Putback the last extra character for next time
+ */
+ inputPutback(ep, c);
+ return tid;
+}
+
+/******************************************************************************/
+/*
+ * Putback the last token read
+ */
+
+void ejLexPutbackToken(ej_t* ep, int tid, char_t *string)
+{
+ ejinput_t* ip;
+
+ a_assert(ep);
+ ip = ep->input;
+ a_assert(ip);
+
+ if (ip->putBackToken) {
+ bfree(B_L, ip->putBackToken);
+ }
+ ip->putBackTokenId = tid;
+ ip->putBackToken = bstrdup(B_L, string);
+}
+
+/******************************************************************************/
+/*
+ * Add a character to the token ringq buffer
+ */
+
+static int tokenAddChar(ej_t *ep, int c)
+{
+ ejinput_t* ip;
+
+ a_assert(ep);
+ ip = ep->input;
+ a_assert(ip);
+
+ if (ringqPutc(&ip->tokbuf, (char_t) c) < 0) {
+ ejError(ep, T("Token too big"));
+ return -1;
+ }
+ * ((char_t*) ip->tokbuf.endp) = '\0';
+ ep->token = (char_t*) ip->tokbuf.servp;
+
+ return 0;
+}
+
+/******************************************************************************/
+/*
+ * Get another input character
+ */
+
+static int inputGetc(ej_t* ep)
+{
+ ejinput_t *ip;
+ int c, len;
+
+ a_assert(ep);
+ ip = ep->input;
+
+ if ((len = ringqLen(&ip->script)) == 0) {
+ return -1;
+ }
+
+ c = ringqGetc(&ip->script);
+
+ if (c == '\n') {
+ ip->lineNumber++;
+ ip->lineColumn = 0;
+ } else {
+ if ((ip->lineColumn + 2) >= ip->lineLength) {
+ ip->lineLength += EJ_INC;
+ ip->line = brealloc(B_L, ip->line, ip->lineLength * sizeof(char_t));
+ }
+ ip->line[ip->lineColumn++] = c;
+ ip->line[ip->lineColumn] = '\0';
+ }
+ return c;
+}
+
+/******************************************************************************/
+/*
+ * Putback a character onto the input queue
+ */
+
+static void inputPutback(ej_t* ep, int c)
+{
+ ejinput_t *ip;
+
+ a_assert(ep);
+
+ ip = ep->input;
+ ringqInsertc(&ip->script, (char_t) c);
+ ip->lineColumn--;
+ ip->line[ip->lineColumn] = '\0';
+}
+
+/******************************************************************************/
+/*
+ * Convert a hex or octal character back to binary, return original char if
+ * not a hex digit
+ */
+
+static int charConvert(ej_t* ep, int base, int maxDig)
+{
+ int i, c, lval, convChar;
+
+ lval = 0;
+ for (i = 0; i < maxDig; i++) {
+ if ((c = inputGetc(ep)) < 0) {
+ break;
+ }
+/*
+ * Initialize to out of range value
+ */
+ convChar = base;
+ if (gisdigit(c)) {
+ convChar = c - '0';
+ } else if (c >= 'a' && c <= 'f') {
+ convChar = c - 'a' + 10;
+ } else if (c >= 'A' && c <= 'F') {
+ convChar = c - 'A' + 10;
+ }
+/*
+ * if unexpected character then return it to buffer.
+ */
+ if (convChar >= base) {
+ inputPutback(ep, c);
+ break;
+ }
+ lval = (lval * base) + convChar;
+ }
+ return lval;
+}
+
+/******************************************************************************/
+
diff --git a/cleopatre/application/spidgoahead/ejparse.c b/cleopatre/application/spidgoahead/ejparse.c
new file mode 100644
index 0000000000..efe9f76374
--- /dev/null
+++ b/cleopatre/application/spidgoahead/ejparse.c
@@ -0,0 +1,1805 @@
+/*
+ * ejparse.c -- Ejscript(TM) Parser
+ *
+ * Copyright (c) GoAhead Software Inc., 1995-2000. All Rights Reserved.
+ *
+ * See the file "license.txt" for usage and redistribution license requirements
+ *
+ * $Id: ejparse.c,v 1.3 2002/10/24 14:44:50 bporter Exp $
+ */
+
+/******************************** Description *********************************/
+
+/*
+ * Ejscript parser. This implementes a subset of the JavaScript language.
+ * Multiple Ejscript parsers can be opened at a time.
+ */
+
+/********************************** Includes **********************************/
+
+#include "ejIntrn.h"
+
+#ifdef CE
+ #include "CE/wincompat.h"
+#endif
+
+/********************************** Local Data ********************************/
+
+ej_t **ejHandles; /* List of ej handles */
+int ejMax = -1; /* Maximum size of */
+
+/****************************** Forward Declarations **************************/
+
+#ifndef B_STATS
+#define setString(a,b,c) setstring(b,c)
+#endif
+
+static ej_t *ejPtr(int eid);
+static void clearString(char_t **ptr);
+static void setString(B_ARGS_DEC, char_t **ptr, char_t *s);
+static void appendString(char_t **ptr, char_t *s);
+static int parse(ej_t *ep, int state, int flags);
+static int parseStmt(ej_t *ep, int state, int flags);
+static int parseDeclaration(ej_t *ep, int state, int flags);
+static int parseArgs(ej_t *ep, int state, int flags);
+static int parseCond(ej_t *ep, int state, int flags);
+static int parseExpr(ej_t *ep, int state, int flags);
+static int evalExpr(ej_t *ep, char_t *lhs, int rel, char_t *rhs);
+static int evalCond(ej_t *ep, char_t *lhs, int rel, char_t *rhs);
+static int evalFunction(ej_t *ep);
+static void freeFunc(ejfunc_t *func);
+static void ejRemoveNewlines(ej_t *ep, int state);
+
+/************************************* Code ***********************************/
+/*
+ * Initialize a Ejscript engine
+ */
+
+int ejOpenEngine(sym_fd_t variables, sym_fd_t functions)
+{
+ ej_t *ep;
+ int eid, vid;
+
+ if ((eid = hAllocEntry((void***) &ejHandles, &ejMax, sizeof(ej_t))) < 0) {
+ return -1;
+ }
+ ep = ejHandles[eid];
+ ep->eid = eid;
+
+/*
+ * Create a top level symbol table if one is not provided for variables and
+ * functions. Variables may create other symbol tables for block level
+ * declarations so we use hAlloc to manage a list of variable tables.
+ */
+ if ((vid = hAlloc((void***) &ep->variables)) < 0) {
+ ejMax = hFree((void***) &ejHandles, ep->eid);
+ return -1;
+ }
+ if (vid >= ep->variableMax) {
+ ep->variableMax = vid + 1;
+ }
+
+ if (variables == -1) {
+ ep->variables[vid] = symOpen(64) + EJ_OFFSET;
+ ep->flags |= FLAGS_VARIABLES;
+ } else {
+ ep->variables[vid] = variables + EJ_OFFSET;
+ }
+
+ if (functions == -1) {
+ ep->functions = symOpen(64);
+ ep->flags |= FLAGS_FUNCTIONS;
+ } else {
+ ep->functions = functions;
+ }
+
+ ejLexOpen(ep);
+
+/*
+ * Define standard constants
+ */
+ ejSetGlobalVar(ep->eid, T("null"), NULL);
+
+#ifdef EMF
+ ejEmfOpen(ep->eid);
+#endif
+ return ep->eid;
+}
+
+/******************************************************************************/
+/*
+ * Close
+ */
+
+void ejCloseEngine(int eid)
+{
+ ej_t *ep;
+ int i;
+
+ if ((ep = ejPtr(eid)) == NULL) {
+ return;
+ }
+
+#ifdef EMF
+ ejEmfClose(eid);
+#endif
+
+ bfreeSafe(B_L, ep->error);
+ ep->error = NULL;
+ bfreeSafe(B_L, ep->result);
+ ep->result = NULL;
+
+ ejLexClose(ep);
+
+ for (i = ep->variableMax - 1; i >= 0; i--) {
+ if (ep->flags & FLAGS_VARIABLES) {
+ symClose(ep->variables[i] - EJ_OFFSET);
+ }
+ ep->variableMax = hFree((void***) &ep->variables, i);
+ }
+
+ if (ep->flags & FLAGS_FUNCTIONS) {
+ symClose(ep->functions);
+ }
+
+ ejMax = hFree((void***) &ejHandles, ep->eid);
+ bfree(B_L, ep);
+}
+
+#ifndef __NO_EJ_FILE
+/******************************************************************************/
+/*
+ * Evaluate a Ejscript file
+ */
+
+char_t *ejEvalFile(int eid, char_t *path, char_t **emsg)
+{
+ gstat_t sbuf;
+ ej_t *ep;
+ char_t *script, *rs;
+ char *fileBuf;
+ int fd;
+
+ a_assert(path && *path);
+
+ if (emsg) {
+ *emsg = NULL;
+ }
+
+ if ((ep = ejPtr(eid)) == NULL) {
+ return NULL;
+ }
+
+ if ((fd = gopen(path, O_RDONLY | O_BINARY, 0666)) < 0) {
+ ejError(ep, T("Bad handle %d"), eid);
+ return NULL;
+ }
+
+ if (gstat(path, &sbuf) < 0) {
+ gclose(fd);
+ ejError(ep, T("Cant stat %s"), path);
+ return NULL;
+ }
+
+ if ((fileBuf = balloc(B_L, sbuf.st_size + 1)) == NULL) {
+ gclose(fd);
+ ejError(ep, T("Cant malloc %d"), sbuf.st_size);
+ return NULL;
+ }
+
+ if (gread(fd, fileBuf, sbuf.st_size) != (int)sbuf.st_size) {
+ gclose(fd);
+ bfree(B_L, fileBuf);
+ ejError(ep, T("Error reading %s"), path);
+ return NULL;
+ }
+
+ fileBuf[sbuf.st_size] = '\0';
+ gclose(fd);
+
+ if ((script = ballocAscToUni(fileBuf, sbuf.st_size)) == NULL) {
+ bfree(B_L, fileBuf);
+ ejError(ep, T("Cant malloc %d"), sbuf.st_size + 1);
+ return NULL;
+ }
+ bfree(B_L, fileBuf);
+
+ rs = ejEvalBlock(eid, script, emsg);
+
+ bfree(B_L, script);
+ return rs;
+}
+#endif /* __NO_EJ_FILE */
+
+/******************************************************************************/
+/*
+ * Create a new variable scope block so that consecutive ejEval calls may
+ * be made with the same varible scope. This space MUST be closed with
+ * ejCloseBlock when the evaluations are complete.
+ */
+
+int ejOpenBlock(int eid)
+{
+ ej_t *ep;
+ int vid;
+
+ if((ep = ejPtr(eid)) == NULL) {
+ return -1;
+ }
+
+ if ((vid = hAlloc((void***) &ep->variables)) < 0) {
+ return -1;
+ }
+
+ if (vid >= ep->variableMax) {
+ ep->variableMax = vid + 1;
+ }
+ ep->variables[vid] = symOpen(64) + EJ_OFFSET;
+ return vid;
+
+}
+
+/******************************************************************************/
+/*
+ * Close a variable scope block. The vid parameter is the return value from
+ * the call to ejOpenBlock
+ */
+
+int ejCloseBlock(int eid, int vid)
+{
+ ej_t *ep;
+
+ if((ep = ejPtr(eid)) == NULL) {
+ return -1;
+ }
+ symClose(ep->variables[vid] - EJ_OFFSET);
+ ep->variableMax = hFree((void***) &ep->variables, vid);
+ return 0;
+
+}
+
+/******************************************************************************/
+/*
+ * Create a new variable scope block and evaluate a script. All variables
+ * created during this context will be automatically deleted when complete.
+ */
+
+char_t *ejEvalBlock(int eid, char_t *script, char_t **emsg)
+{
+ char_t* returnVal;
+ int vid;
+
+ a_assert(script);
+
+ vid = ejOpenBlock(eid);
+ returnVal = ejEval(eid, script, emsg);
+ ejCloseBlock(eid, vid);
+
+ return returnVal;
+}
+
+/******************************************************************************/
+/*
+ * Parse and evaluate a Ejscript. The caller may provide a symbol table to
+ * use for variables and function definitions. Return char_t pointer on
+ * success otherwise NULL pointer is returned.
+ */
+
+char_t *ejEval(int eid, char_t *script, char_t **emsg)
+{
+ ej_t *ep;
+ ejinput_t *oldBlock;
+ int state;
+ void *endlessLoopTest;
+ int loopCounter;
+
+
+ a_assert(script);
+
+ if (emsg) {
+ *emsg = NULL;
+ }
+
+ if ((ep = ejPtr(eid)) == NULL) {
+ return NULL;
+ }
+
+ setString(B_L, &ep->result, T(""));
+
+/*
+ * Allocate a new evaluation block, and save the old one
+ */
+ oldBlock = ep->input;
+ ejLexOpenScript(ep, script);
+
+/*
+ * Do the actual parsing and evaluation
+ */
+ loopCounter = 0;
+ endlessLoopTest = NULL;
+
+ do {
+ state = parse(ep, STATE_BEGIN, FLAGS_EXE);
+
+ if (state == STATE_RET) {
+ state = STATE_EOF;
+ }
+/*
+ * prevent parser from going into infinite loop. If parsing the same
+ * line 10 times then fail and report Syntax error. Most normal error
+ * are caught in the parser itself.
+ */
+ if (endlessLoopTest == ep->input->script.servp) {
+ if (loopCounter++ > 10) {
+ state = STATE_ERR;
+ ejError(ep, T("Syntax error"));
+ }
+ } else {
+ endlessLoopTest = ep->input->script.servp;
+ loopCounter = 0;
+ }
+ } while (state != STATE_EOF && state != STATE_ERR);
+
+ ejLexCloseScript(ep);
+
+/*
+ * Return any error string to the user
+ */
+ if (state == STATE_ERR && emsg) {
+ *emsg = bstrdup(B_L, ep->error);
+ }
+
+/*
+ * Restore the old evaluation block
+ */
+ ep->input = oldBlock;
+
+ if (state == STATE_EOF) {
+ return ep->result;
+ }
+
+ if (state == STATE_ERR) {
+ return NULL;
+ }
+
+ return ep->result;
+}
+
+/******************************************************************************/
+/*
+ * Recursive descent parser for Ejscript
+ */
+
+static int parse(ej_t *ep, int state, int flags)
+{
+ a_assert(ep);
+
+ switch (state) {
+/*
+ * Any statement, function arguments or conditional expressions
+ */
+ case STATE_STMT:
+ if ((state = parseStmt(ep, state, flags)) != STATE_STMT_DONE &&
+ state != STATE_EOF && state != STATE_STMT_BLOCK_DONE &&
+ state != STATE_RET) {
+ state = STATE_ERR;
+ }
+ break;
+
+ case STATE_DEC:
+ if ((state = parseStmt(ep, state, flags)) != STATE_DEC_DONE &&
+ state != STATE_EOF) {
+ state = STATE_ERR;
+ }
+ break;
+
+ case STATE_EXPR:
+ if ((state = parseStmt(ep, state, flags)) != STATE_EXPR_DONE &&
+ state != STATE_EOF) {
+ state = STATE_ERR;
+ }
+ break;
+
+/*
+ * Variable declaration list
+ */
+ case STATE_DEC_LIST:
+ state = parseDeclaration(ep, state, flags);
+ break;
+
+/*
+ * Function argument string
+ */
+ case STATE_ARG_LIST:
+ state = parseArgs(ep, state, flags);
+ break;
+
+/*
+ * Logical condition list (relational operations separated by &&, ||)
+ */
+ case STATE_COND:
+ state = parseCond(ep, state, flags);
+ break;
+
+/*
+ * Expression list
+ */
+ case STATE_RELEXP:
+ state = parseExpr(ep, state, flags);
+ break;
+ }
+
+ if (state == STATE_ERR && ep->error == NULL) {
+ ejError(ep, T("Syntax error"));
+ }
+ return state;
+}
+
+/******************************************************************************/
+/*
+ * Parse any statement including functions and simple relational operations
+ */
+
+static int parseStmt(ej_t *ep, int state, int flags)
+{
+ ejfunc_t func;
+ ejfunc_t *saveFunc;
+ ejinput_t condScript, endScript, bodyScript, incrScript;
+ char_t *value, *identifier;
+ int done, expectSemi, thenFlags, elseFlags, tid, cond, forFlags;
+ int ejVarType;
+
+ a_assert(ep);
+
+/*
+ * Set these to NULL, else we try to free them if an error occurs.
+ */
+ endScript.putBackToken = NULL;
+ bodyScript.putBackToken = NULL;
+ incrScript.putBackToken = NULL;
+ condScript.putBackToken = NULL;
+
+ expectSemi = 0;
+ saveFunc = NULL;
+
+ for (done = 0; !done; ) {
+ tid = ejLexGetToken(ep, state);
+
+ switch (tid) {
+ default:
+ ejLexPutbackToken(ep, TOK_EXPR, ep->token);
+ done++;
+ break;
+
+ case TOK_ERR:
+ state = STATE_ERR;
+ done++;
+ break;
+
+ case TOK_EOF:
+ state = STATE_EOF;
+ done++;
+ break;
+
+ case TOK_NEWLINE:
+ break;
+
+ case TOK_SEMI:
+/*
+ * This case is when we discover no statement and just a lone ';'
+ */
+ if (state != STATE_STMT) {
+ ejLexPutbackToken(ep, tid, ep->token);
+ }
+ done++;
+ break;
+
+ case TOK_ID:
+/*
+ * This could either be a reference to a variable or an assignment
+ */
+ identifier = NULL;
+ setString(B_L, &identifier, ep->token);
+/*
+ * Peek ahead to see if this is an assignment
+ */
+ tid = ejLexGetToken(ep, state);
+ if (tid == TOK_ASSIGNMENT) {
+ if (parse(ep, STATE_RELEXP, flags) != STATE_RELEXP_DONE) {
+ clearString(&identifier);
+ goto error;
+ }
+ if (flags & FLAGS_EXE) {
+ if ( state == STATE_DEC ) {
+ ejSetLocalVar(ep->eid, identifier, ep->result);
+ } else {
+ ejVarType = ejGetVar(ep->eid, identifier, &value);
+ if (ejVarType > 0) {
+ ejSetLocalVar(ep->eid, identifier, ep->result);
+ } else {
+ ejSetGlobalVar(ep->eid, identifier, ep->result);
+ }
+ }
+ }
+
+ } else if (tid == TOK_INC_DEC ) {
+ value = NULL;
+ if (flags & FLAGS_EXE) {
+ ejVarType = ejGetVar(ep->eid, identifier, &value);
+ if (ejVarType < 0) {
+ ejError(ep, T("Undefined variable %s\n"), identifier);
+ goto error;
+ }
+ setString(B_L, &ep->result, value);
+ if (evalExpr(ep, value, (int) *ep->token, T("1")) < 0) {
+ state = STATE_ERR;
+ break;
+ }
+
+ if (ejVarType > 0) {
+ ejSetLocalVar(ep->eid, identifier, ep->result);
+ } else {
+ ejSetGlobalVar(ep->eid, identifier, ep->result);
+ }
+ }
+
+ } else {
+/*
+ * If we are processing a declaration, allow undefined vars
+ */
+ value = NULL;
+ if (state == STATE_DEC) {
+ if (ejGetVar(ep->eid, identifier, &value) > 0) {
+ ejError(ep, T("Variable already declared"),
+ identifier);
+ clearString(&identifier);
+ goto error;
+ }
+ ejSetLocalVar(ep->eid, identifier, NULL);
+ } else {
+ if ( flags & FLAGS_EXE ) {
+ if (ejGetVar(ep->eid, identifier, &value) < 0) {
+ ejError(ep, T("Undefined variable %s\n"),
+ identifier);
+ clearString(&identifier);
+ goto error;
+ }
+ }
+ }
+ setString(B_L, &ep->result, value);
+ ejLexPutbackToken(ep, tid, ep->token);
+ }
+ clearString(&identifier);
+
+ if (state == STATE_STMT) {
+ expectSemi++;
+ }
+ done++;
+ break;
+
+ case TOK_LITERAL:
+/*
+ * Set the result to the literal (number or string constant)
+ */
+ setString(B_L, &ep->result, ep->token);
+ if (state == STATE_STMT) {
+ expectSemi++;
+ }
+ done++;
+ break;
+
+ case TOK_FUNCTION:
+/*
+ * We must save any current ep->func value for the current stack frame
+ */
+ if (ep->func) {
+ saveFunc = ep->func;
+ }
+ memset(&func, 0, sizeof(ejfunc_t));
+ setString(B_L, &func.fname, ep->token);
+ ep->func = &func;
+
+ setString(B_L, &ep->result, T(""));
+ if (ejLexGetToken(ep, state) != TOK_LPAREN) {
+ freeFunc(&func);
+ goto error;
+ }
+
+ if (parse(ep, STATE_ARG_LIST, flags) != STATE_ARG_LIST_DONE) {
+ freeFunc(&func);
+ ep->func = saveFunc;
+ goto error;
+ }
+/*
+ * Evaluate the function if required
+ */
+ if (flags & FLAGS_EXE && evalFunction(ep) < 0) {
+ freeFunc(&func);
+ ep->func = saveFunc;
+ goto error;
+ }
+
+ freeFunc(&func);
+ ep->func = saveFunc;
+
+ if (ejLexGetToken(ep, state) != TOK_RPAREN) {
+ goto error;
+ }
+ if (state == STATE_STMT) {
+ expectSemi++;
+ }
+ done++;
+ break;
+
+ case TOK_IF:
+ if (state != STATE_STMT) {
+ goto error;
+ }
+ if (ejLexGetToken(ep, state) != TOK_LPAREN) {
+ goto error;
+ }
+/*
+ * Evaluate the entire condition list "(condition)"
+ */
+ if (parse(ep, STATE_COND, flags) != STATE_COND_DONE) {
+ goto error;
+ }
+ if (ejLexGetToken(ep, state) != TOK_RPAREN) {
+ goto error;
+ }
+/*
+ * This is the "then" case. We need to always parse both cases and
+ * execute only the relevant case.
+ */
+ if (*ep->result == '1') {
+ thenFlags = flags;
+ elseFlags = flags & ~FLAGS_EXE;
+ } else {
+ thenFlags = flags & ~FLAGS_EXE;
+ elseFlags = flags;
+ }
+/*
+ * Process the "then" case. Allow for RETURN statement
+ */
+ switch (parse(ep, STATE_STMT, thenFlags)) {
+ case STATE_RET:
+ return STATE_RET;
+ case STATE_STMT_DONE:
+ break;
+ default:
+ goto error;
+ }
+/*
+ * check to see if there is an "else" case
+ */
+ ejRemoveNewlines(ep, state);
+ tid = ejLexGetToken(ep, state);
+ if (tid != TOK_ELSE) {
+ ejLexPutbackToken(ep, tid, ep->token);
+ done++;
+ break;
+ }
+/*
+ * Process the "else" case. Allow for return.
+ */
+ switch (parse(ep, STATE_STMT, elseFlags)) {
+ case STATE_RET:
+ return STATE_RET;
+ case STATE_STMT_DONE:
+ break;
+ default:
+ goto error;
+ }
+ done++;
+ break;
+
+ case TOK_FOR:
+/*
+ * Format for the expression is:
+ *
+ * for (initial; condition; incr) {
+ * body;
+ * }
+ */
+ if (state != STATE_STMT) {
+ goto error;
+ }
+ if (ejLexGetToken(ep, state) != TOK_LPAREN) {
+ goto error;
+ }
+
+/*
+ * Evaluate the for loop initialization statement
+ */
+ if (parse(ep, STATE_EXPR, flags) != STATE_EXPR_DONE) {
+ goto error;
+ }
+ if (ejLexGetToken(ep, state) != TOK_SEMI) {
+ goto error;
+ }
+
+/*
+ * The first time through, we save the current input context just
+ * to each step: prior to the conditional, the loop increment and the
+ * loop body.
+ */
+ ejLexSaveInputState(ep, &condScript);
+ if (parse(ep, STATE_COND, flags) != STATE_COND_DONE) {
+ goto error;
+ }
+ cond = (*ep->result != '0');
+
+ if (ejLexGetToken(ep, state) != TOK_SEMI) {
+ goto error;
+ }
+
+/*
+ * Don't execute the loop increment statement or the body first time
+ */
+ forFlags = flags & ~FLAGS_EXE;
+ ejLexSaveInputState(ep, &incrScript);
+ if (parse(ep, STATE_EXPR, forFlags) != STATE_EXPR_DONE) {
+ goto error;
+ }
+ if (ejLexGetToken(ep, state) != TOK_RPAREN) {
+ goto error;
+ }
+
+/*
+ * Parse the body and remember the end of the body script
+ */
+ ejLexSaveInputState(ep, &bodyScript);
+ if (parse(ep, STATE_STMT, forFlags) != STATE_STMT_DONE) {
+ goto error;
+ }
+ ejLexSaveInputState(ep, &endScript);
+
+/*
+ * Now actually do the for loop. Note loop has been rotated
+ */
+ while (cond && (flags & FLAGS_EXE) ) {
+/*
+ * Evaluate the body
+ */
+ ejLexRestoreInputState(ep, &bodyScript);
+
+ switch (parse(ep, STATE_STMT, flags)) {
+ case STATE_RET:
+ return STATE_RET;
+ case STATE_STMT_DONE:
+ break;
+ default:
+ goto error;
+ }
+/*
+ * Evaluate the increment script
+ */
+ ejLexRestoreInputState(ep, &incrScript);
+ if (parse(ep, STATE_EXPR, flags) != STATE_EXPR_DONE) {
+ goto error;
+ }
+/*
+ * Evaluate the condition
+ */
+ ejLexRestoreInputState(ep, &condScript);
+ if (parse(ep, STATE_COND, flags) != STATE_COND_DONE) {
+ goto error;
+ }
+ cond = (*ep->result != '0');
+ }
+ ejLexRestoreInputState(ep, &endScript);
+ done++;
+ break;
+
+ case TOK_VAR:
+ if (parse(ep, STATE_DEC_LIST, flags) != STATE_DEC_LIST_DONE) {
+ goto error;
+ }
+ done++;
+ break;
+
+ case TOK_COMMA:
+ ejLexPutbackToken(ep, TOK_EXPR, ep->token);
+ done++;
+ break;
+
+ case TOK_LPAREN:
+ if (state == STATE_EXPR) {
+ if (parse(ep, STATE_RELEXP, flags) != STATE_RELEXP_DONE) {
+ goto error;
+ }
+ if (ejLexGetToken(ep, state) != TOK_RPAREN) {
+ goto error;
+ }
+ return STATE_EXPR_DONE;
+ }
+ done++;
+ break;
+
+ case TOK_RPAREN:
+ ejLexPutbackToken(ep, tid, ep->token);
+ return STATE_EXPR_DONE;
+
+ case TOK_LBRACE:
+/*
+ * This handles any code in braces except "if () {} else {}"
+ */
+ if (state != STATE_STMT) {
+ goto error;
+ }
+
+/*
+ * Parse will return STATE_STMT_BLOCK_DONE when the RBRACE is seen
+ */
+ do {
+ state = parse(ep, STATE_STMT, flags);
+ } while (state == STATE_STMT_DONE);
+
+/*
+ * Allow return statement.
+ */
+ if (state == STATE_RET) {
+ return state;
+ }
+
+ if (ejLexGetToken(ep, state) != TOK_RBRACE) {
+ goto error;
+ }
+ return STATE_STMT_DONE;
+
+ case TOK_RBRACE:
+ if (state == STATE_STMT) {
+ ejLexPutbackToken(ep, tid, ep->token);
+ return STATE_STMT_BLOCK_DONE;
+ }
+ goto error;
+
+ case TOK_RETURN:
+ if (parse(ep, STATE_RELEXP, flags) != STATE_RELEXP_DONE) {
+ goto error;
+ }
+ if (flags & FLAGS_EXE) {
+ while ( ejLexGetToken(ep, state) != TOK_EOF );
+ done++;
+ return STATE_RET;
+ }
+ break;
+ }
+ }
+
+ if (expectSemi) {
+ tid = ejLexGetToken(ep, state);
+ if (tid != TOK_SEMI && tid != TOK_NEWLINE) {
+ goto error;
+ }
+
+/*
+ * Skip newline after semi-colon
+ */
+ ejRemoveNewlines(ep, state);
+ }
+
+/*
+ * Free resources and return the correct status
+ */
+doneParse:
+ if (tid == TOK_FOR) {
+ ejLexFreeInputState(ep, &condScript);
+ ejLexFreeInputState(ep, &incrScript);
+ ejLexFreeInputState(ep, &endScript);
+ ejLexFreeInputState(ep, &bodyScript);
+ }
+
+ if (state == STATE_STMT) {
+ return STATE_STMT_DONE;
+ } else if (state == STATE_DEC) {
+ return STATE_DEC_DONE;
+ } else if (state == STATE_EXPR) {
+ return STATE_EXPR_DONE;
+ } else if (state == STATE_EOF) {
+ return state;
+ } else {
+ return STATE_ERR;
+ }
+
+/*
+ * Common error exit
+ */
+error:
+ state = STATE_ERR;
+ goto doneParse;
+}
+
+/******************************************************************************/
+/*
+ * Parse variable declaration list
+ */
+
+static int parseDeclaration(ej_t *ep, int state, int flags)
+{
+ int tid;
+
+ a_assert(ep);
+
+/*
+ * Declarations can be of the following forms:
+ * var x;
+ * var x, y, z;
+ * var x = 1 + 2 / 3, y = 2 + 4;
+ *
+ * We set the variable to NULL if there is no associated assignment.
+ */
+
+ do {
+ if ((tid = ejLexGetToken(ep, state)) != TOK_ID) {
+ return STATE_ERR;
+ }
+ ejLexPutbackToken(ep, tid, ep->token);
+
+/*
+ * Parse the entire assignment or simple identifier declaration
+ */
+ if (parse(ep, STATE_DEC, flags) != STATE_DEC_DONE) {
+ return STATE_ERR;
+ }
+
+/*
+ * Peek at the next token, continue if comma seen
+ */
+ tid = ejLexGetToken(ep, state);
+ if (tid == TOK_SEMI) {
+ return STATE_DEC_LIST_DONE;
+ } else if (tid != TOK_COMMA) {
+ return STATE_ERR;
+ }
+ } while (tid == TOK_COMMA);
+
+ if (tid != TOK_SEMI) {
+ return STATE_ERR;
+ }
+ return STATE_DEC_LIST_DONE;
+}
+
+/******************************************************************************/
+/*
+ * Parse function arguments
+ */
+
+static int parseArgs(ej_t *ep, int state, int flags)
+{
+ int tid, aid;
+
+ a_assert(ep);
+
+ do {
+ state = parse(ep, STATE_RELEXP, flags);
+ if (state == STATE_EOF || state == STATE_ERR) {
+ return state;
+ }
+ if (state == STATE_RELEXP_DONE) {
+ aid = hAlloc((void***) &ep->func->args);
+ ep->func->args[aid] = bstrdup(B_L, ep->result);
+ ep->func->nArgs++;
+ }
+/*
+ * Peek at the next token, continue if more args (ie. comma seen)
+ */
+ tid = ejLexGetToken(ep, state);
+ if (tid != TOK_COMMA) {
+ ejLexPutbackToken(ep, tid, ep->token);
+ }
+ } while (tid == TOK_COMMA);
+
+ if (tid != TOK_RPAREN && state != STATE_RELEXP_DONE) {
+ return STATE_ERR;
+ }
+ return STATE_ARG_LIST_DONE;
+}
+
+/******************************************************************************/
+/*
+ * Parse conditional expression (relational ops separated by ||, &&)
+ */
+
+static int parseCond(ej_t *ep, int state, int flags)
+{
+ char_t *lhs, *rhs;
+ int tid, operator;
+
+ a_assert(ep);
+
+ setString(B_L, &ep->result, T(""));
+ rhs = lhs = NULL;
+ operator = 0;
+
+ do {
+/*
+ * Recurse to handle one side of a conditional. Accumulate the
+ * left hand side and the final result in ep->result.
+ */
+ state = parse(ep, STATE_RELEXP, flags);
+ if (state != STATE_RELEXP_DONE) {
+ state = STATE_ERR;
+ break;
+ }
+
+ if (operator > 0) {
+ setString(B_L, &rhs, ep->result);
+ if (evalCond(ep, lhs, operator, rhs) < 0) {
+ state = STATE_ERR;
+ break;
+ }
+ }
+ setString(B_L, &lhs, ep->result);
+
+ tid = ejLexGetToken(ep, state);
+ if (tid == TOK_LOGICAL) {
+ operator = (int) *ep->token;
+
+ } else if (tid == TOK_RPAREN || tid == TOK_SEMI) {
+ ejLexPutbackToken(ep, tid, ep->token);
+ state = STATE_COND_DONE;
+ break;
+
+ } else {
+ ejLexPutbackToken(ep, tid, ep->token);
+ }
+
+ } while (state == STATE_RELEXP_DONE);
+
+ if (lhs) {
+ bfree(B_L, lhs);
+ }
+
+ if (rhs) {
+ bfree(B_L, rhs);
+ }
+ return state;
+}
+
+/******************************************************************************/
+/*
+ * Parse expression (leftHandSide operator rightHandSide)
+ */
+
+static int parseExpr(ej_t *ep, int state, int flags)
+{
+ char_t *lhs, *rhs;
+ int rel, tid;
+
+ a_assert(ep);
+
+ setString(B_L, &ep->result, T(""));
+ rhs = lhs = NULL;
+ rel = 0;
+ tid = 0;
+
+ do {
+/*
+ * This loop will handle an entire expression list. We call parse
+ * to evalutate each term which returns the result in ep->result.
+ */
+ if (tid == TOK_LOGICAL) {
+ if ((state = parse(ep, STATE_RELEXP, flags)) != STATE_RELEXP_DONE) {
+ state = STATE_ERR;
+ break;
+ }
+ } else {
+ if ((state = parse(ep, STATE_EXPR, flags)) != STATE_EXPR_DONE) {
+ state = STATE_ERR;
+ break;
+ }
+ }
+
+ if (rel > 0) {
+ setString(B_L, &rhs, ep->result);
+ if (tid == TOK_LOGICAL) {
+ if (evalCond(ep, lhs, rel, rhs) < 0) {
+ state = STATE_ERR;
+ break;
+ }
+ } else {
+ if (evalExpr(ep, lhs, rel, rhs) < 0) {
+ state = STATE_ERR;
+ break;
+ }
+ }
+ }
+ setString(B_L, &lhs, ep->result);
+
+ if ((tid = ejLexGetToken(ep, state)) == TOK_EXPR ||
+ tid == TOK_INC_DEC || tid == TOK_LOGICAL) {
+ rel = (int) *ep->token;
+
+ } else {
+ ejLexPutbackToken(ep, tid, ep->token);
+ state = STATE_RELEXP_DONE;
+ }
+
+ } while (state == STATE_EXPR_DONE);
+
+ if (rhs) {
+ bfree(B_L, rhs);
+ }
+
+ if (lhs) {
+ bfree(B_L, lhs);
+ }
+
+ return state;
+}
+
+/******************************************************************************/
+/*
+ * Evaluate a condition. Implements &&, ||, !
+ */
+
+static int evalCond(ej_t *ep, char_t *lhs, int rel, char_t *rhs)
+{
+ char_t buf[16];
+ int l, r, lval;
+
+ a_assert(lhs);
+ a_assert(rhs);
+ a_assert(rel > 0);
+
+ lval = 0;
+ if (gisdigit((int)*lhs) && gisdigit((int)*rhs)) {
+ l = gatoi(lhs);
+ r = gatoi(rhs);
+ switch (rel) {
+ case COND_AND:
+ lval = l && r;
+ break;
+ case COND_OR:
+ lval = l || r;
+ break;
+ default:
+ ejError(ep, T("Bad operator %d"), rel);
+ return -1;
+ }
+ } else {
+ if (!gisdigit((int)*lhs)) {
+ ejError(ep, T("Conditional must be numeric"), lhs);
+ } else {
+ ejError(ep, T("Conditional must be numeric"), rhs);
+ }
+ }
+
+ stritoa(lval, buf, sizeof(buf));
+ setString(B_L, &ep->result, buf);
+ return 0;
+}
+
+/******************************************************************************/
+/*
+ * Evaluate an operation
+ */
+
+static int evalExpr(ej_t *ep, char_t *lhs, int rel, char_t *rhs)
+{
+ char_t *cp, buf[16];
+ int numeric, l, r, lval;
+
+ a_assert(lhs);
+ a_assert(rhs);
+ a_assert(rel > 0);
+
+/*
+ * All of the characters in the lhs and rhs must be numeric
+ */
+ numeric = 1;
+ for (cp = lhs; *cp; cp++) {
+ if (!gisdigit((int)*cp)) {
+ numeric = 0;
+ break;
+ }
+ }
+
+ if (numeric) {
+ for (cp = rhs; *cp; cp++) {
+ if (!gisdigit((int)*cp)) {
+ numeric = 0;
+ break;
+ }
+ }
+ }
+
+ if (numeric) {
+ l = gatoi(lhs);
+ r = gatoi(rhs);
+ switch (rel) {
+ case EXPR_PLUS:
+ lval = l + r;
+ break;
+ case EXPR_INC:
+ lval = l + 1;
+ break;
+ case EXPR_MINUS:
+ lval = l - r;
+ break;
+ case EXPR_DEC:
+ lval = l - 1;
+ break;
+ case EXPR_MUL:
+ lval = l * r;
+ break;
+ case EXPR_DIV:
+ if (r != 0) {
+ lval = l / r;
+ } else {
+ lval = 0;
+ }
+ break;
+ case EXPR_MOD:
+ if (r != 0) {
+ lval = l % r;
+ } else {
+ lval = 0;
+ }
+ break;
+ case EXPR_LSHIFT:
+ lval = l << r;
+ break;
+ case EXPR_RSHIFT:
+ lval = l >> r;
+ break;
+ case EXPR_EQ:
+ lval = l == r;
+ break;
+ case EXPR_NOTEQ:
+ lval = l != r;
+ break;
+ case EXPR_LESS:
+ lval = (l < r) ? 1 : 0;
+ break;
+ case EXPR_LESSEQ:
+ lval = (l <= r) ? 1 : 0;
+ break;
+ case EXPR_GREATER:
+ lval = (l > r) ? 1 : 0;
+ break;
+ case EXPR_GREATEREQ:
+ lval = (l >= r) ? 1 : 0;
+ break;
+ case EXPR_BOOL_COMP:
+ lval = (r == 0) ? 1 : 0;
+ break;
+ default:
+ ejError(ep, T("Bad operator %d"), rel);
+ return -1;
+ }
+
+ } else {
+ switch (rel) {
+ case EXPR_PLUS:
+ clearString(&ep->result);
+ appendString(&ep->result, lhs);
+ appendString(&ep->result, rhs);
+ return 0;
+ case EXPR_LESS:
+ lval = gstrcmp(lhs, rhs) < 0;
+ break;
+ case EXPR_LESSEQ:
+ lval = gstrcmp(lhs, rhs) <= 0;
+ break;
+ case EXPR_GREATER:
+ lval = gstrcmp(lhs, rhs) > 0;
+ break;
+ case EXPR_GREATEREQ:
+ lval = gstrcmp(lhs, rhs) >= 0;
+ break;
+ case EXPR_EQ:
+ lval = gstrcmp(lhs, rhs) == 0;
+ break;
+ case EXPR_NOTEQ:
+ lval = gstrcmp(lhs, rhs) != 0;
+ break;
+ case EXPR_INC:
+ case EXPR_DEC:
+ case EXPR_MINUS:
+ case EXPR_DIV:
+ case EXPR_MOD:
+ case EXPR_LSHIFT:
+ case EXPR_RSHIFT:
+ default:
+ ejError(ep, T("Bad operator"));
+ return -1;
+ }
+ }
+
+ stritoa(lval, buf, sizeof(buf));
+ setString(B_L, &ep->result, buf);
+ return 0;
+}
+
+/******************************************************************************/
+/*
+ * Evaluate a function
+ */
+
+static int evalFunction(ej_t *ep)
+{
+ sym_t *sp;
+ int (*fn)(int eid, void *handle, int argc, char_t **argv);
+
+ if ((sp = symLookup(ep->functions, ep->func->fname)) == NULL) {
+ ejError(ep, T("Undefined procedure %s"), ep->func->fname);
+ return -1;
+ }
+
+ fn = (int (*)(int, void*, int, char_t**)) sp->content.value.integer;
+ if (fn == NULL) {
+ ejError(ep, T("Undefined procedure %s"), ep->func->fname);
+ return -1;
+ }
+
+ return (*fn)(ep->eid, (void*) ep->userHandle, ep->func->nArgs,
+ ep->func->args);
+}
+
+/******************************************************************************/
+/*
+ * Output a parse ej_error message
+ */
+
+void ejError(ej_t* ep, char_t* fmt, ...)
+{
+ va_list args;
+ ejinput_t *ip;
+ char_t *errbuf, *msgbuf;
+
+ a_assert(ep);
+ a_assert(fmt);
+ ip = ep->input;
+
+ va_start(args, fmt);
+ msgbuf = NULL;
+ fmtValloc(&msgbuf, E_MAX_ERROR, fmt, args);
+ va_end(args);
+
+ if (ep && ip) {
+ fmtAlloc(&errbuf, E_MAX_ERROR, T("%s\n At line %d, line => \n\n%s\n"),
+ msgbuf, ip->lineNumber, ip->line);
+ bfreeSafe(B_L, ep->error);
+ ep->error = errbuf;
+ }
+ bfreeSafe(B_L, msgbuf);
+}
+
+/******************************************************************************/
+/*
+ * Clear a string value
+ */
+
+static void clearString(char_t **ptr)
+{
+ a_assert(ptr);
+
+ if (*ptr) {
+ bfree(B_L, *ptr);
+ }
+ *ptr = NULL;
+}
+
+/******************************************************************************/
+/*
+ * Set a string value
+ */
+
+static void setString(B_ARGS_DEC, char_t **ptr, char_t *s)
+{
+ a_assert(ptr);
+
+ if (*ptr) {
+ bfree(B_ARGS, *ptr);
+ }
+ *ptr = bstrdup(B_ARGS, s);
+}
+
+/******************************************************************************/
+/*
+ * Append to the pointer value
+ */
+
+static void appendString(char_t **ptr, char_t *s)
+{
+ int len, oldlen;
+
+ a_assert(ptr);
+
+ if (*ptr) {
+ len = gstrlen(s);
+ oldlen = gstrlen(*ptr);
+ *ptr = brealloc(B_L, *ptr, (len + oldlen + 1) * sizeof(char_t));
+ gstrcpy(&(*ptr)[oldlen], s);
+ } else {
+ *ptr = bstrdup(B_L, s);
+ }
+}
+
+/******************************************************************************/
+/*
+ * Define a function
+ */
+
+int ejSetGlobalFunction(int eid, char_t *name,
+ int (*fn)(int eid, void *handle, int argc, char_t **argv))
+{
+ ej_t *ep;
+
+ if ((ep = ejPtr(eid)) == NULL) {
+ return -1;
+ }
+ return ejSetGlobalFunctionDirect(ep->functions, name, fn);
+}
+
+/******************************************************************************/
+/*
+ * Define a function directly into the function symbol table.
+ */
+
+int ejSetGlobalFunctionDirect(sym_fd_t functions, char_t *name,
+ int (*fn)(int eid, void *handle, int argc, char_t **argv))
+{
+ if (symEnter(functions, name, valueInteger((long) fn), 0) == NULL) {
+ return -1;
+ }
+ return 0;
+}
+
+/******************************************************************************/
+/*
+ * Remove ("undefine") a function
+ */
+
+int ejRemoveGlobalFunction(int eid, char_t *name)
+{
+ ej_t *ep;
+
+ if ((ep = ejPtr(eid)) == NULL) {
+ return -1;
+ }
+ return symDelete(ep->functions, name);
+}
+
+/******************************************************************************/
+/*
+ * Get a function definition
+ */
+
+void *ejGetGlobalFunction(int eid, char_t *name)
+{
+ ej_t *ep;
+ sym_t *sp;
+ int (*fn)(int eid, void *handle, int argc, char_t **argv);
+
+ if ((ep = ejPtr(eid)) == NULL) {
+ return NULL;
+ }
+
+ if ((sp = symLookup(ep->functions, name)) != NULL) {
+ fn = (int (*)(int, void*, int, char_t**)) sp->content.value.integer;
+ return (void*) fn;
+ }
+ return NULL;
+}
+
+/******************************************************************************/
+/*
+ * Utility routine to crack Ejscript arguments. Return the number of args
+ * seen. This routine only supports %s and %d type args.
+ *
+ * Typical usage:
+ *
+ * if (ejArgs(argc, argv, "%s %d", &name, &age) < 2) {
+ * error("Insufficient args\n");
+ * return -1;
+ * }
+ */
+
+int ejArgs(int argc, char_t **argv, char_t *fmt, ...)
+{
+ va_list vargs;
+ char_t *cp, **sp;
+ int *ip;
+ int argn;
+
+ va_start(vargs, fmt);
+
+ if (argv == NULL) {
+ return 0;
+ }
+
+ for (argn = 0, cp = fmt; cp && *cp && argv[argn]; ) {
+ if (*cp++ != '%') {
+ continue;
+ }
+
+ switch (*cp) {
+ case 'd':
+ ip = va_arg(vargs, int*);
+ *ip = gatoi(argv[argn]);
+ break;
+
+ case 's':
+ sp = va_arg(vargs, char_t**);
+ *sp = argv[argn];
+ break;
+
+ default:
+/*
+ * Unsupported
+ */
+ a_assert(0);
+ }
+ argn++;
+ }
+
+ va_end(vargs);
+ return argn;
+}
+
+/******************************************************************************/
+/*
+ * Define the user handle
+ */
+
+void ejSetUserHandle(int eid, int handle)
+{
+ ej_t *ep;
+
+ if ((ep = ejPtr(eid)) == NULL) {
+ return;
+ }
+ ep->userHandle = handle;
+}
+
+/******************************************************************************/
+/*
+ * Get the user handle
+ */
+
+int ejGetUserHandle(int eid)
+{
+ ej_t *ep;
+
+ if ((ep = ejPtr(eid)) == NULL) {
+ return -1;
+ }
+ return ep->userHandle;
+}
+
+/******************************************************************************/
+/*
+ * Get the current line number
+ */
+
+int ejGetLineNumber(int eid)
+{
+ ej_t *ep;
+
+ if ((ep = ejPtr(eid)) == NULL) {
+ return -1;
+ }
+ return ep->input->lineNumber;
+}
+
+/******************************************************************************/
+/*
+ * Set the result
+ */
+
+void ejSetResult(int eid, char_t *s)
+{
+ ej_t *ep;
+
+ if ((ep = ejPtr(eid)) == NULL) {
+ return;
+ }
+ setString(B_L, &ep->result, s);
+}
+
+/******************************************************************************/
+/*
+ * Get the result
+ */
+
+char_t *ejGetResult(int eid)
+{
+ ej_t *ep;
+
+ if ((ep = ejPtr(eid)) == NULL) {
+ return NULL;
+ }
+ return ep->result;
+}
+
+/******************************************************************************/
+/*
+ * Set a variable. Note: a variable with a value of NULL means declared but
+ * undefined. The value is defined in the top-most variable frame.
+ */
+
+void ejSetVar(int eid, char_t *var, char_t *value)
+{
+ ej_t *ep;
+ value_t v;
+
+ a_assert(var && *var);
+
+ if ((ep = ejPtr(eid)) == NULL) {
+ return;
+ }
+
+ if (value == NULL) {
+ v = valueString(value, 0);
+ } else {
+ v = valueString(value, VALUE_ALLOCATE);
+ }
+ symEnter(ep->variables[ep->variableMax - 1] - EJ_OFFSET, var, v, 0);
+}
+
+/******************************************************************************/
+/*
+ * Set a local variable. Note: a variable with a value of NULL means
+ * declared but undefined. The value is defined in the top-most variable frame.
+ */
+
+void ejSetLocalVar(int eid, char_t *var, char_t *value)
+{
+ ej_t *ep;
+ value_t v;
+
+ a_assert(var && *var);
+
+ if ((ep = ejPtr(eid)) == NULL) {
+ return;
+ }
+
+ if (value == NULL) {
+ v = valueString(value, 0);
+ } else {
+ v = valueString(value, VALUE_ALLOCATE);
+ }
+ symEnter(ep->variables[ep->variableMax - 1] - EJ_OFFSET, var, v, 0);
+}
+
+/******************************************************************************/
+/*
+ * Set a global variable. Note: a variable with a value of NULL means
+ * declared but undefined. The value is defined in the global variable frame.
+ */
+
+void ejSetGlobalVar(int eid, char_t *var, char_t *value)
+{
+ ej_t *ep;
+ value_t v;
+
+ a_assert(var && *var);
+
+ if ((ep = ejPtr(eid)) == NULL) {
+ return;
+ }
+
+ if (value == NULL) {
+ v = valueString(value, 0);
+ } else {
+ v = valueString(value, VALUE_ALLOCATE);
+ }
+ symEnter(ep->variables[0] - EJ_OFFSET, var, v, 0);
+}
+
+/******************************************************************************/
+/*
+ * Get a variable
+ */
+
+int ejGetVar(int eid, char_t *var, char_t **value)
+{
+ ej_t *ep;
+ sym_t *sp;
+ int i;
+
+ a_assert(var && *var);
+ a_assert(value);
+
+ if ((ep = ejPtr(eid)) == NULL) {
+ return -1;
+ }
+
+ i = ep->variableMax - 1;
+ if ((sp = symLookup(ep->variables[i] - EJ_OFFSET, var)) == NULL) {
+ i = 0;
+ if ((sp = symLookup(ep->variables[0] - EJ_OFFSET, var)) == NULL) {
+ return -1;
+ }
+ }
+ a_assert(sp->content.type == string);
+ *value = sp->content.value.string;
+ return i;
+}
+
+/******************************************************************************/
+/*
+ * Get the variable symbol table
+ */
+
+sym_fd_t ejGetVariableTable(int eid)
+{
+ ej_t *ep;
+
+ if ((ep = ejPtr(eid)) == NULL) {
+ return -1;
+ }
+ return *ep->variables;
+}
+
+/******************************************************************************/
+/*
+ * Get the functions symbol table
+ */
+
+sym_fd_t ejGetFunctionTable(int eid)
+{
+ ej_t *ep;
+
+ if ((ep = ejPtr(eid)) == NULL) {
+ return -1;
+ }
+ return ep->functions;
+}
+
+/******************************************************************************/
+/*
+ * Free an argument list
+ */
+
+static void freeFunc(ejfunc_t *func)
+{
+ int i;
+
+ for (i = func->nArgs - 1; i >= 0; i--) {
+ bfree(B_L, func->args[i]);
+ func->nArgs = hFree((void***) &func->args, i);
+ }
+
+ if (func->fname) {
+ bfree(B_L, func->fname);
+ func->fname = NULL;
+ }
+}
+
+/******************************************************************************/
+/*
+ * Get Ejscript pointer
+ */
+
+static ej_t *ejPtr(int eid)
+{
+ a_assert(0 <= eid && eid < ejMax);
+
+ if (eid < 0 || eid >= ejMax || ejHandles[eid] == NULL) {
+ ejError(NULL, T("Bad handle %d"), eid);
+ return NULL;
+ }
+ return ejHandles[eid];
+}
+
+/******************************************************************************/
+/*
+ * This function removes any new lines. Used for else cases, etc.
+ */
+static void ejRemoveNewlines(ej_t *ep, int state)
+{
+ int tid;
+
+ do {
+ tid = ejLexGetToken(ep, state);
+ } while (tid == TOK_NEWLINE);
+
+ ejLexPutbackToken(ep, tid, ep->token);
+}
+
+/******************************************************************************/
+
diff --git a/cleopatre/application/spidgoahead/emfdb.c b/cleopatre/application/spidgoahead/emfdb.c
new file mode 100644
index 0000000000..2822349b6b
--- /dev/null
+++ b/cleopatre/application/spidgoahead/emfdb.c
@@ -0,0 +1,1064 @@
+/*
+ * emfdb.c -- EMF database compatability functions for GoAhead WebServer.
+ *
+ * Copyright (c) GoAhead Software Inc., 1995-2000. All Rights Reserved.
+ *
+ * See the file "license.txt" for usage and redistribution license requirements
+ *
+ * $Id: emfdb.c,v 1.4 2003/09/29 19:48:08 bporter Exp $
+ */
+
+/******************************** Description *********************************/
+/*
+ * Textfile-based database support for WebServer 2.1.
+ */
+
+/********************************* Includes ***********************************/
+
+#include "emfdb.h"
+#include "wsIntrn.h"
+
+/********************************* Defines ************************************/
+
+#define KEYWORD_TABLE T("TABLE")
+#define KEYWORD_ROW T("ROW")
+
+/*********************************** Locals ***********************************/
+
+/*
+ * Variable to support the basicSet and basicGet functions.
+ */
+
+static char_t *basicProdDir = NULL;
+static char_t *basicDefaultDir = T("/etc"); /* Default set to current */
+
+/*
+ * hAlloc chain list of table schemas to be closed
+ */
+
+static int dbMaxTables = 0;
+static dbTable_t **dbListTables = NULL;
+
+/****************************** Forward Declarations **************************/
+
+static int crack(char_t *buf, char_t **key, char_t **val);
+static char_t *trim(char_t *str);
+static int GetColumnIndex(int tid, char_t *colName);
+
+/******************************************************************************/
+/*
+ * Add a schema to the module-internal schema database
+ */
+
+int dbRegisterDBSchema(dbTable_t *pTableRegister)
+{
+ dbTable_t *pTable;
+ int tid;
+
+ a_assert(pTableRegister);
+
+ trace(4, T("DB: Registering database table <%s>\n"),
+ pTableRegister->name);
+
+/*
+ * Bump up the size of the table array
+ */
+ tid = hAllocEntry((void***) &dbListTables,
+ &dbMaxTables, sizeof(dbTable_t));
+
+/*
+ * Copy the table schema to the last spot in schema array
+ */
+ a_assert(dbListTables);
+ pTable = dbListTables[tid];
+ a_assert(pTable);
+
+/*
+ * Copy the name of the table
+ */
+ pTable->name = bstrdup(B_L, pTableRegister->name);
+
+/*
+ * Copy the number of columns
+ */
+ pTable->nColumns = pTableRegister->nColumns;
+
+/*
+ * Copy the column definitions
+ */
+ if (pTable->nColumns > 0) {
+ int i;
+ pTable->columnNames = balloc(B_L, sizeof(char_t *) * pTable->nColumns);
+ pTable->columnTypes = balloc(B_L, sizeof(int *) * pTable->nColumns);
+
+ for (i = 0; (i < pTableRegister->nColumns); i++) {
+ pTable->columnNames[i] =
+ bstrdup(B_L, pTableRegister->columnNames[i]);
+ pTable->columnTypes[i] = pTableRegister->columnTypes[i];
+ }
+
+ } else {
+ pTable->columnNames = NULL;
+ pTable->columnTypes = NULL;
+ }
+
+/*
+ * Zero out the table's data (very important!)
+ */
+ pTable->nRows = 0;
+ pTable->rows = NULL;
+
+ return 0;
+}
+
+/******************************************************************************/
+/*
+ * This is provided for compatibility with EMF. Tables are "registered"
+ * with staticly defined schemas. There is only one did in this package: 0.
+ */
+
+int dbOpen(char_t *tablename, char_t *filename,
+ int (*gettime)(int did), int flags)
+{
+ basicProdDir = NULL;
+ //basicDefaultDir = T(".");
+ dbMaxTables = 0;
+ dbListTables = NULL;
+ return 0;
+}
+
+/******************************************************************************/
+/*
+ * Delete all the rows of the tables, and all of the tables
+ */
+
+void dbClose(int did)
+{
+ int table, column;
+ dbTable_t *pTable;
+
+/*
+ * Before doing anything, delete all the contents of the database
+ */
+ dbZero(did);
+
+/*
+ * Now delete the tables
+ */
+ for (table = 0; table < dbMaxTables; table++) {
+ pTable = dbListTables[table];
+
+ if (pTable != NULL) {
+/*
+ * Delete the table schema
+ */
+ if (pTable->nColumns) {
+ for (column = 0; column < pTable->nColumns; column++) {
+ bfreeSafe(B_L, pTable->columnNames[column]);
+ }
+ bfreeSafe(B_L, pTable->columnNames);
+ bfreeSafe(B_L, pTable->columnTypes);
+ }
+/*
+ * Delete the table name
+ */
+ bfreeSafe(B_L, pTable->name);
+/*
+ * Free the table
+ */
+ bfreeSafe(B_L, pTable);
+ hFree((void ***) &dbListTables, table);
+ }
+ }
+
+ if (dbListTables) {
+ bfree(B_L, dbListTables);
+ }
+
+/*
+ * Set the global table list to a safe value
+ */
+ dbListTables = NULL;
+ dbMaxTables = 0;
+}
+
+
+/******************************************************************************/
+/*
+ * Delete all the data records in all tables
+ */
+
+void dbZero(int did)
+{
+ int table, row, column, nRows, nColumns;
+ int *pRow;
+ dbTable_t *pTable;
+
+/*
+ * Delete all data from all tables
+ */
+ for (table = 0; table < dbMaxTables; table++) {
+ pTable = dbListTables[table];
+/*
+ * Delete the row data contained within the schema
+ */
+ if (pTable) {
+ nColumns = pTable->nColumns;
+ nRows = pTable->nRows;
+ for (row = 0; row < nRows; row++) {
+ pRow = pTable->rows[row];
+ if (pRow) {
+/*
+ * Only delete the contents of rows not previously deleted!
+ */
+ for (column = 0; column < nColumns; column++) {
+ if (pTable->columnTypes[column] == T_STRING) {
+ bfreeSafe(B_L, (char_t *)(pRow[column]));
+ pRow[column] = (int)NULL;
+ }
+ }
+
+ bfreeSafe(B_L, pRow);
+ hFree((void ***) &pTable->rows, row);
+ }
+ }
+
+ pTable->rows = NULL;
+ pTable->nRows = 0;
+ }
+ }
+}
+
+/******************************************************************************/
+/*
+ * Find the a row in the table with the given string in the given column
+ */
+
+int dbSearchStr(int did, char_t *tablename,
+ char_t *colName, char_t *value, int flags)
+{
+ int tid, nRows, nColumns, column;
+ int match = 0;
+ dbTable_t *pTable;
+
+ a_assert(tablename);
+ a_assert(colName);
+ a_assert(value);
+
+ tid = dbGetTableId(0, tablename);
+ a_assert(tid >= 0);
+
+ if ((tid >= 0) && (tid < dbMaxTables) && (dbListTables[tid] != NULL)) {
+ pTable = dbListTables[tid];
+ } else {
+ return DB_ERR_TABLE_NOT_FOUND;
+ }
+
+ nColumns = pTable->nColumns;
+ nRows = pTable->nRows;
+ column = GetColumnIndex(tid, colName);
+ a_assert (column >= 0);
+
+ if (column >= 0) {
+ char_t *compareVal;
+ int row, *pRow;
+/*
+ * Scan through rows until we find a match.
+ * Note that some of these rows may be deleted!
+ */
+ row = 0;
+ while (row < nRows) {
+ pRow = pTable->rows[row];
+ if (pRow) {
+ compareVal = (char_t *)(pRow[column]);
+ if (NULL != compareVal)
+ {
+ if (DB_CASE_INSENSITIVE == flags)
+ {
+ match = gstricmp(compareVal, value);
+ }
+ else
+ {
+ match = gstrcmp(compareVal, value);
+ }
+ if (0 == match)
+ {
+ return row;
+ }
+ }
+ }
+ row++;
+ }
+ } else {
+/*
+ * Return -2 if search column was not found
+ */
+ trace(3, T("DB: Unable to find column <%s> in table <%s>\n"),
+ colName, tablename);
+ return DB_ERR_COL_NOT_FOUND;
+ }
+
+ return -1;
+}
+
+/******************************************************************************/
+/*
+ * Add a new row to the given table. Return the new row ID.
+ */
+
+int dbAddRow(int did, char_t *tablename)
+{
+ int tid, size;
+ dbTable_t *pTable;
+
+ a_assert(tablename);
+
+ tid = dbGetTableId(0, tablename);
+ a_assert(tid >= 0);
+
+ if ((tid >= 0) && (tid < dbMaxTables) && (dbListTables[tid] != NULL)) {
+ pTable = dbListTables[tid];
+ } else {
+ return DB_ERR_TABLE_NOT_FOUND;
+ }
+
+ a_assert(pTable);
+
+ if (pTable) {
+ trace(5, T("DB: Adding a row to table <%s>\n"), tablename);
+
+ size = pTable->nColumns * max(sizeof(int), sizeof(char_t *));
+ return hAllocEntry((void***) &(pTable->rows), &(pTable->nRows), size);
+ }
+
+ return -1;
+}
+
+/******************************************************************************/
+/*
+ * Delete a row in the table.
+ */
+
+int dbDeleteRow(int did, char_t *tablename, int row)
+{
+ int tid, nColumns, nRows;
+ dbTable_t *pTable;
+
+ a_assert(tablename);
+ tid = dbGetTableId(0, tablename);
+ a_assert(tid >= 0);
+
+ if ((tid >= 0) && (tid < dbMaxTables) && (dbListTables[tid] != NULL)) {
+ pTable = dbListTables[tid];
+ } else {
+ return DB_ERR_TABLE_NOT_FOUND;
+ }
+
+ nColumns = pTable->nColumns;
+ nRows = pTable->nRows;
+
+ if ((row >= 0) && (row < nRows)) {
+ int *pRow = pTable->rows[row];
+
+ if (pRow) {
+ int column = 0;
+/*
+ * Free up any allocated strings
+ */
+ while (column < nColumns) {
+ if (pRow[column] &&
+ (pTable->columnTypes[column] == T_STRING)) {
+ bfree(B_L, (char_t *)pRow[column]);
+ }
+
+ column++;
+ }
+/*
+ * Zero out the row for safety
+ */
+ memset(pRow, 0, nColumns * max(sizeof(int), sizeof(char_t *)));
+
+ bfreeSafe(B_L, pRow);
+ pTable->nRows = hFree((void ***)&pTable->rows, row);
+ trace(5, T("DB: Deleted row <%d> from table <%s>\n"),
+ row, tablename);
+ }
+ return 0;
+ } else {
+ trace(3, T("DB: Unable to delete row <%d> from table <%s>\n"),
+ row, tablename);
+ }
+
+ return -1;
+}
+
+/*****************************************************************************/
+/*
+ * Grow the rows in the table to the nominated size.
+ */
+
+int dbSetTableNrow(int did, char_t *tablename, int nNewRows)
+{
+ int nRet, tid, nRows, nColumns;
+ dbTable_t *pTable;
+
+ a_assert(tablename);
+ tid = dbGetTableId(0, tablename);
+ a_assert(tid >= 0) ;
+
+ if ((tid >= 0) && (tid < dbMaxTables) && (dbListTables[tid] != NULL)) {
+ pTable = dbListTables[tid];
+ } else {
+ return DB_ERR_TABLE_NOT_FOUND;
+ }
+
+ nRet = -1;
+
+ a_assert(pTable);
+ if (pTable) {
+ nColumns = pTable->nColumns;
+ nRows = pTable->nRows;
+ nRet = 0;
+
+ if (nRows >= nNewRows) {
+/*
+ * If number of rows already allocated exceeds requested number, do nothing
+ */
+ trace(4, T("DB: Ignoring row set to <%d> in table <%s>\n"),
+ nNewRows, tablename);
+ } else {
+ trace(4, T("DB: Setting rows to <%d> in table <%s>\n"),
+ nNewRows, tablename);
+ while (pTable->nRows < nNewRows) {
+ if (dbAddRow(did, tablename) < 0) {
+ return -1;
+ }
+ }
+ }
+ }
+
+ return nRet;
+}
+
+/******************************************************************************/
+/*
+ * Return the number of rows in the given table
+ */
+
+int dbGetTableNrow(int did, char_t *tablename)
+{
+ int tid;
+
+ a_assert(tablename);
+ tid = dbGetTableId(did, tablename);
+
+ if ((tid >= 0) && (tid < dbMaxTables) && (dbListTables[tid] != NULL)) {
+ return (dbListTables[tid])->nRows;
+ } else {
+ return -1;
+ }
+}
+
+/******************************************************************************/
+/*
+ * Do table driven read of the database
+ */
+
+int dbReadInt(int did, char_t *table, char_t *column, int row, int *returnValue)
+{
+ int colIndex, *pRow, tid;
+ dbTable_t *pTable;
+
+ a_assert(table);
+ a_assert(column);
+ a_assert(returnValue);
+
+ tid = dbGetTableId(0, table);
+ a_assert(tid >= 0);
+
+/*
+ * Return -6 if table is not found
+ */
+ if (tid < 0) {
+ return DB_ERR_TABLE_NOT_FOUND;
+ }
+
+/*
+ * Return -7 if table id has been deleted
+ */
+ pTable = dbListTables[tid];
+ if (pTable == NULL) {
+ return DB_ERR_TABLE_DELETED;
+ }
+
+ a_assert(row >= 0);
+
+ if ((row >= 0) && (row < pTable->nRows)) {
+ colIndex = GetColumnIndex(tid, column);
+ a_assert(colIndex >= 0);
+
+ if (colIndex >= 0) {
+ pRow = pTable->rows[row];
+ if (pRow) {
+ *returnValue = pRow[colIndex];
+ return 0;
+ }
+ return DB_ERR_ROW_DELETED;
+ }
+ return DB_ERR_COL_NOT_FOUND;
+ }
+
+ return DB_ERR_ROW_NOT_FOUND;
+}
+
+/******************************************************************************/
+/*
+ * dbReadStr calls dbReadInt to do table driven read of database
+ */
+
+int dbReadStr(int did, char_t *table, char_t *column, int row,
+ char_t **returnValue)
+{
+ return dbReadInt(did, table, column, row, (int *)returnValue);
+}
+
+/******************************************************************************/
+/*
+ * The dbWriteInt function writes a value into a table at a given row and
+ * column. The existence of the row and column is verified before the
+ * write. 0 is returned on succes, -1 is returned on error.
+ */
+
+int dbWriteInt(int did, char_t *table, char_t *column, int row, int iData)
+{
+ int tid, colIndex, *pRow;
+ dbTable_t *pTable;
+
+ a_assert(table);
+ a_assert(column);
+
+/*
+ * Make sure that this table exists
+ */
+ tid = dbGetTableId(0, table);
+ a_assert(tid >= 0);
+
+ if (tid < 0) {
+ return DB_ERR_TABLE_NOT_FOUND;
+ }
+
+ pTable = dbListTables[tid];
+
+ if (pTable) {
+/*
+ * Make sure that the column exists
+ */
+ colIndex = GetColumnIndex(tid, column);
+ a_assert(colIndex >= 0);
+ if (colIndex >= 0) {
+/*
+ * Make sure that the row exists
+ */
+ a_assert((row >= 0) && (row < pTable->nRows));
+ if ((row >= 0) && (row < pTable->nRows)) {
+ pRow = pTable->rows[row];
+ if (pRow) {
+ pRow[colIndex] = iData;
+ return 0;
+ }
+ return DB_ERR_ROW_DELETED;
+ }
+ return DB_ERR_ROW_NOT_FOUND;
+ }
+ return DB_ERR_COL_NOT_FOUND;
+ }
+
+ return DB_ERR_TABLE_DELETED;
+}
+
+/******************************************************************************/
+/*
+ * The dbWriteStr function writes a string value into a table at a given row
+ * and column. The existence of the row and column is verified before the
+ * write. The column is also checked to confirm it is a string field.
+ * 0 is returned on succes, -1 is returned on error.
+ */
+
+int dbWriteStr(int did, char_t *table, char_t *column, int row, char_t *s)
+{
+ int tid, colIndex;
+ int *pRow;
+ char_t *ptr;
+ dbTable_t *pTable;
+
+ a_assert(table);
+ a_assert(column);
+
+ tid = dbGetTableId(0, table);
+ a_assert(tid >= 0);
+
+ if (tid < 0) {
+ return DB_ERR_TABLE_NOT_FOUND;
+ }
+
+/*
+ * Make sure that this table exists
+ */
+ pTable = dbListTables[tid];
+ a_assert(pTable);
+ if (!pTable) {
+ return DB_ERR_TABLE_DELETED;
+ }
+
+/*
+ * Make sure that this column exists
+ */
+ colIndex = GetColumnIndex(tid, column);
+ if (colIndex < 0) {
+ return DB_ERR_COL_NOT_FOUND;
+ }
+
+/*
+ * Make sure that this column is a string column
+ */
+ if (pTable->columnTypes[colIndex] != T_STRING) {
+ return DB_ERR_BAD_FORMAT;
+ }
+
+/*
+ * Make sure that the row exists
+ */
+ a_assert((row >= 0) && (row < pTable->nRows));
+ if ((row >= 0) && (row < pTable->nRows)) {
+ pRow = pTable->rows[row];
+ } else {
+ return DB_ERR_ROW_NOT_FOUND;
+ }
+
+ if (!pRow) {
+ return DB_ERR_ROW_DELETED;
+ }
+
+/*
+ * If the column already has a value, be sure to delete it to prevent
+ * memory leaks.
+ */
+ if (pRow[colIndex]) {
+ bfree(B_L, (char_t *) pRow[colIndex]);
+ }
+
+/*
+ * Make sure we make a copy of the string to write into the column.
+ * This allocated string will be deleted when the row is deleted.
+ */
+ ptr = bstrdup(B_L, s);
+ pRow[colIndex] = (int)ptr;
+
+ return 0;
+}
+
+/******************************************************************************/
+/*
+ * Print a key-value pair to a file
+ */
+
+static int dbWriteKeyValue(int fd, char_t *key, char_t *value)
+{
+ int rc;
+ int len;
+ char_t *pLineOut;
+
+ a_assert(key && *key);
+ a_assert(value);
+
+ fmtAlloc(&pLineOut, BUF_MAX, T("%s=%s\n"), key, value);
+
+ if (pLineOut) {
+ len = gstrlen(pLineOut);
+#ifdef CE
+ rc = writeUniToAsc(fd, pLineOut, len);
+#else
+ rc = gwrite(fd, pLineOut, len);
+#endif
+ bfree(B_L, pLineOut);
+ } else {
+ rc = -1;
+ }
+
+ return rc;
+}
+
+/******************************************************************************/
+/*
+ * Persist a database to a file
+ */
+
+int dbSave(int did, char_t *filename, int flags)
+{
+ int row, column, nColumns, nRows, fd, rc;
+ int *colTypes, *pRow, nRet, tid;
+ char_t *path, *tmpFile, *tmpNum;
+ char_t **colNames;
+ dbTable_t *pTable;
+
+ trace(5, T("DB: About to save database to file\n"));
+
+ a_assert(dbMaxTables > 0);
+
+/*
+ * First write to a temporary file, then switch around later.
+ */
+ fmtAlloc(&tmpFile, FNAMESIZE, T("%s/data.tmp"), basicGetProductDir());
+ if ((fd = gopen(tmpFile,
+ O_CREAT | O_TRUNC | O_WRONLY | O_BINARY, 0666)) < 0) {
+ trace(1, T("WARNING: Failed to open file %s\n"), tmpFile);
+ bfree(B_L, tmpFile);
+ return -1;
+ }
+
+ nRet = 0;
+
+ for (tid = 0; (tid < dbMaxTables) && (nRet != -1); tid++) {
+ pTable = dbListTables[tid];
+
+ if (pTable) {
+/*
+ * Print the TABLE=tableName directive to the file
+ */
+ rc = dbWriteKeyValue(fd, KEYWORD_TABLE, pTable->name);
+
+ nColumns = pTable->nColumns;
+ nRows = pTable->nRows;
+
+ for (row = 0; (row < nRows) && (nRet == 0); row++) {
+ pRow = pTable->rows[row];
+/*
+ * if row is NULL, the row has been deleted, so don't
+ * write it out.
+ */
+ if ((pRow == NULL) || (pRow[0] == '\0') ||
+ (*(char_t *)(pRow[0]) == '\0')) {
+ continue;
+ }
+/*
+ * Print the ROW=rowNumber directive to the file
+ */
+ fmtAlloc(&tmpNum, 20, T("%d"), row);
+ rc = dbWriteKeyValue(fd, KEYWORD_ROW, tmpNum);
+ bfreeSafe(B_L, tmpNum);
+
+ colNames = pTable->columnNames;
+ colTypes = pTable->columnTypes;
+/*
+ * Print the key-value pairs (COLUMN=value) for data cells
+ */
+ for (column = 0; (column < nColumns) && (rc >= 0);
+ column++, colNames++, colTypes++) {
+ if (*colTypes == T_STRING) {
+ rc = dbWriteKeyValue(fd, *colNames,
+ (char_t *)(pRow[column]));
+ } else {
+ fmtAlloc(&tmpNum, 20, T("%d"), pRow[column]);
+ rc = dbWriteKeyValue(fd, *colNames, tmpNum);
+ bfreeSafe(B_L, tmpNum);
+ }
+ }
+
+ if (rc < 0) {
+ trace(1, T("WARNING: Failed to write to file %s\n"),
+ tmpFile);
+ nRet = -1;
+ }
+ }
+ }
+ }
+
+ gclose(fd);
+
+/*
+ * Replace the existing file with the temporary file, if no errors
+ */
+ if (nRet == 0) {
+ fmtAlloc(&path, FNAMESIZE, T("%s/%s"), basicGetProductDir(), filename);
+
+ gunlink(path);
+ if (grename(tmpFile, path) != 0) {
+ trace(1, T("WARNING: Failed to rename %s to %s\n"), tmpFile, path);
+ nRet = -1;
+ }
+
+ bfree(B_L, path);
+ }
+
+ bfree(B_L, tmpFile);
+
+ return nRet;
+}
+
+/******************************************************************************/
+/*
+ * Crack a keyword=value string into keyword and value. We can change buf.
+ */
+
+static int crack(char_t *buf, char_t **key, char_t **val)
+{
+ char_t *ptr;
+
+ if ((ptr = gstrrchr(buf, '\n')) != NULL ||
+ (ptr = gstrrchr(buf, '\r')) != NULL) {
+ *ptr = '\0';
+ }
+
+/*
+ * Find the = sign. It must exist.
+ */
+ if ((ptr = gstrstr(buf, T("="))) == NULL) {
+ return -1;
+ }
+
+ *ptr++ = '\0';
+ *key = trim(buf);
+ *val = trim(ptr);
+
+ return 0;
+}
+
+/******************************************************************************/
+/*
+ * Parse the file. These files consist of key-value pairs, separated by the
+ * "=" sign. Parsing of tables starts with the "TABLE=value" pair, and rows
+ * are parsed starting with the "ROW=value" pair.
+ */
+
+int dbLoad(int did, char_t *filename, int flags)
+{
+ gstat_t sbuf;
+ char_t *buf, *keyword, *value, *path, *ptr;
+ char_t *tablename;
+ int fd, tid, row;
+ dbTable_t *pTable;
+
+ a_assert(did >= 0);
+
+ fmtAlloc(&path, FNAMESIZE, T("%s/%s"), basicGetProductDir(), filename);
+ trace(4, T("DB: About to read data file <%s>\n"), path);
+
+ if (gstat(path, &sbuf) < 0) {
+ trace(3, T("DB: Failed to stat persistent data file.\n"));
+ bfree(B_L, path);
+ return -1;
+ }
+
+ fd = gopen(path, O_RDONLY | O_BINARY, 0666);
+ bfree(B_L, path);
+
+ if (fd < 0) {
+ trace(3, T("DB: No persistent data file present.\n"));
+ return -1;
+ }
+
+ if (sbuf.st_size <= 0) {
+ trace(3, T("DB: Persistent data file is empty.\n"));
+ gclose(fd);
+ return -1;
+ }
+/*
+ * Read entire file into temporary buffer
+ */
+ buf = balloc(B_L, sbuf.st_size + 1);
+#ifdef CE
+ if (readAscToUni(fd, &buf, sbuf.st_size) != (int)sbuf.st_size) {
+#else
+ if (gread(fd, buf, sbuf.st_size) != (int)sbuf.st_size) {
+#endif
+ trace(3, T("DB: Persistent data read failed.\n"));
+ bfree(B_L, buf);
+ gclose(fd);
+ return -1;
+ }
+
+ gclose(fd);
+ *(buf + sbuf.st_size) = '\0';
+
+ row = -1;
+ tid = -1;
+ pTable = NULL;
+ ptr = gstrtok(buf, T("\n"));
+ tablename = NULL;
+
+ do {
+ if (crack(ptr, &keyword, &value) < 0) {
+ trace(5, T("DB: Failed to crack line %s\n"), ptr);
+ continue;
+ }
+
+ a_assert(keyword && *keyword);
+
+ if (gstrcmp(keyword, KEYWORD_TABLE) == 0) {
+/*
+ * Table name found, check to see if it's registered
+ */
+ if (tablename) {
+ bfree(B_L, tablename);
+ }
+
+ tablename = bstrdup(B_L, value);
+ tid = dbGetTableId(did, tablename);
+
+ if (tid >= 0) {
+ pTable = dbListTables[tid];
+ } else {
+ pTable = NULL;
+ }
+
+ } else if (gstrcmp(keyword, KEYWORD_ROW) == 0) {
+/*
+ * Row/Record indicator found, add a new row to table
+ */
+ if (tid >= 0) {
+ int nRows = dbGetTableNrow(did, tablename);
+
+ if (dbSetTableNrow(did, tablename, nRows + 1) == 0) {
+ row = nRows;
+ }
+ }
+
+ } else if (row != -1) {
+/*
+ * some other data found, assume it's a COLUMN=value
+ */
+ int nColumn = GetColumnIndex(tid, keyword);
+
+ if ((nColumn >= 0) && (pTable != NULL)) {
+ int nColumnType = pTable->columnTypes[nColumn];
+ if (nColumnType == T_STRING) {
+ dbWriteStr(did, tablename, keyword, row, value);
+ } else {
+ dbWriteInt(did, tablename, keyword, row, gstrtoi(value));
+ }
+ }
+ }
+ } while ((ptr = gstrtok(NULL, T("\n"))) != NULL);
+
+ if (tablename) {
+ bfree(B_L, tablename);
+ }
+
+ bfree(B_L, buf);
+
+ return 0;
+}
+
+/******************************************************************************/
+/*
+ * Return a table id given the table name
+ */
+
+int dbGetTableId(int did, char_t *tablename)
+{
+ int tid;
+ dbTable_t *pTable;
+
+ a_assert(tablename);
+
+ for (tid = 0; (tid < dbMaxTables); tid++) {
+ if ((pTable = dbListTables[tid]) != NULL) {
+ if (gstrcmp(tablename, pTable->name) == 0) {
+ return tid;
+ }
+ }
+ }
+
+ return -1;
+}
+
+/******************************************************************************/
+/*
+ * Return a pointer to the table name, given its ID
+ */
+
+char_t *dbGetTableName(int did, int tid)
+{
+ if ((tid >= 0) && (tid < dbMaxTables) && (dbListTables[tid] != NULL)) {
+ return (dbListTables[tid])->name;
+ }
+
+ return NULL;
+}
+
+/******************************************************************************/
+/*
+ * Trim leading white space.
+ */
+
+static char_t *trim(char_t *str)
+{
+ while (isspace((int)*str)) {
+ str++;
+ }
+ return str;
+}
+
+/******************************************************************************/
+/*
+ * Return a column index given the column name
+ */
+
+static int GetColumnIndex(int tid, char_t *colName)
+{
+ int column;
+ dbTable_t *pTable;
+
+ a_assert(colName);
+
+ if ((tid >= 0) && (tid < dbMaxTables) && (dbListTables[tid] != NULL)) {
+ pTable = dbListTables[tid];
+
+ for (column = 0; (column < pTable->nColumns); column++) {
+ if (gstrcmp(colName, pTable->columnNames[column]) == 0)
+ return column;
+ }
+ }
+
+ return -1;
+}
+
+/******************************************************************************/
+/*
+ * Set the prefix-directory
+ */
+
+void basicSetProductDir(char_t *proddir)
+{
+ int len;
+
+ if (basicProdDir != NULL) {
+ bfree(B_L, basicProdDir);
+ }
+
+ basicProdDir = bstrdup(B_L, proddir);
+/*
+ * Make sure that prefix-directory doesn't end with a '/'
+ */
+ len = gstrlen(basicProdDir);
+ if ((len > 0) && *(basicProdDir + len - 1) == '/') {
+ *(basicProdDir+len-1) = '\0';
+ }
+}
+
+/******************************************************************************/
+/*
+ * Return the prefix-directory
+ */
+
+char_t *basicGetProductDir()
+{
+ if (basicProdDir) {
+ return basicProdDir;
+ } else {
+ return basicDefaultDir;
+ }
+}
+
+/******************************************************************************/
+
diff --git a/cleopatre/application/spidgoahead/emfdb.h b/cleopatre/application/spidgoahead/emfdb.h
new file mode 100644
index 0000000000..2866fede97
--- /dev/null
+++ b/cleopatre/application/spidgoahead/emfdb.h
@@ -0,0 +1,111 @@
+/*
+ * emfdb.h -- EMF database compatability functions for GoAhead WebServer.
+ *
+ * Copyright (c) GoAhead Software Inc., 1995-2000. All Rights Reserved.
+ *
+ * See the file "license.txt" for usage and redistribution license requirements
+ *
+ * $Id: emfdb.h,v 1.3 2003/09/29 19:48:34 bporter Exp $
+ */
+
+/******************************** Description *********************************/
+/*
+ * Emf-like textfile database support for WebServer 2.1.
+ */
+
+/********************************* Includes ***********************************/
+
+#ifndef _h_EMFDB
+#define _h_EMFDB 1
+
+#ifndef UEMF
+ #include "basic/basic.h"
+ #include "emf/emf.h"
+#else
+ #include "uemf.h"
+#endif
+
+
+/********************************* Defines ************************************/
+
+#define T_INT 0
+#define T_STRING 1
+
+#define DB_OK 0
+#define DB_ERR_GENERAL -1
+#define DB_ERR_COL_NOT_FOUND -2
+#define DB_ERR_COL_DELETED -3
+#define DB_ERR_ROW_NOT_FOUND -4
+#define DB_ERR_ROW_DELETED -5
+#define DB_ERR_TABLE_NOT_FOUND -6
+#define DB_ERR_TABLE_DELETED -7
+#define DB_ERR_BAD_FORMAT -8
+
+/*
+ * 30 Jun 03 BgP -- pass DB_CASE_INSENSITIVE as the "flags" argument to
+ * dbSearchString() to force a case-insensitive search.
+ */
+#define DB_CASE_INSENSITIVE 1
+
+typedef struct dbTable_s {
+ char_t *name;
+ int nColumns;
+ char_t **columnNames;
+ int *columnTypes;
+ int nRows;
+ int **rows;
+} dbTable_t;
+
+/********************************** Prototypes ********************************/
+
+/*
+ * Add a schema to the module-internal schema database
+ */
+extern int dbRegisterDBSchema(dbTable_t *sTable);
+
+extern int dbOpen(char_t *databasename, char_t *filename,
+ int (*gettime)(int did), int flags);
+extern void dbClose(int did);
+extern int dbGetTableId(int did, char_t *tname);
+extern char_t *dbGetTableName(int did, int tid);
+extern int dbReadInt(int did, char_t *table, char_t *column, int row,
+ int *returnValue);
+extern int dbReadStr(int did, char_t *table, char_t *column, int row,
+ char_t **returnValue);
+extern int dbWriteInt(int did, char_t *table, char_t *column, int row,
+ int idata);
+extern int dbWriteStr(int did, char_t *table, char_t *column, int row,
+ char_t *s);
+extern int dbAddRow(int did, char_t *table);
+extern int dbDeleteRow(int did, char_t *table, int rid);
+extern int dbSetTableNrow(int did, char_t *table, int nNewRows);
+extern int dbGetTableNrow(int did, char_t *table);
+
+/*
+ * Dump the contents of a database to file
+ */
+extern int dbSave(int did, char_t *filename, int flags);
+
+/*
+ * Load the contents of a database to file
+ */
+extern int dbLoad(int did, char_t *filename, int flags);
+
+/*
+ * Search for a data in a given column
+ * 30 Jun 03 BgP: If the value of 'flags' is DB_CASE_INSENSITIVE, use a
+ * case-insensitive string compare when searching.
+ */
+extern int dbSearchStr(int did, char_t *table, char_t *column,
+ char_t *value, int flags);
+
+extern void dbZero(int did);
+
+extern char_t *basicGetProductDir();
+extern void basicSetProductDir(char_t *proddir);
+
+#endif /* _h_EMFDB */
+
+/******************************************************************************/
+
+
diff --git a/cleopatre/application/spidgoahead/form.c b/cleopatre/application/spidgoahead/form.c
new file mode 100644
index 0000000000..c264871484
--- /dev/null
+++ b/cleopatre/application/spidgoahead/form.c
@@ -0,0 +1,169 @@
+/*
+ * form.c -- Form processing (in-memory CGI) for the GoAhead Web server
+ *
+ * Copyright (c) GoAhead Software Inc., 1995-2000. All Rights Reserved.
+ *
+ * See the file "license.txt" for usage and redistribution license requirements
+ *
+ * $Id: form.c,v 1.3 2002/10/24 14:44:50 bporter Exp $
+ */
+
+/********************************** Description *******************************/
+
+/*
+ * This module implements the /goform handler. It emulates CGI processing
+ * but performs this in-process and not as an external process. This enables
+ * a very high performance implementation with easy parsing and decoding
+ * of query strings and posted data.
+ */
+
+/*********************************** Includes *********************************/
+
+#include "wsIntrn.h"
+
+/************************************ Locals **********************************/
+
+static sym_fd_t formSymtab = -1; /* Symbol table for form handlers */
+
+/************************************* Code ***********************************/
+/*
+ * Process a form request. Returns 1 always to indicate it handled the URL
+ */
+
+int websFormHandler(webs_t wp, char_t *urlPrefix, char_t *webDir, int arg,
+ char_t *url, char_t *path, char_t *query)
+{
+ sym_t *sp;
+ char_t formBuf[FNAMESIZE];
+ char_t *cp, *formName;
+ int (*fn)(void *sock, char_t *path, char_t *args);
+
+ a_assert(websValid(wp));
+ a_assert(url && *url);
+ a_assert(path && *path == '/');
+
+ websStats.formHits++;
+
+/*
+ * Extract the form name
+ */
+ gstrncpy(formBuf, path, TSZ(formBuf));
+ if ((formName = gstrchr(&formBuf[1], '/')) == NULL) {
+ websError(wp, 200, T("Missing form name"));
+ return 1;
+ }
+ formName++;
+ if ((cp = gstrchr(formName, '/')) != NULL) {
+ *cp = '\0';
+ }
+
+/*
+ * Lookup the C form function first and then try tcl (no javascript support
+ * yet).
+ */
+ sp = symLookup(formSymtab, formName);
+ if (sp == NULL) {
+ websError(wp, 200, T("Form %s is not defined"), formName);
+ } else {
+ fn = (int (*)(void *, char_t *, char_t *)) sp->content.value.integer;
+ a_assert(fn);
+ if (fn) {
+/*
+ * For good practice, forms must call websDone()
+ */
+ (*fn)((void*) wp, formName, query);
+
+/*
+ * Remove the test to force websDone, since this prevents
+ * the server "push" from a form>
+ */
+#if 0 /* push */
+ if (websValid(wp)) {
+ websError(wp, 200, T("Form didn't call websDone"));
+ }
+#endif /* push */
+ }
+ }
+ return 1;
+}
+
+/******************************************************************************/
+/*
+ * Define a form function in the "form" map space.
+ */
+
+int websFormDefine(char_t *name, void (*fn)(webs_t wp, char_t *path,
+ char_t *query))
+{
+ a_assert(name && *name);
+ a_assert(fn);
+
+ if (fn == NULL) {
+ return -1;
+ }
+
+ symEnter(formSymtab, name, valueInteger((int) fn), (int) NULL);
+ return 0;
+}
+
+/******************************************************************************/
+/*
+ * Open the symbol table for forms.
+ */
+
+void websFormOpen()
+{
+ formSymtab = symOpen(WEBS_SYM_INIT);
+}
+
+/******************************************************************************/
+/*
+ * Close the symbol table for forms.
+ */
+
+void websFormClose()
+{
+ if (formSymtab != -1) {
+ symClose(formSymtab);
+ formSymtab = -1;
+ }
+}
+
+/******************************************************************************/
+/*
+ * Write a webs header. This is a convenience routine to write a common
+ * header for a form back to the browser.
+ */
+
+void websHeader(webs_t wp)
+{
+ a_assert(websValid(wp));
+
+ websWrite(wp, T("HTTP/1.0 200 OK\n"));
+
+/*
+ * By license terms the following line of code must not be modified
+ */
+ websWrite(wp, T("Server: %s\r\n"), WEBS_NAME);
+
+ websWrite(wp, T("Pragma: no-cache\n"));
+ websWrite(wp, T("Cache-control: no-cache\n"));
+ websWrite(wp, T("Content-Type: text/html\n"));
+ websWrite(wp, T("\n"));
+ websWrite(wp, T("<html>\n"));
+}
+
+/******************************************************************************/
+/*
+ * Write a webs footer
+ */
+
+void websFooter(webs_t wp)
+{
+ a_assert(websValid(wp));
+
+ websWrite(wp, T("</html>\n"));
+}
+
+/******************************************************************************/
+
diff --git a/cleopatre/application/spidgoahead/h.c b/cleopatre/application/spidgoahead/h.c
new file mode 100644
index 0000000000..3b98a7dd0b
--- /dev/null
+++ b/cleopatre/application/spidgoahead/h.c
@@ -0,0 +1,196 @@
+/*
+ * h.c -- Handle allocation module
+ *
+ * Copyright (c) GoAhead Software Inc., 1995-2000. All Rights Reserved.
+ * See the file "license.txt" for usage and redistribution license requirements
+ *
+ * $Id: h.c,v 1.3 2002/10/24 14:44:50 bporter Exp $
+ */
+
+/******************************** Description *********************************/
+
+/*
+ * This module provides a simple API to allocate and free handles
+ * It maintains a dynamic array of pointers. These usually point to
+ * per-handle structures.
+ */
+
+/********************************* Includes ***********************************/
+
+#ifdef UEMF
+ #include "uemf.h"
+#else
+ #include "basic/basicInternal.h"
+#endif
+
+/********************************** Defines ***********************************/
+/*
+ * The handle list stores the length of the list and the number of used
+ * handles in the first two words. These are hidden from the caller by
+ * returning a pointer to the third word to the caller
+ */
+
+#define H_LEN 0 /* First entry holds length of list */
+#define H_USED 1 /* Second entry holds number of used */
+#define H_OFFSET 2 /* Offset to real start of list */
+
+#define H_INCR 16 /* Grow handle list in chunks this size */
+
+/*********************************** Code *************************************/
+/*
+ * Allocate a new file handle. On the first call, the caller must set the
+ * handle map to be a pointer to a null pointer. *map points to the second
+ * element in the handle array.
+ */
+
+#ifdef B_STATS
+int HALLOC(B_ARGS_DEC, void ***map)
+#else
+int hAlloc(void ***map)
+#endif
+{
+ int *mp;
+ int handle, len, memsize, incr;
+
+ a_assert(map);
+
+ if (*map == NULL) {
+ incr = H_INCR;
+ memsize = (incr + H_OFFSET) * sizeof(void**);
+#ifdef B_STATS
+ if ((mp = (int*) balloc(B_ARGS, memsize)) == NULL) {
+#else
+ if ((mp = (int*) balloc(B_L, memsize)) == NULL) {
+#endif
+ return -1;
+ }
+ memset(mp, 0, memsize);
+ mp[H_LEN] = incr;
+ mp[H_USED] = 0;
+ *map = (void**) &mp[H_OFFSET];
+ } else {
+ mp = &((*(int**)map)[-H_OFFSET]);
+ }
+
+ len = mp[H_LEN];
+
+/*
+ * Find the first null handle
+ */
+ if (mp[H_USED] < mp[H_LEN]) {
+ for (handle = 0; handle < len; handle++) {
+ if (mp[handle+H_OFFSET] == 0) {
+ mp[H_USED]++;
+ return handle;
+ }
+ }
+ } else {
+ handle = len;
+ }
+
+/*
+ * No free handle so grow the handle list. Grow list in chunks of H_INCR.
+ */
+ len += H_INCR;
+ memsize = (len + H_OFFSET) * sizeof(void**);
+ if ((mp = (int*) brealloc(B_L, (void*) mp, memsize)) == NULL) {
+ return -1;
+ }
+ *map = (void**) &mp[H_OFFSET];
+ mp[H_LEN] = len;
+ memset(&mp[H_OFFSET + len - H_INCR], 0, sizeof(int*) * H_INCR);
+ mp[H_USED]++;
+ return handle;
+}
+
+/******************************************************************************/
+/*
+ * Free a handle. This function returns the value of the largest
+ * handle in use plus 1, to be saved as a max value.
+ */
+
+int hFree(void ***map, int handle)
+{
+ int *mp;
+ int len;
+
+ a_assert(map);
+ mp = &((*(int**)map)[-H_OFFSET]);
+ a_assert(mp[H_LEN] >= H_INCR);
+
+ a_assert(mp[handle + H_OFFSET]);
+ a_assert(mp[H_USED]);
+ mp[handle + H_OFFSET] = 0;
+ if (--(mp[H_USED]) == 0) {
+ bfree(B_L, (void*) mp);
+ *map = NULL;
+ }
+
+/*
+ * Find the greatest handle number in use.
+ */
+ if (*map == NULL) {
+ handle = -1;
+ } else {
+ len = mp[H_LEN];
+ if (mp[H_USED] < mp[H_LEN]) {
+ for (handle = len - 1; handle >= 0; handle--) {
+ if (mp[handle + H_OFFSET])
+ break;
+ }
+ } else {
+ handle = len;
+ }
+ }
+ return handle + 1;
+}
+
+/******************************************************************************/
+/*
+ * Allocate an entry in the halloc array.
+ */
+
+#ifdef B_STATS
+int HALLOCENTRY(B_ARGS_DEC, void ***list, int *max, int size)
+#else
+int hAllocEntry(void ***list, int *max, int size)
+#endif
+{
+ char_t *cp;
+ int id;
+
+ a_assert(list);
+ a_assert(max);
+
+#ifdef B_STATS
+ if ((id = HALLOC(B_ARGS, (void***) list)) < 0) {
+#else
+ if ((id = hAlloc((void***) list)) < 0) {
+#endif
+ return -1;
+ }
+
+ if (size > 0) {
+#ifdef B_STATS
+ if ((cp = balloc(B_ARGS, size)) == NULL) {
+#else
+ if ((cp = balloc(B_L, size)) == NULL) {
+#endif
+ hFree(list, id);
+ return -1;
+ }
+ a_assert(cp);
+ memset(cp, 0, size);
+
+ (*list)[id] = (void*) cp;
+ }
+
+ if (id >= *max) {
+ *max = id + 1;
+ }
+ return id;
+}
+
+/******************************************************************************/
+
+
diff --git a/cleopatre/application/spidgoahead/handler.c b/cleopatre/application/spidgoahead/handler.c
new file mode 100644
index 0000000000..686a1815ba
--- /dev/null
+++ b/cleopatre/application/spidgoahead/handler.c
@@ -0,0 +1,417 @@
+/*
+ * handler.c -- URL handler support
+ *
+ * Copyright (c) GoAhead Software Inc., 1995-2000. All Rights Reserved.
+ *
+ * See the file "license.txt" for usage and redistribution license requirements
+ *
+ * $Id: handler.c,v 1.4 2003/03/17 22:21:41 bporter Exp $
+ */
+
+/******************************** Description *********************************/
+
+/*
+ * This module implements a URL handler interface and API to permit
+ * the addition of user definable URL processors.
+ */
+
+/********************************* Includes ***********************************/
+
+#include "wsIntrn.h"
+
+/*********************************** Locals ***********************************/
+
+static websUrlHandlerType *websUrlHandler; /* URL handler list */
+static int websUrlHandlerMax; /* Number of entries */
+static int urlHandlerOpenCount = 0; /* count of apps */
+
+/**************************** Forward Declarations ****************************/
+
+static int websUrlHandlerSort(const void *p1, const void *p2);
+static int websPublishHandler(webs_t wp, char_t *urlPrefix, char_t *webDir,
+ int sid, char_t *url, char_t *path, char_t *query);
+static char_t *websCondenseMultipleChars(char_t *strToCondense, char_t cCondense);
+
+/*********************************** Code *************************************/
+/*
+ * Initialize the URL handler module
+ */
+
+int websUrlHandlerOpen()
+{
+ if (++urlHandlerOpenCount == 1) {
+ websAspOpen();
+ websUrlHandler = NULL;
+ websUrlHandlerMax = 0;
+ }
+ return 0;
+}
+
+/******************************************************************************/
+/*
+ * Close the URL handler module
+ */
+
+void websUrlHandlerClose()
+{
+ websUrlHandlerType *sp;
+
+ if (--urlHandlerOpenCount <= 0) {
+ websAspClose();
+ for (sp = websUrlHandler; sp < &websUrlHandler[websUrlHandlerMax];
+ sp++) {
+ bfree(B_L, sp->urlPrefix);
+ if (sp->webDir) {
+ bfree(B_L, sp->webDir);
+ }
+ }
+ bfree(B_L, websUrlHandler);
+ websUrlHandlerMax = 0;
+ }
+}
+
+/******************************************************************************/
+/*
+ * Define a new URL handler. urlPrefix is the URL prefix to match. webDir is
+ * an optional root directory path for a web directory. arg is an optional
+ * arg to pass to the URL handler. flags defines the matching order. Valid
+ * flags include WEBS_HANDLER_LAST, WEBS_HANDLER_FIRST. If multiple users
+ * specify last or first, their order is defined alphabetically by the
+ * urlPrefix.
+ */
+
+int websUrlHandlerDefine(char_t *urlPrefix, char_t *webDir, int arg,
+ int (*handler)(webs_t wp, char_t *urlPrefix, char_t *webdir, int arg,
+ char_t *url, char_t *path, char_t *query), int flags)
+{
+ websUrlHandlerType *sp;
+ int len;
+
+ a_assert(urlPrefix);
+ a_assert(handler);
+
+/*
+ * Grow the URL handler array to create a new slot
+ */
+ len = (websUrlHandlerMax + 1) * sizeof(websUrlHandlerType);
+ if ((websUrlHandler = brealloc(B_L, websUrlHandler, len)) == NULL) {
+ return -1;
+ }
+ sp = &websUrlHandler[websUrlHandlerMax++];
+ memset(sp, 0, sizeof(websUrlHandlerType));
+
+ sp->urlPrefix = bstrdup(B_L, urlPrefix);
+ sp->len = gstrlen(sp->urlPrefix);
+ if (webDir) {
+ sp->webDir = bstrdup(B_L, webDir);
+ } else {
+ sp->webDir = bstrdup(B_L, T(""));
+ }
+ sp->handler = handler;
+ sp->arg = arg;
+ sp->flags = flags;
+
+/*
+ * Sort in decreasing URL length order observing the flags for first and last
+ */
+ qsort(websUrlHandler, websUrlHandlerMax, sizeof(websUrlHandlerType),
+ websUrlHandlerSort);
+ return 0;
+}
+
+/******************************************************************************/
+/*
+ * Delete an existing URL handler. We don't reclaim the space of the old
+ * handler, just NULL the entry. Return -1 if handler is not found.
+ */
+
+int websUrlHandlerDelete(int (*handler)(webs_t wp, char_t *urlPrefix,
+ char_t *webDir, int arg, char_t *url, char_t *path, char_t *query))
+{
+ websUrlHandlerType *sp;
+ int i;
+
+ for (i = 0; i < websUrlHandlerMax; i++) {
+ sp = &websUrlHandler[i];
+ if (sp->handler == handler) {
+ sp->handler = NULL;
+ return 0;
+ }
+ }
+ return -1;
+}
+
+/******************************************************************************/
+/*
+ * Sort in decreasing URL length order observing the flags for first and last
+ */
+
+static int websUrlHandlerSort(const void *p1, const void *p2)
+{
+ websUrlHandlerType *s1, *s2;
+ int rc;
+
+ a_assert(p1);
+ a_assert(p2);
+
+ s1 = (websUrlHandlerType*) p1;
+ s2 = (websUrlHandlerType*) p2;
+
+ if ((s1->flags & WEBS_HANDLER_FIRST) || (s2->flags & WEBS_HANDLER_LAST)) {
+ return -1;
+ }
+
+ if ((s2->flags & WEBS_HANDLER_FIRST) || (s1->flags & WEBS_HANDLER_LAST)) {
+ return 1;
+ }
+
+ if ((rc = gstrcmp(s1->urlPrefix, s2->urlPrefix)) == 0) {
+ if (s1->len < s2->len) {
+ return 1;
+ } else if (s1->len > s2->len) {
+ return -1;
+ }
+ }
+ return -rc;
+}
+
+/******************************************************************************/
+/*
+ * Publish a new web directory (Use the default URL handler)
+ */
+
+int websPublish(char_t *urlPrefix, char_t *path)
+{
+ return websUrlHandlerDefine(urlPrefix, path, 0, websPublishHandler, 0);
+}
+
+/******************************************************************************/
+/*
+ * Return the directory for a given prefix. Ignore empty prefixes
+ */
+
+char_t *websGetPublishDir(char_t *path, char_t **urlPrefix)
+{
+ websUrlHandlerType *sp;
+ int i;
+
+ for (i = 0; i < websUrlHandlerMax; i++) {
+ sp = &websUrlHandler[i];
+ if (sp->urlPrefix[0] == '\0') {
+ continue;
+ }
+ if (sp->handler && gstrncmp(sp->urlPrefix, path, sp->len) == 0) {
+ if (urlPrefix) {
+ *urlPrefix = sp->urlPrefix;
+ }
+ return sp->webDir;
+ }
+ }
+ return NULL;
+}
+
+/******************************************************************************/
+/*
+ * Publish URL handler. We just patch the web page Directory and let the
+ * default handler do the rest.
+ */
+
+static int websPublishHandler(webs_t wp, char_t *urlPrefix, char_t *webDir,
+ int sid, char_t *url, char_t *path, char_t *query)
+{
+ int len;
+
+ a_assert(websValid(wp));
+ a_assert(path);
+
+/*
+ * Trim the urlPrefix off the path and set the webdirectory. Add one to step
+ * over the trailing '/'
+ */
+ len = gstrlen(urlPrefix) + 1;
+ websSetRequestPath(wp, webDir, &path[len]);
+ return 0;
+}
+
+/******************************************************************************/
+/*
+ * See if any valid handlers are defined for this request. If so, call them
+ * and continue calling valid handlers until one accepts the request.
+ * Return true if a handler was invoked, else return FALSE.
+ */
+
+int websUrlHandlerRequest(webs_t wp)
+{
+ websUrlHandlerType *sp;
+ int i, first;
+
+ a_assert(websValid(wp));
+
+/*
+ * Delete the socket handler as we don't want to start reading any
+ * data on the connection as it may be for the next pipelined HTTP/1.1
+ * request if using Keep Alive
+ */
+ socketDeleteHandler(wp->sid);
+ wp->state = WEBS_PROCESSING;
+ websStats.handlerHits++;
+
+ websSetRequestPath(wp, websGetDefaultDir(), NULL);
+
+/*
+ * Eliminate security hole
+ */
+ websCondenseMultipleChars(wp->path, '/');
+ websCondenseMultipleChars(wp->url, '/');
+
+/*
+ * We loop over each handler in order till one accepts the request.
+ * The security handler will handle the request if access is NOT allowed.
+ */
+ first = 1;
+ for (i = 0; i < websUrlHandlerMax; i++) {
+ sp = &websUrlHandler[i];
+ if (sp->handler && gstrncmp(sp->urlPrefix, wp->path, sp->len) == 0) {
+ if (first) {
+ websSetEnv(wp);
+ first = 0;
+ }
+ if ((*sp->handler)(wp, sp->urlPrefix, sp->webDir, sp->arg,
+ wp->url, wp->path, wp->query)) {
+ return 1;
+ }
+ if (!websValid(wp)) {
+ trace(0,
+ T("webs: handler %s called websDone, but didn't return 1\n"),
+ sp->urlPrefix);
+ return 1;
+ }
+ }
+ }
+/*
+ * If no handler processed the request, then return an error. Note: It is
+ * the handlers responsibility to call websDone
+ */
+ if (i >= websUrlHandlerMax) {
+ /*
+ * 13 Mar 03 BgP
+ * preventing a cross-site scripting exploit
+ websError(wp, 200, T("No handler for this URL %s"), wp->url);
+ */
+ websError(wp, 200, T("No handler for this URL"));
+ }
+ return 0;
+}
+
+#ifdef OBSOLETE_CODE
+
+/******************************************************************************/
+/*
+ * Tidy up the URL path. Return -1 if the URL is bad.
+ * Used to eliminate repeated directory delimiters ('/').
+ */
+
+static int websTidyUrl(webs_t wp)
+{
+ char_t *parts[64]; /* Array of ptr's to URL parts */
+ char_t *token, *url, *tidyurl;
+ int i, len, npart;
+
+ a_assert(websValid(wp));
+
+/*
+ * Copy the string so we don't destroy the original (yet)
+ */
+ url = bstrdup(B_L, wp->url);
+ websDecodeUrl(url, url, gstrlen(url));
+
+ len = npart = 0;
+ parts[0] = NULL;
+ token = gstrtok(url, T("/"));
+
+/*
+ * Look at each directory segment and process "." and ".." segments
+ * Don't allow the browser to pop outside the root web.
+ */
+ while (token != NULL) {
+ if (gstrcmp(token, T("..")) == 0) {
+ if (npart > 0) {
+ npart--;
+ }
+
+ } else if (gstrcmp(token, T(".")) != 0) {
+ parts[npart] = token;
+ len += gstrlen(token) + 1;
+ npart++;
+ }
+ token = gstrtok(NULL, T("/"));
+ }
+
+/*
+ * Re-construct URL. Need extra space all "/" and null.
+ */
+ if (npart || (gstrcmp(url, T("/")) == 0) || (url[0] == '\0')) {
+ tidyurl = balloc(B_L, (len + 2) * sizeof(char_t));
+ *tidyurl = '\0';
+
+ for (i = 0; i < npart; i++) {
+ gstrcat(tidyurl, T("/"));
+ gstrcat(tidyurl, parts[i]);
+ }
+
+ bfree(B_L, url);
+
+ bfree(B_L, wp->url);
+ wp->url = tidyurl;
+ return 0;
+ } else {
+ bfree(B_L, url);
+ return -1;
+ }
+}
+
+#endif
+
+/******************************************************************************/
+/*
+ * Convert multiple adjacent occurrences of a given character to a single
+ * instance.
+ */
+
+static char_t *websCondenseMultipleChars(char_t *strToCondense, char_t cCondense)
+{
+ if (strToCondense != NULL) {
+ char_t *pStr, *pScan;
+
+ pStr = pScan = strToCondense;
+
+ while (*pScan && *pStr) {
+/*
+ * Advance scan pointer over multiple occurences of condense character
+ */
+ while ((*pScan == cCondense) && (*(pScan + 1) == cCondense)) {
+ pScan++;
+ }
+/*
+ * Copy character if an advance of the scan pointer has occurred
+ */
+ if (pStr != pScan) {
+ *pStr = *pScan;
+ }
+
+ pScan++;
+ pStr++;
+ }
+/*
+ * Zero terminate string if multiple adjacent characters were found and condensed
+ */
+ if (pStr != pScan) {
+ *pStr = 0;
+ }
+ }
+
+ return strToCondense;
+}
+
+/******************************************************************************/
+
diff --git a/cleopatre/application/spidgoahead/license.txt b/cleopatre/application/spidgoahead/license.txt
new file mode 100644
index 0000000000..1fa9e67e79
--- /dev/null
+++ b/cleopatre/application/spidgoahead/license.txt
@@ -0,0 +1,282 @@
+License Agreement
+
+THIS LICENSE ALLOWS ONLY THE LIMITED USE OF GO AHEAD SOFTWARE,
+INC. PROPRIETARY CODE. PLEASE CAREFULLY READ THIS AGREEMENT AS IT
+PERTAINS TO THIS LICENSE, YOU CERTIFY THAT YOU WILL USE THE SOFTWARE
+ONLY IN THE MANNER PERMITTED HEREIN.
+
+1. Definitions.
+
+1.1 "Documentation" means any documentation GoAhead includes with the
+Original Code.
+
+1.2 "GoAhead" means Go Ahead Software, Inc.
+
+1.3 "Intellectual Property Rights" means all rights, whether now existing
+or hereinafter acquired, in and to trade secrets, patents, copyrights,
+trademarks, know-how, as well as moral rights and similar rights of any
+type under the laws of any governmental authority, domestic or foreign,
+including rights in and to all applications and registrations relating
+to any of the foregoing.
+
+1.4 "License" or "Agreement" means this document.
+
+1.5 "Modifications" means any addition to or deletion from the substance
+or structure of either the Original Code or any previous Modifications.
+
+1.6 "Original Code" means the Source Code to GoAhead’s proprietary
+computer software entitled GoAhead WebServer.
+
+1.7 "Response Header" means the first portion of the response message
+output by the GoAhead WebServer, containing but not limited to, header
+fields for date, content-type, server identification and cache control.
+
+1.8 "Server Identification Field" means the field in the Response Header
+which contains the text "Server: GoAhead-Webs".
+
+1.9 "You" means an individual or a legal entity exercising rights under,
+and complying with all of the terms of, this license or a future version
+of this license. For legal entities, "You" includes any entity which
+controls, is controlled by, or is under common control with You. For
+purposes of this definition, "control" means (a) the power, direct or
+indirect, to cause the direction or management of such entity, whether
+by contract or otherwise, or (b) ownership of fifty percent (50%) or
+more of the outstanding shares or beneficial ownership of such entity.
+
+2. Source Code License.
+
+2.1 Limited Source Code Grant.
+
+GoAhead hereby grants You a world-wide, royalty-free, non-exclusive
+license, subject to third party intellectual property claims, to use,
+reproduce, modify, copy and distribute the Original Code.
+
+2.2 Binary Code.
+
+GoAhead hereby grants You a world-wide, royalty-free, non-exclusive
+license to copy and distribute the binary code versions of the Original
+Code together with Your Modifications.
+
+2.3 License Back to GoAhead.
+
+You hereby grant in both source code and binary code to GoAhead a
+world-wide, royalty-free, non-exclusive license to copy, modify, display,
+use and sublicense any Modifications You make that are distributed or
+planned for distribution. Within 30 days of either such event, You
+agree to ship to GoAhead a file containing the Modifications (in a media
+to be determined by the parties), including any programmers’ notes and
+other programmers’ materials. Additionally, You will provide to GoAhead
+a complete description of the product, the product code or model number,
+the date on which the product is initially shipped, and a contact name,
+phone number and e-mail address for future correspondence. GoAhead will
+keep confidential all data specifically marked as such.
+
+2.4 Restrictions on Use.
+
+You may sublicense Modifications to third parties such as subcontractors
+or OEM's provided that You enter into license agreements with such third
+parties that bind such third parties to all the obligations under this
+Agreement applicable to you and that are otherwise substantially similar
+in scope and application to this Agreement.
+
+3. Term.
+
+This Agreement and license are effective from the time You accept the
+terms of this Agreement until this Agreement is terminated. You may
+terminate this Agreement at any time by uninstalling or destroying
+all copies of the Original Code including any and all binary versions
+and removing any Modifications to the Original Code existing in any
+products. This Agreement will terminate immediately and without further
+notice if You fail to comply with any provision of this Agreement. All
+restrictions on use, and all other provisions that may reasonably
+be interpreted to survive termination of this Agreement, will survive
+termination of this Agreement for any reason. Upon termination, You agree
+to uninstall or destroy all copies of the Original Code, Modifications,
+and Documentation.
+
+4. Trademarks and Brand.
+
+4.1 License and Use.
+
+GoAhead hereby grants to You a limited world-wide, royalty-free,
+non-exclusive license to use the GoAhead trade names, trademarks, logos,
+service marks and product designations posted in Exhibit A (collectively,
+the "GoAhead Marks") in connection with the activities by You under this
+Agreement. Additionally, GoAhead grants You a license under the terms
+above to such GoAhead trademarks as shall be identified at a URL (the
+"URL") provided by GoAhead. The use by You of GoAhead Marks shall be in
+accordance with GoAhead’s trademark policies regarding trademark usage
+as established at the web site designated by the URL, or as otherwise
+communicated to You by GoAhead at its sole discretion. You understand and
+agree that any use of GoAhead Marks in connection with this Agreement
+shall not create any right, title or interest in or to such GoAhead
+Marks and that all such use and goodwill associated with GoAhead Marks
+will inure to the benefit of GoAhead.
+
+4.2 Promotion by You of GoAhead WebServer Mark.
+
+In consideration for the licenses granted by GoAhead to You herein, You
+agree to notify GoAhead when You incorporate the GoAhead WebServer in
+Your product and to inform GoAhead when such product begins to ship. You
+agree to promote the Original Code by prominently and visibly displaying
+a graphic of the GoAhead WebServer mark on the initial web page of Your
+product that is displayed each time a user connects to it. You also agree
+that GoAhead may identify your company as a user of the GoAhead WebServer
+in conjunction with its own marketing efforts. You may further promote
+the Original Code by displaying the GoAhead WebServer mark in marketing
+and promotional materials such as the home page of your web site or web
+pages promoting the product.
+
+4.3 Placement of Copyright Notice by You.
+
+You agree to include copies of the following notice (the "Notice")
+regarding proprietary rights in all copies of the products that You
+distribute, as follows: (i) embedded in the object code; and (ii) on
+the title pages of all documentation. Furthermore, You agree to use
+commercially reasonable efforts to cause any licensees of your products
+to embed the Notice in object code and on the title pages or relevant
+documentation. The Notice is as follows: Copyright (c) 20xx GoAhead
+Software, Inc. All Rights Reserved. Unless GoAhead otherwise instructs,
+the year 20xx is to be replaced with the year during which the release of
+the Original Code containing the notice is issued by GoAhead. If this year
+is not supplied with Documentation, GoAhead will supply it upon request.
+
+4.4 No Modifications to Server Identification Field.
+
+You agree not to remove or modify the Server identification Field
+contained in the Response Header as defined in Section 1.6 and 1.7.
+
+5. Warranty Disclaimers.
+
+THE ORIGINAL CODE, THE DOCUMENTATION AND THE MEDIA UPON WHICH THE ORIGINAL
+CODE IS RECORDED (IF ANY) ARE PROVIDED "AS IS" AND WITHOUT WARRANTIES OF
+ANY KIND, EXPRESS, STATUTORY OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.
+
+The entire risk as to the quality and performance of the Original Code
+(including any Modifications You make) and the Documentation is with
+You. Should the Original Code or the Documentation prove defective,
+You (and not GoAhead or its distributors, licensors or dealers) assume
+the entire cost of all necessary servicing or repair. GoAhead does not
+warrant that the functions contained in the Original Code will meet your
+requirements or operate in the combination that You may select for use,
+that the operation of the Original Code will be uninterrupted or error
+free, or that defects in the Original Code will be corrected. No oral
+or written statement by GoAhead or by a representative of GoAhead shall
+create a warranty or increase the scope of this warranty.
+
+GOAHEAD DOES NOT WARRANT THE ORIGINAL CODE AGAINST INFRINGEMENT OR THE
+LIKE WITH RESPECT TO ANY COPYRIGHT, PATENT, TRADE SECRET, TRADEMARK
+OR OTHER PROPRIETARY RIGHT OF ANY THIRD PARTY AND DOES NOT WARRANT
+THAT THE ORIGINAL CODE DOES NOT INCLUDE ANY VIRUS, SOFTWARE ROUTINE
+OR OTHER SOFTWARE DESIGNED TO PERMIT UNAUTHORIZED ACCESS, TO DISABLE,
+ERASE OR OTHERWISE HARM SOFTWARE, HARDWARE OR DATA, OR TO PERFORM ANY
+OTHER SUCH ACTIONS.
+
+Any warranties that by law survive the foregoing disclaimers shall
+terminate ninety (90) days from the date You received the Original Code.
+
+6. Limitation of Liability.
+
+YOUR SOLE REMEDIES AND GOAHEAD'S ENTIRE LIABILITY ARE SET FORTH ABOVE. IN
+NO EVENT WILL GOAHEAD OR ITS DISTRIBUTORS OR DEALERS BE LIABLE FOR
+DIRECT, INDIRECT, INCIDENTAL OR CONSEQUENTIAL DAMAGES RESULTING FROM
+THE USE OF THE ORIGINAL CODE, THE INABILITY TO USE THE ORIGINAL CODE,
+OR ANY DEFECT IN THE ORIGINAL CODE, INCLUDING ANY LOST PROFITS, EVEN IF
+THEY HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+You agree that GoAhead and its distributors and dealers will not be
+LIABLE for defense or indemnity with respect to any claim against You
+by any third party arising from your possession or use of the Original
+Code or the Documentation.
+
+In no event will GoAhead’s total liability to You for all damages, losses,
+and causes of action (whether in contract, tort, including negligence,
+or otherwise) exceed the amount You paid for this product.
+
+SOME STATES DO NOT ALLOW LIMITATIONS ON HOW LONG AN IMPLIED WARRANTY
+LASTS, AND SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION
+OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THE ABOVE LIMITATIONS OR
+EXCLUSIONS MAY NOT APPLY TO YOU. THIS WARRANTY GIVES YOU SPECIFIC LEGAL
+RIGHTS AND YOU MAY ALSO HAVE OTHER RIGHTS WHICH VARY FROM STATE TO STATE.
+
+7. Indemnification by You.
+
+You agree to indemnify and hold GoAhead harmless against any and all
+claims, losses, damages and costs (including legal expenses and reasonable
+counsel fees) arising out of any claim of a third party with respect to
+the contents of the Your products, and any intellectual property rights
+or other rights or interests related thereto.
+
+8. High Risk Activities.
+
+The Original Code is not fault-tolerant and is not designed , manufactured
+or intended for use or resale as online control equipment in hazardous
+environments requiring fail-safe performance, such as in the operation
+of nuclear facilities, aircraft navigation or communication systems,
+air traffic control, direct life support machines or weapons systems,
+in which the failure of the Original Code could lead directly to death,
+personal injury, or severe physical or environmental damage. GoAhead and
+its suppliers specifically disclaim any express or implied warranty of
+fitness for any high risk uses listed above.
+
+9. Government Restricted Rights.
+
+For units of the Department of Defense, use, duplication, or disclosure
+by the Government is subject to restrictions as set forth in subparagraph
+(c)(1)(ii) of the Rights in Technical Data and Computer Software clause
+at DFARS 252.227-7013. Contractor/manufacturer is GoAhead Software,
+Inc., 10900 N.E. 8th Street, Suite 750, Bellevue, Washington 98004.
+
+If the Commercial Computer Software Restricted rights clause at FAR
+52.227-19 or its successors apply, the Software and Documentation
+constitute restricted computer software as defined in that clause and
+the Government shall not have the license for published software set
+forth in subparagraph (c)(3) of that clause.
+
+The Original Code (i) was developed at private expense, and no part of it
+was developed with governmental funds; (ii) is a trade secret of GoAhead
+(or its licensor(s)) for all purposes of the Freedom of Information Act;
+(iii) is "restricted computer software" subject to limited utilization as
+provided in the contract between the vendor and the governmental entity;
+and (iv) in all respects is proprietary data belonging solely to GoAhead
+(or its licensor(s)).
+
+10. Governing Law and Interpretation.
+
+This Agreement shall be interpreted under and governed by the laws of the
+State of Washington, without regard to its rules governing the conflict of
+laws. If any provision of this Agreement is held illegal or unenforceable
+by a court or tribunal of competent jurisdiction, the remaining provisions
+of this Agreement shall remain in effect and the invalid provision deemed
+modified to the least degree necessary to remedy such invalidity.
+
+11. Entire Agreement.
+
+This Agreement is the complete agreement between GoAhead and You and
+supersedes all prior agreements, oral or written, with respect to the
+subject matter hereof.
+
+If You have any questions concerning this Agreement, You may write to
+GoAhead Software, Inc., 10900 N.E. 8th Street, Suite 750, Bellevue,
+Washington 98004 or send e-mail to info@goahead.com.
+
+BY CLICKING ON THE "Register" BUTTON ON THE REGISTRATION FORM, YOU
+ACCEPT AND AGREE TO BE BOUND BY ALL OF THE TERMS AND CONDITIONS SET
+FORTH IN THIS AGREEMENT. IF YOU DO NOT WISH TO ACCEPT THIS LICENSE OR
+YOU DO NOT QUALIFY FOR A LICENSE BASED ON THE TERMS SET FORTH ABOVE,
+YOU MUST NOT CLICK THE "Register" BUTTON.
+
+Exhibit A
+
+GoAhead Trademarks, Logos, and Product Designation Information
+
+
+
+
+01/28/00
+
+
+
+
diff --git a/cleopatre/application/spidgoahead/md5.h b/cleopatre/application/spidgoahead/md5.h
new file mode 100644
index 0000000000..c5589206a0
--- /dev/null
+++ b/cleopatre/application/spidgoahead/md5.h
@@ -0,0 +1,50 @@
+/* MD5.H - header file for MD5C.C
+ *
+ * $Id: md5.h,v 1.3 2002/10/24 14:44:50 bporter Exp $
+ */
+
+/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
+rights reserved.
+
+License to copy and use this software is granted provided that it
+is identified as the "RSA Data Security, Inc. MD5 Message-Digest
+Algorithm" in all material mentioning or referencing this software
+or this function.
+
+License is also granted to make and use derivative works provided
+that such works are identified as "derived from the RSA Data
+Security, Inc. MD5 Message-Digest Algorithm" in all material
+mentioning or referencing the derived work.
+
+RSA Data Security, Inc. makes no representations concerning either
+the merchantability of this software or the suitability of this
+software for any particular purpose. It is provided "as is"
+without express or implied warranty of any kind.
+
+These notices must be retained in any copies of any part of this
+documentation and/or software.
+ */
+
+#ifndef _h_MD5
+#define _h_MD5 1
+
+#ifndef UINT4
+#define UINT4 unsigned long
+#endif
+
+#ifndef POINTER
+#define POINTER unsigned char *
+#endif
+
+/* MD5 context. */
+typedef struct {
+ UINT4 state[4]; /* state (ABCD) */
+ UINT4 count[2]; /* number of bits, modulo 2^64 (lsb first) */
+ unsigned char buffer[64]; /* input buffer */
+} MD5_CONTEXT;
+
+extern void MD5Init (MD5_CONTEXT *);
+extern void MD5Update (MD5_CONTEXT *, unsigned char *, unsigned int);
+extern void MD5Final (unsigned char [16], MD5_CONTEXT *);
+
+#endif /* _h_MD5 */
diff --git a/cleopatre/application/spidgoahead/md5c.c b/cleopatre/application/spidgoahead/md5c.c
new file mode 100644
index 0000000000..eda94a6628
--- /dev/null
+++ b/cleopatre/application/spidgoahead/md5c.c
@@ -0,0 +1,338 @@
+/* MD5C.C - RSA Data Security, Inc., MD5 message-digest algorithm
+ *
+ * $Id: md5c.c,v 1.3 2002/10/24 14:44:50 bporter Exp $
+ */
+
+/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
+rights reserved.
+
+License to copy and use this software is granted provided that it
+is identified as the "RSA Data Security, Inc. MD5 Message-Digest
+Algorithm" in all material mentioning or referencing this software
+or this function.
+
+License is also granted to make and use derivative works provided
+that such works are identified as "derived from the RSA Data
+Security, Inc. MD5 Message-Digest Algorithm" in all material
+mentioning or referencing the derived work.
+
+RSA Data Security, Inc. makes no representations concerning either
+the merchantability of this software or the suitability of this
+software for any particular purpose. It is provided "as is"
+without express or implied warranty of any kind.
+
+These notices must be retained in any copies of any part of this
+documentation and/or software.
+ */
+
+#include "md5.h"
+
+/* Constants for MD5Transform routine.
+ */
+#define S11 7
+#define S12 12
+#define S13 17
+#define S14 22
+#define S21 5
+#define S22 9
+#define S23 14
+#define S24 20
+#define S31 4
+#define S32 11
+#define S33 16
+#define S34 23
+#define S41 6
+#define S42 10
+#define S43 15
+#define S44 21
+
+static void MD5Transform (UINT4 [4], unsigned char [64]);
+static void Encode (unsigned char *, UINT4 *, unsigned int);
+static void Decode (UINT4 *, unsigned char *, unsigned int);
+static void MD5_memcpy (POINTER, POINTER, unsigned int);
+static void MD5_memset (POINTER, int, unsigned int);
+
+static unsigned char PADDING[64] = {
+ 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+/*
+ * Note: The following MD5 macros can be implemented as functions
+ * for code compactness, (at the expense of execution speed).
+ */
+
+/* F, G, H and I are basic MD5 functions.
+ */
+#define F(x, y, z) (((x) & (y)) | ((~x) & (z)))
+#define G(x, y, z) (((x) & (z)) | ((y) & (~z)))
+#define H(x, y, z) ((x) ^ (y) ^ (z))
+#define I(x, y, z) ((y) ^ ((x) | (~z)))
+
+/* ROTATE_LEFT rotates x left n bits.
+ */
+#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n))))
+
+/* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4.
+Rotation is separate from addition to prevent recomputation.
+ */
+#define FF(a, b, c, d, x, s, ac) { \
+ (a) += F ((b), (c), (d)) + (x) + (UINT4)(ac); \
+ (a) = ROTATE_LEFT ((a), (s)); \
+ (a) += (b); \
+ }
+#define GG(a, b, c, d, x, s, ac) { \
+ (a) += G ((b), (c), (d)) + (x) + (UINT4)(ac); \
+ (a) = ROTATE_LEFT ((a), (s)); \
+ (a) += (b); \
+ }
+#define HH(a, b, c, d, x, s, ac) { \
+ (a) += H ((b), (c), (d)) + (x) + (UINT4)(ac); \
+ (a) = ROTATE_LEFT ((a), (s)); \
+ (a) += (b); \
+ }
+#define II(a, b, c, d, x, s, ac) { \
+ (a) += I ((b), (c), (d)) + (x) + (UINT4)(ac); \
+ (a) = ROTATE_LEFT ((a), (s)); \
+ (a) += (b); \
+ }
+
+/* MD5 initialization. Begins an MD5 operation, writing a new context.
+ */
+void MD5Init (context)
+MD5_CONTEXT *context; /* context */
+{
+ context->count[0] = context->count[1] = 0;
+ /* Load magic initialization constants.
+*/
+ context->state[0] = 0x67452301;
+ context->state[1] = 0xefcdab89;
+ context->state[2] = 0x98badcfe;
+ context->state[3] = 0x10325476;
+}
+
+/* MD5 block update operation. Continues an MD5 message-digest
+ operation, processing another message block, and updating the
+ context.
+ */
+void MD5Update (context, input, inputLen)
+MD5_CONTEXT *context; /* context */
+unsigned char *input; /* input block */
+unsigned int inputLen; /* length of input block */
+{
+ unsigned int i, index, partLen;
+
+ /* Compute number of bytes mod 64 */
+ index = (unsigned int)((context->count[0] >> 3) & 0x3F);
+
+ /* Update number of bits */
+ if ((context->count[0] += ((UINT4)inputLen << 3))
+ < ((UINT4)inputLen << 3))
+ context->count[1]++;
+ context->count[1] += ((UINT4)inputLen >> 29);
+
+ partLen = 64 - index;
+
+ /* Transform as many times as possible.
+*/
+ if (inputLen >= partLen) {
+ MD5_memcpy
+ ((POINTER)&context->buffer[index], (POINTER)input, partLen);
+ MD5Transform (context->state, context->buffer);
+
+ for (i = partLen; i + 63 < inputLen; i += 64)
+ MD5Transform (context->state, &input[i]);
+
+ index = 0;
+ }
+ else
+ i = 0;
+
+ /* Buffer remaining input */
+ MD5_memcpy
+ ((POINTER)&context->buffer[index], (POINTER)&input[i],
+ inputLen-i);
+}
+
+/* MD5 finalization. Ends an MD5 message-digest operation, writing the
+ the message digest and zeroizing the context.
+ */
+void MD5Final (digest, context)
+unsigned char digest[16]; /* message digest */
+MD5_CONTEXT *context; /* context */
+{
+ unsigned char bits[8];
+ unsigned int index, padLen;
+
+ /* Save number of bits */
+ Encode (bits, context->count, 8);
+
+ /* Pad out to 56 mod 64.
+*/
+ index = (unsigned int)((context->count[0] >> 3) & 0x3f);
+ padLen = (index < 56) ? (56 - index) : (120 - index);
+ MD5Update (context, PADDING, padLen);
+
+ /* Append length (before padding) */
+ MD5Update (context, bits, 8);
+ /* Store state in digest */
+ Encode (digest, context->state, 16);
+
+ /* Zeroize sensitive information.
+*/
+ MD5_memset ((POINTER)context, 0, sizeof (*context));
+}
+
+/* MD5 basic transformation. Transforms state based on block.
+ */
+static void MD5Transform (state, block)
+UINT4 state[4];
+unsigned char block[64];
+{
+ UINT4 a = state[0], b = state[1], c = state[2], d = state[3], x[16];
+
+ Decode (x, block, 64);
+
+ /* Round 1 */
+ FF (a, b, c, d, x[ 0], S11, 0xd76aa478); /* 1 */
+ FF (d, a, b, c, x[ 1], S12, 0xe8c7b756); /* 2 */
+ FF (c, d, a, b, x[ 2], S13, 0x242070db); /* 3 */
+ FF (b, c, d, a, x[ 3], S14, 0xc1bdceee); /* 4 */
+ FF (a, b, c, d, x[ 4], S11, 0xf57c0faf); /* 5 */
+ FF (d, a, b, c, x[ 5], S12, 0x4787c62a); /* 6 */
+ FF (c, d, a, b, x[ 6], S13, 0xa8304613); /* 7 */
+ FF (b, c, d, a, x[ 7], S14, 0xfd469501); /* 8 */
+ FF (a, b, c, d, x[ 8], S11, 0x698098d8); /* 9 */
+ FF (d, a, b, c, x[ 9], S12, 0x8b44f7af); /* 10 */
+ FF (c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */
+ FF (b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */
+ FF (a, b, c, d, x[12], S11, 0x6b901122); /* 13 */
+ FF (d, a, b, c, x[13], S12, 0xfd987193); /* 14 */
+ FF (c, d, a, b, x[14], S13, 0xa679438e); /* 15 */
+ FF (b, c, d, a, x[15], S14, 0x49b40821); /* 16 */
+
+ /* Round 2 */
+ GG (a, b, c, d, x[ 1], S21, 0xf61e2562); /* 17 */
+ GG (d, a, b, c, x[ 6], S22, 0xc040b340); /* 18 */
+ GG (c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */
+ GG (b, c, d, a, x[ 0], S24, 0xe9b6c7aa); /* 20 */
+ GG (a, b, c, d, x[ 5], S21, 0xd62f105d); /* 21 */
+ GG (d, a, b, c, x[10], S22, 0x2441453); /* 22 */
+ GG (c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */
+ GG (b, c, d, a, x[ 4], S24, 0xe7d3fbc8); /* 24 */
+ GG (a, b, c, d, x[ 9], S21, 0x21e1cde6); /* 25 */
+ GG (d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */
+ GG (c, d, a, b, x[ 3], S23, 0xf4d50d87); /* 27 */
+ GG (b, c, d, a, x[ 8], S24, 0x455a14ed); /* 28 */
+ GG (a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */
+ GG (d, a, b, c, x[ 2], S22, 0xfcefa3f8); /* 30 */
+ GG (c, d, a, b, x[ 7], S23, 0x676f02d9); /* 31 */
+ GG (b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */
+
+ /* Round 3 */
+ HH (a, b, c, d, x[ 5], S31, 0xfffa3942); /* 33 */
+ HH (d, a, b, c, x[ 8], S32, 0x8771f681); /* 34 */
+ HH (c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */
+ HH (b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */
+ HH (a, b, c, d, x[ 1], S31, 0xa4beea44); /* 37 */
+ HH (d, a, b, c, x[ 4], S32, 0x4bdecfa9); /* 38 */
+ HH (c, d, a, b, x[ 7], S33, 0xf6bb4b60); /* 39 */
+ HH (b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */
+ HH (a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */
+ HH (d, a, b, c, x[ 0], S32, 0xeaa127fa); /* 42 */
+ HH (c, d, a, b, x[ 3], S33, 0xd4ef3085); /* 43 */
+ HH (b, c, d, a, x[ 6], S34, 0x4881d05); /* 44 */
+ HH (a, b, c, d, x[ 9], S31, 0xd9d4d039); /* 45 */
+ HH (d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */
+ HH (c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */
+ HH (b, c, d, a, x[ 2], S34, 0xc4ac5665); /* 48 */
+
+ /* Round 4 */
+ II (a, b, c, d, x[ 0], S41, 0xf4292244); /* 49 */
+ II (d, a, b, c, x[ 7], S42, 0x432aff97); /* 50 */
+ II (c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */
+ II (b, c, d, a, x[ 5], S44, 0xfc93a039); /* 52 */
+ II (a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */
+ II (d, a, b, c, x[ 3], S42, 0x8f0ccc92); /* 54 */
+ II (c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */
+ II (b, c, d, a, x[ 1], S44, 0x85845dd1); /* 56 */
+ II (a, b, c, d, x[ 8], S41, 0x6fa87e4f); /* 57 */
+ II (d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */
+ II (c, d, a, b, x[ 6], S43, 0xa3014314); /* 59 */
+ II (b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */
+ II (a, b, c, d, x[ 4], S41, 0xf7537e82); /* 61 */
+ II (d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */
+ II (c, d, a, b, x[ 2], S43, 0x2ad7d2bb); /* 63 */
+ II (b, c, d, a, x[ 9], S44, 0xeb86d391); /* 64 */
+
+ state[0] += a;
+ state[1] += b;
+ state[2] += c;
+ state[3] += d;
+
+ /* Zeroize sensitive information.
+*/
+ MD5_memset ((POINTER)x, 0, sizeof (x));
+}
+
+/* Encodes input (UINT4) into output (unsigned char). Assumes len is
+ a multiple of 4.
+ */
+static void Encode (output, input, len)
+unsigned char *output;
+UINT4 *input;
+unsigned int len;
+{
+ unsigned int i, j;
+
+ for (i = 0, j = 0; j < len; i++, j += 4) {
+ output[j] = (unsigned char)(input[i] & 0xff);
+ output[j+1] = (unsigned char)((input[i] >> 8) & 0xff);
+ output[j+2] = (unsigned char)((input[i] >> 16) & 0xff);
+ output[j+3] = (unsigned char)((input[i] >> 24) & 0xff);
+ }
+}
+
+/* Decodes input (unsigned char) into output (UINT4). Assumes len is
+ a multiple of 4.
+ */
+static void Decode (output, input, len)
+UINT4 *output;
+unsigned char *input;
+unsigned int len;
+{
+ unsigned int i, j;
+
+ for (i = 0, j = 0; j < len; i++, j += 4)
+ output[i] = ((UINT4)input[j]) | (((UINT4)input[j+1]) << 8) |
+ (((UINT4)input[j+2]) << 16) | (((UINT4)input[j+3]) << 24);
+}
+
+/* Note: Replace "for loop" with standard memcpy if possible.
+ */
+
+static void MD5_memcpy (output, input, len)
+POINTER output;
+POINTER input;
+unsigned int len;
+{
+ unsigned int i;
+
+ for (i = 0; i < len; i++)
+ output[i] = input[i];
+}
+
+/* Note: Replace "for loop" with standard memset if possible.
+ */
+static void MD5_memset (output, value, len)
+POINTER output;
+int value;
+unsigned int len;
+{
+ unsigned int i;
+
+ for (i = 0; i < len; i++)
+ ((char *)output)[i] = (char)value;
+}
+
diff --git a/cleopatre/application/spidgoahead/mime.c b/cleopatre/application/spidgoahead/mime.c
new file mode 100644
index 0000000000..064f7013cc
--- /dev/null
+++ b/cleopatre/application/spidgoahead/mime.c
@@ -0,0 +1,119 @@
+/*
+ * mime.c -- Web server mime types
+ *
+ * Copyright (c) GoAhead Software Inc., 1995-2000. All Rights Reserved.
+ *
+ * See the file "license.txt" for usage and redistribution license requirements
+ *
+ * $Id: mime.c,v 1.7 2003/03/17 20:12:33 bporter Exp $
+ */
+
+/******************************** Description *********************************/
+
+/*
+ * Mime types and file extensions. This module maps URL extensions to
+ * content types.
+ */
+
+/********************************* Includes ***********************************/
+
+#include "wsIntrn.h"
+
+/******************************** Global Data *********************************/
+/*
+ * Addd entries to the MimeList as required for your content
+ */
+
+
+websMimeType websMimeList[] = {
+ { T("application/java"), T(".class") },
+ { T("application/java"), T(".jar") },
+ { T("text/html"), T(".asp") },
+ { T("text/html"), T(".htm") },
+ { T("text/html"), T(".html") },
+ { T("text/xml"), T(".xml") },
+ { T("image/gif"), T(".gif") },
+ { T("image/jpeg"), T(".jpg") },
+ { T("text/css"), T(".css") },
+ { T("text/plain"), T(".txt") },
+ { T("application/x-javascript"), T(".js") },
+ { T("application/x-shockwave-flash"), T(".swf") },
+
+#ifdef MORE_MIME_TYPES
+ { T("application/binary"), T(".exe") },
+ { T("application/compress"), T(".z") },
+ { T("application/gzip"), T(".gz") },
+ { T("application/octet-stream"), T(".bin") },
+ { T("application/oda"), T(".oda") },
+ { T("application/pdf"), T(".pdf") },
+ { T("application/postscript"), T(".ai") },
+ { T("application/postscript"), T(".eps") },
+ { T("application/postscript"), T(".ps") },
+ { T("application/rtf"), T(".rtf") },
+ { T("application/x-bcpio"), T(".bcpio") },
+ { T("application/x-cpio"), T(".cpio") },
+ { T("application/x-csh"), T(".csh") },
+ { T("application/x-dvi"), T(".dvi") },
+ { T("application/x-gtar"), T(".gtar") },
+ { T("application/x-hdf"), T(".hdf") },
+ { T("application/x-latex"), T(".latex") },
+ { T("application/x-mif"), T(".mif") },
+ { T("application/x-netcdf"), T(".nc") },
+ { T("application/x-netcdf"), T(".cdf") },
+ { T("application/x-ns-proxy-autoconfig"), T(".pac") },
+ { T("application/x-patch"), T(".patch") },
+ { T("application/x-sh"), T(".sh") },
+ { T("application/x-shar"), T(".shar") },
+ { T("application/x-sv4cpio"), T(".sv4cpio") },
+ { T("application/x-sv4crc"), T(".sv4crc") },
+ { T("application/x-tar"), T(".tar") },
+ { T("application/x-tcl"), T(".tcl") },
+ { T("application/x-tex"), T(".tex") },
+ { T("application/x-texinfo"), T(".texinfo") },
+ { T("application/x-texinfo"), T(".texi") },
+ { T("application/x-troff"), T(".t") },
+ { T("application/x-troff"), T(".tr") },
+ { T("application/x-troff"), T(".roff") },
+ { T("application/x-troff-man"), T(".man") },
+ { T("application/x-troff-me"), T(".me") },
+ { T("application/x-troff-ms"), T(".ms") },
+ { T("application/x-ustar"), T(".ustar") },
+ { T("application/x-wais-source"), T(".src") },
+ { T("application/zip"), T(".zip") },
+ { T("audio/basic"), T(".au snd") },
+ { T("audio/x-aiff"), T(".aif") },
+ { T("audio/x-aiff"), T(".aiff") },
+ { T("audio/x-aiff"), T(".aifc") },
+ { T("audio/x-wav"), T(".wav") },
+ { T("audio/x-wav"), T(".ram") },
+ { T("image/ief"), T(".ief") },
+ { T("image/jpeg"), T(".jpeg") },
+ { T("image/jpeg"), T(".jpe") },
+ { T("image/tiff"), T(".tiff") },
+ { T("image/tiff"), T(".tif") },
+ { T("image/x-cmu-raster"), T(".ras") },
+ { T("image/x-portable-anymap"), T(".pnm") },
+ { T("image/x-portable-bitmap"), T(".pbm") },
+ { T("image/x-portable-graymap"), T(".pgm") },
+ { T("image/x-portable-pixmap"), T(".ppm") },
+ { T("image/x-rgb"), T(".rgb") },
+ { T("image/x-xbitmap"), T(".xbm") },
+ { T("image/x-xpixmap"), T(".xpm") },
+ { T("image/x-xwindowdump"), T(".xwd") },
+ { T("text/html"), T(".cfm") },
+ { T("text/html"), T(".shtm") },
+ { T("text/html"), T(".shtml") },
+ { T("text/richtext"), T(".rtx") },
+ { T("text/tab-separated-values"), T(".tsv") },
+ { T("text/x-setext"), T(".etx") },
+ { T("video/mpeg"), T(".mpeg mpg mpe") },
+ { T("video/quicktime"), T(".qt") },
+ { T("video/quicktime"), T(".mov") },
+ { T("video/x-msvideo"), T(".avi") },
+ { T("video/x-sgi-movie"), T(".movie") },
+#endif
+ { NULL, NULL},
+};
+
+/*****************************************************************************/
+
diff --git a/cleopatre/application/spidgoahead/misc.c b/cleopatre/application/spidgoahead/misc.c
new file mode 100644
index 0000000000..77f55c181d
--- /dev/null
+++ b/cleopatre/application/spidgoahead/misc.c
@@ -0,0 +1,690 @@
+/*
+ * misc.c -- Miscellaneous routines.
+ *
+ * Copyright (c) GoAhead Software Inc., 1995-2000. All Rights Reserved.
+ *
+ * See the file "license.txt" for usage and redistribution license requirements
+ *
+ * $Id: misc.c,v 1.6 2003/09/29 19:50:24 bporter Exp $
+ */
+
+/********************************* Includes ***********************************/
+
+#ifdef UEMF
+ #include "uemf.h"
+#else
+ #include "basic/basicInternal.h"
+#endif
+
+/*
+ * 16 Sep 03 -- added option to use memcpy() instead of strncpy() in the
+ * ascToUni and uniToAsc functions.
+ */
+#define kUseMemcopy
+
+
+/********************************* Defines ************************************/
+/*
+ * Sprintf buffer structure. Make the increment 64 so that
+ * a balloc can use a 64 byte block.
+ */
+
+#define STR_REALLOC 0x1 /* Reallocate the buffer as required */
+#define STR_INC 64 /* Growth increment */
+
+typedef struct {
+ char_t *s; /* Pointer to buffer */
+ int size; /* Current buffer size */
+ int max; /* Maximum buffer size */
+ int count; /* Buffer count */
+ int flags; /* Allocation flags */
+} strbuf_t;
+
+/*
+ * Sprintf formatting flags
+ */
+enum flag {
+ flag_none = 0,
+ flag_minus = 1,
+ flag_plus = 2,
+ flag_space = 4,
+ flag_hash = 8,
+ flag_zero = 16,
+ flag_short = 32,
+ flag_long = 64
+};
+
+/************************** Forward Declarations ******************************/
+
+static int dsnprintf(char_t **s, int size, char_t *fmt, va_list arg,
+ int msize);
+static int strnlen(char_t *s, unsigned int n);
+static void put_char(strbuf_t *buf, char_t c);
+static void put_string(strbuf_t *buf, char_t *s, int len,
+ int width, int prec, enum flag f);
+static void put_ulong(strbuf_t *buf, unsigned long int value, int base,
+ int upper, char_t *prefix, int width, int prec, enum flag f);
+
+/************************************ Code ************************************/
+/*
+ * "basename" returns a pointer to the last component of a pathname
+ * LINUX, LynxOS and Mac OS X have their own basename function
+ */
+
+#if (!defined (LINUX) && !defined (LYNX) && !defined (MACOSX))
+char_t *basename(char_t *name)
+{
+ char_t *cp;
+
+#if (defined (NW) || defined (WIN))
+ if (((cp = gstrrchr(name, '\\')) == NULL) &&
+ ((cp = gstrrchr(name, '/')) == NULL)) {
+ return name;
+#else
+ if ((cp = gstrrchr(name, '/')) == NULL) {
+ return name;
+#endif
+ } else if (*(cp + 1) == '\0' && cp == name) {
+ return name;
+ } else if (*(cp + 1) == '\0' && cp != name) {
+ return T("");
+ } else {
+ return ++cp;
+ }
+}
+#endif /* ! LINUX & ! LYNX & ! MACOSX */
+
+/******************************************************************************/
+/*
+ * Returns a pointer to the directory component of a pathname. bufsize is
+ * the size of the buffer in BYTES!
+ */
+
+char_t *spidgoahead_dirname(char_t *buf, char_t *name, int bufsize)
+{
+ char_t *cp;
+ int len;
+
+ a_assert(name);
+ a_assert(buf);
+ a_assert(bufsize > 0);
+
+#if (defined (WIN) || defined (NW))
+ if ((cp = gstrrchr(name, '/')) == NULL &&
+ (cp = gstrrchr(name, '\\')) == NULL)
+#else
+ if ((cp = gstrrchr(name, '/')) == NULL)
+#endif
+ {
+ gstrcpy(buf, T("."));
+ return buf;
+ }
+
+ if ((*(cp + 1) == '\0' && cp == name)) {
+ gstrncpy(buf, T("."), TSZ(bufsize));
+ gstrcpy(buf, T("."));
+ return buf;
+ }
+
+ len = cp - name;
+
+ if (len < bufsize) {
+ gstrncpy(buf, name, len);
+ buf[len] = '\0';
+ } else {
+ gstrncpy(buf, name, TSZ(bufsize));
+ buf[bufsize - 1] = '\0';
+ }
+
+ return buf;
+}
+
+
+/******************************************************************************/
+/*
+ * sprintf and vsprintf are bad, ok. You can easily clobber memory. Use
+ * fmtAlloc and fmtValloc instead! These functions do _not_ support floating
+ * point, like %e, %f, %g...
+ */
+
+int fmtAlloc(char_t **s, int n, char_t *fmt, ...)
+{
+ va_list ap;
+ int result;
+
+ a_assert(s);
+ a_assert(fmt);
+
+ *s = NULL;
+ va_start(ap, fmt);
+ result = dsnprintf(s, n, fmt, ap, 0);
+ va_end(ap);
+ return result;
+}
+
+/******************************************************************************/
+/*
+ * Support a static buffer version for small buffers only!
+ */
+
+int fmtStatic(char_t *s, int n, char_t *fmt, ...)
+{
+ va_list ap;
+ int result;
+
+ a_assert(s);
+ a_assert(fmt);
+ a_assert(n <= 256);
+
+ if (n <= 0) {
+ return -1;
+ }
+ va_start(ap, fmt);
+ result = dsnprintf(&s, n, fmt, ap, 0);
+ va_end(ap);
+ return result;
+}
+
+/******************************************************************************/
+/*
+ * This function appends the formatted string to the supplied string,
+ * reallocing if required.
+ */
+
+int fmtRealloc(char_t **s, int n, int msize, char_t *fmt, ...)
+{
+ va_list ap;
+ int result;
+
+ a_assert(s);
+ a_assert(fmt);
+
+ if (msize == -1) {
+ *s = NULL;
+ }
+ va_start(ap, fmt);
+ result = dsnprintf(s, n, fmt, ap, msize);
+ va_end(ap);
+ return result;
+}
+
+/******************************************************************************/
+/*
+ * A vsprintf replacement.
+ */
+
+int fmtValloc(char_t **s, int n, char_t *fmt, va_list arg)
+{
+ a_assert(s);
+ a_assert(fmt);
+
+ *s = NULL;
+ return dsnprintf(s, n, fmt, arg, 0);
+}
+
+/******************************************************************************/
+/*
+ * Dynamic sprintf implementation. Supports dynamic buffer allocation.
+ * This function can be called multiple times to grow an existing allocated
+ * buffer. In this case, msize is set to the size of the previously allocated
+ * buffer. The buffer will be realloced, as required. If msize is set, we
+ * return the size of the allocated buffer for use with the next call. For
+ * the first call, msize can be set to -1.
+ */
+
+static int dsnprintf(char_t **s, int size, char_t *fmt, va_list arg, int msize)
+{
+ strbuf_t buf;
+ char_t c;
+
+ a_assert(s);
+ a_assert(fmt);
+
+ memset(&buf, 0, sizeof(buf));
+ buf.s = *s;
+
+ if (*s == NULL || msize != 0) {
+ buf.max = size;
+ buf.flags |= STR_REALLOC;
+ if (msize != 0) {
+ buf.size = max(msize, 0);
+ }
+ if (*s != NULL && msize != 0) {
+ buf.count = gstrlen(*s);
+ }
+ } else {
+ buf.size = size;
+ }
+
+ while ((c = *fmt++) != '\0') {
+ if (c != '%' || (c = *fmt++) == '%') {
+ put_char(&buf, c);
+ } else {
+ enum flag f = flag_none;
+ int width = 0;
+ int prec = -1;
+ for ( ; c != '\0'; c = *fmt++) {
+ if (c == '-') {
+ f |= flag_minus;
+ } else if (c == '+') {
+ f |= flag_plus;
+ } else if (c == ' ') {
+ f |= flag_space;
+ } else if (c == '#') {
+ f |= flag_hash;
+ } else if (c == '0') {
+ f |= flag_zero;
+ } else {
+ break;
+ }
+ }
+ if (c == '*') {
+ width = va_arg(arg, int);
+ if (width < 0) {
+ f |= flag_minus;
+ width = -width;
+ }
+ c = *fmt++;
+ } else {
+ for ( ; gisdigit((int)c); c = *fmt++) {
+ width = width * 10 + (c - '0');
+ }
+ }
+ if (c == '.') {
+ f &= ~flag_zero;
+ c = *fmt++;
+ if (c == '*') {
+ prec = va_arg(arg, int);
+ c = *fmt++;
+ } else {
+ for (prec = 0; gisdigit((int)c); c = *fmt++) {
+ prec = prec * 10 + (c - '0');
+ }
+ }
+ }
+ if (c == 'h' || c == 'l') {
+ f |= (c == 'h' ? flag_short : flag_long);
+ c = *fmt++;
+ }
+ if (c == 'd' || c == 'i') {
+ long int value;
+ if (f & flag_short) {
+ value = (short int) va_arg(arg, int);
+ } else if (f & flag_long) {
+ value = va_arg(arg, long int);
+ } else {
+ value = va_arg(arg, int);
+ }
+ if (value >= 0) {
+ if (f & flag_plus) {
+ put_ulong(&buf, value, 10, 0, T("+"), width, prec, f);
+ } else if (f & flag_space) {
+ put_ulong(&buf, value, 10, 0, T(" "), width, prec, f);
+ } else {
+ put_ulong(&buf, value, 10, 0, NULL, width, prec, f);
+ }
+ } else {
+ put_ulong(&buf, -value, 10, 0, T("-"), width, prec, f);
+ }
+ } else if (c == 'o' || c == 'u' || c == 'x' || c == 'X') {
+ unsigned long int value;
+ if (f & flag_short) {
+ value = (unsigned short int) va_arg(arg, unsigned int);
+ } else if (f & flag_long) {
+ value = va_arg(arg, unsigned long int);
+ } else {
+ value = va_arg(arg, unsigned int);
+ }
+ if (c == 'o') {
+ if (f & flag_hash && value != 0) {
+ put_ulong(&buf, value, 8, 0, T("0"), width, prec, f);
+ } else {
+ put_ulong(&buf, value, 8, 0, NULL, width, prec, f);
+ }
+ } else if (c == 'u') {
+ put_ulong(&buf, value, 10, 0, NULL, width, prec, f);
+ } else {
+ if (f & flag_hash && value != 0) {
+ if (c == 'x') {
+ put_ulong(&buf, value, 16, 0, T("0x"), width,
+ prec, f);
+ } else {
+ put_ulong(&buf, value, 16, 1, T("0X"), width,
+ prec, f);
+ }
+ } else {
+ /* 04 Apr 02 BgP -- changed so that %X correctly outputs
+ * uppercase hex digits when requested.
+ put_ulong(&buf, value, 16, 0, NULL, width, prec, f);
+ */
+ put_ulong(&buf, value, 16, ('X' == c) , NULL, width, prec, f);
+ }
+ }
+
+ } else if (c == 'c') {
+ char_t value = va_arg(arg, int);
+ put_char(&buf, value);
+
+ } else if (c == 's' || c == 'S') {
+ char_t *value = va_arg(arg, char_t *);
+ if (value == NULL) {
+ put_string(&buf, T("(null)"), -1, width, prec, f);
+ } else if (f & flag_hash) {
+ put_string(&buf,
+ value + 1, (char_t) *value, width, prec, f);
+ } else {
+ put_string(&buf, value, -1, width, prec, f);
+ }
+ } else if (c == 'p') {
+ void *value = va_arg(arg, void *);
+ put_ulong(&buf,
+ (unsigned long int) value, 16, 0, T("0x"), width, prec, f);
+ } else if (c == 'n') {
+ if (f & flag_short) {
+ short int *value = va_arg(arg, short int *);
+ *value = buf.count;
+ } else if (f & flag_long) {
+ long int *value = va_arg(arg, long int *);
+ *value = buf.count;
+ } else {
+ int *value = va_arg(arg, int *);
+ *value = buf.count;
+ }
+ } else {
+ put_char(&buf, c);
+ }
+ }
+ }
+ if (buf.s == NULL) {
+ put_char(&buf, '\0');
+ }
+
+/*
+ * If the user requested a dynamic buffer (*s == NULL), ensure it is returned.
+ */
+ if (*s == NULL || msize != 0) {
+ *s = buf.s;
+ }
+
+ if (*s != NULL && size > 0) {
+ if (buf.count < size) {
+ (*s)[buf.count] = '\0';
+ } else {
+ (*s)[buf.size - 1] = '\0';
+ }
+ }
+
+ if (msize != 0) {
+ return buf.size;
+ }
+ return buf.count;
+}
+
+/******************************************************************************/
+/*
+ * Return the length of a string limited by a given length
+ */
+
+static int strnlen(char_t *s, unsigned int n)
+{
+ unsigned int len;
+
+ len = gstrlen(s);
+ return min(len, n);
+}
+
+/******************************************************************************/
+/*
+ * Add a character to a string buffer
+ */
+
+static void put_char(strbuf_t *buf, char_t c)
+{
+ if (buf->count >= (buf->size - 1)) {
+ if (! (buf->flags & STR_REALLOC)) {
+ return;
+ }
+ buf->size += STR_INC;
+ if (buf->size > buf->max && buf->size > STR_INC) {
+/*
+ * Caller should increase the size of the calling buffer
+ */
+ buf->size -= STR_INC;
+ return;
+ }
+ if (buf->s == NULL) {
+ buf->s = balloc(B_L, buf->size * sizeof(char_t));
+ } else {
+ buf->s = brealloc(B_L, buf->s, buf->size * sizeof(char_t));
+ }
+ }
+ buf->s[buf->count] = c;
+ if (c != '\0') {
+ ++buf->count;
+ }
+}
+
+/******************************************************************************/
+/*
+ * Add a string to a string buffer
+ */
+
+static void put_string(strbuf_t *buf, char_t *s, int len, int width,
+ int prec, enum flag f)
+{
+ int i;
+
+ if (len < 0) {
+ len = strnlen(s, prec >= 0 ? prec : ULONG_MAX);
+ } else if (prec >= 0 && prec < len) {
+ len = prec;
+ }
+ if (width > len && !(f & flag_minus)) {
+ for (i = len; i < width; ++i) {
+ put_char(buf, ' ');
+ }
+ }
+ for (i = 0; i < len; ++i) {
+ put_char(buf, s[i]);
+ }
+ if (width > len && f & flag_minus) {
+ for (i = len; i < width; ++i) {
+ put_char(buf, ' ');
+ }
+ }
+}
+
+/******************************************************************************/
+/*
+ * Add a long to a string buffer
+ */
+
+static void put_ulong(strbuf_t *buf, unsigned long int value, int base,
+ int upper, char_t *prefix, int width, int prec, enum flag f)
+{
+ unsigned long x, x2;
+ int len, zeros, i;
+
+ for (len = 1, x = 1; x < ULONG_MAX / base; ++len, x = x2) {
+ x2 = x * base;
+ if (x2 > value) {
+ break;
+ }
+ }
+ zeros = (prec > len) ? prec - len : 0;
+ width -= zeros + len;
+ if (prefix != NULL) {
+ width -= strnlen(prefix, ULONG_MAX);
+ }
+ if (!(f & flag_minus)) {
+ if (f & flag_zero) {
+ for (i = 0; i < width; ++i) {
+ put_char(buf, '0');
+ }
+ } else {
+ for (i = 0; i < width; ++i) {
+ put_char(buf, ' ');
+ }
+ }
+ }
+ if (prefix != NULL) {
+ put_string(buf, prefix, -1, 0, -1, flag_none);
+ }
+ for (i = 0; i < zeros; ++i) {
+ put_char(buf, '0');
+ }
+ for ( ; x > 0; x /= base) {
+ int digit = (value / x) % base;
+ put_char(buf, (char) ((digit < 10 ? '0' : (upper ? 'A' : 'a') - 10) +
+ digit));
+ }
+ if (f & flag_minus) {
+ for (i = 0; i < width; ++i) {
+ put_char(buf, ' ');
+ }
+ }
+}
+
+/******************************************************************************/
+/*
+ * Convert an ansi string to a unicode string. On an error, we return the
+ * original ansi string which is better than returning NULL. nBytes is the
+ * size of the destination buffer (ubuf) in _bytes_.
+ */
+
+char_t *ascToUni(char_t *ubuf, char *str, int nBytes)
+{
+#ifdef UNICODE
+ if (MultiByteToWideChar(CP_ACP, 0, str, nBytes / sizeof(char_t), ubuf,
+ nBytes / sizeof(char_t)) < 0) {
+ return (char_t*) str;
+ }
+#else
+
+#ifdef kUseMemcopy
+ memcpy(ubuf, str, nBytes);
+#else
+ strncpy(ubuf, str, nBytes);
+#endif /*kUseMemcopy*/
+#endif
+ return ubuf;
+}
+
+/******************************************************************************/
+/*
+ * Convert a unicode string to an ansi string. On an error, return the
+ * original unicode string which is better than returning NULL.
+ * N.B. nBytes is the number of _bytes_ in the destination buffer, buf.
+ */
+
+char *uniToAsc(char *buf, char_t *ustr, int nBytes)
+{
+#ifdef UNICODE
+ if (WideCharToMultiByte(CP_ACP, 0, ustr, nBytes, buf, nBytes,
+ NULL, NULL) < 0)
+ {
+ return (char*) ustr;
+ }
+#else
+#ifdef kUseMemcopy
+ memcpy(buf, ustr, nBytes);
+#else
+ strncpy(buf, ustr, nBytes);
+#endif /* kUseMemcopy */
+#endif
+ return (char*) buf;
+}
+
+/******************************************************************************/
+/*
+ * allocate (balloc) a buffer and do ascii to unicode conversion into it.
+ * cp points to the ascii buffer. alen is the length of the buffer to be
+ * converted not including a terminating NULL. Return a pointer to the
+ * unicode buffer which must be bfree'd later. Return NULL on failure to
+ * get buffer. The buffer returned is NULL terminated.
+ */
+
+char_t *ballocAscToUni(char *cp, int alen)
+{
+ char_t *unip;
+ int ulen;
+
+ ulen = (alen + 1) * sizeof(char_t);
+ if ((unip = balloc(B_L, ulen)) == NULL) {
+ return NULL;
+ }
+ ascToUni(unip, cp, ulen);
+ unip[alen] = 0;
+ return unip;
+}
+
+/******************************************************************************/
+/*
+ * allocate (balloc) a buffer and do unicode to ascii conversion into it.
+ * unip points to the unicoded string. ulen is the number of characters
+ * in the unicode string not including a teminating null. Return a pointer
+ * to the ascii buffer which must be bfree'd later. Return NULL on failure
+ * to get buffer. The buffer returned is NULL terminated.
+ */
+
+char *ballocUniToAsc(char_t *unip, int ulen)
+{
+ char * cp;
+
+ if ((cp = balloc(B_L, ulen+1)) == NULL) {
+ return NULL;
+ }
+ uniToAsc(cp, unip, ulen);
+ cp[ulen] = '\0';
+ return cp;
+}
+
+/******************************************************************************/
+/*
+ * convert a hex string to an integer. The end of the string or a non-hex
+ * character will indicate the end of the hex specification.
+ */
+
+unsigned int hextoi(char_t *hexstring)
+{
+ register char_t *h;
+ register unsigned int c, v;
+
+ v = 0;
+ h = hexstring;
+ if (*h == '0' && (*(h+1) == 'x' || *(h+1) == 'X')) {
+ h += 2;
+ }
+ while ((c = (unsigned int)*h++) != 0) {
+ if (c >= '0' && c <= '9') {
+ c -= '0';
+ } else if (c >= 'a' && c <= 'f') {
+ c = (c - 'a') + 10;
+ } else if (c >= 'A' && c <= 'F') {
+ c = (c - 'A') + 10;
+ } else {
+ break;
+ }
+ v = (v * 0x10) + c;
+ }
+ return v;
+}
+
+/******************************************************************************/
+/*
+ * convert a string to an integer. If the string starts with "0x" or "0X"
+ * a hexidecimal conversion is done.
+ */
+
+unsigned int gstrtoi(char_t *s)
+{
+ if (*s == '0' && (*(s+1) == 'x' || *(s+1) == 'X')) {
+ s += 2;
+ return hextoi(s);
+ }
+ return gatoi(s);
+}
+
+/******************************************************************************/
+
+
diff --git a/cleopatre/application/spidgoahead/mocana_ssl.c b/cleopatre/application/spidgoahead/mocana_ssl.c
new file mode 100644
index 0000000000..b77bebe057
--- /dev/null
+++ b/cleopatre/application/spidgoahead/mocana_ssl.c
@@ -0,0 +1,539 @@
+/*
+ * mocana_ssl.c
+ *
+ * Mocana Embedded SSL Server
+ * GoAhead integration layer
+ *
+ * Copyright Mocana Corp 2003. All Rights Reserved.
+ *
+ */
+
+
+/******************************** Description *********************************/
+
+/*
+ * This module implements a patch into the Mocana Embedded SSL Server.
+ *
+ */
+
+#ifdef __ENABLE_MOCANA_SSL_SERVER__
+
+/********************************* Includes ***********************************/
+
+#include "mocana_ssl/common/moptions.h"
+#include "mocana_ssl/common/mdefs.h"
+#include "mocana_ssl/common/mtypes.h"
+#include "mocana_ssl/common/merrors.h"
+#include "mocana_ssl/common/mrtos.h"
+#include "mocana_ssl/common/mtcp.h"
+#include "mocana_ssl/common/mocana.h"
+#include "mocana_ssl/common/random.h"
+#include "mocana_ssl/ssl/ssl.h"
+
+#include "wsIntrn.h"
+#include "webs.h"
+#include "websSSL.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+/******************************* Definitions **********************************/
+
+#ifdef __RTOS_VXWORKS__
+#define SSL_CERTIFICATE_DER_FILE "NVRAM:/ssl.der"
+#define SSL_RSA_HOST_KEYS "NVRAM:/sslkey.dat"
+#else
+#define SSL_CERTIFICATE_DER_FILE "ssl.der"
+#define SSL_RSA_HOST_KEYS "sslkey.dat"
+#endif
+
+#define SSL_PORT SSL_DEFAULT_TCPIP_PORT
+#define MAX_SSL_CONNECTIONS_ALLOWED (10)
+#define SSL_HELLO_TIMEOUT (15000)
+#define SSL_RECV_TIMEOUT (300000)
+
+#define SSL_EXAMPLE_KEY_SIZE (1024 + 256)
+
+static int sslListenSock = -1; /* Listen socket */
+static char* pCertificate = NULL;
+static char* pRsaKeyBlob = NULL;
+
+
+/******************************* Prototypes **********************************/
+
+int websSSLAccept(int sid, char *ipaddr, int port, int listenSid);
+static void websSSLSocketEvent(int sid, int mask, int iwp);
+static int websSSLReadEvent(webs_t wp);
+static int mocana_SSL_computeHostKeys(char** ppCertificate, unsigned int *pCertLength,
+ char** ppRsaKeyBlob, unsigned int *pKeyBlobLength);
+static int mocana_SSL_releaseHostKeys(char **ppCertificate, char **ppRsaKeyBlob);
+
+
+
+/******************************************************************************/
+/*
+ * Start up the SSL Context for the application, and start a listen on the
+ * SSL port (usually 443, and defined by SSL_PORT)
+ * Return 0 on success, -1 on failure.
+ */
+
+int websSSLOpen()
+{
+ unsigned int certLength;
+ unsigned int rsaKeyBlobLength;
+
+ if (0 > MOCANA_initMocana())
+ return -1;
+
+ if (0 > mocana_SSL_computeHostKeys(&pCertificate, &certLength, &pRsaKeyBlob, &rsaKeyBlobLength))
+ return -1;
+
+ if (0 > SSL_init(pCertificate, certLength, pRsaKeyBlob, rsaKeyBlobLength, MAX_SSL_CONNECTIONS_ALLOWED))
+ return -1;
+
+ SSL_sslSettings()->sslTimeOutHello = SSL_HELLO_TIMEOUT;
+ SSL_sslSettings()->sslTimeOutReceive = SSL_RECV_TIMEOUT;
+
+ sslListenSock = socketOpenConnection(NULL, SSL_PORT, websSSLAccept, SOCKET_BLOCK);
+
+ if (sslListenSock < 0) {
+ trace(2, T("SSL: Unable to open SSL socket on port <%d>!\n"),
+ SSL_PORT);
+ return -1;
+ }
+
+ return 0;
+}
+
+
+/******************************************************************************/
+/*
+ * Accept a connection
+ */
+
+int websSSLAccept(int sid, char *ipaddr, int port, int listenSid)
+{
+ webs_t wp;
+ int wid;
+
+ a_assert(ipaddr && *ipaddr);
+ a_assert(sid >= 0);
+ a_assert(port >= 0);
+
+/*
+ * Allocate a new handle for this accepted connection. This will allocate
+ * a webs_t structure in the webs[] list
+ */
+ if ((wid = websAlloc(sid)) < 0) {
+ return -1;
+ }
+ wp = webs[wid];
+ a_assert(wp);
+ wp->listenSid = listenSid;
+
+ ascToUni(wp->ipaddr, ipaddr, min(sizeof(wp->ipaddr), strlen(ipaddr)+1));
+
+/*
+ * Check if this is a request from a browser on this system. This is useful
+ * to know for permitting administrative operations only for local access
+ */
+ if (gstrcmp(wp->ipaddr, T("127.0.0.1")) == 0 ||
+ gstrcmp(wp->ipaddr, websIpaddr) == 0 ||
+ gstrcmp(wp->ipaddr, websHost) == 0) {
+ wp->flags |= WEBS_LOCAL_REQUEST;
+ }
+/*
+ * Since the acceptance came in on this channel, it must be secure
+ */
+ wp->flags |= WEBS_SECURE;
+
+/*
+ * Arrange for websSocketEvent to be called when read data is available
+ */
+ socketCreateHandler(sid, SOCKET_READABLE, websSSLSocketEvent, (int) wp);
+
+/*
+ * Arrange for a timeout to kill hung requests
+ */
+ wp->timeout = emfSchedCallback(WEBS_TIMEOUT, websTimeout, (void *) wp);
+ trace(8, T("webs: accept request\n"));
+ return 0;
+}
+
+
+/******************************************************************************/
+/*
+ * Perform a read of the SSL socket
+ */
+
+int websSSLRead(websSSL_t *wsp, char_t *buf, int len)
+{
+ int numBytesReceived;
+ int rc;
+
+ a_assert(wsp);
+ a_assert(buf);
+
+ if ((rc = SSL_recv(wsp->mocanaConnectionInstance, buf, len, &numBytesReceived)) < 0)
+ {
+ if (0 > rc)
+ rc = -1;
+
+ return rc;
+ }
+
+ return numBytesReceived;
+}
+
+
+/******************************************************************************/
+/*
+ * The webs socket handler. Called in response to I/O. We just pass control
+ * to the relevant read or write handler. A pointer to the webs structure
+ * is passed as an (int) in iwp.
+ */
+
+static void websSSLSocketEvent(int sid, int mask, int iwp)
+{
+ webs_t wp;
+
+ wp = (webs_t) iwp;
+ a_assert(wp);
+
+ if (! websValid(wp)) {
+ return;
+ }
+
+ if (mask & SOCKET_READABLE) {
+ websSSLReadEvent(wp);
+ }
+ if (mask & SOCKET_WRITABLE) {
+ if (wp->writeSocket) {
+ (*wp->writeSocket)(wp);
+ }
+ }
+}
+
+
+/******************************************************************************/
+/*
+ * Handler for SSL Read Events
+ */
+
+static int websSSLReadEvent (webs_t wp)
+{
+ int ret = 07, sock;
+ socket_t *sptr;
+ int connectionInstance;
+
+ a_assert (wp);
+ a_assert(websValid(wp));
+
+ sptr = socketPtr(wp->sid);
+ a_assert(sptr);
+
+ sock = sptr->sock;
+
+/*
+ * Create a new SSL session for this web request
+ */
+
+ connectionInstance = SSL_acceptConnection(sock);
+
+ if (0 > connectionInstance)
+ {
+#ifdef __ENABLE_ALL_DEBUGGING__
+ printf("websSSLReadEvent: SSL_acceptConnection failed. %d\n", connectionInstance);
+#endif
+
+ /* SSL error: cleanup */
+ websTimeoutCancel(wp);
+ socketCloseConnection(wp->sid);
+ websFree(wp);
+
+ return -1;
+ }
+
+/*
+ * Create the SSL data structure in the wp.
+ */
+ wp->wsp = balloc(B_L, sizeof(websSSL_t));
+ a_assert (wp->wsp);
+
+ (wp->wsp)->mocanaConnectionInstance = connectionInstance;
+ (wp->wsp)->wp = wp;
+
+/*
+ * Call the default Read Event
+ */
+ websReadEvent(wp);
+
+ return ret;
+}
+
+
+/******************************************************************************/
+/*
+ * Return TRUE if websSSL has been opened
+ */
+
+int websSSLIsOpen()
+{
+ return (sslListenSock != -1);
+}
+
+
+/******************************************************************************/
+/*
+ * Perform a gets of the SSL socket, returning an balloc'ed string
+ *
+ * Get a string from a socket. This returns data in *buf in a malloced string
+ * after trimming the '\n'. If there is zero bytes returned, *buf will be set
+ * to NULL. If doing non-blocking I/O, it returns -1 for error, EOF or when
+ * no complete line yet read. If doing blocking I/O, it will block until an
+ * entire line is read. If a partial line is read socketInputBuffered or
+ * socketEof can be used to distinguish between EOF and partial line still
+ * buffered. This routine eats and ignores carriage returns.
+ */
+
+int websSSLGets(websSSL_t *wsp, char_t **buf)
+{
+ socket_t *sp;
+ ringq_t *lq;
+ char c;
+ int rc, len;
+ webs_t wp;
+ int sid;
+ int mci;
+ int numBytesReceived;
+
+ a_assert(wsp);
+ a_assert(buf);
+
+ *buf = NULL;
+
+ wp = wsp->wp;
+ sid = wp->sid;
+ mci = wsp->mocanaConnectionInstance;
+
+ if ((sp = socketPtr(sid)) == NULL) {
+ return -1;
+ }
+ lq = &sp->lineBuf;
+
+ while (1) {
+
+ if ((rc = SSL_recv(mci, &c, 1, &numBytesReceived)) < 0)
+ {
+ if (0 > rc)
+ rc = -1;
+
+ return rc;
+ }
+
+ if (numBytesReceived == 0) {
+/*
+ * If there is a partial line and we are at EOF, pretend we saw a '\n'
+ */
+ if (ringqLen(lq) > 0 && (sp->flags & SOCKET_EOF)) {
+ c = '\n';
+ } else {
+ continue;
+ }
+ }
+/*
+ * If a newline is seen, return the data excluding the new line to the
+ * caller. If carriage return is seen, just eat it.
+ */
+ if (c == '\n') {
+ len = ringqLen(lq);
+ if (len > 0) {
+ *buf = ballocAscToUni((char *)lq->servp, len);
+ } else {
+ *buf = NULL;
+ }
+ ringqFlush(lq);
+ return len;
+
+ } else if (c == '\r') {
+ continue;
+ }
+ ringqPutcA(lq, c);
+ }
+ return 0;
+}
+
+
+/******************************************************************************/
+/*
+ * Perform a write to the SSL socket
+ */
+
+int websSSLWrite(websSSL_t *wsp, char_t *buf, int len)
+{
+ int sslBytesSent;
+
+ a_assert(wsp);
+ a_assert(buf);
+
+ if (wsp == NULL) {
+ return -1;
+ }
+
+ sslBytesSent = SSL_send(wsp->mocanaConnectionInstance, buf, len);
+
+ if (0 > sslBytesSent)
+ sslBytesSent = -1;
+
+ return sslBytesSent;
+}
+
+
+/******************************************************************************/
+/*
+ * Return Eof for the underlying socket
+ */
+
+int websSSLEof(websSSL_t *wsp)
+{
+ webs_t wp;
+ int sid;
+
+ a_assert(wsp);
+
+ wp = wsp->wp;
+ sid = wp->sid;
+
+ return socketEof(sid);
+}
+
+
+/******************************************************************************/
+/*
+ * Flush stub for compatibility
+ */
+int websSSLFlush(websSSL_t *wsp)
+{
+ a_assert(wsp);
+
+ /* Autoflush - do nothing */
+ return 0;
+}
+
+
+/******************************************************************************/
+/*
+ * Free SSL resources
+ */
+
+int websSSLFree(websSSL_t *wsp)
+{
+ int status;
+ if (NULL != wsp)
+ {
+ int mci;
+
+ mci = wsp->mocanaConnectionInstance;
+
+ status = SSL_closeConnection(mci);
+
+ if (0 > status)
+ status = -1;
+
+ /* Free memory here.... */
+ bfree(B_L, wsp);
+ }
+
+ return status;
+}
+
+
+/******************************************************************************/
+/*
+ * Stops the SSL system
+ */
+
+void websSSLClose()
+{
+ SSL_shutdown();
+ mocana_SSL_releaseHostKeys(&pCertificate, &pRsaKeyBlob);
+ SSL_releaseTables();
+ MOCANA_freeMocana();
+}
+
+
+/******************************************************************************/
+
+static int
+mocana_SSL_testHostKeys(char** ppCertificate, unsigned int *pCertLength,
+ char** ppRsaKeyBlob, unsigned int *pKeyBlobLength)
+{
+ int status;
+
+ if (0 > (status = MOCANA_readFile(SSL_CERTIFICATE_DER_FILE, ppCertificate, pCertLength)))
+ goto exit;
+
+ status = MOCANA_readFile(SSL_RSA_HOST_KEYS, ppRsaKeyBlob, pKeyBlobLength);
+
+exit:
+ return status;
+}
+
+
+/******************************************************************************/
+
+static int
+mocana_SSL_releaseHostKeys(char **ppCertificate, char **ppRsaKeyBlob)
+{
+ MOCANA_freeReadFile(ppCertificate);
+ MOCANA_freeReadFile(ppRsaKeyBlob);
+
+ return 0;
+}
+
+
+/******************************************************************************/
+
+static int
+mocana_SSL_computeHostKeys(char** ppCertificate, unsigned int *pCertLength,
+ char** ppRsaKeyBlob, unsigned int *pKeyBlobLength)
+{
+ int status;
+
+ *ppCertificate = NULL;
+ *ppRsaKeyBlob = NULL;
+
+ /* check for pre-existing set of host keys */
+ if (0 > (status = mocana_SSL_testHostKeys(ppCertificate, pCertLength, ppRsaKeyBlob, pKeyBlobLength)))
+ {
+#ifdef __ENABLE_ALL_DEBUGGING__
+ printf("mocana_SSL_computeHostKeys: host keys do not exist, computing new key pair.\n");
+#endif
+
+ /* if not, compute new host keys */
+ if (0 > (status = SSL_generateCertificate(ppCertificate, pCertLength, ppRsaKeyBlob, pKeyBlobLength, SSL_EXAMPLE_KEY_SIZE)))
+ goto exit;
+
+ if (0 > (status = MOCANA_writeFile(SSL_CERTIFICATE_DER_FILE, *ppCertificate, *pCertLength)))
+ goto exit;
+
+ status = MOCANA_writeFile(SSL_RSA_HOST_KEYS, *ppRsaKeyBlob, *pKeyBlobLength);
+
+#ifdef __ENABLE_ALL_DEBUGGING__
+ printf("mocana_SSL_computeHostKeys: host key computation completed.\n");
+#endif
+ }
+
+exit:
+ if (0 > status)
+ SSL_freeCertificate(ppCertificate, ppRsaKeyBlob);
+
+ return status;
+}
+
+
+/******************************************************************************/
+
+#endif
diff --git a/cleopatre/application/spidgoahead/page.c b/cleopatre/application/spidgoahead/page.c
new file mode 100644
index 0000000000..27a3d77f00
--- /dev/null
+++ b/cleopatre/application/spidgoahead/page.c
@@ -0,0 +1,143 @@
+/*
+ * Page.c -- Support for page retrieval.
+ *
+ * Copyright (c) GoAhead Software Inc., 1995-2000. All Rights Reserved.
+ *
+ * See the file "license.txt" for usage and redistribution license requirements
+ *
+ * $Id: page.c,v 1.3 2002/10/24 14:44:50 bporter Exp $
+ */
+
+/******************************** Description *********************************/
+
+/*
+ * This module provides page retrieval handling. It provides support for
+ * reading web pages from file systems and has expansion for ROMed web
+ * pages.
+ */
+
+/********************************* Includes ***********************************/
+
+#include "wsIntrn.h"
+
+/*********************************** Code *************************************/
+/*
+ * Open a web page. lpath is the local filename. path is the URL path name.
+ */
+
+int websPageOpen(webs_t wp, char_t *lpath, char_t *path, int mode, int perm)
+{
+ a_assert(websValid(wp));
+
+#ifdef WEBS_PAGE_ROM
+ return websRomPageOpen(wp, path, mode, perm);
+#else
+ return (wp->docfd = gopen(lpath, mode, perm));
+#endif /* WEBS_PAGE_ROM */
+}
+
+/******************************************************************************/
+/*
+ * Close a web page
+ */
+
+void websPageClose(webs_t wp)
+{
+ a_assert(websValid(wp));
+
+#ifdef WEBS_PAGE_ROM
+ websRomPageClose(wp->docfd);
+#else
+ if (wp->docfd >= 0) {
+ close(wp->docfd);
+ wp->docfd = -1;
+ }
+#endif
+}
+
+/******************************************************************************/
+/*
+ * Stat a web page lpath is the local filename. path is the URL path name.
+ */
+
+int websPageStat(webs_t wp, char_t *lpath, char_t *path, websStatType* sbuf)
+{
+#ifdef WEBS_PAGE_ROM
+ return websRomPageStat(path, sbuf);
+#else
+ gstat_t s;
+
+ if (gstat(lpath, &s) < 0) {
+ return -1;
+ }
+ sbuf->size = s.st_size;
+ sbuf->mtime = s.st_mtime;
+ sbuf->isDir = s.st_mode & S_IFDIR;
+ return 0;
+#endif
+}
+
+/******************************************************************************/
+/*
+ * Is this file a directory?
+ */
+
+int websPageIsDirectory(char_t *lpath)
+{
+#ifdef WEBS_PAGE_ROM
+ websStatType sbuf;
+
+ if (websRomPageStat(lpath, &sbuf) >= 0) {
+ return(sbuf.isDir);
+ } else {
+ return 0;
+ }
+#else
+ gstat_t sbuf;
+
+ if (gstat(lpath, &sbuf) >= 0) {
+ return(sbuf.st_mode & S_IFDIR);
+ } else {
+ return 0;
+ }
+#endif
+}
+
+
+/******************************************************************************/
+/*
+ * Read a web page. Returns the number of _bytes_ read.
+ * len is the size of buf, in bytes.
+ */
+
+int websPageReadData(webs_t wp, char *buf, int nBytes)
+{
+
+#ifdef WEBS_PAGE_ROM
+ a_assert(websValid(wp));
+ return websRomPageReadData(wp, buf, nBytes);
+#else
+ a_assert(websValid(wp));
+ return read(wp->docfd, buf, nBytes);
+#endif
+}
+
+/******************************************************************************/
+/*
+ * Move file pointer offset bytes.
+ */
+
+void websPageSeek(webs_t wp, long offset)
+{
+ a_assert(websValid(wp));
+
+#ifdef WEBS_PAGE_ROM
+ websRomPageSeek(wp, offset, SEEK_CUR);
+#else
+ lseek(wp->docfd, offset, SEEK_CUR);
+#endif
+}
+
+/******************************************************************************/
+
+
diff --git a/cleopatre/application/spidgoahead/readme.txt b/cleopatre/application/spidgoahead/readme.txt
new file mode 100644
index 0000000000..3c705b88ba
--- /dev/null
+++ b/cleopatre/application/spidgoahead/readme.txt
@@ -0,0 +1,3 @@
+For current WebServer startup instructions and other information
+specific to Release 2.1, please refer to the release.htm file
+(Release Notes).
diff --git a/cleopatre/application/spidgoahead/release.htm b/cleopatre/application/spidgoahead/release.htm
new file mode 100644
index 0000000000..775616fe8d
--- /dev/null
+++ b/cleopatre/application/spidgoahead/release.htm
@@ -0,0 +1,637 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.3.0: http://docutils.sourceforge.net/" />
+<title>GoAhead WebServer 2.1.8 Release Notes</title>
+<link rel="stylesheet" href="default.css" type="text/css" />
+</head>
+<body>
+<div class="document" id="goahead-webserver-2-1-8-release-notes">
+<h1 class="title">GoAhead WebServer 2.1.8 Release Notes</h1>
+<!-- NOTES: -->
+<!-- This document is maintained using the reStructuredText markup system. -->
+<!-- You may download this from <http://docutils.sf.net>. Also note that running -->
+<!-- the docutils code requires that a version of Python version 2.1 or later -->
+<!-- be installed on the machine. Since the GoAhead release procedure itself -->
+<!-- runs in Python, this should not be a problem. -->
+<!-- -->
+<!-- To add new entries to the release notes, follow the markup shown below -->
+<!-- (releases should be underlined with a row of '=' characters, each item -->
+<!-- noted within a release should be underlined with '-' characters. -->
+<div class="contents topic" id="contents">
+<p class="topic-title"><a name="contents">Contents</a></p>
+<ul class="simple">
+<li><a class="reference" href="#id1" id="id2" name="id2">GoAhead WebServer 2.1.8 Release Notes</a><ul>
+<li><a class="reference" href="#problems-with-unicode-build" id="id3" name="id3">Problems with Unicode build</a></li>
+<li><a class="reference" href="#modified-for-windows-ce-net" id="id4" name="id4">Modified for Windows CE .NET</a></li>
+<li><a class="reference" href="#bug-with-urls-like-asp" id="id5" name="id5">Bug with URLs like &quot;&lt;...&gt;.asp/&quot;</a></li>
+</ul>
+</li>
+<li><a class="reference" href="#goahead-webserver-2-1-7-release-notes" id="id6" name="id6">GoAhead WebServer 2.1.7 Release Notes</a><ul>
+<li><a class="reference" href="#added-support-for-the-mocana-ssl-toolkit" id="id7" name="id7">Added support for the Mocana SSL Toolkit</a></li>
+<li><a class="reference" href="#changes-to-dbsearchstring" id="id8" name="id8">Changes to <tt class="literal"><span class="pre">dbSearchString()</span></tt></a></li>
+<li><a class="reference" href="#use-memcpy-when-converting-to-from-unicode" id="id9" name="id9">Use <tt class="literal"><span class="pre">memcpy()</span></tt> when converting to/from Unicode</a></li>
+<li><a class="reference" href="#bug-when-using-utf-8-encoded-text-inside-asp-ejscript-blocks" id="id10" name="id10">Bug when using UTF-8 encoded text inside ASP/Ejscript blocks</a></li>
+<li><a class="reference" href="#wrong-error-code-on-invalid-password" id="id11" name="id11">Wrong error code on invalid password</a></li>
+<li><a class="reference" href="#windows-ce-net" id="id12" name="id12">Windows CE .NET</a></li>
+<li><a class="reference" href="#lynx-makefile" id="id13" name="id13">LYNX <tt class="literal"><span class="pre">Makefile</span></tt></a></li>
+</ul>
+</li>
+<li><a class="reference" href="#goahead-webserver-2-1-6-release-notes" id="id14" name="id14">GoAhead WebServer 2.1.6 Release Notes</a><ul>
+<li><a class="reference" href="#null-pointer-crash-in-webssafeurl" id="id15" name="id15"><tt class="literal"><span class="pre">NULL</span></tt> pointer crash in <tt class="literal"><span class="pre">websSafeUrl()</span></tt></a></li>
+</ul>
+</li>
+<li><a class="reference" href="#goahead-webserver-2-1-5-release-notes" id="id16" name="id16">GoAhead WebServer 2.1.5 Release Notes</a><ul>
+<li><a class="reference" href="#bopen-failure-mode" id="id17" name="id17"><tt class="literal"><span class="pre">bopen()</span></tt> failure mode</a></li>
+<li><a class="reference" href="#windows-95-98-me-aux-denial-of-service" id="id18" name="id18">Windows 95/98/ME <tt class="literal"><span class="pre">AUX</span></tt> Denial of Service</a></li>
+<li><a class="reference" href="#cross-site-scripting-exploit" id="id19" name="id19">404 Cross-site Scripting Exploit</a></li>
+<li><a class="reference" href="#long-url-overflow-crash" id="id20" name="id20">Long URL Overflow Crash</a></li>
+<li><a class="reference" href="#incorrect-error-code-in-security-c" id="id21" name="id21">Incorrect Error Code in <tt class="literal"><span class="pre">security.c</span></tt></a></li>
+<li><a class="reference" href="#pragma-code-for-risc-architectures" id="id22" name="id22">Pragma Code for RISC Architectures</a></li>
+</ul>
+</li>
+<li><a class="reference" href="#goahead-webserver-2-1-4-release-notes" id="id23" name="id23">GoAhead® WebServer 2.1.4 Release Notes</a><ul>
+<li><a class="reference" href="#fixed-vulnerability-to-malicious-code-in-webs-c" id="id24" name="id24">Fixed vulnerability to malicious code in <tt class="literal"><span class="pre">webs.c</span></tt></a></li>
+<li><a class="reference" href="#https-bug-in-security-handler" id="id25" name="id25">https:// bug in security handler</a></li>
+<li><a class="reference" href="#fixed-vulnerability-to-malicious-code-in-sockgen-c" id="id26" name="id26">Fixed vulnerability to malicious code in sockGen.c</a></li>
+</ul>
+</li>
+<li><a class="reference" href="#bug-fixes-for-version-2-1-3" id="id27" name="id27">Bug Fixes for Version 2.1.3</a><ul>
+<li><a class="reference" href="#directory-traversal-exploit" id="id28" name="id28">Directory Traversal Exploit</a></li>
+<li><a class="reference" href="#mime-type-for-external-javascript-files" id="id29" name="id29">MIME type for external JavaScript files</a></li>
+<li><a class="reference" href="#bug-in-if-modified-since-parsing" id="id30" name="id30">Bug in If-Modified-Since parsing</a></li>
+</ul>
+</li>
+<li><a class="reference" href="#bug-fixes-for-version-2-1-2" id="id31" name="id31">Bug Fixes for Version 2.1.2</a><ul>
+<li><a class="reference" href="#ejscript-error-messages" id="id32" name="id32">Ejscript Error Messages</a></li>
+<li><a class="reference" href="#security-handler-response-codes" id="id33" name="id33">Security Handler Response Codes</a></li>
+<li><a class="reference" href="#security-handler-memory-leak" id="id34" name="id34">Security Handler Memory Leak</a></li>
+<li><a class="reference" href="#ejscript-write-corruption" id="id35" name="id35">Ejscript Write Corruption</a></li>
+<li><a class="reference" href="#error-in-dsnprintf-x-format" id="id36" name="id36">Error in dsnprintf(): &quot;%X&quot; format</a></li>
+<li><a class="reference" href="#bug018565-re-fixed" id="id37" name="id37">BUG018565 Re-fixed</a></li>
+<li><a class="reference" href="#potential-error-in-error" id="id38" name="id38">Potential Error in <tt class="literal"><span class="pre">error()</span></tt></a></li>
+<li><a class="reference" href="#added-support-for-customized-access-control" id="id39" name="id39">Added Support For Customized Access Control</a></li>
+<li><a class="reference" href="#memory-leak-in-websparserequest" id="id40" name="id40">Memory Leak in websParseRequest()</a></li>
+</ul>
+</li>
+<li><a class="reference" href="#macintosh-os-x-support" id="id41" name="id41">Macintosh OS X Support</a></li>
+<li><a class="reference" href="#bug-fixes-for-version-2-1-1" id="id42" name="id42">Bug Fixes for Version 2.1.1</a><ul>
+<li><a class="reference" href="#intermittent-access-error-for-cgi-scripts-bug01937" id="id43" name="id43">Intermittent Access Error for CGI Scripts (BUG01937)</a></li>
+<li><a class="reference" href="#cpu-utilization-hangs-at-100-on-a-socket-disconnect-bug01865" id="id44" name="id44">CPU Utilization Hangs at 100% on a Socket Disconnect (BUG01865)</a></li>
+<li><a class="reference" href="#security-features-can-be-bypassed-by-adding-an-extra-slash-in-the-url-bug01518" id="id45" name="id45">Security Features can be Bypassed by Adding an Extra Slash in the URL (BUG01518)</a></li>
+<li><a class="reference" href="#call-to-webssetvar-causes-a-crash-bug01938" id="id46" name="id46">Call to <tt class="literal"><span class="pre">websSetVar</span></tt> causes a crash (BUG01938)</a></li>
+<li><a class="reference" href="#remove-stray-semicolon-in-emfdb-c-bug01820" id="id47" name="id47">Remove stray semicolon in <tt class="literal"><span class="pre">emfdb.c</span></tt> (BUG01820)</a></li>
+</ul>
+</li>
+<li><a class="reference" href="#novell-netware-support" id="id48" name="id48">Novell Netware Support</a></li>
+<li><a class="reference" href="#copyright-information" id="id49" name="id49">Copyright Information</a></li>
+</ul>
+</div>
+<div class="section" id="id1">
+<h1><a class="toc-backref" href="#id2" name="id1">GoAhead WebServer 2.1.8 Release Notes</a></h1>
+<dl>
+<dt>Release Date:</dt>
+<dd>02 Dec 2003</dd>
+</dl>
+<div class="section" id="problems-with-unicode-build">
+<h2><a class="toc-backref" href="#id3" name="problems-with-unicode-build">Problems with Unicode build</a></h2>
+<dl>
+<dt>Description:</dt>
+<dd>Missing T() caused trouble in Unicode build.</dd>
+<dt>Fix:</dt>
+<dd>Added T() macros.</dd>
+</dl>
+</div>
+<div class="section" id="modified-for-windows-ce-net">
+<h2><a class="toc-backref" href="#id4" name="modified-for-windows-ce-net">Modified for Windows CE .NET</a></h2>
+<dl>
+<dt>Description:</dt>
+<dd>Modified to work with Windows CE .NET and eMbedded Visual C++ 4.</dd>
+</dl>
+</div>
+<div class="section" id="bug-with-urls-like-asp">
+<h2><a class="toc-backref" href="#id5" name="bug-with-urls-like-asp">Bug with URLs like &quot;&lt;...&gt;.asp/&quot;</a></h2>
+<dl>
+<dt>Description:</dt>
+<dd>URLs ending in &quot;.asp/&quot;, &quot;.asp\&quot;, &quot;.as%70&quot; and other variants made the
+WebServer serve Ejscript source code.</dd>
+<dt>Fix: </dt>
+<dd>Added code to ignore these differences.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="goahead-webserver-2-1-7-release-notes">
+<h1><a class="toc-backref" href="#id6" name="goahead-webserver-2-1-7-release-notes">GoAhead WebServer 2.1.7 Release Notes</a></h1>
+<dl>
+<dt>Release Date:</dt>
+<dd>01 Oct 2003</dd>
+</dl>
+<div class="section" id="added-support-for-the-mocana-ssl-toolkit">
+<h2><a class="toc-backref" href="#id7" name="added-support-for-the-mocana-ssl-toolkit">Added support for the Mocana SSL Toolkit</a></h2>
+<dl>
+<dt>Description:</dt>
+<dd>Added support for Mocana Corporation's embedded SSL server</dd>
+</dl>
+</div>
+<div class="section" id="changes-to-dbsearchstring">
+<h2><a class="toc-backref" href="#id8" name="changes-to-dbsearchstring">Changes to <tt class="literal"><span class="pre">dbSearchString()</span></tt></a></h2>
+<p>Description:</p>
+<blockquote>
+Pass <tt class="literal"><span class="pre">DB_CASE_INSENSITIVE</span></tt> as the &quot;flags&quot; argument to
+dbSearchString() to force a case-insensitive search.</blockquote>
+</div>
+<div class="section" id="use-memcpy-when-converting-to-from-unicode">
+<h2><a class="toc-backref" href="#id9" name="use-memcpy-when-converting-to-from-unicode">Use <tt class="literal"><span class="pre">memcpy()</span></tt> when converting to/from Unicode</a></h2>
+<dl>
+<dt>Description:</dt>
+<dd>The functions <tt class="literal"><span class="pre">uniToAsc()</span></tt> and <tt class="literal"><span class="pre">ascToUni()</span></tt> were using the relatively
+slow <tt class="literal"><span class="pre">strncpy()</span></tt> runtime library function.</dd>
+<dt>Fix:</dt>
+<dd>A new preprocessor macro <tt class="literal"><span class="pre">kUseMemcopy</span></tt> was added to <tt class="literal"><span class="pre">misc.c</span></tt>, and both
+functions were recoded to use <tt class="literal"><span class="pre">memcpy()</span></tt> when that macro is defined.
+Remove the definition to revert to the earlier code, using <tt class="literal"><span class="pre">strncpy()</span></tt>.</dd>
+</dl>
+</div>
+<div class="section" id="bug-when-using-utf-8-encoded-text-inside-asp-ejscript-blocks">
+<h2><a class="toc-backref" href="#id10" name="bug-when-using-utf-8-encoded-text-inside-asp-ejscript-blocks">Bug when using UTF-8 encoded text inside ASP/Ejscript blocks</a></h2>
+<dl>
+<dt>Description:</dt>
+<dd>When reading ASP code containing UTF-8 encoded source text, any characters
+encountered having a value &gt; 127 were treated as an error by the parser.</dd>
+<dt>Fix:</dt>
+<dd>The ring queue code in <tt class="literal"><span class="pre">ringq.c</span></tt> was modified so that it can correctly
+handle any character it encounters by casting to unsigned char before
+casting back to signed integer.</dd>
+</dl>
+</div>
+<div class="section" id="wrong-error-code-on-invalid-password">
+<h2><a class="toc-backref" href="#id11" name="wrong-error-code-on-invalid-password">Wrong error code on invalid password</a></h2>
+<dl>
+<dt>Description:</dt>
+<dd>The WebServer was sending back an inappropriate error code when it received
+an incorrect password.</dd>
+<dt>Fix:</dt>
+<dd>Changed error code returned from <tt class="literal"><span class="pre">405</span></tt> to <tt class="literal"><span class="pre">401</span></tt>. (Thanks to Jay
+Chalfant).</dd>
+</dl>
+</div>
+<div class="section" id="windows-ce-net">
+<h2><a class="toc-backref" href="#id12" name="windows-ce-net">Windows CE .NET</a></h2>
+<dl>
+<dt>Description:</dt>
+<dd>Removed &quot;compatibility functions&quot; that are directly supported in Windows
+CE .NET.</dd>
+</dl>
+</div>
+<div class="section" id="lynx-makefile">
+<h2><a class="toc-backref" href="#id13" name="lynx-makefile">LYNX <tt class="literal"><span class="pre">Makefile</span></tt></a></h2>
+<dl>
+<dt>Description:</dt>
+<dd>Corrected problem in LYNX Makefile that prevented OpenSSL from being linked
+in correctly.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="goahead-webserver-2-1-6-release-notes">
+<h1><a class="toc-backref" href="#id14" name="goahead-webserver-2-1-6-release-notes">GoAhead WebServer 2.1.6 Release Notes</a></h1>
+<dl>
+<dt>Release Date:</dt>
+<dd>25 Mar 2003</dd>
+</dl>
+<div class="section" id="null-pointer-crash-in-webssafeurl">
+<h2><a class="toc-backref" href="#id15" name="null-pointer-crash-in-webssafeurl"><tt class="literal"><span class="pre">NULL</span></tt> pointer crash in <tt class="literal"><span class="pre">websSafeUrl()</span></tt></a></h2>
+<dl>
+<dt>Description:</dt>
+<dd>Passing a NULL pointer into the <tt class="literal"><span class="pre">websSafeUrl()</span></tt> function (as would happen
+when the server is processing an invalid URL) crashes the server.</dd>
+<dt>Fix:</dt>
+<dd>Code modified to check for NULL pointer before performing any string
+operations.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="goahead-webserver-2-1-5-release-notes">
+<h1><a class="toc-backref" href="#id16" name="goahead-webserver-2-1-5-release-notes">GoAhead WebServer 2.1.5 Release Notes</a></h1>
+<dl>
+<dt>Release Date:</dt>
+<dd>19 Mar 2003</dd>
+</dl>
+<div class="section" id="bopen-failure-mode">
+<h2><a class="toc-backref" href="#id17" name="bopen-failure-mode"><tt class="literal"><span class="pre">bopen()</span></tt> failure mode</a></h2>
+<dl>
+<dt>Description:</dt>
+<dd>New failure behavior for <tt class="literal"><span class="pre">bopen()</span></tt> (see <tt class="literal"><span class="pre">balloc.c</span></tt>)</dd>
+<dt>Fix:</dt>
+<dd>Changed failure behavior of the bopen() function (suggested by Simon
+Byholm). If the malloc() request fails, we reset the bopenCount
+variable, and thus allow the client code to reattempt the open with
+a smaller memory request.</dd>
+</dl>
+</div>
+<div class="section" id="windows-95-98-me-aux-denial-of-service">
+<h2><a class="toc-backref" href="#id18" name="windows-95-98-me-aux-denial-of-service">Windows 95/98/ME <tt class="literal"><span class="pre">AUX</span></tt> Denial of Service</a></h2>
+<dl>
+<dt>Description:</dt>
+<dd><p class="first">When running on Windows 95/98/ME, URLs requested with path components
+matching a set of reserved DOS device names caused the WebServer to crash.</p>
+<p>The names that cause the crash are:</p>
+<pre class="last literal-block">
+aux
+con
+nul
+clock$
+config$
+</pre>
+</dd>
+<dt>Fix:</dt>
+<dd><p class="first">Code added to the <tt class="literal"><span class="pre">websValidateUrl()</span></tt> function to check the contents of
+the parsed URL against the list of prohibited names. If any of those names
+are present in the parsed URL, the URL is rejected as invalid.</p>
+<p>The code that checks for these prohibited pathname components checks for
+them in the form of either:</p>
+<pre class="literal-block">
+http://&lt;&lt;server address&gt;&gt;/aux
+</pre>
+<p>or:</p>
+<pre class="literal-block">
+http://&lt;&lt;server address&gt;&gt;/aux:
+</pre>
+<p class="last">where any non-alphanumeric character following one of the prohibited names
+will cause the URL request to be rejected.</p>
+</dd>
+</dl>
+</div>
+<div class="section" id="cross-site-scripting-exploit">
+<h2><a class="toc-backref" href="#id19" name="cross-site-scripting-exploit">404 Cross-site Scripting Exploit</a></h2>
+<dl>
+<dt>Description:</dt>
+<dd>Malicious users could request an invalid URL containing embedded JavaScript
+code that would be executed in the user's browser.</dd>
+<dt>Fix:</dt>
+<dd>404 (and other error messages) returned by the WebServer no longer display
+the invalid URL.</dd>
+</dl>
+</div>
+<div class="section" id="long-url-overflow-crash">
+<h2><a class="toc-backref" href="#id20" name="long-url-overflow-crash">Long URL Overflow Crash</a></h2>
+<dl>
+<dt>Description:</dt>
+<dd>URLs containing more than 64 levels of path components caused the WebServer
+to crash, entering a buffer overflow condition.</dd>
+<dt>Fix:</dt>
+<dd>The WebServer now keeps track of the depth as it validates the URL. URLs
+that are too long are now rejected with an error message.</dd>
+</dl>
+</div>
+<div class="section" id="incorrect-error-code-in-security-c">
+<h2><a class="toc-backref" href="#id21" name="incorrect-error-code-in-security-c">Incorrect Error Code in <tt class="literal"><span class="pre">security.c</span></tt></a></h2>
+<dl>
+<dt>Description:</dt>
+<dd>Pages assigned an access level of <tt class="literal"><span class="pre">AM_NONE</span></tt> should return an error code
+of 404 instead of 400 when an attempt it made to access them.</dd>
+<dt>Fix:</dt>
+<dd>Error code corrected.</dd>
+</dl>
+</div>
+<div class="section" id="pragma-code-for-risc-architectures">
+<h2><a class="toc-backref" href="#id22" name="pragma-code-for-risc-architectures">Pragma Code for RISC Architectures</a></h2>
+<dl>
+<dt>Description:</dt>
+<dd>A pragma was not set correctly when compiling for SPARC machines.</dd>
+<dt>Fix:</dt>
+<dd><p class="first">Code added to <tt class="literal"><span class="pre">uemf.h</span></tt>:</p>
+<pre class="last literal-block">
+#ifdef sparc
+# define __NO_PACK
+#endif /* sparc */
+</pre>
+</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="goahead-webserver-2-1-4-release-notes">
+<h1><a class="toc-backref" href="#id23" name="goahead-webserver-2-1-4-release-notes">GoAhead® WebServer 2.1.4 Release Notes</a></h1>
+<dl>
+<dt>Release Date:</dt>
+<dd>17 Oct 2002</dd>
+</dl>
+<div class="section" id="fixed-vulnerability-to-malicious-code-in-webs-c">
+<h2><a class="toc-backref" href="#id24" name="fixed-vulnerability-to-malicious-code-in-webs-c">Fixed vulnerability to malicious code in <tt class="literal"><span class="pre">webs.c</span></tt></a></h2>
+<dl>
+<dt>Summary:</dt>
+<dd>There were two vulnerabilities in <tt class="literal"><span class="pre">webs.c</span></tt>. Sending a POST message
+with a content-length but no data resulted in an attempt to perform
+a <tt class="literal"><span class="pre">strlen()</span></tt> on a NULL pointer (thanks to Richard Cullen). Also,
+sending an HTTP POST message with a Content-Length header indicating
+that the length of the posted data was less than zero would crash
+the server (thanks to Auriemma Luigi).</dd>
+<dt>Fix:</dt>
+<dd>Code errors corrected.</dd>
+</dl>
+</div>
+<div class="section" id="https-bug-in-security-handler">
+<h2><a class="toc-backref" href="#id25" name="https-bug-in-security-handler"><a class="reference" href="https://">https://</a> bug in security handler</a></h2>
+<dl>
+<dt>Summary:</dt>
+<dd>The <tt class="literal"><span class="pre">websSecurityHandler()</span></tt> function was performing a logical
+OR: (<tt class="literal"><span class="pre">flags</span> <span class="pre">|</span> <span class="pre">WEBS_SECURE</span></tt>) instead of a logical AND (<tt class="literal"><span class="pre">flags</span> <span class="pre">&amp;</span>
+<span class="pre">WEBS_SECURE</span></tt>), leading to incorrect results (thanks to &quot;Dhanwa T&quot;).</dd>
+<dt>Fix:</dt>
+<dd>Code errors corrected.</dd>
+</dl>
+</div>
+<div class="section" id="fixed-vulnerability-to-malicious-code-in-sockgen-c">
+<h2><a class="toc-backref" href="#id26" name="fixed-vulnerability-to-malicious-code-in-sockgen-c">Fixed vulnerability to malicious code in sockGen.c</a></h2>
+<dl>
+<dt>Summary:</dt>
+<dd>At line 613 of <tt class="literal"><span class="pre">sockGen.c</span></tt>, the return value of the function
+<tt class="literal"><span class="pre">socketInputBuffered()</span></tt> was being discarded, leading to incorrect
+behavior in some cases. (Thanks to Richard Cullen)</dd>
+<dt>Fix:</dt>
+<dd>Code errors corrected.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="bug-fixes-for-version-2-1-3">
+<h1><a class="toc-backref" href="#id27" name="bug-fixes-for-version-2-1-3">Bug Fixes for Version 2.1.3</a></h1>
+<div class="section" id="directory-traversal-exploit">
+<h2><a class="toc-backref" href="#id28" name="directory-traversal-exploit">Directory Traversal Exploit</a></h2>
+<dl>
+<dt>Summary:</dt>
+<dd>Several sources have reported that requesting an URL with URL-encoded
+backslashes (%5C) allow accessing files located outside the server's
+designated web root. This should only have been possible on Windows, as
+URL-encoded forward slashes (%2F) were already being handled correctly.</dd>
+<dt>Fix:</dt>
+<dd>Modified <tt class="literal"><span class="pre">default.c</span></tt> so that any backslash characters created as
+part of decoding the URL string are converted (in place) to forward
+slashes. The pre-existing directory-traversal detection code then
+rejects the bad URL as expected.</dd>
+</dl>
+</div>
+<div class="section" id="mime-type-for-external-javascript-files">
+<h2><a class="toc-backref" href="#id29" name="mime-type-for-external-javascript-files">MIME type for external JavaScript files</a></h2>
+<dl>
+<dt>Summary:</dt>
+<dd>The WebServer would not serve external JavaScript files (<tt class="literal"><span class="pre">*.js</span></tt>)
+correctly.</dd>
+<dt>Fix:</dt>
+<dd>modified <tt class="literal"><span class="pre">mime.c</span></tt> to associate <tt class="literal"><span class="pre">.js</span></tt> files with the MIME
+type <tt class="literal"><span class="pre">application/x-javascript</span></tt>.</dd>
+</dl>
+</div>
+<div class="section" id="bug-in-if-modified-since-parsing">
+<h2><a class="toc-backref" href="#id30" name="bug-in-if-modified-since-parsing">Bug in If-Modified-Since parsing</a></h2>
+<dl>
+<dt>Summary:</dt>
+<dd>There was an off-by-one error when converting from Gregorian date to
+time_t.</dd>
+<dt>Fix:</dt>
+<dd>modified function <tt class="literal"><span class="pre">dateToTimet</span></tt> in file <tt class="literal"><span class="pre">webs.c</span></tt>. The <tt class="literal"><span class="pre">month</span></tt>
+parameter is numbered from 0 (Jan == 0), but <tt class="literal"><span class="pre">FixedFromGregorian()</span></tt>
+takes months numbered from 1 (January == 1). We need to add 1 to
+the month before calling FixedFromGregorian.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="bug-fixes-for-version-2-1-2">
+<h1><a class="toc-backref" href="#id31" name="bug-fixes-for-version-2-1-2">Bug Fixes for Version 2.1.2</a></h1>
+<div class="section" id="ejscript-error-messages">
+<h2><a class="toc-backref" href="#id32" name="ejscript-error-messages">Ejscript Error Messages</a></h2>
+<p>Summary:</p>
+<blockquote>
+Changed ejEval() function so it displays in the browser the error string that is
+reported by the Ejscript interpreter (old code discarded it completely).</blockquote>
+<dl>
+<dt>Fix:</dt>
+<dd>modified <tt class="literal"><span class="pre">websuemf.c</span></tt></dd>
+</dl>
+</div>
+<div class="section" id="security-handler-response-codes">
+<h2><a class="toc-backref" href="#id33" name="security-handler-response-codes">Security Handler Response Codes</a></h2>
+<dl>
+<dt>Summary:</dt>
+<dd>Several places in the <tt class="literal"><span class="pre">websSecurityHandler()</span></tt> function were
+returning error code 200 (success) instead of the correct 400-level error code.</dd>
+<dt>Fix:</dt>
+<dd>Corrected error codes in <tt class="literal"><span class="pre">security.c</span></tt></dd>
+</dl>
+</div>
+<div class="section" id="security-handler-memory-leak">
+<h2><a class="toc-backref" href="#id34" name="security-handler-memory-leak">Security Handler Memory Leak</a></h2>
+<dl>
+<dt>Summary:</dt>
+<dd>In <tt class="literal"><span class="pre">websSecurityHandler()</span></tt>, if the WebServer was compiled with
+<tt class="literal"><span class="pre">WEBS_SSL_SUPPORT</span></tt> enabled, there was a return path that leaked
+memory.</dd>
+<dt>Fix:</dt>
+<dd>Added call to <tt class="literal"><span class="pre">bfree(B_L,</span> <span class="pre">accessLimit);</span></tt></dd>
+</dl>
+</div>
+<div class="section" id="ejscript-write-corruption">
+<h2><a class="toc-backref" href="#id35" name="ejscript-write-corruption">Ejscript Write Corruption</a></h2>
+<dl>
+<dt>Summary:</dt>
+<dd>Very long text strings passed to the Ejscript <tt class="literal"><span class="pre">write()</span></tt> function
+were being corrupted before being displayed.</dd>
+<dt>Fix:</dt>
+<dd>Commented out a <tt class="literal"><span class="pre">trace()</span></tt> statement in <tt class="literal"><span class="pre">ejGetLexToken()</span></tt> that appears to have been the
+culprit. The value of <tt class="literal"><span class="pre">ep-&gt;token</span></tt> was being corrupted somewhere
+in the trace.</dd>
+</dl>
+</div>
+<div class="section" id="error-in-dsnprintf-x-format">
+<h2><a class="toc-backref" href="#id36" name="error-in-dsnprintf-x-format">Error in dsnprintf(): &quot;%X&quot; format</a></h2>
+<dl>
+<dt>Summary:</dt>
+<dd>The &quot;%X&quot; format specifier did not correctly cause the function to output
+uppercase hexadecimal digits.</dd>
+<dt>Fix:</dt>
+<dd>Added support for the &quot;%X&quot; format specifier.</dd>
+</dl>
+</div>
+<div class="section" id="bug018565-re-fixed">
+<h2><a class="toc-backref" href="#id37" name="bug018565-re-fixed">BUG018565 Re-fixed</a></h2>
+<dl>
+<dt>Summary:</dt>
+<dd>See 2.1.1 release notes (below). This bug fix did not make it into the
+2.1.1 release.</dd>
+<dt>Fix:</dt>
+<dd>Corrected code in <tt class="literal"><span class="pre">sockGen.c</span></tt>.</dd>
+</dl>
+</div>
+<div class="section" id="potential-error-in-error">
+<h2><a class="toc-backref" href="#id38" name="potential-error-in-error">Potential Error in <tt class="literal"><span class="pre">error()</span></tt></a></h2>
+<dl>
+<dt>Summary:</dt>
+<dd>If <tt class="literal"><span class="pre">error()</span></tt> is called where the etype parameter is not E_LOG, E_ASSERT,
+or E_USER, the call to <tt class="literal"><span class="pre">bfreeSafe(B_L,</span> <span class="pre">buf)</span></tt> now at line 71 will fail,
+because 'buf' is randomly initialized.</dd>
+<dt>Fix:</dt>
+<dd>We format a message saying that this is an unknown message type,
+and in doing so give buf a valid value.</dd>
+</dl>
+</div>
+<div class="section" id="added-support-for-customized-access-control">
+<h2><a class="toc-backref" href="#id39" name="added-support-for-customized-access-control">Added Support For Customized Access Control</a></h2>
+<dl>
+<dt>Summary:</dt>
+<dd>Several users requested a method to control URL access in a hierarchical
+fashion. For example, users assigned to an 'admin' group might have
+access to all URLs on the WebServer, and users assigned to the group
+'technician' would have access to a smaller set of pages, and users
+assigned to the group 'users' would perhaps only have access to a set of
+read-only pages. The built-in WebServer access control system only
+allows users to access URLs that exactly match their group membership.</dd>
+<dt>Fix:</dt>
+<dd>Added call to a user-supplied function `` bool_t dmfCanAccess(const
+char_t* userGroup, const char_t* group)``. This function is called
+from inside <tt class="literal"><span class="pre">umUserCanAccessURL()</span></tt> if the macro
+<tt class="literal"><span class="pre">qHierarchicalAccess</span></tt> is defined.</dd>
+</dl>
+</div>
+<div class="section" id="memory-leak-in-websparserequest">
+<h2><a class="toc-backref" href="#id40" name="memory-leak-in-websparserequest">Memory Leak in websParseRequest()</a></h2>
+<dl>
+<dt>Summary:</dt>
+<dd>Memory was being leaked in the code now at line 907 of <tt class="literal"><span class="pre">webs.c</span></tt>.</dd>
+<dt>Fix:</dt>
+<dd>Added a call to <tt class="literal"><span class="pre">bfree()</span></tt>.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="macintosh-os-x-support">
+<h1><a class="toc-backref" href="#id41" name="macintosh-os-x-support">Macintosh OS X Support</a></h1>
+<p>A separate Mac OS X platform directory has been added, and this platform
+has been tested on version 10.1.5 of the operating system.
+To build the WebServer on OS X:</p>
+<pre class="literal-block">
+cd MACOSX
+make
+</pre>
+<p>Note that like all *nix operating systems, only the root user has
+permission to open a server port with a lower number than 1024. You must
+run the WebServer as root to serve pages over port 80, or change the server
+port (in <tt class="literal"><span class="pre">main.c</span></tt>) to a different port (typically port 8080).</p>
+</div>
+<div class="section" id="bug-fixes-for-version-2-1-1">
+<h1><a class="toc-backref" href="#id42" name="bug-fixes-for-version-2-1-1">Bug Fixes for Version 2.1.1</a></h1>
+<div class="section" id="intermittent-access-error-for-cgi-scripts-bug01937">
+<h2><a class="toc-backref" href="#id43" name="intermittent-access-error-for-cgi-scripts-bug01937">Intermittent Access Error for CGI Scripts (BUG01937)</a></h2>
+<dl>
+<dt>Summary:</dt>
+<dd>Pages were occasionally replaced with the message, <tt class="literal"><span class="pre">Access</span> <span class="pre">Error:</span> <span class="pre">Data</span>
+<span class="pre">follows</span> <span class="pre">when</span> <span class="pre">trying</span> <span class="pre">to</span> <span class="pre">obtain</span> <span class="pre">CGI</span> <span class="pre">generated</span> <span class="pre">no</span> <span class="pre">output</span></tt>.</dd>
+<dt>Fix:</dt>
+<dd>On multiple CPU systems, it is possible for a CGI application to exit before
+its output is flushed to disk. The change for this release locates the code
+that collects the output from the CGI application in a separate routine.
+In addition to calling that routine from within the CGI application processing
+loop, it is also called in a brief loop after the CGI application has exited.
+This extra loop runs for only up to one second while the collected output
+remains empty. If, after 1 second, the output remains empty, the original
+course of action is followed (<tt class="literal"><span class="pre">Access</span> <span class="pre">Error</span></tt> is reported).</dd>
+</dl>
+</div>
+<div class="section" id="cpu-utilization-hangs-at-100-on-a-socket-disconnect-bug01865">
+<h2><a class="toc-backref" href="#id44" name="cpu-utilization-hangs-at-100-on-a-socket-disconnect-bug01865">CPU Utilization Hangs at 100% on a Socket Disconnect (BUG01865)</a></h2>
+<dl>
+<dt>Summary:</dt>
+<dd>This error occurs whenever a user terminates a request before the server
+has had ample time to service it. This can be simulated by quickly hitting
+the refresh button on the browser twice in a row, causing the first request
+to be terminated. The server then enters into a tight loop that utilizes
+all of its time.</dd>
+<dt>Fix:</dt>
+<dd>Always close the socket prior to a disconnect.</dd>
+</dl>
+</div>
+<div class="section" id="security-features-can-be-bypassed-by-adding-an-extra-slash-in-the-url-bug01518">
+<h2><a class="toc-backref" href="#id45" name="security-features-can-be-bypassed-by-adding-an-extra-slash-in-the-url-bug01518">Security Features can be Bypassed by Adding an Extra Slash in the URL (BUG01518)</a></h2>
+<dl>
+<dt>Summary:</dt>
+<dd>By adding an extra slash in a URL, password prompting is bypassed, allowing
+unrestricted access to secured pages.</dd>
+<dt>Fix:</dt>
+<dd>Remove multiple adjacent occurrences of slashes in the URL before passing
+it to the security handler.</dd>
+</dl>
+</div>
+<div class="section" id="call-to-webssetvar-causes-a-crash-bug01938">
+<h2><a class="toc-backref" href="#id46" name="call-to-webssetvar-causes-a-crash-bug01938">Call to <tt class="literal"><span class="pre">websSetVar</span></tt> causes a crash (BUG01938)</a></h2>
+<dl>
+<dt>Summary:</dt>
+<dd>Whenever a request is not completed while being processed by websGetInput(),
+a call to websDone is made, followed by an attempt to process the partial
+request data.</dd>
+<dt>Fix:</dt>
+<dd>Return immediately after closing the socket.</dd>
+</dl>
+</div>
+<div class="section" id="remove-stray-semicolon-in-emfdb-c-bug01820">
+<h2><a class="toc-backref" href="#id47" name="remove-stray-semicolon-in-emfdb-c-bug01820">Remove stray semicolon in <tt class="literal"><span class="pre">emfdb.c</span></tt> (BUG01820)</a></h2>
+<dl>
+<dt>Summary and Fix:</dt>
+<dd>A stray semicolon was removed from this file.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="novell-netware-support">
+<h1><a class="toc-backref" href="#id48" name="novell-netware-support">Novell Netware Support</a></h1>
+<p>With the addition of Novell Netware in this 2.11 release, WebServer now supports these platforms:</p>
+<blockquote>
+<ul class="simple">
+<li>LINUX</li>
+<li>LynxOS</li>
+<li>Novell Netware &lt;/font&gt;4.2, 5.1</li>
+<li>Mac OS X</li>
+<li>UNIX - SCO OpenServer 3.2V5.0.0</li>
+<li>VxWorks 5.3.1</li>
+<li>Windows 2000</li>
+<li>Windows 98</li>
+<li>Windows 95</li>
+<li>Windows NT</li>
+<li>Windows CE</li>
+</ul>
+</blockquote>
+<p>To make a Novell Netware target file (<tt class="literal"><span class="pre">webs.nlm</span></tt>):</p>
+<pre class="literal-block">
+cd NW
+wmake webs.nlm
+load &lt;path&gt;; \webs.nlm
+webs
+</pre>
+<p><strong>Note:</strong> This makefile lacks a valid default rule. In addition, an
+environment variable (QMKVER) controls the amount of debug information
+that is compiled and linked into the nlm file. If this variable is set
+to <tt class="literal"><span class="pre">P</span></tt>, it produces a production version. All other settings
+(or the omission of the variable) results in a debug version. For other
+platforms supported by WebServer, please refer to your WebServer 2.1
+documentation for appropriate instructions.</p>
+</div>
+<div class="section" id="copyright-information">
+<h1><a class="toc-backref" href="#id49" name="copyright-information">Copyright Information</a></h1>
+<dl>
+<dt>Trademarks</dt>
+<dd>GoAhead and GoAhead WebServer are registered trademarks of GoAhead
+Software. All other brand or product names are the trademarks or
+registered trademarks of their respective holders.</dd>
+<dt>Copyright </dt>
+<dd>Copyright © 2000, 2001 GoAhead Software, Inc. All rights reserved.
+Product and technical information in this document is subject to
+change without notice and does not represent a commitment on the part
+of GoAhead Software, Inc.</dd>
+<dt>Copy Restrictions </dt>
+<dd>The software described in this document may be used and copied only
+in accordance with the terms of the accompanying license agreement.</dd>
+<dt>GoAhead Software, Inc.</dt>
+<dd>10900 NE 8th Street Suite 750 Bellevue, WA 98004 +1 ( 425) 453-1900
+www.goahead.com <a class="reference" href="mailto:info&#64;goahead.com">info&#64;goahead.com</a></dd>
+</dl>
+<p>1-53-03</p>
+</div>
+</div>
+</body>
+</html>
diff --git a/cleopatre/application/spidgoahead/release.txt b/cleopatre/application/spidgoahead/release.txt
new file mode 100644
index 0000000000..847eff609c
--- /dev/null
+++ b/cleopatre/application/spidgoahead/release.txt
@@ -0,0 +1,625 @@
+=====================================
+GoAhead WebServer 2.1.8 Release Notes
+=====================================
+
+.. NOTES:
+.. This document is maintained using the reStructuredText markup system.
+.. You may download this from <http://docutils.sf.net>. Also note that running
+.. the docutils code requires that a version of Python version 2.1 or later
+.. be installed on the machine. Since the GoAhead release procedure itself
+.. runs in Python, this should not be a problem.
+..
+.. To add new entries to the release notes, follow the markup shown below
+.. (releases should be underlined with a row of '=' characters, each item
+.. noted within a release should be underlined with '-' characters.
+
+
+.. contents::
+
+GoAhead WebServer 2.1.8 Release Notes
+=====================================
+
+Release Date:
+ 02 Dec 2003
+
+Problems with Unicode build
+----------------------------------------
+
+Description:
+ Missing T() caused trouble in Unicode build.
+
+Fix:
+ Added T() macros.
+
+Modified for Windows CE .NET
+----------------------------------------
+
+Description:
+ Modified to work with Windows CE .NET and eMbedded Visual C++ 4.
+
+Bug with URLs like "<...>.asp/"
+----------------------------------------
+
+Description:
+ URLs ending in ".asp/", ".asp\\", ".as%70" and other variants made the
+ WebServer serve Ejscript source code.
+
+Fix:
+ Added code to ignore these differences.
+
+GoAhead WebServer 2.1.7 Release Notes
+=====================================
+
+Release Date:
+ 01 Oct 2003
+
+Added support for the Mocana SSL Toolkit
+----------------------------------------
+
+Description:
+ Added support for Mocana Corporation's embedded SSL server
+
+Changes to ``dbSearchString()``
+-------------------------------
+
+Description:
+
+ Pass ``DB_CASE_INSENSITIVE`` as the "flags" argument to
+ dbSearchString() to force a case-insensitive search.
+
+
+Use ``memcpy()`` when converting to/from Unicode
+------------------------------------------------
+Description:
+ The functions ``uniToAsc()`` and ``ascToUni()`` were using the relatively
+ slow ``strncpy()`` runtime library function.
+
+Fix:
+ A new preprocessor macro ``kUseMemcopy`` was added to ``misc.c``, and both
+ functions were recoded to use ``memcpy()`` when that macro is defined.
+ Remove the definition to revert to the earlier code, using ``strncpy()``.
+
+
+Bug when using UTF-8 encoded text inside ASP/Ejscript blocks
+---------------------------------------------------------------
+
+Description:
+ When reading ASP code containing UTF-8 encoded source text, any characters
+ encountered having a value > 127 were treated as an error by the parser.
+
+Fix:
+ The ring queue code in ``ringq.c`` was modified so that it can correctly
+ handle any character it encounters by casting to unsigned char before
+ casting back to signed integer.
+
+Wrong error code on invalid password
+------------------------------------
+
+Description:
+ The WebServer was sending back an inappropriate error code when it received
+ an incorrect password.
+
+Fix:
+ Changed error code returned from ``405`` to ``401``. (Thanks to Jay
+ Chalfant).
+
+Windows CE .NET
+-----------------
+
+Description:
+ Removed "compatibility functions" that are directly supported in Windows
+ CE .NET.
+
+LYNX ``Makefile``
+-----------------
+
+Description:
+ Corrected problem in LYNX Makefile that prevented OpenSSL from being linked
+ in correctly.
+
+GoAhead WebServer 2.1.6 Release Notes
+=====================================
+Release Date:
+ 25 Mar 2003
+
+``NULL`` pointer crash in ``websSafeUrl()``
+-------------------------------------------
+
+Description:
+ Passing a NULL pointer into the ``websSafeUrl()`` function (as would happen
+ when the server is processing an invalid URL) crashes the server.
+
+Fix:
+ Code modified to check for NULL pointer before performing any string
+ operations.
+
+
+GoAhead WebServer 2.1.5 Release Notes
+=====================================
+Release Date:
+ 19 Mar 2003
+
+
+
+``bopen()`` failure mode
+------------------------
+
+
+
+Description:
+ New failure behavior for ``bopen()`` (see ``balloc.c``)
+
+Fix:
+ Changed failure behavior of the bopen() function (suggested by Simon
+ Byholm). If the malloc() request fails, we reset the bopenCount
+ variable, and thus allow the client code to reattempt the open with
+ a smaller memory request.
+
+
+Windows 95/98/ME ``AUX`` Denial of Service
+------------------------------------------
+
+
+
+Description:
+ When running on Windows 95/98/ME, URLs requested with path components
+ matching a set of reserved DOS device names caused the WebServer to crash.
+
+ The names that cause the crash are::
+
+ aux
+ con
+ nul
+ clock$
+ config$
+
+
+
+
+Fix:
+ Code added to the ``websValidateUrl()`` function to check the contents of
+ the parsed URL against the list of prohibited names. If any of those names
+ are present in the parsed URL, the URL is rejected as invalid.
+
+ The code that checks for these prohibited pathname components checks for
+ them in the form of either::
+
+ http://<<server address>>/aux
+
+ or::
+
+ http://<<server address>>/aux:
+
+ where any non-alphanumeric character following one of the prohibited names
+ will cause the URL request to be rejected.
+
+
+404 Cross-site Scripting Exploit
+-----------------------------------
+
+
+Description:
+ Malicious users could request an invalid URL containing embedded JavaScript
+ code that would be executed in the user's browser.
+
+Fix:
+ 404 (and other error messages) returned by the WebServer no longer display
+ the invalid URL.
+
+Long URL Overflow Crash
+-----------------------
+
+
+Description:
+ URLs containing more than 64 levels of path components caused the WebServer
+ to crash, entering a buffer overflow condition.
+
+Fix:
+ The WebServer now keeps track of the depth as it validates the URL. URLs
+ that are too long are now rejected with an error message.
+
+Incorrect Error Code in ``security.c``
+--------------------------------------
+
+
+Description:
+ Pages assigned an access level of ``AM_NONE`` should return an error code
+ of 404 instead of 400 when an attempt it made to access them.
+
+Fix:
+ Error code corrected.
+
+Pragma Code for RISC Architectures
+-------------------------------------
+
+
+Description:
+ A pragma was not set correctly when compiling for SPARC machines.
+
+Fix:
+ Code added to ``uemf.h``::
+
+ #ifdef sparc
+ # define __NO_PACK
+ #endif /* sparc */
+
+
+
+
+
+GoAhead® WebServer 2.1.4 Release Notes
+=======================================
+
+Release Date:
+ 17 Oct 2002
+
+
+
+
+Fixed vulnerability to malicious code in ``webs.c``
+---------------------------------------------------
+
+
+
+Summary:
+ There were two vulnerabilities in ``webs.c``. Sending a POST message
+ with a content-length but no data resulted in an attempt to perform
+ a ``strlen()`` on a NULL pointer (thanks to Richard Cullen). Also,
+ sending an HTTP POST message with a Content-Length header indicating
+ that the length of the posted data was less than zero would crash
+ the server (thanks to Auriemma Luigi).
+
+Fix:
+ Code errors corrected.
+
+
+
+https:// bug in security handler
+--------------------------------
+
+
+Summary:
+ The ``websSecurityHandler()`` function was performing a logical
+ OR: (``flags | WEBS_SECURE``) instead of a logical AND (``flags &
+ WEBS_SECURE``), leading to incorrect results (thanks to "Dhanwa T").
+
+Fix:
+ Code errors corrected.
+
+
+
+Fixed vulnerability to malicious code in sockGen.c
+--------------------------------------------------
+
+
+Summary:
+ At line 613 of ``sockGen.c``, the return value of the function
+ ``socketInputBuffered()`` was being discarded, leading to incorrect
+ behavior in some cases. (Thanks to Richard Cullen)
+
+Fix:
+ Code errors corrected.
+
+
+Bug Fixes for Version 2.1.3
+===========================
+
+
+Directory Traversal Exploit
+----------------------------
+
+
+Summary:
+ Several sources have reported that requesting an URL with URL-encoded
+ backslashes (%5C) allow accessing files located outside the server's
+ designated web root. This should only have been possible on Windows, as
+ URL-encoded forward slashes (%2F) were already being handled correctly.
+
+Fix:
+ Modified ``default.c`` so that any backslash characters created as
+ part of decoding the URL string are converted (in place) to forward
+ slashes. The pre-existing directory-traversal detection code then
+ rejects the bad URL as expected.
+
+
+MIME type for external JavaScript files
+----------------------------------------
+
+
+Summary:
+ The WebServer would not serve external JavaScript files (``*.js``)
+ correctly.
+
+
+Fix:
+ modified ``mime.c`` to associate ``.js`` files with the MIME
+ type ``application/x-javascript``.
+
+
+Bug in If-Modified-Since parsing
+--------------------------------
+
+
+Summary:
+ There was an off-by-one error when converting from Gregorian date to
+ time_t.
+
+Fix:
+ modified function ``dateToTimet`` in file ``webs.c``. The ``month``
+ parameter is numbered from 0 (Jan == 0), but ``FixedFromGregorian()``
+ takes months numbered from 1 (January == 1). We need to add 1 to
+ the month before calling FixedFromGregorian.
+
+
+
+
+Bug Fixes for Version 2.1.2
+============================
+
+
+Ejscript Error Messages
+------------------------
+
+
+Summary:
+
+ Changed ejEval() function so it displays in the browser the error string that is
+ reported by the Ejscript interpreter (old code discarded it completely).
+
+Fix:
+ modified ``websuemf.c``
+
+
+Security Handler Response Codes
+--------------------------------
+
+
+Summary:
+ Several places in the ``websSecurityHandler()`` function were
+ returning error code 200 (success) instead of the correct 400-level error code.
+Fix:
+ Corrected error codes in ``security.c``
+
+Security Handler Memory Leak
+-----------------------------
+
+
+Summary:
+ In ``websSecurityHandler()``, if the WebServer was compiled with
+ ``WEBS_SSL_SUPPORT`` enabled, there was a return path that leaked
+ memory.
+
+Fix:
+ Added call to ``bfree(B_L, accessLimit);``
+
+Ejscript Write Corruption
+--------------------------
+
+
+Summary:
+ Very long text strings passed to the Ejscript ``write()`` function
+ were being corrupted before being displayed.
+
+Fix:
+ Commented out a ``trace()`` statement in ``ejGetLexToken()`` that appears to have been the
+ culprit. The value of ``ep->token`` was being corrupted somewhere
+ in the trace.
+
+Error in dsnprintf(): "%X" format
+----------------------------------
+
+
+Summary:
+ The "%X" format specifier did not correctly cause the function to output
+ uppercase hexadecimal digits.
+
+Fix:
+ Added support for the "%X" format specifier.
+
+BUG018565 Re-fixed
+-------------------
+
+
+Summary:
+ See 2.1.1 release notes (below). This bug fix did not make it into the
+ 2.1.1 release.
+
+Fix:
+ Corrected code in ``sockGen.c``.
+
+Potential Error in ``error()``
+-------------------------------
+
+
+
+Summary:
+ If ``error()`` is called where the etype parameter is not E_LOG, E_ASSERT,
+ or E_USER, the call to ``bfreeSafe(B_L, buf)`` now at line 71 will fail,
+ because 'buf' is randomly initialized.
+
+Fix:
+ We format a message saying that this is an unknown message type,
+ and in doing so give buf a valid value.
+
+
+Added Support For Customized Access Control
+--------------------------------------------
+
+
+Summary:
+ Several users requested a method to control URL access in a hierarchical
+ fashion. For example, users assigned to an 'admin' group might have
+ access to all URLs on the WebServer, and users assigned to the group
+ 'technician' would have access to a smaller set of pages, and users
+ assigned to the group 'users' would perhaps only have access to a set of
+ read-only pages. The built-in WebServer access control system only
+ allows users to access URLs that exactly match their group membership.
+
+Fix:
+ Added call to a user-supplied function `` bool_t dmfCanAccess(const
+ char_t* userGroup, const char_t* group)``. This function is called
+ from inside ``umUserCanAccessURL()`` if the macro
+ ``qHierarchicalAccess`` is defined.
+
+
+
+Memory Leak in websParseRequest()
+----------------------------------
+
+
+Summary:
+ Memory was being leaked in the code now at line 907 of ``webs.c``.
+
+Fix:
+ Added a call to ``bfree()``.
+
+Macintosh OS X Support
+========================
+
+
+A separate Mac OS X platform directory has been added, and this platform
+has been tested on version 10.1.5 of the operating system.
+To build the WebServer on OS X::
+
+ cd MACOSX
+ make
+
+
+Note that like all \*nix operating systems, only the root user has
+permission to open a server port with a lower number than 1024. You must
+run the WebServer as root to serve pages over port 80, or change the server
+port (in ``main.c``) to a different port (typically port 8080).
+
+
+
+
+Bug Fixes for Version 2.1.1
+===========================
+
+Intermittent Access Error for CGI Scripts (BUG01937)
+----------------------------------------------------
+
+
+Summary:
+ Pages were occasionally replaced with the message, ``Access Error: Data
+ follows when trying to obtain CGI generated no output``.
+Fix:
+ On multiple CPU systems, it is possible for a CGI application to exit before
+ its output is flushed to disk. The change for this release locates the code
+ that collects the output from the CGI application in a separate routine.
+ In addition to calling that routine from within the CGI application processing
+ loop, it is also called in a brief loop after the CGI application has exited.
+ This extra loop runs for only up to one second while the collected output
+ remains empty. If, after 1 second, the output remains empty, the original
+ course of action is followed (``Access Error`` is reported).
+
+
+CPU Utilization Hangs at 100% on a Socket Disconnect (BUG01865)
+---------------------------------------------------------------
+
+
+Summary:
+ This error occurs whenever a user terminates a request before the server
+ has had ample time to service it. This can be simulated by quickly hitting
+ the refresh button on the browser twice in a row, causing the first request
+ to be terminated. The server then enters into a tight loop that utilizes
+ all of its time.
+
+Fix:
+ Always close the socket prior to a disconnect.
+
+
+Security Features can be Bypassed by Adding an Extra Slash in the URL (BUG01518)
+--------------------------------------------------------------------------------
+
+
+Summary:
+ By adding an extra slash in a URL, password prompting is bypassed, allowing
+ unrestricted access to secured pages.
+
+Fix:
+ Remove multiple adjacent occurrences of slashes in the URL before passing
+ it to the security handler.
+
+
+Call to ``websSetVar`` causes a crash (BUG01938)
+------------------------------------------------
+
+
+
+Summary:
+ Whenever a request is not completed while being processed by websGetInput(),
+ a call to websDone is made, followed by an attempt to process the partial
+ request data.
+
+Fix:
+ Return immediately after closing the socket.
+
+
+Remove stray semicolon in ``emfdb.c`` (BUG01820)
+------------------------------------------------
+
+
+Summary and Fix:
+ A stray semicolon was removed from this file.
+
+Novell Netware Support
+======================
+
+
+With the addition of Novell Netware in this 2.11 release, WebServer now supports these platforms:
+
+ * LINUX
+ * LynxOS
+ * Novell Netware </font>4.2, 5.1
+ * Mac OS X
+ * UNIX - SCO OpenServer 3.2V5.0.0
+ * VxWorks 5.3.1
+ * Windows 2000
+ * Windows 98
+ * Windows 95
+ * Windows NT
+ * Windows CE
+
+To make a Novell Netware target file (``webs.nlm``)::
+
+ cd NW
+ wmake webs.nlm
+ load <path>; \webs.nlm
+ webs
+
+
+**Note:** This makefile lacks a valid default rule. In addition, an
+environment variable (QMKVER) controls the amount of debug information
+that is compiled and linked into the nlm file. If this variable is set
+to ``P``, it produces a production version. All other settings
+(or the omission of the variable) results in a debug version. For other
+platforms supported by WebServer, please refer to your WebServer 2.1
+documentation for appropriate instructions.
+
+Copyright Information
+=====================
+
+
+Trademarks
+ GoAhead and GoAhead WebServer are registered trademarks of GoAhead
+ Software. All other brand or product names are the trademarks or
+ registered trademarks of their respective holders.
+
+Copyright
+ Copyright © 2000, 2001 GoAhead Software, Inc. All rights reserved.
+ Product and technical information in this document is subject to
+ change without notice and does not represent a commitment on the part
+ of GoAhead Software, Inc.
+
+Copy Restrictions
+ The software described in this document may be used and copied only
+ in accordance with the terms of the accompanying license agreement.
+
+
+GoAhead Software, Inc.
+ 10900 NE 8th Street Suite 750 Bellevue, WA 98004 +1 ( 425) 453-1900
+ www.goahead.com info@goahead.com
+
+1-53-03
+
diff --git a/cleopatre/application/spidgoahead/ringq.c b/cleopatre/application/spidgoahead/ringq.c
new file mode 100644
index 0000000000..96ef052716
--- /dev/null
+++ b/cleopatre/application/spidgoahead/ringq.c
@@ -0,0 +1,595 @@
+/*
+ * ringq.c -- Ring queue buffering module
+ *
+ * Copyright (c) GoAhead Software Inc., 1995-2000. All Rights Reserved.
+ *
+ * See the file "license.txt" for usage and redistribution license requirements
+ *
+ * $Id: ringq.c,v 1.4 2003/09/17 14:45:03 bporter Exp $
+ */
+
+/******************************** Description *********************************/
+
+/*
+ * A ring queue allows maximum utilization of memory for data storage and is
+ * ideal for input/output buffering. This module provides a highly efficient
+ * implementation and a vehicle for dynamic strings.
+ *
+ * WARNING: This is a public implementation and callers have full access to
+ * the queue structure and pointers. Change this module very carefully.
+ *
+ * This module follows the open/close model.
+ *
+ * Operation of a ringq where rq is a pointer to a ringq :
+ *
+ * rq->buflen contains the size of the buffer.
+ * rq->buf will point to the start of the buffer.
+ * rq->servp will point to the first (un-consumed) data byte.
+ * rq->endp will point to the next free location to which new data is added
+ * rq->endbuf will point to one past the end of the buffer.
+ *
+ * Eg. If the ringq contains the data "abcdef", it might look like :
+ *
+ * +-------------------------------------------------------------------+
+ * | | | | | | | | a | b | c | d | e | f | | | | |
+ * +-------------------------------------------------------------------+
+ * ^ ^ ^ ^
+ * | | | |
+ * rq->buf rq->servp rq->endp rq->enduf
+ *
+ * The queue is empty when servp == endp. This means that the queue will hold
+ * at most rq->buflen -1 bytes. It is the filler's responsibility to ensure
+ * the ringq is never filled such that servp == endp.
+ *
+ * It is the filler's responsibility to "wrap" the endp back to point to
+ * rq->buf when the pointer steps past the end. Correspondingly it is the
+ * consumers responsibility to "wrap" the servp when it steps to rq->endbuf.
+ * The ringqPutc and ringqGetc routines will do this automatically.
+ */
+
+/********************************* Includes ***********************************/
+
+#ifdef UEMF
+ #include "uemf.h"
+#else
+ #include "basic/basicInternal.h"
+#endif
+
+/*********************************** Defines **********************************/
+/*
+ * Faster than a function call
+ */
+
+#define RINGQ_LEN(rq) \
+ ((rq->servp > rq->endp) ? \
+ (rq->buflen + (rq->endp - rq->servp)) : \
+ (rq->endp - rq->servp))
+
+/***************************** Forward Declarations ***************************/
+
+static int ringqGrow(ringq_t *rq);
+static int getBinBlockSize(int size);
+
+int ringqGrowCalls = 0;
+
+/*********************************** Code *************************************/
+/*
+ * Create a new ringq. "increment" is the amount to increase the size of the
+ * ringq should it need to grow to accomodate data being added. "maxsize" is
+ * an upper limit (sanity level) beyond which the q must not grow. Set maxsize
+ * to -1 to imply no upper limit. The buffer for the ringq is always
+ * dynamically allocated. Set maxsize
+ */
+
+int ringqOpen(ringq_t *rq, int initSize, int maxsize)
+{
+ int increment;
+
+ a_assert(rq);
+ a_assert(initSize >= 0);
+
+ increment = getBinBlockSize(initSize);
+ if ((rq->buf = balloc(B_L, (increment))) == NULL) {
+ return -1;
+ }
+ rq->maxsize = maxsize;
+ rq->buflen = increment;
+ rq->increment = increment;
+ rq->endbuf = &rq->buf[rq->buflen];
+ rq->servp = rq->buf;
+ rq->endp = rq->buf;
+ *rq->servp = '\0';
+ return 0;
+}
+
+/******************************************************************************/
+/*
+ * Delete a ringq and free the ringq buffer.
+ */
+
+void ringqClose(ringq_t *rq)
+{
+ a_assert(rq);
+ a_assert(rq->buflen == (rq->endbuf - rq->buf));
+
+ if (rq == NULL) {
+ return;
+ }
+
+ ringqFlush(rq);
+ bfree(B_L, (char*) rq->buf);
+ rq->buf = NULL;
+}
+
+/******************************************************************************/
+/*
+ * Return the length of the data in the ringq. Users must fill the queue to
+ * a high water mark of at most one less than the queue size.
+ */
+
+int ringqLen(ringq_t *rq)
+{
+ a_assert(rq);
+ a_assert(rq->buflen == (rq->endbuf - rq->buf));
+
+ if (rq->servp > rq->endp) {
+ return rq->buflen + rq->endp - rq->servp;
+ } else {
+ return rq->endp - rq->servp;
+ }
+}
+
+/******************************************************************************/
+/*
+ * Get a byte from the queue
+ */
+
+int ringqGetc(ringq_t *rq)
+{
+ char_t c;
+ char_t* cp;
+
+ a_assert(rq);
+ a_assert(rq->buflen == (rq->endbuf - rq->buf));
+
+ if (rq->servp == rq->endp) {
+ return -1;
+ }
+
+ cp = (char_t*) rq->servp;
+ c = *cp++;
+ rq->servp = (unsigned char *) cp;
+ if (rq->servp >= rq->endbuf) {
+ rq->servp = rq->buf;
+ }
+ /*
+ * 17 Sep 03 BgP -- using the implicit conversion from signed char to
+ * signed int in the return below makes this function work incorrectly when
+ * dealing with UTF-8 encoded text. UTF-8 may include characters that are >
+ * 127, which a signed char treats as negative. When we return a 'negative'
+ * value from this function, it gets converted to a negative
+ * integer, instead of a small positive integer, which is what we want.
+ * So, we cast to (unsigned char) before returning, and the problem goes
+ * away...
+ */
+ return (int) ((unsigned char) c);
+}
+
+/******************************************************************************/
+/*
+ * Add a char to the queue. Note if being used to store wide strings
+ * this does not add a trailing '\0'. Grow the q as required.
+ */
+
+int ringqPutc(ringq_t *rq, char_t c)
+{
+ char_t *cp;
+
+ a_assert(rq);
+ a_assert(rq->buflen == (rq->endbuf - rq->buf));
+
+ if ((ringqPutBlkMax(rq) < (int) sizeof(char_t)) && !ringqGrow(rq)) {
+ return -1;
+ }
+
+ cp = (char_t*) rq->endp;
+ *cp++ = (char_t) c;
+ rq->endp = (unsigned char *) cp;
+ if (rq->endp >= rq->endbuf) {
+ rq->endp = rq->buf;
+ }
+ return 0;
+}
+
+/******************************************************************************/
+/*
+ * Insert a wide character at the front of the queue
+ */
+
+int ringqInsertc(ringq_t *rq, char_t c)
+{
+ char_t *cp;
+
+ a_assert(rq);
+ a_assert(rq->buflen == (rq->endbuf - rq->buf));
+
+ if (ringqPutBlkMax(rq) < (int) sizeof(char_t) && !ringqGrow(rq)) {
+ return -1;
+ }
+ if (rq->servp <= rq->buf) {
+ rq->servp = rq->endbuf;
+ }
+ cp = (char_t*) rq->servp;
+ *--cp = (char_t) c;
+ rq->servp = (unsigned char *) cp;
+ return 0;
+}
+
+/******************************************************************************/
+/*
+ * Add a string to the queue. Add a trailing null (maybe two nulls)
+ */
+
+int ringqPutStr(ringq_t *rq, char_t *str)
+{
+ int rc;
+
+ a_assert(rq);
+ a_assert(str);
+ a_assert(rq->buflen == (rq->endbuf - rq->buf));
+
+ rc = ringqPutBlk(rq, (unsigned char*) str, gstrlen(str) * sizeof(char_t));
+ *((char_t*) rq->endp) = (char_t) '\0';
+ return rc;
+}
+
+/******************************************************************************/
+/*
+ * Add a null terminator. This does NOT increase the size of the queue
+ */
+
+void ringqAddNull(ringq_t *rq)
+{
+ a_assert(rq);
+ a_assert(rq->buflen == (rq->endbuf - rq->buf));
+
+ *((char_t*) rq->endp) = (char_t) '\0';
+}
+
+/******************************************************************************/
+#ifdef UNICODE
+/*
+ * Get a byte from the queue
+ */
+
+int ringqGetcA(ringq_t *rq)
+{
+ unsigned char c;
+
+ a_assert(rq);
+ a_assert(rq->buflen == (rq->endbuf - rq->buf));
+
+ if (rq->servp == rq->endp) {
+ return -1;
+ }
+
+ c = *rq->servp++;
+ if (rq->servp >= rq->endbuf) {
+ rq->servp = rq->buf;
+ }
+ return c;
+}
+
+/******************************************************************************/
+/*
+ * Add a byte to the queue. Note if being used to store strings this does not
+ * add a trailing '\0'. Grow the q as required.
+ */
+
+int ringqPutcA(ringq_t *rq, char c)
+{
+ a_assert(rq);
+ a_assert(rq->buflen == (rq->endbuf - rq->buf));
+
+ if (ringqPutBlkMax(rq) == 0 && !ringqGrow(rq)) {
+ return -1;
+ }
+
+ *rq->endp++ = (unsigned char) c;
+ if (rq->endp >= rq->endbuf) {
+ rq->endp = rq->buf;
+ }
+ return 0;
+}
+
+/******************************************************************************/
+/*
+ * Insert a byte at the front of the queue
+ */
+
+int ringqInsertcA(ringq_t *rq, char c)
+{
+ a_assert(rq);
+ a_assert(rq->buflen == (rq->endbuf - rq->buf));
+
+ if (ringqPutBlkMax(rq) == 0 && !ringqGrow(rq)) {
+ return -1;
+ }
+ if (rq->servp <= rq->buf) {
+ rq->servp = rq->endbuf;
+ }
+ *--rq->servp = (unsigned char) c;
+ return 0;
+}
+
+/******************************************************************************/
+/*
+ * Add a string to the queue. Add a trailing null (not really in the q).
+ * ie. beyond the last valid byte.
+ */
+
+int ringqPutStrA(ringq_t *rq, char *str)
+{
+ int rc;
+
+ a_assert(rq);
+ a_assert(str);
+ a_assert(rq->buflen == (rq->endbuf - rq->buf));
+
+ rc = ringqPutBlk(rq, (unsigned char*) str, strlen(str));
+ rq->endp[0] = '\0';
+ return rc;
+}
+
+#endif /* UNICODE */
+/******************************************************************************/
+/*
+ * Add a block of data to the ringq. Return the number of bytes added.
+ * Grow the q as required.
+ */
+
+int ringqPutBlk(ringq_t *rq, unsigned char *buf, int size)
+{
+ int this, bytes_put;
+
+ a_assert(rq);
+ a_assert(rq->buflen == (rq->endbuf - rq->buf));
+ a_assert(buf);
+ a_assert(0 <= size);
+
+/*
+ * Loop adding the maximum bytes we can add in a single straight line copy
+ */
+ bytes_put = 0;
+ while (size > 0) {
+ this = min(ringqPutBlkMax(rq), size);
+ if (this <= 0) {
+ if (! ringqGrow(rq)) {
+ break;
+ }
+ this = min(ringqPutBlkMax(rq), size);
+ }
+
+ memcpy(rq->endp, buf, this);
+ buf += this;
+ rq->endp += this;
+ size -= this;
+ bytes_put += this;
+
+ if (rq->endp >= rq->endbuf) {
+ rq->endp = rq->buf;
+ }
+ }
+ return bytes_put;
+}
+
+/******************************************************************************/
+/*
+ * Get a block of data from the ringq. Return the number of bytes returned.
+ */
+
+int ringqGetBlk(ringq_t *rq, unsigned char *buf, int size)
+{
+ int this, bytes_read;
+
+ a_assert(rq);
+ a_assert(rq->buflen == (rq->endbuf - rq->buf));
+ a_assert(buf);
+ a_assert(0 <= size && size < rq->buflen);
+
+/*
+ * Loop getting the maximum bytes we can get in a single straight line copy
+ */
+ bytes_read = 0;
+ while (size > 0) {
+ this = ringqGetBlkMax(rq);
+ this = min(this, size);
+ if (this <= 0) {
+ break;
+ }
+
+ memcpy(buf, rq->servp, this);
+ buf += this;
+ rq->servp += this;
+ size -= this;
+ bytes_read += this;
+
+ if (rq->servp >= rq->endbuf) {
+ rq->servp = rq->buf;
+ }
+ }
+ return bytes_read;
+}
+
+/******************************************************************************/
+/*
+ * Return the maximum number of bytes the ring q can accept via a single
+ * block copy. Useful if the user is doing their own data insertion.
+ */
+
+int ringqPutBlkMax(ringq_t *rq)
+{
+ int space, in_a_line;
+
+ a_assert(rq);
+ a_assert(rq->buflen == (rq->endbuf - rq->buf));
+
+ space = rq->buflen - RINGQ_LEN(rq) - 1;
+ in_a_line = rq->endbuf - rq->endp;
+
+ return min(in_a_line, space);
+}
+
+/******************************************************************************/
+/*
+ * Return the maximum number of bytes the ring q can provide via a single
+ * block copy. Useful if the user is doing their own data retrieval.
+ */
+
+int ringqGetBlkMax(ringq_t *rq)
+{
+ int len, in_a_line;
+
+ a_assert(rq);
+ a_assert(rq->buflen == (rq->endbuf - rq->buf));
+
+ len = RINGQ_LEN(rq);
+ in_a_line = rq->endbuf - rq->servp;
+
+ return min(in_a_line, len);
+}
+
+/******************************************************************************/
+/*
+ * Adjust the endp pointer after the user has copied data into the queue.
+ */
+
+void ringqPutBlkAdj(ringq_t *rq, int size)
+{
+ a_assert(rq);
+ a_assert(rq->buflen == (rq->endbuf - rq->buf));
+ a_assert(0 <= size && size < rq->buflen);
+
+ rq->endp += size;
+ if (rq->endp >= rq->endbuf) {
+ rq->endp -= rq->buflen;
+ }
+/*
+ * Flush the queue if the endp pointer is corrupted via a bad size
+ */
+ if (rq->endp >= rq->endbuf) {
+ error(E_L, E_LOG, T("Bad end pointer"));
+ ringqFlush(rq);
+ }
+}
+
+/******************************************************************************/
+/*
+ * Adjust the servp pointer after the user has copied data from the queue.
+ */
+
+void ringqGetBlkAdj(ringq_t *rq, int size)
+{
+ a_assert(rq);
+ a_assert(rq->buflen == (rq->endbuf - rq->buf));
+ a_assert(0 < size && size < rq->buflen);
+
+ rq->servp += size;
+ if (rq->servp >= rq->endbuf) {
+ rq->servp -= rq->buflen;
+ }
+/*
+ * Flush the queue if the servp pointer is corrupted via a bad size
+ */
+ if (rq->servp >= rq->endbuf) {
+ error(E_L, E_LOG, T("Bad serv pointer"));
+ ringqFlush(rq);
+ }
+}
+
+/******************************************************************************/
+/*
+ * Flush all data in a ring q. Reset the pointers.
+ */
+
+void ringqFlush(ringq_t *rq)
+{
+ a_assert(rq);
+ a_assert(rq->servp);
+
+ rq->servp = rq->buf;
+ rq->endp = rq->buf;
+ if (rq->servp) {
+ *rq->servp = '\0';
+ }
+}
+
+/******************************************************************************/
+/*
+ * Grow the buffer. Return true if the buffer can be grown. Grow using
+ * the increment size specified when opening the ringq. Don't grow beyond
+ * the maximum possible size.
+ */
+
+static int ringqGrow(ringq_t *rq)
+{
+ unsigned char *newbuf;
+ int len;
+
+ a_assert(rq);
+
+ if (rq->maxsize >= 0 && rq->buflen >= rq->maxsize) {
+ return 0;
+ }
+
+ len = ringqLen(rq);
+
+ if ((newbuf = balloc(B_L, rq->buflen + rq->increment)) == NULL) {
+ return 0;
+ }
+ ringqGetBlk(rq, newbuf, ringqLen(rq));
+ bfree(B_L, (char*) rq->buf);
+
+#ifdef OLD
+ rq->endp = &newbuf[endp];
+ rq->servp = &newbuf[servp];
+ rq->endbuf = &newbuf[rq->buflen];
+ rq->buf = newbuf;
+#endif
+
+ rq->buflen += rq->increment;
+ rq->endp = newbuf;
+ rq->servp = newbuf;
+ rq->buf = newbuf;
+ rq->endbuf = &rq->buf[rq->buflen];
+
+ ringqPutBlk(rq, newbuf, len);
+
+/*
+ * Double the increment so the next grow will line up with balloc'ed memory
+ */
+ rq->increment = getBinBlockSize(2 * rq->increment);
+
+ return 1;
+}
+
+/******************************************************************************/
+/*
+ * Find the smallest binary memory size that "size" will fit into. This
+ * makes the ringq and ringqGrow routines much more efficient. The balloc
+ * routine likes powers of 2 minus 1.
+ */
+
+static int getBinBlockSize(int size)
+{
+ int q;
+
+ size = size >> B_SHIFT;
+ for (q = 0; size; size >>= 1) {
+ q++;
+ }
+ return (1 << (B_SHIFT + q));
+}
+
+/******************************************************************************/
+
diff --git a/cleopatre/application/spidgoahead/rom.c b/cleopatre/application/spidgoahead/rom.c
new file mode 100644
index 0000000000..1dd8463f91
--- /dev/null
+++ b/cleopatre/application/spidgoahead/rom.c
@@ -0,0 +1,194 @@
+/*
+ * rom.c -- Support for ROMed page retrieval.
+ *
+ * Copyright (c) GoAhead Software Inc., 1995-2000. All Rights Reserved.
+ *
+ * See the file "license.txt" for usage and redistribution license requirements
+ *
+ * $Id: rom.c,v 1.3 2002/10/24 14:44:50 bporter Exp $
+ */
+
+/******************************** Description *********************************/
+
+/*
+ * This module provides web page retrieval from compiled web pages. Use the
+ * webcomp program to compile web pages and link into the GoAhead WebServer.
+ * This module uses a hashed symbol table for fast page lookup.
+ *
+ * Usage: webcomp -f webPageFileList -p Prefix >webrom.c
+ */
+
+/********************************* Includes ***********************************/
+
+#include <stdlib.h>
+
+#include "wsIntrn.h"
+
+/******************************** Local Data **********************************/
+
+#ifdef WEBS_PAGE_ROM
+
+sym_fd_t romTab; /* Symbol table for web pages */
+
+/*********************************** Code *************************************/
+/*
+ * Open the ROM module
+ */
+
+int websRomOpen()
+{
+ websRomPageIndexType *wip;
+ int nchars;
+ char_t name[SYM_MAX];
+
+ romTab = symOpen(WEBS_SYM_INIT);
+
+ for (wip = websRomPageIndex; wip->path; wip++) {
+ gstrncpy(name, wip->path, SYM_MAX);
+ nchars = gstrlen(name) - 1;
+ if (nchars > 0 &&
+ (name[nchars] == '/' || name[nchars] == '\\')) {
+ name[nchars] = '\0';
+ }
+ symEnter(romTab, name, valueInteger((int) wip), 0);
+ }
+ return 0;
+}
+
+/******************************************************************************/
+/*
+ * Close the ROM module
+ */
+
+void websRomClose()
+{
+ symClose(romTab);
+}
+
+/******************************************************************************/
+/*
+ * Open a web page
+ */
+
+int websRomPageOpen(webs_t wp, char_t *path, int mode, int perm)
+{
+ websRomPageIndexType *wip;
+ sym_t *sp;
+
+ a_assert(websValid(wp));
+ a_assert(path && *path);
+
+ if ((sp = symLookup(romTab, path)) == NULL) {
+ return -1;
+ }
+ wip = (websRomPageIndexType*) sp->content.value.integer;
+ wip->pos = 0;
+ return (wp->docfd = wip - websRomPageIndex);
+}
+
+/******************************************************************************/
+/*
+ * Close a web page
+ */
+
+void websRomPageClose(int fd)
+{
+}
+
+/******************************************************************************/
+/*
+ * Stat a web page
+ */
+
+int websRomPageStat(char_t *path, websStatType *sbuf)
+{
+ websRomPageIndexType *wip;
+ sym_t *sp;
+
+ a_assert(path && *path);
+
+ if ((sp = symLookup(romTab, path)) == NULL) {
+ return -1;
+ }
+ wip = (websRomPageIndexType*) sp->content.value.integer;
+
+ memset(sbuf, 0, sizeof(websStatType));
+ sbuf->size = wip->size;
+ if (wip->page == NULL) {
+ sbuf->isDir = 1;
+ }
+ return 0;
+}
+
+/******************************************************************************/
+/*
+ * Read a web page
+ */
+
+int websRomPageReadData(webs_t wp, char *buf, int nBytes)
+{
+ websRomPageIndexType *wip;
+ int len;
+
+ a_assert(websValid(wp));
+ a_assert(buf);
+ a_assert(wp->docfd >= 0);
+
+ wip = &websRomPageIndex[wp->docfd];
+
+ len = min(wip->size - wip->pos, nBytes);
+ memcpy(buf, &wip->page[wip->pos], len);
+ wip->pos += len;
+ return len;
+}
+
+/******************************************************************************/
+/*
+ * Position a web page
+ */
+
+long websRomPageSeek(webs_t wp, long offset, int origin)
+{
+ websRomPageIndexType *wip;
+ long pos;
+
+ a_assert(websValid(wp));
+ a_assert(origin == SEEK_SET || origin == SEEK_CUR || origin == SEEK_END);
+ a_assert(wp->docfd >= 0);
+
+ wip = &websRomPageIndex[wp->docfd];
+
+ if (origin != SEEK_SET && origin != SEEK_CUR && origin != SEEK_END) {
+ errno = EINVAL;
+ return -1;
+ }
+
+ if (wp->docfd < 0) {
+ errno = EBADF;
+ return -1;
+ }
+
+ pos = offset;
+ switch (origin) {
+ case SEEK_CUR:
+ pos = wip->pos + offset;
+ break;
+ case SEEK_END:
+ pos = wip->size + offset;
+ break;
+ default:
+ break;
+ }
+
+ if (pos < 0) {
+ errno = EBADF;
+ return -1;
+ }
+
+ return (wip->pos = pos);
+}
+
+#endif /* WEBS_PAGE_ROM */
+
+/******************************************************************************/
+
diff --git a/cleopatre/application/spidgoahead/security.c b/cleopatre/application/spidgoahead/security.c
new file mode 100644
index 0000000000..a111e74c46
--- /dev/null
+++ b/cleopatre/application/spidgoahead/security.c
@@ -0,0 +1,240 @@
+/*
+ * security.c -- Security handler
+ *
+ * Copyright (c) GoAhead Software Inc., 1995-2000. All Rights Reserved.
+ *
+ * See the file "license.txt" for usage and redistribution license requirements
+ *
+ * $Id: security.c,v 1.9 2003/09/19 17:04:44 bporter Exp $
+ */
+
+/******************************** Description *********************************/
+
+/*
+ * This module provides a basic security policy.
+ */
+
+/********************************* Includes ***********************************/
+
+#include "wsIntrn.h"
+#include "um.h"
+#ifdef DIGEST_ACCESS_SUPPORT
+#include "websda.h"
+#endif
+
+/********************************** Defines ***********************************/
+/*
+ * The following #defines change the behaviour of security in the absence
+ * of User Management.
+ * Note that use of User management functions require prior calling of
+ * umInit() to behave correctly
+ */
+
+#ifndef USER_MANAGEMENT_SUPPORT
+#define umGetAccessMethodForURL(url) AM_FULL
+#define umUserExists(userid) 0
+#define umUserCanAccessURL(userid, url) 1
+#define umGetUserPassword(userid) websGetPassword()
+#define umGetAccessLimitSecure(accessLimit) 0
+#define umGetAccessLimit(url) NULL
+#endif
+
+/******************************** Local Data **********************************/
+
+static char_t websPassword[WEBS_MAX_PASS]; /* Access password (decoded) */
+#ifdef _DEBUG
+static int debugSecurity = 1;
+#else
+static int debugSecurity = 0;
+#endif
+
+/*********************************** Code *************************************/
+/*
+ * Determine if this request should be honored
+ */
+
+int websSecurityHandler(webs_t wp, char_t *urlPrefix, char_t *webDir, int arg,
+ char_t *url, char_t *path, char_t *query)
+{
+ char_t *type, *userid, *password, *accessLimit;
+ int flags, nRet;
+ accessMeth_t am;
+
+ a_assert(websValid(wp));
+ a_assert(url && *url);
+ a_assert(path && *path);
+/*
+ * Get the critical request details
+ */
+ type = websGetRequestType(wp);
+ password = websGetRequestPassword(wp);
+ userid = websGetRequestUserName(wp);
+ flags = websGetRequestFlags(wp);
+/*
+ * Get the access limit for the URL. Exit if none found.
+ */
+ accessLimit = umGetAccessLimit(path);
+ if (accessLimit == NULL) {
+ return 0;
+ }
+
+/*
+ * Check to see if URL must be encrypted
+ */
+#ifdef WEBS_SSL_SUPPORT
+ nRet = umGetAccessLimitSecure(accessLimit);
+ if (nRet && ((flags & WEBS_SECURE) == 0)) {
+ websStats.access++;
+ websError(wp, 405, T("Access Denied\nSecure access is required."));
+ trace(3, T("SEC: Non-secure access attempted on <%s>\n"), path);
+ /* bugfix 5/24/02 -- we were leaking the memory pointed to by
+ * 'accessLimit'. Thanks to Simon Byholm.
+ */
+ bfree(B_L, accessLimit);
+ return 1;
+ }
+#endif
+
+/*
+ * Get the access limit for the URL
+ */
+ am = umGetAccessMethodForURL(accessLimit);
+
+ nRet = 0;
+ if ((flags & WEBS_LOCAL_REQUEST) && (debugSecurity == 0)) {
+/*
+ * Local access is always allowed (defeat when debugging)
+ */
+ } else if (am == AM_NONE) {
+/*
+ * URL is supposed to be hidden! Make like it wasn't found.
+ */
+ websStats.access++;
+ websError(wp, 404, T("Page Not Found"));
+ nRet = 1;
+ } else if (userid && *userid) {
+ if (!umUserExists(userid)) {
+ websStats.access++;
+ websError(wp, 401, T("Access Denied\nUnknown User"));
+ trace(3, T("SEC: Unknown user <%s> attempted to access <%s>\n"),
+ userid, path);
+ nRet = 1;
+ } else if (!umUserCanAccessURL(userid, accessLimit)) {
+ websStats.access++;
+ websError(wp, 403, T("Access Denied\nProhibited User"));
+ nRet = 1;
+ } else if (password && * password) {
+ char_t * userpass = umGetUserPassword(userid);
+ if (userpass) {
+ if (gstrcmp(password, userpass) != 0) {
+ websStats.access++;
+ websError(wp, 401, T("Access Denied\nWrong Password"));
+ trace(3, T("SEC: Password fail for user <%s>")
+ T("attempt to access <%s>\n"), userid, path);
+ nRet = 1;
+ } else {
+/*
+ * User and password check out.
+ */
+ }
+
+ bfree (B_L, userpass);
+ }
+#ifdef DIGEST_ACCESS_SUPPORT
+ } else if (flags & WEBS_AUTH_DIGEST) {
+
+ char_t *digestCalc;
+
+/*
+ * Check digest for equivalence
+ */
+ wp->password = umGetUserPassword(userid);
+
+ a_assert(wp->digest);
+ a_assert(wp->nonce);
+ a_assert(wp->password);
+
+ digestCalc = websCalcDigest(wp);
+ a_assert(digestCalc);
+
+ if (gstrcmp(wp->digest, digestCalc) != 0) {
+ websStats.access++;
+ /* 16 Jun 03 -- error code changed from 405 to 401 -- thanks to
+ * Jay Chalfant.
+ */
+ websError(wp, 401, T("Access Denied\nWrong Password"));
+ nRet = 1;
+ }
+
+ bfree (B_L, digestCalc);
+#endif
+ } else {
+/*
+ * No password has been specified
+ */
+#ifdef DIGEST_ACCESS_SUPPORT
+ if (am == AM_DIGEST) {
+ wp->flags |= WEBS_AUTH_DIGEST;
+ }
+#endif
+ websStats.errors++;
+ websError(wp, 401,
+ T("Access to this document requires a password"));
+ nRet = 1;
+ }
+ } else if (am != AM_FULL) {
+/*
+ * This will cause the browser to display a password / username
+ * dialog
+ */
+#ifdef DIGEST_ACCESS_SUPPORT
+ if (am == AM_DIGEST) {
+ wp->flags |= WEBS_AUTH_DIGEST;
+ }
+#endif
+ websStats.errors++;
+ websError(wp, 401, T("Access to this document requires a User ID"));
+ nRet = 1;
+ }
+
+ bfree(B_L, accessLimit);
+
+ return nRet;
+}
+
+/******************************************************************************/
+/*
+ * Delete the default security handler
+ */
+
+void websSecurityDelete()
+{
+ websUrlHandlerDelete(websSecurityHandler);
+}
+
+/******************************************************************************/
+/*
+ * Store the new password, expect a decoded password. Store in websPassword in
+ * the decoded form.
+ */
+
+void websSetPassword(char_t *password)
+{
+ a_assert(password);
+
+ gstrncpy(websPassword, password, TSZ(websPassword));
+}
+
+/******************************************************************************/
+/*
+ * Get password, return the decoded form
+ */
+
+char_t *websGetPassword()
+{
+ return bstrdup(B_L, websPassword);
+}
+
+/******************************************************************************/
+
+
diff --git a/cleopatre/application/spidgoahead/sock.c b/cleopatre/application/spidgoahead/sock.c
new file mode 100644
index 0000000000..aaf5276bf8
--- /dev/null
+++ b/cleopatre/application/spidgoahead/sock.c
@@ -0,0 +1,792 @@
+/*
+ * sock.c -- Posix Socket upper layer support module for general posix use
+ *
+ * Copyright (c) GoAhead Software Inc., 1995-2000. All Rights Reserved.
+ *
+ * $Id: sock.c,v 1.3 2002/10/24 14:44:50 bporter Exp $
+ */
+
+/******************************** Description *********************************/
+
+/*
+ * Posix Socket Module. This supports blocking and non-blocking buffered
+ * socket I/O.
+ */
+
+/********************************** Includes **********************************/
+
+#include <string.h>
+#include <stdlib.h>
+
+#ifdef UEMF
+ #include "uemf.h"
+#else
+ #include <socket.h>
+ #include <types.h>
+ #include <unistd.h>
+ #include "emfInternal.h"
+#endif
+
+/************************************ Locals **********************************/
+
+socket_t **socketList; /* List of open sockets */
+int socketMax; /* Maximum size of socket */
+int socketHighestFd = -1; /* Highest socket fd opened */
+
+/***************************** Forward Declarations ***************************/
+
+static int socketDoOutput(socket_t *sp, char *buf, int toWrite, int *errCode);
+static int tryAlternateSendTo(int sock, char *buf, int toWrite, int i,
+ struct sockaddr *server);
+
+/*********************************** Code *************************************/
+/*
+ * Write to a socket. Absorb as much data as the socket can buffer. Block if
+ * the socket is in blocking mode. Returns -1 on error, otherwise the number
+ * of bytes written.
+ */
+
+int socketWrite(int sid, char *buf, int bufsize)
+{
+ socket_t *sp;
+ ringq_t *rq;
+ int len, bytesWritten, room;
+
+ a_assert(buf);
+ a_assert(bufsize >= 0);
+
+ if ((sp = socketPtr(sid)) == NULL) {
+ return -1;
+ }
+
+/*
+ * Loop adding as much data to the output ringq as we can absorb. Initiate a
+ * flush when the ringq is too full and continue. Block in socketFlush if the
+ * socket is in blocking mode.
+ */
+ rq = &sp->outBuf;
+ for (bytesWritten = 0; bufsize > 0; ) {
+ if ((room = ringqPutBlkMax(rq)) == 0) {
+ if (socketFlush(sid) < 0) {
+ return -1;
+ }
+ if ((room = ringqPutBlkMax(rq)) == 0) {
+ if (sp->flags & SOCKET_BLOCK) {
+#if (defined (WIN) || defined (CE))
+ int errCode;
+ if (! socketWaitForEvent(sp, FD_WRITE | SOCKET_WRITABLE,
+ &errCode)) {
+ return -1;
+ }
+#endif
+ continue;
+ }
+ break;
+ }
+ continue;
+ }
+ len = min(room, bufsize);
+ ringqPutBlk(rq, (unsigned char *) buf, len);
+ bytesWritten += len;
+ bufsize -= len;
+ buf += len;
+ }
+ return bytesWritten;
+}
+
+/******************************************************************************/
+/*
+ * Write a string to a socket
+ */
+
+int socketWriteString(int sid, char_t *buf)
+{
+ #ifdef UNICODE
+ char *byteBuf;
+ int r, len;
+
+ len = gstrlen(buf);
+ byteBuf = ballocUniToAsc(buf, len);
+ r = socketWrite(sid, byteBuf, len);
+ bfreeSafe(B_L, byteBuf);
+ return r;
+ #else
+ return socketWrite(sid, buf, strlen(buf));
+ #endif /* UNICODE */
+}
+
+/******************************************************************************/
+/*
+ * Read from a socket. Return the number of bytes read if successful. This
+ * may be less than the requested "bufsize" and may be zero. Return -1 for
+ * errors. Return 0 for EOF. Otherwise return the number of bytes read.
+ * If this routine returns zero it indicates an EOF condition.
+ * which can be verified with socketEof()
+
+ * Note: this ignores the line buffer, so a previous socketGets
+ * which read a partial line may cause a subsequent socketRead to miss some
+ * data. This routine may block if the socket is in blocking mode.
+ *
+ */
+
+int socketRead(int sid, char *buf, int bufsize)
+{
+ socket_t *sp;
+ ringq_t *rq;
+ int len, room, errCode, bytesRead;
+
+ a_assert(buf);
+ a_assert(bufsize > 0);
+
+ if ((sp = socketPtr(sid)) == NULL) {
+ return -1;
+ }
+
+ if (sp->flags & SOCKET_EOF) {
+ return 0;
+ }
+
+ rq = &sp->inBuf;
+ for (bytesRead = 0; bufsize > 0; ) {
+ len = min(ringqLen(rq), bufsize);
+ if (len <= 0) {
+/*
+ * if blocking mode and already have data, exit now or it may block
+ * forever.
+ */
+ if ((sp->flags & SOCKET_BLOCK) &&
+ (bytesRead > 0)) {
+ break;
+ }
+/*
+ * This flush is critical for readers of datagram packets. If the
+ * buffer is not big enough to read the whole datagram in one hit,
+ * the recvfrom call will fail.
+ */
+ ringqFlush(rq);
+ room = ringqPutBlkMax(rq);
+ len = socketGetInput(sid, (char *) rq->endp, room, &errCode);
+ if (len < 0) {
+ if (errCode == EWOULDBLOCK) {
+ if ((sp->flags & SOCKET_BLOCK) &&
+ (bytesRead == 0)) {
+ continue;
+ }
+ if (bytesRead >= 0) {
+ return bytesRead;
+ }
+ }
+ return -1;
+
+ } else if (len == 0) {
+/*
+ * If bytesRead is 0, this is EOF since socketRead should never
+ * be called unless there is data yet to be read. Set the flag.
+ * Then pass back the number of bytes read.
+ */
+ if (bytesRead == 0) {
+ sp->flags |= SOCKET_EOF;
+ }
+ return bytesRead;
+ }
+ ringqPutBlkAdj(rq, len);
+ len = min(len, bufsize);
+ }
+ memcpy(&buf[bytesRead], rq->servp, len);
+ ringqGetBlkAdj(rq, len);
+ bufsize -= len;
+ bytesRead += len;
+ }
+ return bytesRead;
+}
+
+/******************************************************************************/
+/*
+ * Get a string from a socket. This returns data in *buf in a malloced string
+ * after trimming the '\n'. If there is zero bytes returned, *buf will be set
+ * to NULL. If doing non-blocking I/O, it returns -1 for error, EOF or when
+ * no complete line yet read. If doing blocking I/O, it will block until an
+ * entire line is read. If a partial line is read socketInputBuffered or
+ * socketEof can be used to distinguish between EOF and partial line still
+ * buffered. This routine eats and ignores carriage returns.
+ */
+
+int socketGets(int sid, char_t **buf)
+{
+ socket_t *sp;
+ ringq_t *lq;
+ char c;
+ int rc, len;
+
+ a_assert(buf);
+ *buf = NULL;
+
+ if ((sp = socketPtr(sid)) == NULL) {
+ return -1;
+ }
+ lq = &sp->lineBuf;
+
+ while (1) {
+
+ if ((rc = socketRead(sid, &c, 1)) < 0) {
+ return rc;
+ }
+
+ if (rc == 0) {
+/*
+ * If there is a partial line and we are at EOF, pretend we saw a '\n'
+ */
+ if (ringqLen(lq) > 0 && (sp->flags & SOCKET_EOF)) {
+ c = '\n';
+ } else {
+ return -1;
+ }
+ }
+/*
+ * If a newline is seen, return the data excluding the new line to the
+ * caller. If carriage return is seen, just eat it.
+ */
+ if (c == '\n') {
+ len = ringqLen(lq);
+ if (len > 0) {
+ *buf = ballocAscToUni((char *)lq->servp, len);
+ } else {
+ *buf = NULL;
+ }
+ ringqFlush(lq);
+ return len;
+
+ } else if (c == '\r') {
+ continue;
+ }
+ ringqPutcA(lq, c);
+ }
+ return 0;
+}
+
+/******************************************************************************/
+/*
+ * Flush the socket. Block if the socket is in blocking mode.
+ * This will return -1 on errors and 0 if successful.
+ */
+
+int socketFlush(int sid)
+{
+ socket_t *sp;
+ ringq_t *rq;
+ int len, bytesWritten, errCode;
+
+ if ((sp = socketPtr(sid)) == NULL) {
+ return -1;
+ }
+ rq = &sp->outBuf;
+
+/*
+ * Set the background flushing flag which socketEventProc will check to
+ * continue the flush.
+ */
+ if (! (sp->flags & SOCKET_BLOCK)) {
+ sp->flags |= SOCKET_FLUSHING;
+ }
+
+/*
+ * Break from loop if not blocking after initiating output. If we are blocking
+ * we wait for a write event.
+ */
+ while (ringqLen(rq) > 0) {
+ len = ringqGetBlkMax(&sp->outBuf);
+ bytesWritten = socketDoOutput(sp, (char*) rq->servp, len, &errCode);
+ if (bytesWritten < 0) {
+ if (errCode == EINTR) {
+ continue;
+ } else if (errCode == EWOULDBLOCK || errCode == EAGAIN) {
+#if (defined (WIN) || defined (CE))
+ if (sp->flags & SOCKET_BLOCK) {
+ int errCode;
+ if (! socketWaitForEvent(sp, FD_WRITE | SOCKET_WRITABLE,
+ &errCode)) {
+ return -1;
+ }
+ continue;
+ }
+#endif
+/*
+ * Ensure we get a FD_WRITE message when the socket can absorb
+ * more data (non-blocking only.) Store the user's mask if we
+ * haven't done it already.
+ */
+ if (sp->saveMask < 0 ) {
+ sp->saveMask = sp->handlerMask;
+ socketRegisterInterest(sp,
+ sp->handlerMask | SOCKET_WRITABLE);
+ }
+ return 0;
+ }
+ return -1;
+ }
+ ringqGetBlkAdj(rq, bytesWritten);
+ }
+/*
+ * If the buffer is empty, reset the ringq pointers to point to the start
+ * of the buffer. This is essential to ensure that datagrams get written
+ * in one single I/O operation.
+ */
+ if (ringqLen(rq) == 0) {
+ ringqFlush(rq);
+ }
+/*
+ * Restore the users mask if it was saved by the non-blocking code above.
+ * Note: saveMask = -1 if empty. socketRegisterInterest will set handlerMask
+ */
+ if (sp->saveMask >= 0) {
+ socketRegisterInterest(sp, sp->saveMask);
+ sp->saveMask = -1;
+ }
+ sp->flags &= ~SOCKET_FLUSHING;
+ return 0;
+}
+
+/******************************************************************************/
+/*
+ * Return the count of input characters buffered. We look at both the line
+ * buffer and the input (raw) buffer. Return -1 on error or EOF.
+ */
+
+int socketInputBuffered(int sid)
+{
+ socket_t *sp;
+
+ if ((sp = socketPtr(sid)) == NULL) {
+ return -1;
+ }
+ if (socketEof(sid)) {
+ return -1;
+ }
+ return ringqLen(&sp->lineBuf) + ringqLen(&sp->inBuf);
+}
+
+/******************************************************************************/
+/*
+ * Return true if EOF
+ */
+
+int socketEof(int sid)
+{
+ socket_t *sp;
+
+ if ((sp = socketPtr(sid)) == NULL) {
+ return -1;
+ }
+ return sp->flags & SOCKET_EOF;
+}
+
+/******************************************************************************/
+/*
+ * Return the number of bytes the socket can absorb without blocking
+ */
+
+int socketCanWrite(int sid)
+{
+ socket_t *sp;
+
+ if ((sp = socketPtr(sid)) == NULL) {
+ return -1;
+ }
+ return sp->outBuf.buflen - ringqLen(&sp->outBuf) - 1;
+}
+
+/******************************************************************************/
+/*
+ * Add one to allow the user to write exactly SOCKET_BUFSIZ
+ */
+
+void socketSetBufferSize(int sid, int in, int line, int out)
+{
+ socket_t *sp;
+
+ if ((sp = socketPtr(sid)) == NULL) {
+ return;
+ }
+
+ if (in >= 0) {
+ ringqClose(&sp->inBuf);
+ in++;
+ ringqOpen(&sp->inBuf, in, in);
+ }
+
+ if (line >= 0) {
+ ringqClose(&sp->lineBuf);
+ line++;
+ ringqOpen(&sp->lineBuf, line, line);
+ }
+
+ if (out >= 0) {
+ ringqClose(&sp->outBuf);
+ out++;
+ ringqOpen(&sp->outBuf, out, out);
+ }
+}
+
+/******************************************************************************/
+/*
+ * Create a user handler for this socket. The handler called whenever there
+ * is an event of interest as defined by handlerMask (SOCKET_READABLE, ...)
+ */
+
+void socketCreateHandler(int sid, int handlerMask, socketHandler_t handler,
+ int data)
+{
+ socket_t *sp;
+
+ if ((sp = socketPtr(sid)) == NULL) {
+ return;
+ }
+ sp->handler = handler;
+ sp->handler_data = data;
+ socketRegisterInterest(sp, handlerMask);
+}
+
+/******************************************************************************/
+/*
+ * Delete a handler
+ */
+
+void socketDeleteHandler(int sid)
+{
+ socket_t *sp;
+
+ if ((sp = socketPtr(sid)) == NULL) {
+ return;
+ }
+ sp->handler = NULL;
+ socketRegisterInterest(sp, 0);
+}
+
+/******************************************************************************/
+/*
+ * Socket output procedure. Return -1 on errors otherwise return the number
+ * of bytes written.
+ */
+
+static int socketDoOutput(socket_t *sp, char *buf, int toWrite, int *errCode)
+{
+ struct sockaddr_in server;
+ int bytes;
+
+ a_assert(sp);
+ a_assert(buf);
+ a_assert(toWrite > 0);
+ a_assert(errCode);
+
+ *errCode = 0;
+
+#if (defined (WIN) || defined (CE))
+ if ((sp->flags & SOCKET_ASYNC)
+ && ! socketWaitForEvent(sp, FD_CONNECT, errCode)) {
+ return -1;
+ }
+#endif
+
+/*
+ * Write the data
+ */
+ if (sp->flags & SOCKET_BROADCAST) {
+ server.sin_family = AF_INET;
+#if (defined (UEMF) || defined (LITTLEFOOT))
+ server.sin_addr.s_addr = INADDR_BROADCAST;
+#else
+ server.sin_addr.s_addr = inet_addr(basicGetBroadcastAddress());
+#endif
+ server.sin_port = htons((short)(sp->port & 0xFFFF));
+ if ((bytes = sendto(sp->sock, buf, toWrite, 0,
+ (struct sockaddr *) &server, sizeof(server))) < 0) {
+ bytes = tryAlternateSendTo(sp->sock, buf, toWrite, 0,
+ (struct sockaddr *) &server);
+ }
+ } else if (sp->flags & SOCKET_DATAGRAM) {
+ server.sin_family = AF_INET;
+ server.sin_addr.s_addr = inet_addr(sp->host);
+ server.sin_port = htons((short)(sp->port & 0xFFFF));
+ bytes = sendto(sp->sock, buf, toWrite, 0,
+ (struct sockaddr *) &server, sizeof(server));
+
+ } else {
+ bytes = send(sp->sock, buf, toWrite, 0);
+ }
+
+ if (bytes < 0) {
+ *errCode = socketGetError();
+#if (defined (WIN) || defined (CE))
+ sp->currentEvents &= ~FD_WRITE;
+#endif
+
+ return -1;
+
+ } else if (bytes == 0 && bytes != toWrite) {
+ *errCode = EWOULDBLOCK;
+#if (defined (WIN) || defined (CE))
+ sp->currentEvents &= ~FD_WRITE;
+#endif
+ return -1;
+ }
+
+/*
+ * Ensure we get to write some more data real soon if the socket can absorb
+ * more data
+ */
+#ifndef UEMF
+#ifdef WIN
+ if (sp->interestEvents & FD_WRITE) {
+ emfTime_t blockTime = { 0, 0 };
+ emfSetMaxBlockTime(&blockTime);
+ }
+#endif /* WIN */
+#endif
+ return bytes;
+}
+
+/******************************************************************************/
+/*
+ * If the sendto failed, swap the first two bytes in the
+ * sockaddr structure. This is a kludge due to a change in
+ * VxWorks between versions 5.3 and 5.4, but we want the
+ * product to run on either.
+ */
+static int tryAlternateSendTo(int sock, char *buf, int toWrite, int i,
+ struct sockaddr *server)
+{
+#ifdef VXWORKS
+ char *ptr;
+
+ ptr = (char *)server;
+ *ptr = *(ptr+1);
+ *(ptr+1) = 0;
+ return sendto(sock, buf, toWrite, i, server, sizeof(struct sockaddr));
+#else
+ return -1;
+#endif /* VXWORKS */
+}
+
+/******************************************************************************/
+/*
+ * Allocate a new socket structure
+ */
+
+int socketAlloc(char *host, int port, socketAccept_t accept, int flags)
+{
+ socket_t *sp;
+ int sid;
+
+ if ((sid = hAllocEntry((void***) &socketList, &socketMax,
+ sizeof(socket_t))) < 0) {
+ return -1;
+ }
+ sp = socketList[sid];
+
+ sp->sid = sid;
+ sp->accept = accept;
+ sp->port = port;
+ sp->fileHandle = -1;
+ sp->saveMask = -1;
+
+ if (host) {
+ strncpy(sp->host, host, sizeof(sp->host));
+ }
+
+/*
+ * Preserve only specified flags from the callers open
+ */
+ a_assert((flags & ~(SOCKET_BROADCAST|SOCKET_DATAGRAM|SOCKET_BLOCK|
+ SOCKET_LISTENING)) == 0);
+ sp->flags = flags & (SOCKET_BROADCAST | SOCKET_DATAGRAM | SOCKET_BLOCK|
+ SOCKET_LISTENING);
+
+/*
+ * Add one to allow the user to write exactly SOCKET_BUFSIZ
+ */
+ ringqOpen(&sp->inBuf, SOCKET_BUFSIZ, SOCKET_BUFSIZ);
+ ringqOpen(&sp->outBuf, SOCKET_BUFSIZ + 1, SOCKET_BUFSIZ + 1);
+ ringqOpen(&sp->lineBuf, SOCKET_BUFSIZ, -1);
+
+ return sid;
+}
+
+/******************************************************************************/
+/*
+ * Free a socket structure
+ */
+
+void socketFree(int sid)
+{
+ socket_t *sp;
+ char_t buf[256];
+ int i;
+
+ if ((sp = socketPtr(sid)) == NULL) {
+ return;
+ }
+
+/*
+ * To close a socket, remove any registered interests, set it to
+ * non-blocking so that the recv which follows won't block, do a
+ * shutdown on it so peers on the other end will receive a FIN,
+ * then read any data not yet retrieved from the receive buffer,
+ * and finally close it. If these steps are not all performed
+ * RESETs may be sent to the other end causing problems.
+ */
+ socketRegisterInterest(sp, 0);
+ if (sp->sock >= 0) {
+ socketSetBlock(sid, 0);
+ if (shutdown(sp->sock, 1) >= 0) {
+ recv(sp->sock, buf, sizeof(buf), 0);
+ }
+#if (defined (WIN) || defined (CE))
+ closesocket(sp->sock);
+#else
+ close(sp->sock);
+#endif
+ }
+
+ ringqClose(&sp->inBuf);
+ ringqClose(&sp->outBuf);
+ ringqClose(&sp->lineBuf);
+
+ bfree(B_L, sp);
+ socketMax = hFree((void***) &socketList, sid);
+
+/*
+ * Calculate the new highest socket number
+ */
+ socketHighestFd = -1;
+ for (i = 0; i < socketMax; i++) {
+ if ((sp = socketList[i]) == NULL) {
+ continue;
+ }
+ socketHighestFd = max(socketHighestFd, sp->sock);
+ }
+}
+
+/******************************************************************************/
+/*
+ * Validate a socket handle
+ */
+
+socket_t *socketPtr(int sid)
+{
+ if (sid < 0 || sid >= socketMax || socketList[sid] == NULL) {
+ a_assert(NULL);
+ errno = EBADF;
+ return NULL;
+ }
+
+ a_assert(socketList[sid]);
+ return socketList[sid];
+}
+
+/******************************************************************************/
+/*
+ * Get the operating system error code
+ */
+
+int socketGetError()
+{
+#if (defined (WIN) || defined (CE))
+ switch (WSAGetLastError()) {
+ case WSAEWOULDBLOCK:
+ return EWOULDBLOCK;
+ case WSAECONNRESET:
+ return ECONNRESET;
+ case WSAENETDOWN:
+ return ENETDOWN;
+ case WSAEPROCLIM:
+ return EAGAIN;
+ case WSAEINTR:
+ return EINTR;
+ default:
+ return EINVAL;
+ }
+#else
+ return errno;
+#endif
+}
+
+/******************************************************************************/
+/*
+ * Return the underlying socket handle
+ */
+
+int socketGetHandle(int sid)
+{
+ socket_t *sp;
+
+ if ((sp = socketPtr(sid)) == NULL) {
+ return -1;
+ }
+ return sp->sock;
+}
+
+/******************************************************************************/
+/*
+ * Get blocking mode
+ */
+
+int socketGetBlock(int sid)
+{
+ socket_t *sp;
+
+ if ((sp = socketPtr(sid)) == NULL) {
+ a_assert(0);
+ return 0;
+ }
+ return (sp->flags & SOCKET_BLOCK);
+}
+
+/******************************************************************************/
+/*
+ * Get mode
+ */
+
+int socketGetMode(int sid)
+{
+ socket_t *sp;
+
+ if ((sp = socketPtr(sid)) == NULL) {
+ a_assert(0);
+ return 0;
+ }
+ return sp->flags;
+}
+
+/******************************************************************************/
+/*
+ * Set mode
+ */
+
+void socketSetMode(int sid, int mode)
+{
+ socket_t *sp;
+
+ if ((sp = socketPtr(sid)) == NULL) {
+ a_assert(0);
+ return;
+ }
+ sp->flags = mode;
+}
+
+/******************************************************************************/
+/*
+ * Get port.
+ */
+
+int socketGetPort(int sid)
+{
+ socket_t *sp;
+
+ if ((sp = socketPtr(sid)) == NULL) {
+ return -1;
+ }
+ return sp->port;
+}
+
+/******************************************************************************/
+
diff --git a/cleopatre/application/spidgoahead/sockGen.c b/cleopatre/application/spidgoahead/sockGen.c
new file mode 100644
index 0000000000..b72cb4ec79
--- /dev/null
+++ b/cleopatre/application/spidgoahead/sockGen.c
@@ -0,0 +1,1046 @@
+
+/*
+ * sockGen.c -- Posix Socket support module for general posix use
+ *
+ * Copyright (c) GoAhead Software Inc., 1995-2000. All Rights Reserved.
+ *
+ * $Id: sockGen.c,v 1.6 2003/04/11 18:00:12 bporter Exp $
+ */
+
+/******************************** Description *********************************/
+
+/*
+ * Posix Socket Module. This supports blocking and non-blocking buffered
+ * socket I/O.
+ */
+
+#if (!defined (WIN) || defined (LITTLEFOOT) || defined (WEBS))
+
+/********************************** Includes **********************************/
+#ifndef CE
+#include <errno.h>
+#include <fcntl.h>
+#include <string.h>
+#include <stdlib.h>
+#endif
+
+#ifdef UEMF
+ #include "uemf.h"
+#else
+ #include <socket.h>
+ #include <types.h>
+ #include <unistd.h>
+ #include "emfInternal.h"
+#endif
+
+#ifdef VXWORKS
+ #include <hostLib.h>
+#endif
+
+/************************************ Locals **********************************/
+
+extern socket_t **socketList; /* List of open sockets */
+extern int socketMax; /* Maximum size of socket */
+extern int socketHighestFd; /* Highest socket fd opened */
+static int socketOpenCount = 0; /* Number of task using sockets */
+
+/***************************** Forward Declarations ***************************/
+
+static void socketAccept(socket_t *sp);
+static int socketDoEvent(socket_t *sp);
+static int tryAlternateConnect(int sock, struct sockaddr *sockaddr);
+
+/*********************************** Code *************************************/
+/*
+ * Open socket module
+ */
+
+int socketOpen()
+{
+#if (defined (CE) || defined (WIN))
+ WSADATA wsaData;
+#endif
+
+ if (++socketOpenCount > 1) {
+ return 0;
+ }
+
+#if (defined (CE) || defined (WIN))
+ if (WSAStartup(MAKEWORD(1,1), &wsaData) != 0) {
+ return -1;
+ }
+ if (wsaData.wVersion != MAKEWORD(1,1)) {
+ WSACleanup();
+ return -1;
+ }
+#endif
+
+ socketList = NULL;
+ socketMax = 0;
+ socketHighestFd = -1;
+
+ return 0;
+}
+
+/******************************************************************************/
+/*
+ * Close the socket module, by closing all open connections
+ */
+
+void socketClose()
+{
+ int i;
+
+ if (--socketOpenCount <= 0) {
+ for (i = socketMax; i >= 0; i--) {
+ if (socketList && socketList[i]) {
+ socketCloseConnection(i);
+ }
+ }
+ socketOpenCount = 0;
+ }
+}
+
+/******************************************************************************/
+/*
+ * Open a client or server socket. Host is NULL if we want server capability.
+ */
+
+int socketOpenConnection(char *host, int port, socketAccept_t accept, int flags)
+{
+#if (!defined (NO_GETHOSTBYNAME) && !defined (VXWORKS))
+ struct hostent *hostent; /* Host database entry */
+#endif /* ! (NO_GETHOSTBYNAME || VXWORKS) */
+ socket_t *sp;
+ struct sockaddr_in sockaddr;
+ int sid, bcast, dgram, rc;
+
+ if (port > SOCKET_PORT_MAX) {
+ return -1;
+ }
+/*
+ * Allocate a socket structure
+ */
+ if ((sid = socketAlloc(host, port, accept, flags)) < 0) {
+ return -1;
+ }
+ sp = socketList[sid];
+ a_assert(sp);
+
+/*
+ * Create the socket address structure
+ */
+ memset((char *) &sockaddr, '\0', sizeof(struct sockaddr_in));
+ sockaddr.sin_family = AF_INET;
+ sockaddr.sin_port = htons((short) (port & 0xFFFF));
+
+ if (host == NULL) {
+ sockaddr.sin_addr.s_addr = INADDR_ANY;
+ } else {
+ sockaddr.sin_addr.s_addr = inet_addr(host);
+ if (sockaddr.sin_addr.s_addr == INADDR_NONE) {
+/*
+ * If the OS does not support gethostbyname functionality, the macro:
+ * NO_GETHOSTBYNAME should be defined to skip the use of gethostbyname.
+ * Unfortunatly there is no easy way to recover, the following code
+ * simply uses the basicGetHost IP for the sockaddr.
+ */
+
+#ifdef NO_GETHOSTBYNAME
+ if (strcmp(host, basicGetHost()) == 0) {
+ sockaddr.sin_addr.s_addr = inet_addr(basicGetAddress());
+ }
+ if (sockaddr.sin_addr.s_addr == INADDR_NONE) {
+ socketFree(sid);
+ return -1;
+ }
+#elif (defined (VXWORKS))
+ sockaddr.sin_addr.s_addr = (unsigned long) hostGetByName(host);
+ if (sockaddr.sin_addr.s_addr == NULL) {
+ errno = ENXIO;
+ socketFree(sid);
+ return -1;
+ }
+#else
+ hostent = gethostbyname(host);
+ if (hostent != NULL) {
+ memcpy((char *) &sockaddr.sin_addr,
+ (char *) hostent->h_addr_list[0],
+ (size_t) hostent->h_length);
+ } else {
+ char *asciiAddress;
+ char_t *address;
+
+ address = basicGetAddress();
+ asciiAddress = ballocUniToAsc(address, gstrlen(address));
+ sockaddr.sin_addr.s_addr = inet_addr(asciiAddress);
+ bfree(B_L, asciiAddress);
+ if (sockaddr.sin_addr.s_addr == INADDR_NONE) {
+ errno = ENXIO;
+ socketFree(sid);
+ return -1;
+ }
+ }
+#endif /* (NO_GETHOSTBYNAME || VXWORKS) */
+ }
+ }
+
+ bcast = sp->flags & SOCKET_BROADCAST;
+ if (bcast) {
+ sp->flags |= SOCKET_DATAGRAM;
+ }
+ dgram = sp->flags & SOCKET_DATAGRAM;
+
+/*
+ * Create the socket. Support for datagram sockets. Set the close on
+ * exec flag so children don't inherit the socket.
+ */
+ sp->sock = socket(AF_INET, dgram ? SOCK_DGRAM: SOCK_STREAM, 0);
+ if (sp->sock < 0) {
+ socketFree(sid);
+ return -1;
+ }
+#ifndef __NO_FCNTL
+ fcntl(sp->sock, F_SETFD, FD_CLOEXEC);
+#endif
+ socketHighestFd = max(socketHighestFd, sp->sock);
+
+/*
+ * If broadcast, we need to turn on broadcast capability.
+ */
+ if (bcast) {
+ int broadcastFlag = 1;
+ if (setsockopt(sp->sock, SOL_SOCKET, SO_BROADCAST,
+ (char *) &broadcastFlag, sizeof(broadcastFlag)) < 0) {
+ socketFree(sid);
+ return -1;
+ }
+ }
+
+/*
+ * Host is set if we are the client
+ */
+ if (host) {
+/*
+ * Connect to the remote server in blocking mode, then go into
+ * non-blocking mode if desired.
+ */
+ if (!dgram) {
+ if (! (sp->flags & SOCKET_BLOCK)) {
+/*
+ * sockGen.c is only used for Windows products when blocking
+ * connects are expected. This applies to FieldUpgrader
+ * agents and open source webserver connectws. Therefore the
+ * asynchronous connect code here is not compiled.
+ */
+#if (defined (WIN) || defined (CE)) && (!defined (LITTLEFOOT) && !defined (WEBS))
+ int flag;
+
+ sp->flags |= SOCKET_ASYNC;
+/*
+ * Set to non-blocking for an async connect
+ */
+ flag = 1;
+ if (ioctlsocket(sp->sock, FIONBIO, &flag) == SOCKET_ERROR) {
+ socketFree(sid);
+ return -1;
+ }
+#else
+ socketSetBlock(sid, 1);
+#endif /* #if (WIN || CE) && !(LITTLEFOOT || WEBS) */
+
+ }
+ if ((rc = connect(sp->sock, (struct sockaddr *) &sockaddr,
+ sizeof(sockaddr))) < 0 &&
+ (rc = tryAlternateConnect(sp->sock,
+ (struct sockaddr *) &sockaddr)) < 0) {
+#if (defined (WIN) || defined (CE))
+ if (socketGetError() != EWOULDBLOCK) {
+ socketFree(sid);
+ return -1;
+ }
+#else
+ socketFree(sid);
+ return -1;
+
+#endif /* WIN || CE */
+
+ }
+ }
+ } else {
+/*
+ * Bind to the socket endpoint and the call listen() to start listening
+ */
+ rc = 1;
+ setsockopt(sp->sock, SOL_SOCKET, SO_REUSEADDR, (char *)&rc, sizeof(rc));
+ if (bind(sp->sock, (struct sockaddr *) &sockaddr,
+ sizeof(sockaddr)) < 0) {
+ socketFree(sid);
+ return -1;
+ }
+
+ if (! dgram) {
+ if (listen(sp->sock, SOMAXCONN) < 0) {
+ socketFree(sid);
+ return -1;
+ }
+#ifndef UEMF
+ sp->fileHandle = emfCreateFileHandler(sp->sock, SOCKET_READABLE,
+ (emfFileProc *) socketAccept, (void *) sp);
+#else
+ sp->flags |= SOCKET_LISTENING;
+#endif
+ }
+ sp->handlerMask |= SOCKET_READABLE;
+ }
+
+/*
+ * Set the blocking mode
+ */
+
+ if (flags & SOCKET_BLOCK) {
+ socketSetBlock(sid, 1);
+ } else {
+ socketSetBlock(sid, 0);
+ }
+ return sid;
+}
+
+
+/******************************************************************************/
+/*
+ * If the connection failed, swap the first two bytes in the
+ * sockaddr structure. This is a kludge due to a change in
+ * VxWorks between versions 5.3 and 5.4, but we want the
+ * product to run on either.
+ */
+
+static int tryAlternateConnect(int sock, struct sockaddr *sockaddr)
+{
+#ifdef VXWORKS
+ char *ptr;
+
+ ptr = (char *)sockaddr;
+ *ptr = *(ptr+1);
+ *(ptr+1) = 0;
+ return connect(sock, sockaddr, sizeof(struct sockaddr));
+#else
+ return -1;
+#endif /* VXWORKS */
+}
+
+/******************************************************************************/
+/*
+ * Close a socket
+ */
+
+void socketCloseConnection(int sid)
+{
+ socket_t *sp;
+
+ if ((sp = socketPtr(sid)) == NULL) {
+ return;
+ }
+ socketFree(sid);
+}
+
+/******************************************************************************/
+/*
+ * Accept a connection. Called as a callback on incoming connection.
+ */
+
+static void socketAccept(socket_t *sp)
+{
+ struct sockaddr_in addr;
+ socket_t *nsp;
+ size_t len;
+ char *pString;
+ int newSock, nid;
+
+
+#ifdef NW
+ NETINET_DEFINE_CONTEXT;
+#endif
+
+ a_assert(sp);
+
+/*
+ * Accept the connection and prevent inheriting by children (F_SETFD)
+ */
+ len = sizeof(struct sockaddr_in);
+ if ((newSock = accept(sp->sock, (struct sockaddr *) &addr, (int *) &len)) < 0) {
+ return;
+ }
+#ifndef __NO_FCNTL
+ fcntl(newSock, F_SETFD, FD_CLOEXEC);
+#endif
+ socketHighestFd = max(socketHighestFd, newSock);
+
+/*
+ * Create a socket structure and insert into the socket list
+ */
+ nid = socketAlloc(sp->host, sp->port, sp->accept, sp->flags);
+ nsp = socketList[nid];
+ a_assert(nsp);
+ nsp->sock = newSock;
+ nsp->flags &= ~SOCKET_LISTENING;
+
+ if (nsp == NULL) {
+ return;
+ }
+/*
+ * Set the blocking mode before calling the accept callback.
+ */
+
+ socketSetBlock(nid, (nsp->flags & SOCKET_BLOCK) ? 1: 0);
+/*
+ * Call the user accept callback. The user must call socketCreateHandler
+ * to register for further events of interest.
+ */
+ if (sp->accept != NULL) {
+ pString = inet_ntoa(addr.sin_addr);
+ if ((sp->accept)(nid, pString, ntohs(addr.sin_port), sp->sid) < 0) {
+ socketFree(nid);
+ }
+#ifdef VXWORKS
+ free(pString);
+#endif
+ }
+}
+
+/******************************************************************************/
+/*
+ * Get more input from the socket and return in buf.
+ * Returns 0 for EOF, -1 for errors and otherwise the number of bytes read.
+ */
+
+int socketGetInput(int sid, char *buf, int toRead, int *errCode)
+{
+ struct sockaddr_in server;
+ socket_t *sp;
+ int len, bytesRead;
+
+ a_assert(buf);
+ a_assert(errCode);
+
+ *errCode = 0;
+
+ if ((sp = socketPtr(sid)) == NULL) {
+ return -1;
+ }
+
+/*
+ * If we have previously seen an EOF condition, then just return
+ */
+ if (sp->flags & SOCKET_EOF) {
+ return 0;
+ }
+#if ((defined (WIN) || defined (CE)) && (!defined (LITTLEFOOT) && !defined (WEBS)))
+ if ( !(sp->flags & SOCKET_BLOCK)
+ && ! socketWaitForEvent(sp, FD_CONNECT, errCode)) {
+ return -1;
+ }
+#endif
+
+/*
+ * Read the data
+ */
+ if (sp->flags & SOCKET_DATAGRAM) {
+ len = sizeof(server);
+ bytesRead = recvfrom(sp->sock, buf, toRead, 0,
+ (struct sockaddr *) &server, &len);
+ } else {
+ bytesRead = recv(sp->sock, buf, toRead, 0);
+ }
+
+ /*
+ * BUG 01865 -- CPU utilization hangs on Windows. The original code used
+ * the 'errno' global variable, which is not set by the winsock functions
+ * as it is under *nix platforms. We use the platform independent
+ * socketGetError() function instead, which does handle Windows correctly.
+ * Other, *nix compatible platforms should work as well, since on those
+ * platforms, socketGetError() just returns the value of errno.
+ * Thanks to Jonathan Burgoyne for the fix.
+ */
+ if (bytesRead < 0)
+ {
+ *errCode = socketGetError();
+ if (*errCode == ECONNRESET)
+ {
+ sp->flags |= SOCKET_CONNRESET;
+ return 0;
+ }
+ return -1;
+ }
+ return bytesRead;
+}
+
+/******************************************************************************/
+/*
+ * Process an event on the event queue
+ */
+
+#ifndef UEMF
+
+static int socketEventProc(void *data, int mask)
+{
+ socket_t *sp;
+ ringq_t *rq;
+ int sid;
+
+ sid = (int) data;
+
+ a_assert(sid >= 0 && sid < socketMax);
+ a_assert(socketList[sid]);
+
+ if ((sp = socketPtr(sid)) == NULL) {
+ return 1;
+ }
+
+/*
+ * If now writable and flushing in the background, continue flushing
+ */
+ if (mask & SOCKET_WRITABLE) {
+ if (sp->flags & SOCKET_FLUSHING) {
+ rq = &sp->outBuf;
+ if (ringqLen(rq) > 0) {
+ socketFlush(sp->sid);
+ } else {
+ sp->flags &= ~SOCKET_FLUSHING;
+ }
+ }
+ }
+
+/*
+ * Now invoke the users socket handler. NOTE: the handler may delete the
+ * socket, so we must be very careful after calling the handler.
+ */
+ if (sp->handler && (sp->handlerMask & mask)) {
+ (sp->handler)(sid, mask & sp->handlerMask, sp->handler_data);
+ }
+ if (socketList && sid < socketMax && socketList[sid] == sp) {
+ socketRegisterInterest(sp, sp->handlerMask);
+ }
+ return 1;
+}
+#endif /* ! UEMF */
+
+/******************************************************************************/
+/*
+ * Define the events of interest
+ */
+
+void socketRegisterInterest(socket_t *sp, int handlerMask)
+{
+ a_assert(sp);
+
+ sp->handlerMask = handlerMask;
+#ifndef UEMF
+ if (handlerMask) {
+ sp->fileHandle = emfCreateFileHandler(sp->sock, handlerMask,
+ (emfFileProc *) socketEventProc, (void *) sp->sid);
+ } else {
+ emfDeleteFileHandler(sp->fileHandle);
+ sp->fileHandle = -1;
+ }
+#endif /* ! UEMF */
+}
+
+/******************************************************************************/
+/*
+ * Wait until an event occurs on a socket. Return 1 on success, 0 on failure.
+ * or -1 on exception (UEMF only)
+ */
+
+int socketWaitForEvent(socket_t *sp, int handlerMask, int *errCode)
+{
+ int mask;
+
+ a_assert(sp);
+
+ mask = sp->handlerMask;
+ sp->handlerMask |= handlerMask;
+ while (socketSelect(sp->sid, 1000)) {
+ if (sp->currentEvents & (handlerMask | SOCKET_EXCEPTION)) {
+ break;
+ }
+ }
+ sp->handlerMask = mask;
+ if (sp->currentEvents & SOCKET_EXCEPTION) {
+ return -1;
+ } else if (sp->currentEvents & handlerMask) {
+ return 1;
+ }
+ if (errCode) {
+ *errCode = errno = EWOULDBLOCK;
+ }
+ return 0;
+}
+
+/******************************************************************************/
+/*
+ * Return TRUE if there is a socket with an event ready to process,
+ */
+
+int socketReady(int sid)
+{
+ socket_t *sp;
+ int all;
+
+ all = 0;
+ if (sid < 0) {
+ sid = 0;
+ all = 1;
+ }
+
+ for (; sid < socketMax; sid++) {
+ if ((sp = socketList[sid]) == NULL) {
+ if (! all) {
+ break;
+ } else {
+ continue;
+ }
+ }
+ if (sp->flags & SOCKET_CONNRESET) {
+ socketCloseConnection(sid);
+ return 0;
+ }
+ if (sp->currentEvents & sp->handlerMask) {
+ return 1;
+ }
+/*
+ * If there is input data, also call select to test for new events
+ */
+ if (sp->handlerMask & SOCKET_READABLE && socketInputBuffered(sid) > 0) {
+ socketSelect(sid, 0);
+ return 1;
+ }
+ if (! all) {
+ break;
+ }
+ }
+ return 0;
+}
+
+/******************************************************************************/
+/*
+ * Wait for a handle to become readable or writable and return a number of
+ * noticed events. Timeout is in milliseconds.
+ */
+
+#if (defined (WIN) || defined (CE) || defined (NW))
+
+int socketSelect(int sid, int timeout)
+{
+ struct timeval tv;
+ socket_t *sp;
+ fd_set readFds, writeFds, exceptFds;
+ int nEvents;
+ int all, socketHighestFd; /* Highest socket fd opened */
+
+ FD_ZERO(&readFds);
+ FD_ZERO(&writeFds);
+ FD_ZERO(&exceptFds);
+ socketHighestFd = -1;
+
+ tv.tv_sec = timeout / 1000;
+ tv.tv_usec = (timeout % 1000) * 1000;
+
+/*
+ * Set the select event masks for events to watch
+ */
+ all = nEvents = 0;
+
+ if (sid < 0) {
+ all++;
+ sid = 0;
+ }
+
+ for (; sid < socketMax; sid++) {
+ if ((sp = socketList[sid]) == NULL) {
+ continue;
+ }
+ a_assert(sp);
+/*
+ * Set the appropriate bit in the ready masks for the sp->sock.
+ */
+ if (sp->handlerMask & SOCKET_READABLE) {
+ FD_SET(sp->sock, &readFds);
+ nEvents++;
+ if (socketInputBuffered(sid) > 0) {
+ tv.tv_sec = 0;
+ tv.tv_usec = 0;
+ }
+ }
+ if (sp->handlerMask & SOCKET_WRITABLE) {
+ FD_SET(sp->sock, &writeFds);
+ nEvents++;
+ }
+ if (sp->handlerMask & SOCKET_EXCEPTION) {
+ FD_SET(sp->sock, &exceptFds);
+ nEvents++;
+ }
+ if (! all) {
+ break;
+ }
+ }
+
+/*
+ * Windows select() fails if no descriptors are set, instead of just sleeping
+ * like other, nice select() calls. So, if WIN, sleep.
+ */
+ if (nEvents == 0) {
+ Sleep(timeout);
+ return 0;
+ }
+
+/*
+ * Wait for the event or a timeout.
+ */
+ nEvents = select(socketHighestFd+1, &readFds, &writeFds, &exceptFds, &tv);
+
+ if (all) {
+ sid = 0;
+ }
+ for (; sid < socketMax; sid++) {
+ if ((sp = socketList[sid]) == NULL) {
+ continue;
+ }
+
+ if (FD_ISSET(sp->sock, &readFds) || socketInputBuffered(sid) > 0) {
+ sp->currentEvents |= SOCKET_READABLE;
+ }
+ if (FD_ISSET(sp->sock, &writeFds)) {
+ sp->currentEvents |= SOCKET_WRITABLE;
+ }
+ if (FD_ISSET(sp->sock, &exceptFds)) {
+ sp->currentEvents |= SOCKET_EXCEPTION;
+ }
+ if (! all) {
+ break;
+ }
+ }
+
+ return nEvents;
+}
+
+#else /* not WIN || CE || NW */
+
+int socketSelect(int sid, int timeout)
+{
+ socket_t *sp;
+ struct timeval tv;
+ fd_mask *readFds, *writeFds, *exceptFds;
+ int all, len, nwords, index, bit, nEvents;
+
+/*
+ * Allocate and zero the select masks
+ */
+ nwords = (socketHighestFd + NFDBITS) / NFDBITS;
+ len = nwords * sizeof(int);
+
+ readFds = balloc(B_L, len);
+ memset(readFds, 0, len);
+ writeFds = balloc(B_L, len);
+ memset(writeFds, 0, len);
+ exceptFds = balloc(B_L, len);
+ memset(exceptFds, 0, len);
+
+ tv.tv_sec = timeout / 1000;
+ tv.tv_usec = (timeout % 1000) * 1000;
+
+/*
+ * Set the select event masks for events to watch
+ */
+ all = nEvents = 0;
+
+ if (sid < 0) {
+ all++;
+ sid = 0;
+ }
+
+ for (; sid < socketMax; sid++) {
+ if ((sp = socketList[sid]) == NULL) {
+ if (all == 0) {
+ break;
+ } else {
+ continue;
+ }
+ }
+ a_assert(sp);
+
+/*
+ * Initialize the ready masks and compute the mask offsets.
+ */
+ index = sp->sock / (NBBY * sizeof(fd_mask));
+ bit = 1 << (sp->sock % (NBBY * sizeof(fd_mask)));
+
+/*
+ * Set the appropriate bit in the ready masks for the sp->sock.
+ */
+ if (sp->handlerMask & SOCKET_READABLE) {
+ readFds[index] |= bit;
+ nEvents++;
+ if (socketInputBuffered(sid) > 0) {
+ tv.tv_sec = 0;
+ tv.tv_usec = 0;
+ }
+ }
+ if (sp->handlerMask & SOCKET_WRITABLE) {
+ writeFds[index] |= bit;
+ nEvents++;
+ }
+ if (sp->handlerMask & SOCKET_EXCEPTION) {
+ exceptFds[index] |= bit;
+ nEvents++;
+ }
+ if (! all) {
+ break;
+ }
+ }
+
+/*
+ * Wait for the event or a timeout. Reset nEvents to be the number of actual
+ * events now.
+ */
+ nEvents = select(socketHighestFd + 1, (fd_set *) readFds,
+ (fd_set *) writeFds, (fd_set *) exceptFds, &tv);
+
+ if (nEvents > 0) {
+ if (all) {
+ sid = 0;
+ }
+ for (; sid < socketMax; sid++) {
+ if ((sp = socketList[sid]) == NULL) {
+ if (all == 0) {
+ break;
+ } else {
+ continue;
+ }
+ }
+
+ index = sp->sock / (NBBY * sizeof(fd_mask));
+ bit = 1 << (sp->sock % (NBBY * sizeof(fd_mask)));
+
+ if (readFds[index] & bit || socketInputBuffered(sid) > 0) {
+ sp->currentEvents |= SOCKET_READABLE;
+ }
+ if (writeFds[index] & bit) {
+ sp->currentEvents |= SOCKET_WRITABLE;
+ }
+ if (exceptFds[index] & bit) {
+ sp->currentEvents |= SOCKET_EXCEPTION;
+ }
+ if (! all) {
+ break;
+ }
+ }
+ }
+
+ bfree(B_L, readFds);
+ bfree(B_L, writeFds);
+ bfree(B_L, exceptFds);
+
+ return nEvents;
+}
+#endif /* WIN || CE */
+
+/******************************************************************************/
+/*
+ * Process socket events
+ */
+
+void socketProcess(int sid)
+{
+ socket_t *sp;
+ int all;
+
+ all = 0;
+ if (sid < 0) {
+ all = 1;
+ sid = 0;
+ }
+/*
+ * Process each socket
+ */
+ for (; sid < socketMax; sid++) {
+ if ((sp = socketList[sid]) == NULL) {
+ if (! all) {
+ break;
+ } else {
+ continue;
+ }
+ }
+ if (socketReady(sid)) {
+ socketDoEvent(sp);
+ }
+ if (! all) {
+ break;
+ }
+ }
+}
+
+/******************************************************************************/
+/*
+ * Process an event on the event queue
+ */
+
+static int socketDoEvent(socket_t *sp)
+{
+ ringq_t *rq;
+ int sid;
+
+ a_assert(sp);
+
+ sid = sp->sid;
+ if (sp->currentEvents & SOCKET_READABLE) {
+ if (sp->flags & SOCKET_LISTENING) {
+ socketAccept(sp);
+ sp->currentEvents = 0;
+ return 1;
+ }
+
+ } else {
+/*
+ * If there is still read data in the buffers, trigger the read handler
+ * NOTE: this may busy spin if the read handler doesn't read the data
+ */
+ if (sp->handlerMask & SOCKET_READABLE && socketInputBuffered(sid) > 0) {
+ sp->currentEvents |= SOCKET_READABLE;
+ }
+ }
+
+
+/*
+ * If now writable and flushing in the background, continue flushing
+ */
+ if (sp->currentEvents & SOCKET_WRITABLE) {
+ if (sp->flags & SOCKET_FLUSHING) {
+ rq = &sp->outBuf;
+ if (ringqLen(rq) > 0) {
+ socketFlush(sp->sid);
+ } else {
+ sp->flags &= ~SOCKET_FLUSHING;
+ }
+ }
+ }
+
+/*
+ * Now invoke the users socket handler. NOTE: the handler may delete the
+ * socket, so we must be very careful after calling the handler.
+ */
+ if (sp->handler && (sp->handlerMask & sp->currentEvents)) {
+ (sp->handler)(sid, sp->handlerMask & sp->currentEvents,
+ sp->handler_data);
+/*
+ * Make sure socket pointer is still valid, then reset the currentEvents.
+ */
+ if (socketList && sid < socketMax && socketList[sid] == sp) {
+ sp->currentEvents = 0;
+ }
+ }
+ return 1;
+}
+
+/******************************************************************************/
+/*
+ * Set the socket blocking mode
+ */
+
+int socketSetBlock(int sid, int on)
+{
+ socket_t *sp;
+ unsigned long flag;
+ int iflag;
+ int oldBlock;
+
+ flag = iflag = !on;
+
+ if ((sp = socketPtr(sid)) == NULL) {
+ a_assert(0);
+ return 0;
+ }
+ oldBlock = (sp->flags & SOCKET_BLOCK);
+ sp->flags &= ~(SOCKET_BLOCK);
+ if (on) {
+ sp->flags |= SOCKET_BLOCK;
+ }
+
+/*
+ * Put the socket into block / non-blocking mode
+ */
+ if (sp->flags & SOCKET_BLOCK) {
+#if (defined (CE) || defined (WIN))
+ ioctlsocket(sp->sock, FIONBIO, &flag);
+#elif (defined (ECOS))
+ int off;
+ off = 0;
+ ioctl(sp->sock, FIONBIO, &off);
+#elif (defined (VXWORKS) || defined (NW))
+ ioctl(sp->sock, FIONBIO, (int)&iflag);
+#else
+ fcntl(sp->sock, F_SETFL, fcntl(sp->sock, F_GETFL) & ~O_NONBLOCK);
+#endif
+
+ } else {
+#if (defined (CE) || defined (WIN))
+ ioctlsocket(sp->sock, FIONBIO, &flag);
+#elif (defined (ECOS))
+ int on;
+ on = 1;
+ ioctl(sp->sock, FIONBIO, &on);
+#elif (defined (VXWORKS) || defined (NW))
+ ioctl(sp->sock, FIONBIO, (int)&iflag);
+#else
+ fcntl(sp->sock, F_SETFL, fcntl(sp->sock, F_GETFL) | O_NONBLOCK);
+#endif
+ }
+ return oldBlock;
+}
+
+/******************************************************************************/
+/*
+ * Return true if a readable socket has buffered data. - not public
+ */
+
+int socketDontBlock()
+{
+ socket_t *sp;
+ int i;
+
+ for (i = 0; i < socketMax; i++) {
+ if ((sp = socketList[i]) == NULL ||
+ (sp->handlerMask & SOCKET_READABLE) == 0) {
+ continue;
+ }
+ if (socketInputBuffered(i) > 0) {
+ return 1;
+ }
+ }
+ return 0;
+}
+
+/******************************************************************************/
+/*
+ * Return true if a particular socket buffered data. - not public
+ */
+
+int socketSockBuffered(int sock)
+{
+ socket_t *sp;
+ int i;
+
+ for (i = 0; i < socketMax; i++) {
+ if ((sp = socketList[i]) == NULL || sp->sock != sock) {
+ continue;
+ }
+ return socketInputBuffered(i);
+ }
+ return 0;
+}
+
+#endif /* (!WIN) | LITTLEFOOT | WEBS */
+
+/******************************************************************************/
+
+
diff --git a/cleopatre/application/spidgoahead/sym.c b/cleopatre/application/spidgoahead/sym.c
new file mode 100644
index 0000000000..88f29c7e8a
--- /dev/null
+++ b/cleopatre/application/spidgoahead/sym.c
@@ -0,0 +1,476 @@
+/*
+ * sym.c -- Symbol Table module
+ *
+ * Copyright (c) GoAhead Software Inc., 1995-2000. All Rights Reserved.
+ *
+ * See the file "license.txt" for usage and redistribution license requirements
+ *
+ * $Id: sym.c,v 1.3 2002/10/24 14:44:50 bporter Exp $
+ */
+
+/******************************** Description *********************************/
+/*
+ * This module implements a highly efficient generic symbol table with
+ * update and access routines. Symbols are simple character strings and
+ * the values they take can be flexible types as defined by value_t.
+ * This modules allows multiple symbol tables to be created.
+ */
+
+/********************************* Includes ***********************************/
+
+#ifdef UEMF
+ #include "uemf.h"
+#else
+ #include "basic/basicInternal.h"
+#endif
+
+/********************************* Defines ************************************/
+
+typedef struct { /* Symbol table descriptor */
+ int inuse; /* Is this entry in use */
+ int hash_size; /* Size of the table below */
+ sym_t **hash_table; /* Allocated at run time */
+} sym_tabent_t;
+
+/********************************* Globals ************************************/
+
+static sym_tabent_t **sym; /* List of symbol tables */
+static int symMax; /* One past the max symbol table */
+static int symOpenCount = 0; /* Count of apps using sym */
+
+static int htIndex; /* Current location in table */
+static sym_t* next; /* Next symbol in iteration */
+
+/**************************** Forward Declarations ****************************/
+
+static int hashIndex(sym_tabent_t *tp, char_t *name);
+static sym_t *hash(sym_tabent_t *tp, char_t *name);
+static int calcPrime(int size);
+
+/*********************************** Code *************************************/
+/*
+ * Open the symbol table subSystem.
+ */
+
+int symSubOpen()
+{
+ if (++symOpenCount == 1) {
+ symMax = 0;
+ sym = NULL;
+ }
+ return 0;
+}
+
+/******************************************************************************/
+/*
+ * Close the symbol table subSystem.
+ */
+
+void symSubClose()
+{
+ if (--symOpenCount <= 0) {
+ symOpenCount = 0;
+ }
+}
+
+/******************************************************************************/
+/*
+ * Create a symbol table.
+ */
+
+sym_fd_t symOpen(int hash_size)
+{
+ sym_fd_t sd;
+ sym_tabent_t *tp;
+
+ a_assert(hash_size > 2);
+
+/*
+ * Create a new handle for this symbol table
+ */
+ if ((sd = hAlloc((void***) &sym)) < 0) {
+ return -1;
+ }
+
+/*
+ * Create a new symbol table structure and zero
+ */
+ if ((tp = (sym_tabent_t*) balloc(B_L, sizeof(sym_tabent_t))) == NULL) {
+ symMax = hFree((void***) &sym, sd);
+ return -1;
+ }
+ memset(tp, 0, sizeof(sym_tabent_t));
+ if (sd >= symMax) {
+ symMax = sd + 1;
+ }
+ a_assert(0 <= sd && sd < symMax);
+ sym[sd] = tp;
+
+/*
+ * Now create the hash table for fast indexing.
+ */
+ tp->hash_size = calcPrime(hash_size);
+ tp->hash_table = (sym_t**) balloc(B_L, tp->hash_size * sizeof(sym_t*));
+ a_assert(tp->hash_table);
+ memset(tp->hash_table, 0, tp->hash_size * sizeof(sym_t*));
+
+ return sd;
+}
+
+/******************************************************************************/
+/*
+ * Close this symbol table. Call a cleanup function to allow the caller
+ * to free resources associated with each symbol table entry.
+ */
+
+void symClose(sym_fd_t sd)
+{
+ sym_tabent_t *tp;
+ sym_t *sp, *forw;
+ int i;
+
+ a_assert(0 <= sd && sd < symMax);
+ tp = sym[sd];
+ a_assert(tp);
+
+/*
+ * Free all symbols in the hash table, then the hash table itself.
+ */
+ for (i = 0; i < tp->hash_size; i++) {
+ for (sp = tp->hash_table[i]; sp; sp = forw) {
+ forw = sp->forw;
+ valueFree(&sp->name);
+ valueFree(&sp->content);
+ bfree(B_L, (void*) sp);
+ sp = forw;
+ }
+ }
+ bfree(B_L, (void*) tp->hash_table);
+
+ symMax = hFree((void***) &sym, sd);
+ bfree(B_L, (void*) tp);
+}
+
+/******************************************************************************/
+/*
+ * Return the first symbol in the hashtable if there is one. This call is used
+ * as the first step in traversing the table. A call to symFirst should be
+ * followed by calls to symNext to get all the rest of the entries.
+ */
+
+sym_t* symFirst(sym_fd_t sd)
+{
+ sym_tabent_t *tp;
+ sym_t *sp, *forw;
+ int i;
+
+ a_assert(0 <= sd && sd < symMax);
+ tp = sym[sd];
+ a_assert(tp);
+
+/*
+ * Find the first symbol in the hashtable and return a pointer to it.
+ */
+ for (i = 0; i < tp->hash_size; i++) {
+ for (sp = tp->hash_table[i]; sp; sp = forw) {
+ forw = sp->forw;
+
+ if (forw == NULL) {
+ htIndex = i + 1;
+ next = tp->hash_table[htIndex];
+ } else {
+ htIndex = i;
+ next = forw;
+ }
+ return sp;
+ }
+ }
+ return NULL;
+}
+
+/******************************************************************************/
+/*
+ * Return the next symbol in the hashtable if there is one. See symFirst.
+ */
+
+sym_t* symNext(sym_fd_t sd)
+{
+ sym_tabent_t *tp;
+ sym_t *sp, *forw;
+ int i;
+
+ a_assert(0 <= sd && sd < symMax);
+ tp = sym[sd];
+ a_assert(tp);
+
+/*
+ * Find the first symbol in the hashtable and return a pointer to it.
+ */
+ for (i = htIndex; i < tp->hash_size; i++) {
+ for (sp = next; sp; sp = forw) {
+ forw = sp->forw;
+
+ if (forw == NULL) {
+ htIndex = i + 1;
+ next = tp->hash_table[htIndex];
+ } else {
+ htIndex = i;
+ next = forw;
+ }
+ return sp;
+ }
+ next = tp->hash_table[i + 1];
+ }
+ return NULL;
+}
+
+/******************************************************************************/
+/*
+ * Lookup a symbol and return a pointer to the symbol entry. If not present
+ * then return a NULL.
+ */
+
+sym_t *symLookup(sym_fd_t sd, char_t *name)
+{
+ sym_tabent_t *tp;
+ sym_t *sp;
+ char_t *cp;
+
+ a_assert(0 <= sd && sd < symMax);
+ if ((tp = sym[sd]) == NULL) {
+ return NULL;
+ }
+
+ if (name == NULL || *name == '\0') {
+ return NULL;
+ }
+
+/*
+ * Do an initial hash and then follow the link chain to find the right entry
+ */
+ for (sp = hash(tp, name); sp; sp = sp->forw) {
+ cp = sp->name.value.string;
+ if (cp[0] == name[0] && gstrcmp(cp, name) == 0) {
+ break;
+ }
+ }
+ return sp;
+}
+
+/******************************************************************************/
+/*
+ * Enter a symbol into the table. If already there, update its value.
+ * Always succeeds if memory available. We allocate a copy of "name" here
+ * so it can be a volatile variable. The value "v" is just a copy of the
+ * passed in value, so it MUST be persistent.
+ */
+
+sym_t *symEnter(sym_fd_t sd, char_t *name, value_t v, int arg)
+{
+ sym_tabent_t *tp;
+ sym_t *sp, *last;
+ char_t *cp;
+ int hindex;
+
+ a_assert(name);
+ a_assert(0 <= sd && sd < symMax);
+ tp = sym[sd];
+ a_assert(tp);
+
+/*
+ * Calculate the first daisy-chain from the hash table. If non-zero, then
+ * we have daisy-chain, so scan it and look for the symbol.
+ */
+ last = NULL;
+ hindex = hashIndex(tp, name);
+ if ((sp = tp->hash_table[hindex]) != NULL) {
+ for (; sp; sp = sp->forw) {
+ cp = sp->name.value.string;
+ if (cp[0] == name[0] && gstrcmp(cp, name) == 0) {
+ break;
+ }
+ last = sp;
+ }
+ if (sp) {
+/*
+ * Found, so update the value
+ * If the caller stores handles which require freeing, they
+ * will be lost here. It is the callers responsibility to free
+ * resources before overwriting existing contents. We will here
+ * free allocated strings which occur due to value_instring().
+ * We should consider providing the cleanup function on the open rather
+ * than the close and then we could call it here and solve the problem.
+ */
+ if (sp->content.valid) {
+ valueFree(&sp->content);
+ }
+ sp->content = v;
+ sp->arg = arg;
+ return sp;
+ }
+/*
+ * Not found so allocate and append to the daisy-chain
+ */
+ sp = (sym_t*) balloc(B_L, sizeof(sym_t));
+ if (sp == NULL) {
+ return NULL;
+ }
+ sp->name = valueString(name, VALUE_ALLOCATE);
+ sp->content = v;
+ sp->forw = (sym_t*) NULL;
+ sp->arg = arg;
+ last->forw = sp;
+
+ } else {
+/*
+ * Daisy chain is empty so we need to start the chain
+ */
+ sp = (sym_t*) balloc(B_L, sizeof(sym_t));
+ if (sp == NULL) {
+ return NULL;
+ }
+ tp->hash_table[hindex] = sp;
+ tp->hash_table[hashIndex(tp, name)] = sp;
+
+ sp->forw = (sym_t*) NULL;
+ sp->content = v;
+ sp->arg = arg;
+ sp->name = valueString(name, VALUE_ALLOCATE);
+ }
+ return sp;
+}
+
+/******************************************************************************/
+/*
+ * Delete a symbol from a table
+ */
+
+int symDelete(sym_fd_t sd, char_t *name)
+{
+ sym_tabent_t *tp;
+ sym_t *sp, *last;
+ char_t *cp;
+ int hindex;
+
+ a_assert(name && *name);
+ a_assert(0 <= sd && sd < symMax);
+ tp = sym[sd];
+ a_assert(tp);
+
+/*
+ * Calculate the first daisy-chain from the hash table. If non-zero, then
+ * we have daisy-chain, so scan it and look for the symbol.
+ */
+ last = NULL;
+ hindex = hashIndex(tp, name);
+ if ((sp = tp->hash_table[hindex]) != NULL) {
+ for ( ; sp; sp = sp->forw) {
+ cp = sp->name.value.string;
+ if (cp[0] == name[0] && gstrcmp(cp, name) == 0) {
+ break;
+ }
+ last = sp;
+ }
+ }
+ if (sp == (sym_t*) NULL) { /* Not Found */
+ return -1;
+ }
+
+/*
+ * Unlink and free the symbol. Last will be set if the element to be deleted
+ * is not first in the chain.
+ */
+ if (last) {
+ last->forw = sp->forw;
+ } else {
+ tp->hash_table[hindex] = sp->forw;
+ }
+ valueFree(&sp->name);
+ valueFree(&sp->content);
+ bfree(B_L, (void*) sp);
+
+ return 0;
+}
+
+/******************************************************************************/
+/*
+ * Hash a symbol and return a pointer to the hash daisy-chain list
+ * All symbols reside on the chain (ie. none stored in the hash table itself)
+ */
+
+static sym_t *hash(sym_tabent_t *tp, char_t *name)
+{
+ a_assert(tp);
+
+ return tp->hash_table[hashIndex(tp, name)];
+}
+
+/******************************************************************************/
+/*
+ * Compute the hash function and return an index into the hash table
+ * We use a basic additive function that is then made modulo the size of the
+ * table.
+ */
+
+static int hashIndex(sym_tabent_t *tp, char_t *name)
+{
+ unsigned int sum;
+ int i;
+
+ a_assert(tp);
+/*
+ * Add in each character shifted up progressively by 7 bits. The shift
+ * amount is rounded so as to not shift too far. It thus cycles with each
+ * new cycle placing character shifted up by one bit.
+ */
+ i = 0;
+ sum = 0;
+ while (*name) {
+ sum += (((int) *name++) << i);
+ i = (i + 7) % (BITS(int) - BITSPERBYTE);
+ }
+ return sum % tp->hash_size;
+}
+
+/******************************************************************************/
+/*
+ * Check if this number is a prime
+ */
+
+static int isPrime(int n)
+{
+ int i, max;
+
+ a_assert(n > 0);
+
+ max = n / 2;
+ for (i = 2; i <= max; i++) {
+ if (n % i == 0) {
+ return 0;
+ }
+ }
+ return 1;
+}
+
+/******************************************************************************/
+/*
+ * Calculate the largest prime smaller than size.
+ */
+
+static int calcPrime(int size)
+{
+ int count;
+
+ a_assert(size > 0);
+
+ for (count = size; count > 0; count--) {
+ if (isPrime(count)) {
+ return count;
+ }
+ }
+ return 1;
+}
+
+/******************************************************************************/
+
+
diff --git a/cleopatre/application/spidgoahead/uemf.c b/cleopatre/application/spidgoahead/uemf.c
new file mode 100644
index 0000000000..598a9b6947
--- /dev/null
+++ b/cleopatre/application/spidgoahead/uemf.c
@@ -0,0 +1,294 @@
+/*
+ * uemf.c -- GoAhead Micro Embedded Management Framework
+ *
+ * Copyright (c) GoAhead Software Inc., 1995-2000. All Rights Reserved.
+ *
+ * See the file "license.txt" for usage and redistribution license requirements
+ *
+ * $Id: uemf.c,v 1.4 2002/10/24 14:44:50 bporter Exp $
+ */
+
+/********************************** Description *******************************/
+
+/*
+ * This module provides compatibility with the full GoAhead EMF.
+ * It is a collection of routines which permits the GoAhead WebServer to
+ * run stand-alone and to also load as a solution pack under the GoAhead EMF.
+ */
+
+/*********************************** Includes *********************************/
+
+#include "uemf.h"
+
+/********************************** Local Data ********************************/
+
+int emfInst; /* Application instance handle */
+
+/****************************** Forward Declarations **************************/
+
+extern void defaultErrorHandler(int etype, char_t *buf);
+static void (*errorHandler)(int etype, char_t *msg) = defaultErrorHandler;
+
+extern void defaultTraceHandler(int level, char_t *buf);
+static void (*traceHandler)(int level, char_t *buf) = defaultTraceHandler;
+
+/************************************* Code ***********************************/
+/*
+ * Error message that doesn't need user attention. Customize this code
+ * to direct error messages to wherever the developer wishes
+ */
+
+void error(E_ARGS_DEC, int etype, char_t *fmt, ...)
+{
+ va_list args;
+ char_t *fmtBuf, *buf;
+
+ va_start(args, fmt);
+ fmtValloc(&fmtBuf, E_MAX_ERROR, fmt, args);
+
+ if (etype == E_LOG) {
+ fmtAlloc(&buf, E_MAX_ERROR, T("%s\n"), fmtBuf);
+/*#ifdef DEV*/
+ } else if (etype == E_ASSERT) {
+ fmtAlloc(&buf, E_MAX_ERROR,
+ T("Assertion %s, failed at %s %d\n"), fmtBuf, E_ARGS);
+/*#endif*/
+ } else if (etype == E_USER) {
+ fmtAlloc(&buf, E_MAX_ERROR, T("%s\n"), fmtBuf);
+ }
+ /*
+ * bugfix -- if etype is not E_LOG, E_ASSERT, or E_USER, the call to
+ * bfreeSafe(B_L, buf) below will fail, because 'buf' is randomly
+ * initialized. To be nice, we format a message saying that this is an
+ * unknown message type, and in doing so give buf a valid value. Thanks
+ * to Simon Byholm.
+ */
+ else {
+ fmtAlloc(&buf, E_MAX_ERROR, T("Unknown error"));
+ }
+ va_end(args);
+
+ bfree(B_L, fmtBuf);
+
+ if (errorHandler) {
+ errorHandler(etype, buf);
+ }
+
+ bfreeSafe(B_L, buf);
+}
+
+/******************************************************************************/
+/*
+ * Replace the default error handler. Return pointer to old error handler.
+ */
+
+void (*errorSetHandler(void (*function)(int etype, char_t *msg))) \
+ (int etype, char_t *msg)
+{
+ void (*oldHandler)(int etype, char_t *buf);
+
+ oldHandler = errorHandler;
+ errorHandler = function;
+ return oldHandler;
+}
+
+/******************************************************************************/
+/*
+ * Trace log. Customize this function to log trace output
+ */
+
+void trace(int level, char_t *fmt, ...)
+{
+ va_list args;
+ char_t *buf;
+
+ va_start(args, fmt);
+ fmtValloc(&buf, VALUE_MAX_STRING, fmt, args);
+
+ if (traceHandler) {
+ traceHandler(level, buf);
+ }
+ bfreeSafe(B_L, buf);
+ va_end(args);
+}
+
+/******************************************************************************/
+/*
+ * Trace log. Customize this function to log trace output
+ */
+
+void traceRaw(char_t *buf)
+{
+ if (traceHandler) {
+ traceHandler(0, buf);
+ }
+}
+
+/******************************************************************************/
+/*
+ * Replace the default trace handler. Return a pointer to the old handler.
+ */
+
+void (*traceSetHandler(void (*function)(int level, char_t *buf)))
+ (int level, char *buf)
+{
+ void (*oldHandler)(int level, char_t *buf);
+
+ oldHandler = traceHandler;
+ if (function) {
+ traceHandler = function;
+ }
+ return oldHandler;
+}
+
+/******************************************************************************/
+/*
+ * Save the instance handle
+ */
+
+void emfInstSet(int inst)
+{
+ emfInst = inst;
+}
+
+/******************************************************************************/
+/*
+ * Get the instance handle
+ */
+
+int emfInstGet()
+{
+ return emfInst;
+}
+
+/******************************************************************************/
+/*
+ * Convert a string to lower case
+ */
+
+char_t *strlower(char_t *string)
+{
+ char_t *s;
+
+ a_assert(string);
+
+ if (string == NULL) {
+ return NULL;
+ }
+
+ s = string;
+ while (*s) {
+ if (gisupper(*s)) {
+ *s = (char_t) gtolower(*s);
+ }
+ s++;
+ }
+ *s = '\0';
+ return string;
+}
+
+/******************************************************************************/
+/*
+ * Convert a string to upper case
+ */
+
+char_t *strupper(char_t *string)
+{
+ char_t *s;
+
+ a_assert(string);
+ if (string == NULL) {
+ return NULL;
+ }
+
+ s = string;
+ while (*s) {
+ if (gislower(*s)) {
+ *s = (char_t) gtoupper(*s);
+ }
+ s++;
+ }
+ *s = '\0';
+ return string;
+}
+
+/******************************************************************************/
+/*
+ * Convert integer to ascii string. Allow a NULL string in which case we
+ * allocate a dynamic buffer.
+ */
+
+char_t *stritoa(int n, char_t *string, int width)
+{
+ char_t *cp, *lim, *s;
+ char_t buf[16]; /* Just temp to hold number */
+ int next, minus;
+
+ a_assert(string && width > 0);
+
+ if (string == NULL) {
+ if (width == 0) {
+ width = 10;
+ }
+ if ((string = balloc(B_L, width + 1)) == NULL) {
+ return NULL;
+ }
+ }
+ if (n < 0) {
+ minus = 1;
+ n = -n;
+ width--;
+ } else {
+ minus = 0;
+ }
+
+ cp = buf;
+ lim = &buf[width - 1];
+ while (n > 9 && cp < lim) {
+ next = n;
+ n /= 10;
+ *cp++ = (char_t) (next - n * 10 + '0');
+ }
+ if (cp < lim) {
+ *cp++ = (char_t) (n + '0');
+ }
+
+ s = string;
+ if (minus) {
+ *s++ = '-';
+ }
+
+ while (cp > buf) {
+ *s++ = *--cp;
+ }
+
+ *s++ = '\0';
+ return string;
+}
+
+/******************************************************************************/
+/*
+ * Stubs
+ */
+
+char_t *basicGetProduct()
+{
+ return T("uemf");
+}
+
+char_t *basicGetAddress()
+{
+ return T("localhost");
+}
+
+int errorOpen(char_t *pname)
+{
+ return 0;
+}
+
+void errorClose()
+{
+}
+
+/******************************************************************************/
+
diff --git a/cleopatre/application/spidgoahead/uemf.h b/cleopatre/application/spidgoahead/uemf.h
new file mode 100644
index 0000000000..aafffbd4f3
--- /dev/null
+++ b/cleopatre/application/spidgoahead/uemf.h
@@ -0,0 +1,1094 @@
+/*
+ * uemf.h -- GoAhead Micro Embedded Management Framework Header
+ *
+ * Copyright (c) GoAhead Software Inc., 1995-2000. All Rights Reserved.
+ *
+ * See the file "license.txt" for usage and redistribution license requirements
+ *
+ * $Id: uemf.h,v 1.8 2003/11/25 21:48:13 hwolff Exp $
+ */
+
+#ifndef _h_UEMF
+#define _h_UEMF 1
+
+/******************************** Description *********************************/
+
+/*
+ * GoAhead Web Server header. This defines the Web public APIs
+ */
+
+/******************************* Per O/S Includes *****************************/
+
+#ifdef WIN
+ #include <direct.h>
+ #include <io.h>
+ #include <sys/stat.h>
+ #include <limits.h>
+ #include <tchar.h>
+ #include <windows.h>
+ #include <winnls.h>
+ #include <time.h>
+ #include <sys/types.h>
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <fcntl.h>
+ #include <errno.h>
+#endif /* WIN */
+
+#ifdef CE
+ /*#include <errno.h>*/
+ #include <limits.h>
+ #include <tchar.h>
+ #include <windows.h>
+ #include <winsock.h>
+ #include <winnls.h>
+ #include "CE/wincompat.h"
+ #include <winsock.h>
+#endif /* CE */
+
+#ifdef NW
+ #include <direct.h>
+ #include <io.h>
+ #include <sys/stat.h>
+ #include <time.h>
+ #include <sys/types.h>
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <fcntl.h>
+ #include <errno.h>
+ #include <niterror.h>
+ #define EINTR EINUSE
+ #define WEBS 1
+ #include <limits.h>
+ #include <netdb.h>
+ #include <process.h>
+ #include <tiuser.h>
+ #include <sys/time.h>
+ #include <arpa/inet.h>
+ #include <sys/types.h>
+ #include <sys/socket.h>
+ #include <sys/filio.h>
+ #include <netinet/in.h>
+#endif /* NW */
+
+#ifdef SCOV5
+ #include <sys/types.h>
+ #include <stdio.h>
+ #include "sys/socket.h"
+ #include "sys/select.h"
+ #include "netinet/in.h"
+ #include "arpa/inet.h"
+ #include "netdb.h"
+#endif /* SCOV5 */
+
+#ifdef UNIX
+ #include <stdio.h>
+#endif /* UNIX */
+
+#ifdef LINUX
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ #include <sys/param.h>
+ #include <limits.h>
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <unistd.h>
+ #include <sys/socket.h>
+ #include <sys/select.h>
+ #include <netinet/in.h>
+ #include <arpa/inet.h>
+ #include <netdb.h>
+ #include <time.h>
+ #include <fcntl.h>
+ #include <errno.h>
+#endif /* LINUX */
+
+#ifdef LYNX
+ #include <limits.h>
+ #include <stdarg.h>
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <unistd.h>
+ #include <socket.h>
+ #include <netinet/in.h>
+ #include <arpa/inet.h>
+ #include <netdb.h>
+ #include <time.h>
+ #include <fcntl.h>
+ #include <errno.h>
+#endif /* LYNX */
+
+#ifdef MACOSX
+ #include <sys/stat.h>
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <unistd.h>
+ #include <sys/socket.h>
+ #include <netinet/in.h>
+ #include <arpa/inet.h>
+ #include <netdb.h>
+ #include <fcntl.h>
+ #include <errno.h>
+#endif /* MACOSX */
+
+#ifdef UW
+ #include <stdio.h>
+#endif /* UW */
+
+#ifdef VXWORKS
+ #include <vxWorks.h>
+ #include <sockLib.h>
+ #include <selectLib.h>
+ #include <inetLib.h>
+ #include <ioLib.h>
+ #include <stdio.h>
+ #include <stat.h>
+ #include <time.h>
+ #include <usrLib.h>
+ #include <fcntl.h>
+ #include <errno.h>
+#endif /* VXWORKS */
+
+#ifdef sparc
+# define __NO_PACK
+#endif /* sparc */
+
+#ifdef SOLARIS
+ #include <sys/types.h>
+ #include <limits.h>
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <unistd.h>
+ #include <socket.h>
+ #include <sys/select.h>
+ #include <netinet/in.h>
+ #include <arpa/inet.h>
+ #include <netdb.h>
+ #include <time.h>
+ #include <fcntl.h>
+ #include <errno.h>
+#endif /* SOLARIS */
+
+#ifdef QNX4
+ #include <sys/types.h>
+ #include <stdio.h>
+ #include <sys/socket.h>
+ #include <sys/select.h>
+ #include <netinet/in.h>
+ #include <arpa/inet.h>
+ #include <netdb.h>
+ #include <stdlib.h>
+ #include <unistd.h>
+ #include <sys/uio.h>
+ #include <sys/wait.h>
+#endif /* QNX4 */
+
+#ifdef ECOS
+ #include <limits.h>
+ #include <cyg/infra/cyg_type.h>
+ #include <cyg/kernel/kapi.h>
+ #include <time.h>
+ #include <network.h>
+ #include <errno.h>
+#endif /* ECOS */
+
+/********************************** Includes **********************************/
+
+#include <ctype.h>
+#include <stdarg.h>
+#include <string.h>
+
+#ifndef WEBS
+#include "messages.h"
+#endif /* ! WEBS */
+
+/******************************* Per O/S Defines *****************************/
+
+#ifdef UW
+ #define __NO_PACK 1
+#endif /* UW */
+
+#if (defined (SCOV5) || defined (VXWORKS) || defined (LINUX) || defined (LYNX) || defined (MACOSX))
+#ifndef O_BINARY
+#define O_BINARY 0
+#endif /* O_BINARY */
+#define SOCKET_ERROR -1
+#endif /* SCOV5 || VXWORKS || LINUX || LYNX || MACOSX */
+
+#if (defined (WIN) || defined (CE))
+/*
+ * __NO_FCNTL means can't access fcntl function. Fcntl.h is still available.
+ */
+#define __NO_FCNTL 1
+
+#undef R_OK
+#define R_OK 4
+#undef W_OK
+#define W_OK 2
+#undef X_OK
+#define X_OK 1
+#undef F_OK
+#define F_OK 0
+#endif /* WIN || CE */
+
+#if (defined (LINUX) && !defined (_STRUCT_TIMEVAL))
+struct timeval
+{
+ time_t tv_sec; /* Seconds. */
+ time_t tv_usec; /* Microseconds. */
+};
+#define _STRUCT_TIMEVAL 1
+#endif /* LINUX && ! _STRUCT_TIMEVAL */
+
+#ifdef ECOS
+ #define O_RDONLY 1
+ #define O_BINARY 2
+
+ #define __NO_PACK 1
+ #define __NO_EJ_FILE 1
+ #define __NO_CGI_BIN 1
+ #define __NO_FCNTL 1
+
+/*
+ * #define LIBKERN_INLINE to avoid kernel inline functions
+ */
+ #define LIBKERN_INLINE
+
+#endif /* ECOS */
+
+#ifdef QNX4
+ typedef long fd_mask;
+ #define NFDBITS (sizeof (fd_mask) * NBBY) /* bits per mask */
+#endif /* QNX4 */
+
+#ifdef NW
+ #define fd_mask fd_set
+ #define INADDR_NONE -1l
+ #define Sleep delay
+
+ #define __NO_FCNTL 1
+
+ #undef R_OK
+ #define R_OK 4
+ #undef W_OK
+ #define W_OK 2
+ #undef X_OK
+ #define X_OK 1
+ #undef F_OK
+ #define F_OK 0
+#endif /* NW */
+
+/********************************** Unicode ***********************************/
+/*
+ * Constants and limits. Also FNAMESIZE and PATHSIZE are currently defined
+ * in param.h to be 128 and 512
+ */
+#define TRACE_MAX (4096 - 48)
+#define VALUE_MAX_STRING (4096 - 48)
+#define SYM_MAX (512)
+#define XML_MAX 4096 /* Maximum size for tags/tokens */
+#define BUF_MAX 4096 /* General sanity check for bufs */
+#define FMT_STATIC_MAX 256 /* Maximum for fmtStatic calls */
+
+#if (defined (LITTLEFOOT) || defined (WEBS))
+#define LF_BUF_MAX (510)
+#define LF_PATHSIZE LF_BUF_MAX
+#else
+#define LF_BUF_MAX BUF_MAX
+#define LF_PATHSIZE PATHSIZE
+#define UPPATHSIZE PATHSIZE
+#endif /* LITTLEFOOT || WEBS */
+
+#ifndef CHAR_T_DEFINED
+#define CHAR_T_DEFINED 1
+#ifdef UNICODE
+/*
+ * To convert strings to UNICODE. We have a level of indirection so things
+ * like T(__FILE__) will expand properly.
+ */
+#define T(x) __TXT(x)
+#define __TXT(s) L ## s
+typedef unsigned short char_t;
+typedef unsigned short uchar_t;
+
+/*
+ * Text size of buffer macro. A buffer bytes will hold (size / char size)
+ * characters.
+ */
+#define TSZ(x) (sizeof(x) / sizeof(char_t))
+
+/*
+ * How many ASCII bytes are required to represent this UNICODE string?
+ */
+#define TASTRL(x) ((wcslen(x) + 1) * sizeof(char_t))
+
+#else
+#define T(s) s
+typedef char char_t;
+#define TSZ(x) (sizeof(x))
+#define TASTRL(x) (strlen(x) + 1)
+#ifdef WIN
+typedef unsigned char uchar_t;
+#endif /* WIN */
+
+#endif /* UNICODE */
+
+#endif /* ! CHAR_T_DEFINED */
+
+/*
+ * "Boolean" constants
+ */
+
+#ifndef TRUE
+#define TRUE 1
+#endif
+
+#ifndef FALSE
+#define FALSE 0
+#endif
+
+/*
+ * GoAhead Copyright.
+ */
+#define GOAHEAD_COPYRIGHT \
+ T("Copyright (c) GoAhead Software Inc., 1995-2000. All Rights Reserved.")
+
+/*
+ * The following include has to be after the unicode defines. By putting it
+ * here, many modules in various parts of the tree are cleaner.
+ */
+#if (defined (LITTLEFOOT) && defined (INMEM))
+ #include "lf/inmem.h"
+#endif /* LITTLEFOOT && INMEM */
+
+/*
+ * Type for unicode systems
+ */
+#ifdef UNICODE
+
+#define gmain wmain
+
+#define gasctime _wasctime
+#define gsprintf swprintf
+#define gprintf wprintf
+#define gfprintf fwprintf
+#define gsscanf swscanf
+#define gvsprintf vswprintf
+
+#define gstrcpy wcscpy
+#define gstrncpy wcsncpy
+#define gstrncat wcsncat
+#define gstrlen wcslen
+#define gstrcat wcscat
+#define gstrcmp wcscmp
+#define gstrncmp wcsncmp
+#define gstricmp wcsicmp
+#define gstrchr wcschr
+#define gstrrchr wcsrchr
+#define gstrtok wcstok
+#define gstrnset wcsnset
+#define gstrrchr wcsrchr
+#define gstrspn wcsspn
+#define gstrcspn wcscspn
+#define gstrstr wcsstr
+#define gstrtol wcstol
+
+#define gfopen _wfopen
+#define gopen _wopen
+#define gclose close
+#define gcreat _wcreat
+#define gfgets fgetws
+#define gfputs fputws
+#define gfscanf fwscanf
+#define ggets _getws
+#define glseek lseek
+#define gunlink _wunlink
+#define gread read
+#define grename _wrename
+#define gwrite write
+#define gtmpnam _wtmpnam
+#define gtempnam _wtempnam
+#define gfindfirst _wfindfirst
+#define gfinddata_t _wfinddata_t
+#define gfindnext _wfindnext
+#define gfindclose _findclose
+#define gstat _wstat
+#define gaccess _waccess
+#define gchmod _wchmod
+
+typedef struct _stat gstat_t;
+
+#define gmkdir _wmkdir
+#define gchdir _wchdir
+#define grmdir _wrmdir
+#define ggetcwd _wgetcwd
+
+#define gtolower towlower
+#define gtoupper towupper
+#ifdef CE
+#define gisspace isspace
+#define gisdigit isdigit
+#define gisxdigit isxdigit
+#define gisupper isupper
+#define gislower islower
+#define gisprint isprint
+#else
+#define gremove _wremove
+#define gisspace iswspace
+#define gisdigit iswdigit
+#define gisxdigit iswxdigit
+#define gisupper iswupper
+#define gislower iswlower
+#endif /* if CE */
+#define gisalnum iswalnum
+#define gisalpha iswalpha
+#define gatoi(s) wcstol(s, NULL, 10)
+
+#define gctime _wctime
+#define ggetenv _wgetenv
+#define gexecvp _wexecvp
+
+#else /* ! UNICODE */
+
+#ifdef VXWORKS
+#define gchdir vxchdir
+#define gmkdir vxmkdir
+#define grmdir vxrmdir
+#elif (defined (LYNX) || defined (LINUX) || defined (MACOSX) || defined (SOLARIS))
+#define gchdir chdir
+#define gmkdir(s) mkdir(s,0755)
+#define grmdir rmdir
+#else
+#define gchdir chdir
+#define gmkdir mkdir
+#define grmdir rmdir
+#endif /* VXWORKS #elif LYNX || LINUX || MACOSX || SOLARIS*/
+
+#define gclose close
+#define gclosedir closedir
+#define gchmod chmod
+#define ggetcwd getcwd
+#define glseek lseek
+#define gloadModule loadModule
+#define gopen open
+#define gopendir opendir
+#define gread read
+#define greaddir readdir
+#define grename rename
+#define gstat stat
+#define gunlink unlink
+#define gwrite write
+
+#define gasctime asctime
+#define gsprintf sprintf
+#define gprintf printf
+#define gfprintf fprintf
+#define gsscanf sscanf
+#define gvsprintf vsprintf
+
+#define gstrcpy strcpy
+#define gstrncpy strncpy
+#define gstrncat strncat
+#define gstrlen strlen
+#define gstrcat strcat
+#define gstrcmp strcmp
+#define gstrncmp strncmp
+#define gstricmp strcmpci
+#define gstrchr strchr
+#define gstrrchr strrchr
+#define gstrtok strtok
+#define gstrnset strnset
+#define gstrrchr strrchr
+#define gstrspn strspn
+#define gstrcspn strcspn
+#define gstrstr strstr
+#define gstrtol strtol
+
+#define gfopen fopen
+#define gcreat creat
+#define gfgets fgets
+#define gfputs fputs
+#define gfscanf fscanf
+#define ggets gets
+#define gtmpnam tmpnam
+#define gtempnam tempnam
+#define gfindfirst _findfirst
+#define gfinddata_t _finddata_t
+#define gfindnext _findnext
+#define gfindclose _findclose
+#define gaccess access
+
+typedef struct stat gstat_t;
+
+#define gremove remove
+
+#define gtolower tolower
+#define gtoupper toupper
+#define gisspace isspace
+#define gisdigit isdigit
+#define gisxdigit isxdigit
+#define gisalnum isalnum
+#define gisalpha isalpha
+#define gisupper isupper
+#define gislower islower
+#define gatoi atoi
+
+#define gctime ctime
+#define ggetenv getenv
+#define gexecvp execvp
+#ifndef VXWORKS
+#define gmain main
+#endif /* ! VXWORKS */
+#ifdef VXWORKS
+#define fcntl(a, b, c)
+#endif /* VXWORKS */
+#endif /* ! UNICODE */
+
+/*
+ * Include inmem.h here because it redefines many of the file access fucntions.
+ * Otherwise there would be lots more #if-#elif-#else-#endif ugliness.
+ */
+#ifdef INMEM
+ #include "lf/inmem.h"
+#endif
+
+/********************************** Defines ***********************************/
+
+#ifndef FNAMESIZE
+#define FNAMESIZE 254 /* Max length of file names */
+#endif /* FNAMESIZE */
+
+#define E_MAX_ERROR 4096
+#define URL_MAX 4096
+
+/*
+ * Error types
+ */
+#define E_ASSERT 0x1 /* Assertion error */
+#define E_LOG 0x2 /* Log error to log file */
+#define E_USER 0x3 /* Error that must be displayed */
+
+#define E_L T(__FILE__), __LINE__
+#define E_ARGS_DEC char_t *file, int line
+#define E_ARGS file, line
+
+#if (defined (ASSERT) || defined (ASSERT_CE))
+ #define a_assert(C) if (C) ; else error(E_L, E_ASSERT, T("%s"), T(#C))
+#else
+ #define a_assert(C) if (1) ; else
+#endif /* ASSERT || ASSERT_CE */
+
+/******************************************************************************/
+/* VALUE */
+/******************************************************************************/
+/*
+ * These values are not prefixed so as to aid code readability
+ */
+
+typedef enum {
+ undefined = 0,
+ byteint = 1,
+ shortint = 2,
+ integer = 3,
+ hex = 4,
+ percent = 5,
+ octal = 6,
+ big = 7,
+ flag = 8,
+ floating = 9,
+ string = 10,
+ bytes = 11,
+ symbol = 12,
+ errmsg = 13
+} vtype_t;
+
+#ifndef __NO_PACK
+#pragma pack(2)
+#endif /* _NO_PACK */
+
+typedef struct {
+
+ union {
+ char flag;
+ char byteint;
+ short shortint;
+ char percent;
+ long integer;
+ long hex;
+ long octal;
+ long big[2];
+#ifdef FLOATING_POINT_SUPPORT
+ double floating;
+#endif /* FLOATING_POINT_SUPPORT */
+ char_t *string;
+ char *bytes;
+ char_t *errmsg;
+ void *symbol;
+ } value;
+
+ vtype_t type;
+ unsigned int valid : 8;
+ unsigned int allocated : 8; /* String was balloced */
+} value_t;
+
+#ifndef __NO_PACK
+#pragma pack()
+#endif /* __NO_PACK */
+
+/*
+ * Allocation flags
+ */
+#define VALUE_ALLOCATE 0x1
+
+#define value_numeric(t) (t >= byteint && t <= big)
+#define value_str(t) (t >= string && t <= bytes)
+#define value_ok(t) (t > undefined && t <= symbol)
+
+#define VALUE_VALID { {0}, integer, 1 }
+#define VALUE_INVALID { {0}, undefined, 0 }
+
+/******************************************************************************/
+/*
+ * A ring queue allows maximum utilization of memory for data storage and is
+ * ideal for input/output buffering. This module provides a highly effecient
+ * implementation and a vehicle for dynamic strings.
+ *
+ * WARNING: This is a public implementation and callers have full access to
+ * the queue structure and pointers. Change this module very carefully.
+ *
+ * This module follows the open/close model.
+ *
+ * Operation of a ringq where rq is a pointer to a ringq :
+ *
+ * rq->buflen contains the size of the buffer.
+ * rq->buf will point to the start of the buffer.
+ * rq->servp will point to the first (un-consumed) data byte.
+ * rq->endp will point to the next free location to which new data is added
+ * rq->endbuf will point to one past the end of the buffer.
+ *
+ * Eg. If the ringq contains the data "abcdef", it might look like :
+ *
+ * +-------------------------------------------------------------------+
+ * | | | | | | | | a | b | c | d | e | f | | | | |
+ * +-------------------------------------------------------------------+
+ * ^ ^ ^ ^
+ * | | | |
+ * rq->buf rq->servp rq->endp rq->enduf
+ *
+ * The queue is empty when servp == endp. This means that the queue will hold
+ * at most rq->buflen -1 bytes. It is the fillers responsibility to ensure
+ * the ringq is never filled such that servp == endp.
+ *
+ * It is the fillers responsibility to "wrap" the endp back to point to
+ * rq->buf when the pointer steps past the end. Correspondingly it is the
+ * consumers responsibility to "wrap" the servp when it steps to rq->endbuf.
+ * The ringqPutc and ringqGetc routines will do this automatically.
+ */
+
+/*
+ * Ring queue buffer structure
+ */
+typedef struct {
+ unsigned char *buf; /* Holding buffer for data */
+ unsigned char *servp; /* Pointer to start of data */
+ unsigned char *endp; /* Pointer to end of data */
+ unsigned char *endbuf; /* Pointer to end of buffer */
+ int buflen; /* Length of ring queue */
+ int maxsize; /* Maximum size */
+ int increment; /* Growth increment */
+} ringq_t;
+
+/*
+ * Block allocation (balloc) definitions
+ */
+#ifdef B_STATS
+#ifndef B_L
+#define B_L T(__FILE__), __LINE__
+#define B_ARGS_DEC char_t *file, int line
+#define B_ARGS file, line
+#endif /* B_L */
+#endif /* B_STATS */
+
+/*
+ * Block classes are: 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192,
+ * 16384, 32768, 65536
+ */
+typedef struct {
+ union {
+ void *next; /* Pointer to next in q */
+ int size; /* Actual requested size */
+ } u;
+ int flags; /* Per block allocation flags */
+} bType;
+
+#define B_SHIFT 4 /* Convert size to class */
+#define B_ROUND ((1 << (B_SHIFT)) - 1)
+#define B_MAX_CLASS 13 /* Maximum class number + 1 */
+#define B_MALLOCED 0x80000000 /* Block was malloced */
+#define B_DEFAULT_MEM (64 * 1024) /* Default memory allocation */
+#define B_MAX_FILES (512) /* Maximum number of files */
+#define B_FILL_CHAR (0x77) /* Fill byte for buffers */
+#define B_FILL_WORD (0x77777777) /* Fill word for buffers */
+#define B_MAX_BLOCKS (64 * 1024) /* Maximum allocated blocks */
+
+/*
+ * Flags. The integrity value is used as an arbitrary value to fill the flags.
+ */
+#define B_INTEGRITY 0x8124000 /* Integrity value */
+#define B_INTEGRITY_MASK 0xFFFF000 /* Integrity mask */
+#define B_USE_MALLOC 0x1 /* Okay to use malloc if required */
+#define B_USER_BUF 0x2 /* User supplied buffer for mem */
+
+/*
+ * The symbol table record for each symbol entry
+ */
+
+typedef struct sym_t {
+ struct sym_t *forw; /* Pointer to next hash list */
+ value_t name; /* Name of symbol */
+ value_t content; /* Value of symbol */
+ int arg; /* Parameter value */
+} sym_t;
+
+typedef int sym_fd_t; /* Returned by symOpen */
+
+/*
+ * Script engines
+ */
+#define EMF_SCRIPT_JSCRIPT 0 /* javascript */
+#define EMF_SCRIPT_TCL 1 /* tcl */
+#define EMF_SCRIPT_EJSCRIPT 2 /* Ejscript */
+#define EMF_SCRIPT_MAX 3
+
+#define MAXINT INT_MAX
+#define BITSPERBYTE 8
+#define BITS(type) (BITSPERBYTE * (int) sizeof(type))
+#define STRSPACE T("\t \n\r\t")
+
+#ifndef max
+#define max(a,b) (((a) > (b)) ? (a) : (b))
+#endif /* max */
+
+#ifndef min
+#define min(a,b) (((a) < (b)) ? (a) : (b))
+#endif /* min */
+
+/******************************************************************************/
+/* CRON */
+/******************************************************************************/
+
+typedef struct {
+ char_t *minute;
+ char_t *hour;
+ char_t *day;
+ char_t *month;
+ char_t *dayofweek;
+} cron_t;
+
+extern long cronUntil(cron_t *cp, int period, time_t testTime);
+extern int cronAlloc(cron_t *cp, char_t *str);
+extern int cronFree(cron_t *cp);
+
+/******************************************************************************/
+/* SOCKET */
+/******************************************************************************/
+/*
+ * Socket flags
+ */
+
+#if ((defined (WIN) || defined (CE)) && defined (WEBS))
+#define EWOULDBLOCK WSAEWOULDBLOCK
+#define ENETDOWN WSAENETDOWN
+#define ECONNRESET WSAECONNRESET
+#endif /* (WIN || CE) && WEBS) */
+
+#define SOCKET_EOF 0x1 /* Seen end of file */
+#define SOCKET_CONNECTING 0x2 /* Connect in progress */
+#define SOCKET_BROADCAST 0x4 /* Broadcast mode */
+#define SOCKET_PENDING 0x8 /* Message pending on this socket */
+#define SOCKET_FLUSHING 0x10 /* Background flushing */
+#define SOCKET_DATAGRAM 0x20 /* Use datagrams */
+#define SOCKET_ASYNC 0x40 /* Use async connect */
+#define SOCKET_BLOCK 0x80 /* Use blocking I/O */
+#define SOCKET_LISTENING 0x100 /* Socket is server listener */
+#define SOCKET_CLOSING 0x200 /* Socket is closing */
+#define SOCKET_CONNRESET 0x400 /* Socket connection was reset */
+
+#define SOCKET_PORT_MAX 0xffff /* Max Port size */
+
+/*
+ * Socket error values
+ */
+#define SOCKET_WOULDBLOCK 1 /* Socket would block on I/O */
+#define SOCKET_RESET 2 /* Socket has been reset */
+#define SOCKET_NETDOWN 3 /* Network is down */
+#define SOCKET_AGAIN 4 /* Issue the request again */
+#define SOCKET_INTR 5 /* Call was interrupted */
+#define SOCKET_INVAL 6 /* Invalid */
+
+/*
+ * Handler event masks
+ */
+#define SOCKET_READABLE 0x2 /* Make socket readable */
+#define SOCKET_WRITABLE 0x4 /* Make socket writable */
+#define SOCKET_EXCEPTION 0x8 /* Interested in exceptions */
+#define EMF_SOCKET_MESSAGE (WM_USER+13)
+
+#ifdef LITTLEFOOT
+#define SOCKET_BUFSIZ 510 /* Underlying buffer size */
+#else
+#define SOCKET_BUFSIZ 1024 /* Underlying buffer size */
+#endif /* LITTLEFOOT */
+
+typedef void (*socketHandler_t)(int sid, int mask, int data);
+typedef int (*socketAccept_t)(int sid, char *ipaddr, int port,
+ int listenSid);
+typedef struct {
+ char host[64]; /* Host name */
+ ringq_t inBuf; /* Input ring queue */
+ ringq_t outBuf; /* Output ring queue */
+ ringq_t lineBuf; /* Line ring queue */
+ socketAccept_t accept; /* Accept handler */
+ socketHandler_t handler; /* User I/O handler */
+ int handler_data; /* User handler data */
+ int handlerMask; /* Handler events of interest */
+ int sid; /* Index into socket[] */
+ int port; /* Port to listen on */
+ int flags; /* Current state flags */
+ int sock; /* Actual socket handle */
+ int fileHandle; /* ID of the file handler */
+ int interestEvents; /* Mask of events to watch for */
+ int currentEvents; /* Mask of ready events (FD_xx) */
+ int selectEvents; /* Events being selected */
+ int saveMask; /* saved Mask for socketFlush */
+ int error; /* Last error */
+} socket_t;
+
+/********************************* Prototypes *********************************/
+/*
+ * Balloc module
+ *
+ */
+
+extern void bclose();
+extern int bopen(void *buf, int bufsize, int flags);
+
+/*
+ * Define NO_BALLOC to turn off our balloc module altogether
+ * #define NO_BALLOC 1
+ */
+
+#ifdef NO_BALLOC
+#define balloc(B_ARGS, num) malloc(num)
+#define bfree(B_ARGS, p) free(p)
+#define bfreeSafe(B_ARGS, p) \
+ if (p) { free(p); } else
+#define brealloc(B_ARGS, p, num) realloc(p, num)
+extern char_t *bstrdupNoBalloc(char_t *s);
+extern char *bstrdupANoBalloc(char *s);
+#define bstrdup(B_ARGS, s) bstrdupNoBalloc(s)
+#define bstrdupA(B_ARGS, s) bstrdupANoBalloc(s)
+#define gstrdup(B_ARGS, s) bstrdupNoBalloc(s)
+
+#else /* BALLOC */
+
+#ifndef B_STATS
+#define balloc(B_ARGS, num) balloc(num)
+#define bfree(B_ARGS, p) bfree(p)
+#define bfreeSafe(B_ARGS, p) bfreeSafe(p)
+#define brealloc(B_ARGS, p, size) brealloc(p, size)
+#define bstrdup(B_ARGS, p) bstrdup(p)
+
+#ifdef UNICODE
+#define bstrdupA(B_ARGS, p) bstrdupA(p)
+#else /* UNICODE */
+#define bstrdupA bstrdup
+#endif /* UNICODE */
+
+#endif /* B_STATS */
+
+#define gstrdup bstrdup
+extern void *balloc(B_ARGS_DEC, int size);
+extern void bfree(B_ARGS_DEC, void *mp);
+extern void bfreeSafe(B_ARGS_DEC, void *mp);
+extern void *brealloc(B_ARGS_DEC, void *buf, int newsize);
+extern char_t *bstrdup(B_ARGS_DEC, char_t *s);
+
+#ifdef UNICODE
+extern char *bstrdupA(B_ARGS_DEC, char *s);
+#else /* UNICODE */
+#define bstrdupA bstrdup
+#endif /* UNICODE */
+#endif /* BALLOC */
+
+extern void bstats(int handle, void (*writefn)(int handle, char_t *fmt, ...));
+
+/*
+ * Flags. The integrity value is used as an arbitrary value to fill the flags.
+ */
+#define B_USE_MALLOC 0x1 /* Okay to use malloc if required */
+#define B_USER_BUF 0x2 /* User supplied buffer for mem */
+
+
+#ifndef LINUX
+extern char_t *basename(char_t *name);
+#endif /* !LINUX */
+
+#if (defined (UEMF) && defined (WEBS))
+/*
+ * The open source webserver uses a different callback/timer mechanism
+ * than other emf derivative products such as FieldUpgrader agents
+ * so redefine those API for webserver so that they can coexist in the
+ * same address space as the others.
+ */
+#define emfSchedCallback websSchedCallBack
+#define emfUnschedCallback websUnschedCallBack
+#define emfReschedCallback websReschedCallBack
+#endif /* UEMF && WEBS */
+
+typedef void (emfSchedProc)(void *data, int id);
+extern int emfSchedCallback(int delay, emfSchedProc *proc, void *arg);
+extern void emfUnschedCallback(int id);
+extern void emfReschedCallback(int id, int delay);
+extern void emfSchedProcess();
+extern int emfInstGet();
+extern void emfInstSet(int inst);
+extern void error(E_ARGS_DEC, int flags, char_t *fmt, ...);
+extern void (*errorSetHandler(void (*function)(int etype, char_t *msg))) \
+ (int etype, char_t *msg);
+
+#ifdef B_STATS
+#define hAlloc(x) HALLOC(B_L, x)
+#define hAllocEntry(x, y, z) HALLOCENTRY(B_L, x, y, z)
+extern int HALLOC(B_ARGS_DEC, void ***map);
+extern int HALLOCENTRY(B_ARGS_DEC, void ***list, int *max, int size);
+#else
+extern int hAlloc(void ***map);
+extern int hAllocEntry(void ***list, int *max, int size);
+#endif /* B_STATS */
+
+extern int hFree(void ***map, int handle);
+
+extern int ringqOpen(ringq_t *rq, int increment, int maxsize);
+extern void ringqClose(ringq_t *rq);
+extern int ringqLen(ringq_t *rq);
+
+extern int ringqPutc(ringq_t *rq, char_t c);
+extern int ringqInsertc(ringq_t *rq, char_t c);
+extern int ringqPutStr(ringq_t *rq, char_t *str);
+extern int ringqGetc(ringq_t *rq);
+
+extern int fmtValloc(char_t **s, int n, char_t *fmt, va_list arg);
+extern int fmtAlloc(char_t **s, int n, char_t *fmt, ...);
+extern int fmtStatic(char_t *s, int n, char_t *fmt, ...);
+
+#ifdef UNICODE
+extern int ringqPutcA(ringq_t *rq, char c);
+extern int ringqInsertcA(ringq_t *rq, char c);
+extern int ringqPutStrA(ringq_t *rq, char *str);
+extern int ringqGetcA(ringq_t *rq);
+#else
+#define ringqPutcA ringqPutc
+#define ringqInsertcA ringqInsertc
+#define ringqPutStrA ringqPutStr
+#define ringqGetcA ringqGetc
+#endif /* UNICODE */
+
+extern int ringqPutBlk(ringq_t *rq, unsigned char *buf, int len);
+extern int ringqPutBlkMax(ringq_t *rq);
+extern void ringqPutBlkAdj(ringq_t *rq, int size);
+extern int ringqGetBlk(ringq_t *rq, unsigned char *buf, int len);
+extern int ringqGetBlkMax(ringq_t *rq);
+extern void ringqGetBlkAdj(ringq_t *rq, int size);
+extern void ringqFlush(ringq_t *rq);
+extern void ringqAddNull(ringq_t *rq);
+
+extern int scriptSetVar(int engine, char_t *var, char_t *value);
+extern int scriptEval(int engine, char_t *cmd, char_t **rslt, int chan);
+
+extern void socketClose();
+extern void socketCloseConnection(int sid);
+extern void socketCreateHandler(int sid, int mask, socketHandler_t
+ handler, int arg);
+extern void socketDeleteHandler(int sid);
+extern int socketEof(int sid);
+extern int socketCanWrite(int sid);
+extern void socketSetBufferSize(int sid, int in, int line, int out);
+extern int socketFlush(int sid);
+extern int socketGets(int sid, char_t **buf);
+extern int socketGetPort(int sid);
+extern int socketInputBuffered(int sid);
+extern int socketOpen();
+extern int socketOpenConnection(char *host, int port,
+ socketAccept_t accept, int flags);
+extern void socketProcess(int hid);
+extern int socketRead(int sid, char *buf, int len);
+extern int socketReady(int hid);
+extern int socketWrite(int sid, char *buf, int len);
+extern int socketWriteString(int sid, char_t *buf);
+extern int socketSelect(int hid, int timeout);
+extern int socketGetHandle(int sid);
+extern int socketSetBlock(int sid, int flags);
+extern int socketGetBlock(int sid);
+extern int socketAlloc(char *host, int port, socketAccept_t accept,
+ int flags);
+extern void socketFree(int sid);
+extern int socketGetError();
+extern socket_t *socketPtr(int sid);
+extern int socketWaitForEvent(socket_t *sp, int events, int *errCode);
+extern void socketRegisterInterest(socket_t *sp, int handlerMask);
+extern int socketGetInput(int sid, char *buf, int toRead, int *errCode);
+
+extern char_t *strlower(char_t *string);
+extern char_t *strupper(char_t *string);
+
+extern char_t *stritoa(int n, char_t *string, int width);
+
+extern sym_fd_t symOpen(int hash_size);
+extern void symClose(sym_fd_t sd);
+extern sym_t *symLookup(sym_fd_t sd, char_t *name);
+extern sym_t *symEnter(sym_fd_t sd, char_t *name, value_t v, int arg);
+extern int symDelete(sym_fd_t sd, char_t *name);
+extern void symWalk(sym_fd_t sd, void (*fn)(sym_t *symp));
+extern sym_t *symFirst(sym_fd_t sd);
+extern sym_t *symNext(sym_fd_t sd);
+extern int symSubOpen();
+extern void symSubClose();
+
+extern void trace(int lev, char_t *fmt, ...);
+extern void traceRaw(char_t *buf);
+extern void (*traceSetHandler(void (*function)(int level, char_t *buf)))
+ (int level, char_t *buf);
+
+extern value_t valueInteger(long value);
+extern value_t valueString(char_t *value, int flags);
+extern value_t valueErrmsg(char_t *value);
+extern void valueFree(value_t *v);
+extern int vxchdir(char *spidgoahead_dirname);
+
+extern unsigned int hextoi(char_t *hexstring);
+extern unsigned int gstrtoi(char_t *s);
+extern time_t timeMsec();
+
+extern char_t *ascToUni(char_t *ubuf, char *str, int nBytes);
+extern char *uniToAsc(char *buf, char_t *ustr, int nBytes);
+extern char_t *ballocAscToUni(char *cp, int alen);
+extern char *ballocUniToAsc(char_t *unip, int ulen);
+
+extern char_t *basicGetHost();
+extern char_t *basicGetAddress();
+extern char_t *basicGetProduct();
+extern void basicSetHost(char_t *host);
+extern void basicSetAddress(char_t *addr);
+
+extern int harnessOpen(char_t **argv);
+extern void harnessClose(int status);
+extern void harnessTesting(char_t *msg, ...);
+extern void harnessPassed();
+extern void harnessFailed(int line);
+extern int harnessLevel();
+
+#endif /* _h_UEMF */
+
+/******************************************************************************/
+
diff --git a/cleopatre/application/spidgoahead/um.c b/cleopatre/application/spidgoahead/um.c
new file mode 100644
index 0000000000..4ae0aa41f8
--- /dev/null
+++ b/cleopatre/application/spidgoahead/um.c
@@ -0,0 +1,1435 @@
+/*
+ * um.c -- User Management
+ *
+ * Copyright (c) GoAhead Software Inc., 1995-2000. All Rights Reserved.
+ *
+ * See the file "license.txt" for usage and redistribution license requirements
+ *
+ * $Id: um.c,v 1.5 2002/10/24 14:44:50 bporter Exp $
+ */
+
+/******************************** Description *********************************/
+/*
+ * User Management routines for adding/deleting/changing users and groups
+ * Also, routines for determining user access
+ */
+
+/********************************* Includes ***********************************/
+
+#include "um.h"
+#include "emfdb.h"
+#include "webs.h"
+
+/********************************** Defines ***********************************/
+
+#define UM_DB_FILENAME T("um.xml")
+
+/*
+ * Table names
+ */
+#define UM_USER_TABLENAME T("users")
+#define UM_GROUP_TABLENAME T("groups")
+#define UM_ACCESS_TABLENAME T("access")
+
+/*
+ * Column names
+ */
+#define UM_NAME T("name")
+#define UM_PASS T("password")
+#define UM_GROUP T("group")
+#define UM_PROT T("prot")
+#define UM_DISABLE T("disable")
+#define UM_METHOD T("method")
+#define UM_PRIVILEGE T("priv")
+#define UM_SECURE T("secure")
+
+/*
+ * XOR encryption mask
+ * Note: This string should be modified for individual sites
+ * in order to enhance user password security.
+ */
+#define UM_XOR_ENCRYPT T("*j7a(L#yZ98sSd5HfSgGjMj8;Ss;d)(*&^#@$a2s0i3g")
+
+/******************************** Local Data **********************************/
+
+#ifdef qHierarchicalAccess
+/*
+ * user-provided function to allow hierarchical access protection. See below.
+ * for details.
+ */
+extern bool_t dmfCanAccess(const char_t* usergroup, const char_t* group);
+#endif
+#ifdef UEMF
+/*
+ * User table definition
+ */
+#define NUMBER_OF_USER_COLUMNS 5
+
+char_t *userColumnNames[NUMBER_OF_USER_COLUMNS] = {
+ UM_NAME, UM_PASS, UM_GROUP, UM_PROT, UM_DISABLE
+};
+
+int userColumnTypes[NUMBER_OF_USER_COLUMNS] = {
+ T_STRING, T_STRING, T_STRING, T_INT, T_INT
+};
+
+dbTable_t userTable = {
+ UM_USER_TABLENAME,
+ NUMBER_OF_USER_COLUMNS,
+ userColumnNames,
+ userColumnTypes,
+ 0,
+ NULL
+};
+
+/*
+ * Group table definition
+ */
+#define NUMBER_OF_GROUP_COLUMNS 5
+
+char_t *groupColumnNames[NUMBER_OF_GROUP_COLUMNS] = {
+ UM_NAME, UM_PRIVILEGE, UM_METHOD, UM_PROT, UM_DISABLE
+};
+
+int groupColumnTypes[NUMBER_OF_GROUP_COLUMNS] = {
+ T_STRING, T_INT, T_INT, T_INT, T_INT
+};
+
+dbTable_t groupTable = {
+ UM_GROUP_TABLENAME,
+ NUMBER_OF_GROUP_COLUMNS,
+ groupColumnNames,
+ groupColumnTypes,
+ 0,
+ NULL
+};
+
+/*
+ * Access Limit table definition
+ */
+#define NUMBER_OF_ACCESS_COLUMNS 4
+
+char_t *accessColumnNames[NUMBER_OF_ACCESS_COLUMNS] = {
+ UM_NAME, UM_METHOD, UM_SECURE, UM_GROUP
+};
+
+int accessColumnTypes[NUMBER_OF_ACCESS_COLUMNS] = {
+ T_STRING, T_INT, T_INT, T_STRING
+};
+
+dbTable_t accessTable = {
+ UM_ACCESS_TABLENAME,
+ NUMBER_OF_ACCESS_COLUMNS,
+ accessColumnNames,
+ accessColumnTypes,
+ 0,
+ NULL
+};
+#endif /* #ifdef UEMF */
+
+/*
+ * Database Identifier returned from dbOpen()
+ */
+static int didUM = -1;
+
+/*
+ * Configuration database persist filename
+ */
+static char_t *saveFilename = NULL;
+
+static int umOpenCount = 0; /* count of apps using this module */
+
+/*************************** Forward Declarations *****************************/
+
+static bool_t umCheckName(char_t *name);
+
+/*********************************** Code *************************************/
+/*
+ * umOpen() registers the UM tables in the fake emf-database
+ */
+
+int umOpen()
+{
+ if (++umOpenCount != 1) {
+ return didUM;
+ }
+/*
+ * Do not initialize if intialization has already taken place
+ */
+ if (didUM == -1) {
+ didUM = dbOpen(UM_USER_TABLENAME, UM_DB_FILENAME, NULL, 0);
+#ifdef UEMF
+ dbRegisterDBSchema(&userTable);
+ dbRegisterDBSchema(&groupTable);
+ dbRegisterDBSchema(&accessTable);
+#endif
+ }
+
+ if (saveFilename == NULL) {
+ saveFilename = bstrdup(B_L, UM_TXT_FILENAME);
+ }
+
+ return didUM;
+}
+
+/******************************************************************************/
+/*
+ * umClose() frees up the UM tables in the fake emf-database
+ */
+
+void umClose()
+{
+ if (--umOpenCount > 0) {
+ return;
+ }
+/*
+ * Do not close if intialization has not taken place
+ */
+ if (didUM != -1) {
+ dbClose(didUM);
+ didUM = -1;
+ }
+
+ if (saveFilename != NULL) {
+ bfree(B_L, saveFilename);
+ saveFilename = NULL;
+ }
+}
+
+/******************************************************************************/
+/*
+ * umCommit() persists all of the UM tables
+ */
+
+int umCommit(char_t *filename)
+{
+ if (filename && *filename) {
+ if (saveFilename != NULL) {
+ bfree(B_L, saveFilename);
+ }
+
+ saveFilename = bstrdup(B_L, filename);
+ }
+
+ a_assert (saveFilename && *saveFilename);
+ trace(3, T("UM: Writing User Configuration to file <%s>\n"),
+ saveFilename);
+
+ return dbSave(didUM, saveFilename, 0);
+}
+
+/******************************************************************************/
+/*
+ * umRestore() loads up the UM tables with persisted data
+ */
+
+int umRestore(char_t *filename)
+{
+ if (filename && *filename) {
+ if (saveFilename != NULL) {
+ bfree(B_L, saveFilename);
+ }
+
+ saveFilename = bstrdup(B_L, filename);
+ }
+
+ a_assert(saveFilename && *saveFilename);
+
+ trace(3, T("UM: Loading User Configuration from file <%s>\n"),
+ saveFilename);
+
+/*
+ * First empty the database, otherwise we wind up with duplicates!
+ */
+ dbZero(didUM);
+ return dbLoad(didUM, saveFilename, 0);
+}
+
+/******************************************************************************/
+/*
+ * Encrypt/Decrypt a text string.
+ * Returns the number of characters encrypted.
+ */
+
+static int umEncryptString(char_t *textString)
+{
+ char_t *enMask;
+ char_t enChar;
+ int numChars;
+
+ a_assert(textString);
+
+ enMask = UM_XOR_ENCRYPT;
+ numChars = 0;
+
+ while (*textString) {
+ enChar = *textString ^ *enMask;
+/*
+ * Do not produce encrypted text with embedded linefeeds or tabs.
+ * Simply use existing character.
+ */
+ if (enChar && !gisspace(enChar))
+ *textString = enChar;
+/*
+ * Increment all pointers.
+ */
+ enMask++;
+ textString++;
+ numChars++;
+/*
+ * Wrap encryption mask pointer if at end of length.
+ */
+ if (*enMask == '\0') {
+ enMask = UM_XOR_ENCRYPT;
+ }
+ }
+
+ return numChars;
+}
+
+/******************************************************************************/
+/*
+ * umGetFirstRowData() - return a pointer to the first non-blank key value
+ * in the given column for the given table.
+ */
+
+static char_t *umGetFirstRowData(char_t *tableName, char_t *columnName)
+{
+ char_t *columnData;
+ int row;
+ int check;
+
+ a_assert(tableName && *tableName);
+ a_assert(columnName && *columnName);
+
+ row = 0;
+/*
+ * Move through table until we retrieve the first row with non-null
+ * column data.
+ */
+ columnData = NULL;
+ while ((check = dbReadStr(didUM, tableName, columnName, row++,
+ &columnData)) == 0 || (check == DB_ERR_ROW_DELETED)) {
+ if (columnData && *columnData) {
+ return columnData;
+ }
+ }
+
+ return NULL;
+}
+
+/******************************************************************************/
+/*
+ * umGetNextRowData() - return a pointer to the first non-blank
+ * key value following the given one.
+ */
+
+static char_t *umGetNextRowData(char_t *tableName, char_t *columnName,
+ char_t *keyLast)
+{
+ char_t *key;
+ int row;
+ int check;
+
+ a_assert(tableName && *tableName);
+ a_assert(columnName && *columnName);
+ a_assert(keyLast && *keyLast);
+/*
+ * Position row counter to row where the given key value was found
+ */
+ row = 0;
+ key = NULL;
+
+ while ((((check = dbReadStr(didUM, tableName, columnName, row++,
+ &key)) == 0) || (check == DB_ERR_ROW_DELETED)) &&
+ ((key == NULL) || (gstrcmp(key, keyLast) != 0))) {
+ }
+/*
+ * If the last key value was not found, return NULL
+ */
+ if (!key || gstrcmp(key, keyLast) != 0) {
+ return NULL;
+ }
+/*
+ * Move through table until we retrieve the next row with a non-null key
+ */
+ while (((check = dbReadStr(didUM, tableName, columnName, row++, &key))
+ == 0) || (check == DB_ERR_ROW_DELETED)) {
+ if (key && *key && (gstrcmp(key, keyLast) != 0)) {
+ return key;
+ }
+ }
+
+ return NULL;
+}
+
+/******************************************************************************/
+/*
+ * umAddUser() - Adds a user to the "users" table.
+ */
+
+int umAddUser(char_t *user, char_t *pass, char_t *group,
+ bool_t prot, bool_t disabled)
+{
+ int row;
+ char_t *password;
+
+ a_assert(user && *user);
+ a_assert(pass && *pass);
+ a_assert(group && *group);
+
+ trace(3, T("UM: Adding User <%s>\n"), user);
+
+/*
+ * Do not allow duplicates
+ */
+ if (umUserExists(user)) {
+ return UM_ERR_DUPLICATE;
+ }
+
+/*
+ * Make sure user name and password contain valid characters
+ */
+ if (!umCheckName(user)) {
+ return UM_ERR_BAD_NAME;
+ }
+
+ if (!umCheckName(pass)) {
+ return UM_ERR_BAD_PASSWORD;
+ }
+
+/*
+ * Make sure group exists
+ */
+ if (!umGroupExists(group)) {
+ return UM_ERR_NOT_FOUND;
+ }
+
+/*
+ * Now create the user record
+ */
+ row = dbAddRow(didUM, UM_USER_TABLENAME);
+
+ if (row < 0) {
+ return UM_ERR_GENERAL;
+ }
+
+ if (dbWriteStr(didUM, UM_USER_TABLENAME, UM_NAME, row, user) != 0) {
+ return UM_ERR_GENERAL;
+ }
+
+ password = bstrdup(B_L, pass);
+ umEncryptString(password);
+ dbWriteStr(didUM, UM_USER_TABLENAME, UM_PASS, row, password);
+ bfree(B_L, password);
+ dbWriteStr(didUM, UM_USER_TABLENAME, UM_GROUP, row, group);
+ dbWriteInt(didUM, UM_USER_TABLENAME, UM_PROT, row, prot);
+ dbWriteInt(didUM, UM_USER_TABLENAME, UM_DISABLE, row, disabled);
+
+ return 0;
+}
+
+/******************************************************************************/
+/*
+ * umDeleteUser() - remove a user from the "users" table
+ */
+
+int umDeleteUser(char_t *user)
+{
+ int row;
+
+ a_assert(user && *user);
+ trace(3, T("UM: Deleting User <%s>\n"), user);
+/*
+ * Check to see if user is delete-protected
+ */
+ if (umGetUserProtected(user)) {
+ return UM_ERR_PROTECTED;
+ }
+
+/*
+ * If found, delete the user from the database
+ */
+ if ((row = dbSearchStr(didUM, UM_USER_TABLENAME, UM_NAME, user, 0)) >= 0) {
+ return dbDeleteRow(didUM, UM_USER_TABLENAME, row);
+ }
+
+ return UM_ERR_NOT_FOUND;
+}
+
+/******************************************************************************/
+/*
+ * umGetFirstUser() - Returns the user ID of the first user found in the
+ * "users" table.
+ */
+
+char_t *umGetFirstUser()
+{
+ return umGetFirstRowData(UM_USER_TABLENAME, UM_NAME);
+}
+
+/******************************************************************************/
+/*
+ * umGetNextUser() Returns the next user found in the "users" table after
+ * the given user.
+ */
+
+char_t *umGetNextUser(char_t *userLast)
+{
+ return umGetNextRowData(UM_USER_TABLENAME, UM_NAME, userLast);
+}
+
+/******************************************************************************/
+/*
+ * umUserExists() Returns TRUE if userid exists.
+ */
+
+bool_t umUserExists(char_t *user)
+{
+ a_assert(user && *user);
+
+ if (dbSearchStr(didUM, UM_USER_TABLENAME, UM_NAME, user, 0) >= 0) {
+ return TRUE;
+ } else {
+ return FALSE;
+ }
+}
+
+/******************************************************************************/
+/*
+ * umGetUserPassword() returns a de-crypted copy of the user password
+ */
+
+char_t *umGetUserPassword(char_t *user)
+{
+ char_t *password;
+ int row;
+
+ a_assert(user && *user);
+
+ password = NULL;
+ row = dbSearchStr(didUM, UM_USER_TABLENAME, UM_NAME, user, 0);
+
+ if (row >= 0) {
+ char_t *pass = NULL;
+ dbReadStr(didUM, UM_USER_TABLENAME, UM_PASS, row, &pass);
+/*
+ * Decrypt password
+ * Note, this function returns a copy of the password, which must
+ * be deleted at some time in the future.
+ */
+ password = bstrdup(B_L, pass);
+ umEncryptString(password);
+ }
+
+ return password;
+}
+
+/******************************************************************************/
+/*
+ * umSetUserPassword() updates the user password in the user "table" after
+ * encrypting the given password
+ */
+
+int umSetUserPassword(char_t *user, char_t *pass)
+{
+ int row, nRet;
+ char_t *password;
+
+ a_assert(user && *user);
+ a_assert(pass && *pass);
+ trace(3, T("UM: Attempting to change the password for user <%s>\n"), user);
+/*
+ * Find the row of the user
+ */
+ if ((row = dbSearchStr(didUM, UM_USER_TABLENAME, UM_NAME, user, 0)) < 0) {
+ return UM_ERR_NOT_FOUND;
+ }
+
+ password = bstrdup(B_L, pass);
+ umEncryptString(password);
+ nRet = dbWriteStr(didUM, UM_USER_TABLENAME, UM_PASS, row, password);
+ bfree(B_L, password);
+
+ return nRet;
+}
+
+/******************************************************************************/
+/*
+ * umGetUserGroup() returns the name of the user group
+ */
+
+char_t *umGetUserGroup(char_t *user)
+{
+ char_t *group;
+ int row;
+
+ a_assert(user && *user);
+ group = NULL;
+/*
+ * Find the row of the user
+ */
+ row = dbSearchStr(didUM, UM_USER_TABLENAME, UM_NAME, user, 0);
+
+ if (row >= 0) {
+ dbReadStr(didUM, UM_USER_TABLENAME, UM_GROUP, row, &group);
+ }
+
+ return group;
+}
+
+/******************************************************************************/
+/*
+ * umSetUserGroup() Sets the name of the user group for the user
+ */
+
+int umSetUserGroup(char_t *user, char_t *group)
+{
+ int row;
+
+ a_assert(user && *user);
+ a_assert(group && *group);
+/*
+ * Find the row of the user
+ */
+ row = dbSearchStr(didUM, UM_USER_TABLENAME, UM_NAME, user, 0);
+
+ if (row >= 0) {
+ return dbWriteStr(didUM, UM_USER_TABLENAME, UM_GROUP, row, group);
+ } else {
+ return UM_ERR_NOT_FOUND;
+ }
+}
+
+/******************************************************************************/
+/*
+ * umGetUserEnabled() - returns if the user is enabled
+ * Returns FALSE if the user is not found.
+ */
+
+bool_t umGetUserEnabled(char_t *user)
+{
+ int disabled, row;
+
+ a_assert(user && *user);
+
+ disabled = 1;
+/*
+ * Find the row of the user
+ */
+ row = dbSearchStr(didUM, UM_USER_TABLENAME, UM_NAME, user, 0);
+
+ if (row >= 0) {
+ dbReadInt(didUM, UM_USER_TABLENAME, UM_DISABLE, row, &disabled);
+ }
+
+ return (bool_t)!disabled;
+}
+
+/******************************************************************************/
+/*
+ * umSetUserEnabled() Enables/disables the user
+ */
+int umSetUserEnabled(char_t *user, bool_t enabled)
+{
+ int row;
+
+ a_assert(user && *user);
+/*
+ * Find the row of the user
+ */
+ row = dbSearchStr(didUM, UM_USER_TABLENAME, UM_NAME, user, 0);
+ if (row >= 0) {
+ return dbWriteInt(didUM, UM_USER_TABLENAME, UM_DISABLE, row, !enabled);
+ } else {
+ return UM_ERR_NOT_FOUND;
+ }
+}
+
+/******************************************************************************/
+/*
+ * umGetUserProtected() - determine deletability of user
+ */
+
+bool_t umGetUserProtected(char_t *user)
+{
+ int protect, row;
+
+ a_assert(user && *user);
+/*
+ * Find the row of the user
+ */
+ row = dbSearchStr(didUM, UM_USER_TABLENAME, UM_NAME, user, 0);
+ protect = FALSE;
+
+ if (row >= 0) {
+ dbReadInt(didUM, UM_USER_TABLENAME, UM_PROT, row, &protect);
+ }
+
+ return (bool_t)protect;
+}
+
+/******************************************************************************/
+/*
+ * umSetUserProtected() sets the delete protection for the user
+ */
+int umSetUserProtected(char_t *user, bool_t protect)
+{
+ int row;
+
+ a_assert(user && *user);
+/*
+ * Find the row of the user
+ */
+ row = dbSearchStr(didUM, UM_USER_TABLENAME, UM_NAME, user, 0);
+
+ if (row >= 0) {
+ return dbWriteInt(didUM, UM_USER_TABLENAME, UM_PROT, row, protect);
+ } else {
+ return UM_ERR_NOT_FOUND;
+ }
+}
+
+
+/******************************************************************************/
+/*
+ * umAddGroup() adds a group to the "Group" table
+ */
+
+int umAddGroup(char_t *group, short priv, accessMeth_t am,
+ bool_t prot, bool_t disabled)
+{
+ int row;
+
+ a_assert(group && *group);
+ trace(3, T("UM: Adding group <%s>\n"), group);
+
+/*
+ * Do not allow duplicates
+ */
+ if (umGroupExists(group)) {
+ return UM_ERR_DUPLICATE;
+ }
+
+/*
+ * Only allow valid characters in key field
+ */
+ if (!umCheckName(group)) {
+ return UM_ERR_BAD_NAME;
+ }
+
+/*
+ * Add a new row to the table
+ */
+ if ((row = dbAddRow(didUM, UM_GROUP_TABLENAME)) < 0) {
+ return UM_ERR_GENERAL;
+ }
+
+/*
+ * Write the key field
+ */
+ if (dbWriteStr(didUM, UM_GROUP_TABLENAME, UM_NAME, row, group) != 0) {
+ return UM_ERR_GENERAL;
+ }
+
+/*
+ * Write the remaining fields
+ */
+ dbWriteInt(didUM, UM_GROUP_TABLENAME, UM_PRIVILEGE, row, priv);
+ dbWriteInt(didUM, UM_GROUP_TABLENAME, UM_METHOD, row, (int) am);
+ dbWriteInt(didUM, UM_GROUP_TABLENAME, UM_PROT, row, prot);
+ dbWriteInt(didUM, UM_GROUP_TABLENAME, UM_DISABLE, row, disabled);
+
+ return 0;
+}
+
+/******************************************************************************/
+/*
+ * umDeleteGroup() - Delete a user group, if not protected
+ */
+
+int umDeleteGroup(char_t *group)
+{
+ int row;
+
+ a_assert(group && *group);
+ trace(3, T("UM: Deleting Group <%s>\n"), group);
+
+/*
+ * Check to see if the group is in use
+ */
+ if (umGetGroupInUse(group)) {
+ return UM_ERR_IN_USE;
+ }
+
+/*
+ * Check to see if the group is delete-protected
+ */
+ if (umGetGroupProtected(group)) {
+ return UM_ERR_PROTECTED;
+ }
+
+/*
+ * Find the row of the group to delete
+ */
+ if ((row = dbSearchStr(didUM, UM_GROUP_TABLENAME, UM_NAME, group, 0)) < 0) {
+ return UM_ERR_NOT_FOUND;
+ }
+
+ return dbDeleteRow(didUM, UM_GROUP_TABLENAME, row);
+}
+
+/******************************************************************************/
+/*
+ * umGroupExists() returns TRUE if group exists, FALSE otherwise
+ */
+
+bool_t umGroupExists(char_t *group)
+{
+ a_assert(group && *group);
+
+ if (dbSearchStr(didUM, UM_GROUP_TABLENAME, UM_NAME, group, 0) >= 0) {
+ return TRUE;
+ } else {
+ return FALSE;
+ }
+}
+
+
+/******************************************************************************/
+/*
+ * umGetGroupInUse() returns TRUE if the group is referenced by a user or by
+ * an access limit.
+ */
+
+bool_t umGetGroupInUse(char_t *group)
+{
+ a_assert(group && *group);
+
+/*
+ * First, check the user table
+ */
+ if (dbSearchStr(didUM, UM_USER_TABLENAME, UM_GROUP, group, 0) >= 0) {
+ return TRUE;
+ }
+
+/*
+ * Second, check the access limit table
+ */
+ if (dbSearchStr(didUM, UM_ACCESS_TABLENAME, UM_GROUP, group, 0) >= 0) {
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+
+/******************************************************************************/
+/*
+ * umGetFirstGroup() - return a pointer to the first non-blank group name
+ */
+
+char_t *umGetFirstGroup()
+{
+ return umGetFirstRowData(UM_GROUP_TABLENAME, UM_NAME);
+}
+
+/******************************************************************************/
+/*
+ * umGetNextGroup() - return a pointer to the first non-blank group name
+ * following the given group name
+ */
+
+char_t *umGetNextGroup(char_t *groupLast)
+{
+ return umGetNextRowData(UM_GROUP_TABLENAME, UM_NAME, groupLast);
+}
+
+/******************************************************************************/
+/*
+ * Returns the default access method to use for a given group
+ */
+
+accessMeth_t umGetGroupAccessMethod(char_t *group)
+{
+ int am, row;
+
+ a_assert(group && *group);
+ row = dbSearchStr(didUM, UM_GROUP_TABLENAME, UM_NAME, group, 0);
+
+ if (row >= 0) {
+ dbReadInt(didUM, UM_GROUP_TABLENAME, UM_METHOD, row, (int *)&am);
+ } else {
+ am = AM_INVALID;
+ }
+
+ return (accessMeth_t) am;
+}
+
+/******************************************************************************/
+/*
+ * Set the default access method to use for a given group
+ */
+
+int umSetGroupAccessMethod(char_t *group, accessMeth_t am)
+{
+ int row;
+
+ a_assert(group && *group);
+ row = dbSearchStr(didUM, UM_GROUP_TABLENAME, UM_NAME, group, 0);
+
+ if (row >= 0) {
+ return dbWriteInt(didUM, UM_GROUP_TABLENAME, UM_METHOD, row, (int) am);
+ } else {
+ return UM_ERR_NOT_FOUND;
+ }
+}
+
+/******************************************************************************/
+/*
+ * Returns the privilege mask for a given group
+ */
+
+short umGetGroupPrivilege(char_t *group)
+{
+ int privilege, row;
+
+ a_assert(group && *group);
+ privilege = -1;
+ row = dbSearchStr(didUM, UM_GROUP_TABLENAME, UM_NAME, group, 0);
+
+ if (row >= 0) {
+ dbReadInt(didUM, UM_GROUP_TABLENAME, UM_PRIVILEGE, row, &privilege);
+ }
+
+ return (short) privilege;
+}
+
+/******************************************************************************/
+/*
+ * Set the privilege mask for a given group
+ */
+
+int umSetGroupPrivilege(char_t *group, short privilege)
+{
+ int row;
+
+ a_assert(group && *group);
+ row = dbSearchStr(didUM, UM_GROUP_TABLENAME, UM_NAME, group, 0);
+
+ if (row >= 0) {
+ return dbWriteInt(didUM, UM_GROUP_TABLENAME, UM_PRIVILEGE, row,
+ (int)privilege);
+ } else {
+ return UM_ERR_NOT_FOUND;
+ }
+}
+
+/******************************************************************************/
+/*
+ * Returns the enabled setting for a given group.
+ * Returns FALSE if group is not found.
+ */
+
+bool_t umGetGroupEnabled(char_t *group)
+{
+ int disabled, row;
+
+ a_assert(group && *group);
+ row = dbSearchStr(didUM, UM_GROUP_TABLENAME, UM_NAME, group, 0);
+ disabled = 1;
+
+ if (row >= 0) {
+ dbReadInt(didUM, UM_GROUP_TABLENAME, UM_DISABLE, row, &disabled);
+ }
+
+ return (bool_t) !disabled;
+}
+
+/******************************************************************************/
+/*
+ * Sets the enabled setting for a given group.
+ */
+
+int umSetGroupEnabled(char_t *group, bool_t enabled)
+{
+ int row;
+
+ a_assert(group && *group);
+ row = dbSearchStr(didUM, UM_GROUP_TABLENAME, UM_NAME, group, 0);
+
+ if (row >= 0) {
+ return dbWriteInt(didUM, UM_GROUP_TABLENAME, UM_DISABLE, row,
+ (int) !enabled);
+ } else {
+ return UM_ERR_NOT_FOUND;
+ }
+}
+
+/******************************************************************************/
+/*
+ * Returns the protected setting for a given group
+ * Returns FALSE if user is not found
+ */
+
+bool_t umGetGroupProtected(char_t *group)
+{
+ int protect, row;
+
+ a_assert(group && *group);
+
+ protect = 0;
+ row = dbSearchStr(didUM, UM_GROUP_TABLENAME, UM_NAME, group, 0);
+ if (row >= 0) {
+ dbReadInt(didUM, UM_GROUP_TABLENAME, UM_PROT, row, &protect);
+ }
+
+ return (bool_t) protect;
+}
+
+/******************************************************************************/
+/*
+ * Sets the protected setting for a given group
+ */
+
+int umSetGroupProtected(char_t *group, bool_t protect)
+{
+ int row;
+
+ a_assert(group && *group);
+ row = dbSearchStr(didUM, UM_GROUP_TABLENAME, UM_NAME, group, 0);
+
+ if (row >= 0) {
+ return dbWriteInt(didUM, UM_GROUP_TABLENAME, UM_PROT, row,
+ (int) protect);
+ } else {
+ return UM_ERR_NOT_FOUND;
+ }
+}
+
+
+/******************************************************************************/
+/*
+ * umAddAccessLimit() adds an access limit to the "access" table
+ */
+
+int umAddAccessLimit(char_t *url, accessMeth_t am, short secure, char_t *group)
+{
+ int row;
+
+ a_assert(url && *url);
+ trace(3, T("UM: Adding Access Limit for <%s>\n"), url);
+
+/*
+ * Do not allow duplicates
+ */
+ if (umAccessLimitExists(url)) {
+ return UM_ERR_DUPLICATE;
+ }
+
+/*
+ * Add a new row to the table
+ */
+ if ((row = dbAddRow(didUM, UM_ACCESS_TABLENAME)) < 0) {
+ return UM_ERR_GENERAL;
+ }
+
+/*
+ * Write the key field
+ */
+ if(dbWriteStr(didUM, UM_ACCESS_TABLENAME, UM_NAME, row, url) < 0) {
+ return UM_ERR_GENERAL;
+ }
+
+/*
+ * Write the remaining fields
+ */
+ dbWriteInt(didUM, UM_ACCESS_TABLENAME, UM_METHOD, row, (int)am);
+ dbWriteInt(didUM, UM_ACCESS_TABLENAME, UM_SECURE, row, (int)secure);
+ dbWriteStr(didUM, UM_ACCESS_TABLENAME, UM_GROUP, row, group);
+
+ return 0;
+}
+
+/******************************************************************************/
+/*
+ * umDeleteAccessLimit()
+ */
+
+int umDeleteAccessLimit(char_t *url)
+{
+ int row;
+
+ a_assert(url && *url);
+ trace(3, T("UM: Deleting Access Limit for <%s>\n"), url);
+/*
+ * Find the row of the access limit to delete
+ */
+ if ((row = dbSearchStr(didUM, UM_ACCESS_TABLENAME, UM_NAME, url, 0)) < 0) {
+ return UM_ERR_NOT_FOUND;
+ }
+
+ return dbDeleteRow(didUM, UM_ACCESS_TABLENAME, row);
+}
+
+/******************************************************************************/
+/*
+ * umGetFirstGroup() - return a pointer to the first non-blank access limit
+ */
+
+char_t *umGetFirstAccessLimit()
+{
+ return umGetFirstRowData(UM_ACCESS_TABLENAME, UM_NAME);
+}
+
+/******************************************************************************/
+/*
+ * umGetNextAccessLimit() - return a pointer to the first non-blank
+ * access limit following the given one
+ */
+
+char_t *umGetNextAccessLimit(char_t *urlLast)
+{
+ return umGetNextRowData(UM_ACCESS_TABLENAME, UM_NAME, urlLast);
+}
+
+/******************************************************************************/
+/*
+ * umAccessLimitExists() returns TRUE if this access limit exists
+ */
+
+bool_t umAccessLimitExists(char_t *url)
+{
+ a_assert(url && *url);
+
+ if (dbSearchStr(didUM, UM_ACCESS_TABLENAME, UM_NAME, url, 0) < 0) {
+ return FALSE;
+ } else {
+ return TRUE;
+ }
+}
+
+/******************************************************************************/
+/*
+ * umGetAccessLimit() returns the Access Method for the URL
+ */
+
+accessMeth_t umGetAccessLimitMethod(char_t *url)
+{
+ int am, row;
+
+ am = (int) AM_INVALID;
+ row = dbSearchStr(didUM, UM_ACCESS_TABLENAME, UM_NAME, url, 0);
+
+ if (row >= 0) {
+ dbReadInt(didUM, UM_ACCESS_TABLENAME, UM_METHOD, row, &am);
+ }
+
+ return (accessMeth_t) am;
+}
+
+/******************************************************************************/
+/*
+ * umSetAccessLimitMethod() - set Access Method for Access Limit
+ */
+
+int umSetAccessLimitMethod(char_t *url, accessMeth_t am)
+{
+ int row;
+
+ a_assert(url && *url);
+ row = dbSearchStr(didUM, UM_ACCESS_TABLENAME, UM_NAME, url, 0);
+
+ if (row >= 0) {
+ return dbWriteInt(didUM, UM_ACCESS_TABLENAME, UM_METHOD, row, (int) am);
+ } else {
+ return UM_ERR_NOT_FOUND;
+ }
+}
+
+/******************************************************************************/
+/*
+ * umGetAccessLimitSecure() - returns secure switch for access limit
+ */
+
+short umGetAccessLimitSecure(char_t *url)
+{
+ int secure, row;
+
+ a_assert(url && *url);
+ secure = -1;
+ row = dbSearchStr(didUM, UM_ACCESS_TABLENAME, UM_NAME, url, 0);
+
+ if (row >= 0) {
+ dbReadInt(didUM, UM_ACCESS_TABLENAME, UM_SECURE, row, &secure);
+ }
+
+ return (short)secure;
+}
+
+/******************************************************************************/
+/*
+ * umSetAccessLimitSecure() - sets the secure flag for the URL
+ */
+
+int umSetAccessLimitSecure(char_t *url, short secure)
+{
+ int row;
+
+ a_assert(url && *url);
+ row = dbSearchStr(didUM, UM_ACCESS_TABLENAME, UM_NAME, url, 0);
+
+ if (row >= 0) {
+ return dbWriteInt(didUM, UM_ACCESS_TABLENAME, UM_SECURE, row,
+ (int)secure);
+ } else {
+ return UM_ERR_NOT_FOUND;
+ }
+}
+
+/******************************************************************************/
+/*
+ * umGetAccessLimitGroup() - returns the user group of the access limit
+ */
+
+char_t *umGetAccessLimitGroup(char_t *url)
+{
+ char_t *group;
+ int row;
+
+ a_assert(url && *url);
+ group = NULL;
+ row = dbSearchStr(didUM, UM_ACCESS_TABLENAME, UM_NAME, url, 0);
+
+ if (row >= 0) {
+ dbReadStr(didUM, UM_ACCESS_TABLENAME, UM_GROUP, row, &group);
+ }
+
+ return group;
+}
+
+/******************************************************************************/
+/*
+ * umSetAccessLimitGroup() - sets the user group for the access limit.
+ */
+
+int umSetAccessLimitGroup(char_t *url, char_t *group)
+{
+ int row;
+
+ a_assert(url && *url);
+ row = dbSearchStr(didUM, UM_ACCESS_TABLENAME, UM_NAME, url, 0);
+
+ if (row >= 0) {
+ return dbWriteStr(didUM, UM_ACCESS_TABLENAME, UM_GROUP, row, group);
+ } else {
+ return UM_ERR_NOT_FOUND;
+ }
+}
+
+/******************************************************************************/
+/*
+ * Returns the access limit to use for a given URL, by checking for URLs up
+ * the directory tree. Creates a new string that must be deleted.
+ */
+
+char_t *umGetAccessLimit(char_t *url)
+{
+ char_t *urlRet, *urlCheck, *lastChar;
+ int len;
+
+ a_assert(url && *url);
+ urlRet = NULL;
+ urlCheck = bstrdup(B_L, url);
+ a_assert(urlCheck);
+ len = gstrlen(urlCheck);
+/*
+ * Scan back through URL to see if there is a "parent" access limit
+ */
+ while (len && !urlRet) {
+ if (umAccessLimitExists(urlCheck)) {
+ urlRet = bstrdup(B_L, urlCheck);
+ } else {
+/*
+ * Trim the end portion of the URL to the previous directory marker
+ */
+ lastChar = urlCheck + len;
+ lastChar--;
+
+ while ((lastChar >= urlCheck) && ((*lastChar == '/') ||
+ (*lastChar == '\\'))) {
+ *lastChar = 0;
+ lastChar--;
+ }
+
+ while ((lastChar >= urlCheck) && (*lastChar != '/') &&
+ (*lastChar != '\\')) {
+ *lastChar = 0;
+ lastChar--;
+ }
+
+ len = gstrlen(urlCheck);
+ }
+ }
+ bfree (B_L, urlCheck);
+
+ return urlRet;
+}
+
+/******************************************************************************/
+/*
+ * Returns the access method to use for a given URL
+ */
+
+accessMeth_t umGetAccessMethodForURL(char_t *url)
+{
+ accessMeth_t amRet;
+ char_t *urlHavingLimit, *group;
+
+ urlHavingLimit = umGetAccessLimit(url);
+ if (urlHavingLimit) {
+ group = umGetAccessLimitGroup(urlHavingLimit);
+
+ if (group && *group) {
+ amRet = umGetGroupAccessMethod(group);
+ } else {
+ amRet = umGetAccessLimitMethod(urlHavingLimit);
+ }
+
+ bfree(B_L, urlHavingLimit);
+ } else {
+ amRet = AM_FULL;
+ }
+
+ return amRet;
+}
+
+/******************************************************************************/
+/*
+ * Returns TRUE if user can access URL
+ */
+
+bool_t umUserCanAccessURL(char_t *user, char_t *url)
+{
+ accessMeth_t amURL;
+ char_t *group, *usergroup, *urlHavingLimit;
+ short priv;
+
+ a_assert(user && *user);
+ a_assert(url && *url);
+
+/*
+ * Make sure user exists
+ */
+ if (!umUserExists(user)) {
+ return FALSE;
+ }
+
+/*
+ * Make sure user is enabled
+ */
+ if (!umGetUserEnabled(user)) {
+ return FALSE;
+ }
+
+/*
+ * Make sure user has sufficient privileges (any will do)
+ */
+ usergroup = umGetUserGroup(user);
+ priv = umGetGroupPrivilege(usergroup);
+ if (priv == 0) {
+ return FALSE;
+ }
+
+/*
+ * Make sure user's group is enabled
+ */
+ if (!umGetGroupEnabled(usergroup)) {
+ return FALSE;
+ }
+
+/*
+ * The access method of the user group must not be AM_NONE
+ */
+ if (umGetGroupAccessMethod(usergroup) == AM_NONE) {
+ return FALSE;
+ }
+
+/*
+ * Check to see if there is an Access Limit for this URL
+ */
+ urlHavingLimit = umGetAccessLimit(url);
+ if (urlHavingLimit) {
+ amURL = umGetAccessLimitMethod(urlHavingLimit);
+ group = umGetAccessLimitGroup(urlHavingLimit);
+ bfree(B_L, urlHavingLimit);
+ } else {
+/*
+ * If there isn't an access limit for the URL, user has full access
+ */
+ return TRUE;
+ }
+
+/*
+ * If the access method for the URL is AM_NONE then
+ * the file "doesn't exist".
+ */
+ if (amURL == AM_NONE) {
+ return FALSE;
+ }
+
+/*
+ * If Access Limit has a group specified, then the user must be a
+ * member of that group
+ */
+ if (group && *group) {
+#ifdef qHierarchicalAccess
+ /*
+ * If we are compiling with the hierarchical access extensions, we
+ * instead call the user-provided function that checks to see whether
+ * the current user's access level is greater than or equal to the
+ * access level required for this URL.
+ */
+ return dmfCanAccess(usergroup, group);
+
+#else
+ if (usergroup && (gstrcmp(group, usergroup) != 0)) {
+ return FALSE;
+
+ }
+#endif
+ }
+
+/*
+ * Otherwise, user can access the URL
+ */
+ return TRUE;
+
+}
+
+/******************************************************************************/
+/*
+ * Returns TRUE if given name has only valid chars
+ */
+
+static bool_t umCheckName(char_t *name)
+{
+ a_assert(name && *name);
+
+ if (name && *name) {
+ while (*name) {
+ if (gisspace(*name)) {
+ return FALSE;
+ }
+
+ name++;
+ }
+
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+/******************************************************************************/
+
diff --git a/cleopatre/application/spidgoahead/um.h b/cleopatre/application/spidgoahead/um.h
new file mode 100644
index 0000000000..8052bed6d7
--- /dev/null
+++ b/cleopatre/application/spidgoahead/um.h
@@ -0,0 +1,186 @@
+/*
+ * um.h -- GoAhead User Management public header
+ *
+ * Copyright (c) GoAhead Software Inc., 1992-2000. All Rights Reserved.
+ *
+ * See the file "license.txt" for information on usage and redistribution
+ *
+ * $Id: um.h,v 1.2 2002/10/24 14:44:50 bporter Exp $
+ */
+
+#ifndef _h_UM
+#define _h_UM 1
+
+/******************************** Description *********************************/
+
+/*
+ * GoAhead User Management header. This defines the User Management
+ * public APIs. Include this header for files that contain access to
+ * user inquiry or management.
+ */
+
+/********************************* Includes ***********************************/
+
+#ifndef UEMF
+ #include "basic/basic.h"
+ #include "emf/emf.h"
+#else
+ #include "uemf.h"
+#endif
+
+/********************************** Defines ***********************************/
+
+/*
+ * Error Return Flags
+ */
+#define UM_OK 0
+#define UM_ERR_GENERAL -1
+#define UM_ERR_NOT_FOUND -2
+#define UM_ERR_PROTECTED -3
+#define UM_ERR_DUPLICATE -4
+#define UM_ERR_IN_USE -5
+#define UM_ERR_BAD_NAME -6
+#define UM_ERR_BAD_PASSWORD -7
+
+/*
+ * Privilege Masks
+ */
+#define PRIV_NONE 0x00
+#define PRIV_READ 0x01
+#define PRIV_WRITE 0x02
+#define PRIV_ADMIN 0x04
+
+#define UM_TXT_FILENAME T("um_httpd.conf")
+/*
+ * User classes
+ */
+typedef short bool_t;
+
+#ifndef TRUE
+#define TRUE 1
+#endif
+
+#ifndef FALSE
+#define FALSE 0
+#endif
+
+typedef enum {
+ AM_NONE = 0,
+ AM_FULL,
+ AM_BASIC,
+ AM_DIGEST,
+ AM_INVALID
+} accessMeth_t;
+
+/********************************** Prototypes ********************************/
+
+/*
+ * umOpen() must be called before accessing User Management functions
+ */
+extern int umOpen();
+
+/*
+ * umClose() should be called before shutdown to free memory
+ */
+extern void umClose();
+
+/*
+ * umCommit() persists the user management database
+ */
+extern int umCommit(char_t *filename);
+
+/*
+ * umRestore() loads the user management database
+ */
+extern int umRestore(char_t *filename);
+
+/*
+ * umUser functions use a user ID for a key
+ */
+extern int umAddUser(char_t *user, char_t *password,
+ char_t *group, bool_t protect, bool_t disabled);
+
+extern int umDeleteUser(char_t *user);
+
+extern char_t *umGetFirstUser();
+extern char_t *umGetNextUser(char_t *lastUser);
+
+extern bool_t umUserExists(char_t *user);
+
+extern char_t *umGetUserPassword(char_t *user);
+extern int umSetUserPassword(char_t *user, char_t *password);
+
+extern char_t *umGetUserGroup(char_t *user);
+extern int umSetUserGroup(char_t *user, char_t *password);
+
+extern bool_t umGetUserEnabled(char_t *user);
+extern int umSetUserEnabled(char_t *user, bool_t enabled);
+
+extern bool_t umGetUserProtected(char_t *user);
+extern int umSetUserProtected(char_t *user, bool_t protect);
+
+/*
+ * umGroup functions use a group name for a key
+ */
+extern int umAddGroup(char_t *group, short privilege,
+ accessMeth_t am, bool_t protect, bool_t disabled);
+
+extern int umDeleteGroup(char_t *group);
+
+extern char_t *umGetFirstGroup();
+extern char_t *umGetNextGroup(char_t *lastUser);
+
+extern bool_t umGroupExists(char_t *group);
+extern bool_t umGetGroupInUse(char_t *group);
+
+extern accessMeth_t umGetGroupAccessMethod(char_t *group);
+extern int umSetGroupAccessMethod(char_t *group, accessMeth_t am);
+
+extern bool_t umGetGroupEnabled(char_t *group);
+extern int umSetGroupEnabled(char_t *group, bool_t enabled);
+
+extern short umGetGroupPrivilege(char_t *group);
+extern int umSetGroupPrivilege(char_t *group, short privileges);
+
+extern bool_t umGetGroupProtected(char_t *group);
+extern int umSetGroupProtected(char_t *group, bool_t protect);
+
+/*
+ * umAccessLimit functions use a URL as a key
+ */
+extern int umAddAccessLimit(char_t *url, accessMeth_t am,
+ short secure, char_t *group);
+
+extern int umDeleteAccessLimit(char_t *url);
+
+extern char_t *umGetFirstAccessLimit();
+extern char_t *umGetNextAccessLimit(char_t *lastUser);
+
+/*
+ * Returns the name of an ancestor access limit if
+ */
+extern char_t *umGetAccessLimit(char_t *url);
+
+extern bool_t umAccessLimitExists(char_t *url);
+
+extern accessMeth_t umGetAccessLimitMethod(char_t *url);
+extern int umSetAccessLimitMethod(char_t *url, accessMeth_t am);
+
+extern short umGetAccessLimitSecure(char_t *url);
+extern int umSetAccessLimitSecure(char_t *url, short secure);
+
+extern char_t *umGetAccessLimitGroup(char_t *url);
+extern int umSetAccessLimitGroup(char_t *url, char_t *group);
+
+/*
+ * Convenience Functions
+ */
+
+extern accessMeth_t umGetAccessMethodForURL(char_t *url);
+extern bool_t umUserCanAccessURL(char_t *user, char_t *url);
+
+#endif /* _h_UM */
+
+/******************************************************************************/
+
+
diff --git a/cleopatre/application/spidgoahead/um_httpd.conf b/cleopatre/application/spidgoahead/um_httpd.conf
new file mode 100644
index 0000000000..f35bf56c17
--- /dev/null
+++ b/cleopatre/application/spidgoahead/um_httpd.conf
@@ -0,0 +1,78 @@
+TABLE=users
+ROW=0
+name=admin
+password=KZF
+group=admin
+prot=0
+disable=0
+ROW=1
+name=spidcom
+password=Y^K#N
+group=user
+prot=0
+disable=0
+ROW=2
+name=root
+password=XX
+group=admin
+prot=0
+disable=0
+TABLE=groups
+ROW=0
+name=admin
+priv=4
+method=2
+prot=0
+disable=0
+ROW=1
+name=user
+priv=1
+method=2
+prot=0
+disable=0
+TABLE=access
+ROW=0
+name=/adduser.asp
+method=2
+secure=0
+group=admin
+ROW=1
+name=/addgroup.asp
+method=2
+secure=0
+group=admin
+ROW=2
+name=/addlimit.asp
+method=2
+secure=0
+group=admin
+ROW=3
+name=/dellimit.asp
+method=2
+secure=0
+group=admin
+ROW=4
+name=/deluser.asp
+method=2
+secure=0
+group=admin
+ROW=5
+name=/delgroup.asp
+method=2
+secure=0
+group=admin
+ROW=6
+name=/loadcfg.asp
+method=2
+secure=0
+group=admin
+ROW=7
+name=/savecfg.asp
+method=2
+secure=0
+group=admin
+ROW=8
+name=/
+method=2
+secure=0
+group=
diff --git a/cleopatre/application/spidgoahead/umui.c b/cleopatre/application/spidgoahead/umui.c
new file mode 100644
index 0000000000..411adf35aa
--- /dev/null
+++ b/cleopatre/application/spidgoahead/umui.c
@@ -0,0 +1,642 @@
+/*
+ * umui.c -- User Management GoForm Processing
+ *
+ * Copyright (c) GoAhead Software Inc., 1995-2000. All Rights Reserved.
+ *
+ * See the file "license.txt" for usage and redistribution license requirements
+ *
+ * $Id: umui.c,v 1.2 2002/10/24 14:44:50 bporter Exp $
+ */
+
+/******************************** Description *********************************/
+
+/*
+ * This module provides GoForm functions for User management
+ */
+
+/********************************* Includes ***********************************/
+
+#include "wsIntrn.h"
+#include "um.h"
+
+/********************************* Defines ************************************/
+
+#define NONE_OPTION T("<NONE>")
+#define MSG_START T("<body><h2>")
+#define MSG_END T("</h2></body>")
+
+/**************************** Forward Declarations ****************************/
+
+static void formAddUser(webs_t wp, char_t *path, char_t *query);
+static void formDeleteUser(webs_t wp, char_t *path, char_t *query);
+static void formDisplayUser(webs_t wp, char_t *path, char_t *query);
+static int aspGenerateUserList(int eid, webs_t wp,
+ int argc, char_t **argv);
+
+static void formAddGroup(webs_t wp, char_t *path, char_t *query);
+static void formDeleteGroup(webs_t wp, char_t *path, char_t *query);
+static int aspGenerateGroupList(int eid, webs_t wp,
+ int argc, char_t **argv);
+
+static void formAddAccessLimit(webs_t wp, char_t *path, char_t *query);
+static void formDeleteAccessLimit(webs_t wp, char_t *path, char_t *query);
+static int aspGenerateAccessLimitList(int eid, webs_t wp,
+ int argc, char_t **argv);
+
+static int aspGenerateAccessMethodList(int eid, webs_t wp,
+ int argc, char_t **argv);
+static int aspGeneratePrivilegeList(int eid, webs_t wp,
+ int argc, char_t **argv);
+
+static void formSaveUserManagement(webs_t wp, char_t *path, char_t *query);
+static void formLoadUserManagement(webs_t wp, char_t *path, char_t *query);
+
+static void websMsgStart(webs_t wp);
+static void websMsgEnd(webs_t wp);
+
+/*********************************** Code *************************************/
+/*
+ * Set up the User Management form handlers
+ */
+
+void formDefineUserMgmt(void)
+{
+ websAspDefine(T("MakeGroupList"), aspGenerateGroupList);
+ websAspDefine(T("MakeUserList"), aspGenerateUserList);
+ websAspDefine(T("MakeAccessLimitList"), aspGenerateAccessLimitList);
+ websAspDefine(T("MakeAccessMethodList"), aspGenerateAccessMethodList);
+ websAspDefine(T("MakePrivilegeList"), aspGeneratePrivilegeList);
+
+ websFormDefine(T("AddUser"), formAddUser);
+ websFormDefine(T("DeleteUser"), formDeleteUser);
+ websFormDefine(T("DisplayUser"), formDisplayUser);
+ websFormDefine(T("AddGroup"), formAddGroup);
+ websFormDefine(T("DeleteGroup"), formDeleteGroup);
+ websFormDefine(T("AddAccessLimit"), formAddAccessLimit);
+ websFormDefine(T("DeleteAccessLimit"), formDeleteAccessLimit);
+
+ websFormDefine(T("SaveUserManagement"), formSaveUserManagement);
+ websFormDefine(T("LoadUserManagement"), formLoadUserManagement);
+}
+
+/******************************************************************************/
+/*
+ * Add a user
+ */
+
+static void formAddUser(webs_t wp, char_t *path, char_t *query)
+{
+ char_t *userid, *pass1, *pass2, *group, *enabled, *ok;
+ bool_t bDisable;
+ int nCheck;
+
+ a_assert(wp);
+
+ userid = websGetVar(wp, T("user"), T(""));
+ pass1 = websGetVar(wp, T("password"), T(""));
+ pass2 = websGetVar(wp, T("passconf"), T(""));
+ group = websGetVar(wp, T("group"), T(""));
+ enabled = websGetVar(wp, T("enabled"), T(""));
+ ok = websGetVar(wp, T("ok"), T(""));
+
+ websHeader(wp);
+ websMsgStart(wp);
+
+ if (gstricmp(ok, T("ok")) != 0) {
+ websWrite(wp, T("Add User Cancelled"));
+ } else if (gstrcmp(pass1, pass2) != 0) {
+ websWrite(wp, T("Confirmation Password did not match."));
+ } else {
+ if (enabled && *enabled && (gstrcmp(enabled, T("on")) == 0)) {
+ bDisable = FALSE;
+ } else {
+ bDisable = TRUE;
+ }
+
+ nCheck = umAddUser(userid, pass1, group, 0, bDisable);
+ if (nCheck != 0) {
+ char_t * strError;
+
+ switch (nCheck) {
+ case UM_ERR_DUPLICATE:
+ strError = T("User already exists.");
+ break;
+
+ case UM_ERR_BAD_NAME:
+ strError = T("Invalid user name.");
+ break;
+
+ case UM_ERR_BAD_PASSWORD:
+ strError = T("Invalid password.");
+ break;
+
+ case UM_ERR_NOT_FOUND:
+ strError = T("Invalid or unselected group.");
+ break;
+
+ default:
+ strError = T("Error writing user record.");
+ break;
+ }
+
+ websWrite(wp, T("Unable to add user, \"%s\". %s"),
+ userid, strError);
+ } else {
+ websWrite(wp, T("User, \"%s\" was successfully added."),
+ userid);
+ }
+ }
+
+ websMsgEnd(wp);
+ websFooter(wp);
+ websDone(wp, 200);
+}
+
+/******************************************************************************/
+/*
+ * Delete a user
+ */
+
+static void formDeleteUser(webs_t wp, char_t *path, char_t *query)
+{
+ char_t *userid, *ok;
+
+ a_assert(wp);
+
+ userid = websGetVar(wp, T("user"), T(""));
+ ok = websGetVar(wp, T("ok"), T(""));
+
+ websHeader(wp);
+ websMsgStart(wp);
+
+ if (gstricmp(ok, T("ok")) != 0) {
+ websWrite(wp, T("Delete User Cancelled"));
+ } else if (umUserExists(userid) == FALSE) {
+ websWrite(wp, T("ERROR: User \"%s\" not found"), userid);
+ } else if (umGetUserProtected(userid)) {
+ websWrite(wp, T("ERROR: User, \"%s\" is delete-protected."), userid);
+ } else if (umDeleteUser(userid) != 0) {
+ websWrite(wp, T("ERROR: Unable to delete user, \"%s\" "), userid);
+ } else {
+ websWrite(wp, T("User, \"%s\" was successfully deleted."), userid);
+ }
+
+ websMsgEnd(wp);
+ websFooter(wp);
+ websDone(wp, 200);
+}
+
+/******************************************************************************/
+/*
+ * Display the user info
+ */
+
+static void formDisplayUser(webs_t wp, char_t *path, char_t *query)
+{
+ char_t *userid, *ok, *temp;
+ bool_t enabled;
+
+ a_assert(wp);
+
+ userid = websGetVar(wp, T("user"), T(""));
+ ok = websGetVar(wp, T("ok"), T(""));
+
+ websHeader(wp);
+ websWrite(wp, T("<body>"));
+
+ if (gstricmp(ok, T("ok")) != 0) {
+ websWrite(wp, T("Display User Cancelled"));
+ } else if (umUserExists(userid) == FALSE) {
+ websWrite(wp, T("ERROR: User <b>%s</b> not found.\n"), userid);
+ } else {
+ websWrite(wp, T("<h2>User ID: <b>%s</b></h2>\n"), userid);
+ temp = umGetUserGroup(userid);
+ websWrite(wp, T("<h3>User Group: <b>%s</b></h3>\n"), temp);
+ enabled = umGetUserEnabled(userid);
+ websWrite(wp, T("<h3>Enabled: <b>%d</b></h3>\n"), enabled);
+ }
+
+ websWrite(wp, T("</body>\n"));
+ websFooter(wp);
+ websDone(wp, 200);
+}
+
+
+/******************************************************************************/
+/*
+ * Generate HTML to create a list box containing the users
+ */
+
+static int aspGenerateUserList(int eid, webs_t wp, int argc, char_t **argv)
+{
+ char_t *userid;
+ int row, nBytesSent, nBytes;
+
+ a_assert(wp);
+
+ nBytes = websWrite(wp,
+ T("<SELECT NAME=\"user\" SIZE=\"3\" TITLE=\"Select a User\">"));
+ row = 0;
+ userid = umGetFirstUser();
+ nBytesSent = 0;
+
+ while (userid && (nBytes > 0)) {
+ nBytes = websWrite(wp, T("<OPTION VALUE=\"%s\">%s\n"),
+ userid, userid);
+ userid = umGetNextUser(userid);
+ nBytesSent += nBytes;
+ }
+
+ nBytesSent += websWrite(wp, T("</SELECT>"));
+
+ return nBytesSent;
+}
+
+/******************************************************************************/
+/*
+ * Add a group
+ */
+
+static void formAddGroup(webs_t wp, char_t *path, char_t *query)
+{
+ char_t *group, *enabled, *privilege, *method, *ok, *pChar;
+ int nCheck;
+ short priv;
+ accessMeth_t am;
+ bool_t bDisable;
+
+ a_assert(wp);
+
+ group = websGetVar(wp, T("group"), T(""));
+ method = websGetVar(wp, T("method"), T(""));
+ enabled = websGetVar(wp, T("enabled"), T(""));
+ privilege = websGetVar(wp, T("privilege"), T(""));
+ ok = websGetVar(wp, T("ok"), T(""));
+
+ websHeader(wp);
+ websMsgStart(wp);
+
+ if (gstricmp(ok, T("ok")) != 0) {
+ websWrite(wp, T("Add Group Cancelled."));
+ } else if ((group == NULL) || (*group == 0)) {
+ websWrite(wp, T("No Group Name was entered."));
+ } else if (umGroupExists(group)) {
+ websWrite(wp, T("ERROR: Group, \"%s\" already exists."), group);
+ } else {
+ if (privilege && *privilege) {
+/*
+ * privilege is a mulitple <SELECT> var, and must be parsed.
+ * Values for these variables are space delimited.
+ */
+ priv = 0;
+ for (pChar = privilege; *pChar; pChar++) {
+ if (*pChar == ' ') {
+ *pChar = '\0';
+ priv |= gatoi(privilege);
+ *pChar = ' ';
+ privilege = pChar + 1;
+ }
+ }
+ priv |= gatoi(privilege);
+ } else {
+ priv = 0;
+ }
+
+ if (method && *method) {
+ am = (accessMeth_t) gatoi(method);
+ } else {
+ am = AM_FULL;
+ }
+
+ if (enabled && *enabled && (gstrcmp(enabled, T("on")) == 0)) {
+ bDisable = FALSE;
+ } else {
+ bDisable = TRUE;
+ }
+
+ nCheck = umAddGroup(group, priv, am, 0, bDisable);
+ if (nCheck != 0) {
+ websWrite(wp, T("Unable to add group, \"%s\", code: %d "),
+ group, nCheck);
+ } else {
+ websWrite(wp, T("Group, \"%s\" was successfully added."),
+ group);
+ }
+ }
+
+ websMsgEnd(wp);
+ websFooter(wp);
+ websDone(wp, 200);
+}
+
+/******************************************************************************/
+/*
+ * Delete a group
+ */
+
+static void formDeleteGroup(webs_t wp, char_t *path, char_t *query)
+{
+ char_t *group, *ok;
+
+ a_assert(wp);
+
+ group = websGetVar(wp, T("group"), T(""));
+ ok = websGetVar(wp, T("ok"), T(""));
+
+ websHeader(wp);
+ websMsgStart(wp);
+
+ if (gstricmp(ok, T("ok")) != 0) {
+ websWrite(wp, T("Delete Group Cancelled."));
+ } else if ((group == NULL) || (*group == '\0')) {
+ websWrite(wp, T("ERROR: No group was selected."));
+ } else if (umGetGroupProtected(group)) {
+ websWrite(wp, T("ERROR: Group, \"%s\" is delete-protected."), group);
+ } else if (umGetGroupInUse(group)) {
+ websWrite(wp, T("ERROR: Group, \"%s\" is being used."), group);
+ } else if (umDeleteGroup(group) != 0) {
+ websWrite(wp, T("ERROR: Unable to delete group, \"%s\" "), group);
+ } else {
+ websWrite(wp, T("Group, \"%s\" was successfully deleted."), group);
+ }
+
+ websMsgEnd(wp);
+ websFooter(wp);
+ websDone(wp, 200);
+}
+
+/******************************************************************************/
+/*
+ * Generate HTML to create a list box containing the groups
+ */
+
+static int aspGenerateGroupList(int eid, webs_t wp, int argc, char_t **argv)
+{
+ char_t *group;
+ int row, nBytesSent, nBytes;
+
+ a_assert(wp);
+
+ row = 0;
+ nBytesSent = 0;
+ nBytes = websWrite(wp,
+ T("<SELECT NAME=\"group\" SIZE=\"3\" TITLE=\"Select a Group\">"));
+/*
+ * Add a special "<NONE>" element to allow de-selection
+ */
+ nBytes = websWrite(wp, T("<OPTION VALUE=\"\">[NONE]\n"));
+
+ group = umGetFirstGroup();
+ while (group && (nBytes > 0)) {
+ nBytes = websWrite(wp, T("<OPTION VALUE=\"%s\">%s\n"), group, group);
+ group = umGetNextGroup(group);
+ nBytesSent += nBytes;
+ }
+
+ nBytesSent += websWrite(wp, T("</SELECT>"));
+
+ return nBytesSent;
+}
+
+/******************************************************************************/
+/*
+ * Add an access limit
+ */
+
+static void formAddAccessLimit(webs_t wp, char_t *path, char_t *query)
+{
+ char_t *url, *method, *group, *secure, *ok;
+ int nCheck;
+ accessMeth_t am;
+ short nSecure;
+
+ a_assert(wp);
+
+ url = websGetVar(wp, T("url"), T(""));
+ group = websGetVar(wp, T("group"), T(""));
+ method = websGetVar(wp, T("method"), T(""));
+ secure = websGetVar(wp, T("secure"), T(""));
+ ok = websGetVar(wp, T("ok"), T(""));
+
+ websHeader(wp);
+ websMsgStart(wp);
+
+ if (gstricmp(ok, T("ok")) != 0) {
+ websWrite(wp, T("Add Access Limit Cancelled."));
+ } else if ((url == NULL) || (*url == 0)) {
+ websWrite(wp, T("ERROR: No URL was entered."));
+ } else if (umAccessLimitExists(url)) {
+ websWrite(wp, T("ERROR: An Access Limit for [%s] already exists."),
+ url);
+ } else {
+ if (method && *method) {
+ am = (accessMeth_t) gatoi(method);
+ } else {
+ am = AM_FULL;
+ }
+
+ if (secure && *secure) {
+ nSecure = (short) gatoi(secure);
+ } else {
+ nSecure = 0;
+ }
+
+ nCheck = umAddAccessLimit(url, am, nSecure, group);
+ if (nCheck != 0) {
+ websWrite(wp, T("Unable to add Access Limit for [%s]"), url);
+ } else {
+ websWrite(wp, T("Access limit for [%s], was successfully added."),
+ url);
+ }
+ }
+
+ websMsgEnd(wp);
+ websFooter(wp);
+ websDone(wp, 200);
+}
+
+/******************************************************************************/
+/*
+ * Delete an Access Limit
+ */
+
+static void formDeleteAccessLimit(webs_t wp, char_t *path, char_t *query)
+{
+ char_t *url, *ok;
+
+ a_assert(wp);
+
+ url = websGetVar(wp, T("url"), T(""));
+ ok = websGetVar(wp, T("ok"), T(""));
+
+ websHeader(wp);
+ websMsgStart(wp);
+
+ if (gstricmp(ok, T("ok")) != 0) {
+ websWrite(wp, T("Delete Access Limit Cancelled"));
+ } else if (umDeleteAccessLimit(url) != 0) {
+ websWrite(wp, T("ERROR: Unable to delete Access Limit for [%s]"),
+ url);
+ } else {
+ websWrite(wp, T("Access Limit for [%s], was successfully deleted."),
+ url);
+ }
+
+ websMsgEnd(wp);
+ websFooter(wp);
+ websDone(wp, 200);
+}
+
+/******************************************************************************/
+/*
+ * Generate HTML to create a list box containing the access limits
+ */
+
+static int aspGenerateAccessLimitList(int eid, webs_t wp,
+ int argc, char_t **argv)
+{
+ char_t *url;
+ int row, nBytesSent, nBytes;
+
+ a_assert(wp);
+
+ row = nBytesSent = 0;
+ url = umGetFirstAccessLimit();
+ nBytes = websWrite(wp,
+ T("<SELECT NAME=\"url\" SIZE=\"3\" TITLE=\"Select a URL\">"));
+
+ while (url && (nBytes > 0)) {
+ nBytes = websWrite(wp, T("<OPTION VALUE=\"%s\">%s\n"), url, url);
+ url = umGetNextAccessLimit(url);
+ nBytesSent += nBytes;
+ }
+
+ nBytesSent += websWrite(wp, T("</SELECT>"));
+
+ return nBytesSent;
+}
+
+/******************************************************************************/
+/*
+ * Generate HTML to create a list box containing the access methods
+ */
+
+static int aspGenerateAccessMethodList(int eid, webs_t wp,
+ int argc, char_t **argv)
+{
+ int nBytes;
+
+ a_assert(wp);
+
+ nBytes = websWrite(wp,
+ T("<SELECT NAME=\"method\" SIZE=\"3\" TITLE=\"Select a Method\">"));
+ nBytes += websWrite(wp, T("<OPTION VALUE=\"%d\">FULL ACCESS\n"),
+ AM_FULL);
+ nBytes += websWrite(wp, T("<OPTION VALUE=\"%d\">BASIC ACCESS\n"),
+ AM_BASIC);
+ nBytes += websWrite(wp, T("<OPTION VALUE=\"%d\" SELECTED>DIGEST ACCESS\n"),
+ AM_DIGEST);
+ nBytes += websWrite(wp, T("<OPTION VALUE=\"%d\">NO ACCESS\n"),
+ AM_NONE);
+ nBytes += websWrite(wp, T("</SELECT>"));
+
+ return nBytes;
+}
+/******************************************************************************/
+/*
+ * Generate HTML to create a list box containing privileges
+ */
+
+static int aspGeneratePrivilegeList(int eid, webs_t wp,
+ int argc, char_t **argv)
+{
+ int nBytes;
+
+ a_assert(wp);
+
+ nBytes = websWrite(wp, T("<SELECT NAME=\"privilege\" SIZE=\"3\" "));
+ nBytes += websWrite(wp, T("MULTIPLE TITLE=\"Choose Privileges\">"));
+ nBytes += websWrite(wp, T("<OPTION VALUE=\"%d\">READ\n"), PRIV_READ);
+ nBytes += websWrite(wp, T("<OPTION VALUE=\"%d\">EXECUTE\n"), PRIV_WRITE);
+ nBytes += websWrite(wp, T("<OPTION VALUE=\"%d\">ADMINISTRATE\n"),
+ PRIV_ADMIN);
+ nBytes += websWrite(wp, T("</SELECT>"));
+
+ return nBytes;
+}
+
+/******************************************************************************/
+/*
+ * Save the user management configuration to a file
+ */
+
+static void formSaveUserManagement(webs_t wp, char_t *path, char_t *query)
+{
+ char_t *ok;
+
+ a_assert(wp);
+
+ ok = websGetVar(wp, T("ok"), T(""));
+
+ websHeader(wp);
+ websMsgStart(wp);
+
+ if (gstricmp(ok, T("ok")) != 0) {
+ websWrite(wp, T("Save Cancelled."));
+ } else if (umCommit(NULL) != 0) {
+ websWrite(wp, T("ERROR: Unable to save user configuration."));
+ } else {
+ websWrite(wp, T("User configuration was saved successfully."));
+ }
+
+ websMsgEnd(wp);
+ websFooter(wp);
+ websDone(wp, 200);
+}
+
+/******************************************************************************/
+/*
+ * Load the user management configuration from a file
+ */
+
+static void formLoadUserManagement(webs_t wp, char_t *path, char_t *query)
+{
+ char_t *ok;
+
+ a_assert(wp);
+
+ ok = websGetVar(wp, T("ok"), T(""));
+
+ websHeader(wp);
+ websMsgStart(wp);
+
+ if (gstricmp(ok, T("ok")) != 0) {
+ websWrite(wp, T("Load Cancelled."));
+ } else if (umRestore(NULL) != 0) {
+ websWrite(wp, T("ERROR: Unable to load user configuration."));
+ } else {
+ websWrite(wp, T("User configuration was re-loaded successfully."));
+ }
+
+ websMsgEnd(wp);
+ websFooter(wp);
+ websDone(wp, 200);
+}
+
+/******************************************************************************/
+/*
+ * Message start and end convenience functions
+ */
+
+static void websMsgStart(webs_t wp)
+{
+ websWrite(wp, MSG_START);
+}
+
+static void websMsgEnd(webs_t wp)
+{
+ websWrite(wp, MSG_END);
+}
+
+/******************************************************************************/
+
diff --git a/cleopatre/application/spidgoahead/url.c b/cleopatre/application/spidgoahead/url.c
new file mode 100644
index 0000000000..557758bedf
--- /dev/null
+++ b/cleopatre/application/spidgoahead/url.c
@@ -0,0 +1,223 @@
+/*
+ * url.c -- Parse URLs
+ *
+ * Copyright (c) GoAhead Software Inc., 1995-2000. All Rights Reserved.
+ *
+ * See the file "license.txt" for usage and redistribution license requirements
+ *
+ * $Id: url.c,v 1.4 2003/11/25 21:48:13 hwolff Exp $
+ */
+
+/******************************** Description *********************************/
+
+/*
+ * This module parses URLs into their components.
+ */
+
+/********************************* Includes ***********************************/
+
+#include "wsIntrn.h"
+
+/********************************* Statics ************************************/
+/*
+ * htmExt is declared in this way to avoid a Linux and Solaris segmentation
+ * fault when a constant string is passed to strlower which could change its
+ * argument.
+ */
+
+char_t htmExt[] = T(".htm");
+
+
+/*********************************** Code *************************************/
+/*
+ * Return the mime type for the given URL given a URL.
+ * The caller supplies the buffer to hold the result.
+ * charCnt is the number of characters the buffer will hold, ascii or UNICODE.
+ */
+
+char_t *websUrlType(char_t *url, char_t *buf, int charCnt)
+{
+ sym_t *sp;
+ char_t *ext, *parsebuf;
+
+ a_assert(url && *url);
+ a_assert(buf && charCnt > 0);
+
+ if (url == NULL || *url == '\0') {
+ gstrcpy(buf, T("text/plain"));
+ return buf;
+ }
+ if (websUrlParse(url, &parsebuf, NULL, NULL, NULL, NULL, NULL,
+ NULL, &ext) < 0) {
+ gstrcpy(buf, T("text/plain"));
+ return buf;
+ }
+ strlower(ext);
+
+/*
+ * Lookup the mime type symbol table to find the relevant content type
+ */
+ if ((sp = symLookup(websMime, ext)) != NULL) {
+ gstrncpy(buf, sp->content.value.string, charCnt);
+ } else {
+ gstrcpy(buf, T("text/plain"));
+ }
+ bfree(B_L, parsebuf);
+ return buf;
+}
+
+/******************************************************************************/
+/*
+ * Parse the URL. A buffer is allocated to store the parsed URL in *pbuf.
+ * This must be freed by the caller. NOTE: tag is not yet fully supported.
+ */
+
+int websUrlParse(char_t *url, char_t **pbuf, char_t **phost, char_t **ppath,
+ char_t **pport, char_t **pquery, char_t **pproto, char_t **ptag,
+ char_t **pext)
+{
+ char_t *tok, *cp, *host, *path, *port, *proto, *tag, *query, *ext;
+ char_t *hostbuf, *portbuf, *buf;
+ int c, len, ulen;
+
+ a_assert(url);
+ a_assert(pbuf);
+
+ ulen = gstrlen(url);
+/*
+ * We allocate enough to store separate hostname and port number fields.
+ * As there are 3 strings in the one buffer, we need room for 3 null chars.
+ * We allocate MAX_PORT_LEN char_t's for the port number.
+ */
+ len = ulen * 2 + MAX_PORT_LEN + 3;
+ if ((buf = balloc(B_L, len * sizeof(char_t))) == NULL) {
+ return -1;
+ }
+ portbuf = &buf[len - MAX_PORT_LEN - 1];
+ hostbuf = &buf[ulen+1];
+ /*
+ Handle any URL encoding.
+ Otherwise a URL ending in ".as%70", for example, causes trouble.
+ */
+ websDecodeUrl(buf, url, ulen);
+
+ url = buf;
+
+/*
+ * Convert the current listen port to a string. We use this if the URL has
+ * no explicit port setting
+ */
+ stritoa(websGetPort(), portbuf, MAX_PORT_LEN);
+ port = portbuf;
+ path = T("/");
+ proto = T("http");
+ host = T("localhost");
+ query = T("");
+ ext = htmExt;
+ tag = T("");
+
+ if (gstrncmp(url, T("http://"), 7) == 0) {
+ tok = &url[7];
+ tok[-3] = '\0';
+ proto = url;
+ host = tok;
+ for (cp = tok; *cp; cp++) {
+ if (*cp == '/') {
+ break;
+ }
+ if (*cp == ':') {
+ *cp++ = '\0';
+ port = cp;
+ tok = cp;
+ }
+ }
+ if ((cp = gstrchr(tok, '/')) != NULL) {
+/*
+ * If a full URL is supplied, we need to copy the host and port
+ * portions into static buffers.
+ */
+ c = *cp;
+ *cp = '\0';
+ gstrncpy(hostbuf, host, ulen);
+ gstrncpy(portbuf, port, MAX_PORT_LEN);
+ *cp = c;
+ host = hostbuf;
+ port = portbuf;
+ path = cp;
+ tok = cp;
+ }
+
+ } else {
+ path = url;
+ tok = url;
+ }
+
+/*
+ * Parse the query string
+ */
+ if ((cp = gstrchr(tok, '?')) != NULL) {
+ *cp++ = '\0';
+ query = cp;
+ path = tok;
+ tok = query;
+ }
+
+/*
+ * Parse the fragment identifier
+ */
+ if ((cp = gstrchr(tok, '#')) != NULL) {
+ *cp++ = '\0';
+ if (*query == 0) {
+ path = tok;
+ }
+ }
+
+/*
+ * Only do the following if asked for the extension
+ */
+ if (pext) {
+ /*
+ Later the path will be cleaned up for trailing slashes and so on.
+ To be ready, we need to clean up here, much as in websValidateUrl.
+ Otherwise a URL ending in "asp/" or "asP" sends Ejscript source
+ to the browser.
+ */
+ if ((cp = gstrrchr(path, '.')) != NULL) {
+ const char_t* garbage = T("/\\");
+ int length = gstrcspn(cp, garbage);
+ int garbageLength = gstrspn(cp + length, garbage);
+ int ok = (length + garbageLength == (int) gstrlen(cp));
+
+ if (ok) {
+ cp[length] = '\0';
+#ifdef WIN32
+ strlower(cp);
+#endif
+ ext = cp;
+ }
+ }
+ }
+
+/*
+ * Pass back the fields requested (if not NULL)
+ */
+ if (phost)
+ *phost = host;
+ if (ppath)
+ *ppath = path;
+ if (pport)
+ *pport = port;
+ if (pproto)
+ *pproto = proto;
+ if (pquery)
+ *pquery = query;
+ if (ptag)
+ *ptag = tag;
+ if (pext)
+ *pext = ext;
+ *pbuf = buf;
+ return 0;
+}
+
+/******************************************************************************/
+
diff --git a/cleopatre/application/spidgoahead/value.c b/cleopatre/application/spidgoahead/value.c
new file mode 100644
index 0000000000..8bad4e71e5
--- /dev/null
+++ b/cleopatre/application/spidgoahead/value.c
@@ -0,0 +1,1214 @@
+/*
+ * value.c -- Generic type (holds all types)
+ *
+ * Copyright (c) GoAhead Software Inc., 1995-2000. All Rights Reserved.
+ *
+ * $Id: value.c,v 1.3 2002/10/24 14:44:50 bporter Exp $
+ */
+
+/******************************** Description *********************************/
+
+/*
+ * This module provides a generic type that can hold all possible types.
+ * It is designed to provide maximum effeciency.
+ */
+
+/********************************* Includes ***********************************/
+
+#ifdef UEMF
+ #include "uemf.h"
+#else
+ #include "basic/basicInternal.h"
+#endif
+
+/*********************************** Locals ***********************************/
+#ifndef UEMF
+static value_t value_null; /* All zeros */
+
+/***************************** Forward Declarations ***************************/
+
+static void coerce_types(value_t* v1, value_t* v2);
+static int value_to_integer(value_t* vp);
+#endif /*!UEMF*/
+/*********************************** Code *************************************/
+/*
+ * Initialize a integer value.
+ */
+
+value_t valueInteger(long value)
+{
+ value_t v;
+
+ memset(&v, 0x0, sizeof(v));
+ v.valid = 1;
+ v.type = integer;
+ v.value.integer = value;
+ return v;
+}
+
+/******************************************************************************/
+/*
+ * Initialize a string value.
+ */
+
+value_t valueString(char_t* value, int flags)
+{
+ value_t v;
+
+ memset(&v, 0x0, sizeof(v));
+ v.valid = 1;
+ v.type = string;
+ if (flags & VALUE_ALLOCATE) {
+ v.allocated = 1;
+ v.value.string = gstrdup(B_L, value);
+ } else {
+ v.allocated = 0;
+ v.value.string = value;
+ }
+ return v;
+}
+
+/******************************************************************************/
+/*
+ * Free any storage allocated for a value.
+ */
+
+void valueFree(value_t* v)
+{
+ if (v->valid && v->allocated && v->type == string &&
+ v->value.string != NULL) {
+ bfree(B_L, v->value.string);
+ }
+#ifndef UEMF
+ if (v->valid && v->type == symbol && v->value.symbol.data != NULL &&
+ v->value.symbol.freeCb !=NULL) {
+ v->value.symbol.freeCb(v->value.symbol.data);
+ }
+#endif
+ v->type = undefined;
+ v->valid = 0;
+ v->allocated = 0;
+}
+
+#ifndef UEMF
+
+/******************************************************************************/
+/*
+ * Initialize an invalid value.
+ */
+
+value_t valueInvalid()
+{
+ value_t v;
+ v.valid = 0;
+ v.type = undefined;
+ return v;
+}
+
+/******************************************************************************/
+/*
+ * Initialize a flag value.
+ */
+
+value_t valueBool(int value)
+{
+ value_t v;
+
+ memset(&v, 0x0, sizeof(v));
+ v.type = flag;
+ v.valid = 1;
+ v.value.flag = (char) value;
+ return v;
+}
+
+/******************************************************************************/
+/*
+ * Initialize a byteint value.
+ */
+
+value_t valueByteint(char value)
+{
+ value_t v;
+
+ memset(&v, 0x0, sizeof(v));
+ v.valid = 1;
+ v.type = byteint;
+ v.value.byteint = value;
+ return v;
+}
+
+/******************************************************************************/
+/*
+ * Initialize a shortint value.
+ */
+
+value_t valueShortint(short value)
+{
+ value_t v;
+
+ memset(&v, 0x0, sizeof(v));
+ v.valid = 1;
+ v.type = shortint;
+ v.value.shortint = value;
+ return v;
+}
+
+#ifdef FLOATING_POINT_SUPPORT
+/******************************************************************************/
+/*
+ * Initialize a floating value.
+ */
+
+value_t valueFloating(double value)
+{
+ value_t v;
+
+ memset(&v, 0x0, sizeof(v));
+ v.valid = 1;
+ v.type = floating;
+ v.value.floating = value;
+ return v;
+}
+#endif /* FLOATING_POINT_SUPPORT */
+
+/******************************************************************************/
+/*
+ * Initialize a big value.
+ */
+
+value_t valueBig(long high_word, long low_word)
+{
+ value_t v;
+
+ memset(&v, 0x0, sizeof(v));
+ v.valid = 1;
+ v.type = big;
+ v.value.big[BLOW] = low_word;
+ v.value.big[BHIGH] = high_word;
+ return v;
+}
+
+/******************************************************************************/
+/*
+ * Initialize a hex value.
+ */
+
+value_t valueHex(int value)
+{
+ value_t v;
+
+ memset(&v, 0x0, sizeof(v));
+ v.valid = 1;
+ v.type = hex;
+ v.value.integer = value;
+ return v;
+}
+
+/******************************************************************************/
+/*
+ * Initialize a octal value.
+ */
+
+value_t valueOctal(int value)
+{
+ value_t v;
+
+ memset(&v, 0x0, sizeof(v));
+ v.valid = 1;
+ v.type = octal;
+ v.value.integer = value;
+ return v;
+}
+
+/******************************************************************************/
+/*
+ * Initialize a percent value.
+ */
+
+value_t valuePercent(int value)
+{
+ value_t v;
+
+ memset(&v, 0x0, sizeof(v));
+ v.valid = 1;
+ v.type = percent;
+ v.value.percent = (char) value;
+ return v;
+}
+
+/******************************************************************************/
+/*
+ * Initialize an byte array. Note: no allocation, just store the ptr
+ */
+
+value_t valueBytes(char* value, int flags)
+{
+ value_t v;
+
+ memset(&v, 0x0, sizeof(v));
+ v.valid = 1;
+ v.type = bytes;
+ if (flags & VALUE_ALLOCATE) {
+ v.allocated = 1;
+ v.value.bytes = bstrdupA(B_L, value);
+ } else {
+ v.allocated = 0;
+ v.value.bytes = value;
+ }
+ return v;
+}
+
+/******************************************************************************/
+/*
+ * Initialize a symbol value.
+ * Value parameter can hold a pointer to any type of value
+ * Free parameter can be NULL, or a function pointer to a function that will
+ * free the value
+ */
+
+value_t valueSymbol(void *value, freeCallback freeCb)
+{
+ value_t v;
+
+ memset(&v, 0x0, sizeof(v));
+ v.valid = 1;
+ v.type = symbol;
+ v.value.symbol.data = value;
+ v.value.symbol.freeCb = freeCb;
+ return v;
+}
+
+/******************************************************************************/
+/*
+ * Initialize an error message value.
+ */
+
+value_t valueErrmsg(char_t* value)
+{
+ value_t v;
+
+ memset(&v, 0x0, sizeof(v));
+ v.valid = 1;
+ v.type = errmsg;
+ v.value.errmsg = value;
+ return v;
+}
+
+/******************************************************************************/
+/*
+ * Copy a value. If the type is 'string' then allocate another string.
+ * Note: we allow the copy of a null value.
+ */
+
+value_t valueCopy(value_t v2)
+{
+ value_t v1;
+
+ v1 = v2;
+ if (v2.valid && v2.type == string && v2.value.string != NULL) {
+ v1.value.string = gstrdup(B_L, v2.value.string);
+ v1.allocated = 1;
+ }
+ return v1;
+}
+
+
+/******************************************************************************/
+/*
+ * Add a value.
+ */
+
+value_t valueAdd(value_t v1, value_t v2)
+{
+ value_t v;
+
+ a_assert(v1.valid);
+ a_assert(v2.valid);
+
+ memset(&v, 0x0, sizeof(v));
+ v.valid = 1;
+
+ if (v1.type != v2.type)
+ coerce_types(&v1, &v2);
+
+ switch (v1.type) {
+ default:
+ case string:
+ case bytes:
+ a_assert(0);
+ break;
+
+#ifdef FLOATING_POINT_SUPPORT
+ case floating:
+ v1.value.floating += v2.value.floating;
+ return v1;
+#endif
+
+ case flag:
+ v1.value.bool |= v2.value.flag;
+ return v1;
+
+ case byteint:
+ case percent:
+ v1.value.byteint += v2.value.byteint;
+ return v1;
+
+ case shortint:
+ v1.value.shortint += v2.value.shortint;
+ return v1;
+
+ case hex:
+ case integer:
+ case octal:
+ v1.value.integer += v2.value.integer;
+ return v1;
+
+ case big:
+ v.type = big;
+ badd(v.value.big, v1.value.big, v2.value.big);
+ return v;
+ }
+
+ return v1;
+}
+
+
+/******************************************************************************/
+/*
+ * Subtract a value.
+ */
+
+value_t valueSub(value_t v1, value_t v2)
+{
+ value_t v;
+
+ a_assert(v1.valid);
+ a_assert(v2.valid);
+
+ memset(&v, 0x0, sizeof(v));
+ v.valid = 1;
+
+ if (v1.type != v2.type)
+ coerce_types(&v1, &v2);
+ switch (v1.type) {
+ default:
+ a_assert(0);
+ break;
+
+#ifdef FLOATING_POINT_SUPPORT
+ case floating:
+ v1.value.floating -= v2.value.floating;
+ return v1;
+#endif
+
+ case flag:
+ v1.value.flag &= v2.value.flag;
+ return v1;
+
+ case byteint:
+ case percent:
+ v1.value.byteint -= v2.value.byteint;
+ return v1;
+
+ case shortint:
+ v1.value.shortint -= v2.value.shortint;
+ return v1;
+
+ case hex:
+ case integer:
+ case octal:
+ v1.value.integer -= v2.value.integer;
+ return v1;
+
+ case big:
+ v.type = big;
+ bsub(v.value.big, v1.value.big, v2.value.big);
+ return v;
+ }
+
+ return v1;
+}
+
+
+/******************************************************************************/
+/*
+ * Multiply a value.
+ */
+
+value_t valueMul(value_t v1, value_t v2)
+{
+ value_t v;
+
+ a_assert(v1.valid);
+ a_assert(v2.valid);
+
+ memset(&v, 0x0, sizeof(v));
+ v.valid = 1;
+
+ if (v1.type != v2.type)
+ coerce_types(&v1, &v2);
+ switch (v1.type) {
+ default:
+ a_assert(0);
+ break;
+
+ case flag:
+ a_assert(v1.type != flag);
+ break;
+
+#ifdef FLOATING_POINT_SUPPORT
+ case floating:
+ v1.value.floating *= v2.value.floating;
+ return v1;
+#endif
+
+ case byteint:
+ case percent:
+ v1.value.byteint *= v2.value.byteint;
+ return v1;
+
+ case shortint:
+ v1.value.shortint *= v2.value.shortint;
+ return v1;
+
+ case hex:
+ case integer:
+ case octal:
+ v1.value.integer *= v2.value.integer;
+ return v1;
+
+ case big:
+ v.type = big;
+ bmul(v.value.big, v1.value.big, v2.value.big);
+ return v;
+ }
+
+ return v1;
+}
+
+
+/******************************************************************************/
+/*
+ * Divide a value.
+ */
+
+value_t valueDiv(value_t v1, value_t v2)
+{
+ value_t v;
+
+ a_assert(v1.valid);
+ a_assert(v2.valid);
+
+ memset(&v, 0x0, sizeof(v));
+ v.valid = 1;
+
+ if (v1.type != v2.type)
+ coerce_types(&v1, &v2);
+ switch (v1.type) {
+ default:
+ a_assert(0);
+ break;
+
+ case flag:
+ a_assert(v1.type != flag);
+ break;
+
+#ifdef FLOATING_POINT_SUPPORT
+ case floating:
+ v1.value.floating /= v2.value.floating;
+ return v1;
+#endif
+
+ case byteint:
+ case percent:
+ v1.value.byteint /= v2.value.byteint;
+ return v1;
+
+ case shortint:
+ v1.value.shortint /= v2.value.shortint;
+ return v1;
+
+ case hex:
+ case integer:
+ case octal:
+ v1.value.integer /= v2.value.integer;
+ return v1;
+
+ case big:
+ v.type = big;
+ bdiv(v.value.big, v1.value.big, v2.value.big);
+ return v;
+ }
+
+ return v1;
+}
+
+
+/******************************************************************************/
+/*
+ * Compare a value.
+ */
+
+int valueCmp(value_t v1, value_t v2)
+{
+ a_assert(v1.valid);
+ a_assert(v2.valid);
+
+ if (v1.type != v2.type)
+ coerce_types(&v1, &v2);
+ if (v1.type != v2.type) {
+/*
+ * Make v2 == v1
+ */
+ a_assert(v1.type == v2.type);
+ v2 = v1;
+ return 0;
+ }
+ switch (v1.type) {
+ case string:
+ if (v1.value.string == NULL && v2.value.string == NULL) {
+ return 0;
+ } else if (v1.value.string == NULL) {
+ return -1;
+ } else if (v2.value.string == NULL) {
+ return 1;
+ } else {
+ return gstrcmp(v1.value.string, v2.value.string);
+ }
+ /* Nobody here */
+
+ case flag:
+ if (v1.value.flag < v2.value.flag)
+ return -1;
+ else if (v1.value.flag == v2.value.flag)
+ return 0;
+ else return 1;
+
+#ifdef FLOATING_POINT_SUPPORT
+ case floating:
+ if (v1.value.floating < v2.value.floating)
+ return -1;
+ else if (v1.value.floating == v2.value.floating)
+ return 0;
+ else return 1;
+#endif
+
+ case byteint:
+ case percent:
+ if (v1.value.byteint < v2.value.byteint)
+ return -1;
+ else if (v1.value.byteint == v2.value.byteint)
+ return 0;
+ else return 1;
+
+ case shortint:
+ if (v1.value.shortint < v2.value.shortint)
+ return -1;
+ else if (v1.value.shortint == v2.value.shortint)
+ return 0;
+ else return 1;
+
+ case hex:
+ case integer:
+ case octal:
+ if (v1.value.integer < v2.value.integer)
+ return -1;
+ else if (v1.value.integer == v2.value.integer)
+ return 0;
+ else return 1;
+
+ case big:
+ return bcompare(v1.value.big, v2.value.big);
+
+ default:
+ a_assert(0);
+ return 0;
+ }
+}
+
+
+/******************************************************************************/
+/*
+ * If type mismatch, then coerce types to big.
+ * Note: Known bug, casting of negative bigs to floats doesn't work.
+ */
+
+static void coerce_types(register value_t* v1, register value_t* v2)
+{
+#ifdef FLOATING_POINT_SUPPORT
+ if (v1->type == floating) {
+ v2->type = floating;
+ v2->value.floating = (double) v2->value.integer;
+ if (v2->type == big)
+ v2->value.floating = (double) v2->value.big[BLOW] +
+ (double) v2->value.big[BHIGH] * (double) MAXINT;
+
+ } else if (v2->type == floating) {
+ v1->type = floating;
+ v1->value.floating = (double) v1->value.integer;
+ if (v1->type == big)
+ v1->value.floating = (double) v1->value.big[BLOW] +
+ (double) v1->value.big[BHIGH] * (double) MAXINT;
+
+ } else if (v1->type == big) {
+#else
+ if (v1->type == big) {
+#endif /* FLOATING_POINT_SUPPORT */
+ v2->value.big[BLOW] = value_to_integer(v2);
+ if (valueNegative(v2))
+ v2->value.big[BHIGH] = -1;
+ else
+ v2->value.big[BHIGH] = 0;
+ v2->type = big;
+
+ } else if (v2->type == big) {
+ if (valueNegative(v1))
+ v1->value.big[BHIGH] = -1;
+ else
+ v1->value.big[BHIGH] = 0;
+ v1->value.big[BLOW] = value_to_integer(v1);
+ v1->type = big;
+
+
+ } else if (v1->type == integer) {
+ v2->value.integer = value_to_integer(v2);
+ v2->type = integer;
+
+ } else if (v2->type == integer) {
+ v1->value.integer = value_to_integer(v1);
+ v1->type = integer;
+
+ } else if (v1->type != integer) {
+ v2->type = v1->type;
+
+ } else if (v2->type != integer) {
+ v1->type = v2->type;
+
+ }
+ a_assert(v1->type == v2->type);
+}
+
+
+/******************************************************************************/
+/*
+ * Return true if the value is numeric and negative. Otherwise return 0.
+ */
+
+int valueNegative(value_t* vp)
+{
+ switch (vp->type) {
+ default:
+ case string:
+ case bytes:
+ return 0;
+
+#ifdef FLOATING_POINT_SUPPORT
+ case floating:
+ if (vp->value.floating < 0)
+ return 1;
+ return 0;
+#endif
+
+ case flag:
+ if ((signed char)vp->value.flag < 0)
+ return 1;
+ return 0;
+
+ case byteint:
+ case percent:
+ if ((signed char)vp->value.byteint < 0)
+ return 1;
+ return 0;
+
+ case shortint:
+ if (vp->value.shortint < 0)
+ return 1;
+ return 0;
+
+ case hex:
+ case integer:
+ case octal:
+ if (vp->value.integer < 0)
+ return 1;
+ return 0;
+
+ case big:
+ if (vp->value.big[BHIGH] < 0)
+ return 1;
+ return 0;
+ }
+}
+
+/******************************************************************************/
+/*
+ * Return true if the value is numeric and zero. Otherwise return 0.
+ */
+
+int valueZero(value_t* vp)
+{
+ switch (vp->type) {
+ default:
+ case string:
+ case bytes:
+ return 0;
+
+#ifdef FLOATING_POINT_SUPPORT
+ case floating:
+ if (vp->value.floating == 0)
+ return 1;
+ return 0;
+#endif
+
+ case flag:
+ if (vp->value.flag == 0)
+ return 1;
+ return 0;
+
+ case byteint:
+ case percent:
+ if (vp->value.byteint == 0)
+ return 1;
+ return 0;
+
+ case shortint:
+ if (vp->value.shortint == 0)
+ return 1;
+ return 0;
+
+ case hex:
+ case integer:
+ case octal:
+ if (vp->value.integer == 0)
+ return 1;
+ return 0;
+
+ case big:
+ if (vp->value.big[BHIGH] == 0 && vp->value.big[BLOW] == 0)
+ return 1;
+ return 0;
+ }
+}
+
+
+/******************************************************************************/
+/*
+ * Cast a value to an integer. Cannot be called for floating, non-numerics
+ * or bigs.
+ */
+
+static int value_to_integer(value_t* vp)
+{
+ switch (vp->type) {
+ default:
+ case string:
+ case bytes:
+ case big:
+#ifdef FLOATING_POINT_SUPPORT
+ case floating:
+ a_assert(0);
+ return -1;
+#endif
+
+ case flag:
+ return (int) vp->value.flag;
+
+ case byteint:
+ case percent:
+ return (int) vp->value.byteint;
+
+ case shortint:
+ return (int) vp->value.shortint;
+
+ case hex:
+ case integer:
+ case octal:
+ return (int) vp->value.integer;
+ }
+}
+
+
+/******************************************************************************/
+/*
+ * Convert a value to a text based representation of its value
+ */
+
+void valueSprintf(char_t** out, int size, char_t* fmt, value_t vp)
+{
+ char_t *src, *dst, *tmp, *dst_start;
+
+ a_assert(out);
+
+ *out = NULL;
+
+ if (! vp.valid) {
+ *out = bstrdup(B_L, T("Invalid"));
+ return;
+ }
+
+ switch (vp.type) {
+ case flag:
+ if (fmt == NULL || *fmt == '\0') {
+ *out = bstrdup(B_L, (vp.value.flag) ? T("true") : T("false"));
+ } else {
+ fmtAlloc(out, size, fmt, (vp.value.flag) ? T("true") : T("false"));
+ }
+ break;
+
+#ifdef FLOATING_POINT_SUPPORT
+ case floating:
+ if (fmt == NULL || *fmt == '\0') {
+ fmtAlloc(out, size, T("%f"), vp.value.floating);
+ } else {
+ fmtAlloc(out, size, fmt, vp.value.floating);
+ }
+ break;
+#endif
+
+ case hex:
+ if (fmt == NULL || *fmt == '\0') {
+ fmtAlloc(out, size, T("0x%lx"), vp.value.hex);
+ } else {
+ fmtAlloc(out, size, fmt, vp.value.hex);
+ }
+ break;
+
+ case big:
+ if (*out == NULL) {
+ *out = btoa(vp.value.big, NULL, 0);
+ } else {
+ btoa(vp.value.big, *out, size);
+ }
+ break;
+
+ case integer:
+ if (fmt == NULL || *fmt == '\0') {
+ fmtAlloc(out, size, T("%ld"), vp.value.integer);
+ } else {
+ fmtAlloc(out, size, fmt, vp.value.integer);
+ }
+ break;
+
+ case octal:
+ if (fmt == NULL || *fmt == '\0') {
+ fmtAlloc(out, size, T("0%lo"), vp.value.octal);
+ } else {
+ fmtAlloc(out, size, fmt, vp.value.octal);
+ }
+ break;
+
+ case percent:
+ if (fmt == NULL || *fmt == '\0') {
+ fmtAlloc(out, size, T("%d%%"), vp.value.percent);
+ } else {
+ fmtAlloc(out, size, fmt, vp.value.percent);
+ }
+ break;
+
+ case byteint:
+ if (fmt == NULL || *fmt == '\0') {
+ fmtAlloc(out, size, T("%d"), (int) vp.value.byteint);
+ } else {
+ fmtAlloc(out, size, fmt, (int) vp.value.byteint);
+ }
+ break;
+
+ case shortint:
+ if (fmt == NULL || *fmt == '\0') {
+ fmtAlloc(out, size, T("%d"), (int) vp.value.shortint);
+ } else {
+ fmtAlloc(out, size, fmt, (int) vp.value.shortint);
+ }
+ break;
+
+ case string:
+ case errmsg:
+ src = vp.value.string;
+
+ if (src == NULL) {
+ *out = bstrdup(B_L, T("NULL"));
+ } else if (fmt && *fmt) {
+ fmtAlloc(out, size, fmt, src);
+
+ } else {
+
+ *out = balloc(B_L, size);
+ dst_start = dst = *out;
+ for (; *src != '\0'; src++) {
+ if (dst >= &dst_start[VALUE_MAX_STRING - 5])
+ break;
+ switch (*src) {
+ case '\a': *dst++ = '\\'; *dst++ = 'a'; break;
+ case '\b': *dst++ = '\\'; *dst++ = 'b'; break;
+ case '\f': *dst++ = '\\'; *dst++ = 'f'; break;
+ case '\n': *dst++ = '\\'; *dst++ = 'n'; break;
+ case '\r': *dst++ = '\\'; *dst++ = 'r'; break;
+ case '\t': *dst++ = '\\'; *dst++ = 't'; break;
+ case '\v': *dst++ = '\\'; *dst++ = 'v'; break;
+ case '\\': *dst++ = '\\'; *dst++ = '\\'; break;
+ case '"': *dst++ = '\\'; *dst++ = '\"'; break;
+ default:
+ if (gisprint(*src)) {
+ *dst++ = *src;
+ } else {
+ fmtAlloc(&tmp, size, T("\\x%02x"),
+ (unsigned int) *src);
+ gstrcpy(dst, tmp);
+ bfreeSafe(B_L, tmp);
+ dst += 4;
+ }
+ break;
+ }
+ }
+ *dst++ = '\0';
+ }
+ break;
+
+#ifdef UNUSED
+ case bytes:
+ asrc = vp.value.bytes;
+
+ if (asrc == NULL) {
+ *out = bstrdup(B_L, T("NULL"));
+
+ } else if (fmt && *fmt) {
+ fmtAlloc(out, size, fmt, asrc);
+
+ } else {
+
+ dst_start = dst;
+ for (; *asrc != '\0'; asrc++) {
+ if (dst >= &dst_start[VALUE_MAX_STRING - 5])
+ break;
+ switch (*asrc) {
+ case '\a': *dst++ = '\\'; *dst++ = 'a'; break;
+ case '\b': *dst++ = '\\'; *dst++ = 'b'; break;
+ case '\f': *dst++ = '\\'; *dst++ = 'f'; break;
+ case '\n': *dst++ = '\\'; *dst++ = 'n'; break;
+ case '\r': *dst++ = '\\'; *dst++ = 'r'; break;
+ case '\t': *dst++ = '\\'; *dst++ = 't'; break;
+ case '\v': *dst++ = '\\'; *dst++ = 'v'; break;
+ case '\\': *dst++ = '\\'; *dst++ = '\\'; break;
+ case '"': *dst++ = '\\'; *dst++ = '\"'; break;
+ default:
+ if (gisprint(*asrc)) {
+ *dst++ = *asrc;
+ } else {
+ fmtAlloc(dst, size,
+ T("\\x%02x"), (unsigned int) *asrc);
+ dst += 4;
+ }
+ break;
+ }
+ }
+ *dst++ = '\0';
+ }
+ break;
+#endif
+
+ default:
+ a_assert(0);
+ }
+}
+
+/******************************************************************************/
+/*
+ * Print a value to the named file descriptor
+ */
+
+void valueFprintf(FILE* fp, char_t* fmt, value_t vp)
+{
+ char_t *buf;
+
+ buf = NULL;
+ valueSprintf(&buf, VALUE_MAX_STRING, fmt, vp);
+ gfputs(buf, fp);
+ bfreeSafe(B_L, buf);
+ fflush(fp);
+}
+
+/******************************************************************************/
+/*
+ * Ascii to value conversion
+ */
+
+value_t valueAtov(char_t* s, int pref_type)
+{
+ vtype_t type;
+ value_t v;
+ long tmp[2], tmp2[2], base[2];
+ int i, len, num;
+
+ a_assert(0 <= pref_type && pref_type < 99); /* Sanity check */
+ a_assert(s);
+
+ v = value_null;
+ if (s == NULL) {
+ return value_null;
+ }
+
+ base[BLOW] = 10;
+ base[BHIGH] = 0;
+ len = gstrlen(s);
+
+/*
+ * Determine the value type
+ */
+ type = undefined;
+ if (pref_type <= 0) {
+ if (gisdigit(*s)) {
+ base[BHIGH] = 0;
+ if (s[len - 1] == '%') {
+ type = percent;
+ len --;
+ base[BLOW] = 10;
+ } else if (*s == '0') {
+ if (s[1] == 'x') {
+ type = hex;
+ s += 2;
+ len -= 2;
+ base[BLOW] = 16;
+ } else if (s[1] == '\0') {
+ type = integer;
+ base[BLOW] = 10;
+ } else {
+ type = octal;
+ s++;
+ len--;
+ base[BLOW] = 8;
+ }
+ } else {
+ type = integer;
+ base[BLOW] = 10;
+ }
+
+ } else {
+ if (gstrcmp(s, T("true")) == 0 || gstrcmp(s, T("false")) == 0) {
+ type = flag;
+ } else if (*s == '\'' && s[len - 1] == '\'') {
+ type = string;
+ s++;
+ len -= 2;
+ } else if (*s == '\"' && s[len - 1] == '\"') {
+ type = string;
+ s++;
+ len -= 2;
+ } else {
+ type = string;
+ }
+ }
+ v.type = type;
+
+ } else
+ v.type = pref_type;
+ v.valid = 1;
+
+/*
+ * Do the conversion. Always use big arithmetic
+ */
+ switch (v.type) {
+ case hex:
+ if (!isdigit(s[0])) {
+ if (gtolower(s[0]) >= 'a' || gtolower(s[0]) <= 'f') {
+ v.value.big[BLOW] = 10 + gtolower(s[0]) - 'a';
+ } else {
+ v.value.big[BLOW] = 0;
+ }
+ } else {
+ v.value.big[BLOW] = s[0] - '0';
+ }
+ v.value.big[BHIGH] = 0;
+ for (i = 1; i < len; i++) {
+ if (!isdigit(s[i])) {
+ if (gtolower(s[i]) < 'a' || gtolower(s[i]) > 'f') {
+ break;
+ }
+ num = 10 + gtolower(s[i]) - 'a';
+ } else {
+ num = s[i] - '0';
+ }
+ bmul(tmp, v.value.big, base);
+ binit(tmp2, 0, num);
+ badd(v.value.big, tmp, tmp2);
+ }
+ v.value.hex = v.value.big[BLOW];
+ break;
+
+ case shortint:
+ case byteint:
+ case integer:
+ case percent:
+ case octal:
+ case big:
+ v.value.big[BHIGH] = 0;
+ if (gisdigit(s[0]))
+ v.value.big[BLOW] = s[0] - '0';
+ else
+ v.value.big[BLOW] = 0;
+ for (i = 1; i < len && gisdigit(s[i]); i++) {
+ bmul(tmp, v.value.big, base);
+ binit(tmp2, 0, s[i] - '0');
+ badd(v.value.big, tmp, tmp2);
+ }
+ switch (v.type) {
+ case shortint:
+ v.value.shortint = (short) v.value.big[BLOW];
+ break;
+ case byteint:
+ v.value.byteint = (char) v.value.big[BLOW];
+ break;
+ case integer:
+ v.value.integer = (int) v.value.big[BLOW];
+ break;
+ case percent:
+ v.value.percent = (char) v.value.big[BLOW];
+ break;
+ case octal:
+ v.value.octal = (int) v.value.big[BLOW];
+ break;
+ default:
+ break;
+ }
+ break;
+
+#ifdef FLOATING_POINT_SUPPORT
+ case floating:
+ gsscanf(s, T("%f"), &v.value.floating);
+ break;
+#endif
+
+ case flag:
+ if (*s == 't')
+ v.value.flag = 1;
+ else v.value.flag = 0;
+ break;
+
+ case string:
+/*
+ * Note this always ballocs a string
+ */
+ v = valueString(s, VALUE_ALLOCATE);
+ break;
+
+ case bytes:
+ v = valueBytes((char*) s, VALUE_ALLOCATE);
+ break;
+
+#ifdef UNUSED
+ case literal:
+ v = value_literal(bstrdup(B_L, s));
+ v.value.literal[len] = '\0';
+ break;
+#endif
+
+ case undefined:
+ case symbol:
+ default:
+ v.valid = 0;
+ a_assert(0);
+ }
+ return v;
+}
+
+#endif /* !UEMF */
+/******************************************************************************/
+
diff --git a/cleopatre/application/spidgoahead/web/action.asp b/cleopatre/application/spidgoahead/web/action.asp
new file mode 100644
index 0000000000..b3d07ce70f
--- /dev/null
+++ b/cleopatre/application/spidgoahead/web/action.asp
@@ -0,0 +1,83 @@
+<html>
+<head>
+<link rel="stylesheet" href="style/normal_ws.css" type="text/css">
+<script type="text/javascript" src="jslib/query.js"></script>
+
+<script type='text/javascript'>
+
+var qs = new Querystring();
+var action = qs.get("action","none");
+var mac = qs.get("mac","00:00:00:00:00:00");
+
+var result = <% spidcomAction(); %>;
+
+var data_array;
+var data;
+
+
+function generateLink()
+{
+ document.getElementById('stat_table').innerHTML += "<tr><td>Downlink attenuation</td><td>Uplink attenuation</td><td>Downlink quality</td><td>Uplink quality</td></tr>";
+ document.getElementById('stat_table').innerHTML += "<tr><td>"+data_array[0]+"</td><td>"+data_array[1]+"</td><td>"+data_array[2]+"</td><td>"+data_array[3]+"</td></tr>";
+}
+
+function generateDeviceInfo()
+{
+ document.getElementById('stat_table').innerHTML += "<tr><td>Model number</td><td>Port amount</td><td>Sofware version</td></tr>";
+ document.getElementById('stat_table').innerHTML += "<tr><td>" +data_array[0]+ "</td><td>" +data_array[1]+ "</td><td>" +data_array[2]+ "</td><td></tr>";
+}
+
+function generateStatistics()
+{
+
+ table_rows = new Array("Packets","Bytes","Broadcast","Multicast","Dropped");
+ document.getElementById('stat_table').innerHTML += "<tr><td colspan='2'>TX</td><td colspan='2'>RX</td></tr>";
+ for(i=0;i<data_array.length/2;i++)
+ document.getElementById('stat_table').innerHTML += "<tr> <td>"+table_rows[i]+"</td><td>" + data_array[i] + "</td><td>"+ table_rows[i] +"</td><td>" + data_array[i+5] + "</td></tr>";
+}
+
+function start(){
+ if ((action == "reboot") || (action == "reset_stat"))
+ document.getElementById("customer_message").innerHTML = "<code>" + result +"</code>";
+ else
+ if (action == "get_stat")
+ {
+ data = result;
+ data_array = data.split(':');
+ generateStatistics();
+ }
+ else
+ if (action == "get_device_info")
+ {
+ data = result;
+ data_array = data.split(':');
+ generateDeviceInfo();
+ }
+ else
+ if (action == "get_link")
+ {
+ data = result;
+ data_array = data.split(':');
+ generateLink();
+ }
+
+
+}
+
+</script>
+
+</head>
+
+
+<body onload='javascript:start();'>
+
+<table id='stat_table' style='width:100%'></table>
+
+<div id='customer_message' style='width:100%'>
+</div>
+<div align='right'>
+<input type='button' onclick='JavaScript:window.close()' value='Close'/>
+</div>
+</body>
+
+</html> \ No newline at end of file
diff --git a/cleopatre/application/spidgoahead/web/addgroup.asp b/cleopatre/application/spidgoahead/web/addgroup.asp
new file mode 100644
index 0000000000..53c8ec80f9
--- /dev/null
+++ b/cleopatre/application/spidgoahead/web/addgroup.asp
@@ -0,0 +1,43 @@
+<html>
+<!- Copyright (c) Go Ahead Software Inc., 2000-2000. All Rights Reserved. ->
+<head>
+<title>Add a User Group</title>
+<meta http-equiv="Pragma" content="no-cache">
+<link rel="stylesheet" href="style/normal_ws.css" type="text/css">
+<% language=javascript %>
+</head>
+
+<body>
+<h1>Add a User Group</h1>
+<form action=/goform/AddGroup method=POST>
+
+<table>
+<tr>
+ <td>Group Name:</td>
+<td>
+ <input type=text name=group title="Group Name" size=40 value="">
+</td>
+</tr>
+<tr>
+ <td>Privilege:</td><td><% MakePrivilegeList(); %></td>
+</tr>
+<tr>
+ <td>Access Method:</td><td><% MakeAccessMethodList(); %></td>
+</tr>
+<tr>
+ <td>Enabled:</td>
+<td>
+ <INPUT TYPE=checkbox CHECKED name=enabled title="Enabled">
+</td>
+</tr>
+<tr>
+ <td></td>
+ <td ALIGN="CENTER">
+ <input type=submit name=ok value="OK"> <input type=submit name=ok value="Cancel"></td>
+</tr>
+</table>
+
+</form>
+
+</body>
+</html>
diff --git a/cleopatre/application/spidgoahead/web/addlimit.asp b/cleopatre/application/spidgoahead/web/addlimit.asp
new file mode 100644
index 0000000000..9c2bb613e7
--- /dev/null
+++ b/cleopatre/application/spidgoahead/web/addlimit.asp
@@ -0,0 +1,37 @@
+<html>
+<!- Copyright (c) Go Ahead Software Inc., 2000-2000. All Rights Reserved. ->
+<head>
+<title>Add an Access Limit</title>
+<meta http-equiv="Pragma" content="no-cache">
+<link rel="stylesheet" href="style/normal_ws.css" type="text/css">
+<% language=javascript %>
+</head>
+
+<body>
+<h1>Add an Access Limit</h1>
+<form action=/goform/AddAccessLimit method=POST>
+
+<table>
+<tr>
+ <td>URL:</td><td><input type=text name=url title="URL" size=40 value=""></td>
+</tr>
+<tr>
+ <td>Group:</td><td><% MakeGroupList(); %></td>
+</tr>
+<tr>
+ <td>Access Method:</td><td><% MakeAccessMethodList(); %></td>
+</tr>
+<tr>
+ <td>Secure:</td><td><INPUT TYPE=checkbox name=secure" title="Secure"></td>
+</tr>
+<tr>
+ <td></td>
+ <td ALIGN="CENTER">
+ <input type=submit name=ok value="OK"> <input type=submit name=ok value="Cancel"></td>
+</tr>
+</table>
+
+</form>
+
+</body>
+</html>
diff --git a/cleopatre/application/spidgoahead/web/adduser.asp b/cleopatre/application/spidgoahead/web/adduser.asp
new file mode 100644
index 0000000000..91f33c931b
--- /dev/null
+++ b/cleopatre/application/spidgoahead/web/adduser.asp
@@ -0,0 +1,51 @@
+<html>
+<!- Copyright (c) Go Ahead Software Inc., 2000-2000. All Rights Reserved. ->
+<head>
+<title>Add a User</title>
+<meta http-equiv="Pragma" content="no-cache">
+<link rel="stylesheet" href="style/normal_ws.css" type="text/css">
+<% language=javascript %>
+</head>
+
+<body>
+<h1>Add a User</h1>
+<form action=/goform/AddUser method=POST>
+<table>
+<tr>
+ <td>User ID:</td>
+<td>
+ <input type=text name=user title="User ID" size=40 value="">
+</td>
+</tr>
+<tr>
+ <td>Group:</td><td><% MakeGroupList(); %></td>
+</tr>
+<tr>
+ <td>Enabled:</td>
+<td>
+ <INPUT TYPE=checkbox CHECKED name=enabled title="Enabled">
+</td>
+</tr>
+<tr>
+ <td>Password:</td>
+<td>
+ <input type=password name=password size=40 title="Enter Password" value="">
+</td>
+</tr>
+<tr>
+ <td>Confirm:</td>
+<td>
+ <input type=password name=passconf size=40 title="Confirm Password" value="">
+</td>
+</tr>
+<tr>
+ <td></td>
+ <td ALIGN="CENTER">
+ <input type=submit name=ok value="OK"> <input type=submit name=ok value="Cancel"></td>
+</tr>
+</table>
+
+</form>
+
+</body>
+</html>
diff --git a/cleopatre/application/spidgoahead/web/back.png b/cleopatre/application/spidgoahead/web/back.png
new file mode 100644
index 0000000000..a0dd8422b0
--- /dev/null
+++ b/cleopatre/application/spidgoahead/web/back.png
Binary files differ
diff --git a/cleopatre/application/spidgoahead/web/banner.asp b/cleopatre/application/spidgoahead/web/banner.asp
new file mode 100644
index 0000000000..2086a109ce
--- /dev/null
+++ b/cleopatre/application/spidgoahead/web/banner.asp
@@ -0,0 +1,11 @@
+<HTML>
+<body bgcolor="#F5F5F5">
+<p>
+<table bgcolor="#ffaaaa" width=100%><TR><TD align="center">
+ <i><b>This is NEW version of Web Interface created using GoAhead ASP technology</b></i>
+
+</TD></TR></table>
+</p>
+<div style='position:absolute;left:50%;margin-bottom:50%' id='naslov'></div>
+</body>
+</HTML>
diff --git a/cleopatre/application/spidgoahead/web/br0.asp b/cleopatre/application/spidgoahead/web/br0.asp
new file mode 100644
index 0000000000..3fdf176b5a
--- /dev/null
+++ b/cleopatre/application/spidgoahead/web/br0.asp
@@ -0,0 +1,264 @@
+<html>
+
+<head>
+ <title>SPC 300 - SPiDCOM</title>
+
+<link rel="stylesheet" href="style/normal_ws.css" type="text/css">
+
+<style type = 'text/css'>
+div.margina,table.margina{
+ margin-left:5%;
+ width:500px;
+ background-color:#F5F5F5;
+}
+td{
+ padding-left:5px;
+}
+
+input[type='text']{
+ margin-left:auto;
+ margin-right:auto;
+ text-align:center;
+}
+input[disabled='disabled'] {
+ background-color:BBBBBB;
+ color:white;
+ cursor:default;
+}
+body{
+ background-image: url("/spidcom.gif");
+ background-repeat: no-repeat;
+ background-attachment: fixed;
+ background-position: center center;
+}
+
+</style>
+
+<script type='text/javascript'>
+
+var mac = <% spidcomAspGetMac('br0'); %>
+var ip_data = <% spidcomAspGetIpData('br0'); %>
+
+
+//var online_station = '< % spidcomAspEocGetTopo(); % >';
+//var station_array = online_station.split('-');
+
+
+var ip_data_array = ip_data.split(':');
+
+var ip_array;
+var nm_array;
+var gw_array;
+
+if(ip_data_array[1].length == 0)
+ ip_array = new Array("0","0","0","0")
+else
+ ip_array = ip_data_array[1].split('.');
+
+if(ip_data_array[2].length == 0)
+ nm_array = new Array("0","0","0","0")
+else
+ nm_array = ip_data_array[2].split('.');
+
+if(ip_data_array[4].length == 0)
+ gw_array = new Array("0","0","0","0")
+else
+ gw_array = ip_data_array[4].split('.');
+
+
+
+var dhcp = ip_data_array[0];
+var mac_array = mac.split(':');
+
+
+
+function validate()
+{
+ parent.footer2.document.getElementById('error_console').innerHTML = "";
+
+ if(ip_data.indexOf("error") >= 0) // error
+ parent.footer2.document.getElementById('error_console').innerHTML += "<small style='margin-left:3px'>IP data : error condition: " + ip_data.toString() + "</small><br>";
+ else
+ parent.footer2.document.getElementById('error_console').innerHTML += "<small style='margin-left:3px'>IP data : OK</small><br>";
+
+ if(mac.indexOf("error") >= 0) // error
+ parent.footer2.document.getElementById('error_console').innerHTML += "<small style='margin-left:3px'>MAC : error condition: " + mac.toString() + "</small><br>";
+ else
+ parent.footer2.document.getElementById('error_console').innerHTML += "<small style='margin-left:3px'>MAC : OK</small><br>";
+
+ /*
+ if(online_station.indexOf("error") >= 0) // error
+ parent.footer2.document.getElementById('error_console').innerHTML += "<code>Online station : error condition: " + mac.toString(); + "</code><br>";
+ else
+ parent.footer2.document.getElementById('error_console').innerHTML += "<code>Online station : OK</code><br>";
+ */
+}
+
+
+function showTip(){
+document.getElementById('tooltip').innerHTML = "You must restart modem for the changes to take effect";
+}
+
+function clearTip(){
+document.getElementById('tooltip').innerHTML = "";
+}
+
+function reboot_flag()
+{
+ document.getElementById('reboot').value = 'yes';
+}
+
+function refresh(){
+parent.content.location.reload();
+}
+
+
+function joinadd(){
+document.getElementById('ip').value = document.getElementById('ipe1').value + '.' + document.getElementById('ipe2').value + '.' + document.getElementById('ipe3').value + '.' + document.getElementById('ipe4').value;
+document.getElementById('nm').value = document.getElementById('nete1').value + '.' + document.getElementById('nete2').value + '.' + document.getElementById('nete3').value + '.' + document.getElementById('nete4').value;
+document.getElementById('gw').value = document.getElementById('gwe1').value + '.' + document.getElementById('gwe2').value + '.' + document.getElementById('gwe3').value + '.' + document.getElementById('gwe4').value;
+}
+
+function set_refresh(){
+
+if (document.getElementById('refresh_or_not').checked)
+ document.getElementById("stat_iframe").contentWindow.RestartRefresh();
+else
+ document.getElementById('stat_iframe').contentWindow.StopRefresh();
+}
+
+function checkMainForm(){
+ return true;
+}
+
+function fill_ip_data()
+{
+
+var idip = 'ipe';
+var idnet = 'nete';
+var idgw = 'gwe';
+var idmac = 'mace'
+
+for (var i=1;i<=4;i++)
+{
+document.getElementById(idip+i).value = ip_array[i-1];
+document.getElementById(idnet+i).value = nm_array[i-1];
+document.getElementById(idgw+i).value = gw_array[i-1];
+document.getElementById(idmac+i).value = mac_array[i-1];
+}
+document.getElementById(idmac+5).value = mac_array[4];
+document.getElementById(idmac+6).value = mac_array[5];
+
+
+if (dhcp == 'DHCP')
+ document.mainForm.dhcp[0].checked = 'checked';
+
+
+ joinadd();
+}
+</script>
+</head>
+
+
+<body onload='javascript:validate();fill_ip_data();'>
+<!-- Settings name -->
+<div class='margina' > <h2>Bridge configuration</h2></div>
+
+<!-- Main form -->
+
+<form name='mainForm' action='/goform/formAction' target='_self' method='GET' onSubmit='return checkMainForm();'>
+
+<input type='hidden' name='reboot' id='reboot' value='no'/> <!-- This will be passed by form -->
+<input type='hidden' name='inter' id='inter' value='br0'/> <!-- This will be passed by form -->
+
+
+<table name = 'ipData' class='margina' style='background-color:#FFFFFF' border='0'>
+<tr>
+<td><h3>Network configuration</h3></td>
+</tr>
+<tr>
+<td>Current IP address</td>
+<td></td><td></td>
+<td><input id='ipe1' type='text' size=3 maxlength=3 value='0'/> </td>
+<td><input id='ipe2' type='text' size=3 maxlength=3 value='0'/> </td>
+<td><input id='ipe3' type='text' size=3 maxlength=3 value='0'/> </td>
+<td><input id='ipe4' type='text' size=3 maxlength=3 value='0'/> </td>
+<td><input type='hidden' name='ip' id='ip' value='0'/> </td> <!-- This will be passed by form -->
+</tr>
+
+<tr>
+<td>Current netmask</td>
+<td></td><td></td>
+<td><input id='nete1' type='text' size=3 maxlength=3 value='0'/> </td>
+<td><input id='nete2' type='text' size=3 maxlength=3 value='0'/> </td>
+<td><input id='nete3' type='text' size=3 maxlength=3 value='0'/> </td>
+<td><input id='nete4' type='text' size=3 maxlength=3 value='0'/> </td>
+<td><input type='hidden' name='nm' id='nm' value='0'/> </td> <!-- This will be passed by form -->
+</tr>
+<tr>
+<td>Current gateway address</td>
+<td></td><td></td>
+<td><input id='gwe1' type='text' size=3 maxlength=3 value='0'/> </td>
+<td><input id='gwe2' type='text' size=3 maxlength=3 value='0'/> </td>
+<td><input id='gwe3' type='text' size=3 maxlength=3 value='0'/> </td>
+<td><input id='gwe4' type='text' size=3 maxlength=3 value='0'/> </td>
+<td><input type='hidden' id='gw' name='gw' value='0'/> </td> <!-- This will be passed by form -->
+</tr>
+<tr align='center'>
+<td align='left'>MAC address</td>
+
+<td><input disabled='disabled' id='mace1' type='text' size=2 maxlength=2 value='0'/> </td>
+<td><input disabled='disabled' id='mace2' type='text' size=2 maxlength=2 value='0'/> </td>
+<td><input disabled='disabled' id='mace3' type='text' size=2 maxlength=2 value='0'/> </td>
+<td><input disabled='disabled' id='mace4' type='text' size=2 maxlength=2 value='0'/> </td>
+<td><input disabled='disabled' id='mace5' type='text' size=2 maxlength=2 value='0'/> </td>
+<td><input disabled='disabled' id='mace6' type='text' size=2 maxlength=2 value='0'/> </td>
+</tr>
+<tr>
+<td>DHCP Mode</td>
+<td></td><td></td><td></td><td></td>
+<td><input type='radio' name='dhcp' value='dhcp'/>ON</td>
+<td><input type='radio' name='dhcp' value='static' checked='checked'/>OFF</td>
+</tr>
+
+</table>
+
+<div class='margina'><h2>Activity statistics</h2></div>
+<table id='background-image' class='d25' style='margin-left:5%;width:500px' border='0'> <tr align='center'><td colspan='2'>RX:</td><td colspan='2'>TX:</td></tr>
+<tr><td class='d25' >Bytes</td><td class='d25' id='rb' bgcolor='lavender' align='center'></td><td>Bytes</td> <td class='d25' id = 'tb' bgcolor='lavender' align='center'></td></tr>
+<tr><td class='d25' >Packets</td><td class='d25' id='rp' bgcolor='lavender' align='center'></td><td>Packets</td> <td class='d25' id = 'tp' bgcolor='lavender' align='center'></td></tr>
+<tr><td class='d25' >Errors</td><td class='d25' id='re' bgcolor='lavender' align='center'></td><td>Errors</td> <td class='d25' id = 'te' bgcolor='lavender' align='center'></td></tr>
+<tr><td class='d25' >Drops</td><td class='d25' id='rd' bgcolor='lavender' align='center'></td><td>Drops</td> <td class='d25' id = 'td' bgcolor='lavender' align='center'></td></tr>
+<tr><td class='d25' >Fifo</td><td class='d25' id='rf' bgcolor='lavender' align='center'></td><td>Fifo</td> <td class='d25' id = 'tf' bgcolor='lavender' align='center'></td></tr>
+<tr><td class='d25' >Frame</td><td class='d25' id='rfr' bgcolor='lavender' align='center'></td><td>Colls</td> <td class='d25' id = 'tc' bgcolor='lavender' align='center'></td></tr>
+<tr><td class='d25' >Compressed</td><td class='d25' id='rc' bgcolor='lavender' align='center'></td><td>Carrier</td> <td class='d25' id = 'tcar' bgcolor='lavender' align='center'></td></tr>
+<tr><td class='d25' >Multicast</td><td class='d25' id='rm' bgcolor='lavender' align='center'></td><td>Compressed</td> <td class='d25' id = 'tcom' bgcolor='lavender' align='center'></td></tr>
+
+
+</table>
+<div class='margina' align='right'>
+Auto refresh<input type='checkbox' name='refresh_or_not' id='refresh_or_not' onchange='set_refresh();' checked='checked' >
+</div>
+
+<div class='margina' style='margin-top:5px' align='right'>
+<pre ></pre>
+<input type='button' value='Refresh' onclick='javascript:refresh();'>
+<input type='submit' onclick='javascript:joinadd();' value='Save configuration' onmouseover='javascript:showTip();' onmouseout='javascript:clearTip();'/>
+<input type='submit' value='Restart the modem' onclick='javascript:reboot_flag();'/>
+<pre id ='tooltip'></pre>
+</div>
+
+
+</form>
+
+
+
+
+
+
+
+<iframe id='stat_iframe' name='stat_iframe' src ="stat.asp?interface=br0" frameborder='0' height='5'>
+ <p>Your browser does not support iframes.</p>
+</iframe>
+</body>
+</html> \ No newline at end of file
diff --git a/cleopatre/application/spidgoahead/web/count.asp b/cleopatre/application/spidgoahead/web/count.asp
new file mode 100644
index 0000000000..f5e08e65e4
--- /dev/null
+++ b/cleopatre/application/spidgoahead/web/count.asp
@@ -0,0 +1,5 @@
+<html>
+
+<% spidcomAspReboot(); %>
+
+</html>
diff --git a/cleopatre/application/spidgoahead/web/delgroup.asp b/cleopatre/application/spidgoahead/web/delgroup.asp
new file mode 100644
index 0000000000..e0eab7b58b
--- /dev/null
+++ b/cleopatre/application/spidgoahead/web/delgroup.asp
@@ -0,0 +1,28 @@
+<html>
+<!- Copyright (c) Go Ahead Software Inc., 2000-2000. All Rights Reserved. ->
+<head>
+<title>Delete a User Group</title>
+<meta http-equiv="Pragma" content="no-cache">
+<link rel="stylesheet" href="style/normal_ws.css" type="text/css">
+<% language=javascript %>
+</head>
+
+<body>
+<h1>Delete a User Group</h1>
+<form action=/goform/DeleteGroup method=POST>
+
+<table>
+<tr>
+<% MakeGroupList(); %>
+</tr>
+<tr>
+ <td></td>
+ <td ALIGN="CENTER">
+ <input type=submit name=ok value="OK"> <input type=submit name=ok value="Cancel"></td>
+</tr>
+</table>
+
+</form>
+
+</body>
+</html>
diff --git a/cleopatre/application/spidgoahead/web/dellimit.asp b/cleopatre/application/spidgoahead/web/dellimit.asp
new file mode 100644
index 0000000000..f613b60c44
--- /dev/null
+++ b/cleopatre/application/spidgoahead/web/dellimit.asp
@@ -0,0 +1,28 @@
+<html>
+<!- Copyright (c) Go Ahead Software Inc., 2000-2000. All Rights Reserved. ->
+<head>
+<title>Delete an Access Limit</title>
+<meta http-equiv="Pragma" content="no-cache">
+<link rel="stylesheet" href="style/normal_ws.css" type="text/css">
+<% language=javascript %>
+</head>
+
+<body>
+<h1>Delete an Access Limit</h1>
+<form action=/goform/DeleteAccessLimit method=POST>
+
+<table>
+<tr>
+<% MakeAccessLimitList(); %>
+</tr>
+<tr>
+ <td></td>
+ <td ALIGN="CENTER">
+ <input type=submit name=ok value="OK"> <input type=submit name=ok value="Cancel"></td>
+</tr>
+</table>
+
+</form>
+
+</body>
+</html>
diff --git a/cleopatre/application/spidgoahead/web/deluser.asp b/cleopatre/application/spidgoahead/web/deluser.asp
new file mode 100644
index 0000000000..3157b3513c
--- /dev/null
+++ b/cleopatre/application/spidgoahead/web/deluser.asp
@@ -0,0 +1,28 @@
+<html>
+<!- Copyright (c) Go Ahead Software Inc., 2000-2000. All Rights Reserved. ->
+<head>
+<title>Delete a User</title>
+<meta http-equiv="Pragma" content="no-cache">
+<link rel="stylesheet" href="style/normal_ws.css" type="text/css">
+<% language=javascript %>
+</head>
+
+<body>
+<h1>Delete a User</h1>
+<form action=/goform/DeleteUser method=POST>
+
+<table>
+<tr>
+<% MakeUserList(); %>
+</tr>
+<tr>
+ <td></td>
+ <td ALIGN="CENTER">
+ <input type=submit name=ok value="OK" title="Delete the User"> <input type=submit name=ok value="Cancel"></td>
+</tr>
+</table>
+
+</form>
+
+</body>
+</html>
diff --git a/cleopatre/application/spidgoahead/web/eth0.asp b/cleopatre/application/spidgoahead/web/eth0.asp
new file mode 100644
index 0000000000..55a65f4d62
--- /dev/null
+++ b/cleopatre/application/spidgoahead/web/eth0.asp
@@ -0,0 +1,239 @@
+<html>
+
+<head>
+ <title>SPC 300 - SPiDCOM</title>
+
+<link rel="stylesheet" href="style/normal_ws.css" type="text/css">
+
+<style type = 'text/css'>
+div.margina,table.margina{
+ margin-left:5%;
+ width:500px;
+ background-color:#F5F5F5;
+}
+td{
+ padding-left:5px;
+}
+
+input[type='text']{
+ margin-left:auto;
+ margin-right:auto;
+ text-align:center;
+}
+input[disabled='disabled'] {
+ background-color:BBBBBB;
+ color:white;
+ cursor:default;
+}
+
+body{
+ background-image: url("/spidcom.gif");
+ background-repeat: no-repeat;
+ background-attachment: fixed;
+ background-position: center center;
+}
+</style>
+
+<script type='text/javascript'>
+
+var mac = <% spidcomAspGetMac('eth0'); %>
+var ip_data = <% spidcomAspGetIpData('eth0'); %>
+
+
+var ip_data_array = ip_data.split(':');
+
+var ip_array;
+var nm_array;
+var gw_array;
+
+if(ip_data_array[1].length == 0)
+ ip_array = new Array("0","0","0","0")
+else
+ ip_array = ip_data_array[1].split('.');
+
+if(ip_data_array[2].length == 0)
+ nm_array = new Array("0","0","0","0")
+else
+ nm_array = ip_data_array[2].split('.');
+
+if(ip_data_array[4].length == 0)
+ gw_array = new Array("0","0","0","0")
+else
+ gw_array = ip_data_array[4].split('.');
+var mac_array = mac.split(':');
+
+var dhcp = ip_data_array[0];
+
+
+function validate()
+{
+ parent.footer2.document.getElementById('error_console').innerHTML = "";
+
+ if(ip_data.indexOf("error") >= 0) // error
+ parent.footer2.document.getElementById('error_console').innerHTML += "<small style='margin-left:3px'>IP data : error condition: " + ip_data.toString() + "</small><br>";
+ else
+ parent.footer2.document.getElementById('error_console').innerHTML += "<small style='margin-left:3px'>IP data : OK</small><br>";
+
+ if(mac.indexOf("error") >= 0) // error
+ parent.footer2.document.getElementById('error_console').innerHTML += "<small style='margin-left:3px'>MAC : error condition: " + mac.toString() + "</small><br>";
+ else
+ parent.footer2.document.getElementById('error_console').innerHTML += "<small style='margin-left:3px'>MAC : OK</small><br>";
+
+}
+
+
+function showTip(){
+document.getElementById('tooltip').innerHTML = "You must restart modem for the changes to take effect";
+}
+
+function clearTip(){
+document.getElementById('tooltip').innerHTML = "";
+}
+
+function reboot_flag()
+{
+ document.getElementById('reboot').value = 'yes';
+}
+
+function refresh(){
+parent.content.location.reload();
+}
+
+
+function joinadd(){
+document.getElementById('ip').value = document.getElementById('ipe1').value + '.' + document.getElementById('ipe2').value + '.' + document.getElementById('ipe3').value + '.' + document.getElementById('ipe4').value;
+document.getElementById('nm').value = document.getElementById('nete1').value + '.' + document.getElementById('nete2').value + '.' + document.getElementById('nete3').value + '.' + document.getElementById('nete4').value;
+document.getElementById('gw').value = document.getElementById('gwe1').value + '.' + document.getElementById('gwe2').value + '.' + document.getElementById('gwe3').value + '.' + document.getElementById('gwe4').value;
+}
+
+function set_refresh(){
+
+if (document.getElementById('refresh_or_not').checked)
+ document.getElementById("stat_iframe").contentWindow.RestartRefresh();
+else
+ document.getElementById('stat_iframe').contentWindow.StopRefresh();
+}
+
+function checkMainForm(){
+ return true;
+}
+
+function fill_ip_data()
+{
+
+var idip = 'ipe';
+var idnet = 'nete';
+var idgw = 'gwe';
+var idmac = 'mace'
+
+for (var i=1;i<=4;i++)
+{
+document.getElementById(idip+i).value = ip_array[i-1];
+document.getElementById(idnet+i).value = nm_array[i-1];
+document.getElementById(idgw+i).value = gw_array[i-1];
+document.getElementById(idmac+i).value = mac_array[i-1];
+}
+document.getElementById(idmac+5).value = mac_array[4];
+document.getElementById(idmac+6).value = mac_array[5];
+
+
+if (dhcp == 'DHCP')
+ document.mainForm.dhcp.value = 'dhcp';
+
+ joinadd();
+}
+</script>
+</head>
+
+
+<body onload='javascript:validate();fill_ip_data();'>
+<!-- Settings name -->
+<div class='margina' > <h2>Ethernet configuration</h2></div>
+
+<!-- Main form -->
+
+<form name='mainForm' action='/goform/formAction' target='_self' method = 'GET' onSubmit='return checkMainForm();'>
+
+<table name = 'ipData' class='margina' style='background-color:#FFFFFF' border='0'>
+<tr>
+<td><h3>Network configuration</h3></td>
+</tr>
+<tr>
+<td>Current IP address</td>
+<td></td><td></td>
+<td><input id='ipe1' type='text' size=3 maxlength=3 value='0'/> </td>
+<td><input id='ipe2' type='text' size=3 maxlength=3 value='0'/> </td>
+<td><input id='ipe3' type='text' size=3 maxlength=3 value='0'/> </td>
+<td><input id='ipe4' type='text' size=3 maxlength=3 value='0'/> </td>
+<td><input type='hidden' name='ip' id='ip' value='0'/> </td> <!-- This will be passed by form -->
+</tr>
+
+<tr>
+<td>Current netmask</td>
+<td></td><td></td>
+<td><input id='nete1' type='text' size=3 maxlength=3 value='0'/> </td>
+<td><input id='nete2' type='text' size=3 maxlength=3 value='0'/> </td>
+<td><input id='nete3' type='text' size=3 maxlength=3 value='0'/> </td>
+<td><input id='nete4' type='text' size=3 maxlength=3 value='0'/> </td>
+<td><input type='hidden' name='nm' id='nm' value='0'/> </td> <!-- This will be passed by form -->
+</tr>
+<tr>
+<td>Current gateway address</td>
+<td></td><td></td>
+<td><input id='gwe1' type='text' size=3 maxlength=3 value='0'/> </td>
+<td><input id='gwe2' type='text' size=3 maxlength=3 value='0'/> </td>
+<td><input id='gwe3' type='text' size=3 maxlength=3 value='0'/> </td>
+<td><input id='gwe4' type='text' size=3 maxlength=3 value='0'/> </td>
+<td><input type='hidden' id='gw' name='gw' value='0'/> </td> <!-- This will be passed by form -->
+</tr>
+<tr align='center'>
+<td align='left'>MAC address</td>
+
+<td><input disabled='disabled' id='mace1' type='text' size=2 maxlength=2 value='0'/> </td>
+<td><input disabled='disabled' id='mace2' type='text' size=2 maxlength=2 value='0'/> </td>
+<td><input disabled='disabled' id='mace3' type='text' size=2 maxlength=2 value='0'/> </td>
+<td><input disabled='disabled' id='mace4' type='text' size=2 maxlength=2 value='0'/> </td>
+<td><input disabled='disabled' id='mace5' type='text' size=2 maxlength=2 value='0'/> </td>
+<td><input disabled='disabled' id='mace6' type='text' size=2 maxlength=2 value='0'/> </td>
+</tr>
+
+<input type='hidden' name='dhcp' id='dhcp' value='static'/> <!-- This will be passed by form -->
+<input type='hidden' name='inter' id='inter' value='eth0'/> <!-- This will be passed by form -->
+</table>
+
+<div class='margina'><h2>Activity statistics</h2></div>
+<table id='background-image' class='d25' style='margin-left:5%;width:500px' border='0'> <tr align='center'><td colspan='2'>RX:</td><td colspan='2'>TX:</td></tr>
+<tr><td class='d25' >Bytes</td><td class='d25' id='rb' bgcolor='lavender' align='center'></td><td>Bytes</td> <td class='d25' id = 'tb' bgcolor='lavender' align='center'></td></tr>
+<tr><td class='d25' >Packets</td><td class='d25' id='rp' bgcolor='lavender' align='center'></td><td>Packets</td> <td class='d25' id = 'tp' bgcolor='lavender' align='center'></td></tr>
+<tr><td class='d25' >Errors</td><td class='d25' id='re' bgcolor='lavender' align='center'></td><td>Errors</td> <td class='d25' id = 'te' bgcolor='lavender' align='center'></td></tr>
+<tr><td class='d25' >Drops</td><td class='d25' id='rd' bgcolor='lavender' align='center'></td><td>Drops</td> <td class='d25' id = 'td' bgcolor='lavender' align='center'></td></tr>
+<tr><td class='d25' >Fifo</td><td class='d25' id='rf' bgcolor='lavender' align='center'></td><td>Fifo</td> <td class='d25' id = 'tf' bgcolor='lavender' align='center'></td></tr>
+<tr><td class='d25' >Frame</td><td class='d25' id='rfr' bgcolor='lavender' align='center'></td><td>Colls</td> <td class='d25' id = 'tc' bgcolor='lavender' align='center'></td></tr>
+<tr><td class='d25' >Compressed</td><td class='d25' id='rc' bgcolor='lavender' align='center'></td><td>Carrier</td> <td class='d25' id = 'tcar' bgcolor='lavender' align='center'></td></tr>
+<tr><td class='d25' >Multicast</td><td class='d25' id='rm' bgcolor='lavender' align='center'></td><td>Compressed</td> <td class='d25' id = 'tcom' bgcolor='lavender' align='center'></td></tr>
+
+</table>
+<div class='margina' align='right'>
+Auto refresh<input type='checkbox' name='refresh_or_not' id='refresh_or_not' onchange='set_refresh();' checked='checked'>
+</div>
+
+
+<div class='margina' align='right'>
+<pre ></pre>
+<input type='button' value='Refresh' onclick='javascript:refresh();'>
+<input type='submit' onclick='javascript:joinadd();' value='Save configuration' onmouseover='javascript:showTip();' onmouseout='javascript:clearTip();'/>
+<input type='submit' value='Restart the modem' onclick='javascript:reboot_flag();'/>
+<pre id ='tooltip'></pre>
+</div>
+
+
+</form>
+
+
+
+
+<iframe id='stat_iframe' name='stat_iframe' src ="stat.asp?interface=eth0" frameborder='0' height='5'>
+ <p>Your browser does not support iframes.</p>
+</iframe>
+</body>
+</html> \ No newline at end of file
diff --git a/cleopatre/application/spidgoahead/web/footer.html b/cleopatre/application/spidgoahead/web/footer.html
new file mode 100644
index 0000000000..44131dfe91
--- /dev/null
+++ b/cleopatre/application/spidgoahead/web/footer.html
@@ -0,0 +1,7 @@
+<HTML>
+<body bgcolor="#F5F5F5">
+<table height='25' bgcolor="#ffaaaa" width=100%><TR><TD align="center">
+ <i><b>This is NEW version of Web Interface created using GoAhead ASP technology</b></i>
+</TD></TR></table>
+</body>
+</HTML>
diff --git a/cleopatre/application/spidgoahead/web/index.asp b/cleopatre/application/spidgoahead/web/index.asp
new file mode 100644
index 0000000000..ca9d07be9b
--- /dev/null
+++ b/cleopatre/application/spidgoahead/web/index.asp
@@ -0,0 +1,27 @@
+<html>
+ <head>
+ <title>SPiDCOM - SPC 300</title>
+ <link rel="stylesheet" href="style/normal_ws.css" type="text/css">
+ <script language="JavaScript">
+
+
+ function restore() {
+ self.content.location.href = "/index.asp"
+ }
+ </script>
+ </head>
+
+ <FRAMESET border="0" frameBorder="1" frameSpacing="0" ROWS="60,*,30" onResize="if (document.layers) {restore();}">
+ <FRAME marginHeight="0" marginWidth="0" noResize name='banner' id='banner' scrolling="no" src="banner.asp">
+ <FRAMESET border="0" COLS="150,*" frameBorder="no" frameSpacing="0">
+ <FRAME marginHeight="0" marginWidth="0" name="nav" noResize scrolling="auto" src="nav.asp">
+ <FRAMESET border="0" ROWS="*,100" frameBorder="no" frameSpacing="0">
+ <FRAME marginHeight="0" marginWidth="0" name="content" noResize scrolling='auto' src="br0.asp">
+ <FRAME marginHeight="0" marginWidth="0" name="footer2" noResize src="none.html">
+ </FRAMESET>
+ </FRAMESET>
+ <FRAME marginHeight="0" marginWidth="0" name="footer" noResize src="footer.html">
+ </FRAMESET>
+
+</html>
+
diff --git a/cleopatre/application/spidgoahead/web/jslib/query.js b/cleopatre/application/spidgoahead/web/jslib/query.js
new file mode 100644
index 0000000000..059bd89460
--- /dev/null
+++ b/cleopatre/application/spidgoahead/web/jslib/query.js
@@ -0,0 +1,111 @@
+//<script type='text/javascript'>
+function Querystring()
+
+
+{
+
+
+// get the query string, ignore the ? at the front.
+
+
+ var querystring=location.search.substring(1,location.search.length);
+
+
+
+
+
+// parse out name/value pairs separated via &
+
+
+ var args = querystring.split('&');
+
+
+
+
+
+// split out each name = value pair
+
+
+ for (var i=0;i<args.length;i++)
+
+
+ {
+
+
+ var pair = args[i].split('=');
+
+
+
+
+
+ // Fix broken unescaping
+
+
+ temp = unescape(pair[0]).split('+');
+
+
+ name = temp.join(' ');
+
+
+
+
+
+ temp = unescape(pair[1]).split('+');
+
+
+ value = temp.join(' ');
+
+
+
+
+
+ this[name]=value;
+
+
+ }
+
+
+
+
+
+ this.get=Querystring_get;
+
+
+}
+
+
+
+
+
+
+
+
+function Querystring_get(strKey,strDefault)
+
+
+{
+
+
+ var value=this[strKey];
+
+
+ if (value==null)
+
+
+ {
+
+
+ value=strDefault;
+
+
+ }
+
+
+
+
+
+ return value;
+
+
+}
+//<script> \ No newline at end of file
diff --git a/cleopatre/application/spidgoahead/web/left.png b/cleopatre/application/spidgoahead/web/left.png
new file mode 100644
index 0000000000..b3733eed59
--- /dev/null
+++ b/cleopatre/application/spidgoahead/web/left.png
Binary files differ
diff --git a/cleopatre/application/spidgoahead/web/loadcfg.asp b/cleopatre/application/spidgoahead/web/loadcfg.asp
new file mode 100644
index 0000000000..8a1fe46952
--- /dev/null
+++ b/cleopatre/application/spidgoahead/web/loadcfg.asp
@@ -0,0 +1,24 @@
+<html>
+<!- Copyright (c) Go Ahead Software Inc., 2000-2000. All Rights Reserved. ->
+<head>
+<title>Load the User Configuration</title>
+<link rel="stylesheet" href="style/normal_ws.css" type="text/css">
+<% language=javascript %>
+</head>
+
+<body>
+<h1>Re-load the permanently stored user configuration</h1>
+<form action=/goform/LoadUserManagement method=POST>
+
+<table>
+<tr>
+ <td></td>
+ <td ALIGN="CENTER">
+ <input type=submit name=ok value="OK" title="Load Configuration"> <input type=submit name=ok value="Cancel"></td>
+</tr>
+</table>
+
+</form>
+
+</body>
+</html>
diff --git a/cleopatre/application/spidgoahead/web/logo-spidcom.jpg b/cleopatre/application/spidgoahead/web/logo-spidcom.jpg
new file mode 100755
index 0000000000..8d8b7f77c9
--- /dev/null
+++ b/cleopatre/application/spidgoahead/web/logo-spidcom.jpg
Binary files differ
diff --git a/cleopatre/application/spidgoahead/web/nav.asp b/cleopatre/application/spidgoahead/web/nav.asp
new file mode 100644
index 0000000000..5576c83f9d
--- /dev/null
+++ b/cleopatre/application/spidgoahead/web/nav.asp
@@ -0,0 +1,71 @@
+<html>
+
+<head>
+<link rel="stylesheet" href="style/normal_ws.css" type="text/css">
+
+<style type='text/css'>
+
+#one-column-emphasis
+{
+ font-family: "Lucida Sans Unicode", "Lucida Grande", Sans-Serif;
+ font-size: 11px;
+ width:100%;
+ text-align: center;
+ border-collapse: separate;
+ background:#F5F5F5;
+}
+#one-column-emphasis th
+{
+ font-size: 14px;
+ font-weight: normal;
+ padding: 12px 15px;
+ color: #039;
+}
+#one-column-emphasis td
+{
+ padding: 10px 15px;
+ color: #669;
+ border-top: 1px solid #e8edff;
+}
+
+#one-column-emphasis tr:hover td
+{
+ color: white;
+ background: #E0E0E0;
+}
+
+a:link, a:visited {
+color: black;
+
+}
+
+a:hover {
+color:red;
+}
+</style>
+
+
+</head>
+
+<body bgcolor="#F5F5F5">
+
+<div style='position:relative;margin-top:15%'></div>
+
+<div style='position:relative;margin-left:5%;margin-right:5%;background-color:#CCCCCC;text-align:center;color:black'><code>SPC 300</code>
+<table id='one-column-emphasis'>
+<tr><td><a href = 'plc0.asp' target='content'>Plc </a></td></tr>
+<tr><td><a href = 'eth0.asp' target='content'>Ethernet </a></td></tr>
+<tr><td><a href = 'br0.asp' target='content'>Bridge </a></td></tr>
+<tr><td><a href = 'soft.asp' target='content'>Software </a></td></tr>
+</table>
+</div>
+
+<div style='position:relative;margin-left:5%;margin-right:5%;background-color:#CCCCCC;text-align:center;color:black'><code>SPC 300</code></div>
+
+
+ <div id='divb' style='position:absolute; bottom:0;margin-left: auto; margin-right: auto;'>
+ <img src='ws.gif' width='90%'>
+</div>
+</body>
+
+<html> \ No newline at end of file
diff --git a/cleopatre/application/spidgoahead/web/none.html b/cleopatre/application/spidgoahead/web/none.html
new file mode 100644
index 0000000000..6f8fd62e8c
--- /dev/null
+++ b/cleopatre/application/spidgoahead/web/none.html
@@ -0,0 +1,40 @@
+<html>
+<head>
+<link rel="stylesheet" href="style/normal_ws.css" type="text/css">
+<style type='text/css'>
+a:link, a:visited {
+color: black;
+
+}
+a { text-decoration: none;}
+
+a:focus { outline: none; }
+
+a:hover {
+color:red;
+}
+</style>
+<script type='text/javascript'>
+function showConsole()
+{
+ if(document.getElementById("error_console").style.visibility == "visible")
+ {
+ document.getElementById("error_console").style.visibility = "hidden";
+ }
+ else
+ {
+ document.getElementById("error_console").style.visibility = "visible";
+ }
+}
+
+</script>
+
+</head>
+<body bgcolor="#FFFFFF" style='background-image:url(/logo-spidcom.jpg);background-repeat:no-repeat;background-position: center right'>
+<!--<div id='title' style='line-height:45px;width:500px;height:45px;margin-left:5%;margin-top:5px;background-image:url(/logo-spidcom.jpg);background-repeat:no-repeat;background-position: center right'><a href='javascript:showConsole();'>Show/Hide ASP console :</a></div><br>-->
+<div id='title' style='width:500px;margin-left:5%;margin-top:5px;'><a href='javascript:showConsole();'>Show/Hide ASP console :</a></div><br>
+<div style='width:500px;border-style:dotted;border-width:thin;border-color:red;margin-left:5%;margin-bottom:15px;visibility:hidden' id='error_console'> </div>
+
+</body>
+
+</html> \ No newline at end of file
diff --git a/cleopatre/application/spidgoahead/web/pattern.png b/cleopatre/application/spidgoahead/web/pattern.png
new file mode 100644
index 0000000000..5159b3bbf1
--- /dev/null
+++ b/cleopatre/application/spidgoahead/web/pattern.png
Binary files differ
diff --git a/cleopatre/application/spidgoahead/web/plc0.asp b/cleopatre/application/spidgoahead/web/plc0.asp
new file mode 100644
index 0000000000..ee4e588eb6
--- /dev/null
+++ b/cleopatre/application/spidgoahead/web/plc0.asp
@@ -0,0 +1,307 @@
+<html>
+
+<head>
+ <title>SPC 300 - SPiDCOM</title>
+
+<link rel="stylesheet" href="style/normal_ws.css" type="text/css">
+
+<style type = 'text/css'>
+div.margina,table.margina{
+ margin-left:5%;
+ width:500px;
+ background-color:#F5F5F5;
+}
+td{
+ padding-left:5px;
+}
+
+input[type='text']{
+ margin-left:auto;
+ margin-right:auto;
+ text-align:center;
+}
+input[disabled='disabled'] {
+ background-color:BBBBBB;
+ color:white;
+ cursor:default;
+}
+body{
+ background-image: url("/spidcom.gif");
+ background-repeat: no-repeat;
+ background-attachment: fixed;
+ background-position: center center;
+}
+
+</style>
+
+<script type='text/javascript'>
+
+var mac = <% spidcomAspGetMac('plc0'); %>
+var ip_data = <% spidcomAspGetIpData('plc0'); %>
+
+var online_station = '<% spidcomAspEocGetTopo(); %>';
+var station_array = online_station.split('-');
+
+
+var ip_data_array = ip_data.split(':');
+
+var ip_array;
+var nm_array;
+var gw_array;
+
+if(ip_data_array[1].length == 0)
+ ip_array = new Array("0","0","0","0")
+else
+ ip_array = ip_data_array[1].split('.');
+
+if(ip_data_array[2].length == 0)
+ nm_array = new Array("0","0","0","0")
+else
+ nm_array = ip_data_array[2].split('.');
+
+if(ip_data_array[4].length == 0)
+ gw_array = new Array("0","0","0","0")
+else
+ gw_array = ip_data_array[4].split('.');
+
+
+
+var dhcp = ip_data_array[0];
+var mac_array = mac.split(':');
+
+
+
+function validate()
+{
+ parent.footer2.document.getElementById('error_console').innerHTML = "";
+
+ if(ip_data.indexOf("error") >= 0) // error
+ parent.footer2.document.getElementById('error_console').innerHTML += "<small style='margin-left:3px'>IP data : error condition: " + ip_data.toString() + "</small><br>";
+ else
+ parent.footer2.document.getElementById('error_console').innerHTML += "<small style='margin-left:3px'>IP data : OK</small><br>";
+
+ if(mac.indexOf("error") >= 0) // error
+ parent.footer2.document.getElementById('error_console').innerHTML += "<small style='margin-left:3px'>MAC : error condition: " + mac.toString() + "</small><br>";
+ else
+ parent.footer2.document.getElementById('error_console').innerHTML += "<small style='margin-left:3px'>MAC : OK</small><br>";
+
+
+ if(online_station.indexOf("error") >= 0) // error
+ parent.footer2.document.getElementById('error_console').innerHTML += "<small style='margin-left:3px'>Online station : error condition: " + mac.toString() + "</small><br>";
+ else
+ parent.footer2.document.getElementById('error_console').innerHTML += "<small style='margin-left:3px'>Online station : OK</small><br>";
+
+}
+
+
+function showTip(){
+document.getElementById('tooltip').innerHTML = "You must restart modem for the changes to take effect";
+}
+
+function clearTip(){
+document.getElementById('tooltip').innerHTML = "";
+}
+
+function reboot_flag()
+{
+ document.getElementById('reboot').value = 'yes';
+}
+
+function refresh(){
+parent.content.location.reload();
+}
+
+
+function perform_eoc_action()
+{
+
+temp1 = document.getElementById('station').value;
+temp2 = document.getElementById('action').value;
+
+if ( (temp1 == "-1") || (temp2 == "none") )
+{
+ alert("Please check your request.");
+ return;
+}
+
+action = document.getElementById('action')[document.getElementById('action').selectedIndex].value.toString();
+station = document.getElementById('station')[document.getElementById('station').selectedIndex].innerHTML.toString();
+mojProzor = window.open("","prozor","toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=no, copyhistory=yes, width=600, height=200, left=100, top=100");
+mojProzor.focus();
+mojProzor.location.href = "action.asp?mac=" + station + "&action=" + action;
+}
+
+
+function joinadd(){
+document.getElementById('ip').value = document.getElementById('ipe1').value + '.' + document.getElementById('ipe2').value + '.' + document.getElementById('ipe3').value + '.' + document.getElementById('ipe4').value;
+document.getElementById('nm').value = document.getElementById('nete1').value + '.' + document.getElementById('nete2').value + '.' + document.getElementById('nete3').value + '.' + document.getElementById('nete4').value;
+document.getElementById('gw').value = document.getElementById('gwe1').value + '.' + document.getElementById('gwe2').value + '.' + document.getElementById('gwe3').value + '.' + document.getElementById('gwe4').value;
+}
+
+function set_refresh(){
+
+if (document.getElementById('refresh_or_not').checked)
+ document.getElementById("stat_iframe").contentWindow.RestartRefresh();
+else
+ document.getElementById('stat_iframe').contentWindow.StopRefresh();
+}
+
+function checkMainForm(){
+ return true;
+}
+
+function fill_ip_data()
+{
+
+var idip = 'ipe';
+var idnet = 'nete';
+var idgw = 'gwe';
+var idmac = 'mace'
+
+for (var i=1;i<=4;i++)
+{
+document.getElementById(idip+i).value = ip_array[i-1];
+document.getElementById(idnet+i).value = nm_array[i-1];
+document.getElementById(idgw+i).value = gw_array[i-1];
+document.getElementById(idmac+i).value = mac_array[i-1];
+}
+document.getElementById(idmac+5).value = mac_array[4];
+document.getElementById(idmac+6).value = mac_array[5];
+
+
+if (dhcp == 'DHCP')
+ document.mainForm.dhcp.value = 'dhcp';
+
+
+for (i=0;i<station_array.length-1;i++)
+ document.getElementById('station').innerHTML += "<option value='" + i.toString() + "'>" + station_array[i].toString(); + "</option>";
+
+joinadd();
+}
+</script>
+</head>
+
+
+<body onload='javascript:validate();fill_ip_data();'>
+<!-- Settings name -->
+<div class='margina' > <h2>PLC configuration</h2></div>
+
+<!-- Main form -->
+
+<form name='mainForm' action='/goform/formAction' target='_self' method = 'GET' onSubmit='return checkMainForm();'>
+
+<table name = 'ipData' class='margina' style='background-color:#FFFFFF' border='0'>
+<tr>
+<td><h3>Network configuration</h3></td>
+</tr>
+<tr>
+<td>Current IP address</td>
+<td></td><td></td>
+<td><input id='ipe1' type='text' size=3 maxlength=3 value='0'/> </td>
+<td><input id='ipe2' type='text' size=3 maxlength=3 value='0'/> </td>
+<td><input id='ipe3' type='text' size=3 maxlength=3 value='0'/> </td>
+<td><input id='ipe4' type='text' size=3 maxlength=3 value='0'/> </td>
+<td><input type='hidden' name='ip' id='ip' value='0'/> </td> <!-- This will be passed by form -->
+</tr>
+
+<tr>
+<td>Current netmask</td>
+<td></td><td></td>
+<td><input id='nete1' type='text' size=3 maxlength=3 value='0'/> </td>
+<td><input id='nete2' type='text' size=3 maxlength=3 value='0'/> </td>
+<td><input id='nete3' type='text' size=3 maxlength=3 value='0'/> </td>
+<td><input id='nete4' type='text' size=3 maxlength=3 value='0'/> </td>
+<td><input type='hidden' name='nm' id='nm' value='0'/> </td> <!-- This will be passed by form -->
+</tr>
+<tr>
+<td>Current gateway address</td>
+<td></td><td></td>
+<td><input id='gwe1' type='text' size=3 maxlength=3 value='0'/> </td>
+<td><input id='gwe2' type='text' size=3 maxlength=3 value='0'/> </td>
+<td><input id='gwe3' type='text' size=3 maxlength=3 value='0'/> </td>
+<td><input id='gwe4' type='text' size=3 maxlength=3 value='0'/> </td>
+<td><input type='hidden' id='gw' name='gw' value='0'/> </td> <!-- This will be passed by form -->
+</tr>
+<tr align='center'>
+<td align='left'>MAC address</td>
+
+<td><input disabled='disabled' id='mace1' type='text' size=2 maxlength=2 value='0'/> </td>
+<td><input disabled='disabled' id='mace2' type='text' size=2 maxlength=2 value='0'/> </td>
+<td><input disabled='disabled' id='mace3' type='text' size=2 maxlength=2 value='0'/> </td>
+<td><input disabled='disabled' id='mace4' type='text' size=2 maxlength=2 value='0'/> </td>
+<td><input disabled='disabled' id='mace5' type='text' size=2 maxlength=2 value='0'/> </td>
+<td><input disabled='disabled' id='mace6' type='text' size=2 maxlength=2 value='0'/> </td>
+</tr>
+<tr>
+
+<input type='hidden' name='dhcp' id='dhcp' value='static'/> <!-- This will be passed by form -->
+<input type='hidden' name='inter' id='inter' value='plc0'/> <!-- This will be passed by form -->
+</table>
+
+<div class='margina'><h2>Activity statistics</h2></div>
+<table id='background-image' class='d25' style='margin-left:5%;width:500px' border='0'> <tr align='center'><td colspan='2'>RX:</td><td colspan='2'>TX:</td></tr>
+<tr><td class='d25' >Bytes</td><td class='d25' id='rb' bgcolor='lavender' align='center'></td><td>Bytes</td> <td class='d25' id = 'tb' bgcolor='lavender' align='center'></td></tr>
+<tr><td class='d25' >Packets</td><td class='d25' id='rp' bgcolor='lavender' align='center'></td><td>Packets</td> <td class='d25' id = 'tp' bgcolor='lavender' align='center'></td></tr>
+<tr><td class='d25' >Errors</td><td class='d25' id='re' bgcolor='lavender' align='center'></td><td>Errors</td> <td class='d25' id = 'te' bgcolor='lavender' align='center'></td></tr>
+<tr><td class='d25' >Drops</td><td class='d25' id='rd' bgcolor='lavender' align='center'></td><td>Drops</td> <td class='d25' id = 'td' bgcolor='lavender' align='center'></td></tr>
+<tr><td class='d25' >Fifo</td><td class='d25' id='rf' bgcolor='lavender' align='center'></td><td>Fifo</td> <td class='d25' id = 'tf' bgcolor='lavender' align='center'></td></tr>
+<tr><td class='d25' >Frame</td><td class='d25' id='rfr' bgcolor='lavender' align='center'></td><td>Colls</td> <td class='d25' id = 'tc' bgcolor='lavender' align='center'></td></tr>
+<tr><td class='d25' >Compressed</td><td class='d25' id='rc' bgcolor='lavender' align='center'></td><td>Carrier</td> <td class='d25' id = 'tcar' bgcolor='lavender' align='center'></td></tr>
+<tr><td class='d25' >Multicast</td><td class='d25' id='rm' bgcolor='lavender' align='center'></td><td>Compressed</td> <td class='d25' id = 'tcom' bgcolor='lavender' align='center'></td></tr>
+
+</table>
+<div class='margina' align='right'>
+Auto refresh<input type='checkbox' name='refresh_or_not' id='refresh_or_not' onchange='set_refresh();' checked='checked'>
+</div>
+
+
+
+
+<div class='margina'><h2>Station managment</h2></div>
+
+<div class='margina' style='background-color:#FFFFFF' align='right'>
+<table border = '0' style='margin-top:5px;margin-right:5px'>
+<tr>
+<td class='margina' style ='width:500px' align='right'><select style='width:200px' name='station' id='station'><option value='-1'>Select station</option></select></td> </tr>
+<tr>
+<td align='right'>
+<select style='width:200px' name='action' id='action'>
+<option id='-1' value='none'>Select action</option>
+<option style='color:red' id='0' value='reboot'>Reboot</option>
+<option id='1' value='get_stat'>Retrieve statistics</option>
+<option id='2' value='reset_stat'>Reset statistics</option>
+<option id='3' value='get_device_info'>Retrieve device info</option>
+<option id='4' value='get_link'>Retrieve link quality</option>
+</select>
+</td>
+</tr>
+<tr>
+<td colspan='2' align = 'right'><input type='button' value='Proceed' onclick='javascript:perform_eoc_action();'/></td>
+</tr>
+</table>
+</div>
+<div class='margina' align='right'>
+<pre ></pre>
+<input type='button' value='Refresh' onclick='javascript:refresh();'>
+<input type='submit' onclick='javascript:joinadd();' value='Save configuration' onmouseover='javascript:showTip();' onmouseout='javascript:clearTip();'/>
+<input type='submit' value='Restart the modem' onclick='javascript:reboot_flag();'/>
+<pre id ='tooltip'></pre>
+</div>
+
+
+
+
+
+
+</form>
+
+
+
+
+
+<iframe id='stat_iframe' name='stat_iframe' src ="stat.asp?interface=plc0" frameborder='0' height='5'>
+ <p>Your browser does not support iframes.</p>
+</iframe>
+
+</body>
+</html> \ No newline at end of file
diff --git a/cleopatre/application/spidgoahead/web/savecfg.asp b/cleopatre/application/spidgoahead/web/savecfg.asp
new file mode 100644
index 0000000000..0947eb58dc
--- /dev/null
+++ b/cleopatre/application/spidgoahead/web/savecfg.asp
@@ -0,0 +1,24 @@
+<html>
+<!- Copyright (c) Go Ahead Software Inc., 2000-2000. All Rights Reserved. ->
+<head>
+<title>Save the User Configuration</title>
+<link rel="stylesheet" href="style/normal_ws.css" type="text/css">
+<% language=javascript %>
+</head>
+
+<body>
+<h1>Permanently save the user configuration</h1>
+<form action=/goform/SaveUserManagement method=POST>
+
+<table>
+<tr>
+ <td></td>
+ <td ALIGN="CENTER">
+ <input type=submit name=ok value="OK" title="Save Configuration"> <input type=submit name=ok value="Cancel"></td>
+</tr>
+</table>
+
+</form>
+
+</body>
+</html>
diff --git a/cleopatre/application/spidgoahead/web/soft.asp b/cleopatre/application/spidgoahead/web/soft.asp
new file mode 100644
index 0000000000..25ccefc945
--- /dev/null
+++ b/cleopatre/application/spidgoahead/web/soft.asp
@@ -0,0 +1,15 @@
+<html>
+
+<head>
+<script type='text/javascript'>
+function clearConsole()
+{
+ parent.footer2.document.getElementById('error_console').innerHTML = "";
+}
+
+</script>
+</head>
+<body onload='javascript:clearConsole();'>
+
+</body>
+</html> \ No newline at end of file
diff --git a/cleopatre/application/spidgoahead/web/spidcom.gif b/cleopatre/application/spidgoahead/web/spidcom.gif
new file mode 100755
index 0000000000..6bf1629a29
--- /dev/null
+++ b/cleopatre/application/spidgoahead/web/spidcom.gif
Binary files differ
diff --git a/cleopatre/application/spidgoahead/web/stat.asp b/cleopatre/application/spidgoahead/web/stat.asp
new file mode 100644
index 0000000000..f1919f3dd2
--- /dev/null
+++ b/cleopatre/application/spidgoahead/web/stat.asp
@@ -0,0 +1,61 @@
+<html>
+<head>
+<link rel="stylesheet" href="style/normal_ws.css" type="text/css">
+<script type = 'text/javascript'>
+
+var RefreshID = setInterval("window.location.reload()",5000);
+
+
+
+
+function StopRefresh(){
+clearInterval(RefreshID);
+}
+
+function RestartRefresh(){
+RefreshID = setInterval("window.location.reload()",5000);
+}
+
+var stats = '<% spidcomAspGetStatistics(); %>';
+stats_array = stats.split(':');
+
+
+function validate()
+{
+
+ if(stats.indexOf("error") >= 0) // error
+ parent.parent.footer2.document.getElementById('error_console').innerHTML += "<code>Statistics : error condition</code><br>";
+ //else
+ //parent.parent.footer2.document.getElementById('error_console').innerHTML += "<code>Statistics : OK</code><br>";
+
+}
+
+
+function fill_it(){
+
+parent.document.getElementById('rb').innerHTML = stats_array[0];
+parent.document.getElementById('tb').innerHTML = stats_array[1];
+parent.document.getElementById('rp').innerHTML = stats_array[2];
+parent.document.getElementById('tp').innerHTML = stats_array[3];
+parent.document.getElementById('re').innerHTML = stats_array[4];
+parent.document.getElementById('te').innerHTML = stats_array[5];
+parent.document.getElementById('rd').innerHTML = stats_array[6];
+parent.document.getElementById('td').innerHTML = stats_array[7];
+parent.document.getElementById('rf').innerHTML = stats_array[8];
+parent.document.getElementById('tf').innerHTML = stats_array[9];
+parent.document.getElementById('rfr').innerHTML = stats_array[10];
+parent.document.getElementById('tc').innerHTML = stats_array[11];
+parent.document.getElementById('rc').innerHTML = stats_array[12];
+parent.document.getElementById('tcar').innerHTML = stats_array[13];
+parent.document.getElementById('rm').innerHTML = stats_array[14];
+parent.document.getElementById('tcom').innerHTML = stats_array[15];
+
+}
+
+</script>
+
+</head>
+<body onload='javascript:validate();fill_it();'>
+</body>
+
+</html> \ No newline at end of file
diff --git a/cleopatre/application/spidgoahead/web/style/doc.css b/cleopatre/application/spidgoahead/web/style/doc.css
new file mode 100644
index 0000000000..94147aac97
--- /dev/null
+++ b/cleopatre/application/spidgoahead/web/style/doc.css
@@ -0,0 +1,42 @@
+body {
+ font-family: Arial, Helvetica, sans-serif; font-size: 9pt;
+; margin-right: 5px; margin-left: 10px
+}
+p {
+; margin-left: 30px
+; font-family: Arial, Helvetica, sans-serif; color: #333333
+; font-size: 9pt
+}
+h3 {
+ font-size: 10pt; font-weight: bold;
+; margin-top: 8pt
+; font-family: Arial, Helvetica, sans-serif; color: #0066CC
+}
+h2 {
+ font-size: 11pt; font-weight: bold;
+; margin-top: 8pt
+; font-family: Arial, Helvetica, sans-serif; color: #0066CC
+}
+h1 {
+ font-size: 16pt; font-weight: bold;
+; font-family: Arial, Helvetica, sans-serif; color: #0066CC
+}
+pre {
+ background-color: #EEEEEE;
+; color: #0A0A8C; font-family: "Courier New", Courier, mono; font-size: 9pt
+; padding-left: 31px
+; padding-top: 5px; padding-right: 20px; padding-bottom: 5px
+}
+li {
+; font-family: Arial, Helvetica, sans-serif; color: #333333
+; margin-left: 30px
+; font-size: 9pt
+}
+td { font-family: Arial, Helvetica, sans-serif; font-size: 9pt; color: #333333; vertical-align: top}
+
+ul { ; font-family: Arial, Helvetica, sans-serif; color: #333333; margin-left: 30px; font-size: 9pt }
+.titleLeft { font-family: Arial, Helvetica, sans-serif; font-size: 10pt; font-weight: bold; width: 33%; color: #0066CC; text-align: left}
+.titleCenter { font-family: Arial, Helvetica, sans-serif; font-size: 10pt; font-weight: bold; width: 33%; color: #0066CC; text-align: center}
+.titleRight { font-family: Arial, Helvetica, sans-serif; font-size: 10pt; font-weight: bold; width: 33%; color: #0066CC; text-align: right}
+table { padding-left: 30px}
+.apiTitle { padding-left: 0px}
diff --git a/cleopatre/application/spidgoahead/web/style/help.htm b/cleopatre/application/spidgoahead/web/style/help.htm
new file mode 100644
index 0000000000..7b1e028131
--- /dev/null
+++ b/cleopatre/application/spidgoahead/web/style/help.htm
@@ -0,0 +1,40 @@
+<style>
+<!- Copyright (c) Go Ahead Software Inc., 1999-2000. All Rights Reserved. ->
+<!--
+ body {
+ font-family: Veranda, Arial, Helvetica;
+ font-size: 12pt;
+ color: #0000A0;
+ }
+ p {
+ font-family: Arial, Helvetica;
+ font-size: 12pt;
+ color: #0000A0;
+ }
+ h2 {
+ font-family: Arial, Helvetica;
+ font-size: 14pt;
+ font-weight: bold;
+ color: #0000A0;
+ margin: 8pt 0pt 0pt 0pt;
+ padding: 0 0 0 0;
+ }
+ h1 {
+ font-family: Arial, Helvetica;
+ font-size: 16pt;
+ font-weight: bold;
+ color: #0000A0;
+ margin: 8pt 0pt 0pt 0pt;
+ padding: 0 0 0 0;
+ }
+ td {
+ font-family: Arial, Helvetica;
+ font-size: 9pt;
+ color: #0000A0;
+ }
+ a:link {
+ text-decoration: underline;
+ color: #0000A0;
+ }
+-->
+</style>
diff --git a/cleopatre/application/spidgoahead/web/style/menu.htm b/cleopatre/application/spidgoahead/web/style/menu.htm
new file mode 100644
index 0000000000..63e64fe96c
--- /dev/null
+++ b/cleopatre/application/spidgoahead/web/style/menu.htm
@@ -0,0 +1,55 @@
+<style>
+<!- Copyright (c) Go Ahead Software Inc., 1999-2000. All Rights Reserved. ->
+<!--
+ body {
+ font-family: Veranda, Arial, Helvetica;
+ font-size: 9pt;
+ color: #ffffff;
+ background-graphic: graphics/stripe.jpg;
+ }
+ p {
+ font-family: Arial, Helvetica;
+ font-size: 9pt;
+ color: #ffffff;
+ }
+ h1 {
+ font-family: Arial, Helvetica;
+ font-size: 11pt;
+ font-weight: bold;
+ color: #ffffff;
+ margin-top: 8pt;
+ margin-bottom: 4pt
+ }
+ h2 {
+ font-family: Arial, Helvetica;
+ font-size: 9pt;
+ font-weight: bold;
+ color: #ffffff;
+ margin-top: 8pt;
+ margin-bottom: 4pt;
+ padding-left: 12
+ }
+ h3 {
+ font-family: Arial, Helvetica;
+ font-size: 9pt;
+ font-weight: normal;
+ color: #ffffff;
+ margin: 0pt 0pt 0pt 0pt;
+ padding: 0 0 0 30;
+ }
+h4 { font-family: Arial, Helvetica; font-size: 9pt; font-weight: normal; color: #ffffff; ; margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 15px; padding-top: 0; padding-right: 0; padding-bottom: 0; padding-left: 30}
+ a:link {
+ text-decoration: underline;
+ color: #33ccff;
+ }
+ a:visited {
+ text-decoration: underline;
+ color: #3399ff;
+ }
+ a:active {
+ text-decoration: underline;
+ color: #ccffff;
+ }
+-->
+</style>
+
diff --git a/cleopatre/application/spidgoahead/web/style/normal_ws.css b/cleopatre/application/spidgoahead/web/style/normal_ws.css
new file mode 100644
index 0000000000..3c30e6bf22
--- /dev/null
+++ b/cleopatre/application/spidgoahead/web/style/normal_ws.css
@@ -0,0 +1,48 @@
+body {
+ font-family: Arial, Helvetica, sans-serif; font-size: 9pt;
+}
+p {
+ font-size: 9pt;
+; margin-left: 10px
+; font-family: Arial, Helvetica, sans-serif; color: #333333
+}
+h1 {
+ font-size: 14pt; font-weight: bold;
+; margin-left: 10px
+; font-family: Arial, Helvetica, sans-serif; color: #0066CC
+}
+h2 {
+ font-size: 12pt; font-weight: bold;
+; margin-left: 10px
+; font-family: Arial, Helvetica, sans-serif; color: #0066CC
+}
+h3 {
+ font-size: 10pt; font-weight: bold;
+; margin-left: 10px
+; font-family: Arial, Helvetica, sans-serif; color: #0066CC
+}
+pre {
+line-height: normal;
+; color: #0A0A8C
+; font-family: "Courier New", Courier, mono; font-size: 9pt; margin-left: 10px; background-color: #EEEEEE; padding-left: 20px
+; padding-top: 5px; padding-bottom: 5px; padding-right: 20px
+}
+td {
+ font-size: 9pt;
+ font-family: Arial, Helvetica, sans-serif; color: #333333;
+ padding-top:2px;
+ padding-bottom:2px;
+ padding-left:3px;
+ padding-right:3px;
+}
+a { text-decoration: none;}
+
+a:focus { outline: none; }
+
+table { margin-left: 0px;
+ background: url('/pattern.png');
+}
+ol { margin-left: 5px; color: #0066CC; font-family: Arial, Helvetica, sans-serif; font-size: 9pt}
+li a:hover { color: #0066C0;}
+ul { font-size: 9pt; margin-left: 5px; font-family: Arial, Helvetica, sans-serif; color: #0066CC}
+h4 { font-size: 9pt; font-weight: bold; margin-left: 10px ; font-family: Arial, Helvetica, sans-serif; color: #0066CC}
diff --git a/cleopatre/application/spidgoahead/web/style/option.htm b/cleopatre/application/spidgoahead/web/style/option.htm
new file mode 100644
index 0000000000..7b1406af59
--- /dev/null
+++ b/cleopatre/application/spidgoahead/web/style/option.htm
@@ -0,0 +1,28 @@
+<style>
+<!- Copyright (c) Go Ahead Software Inc., 1999-2000. All Rights Reserved. ->
+<!--
+ body {
+ font-family: MS Sans Serif, Arial, Helvetica;
+ font-size: 9pt;
+ color: #0000A0;
+ }
+ p {
+ font-family: MS Sans Serif, Arial, Helvetica;
+ font-size: 9pt;
+ color: #0000A0;
+ }
+ h2 {
+ font-family: Arial, Helvetica;
+ font-size: 9pt;
+ font-weight: bold;
+ color: #0000A0;
+ margin: 0pt 0pt 0pt 0pt;
+ padding: 0 0 0 0;
+ }
+ td {
+ font-family: MS Sans Serif, Arial, Helvetica;
+ font-size: 9pt;
+ color: #0000A0;
+ }
+-->
+</style>
diff --git a/cleopatre/application/spidgoahead/web/um.htm b/cleopatre/application/spidgoahead/web/um.htm
new file mode 100644
index 0000000000..e4d5108b5b
--- /dev/null
+++ b/cleopatre/application/spidgoahead/web/um.htm
@@ -0,0 +1,10 @@
+<html>
+<head>
+<title>Company Overview</title>
+<link rel="stylesheet" href="style/normal_ws.css">
+</head>
+
+<BODY>
+<table Width="550"><tr><td>
+<H1>User Management Functions</H1><H2>Add User </H2><P>The Add a User option calls up the URL, &quot;<A HREF="adduser.asp">adduser.asp</A>&quot;. This Add a User data entry pane contains these fields:</P><BLOCKQUOTE><P> <B>User ID</B> - enter the ID of the user in this text field<BR><B>Group</B> - select a user group from this list for the user<BR><B>Enabled</B> -ensure that the Check box is checked to enable the user<BR><B>Password</B> - secure text field (displays asterisks)<BR><B>Confirm </B>- secure text field </P></BLOCKQUOTE><H2>Delete User </H2><P>The Delete a User option calls up the URL, <A HREF="deluser.asp">&quot;deluser.asp</A>&quot;. The Delete a User data entry pane provides a list of all added users. Use this list to select the user you wish to delete.</P><P>Clicking OK deletes the selected user and updates the user list accordingly.</P><H2>Add Group </H2><P>The Add a User Group option calls up the URL, &quot;<A HREF="addgroup.asp">addgroup.asp</A>&quot;. The Add Group data entry pane contains these fields:</P><BLOCKQUOTE><P> <B>Group Name</B> - enter the name of the group in this text field.<BR> <B>Privilege</B> - select privileges from this list to assign to the group (holding down the control key allows you to select multiple privileges)<BR> <B>Access Method</B> - select the default access method from the provided list that will be assigned to the group<BR> <B>Enabled</B> - ensure that the check box is selected to enable the user group</P></BLOCKQUOTE><H2>Delete Group </H2><P>The Delete a User Group option calls up the URL, &quot;<A HREF="delgroup.asp">delgroup.asp</A>&quot;. The Delete Group data-entry pane provides a list of all added user groups. Use this list to select the user group you wish to delete. </P><P> Clicking the OK button deletes the selected user group then updates the user group list accordingly.</P><H2> Add Access Limit </H2><P>The Add an Access Limit option calls up the URL, &quot;<A HREF="addlimit.asp">addlimit.asp</A>&quot;. The Add Access Limit data entry pane box provides the following fields:</P><BLOCKQUOTE><P> <B>URL</B> - enter the URL path to the page or the directory in this text field<BR><B>Group</B> - select the group (optional) to assign to the URL<BR> <B>Access Method</B> - select the access method from this list to assign to the URL. If a group is selected, this item is ignored. <BR> <B>Secure</B> - select this check box if you require data encryption for this URL. This item will be ignored unless SSL is installed. </P></BLOCKQUOTE><H2>Delete Access Limit </H2><P>The Delete an Access Limit option calls up the URL, &quot;<A HREF="dellimit.asp">dellimit.asp</A>&quot;. The Delete Group data entry pane provides a list of all access limit that have been assigned to this URL. Use this list to select the access limit you wish to delete <B> </B></P><P>Clicking OK deletes the selected access limits then updates the list of existing access limits.</P><H2>Save the User Configuration</H2><P>This option calls up the URL, “<A HREF="savecfg.asp">savecfg.asp</A>”. The Permanently Save the User Configuration data entry pane contains no data fields. Clicking OK saves the current User Management configuration. If the user configuration data had been saved previously, it will be overwritten. Data is saved in the file “umconfig.txt”. </P><H2>Restore the User Configuration</H2><P>This option calls up the URL, &quot;<A HREF="loadcfg.asp">loadcfg.asp</A>&quot;. The Re-load the Permanently Stored User Configuration data entry pane contains no data fields. Clicking OK replaces the current User Management configuration with the user configuration data previously saved. If no data has been saved, then the user configuration data will be deleted. Data is saved in the file &quot;umconfig.txt&quot;.</P><H2>&nbsp; </H2></td></tr></table>
+</BODY></HTML>
diff --git a/cleopatre/application/spidgoahead/web/ws.gif b/cleopatre/application/spidgoahead/web/ws.gif
new file mode 100644
index 0000000000..8dd2d1dc60
--- /dev/null
+++ b/cleopatre/application/spidgoahead/web/ws.gif
Binary files differ
diff --git a/cleopatre/application/spidgoahead/webcomp.c b/cleopatre/application/spidgoahead/webcomp.c
new file mode 100644
index 0000000000..eed3795e97
--- /dev/null
+++ b/cleopatre/application/spidgoahead/webcomp.c
@@ -0,0 +1,189 @@
+/*
+ * webcomp -- Compile web pages into C source
+ *
+ * Copyright (c) GoAhead Software Inc., 1995-2000. All Rights Reserved.
+ *
+ * See the file "license.txt" for usage and redistribution license requirements
+ *
+ * $Id: webcomp.c,v 1.3 2002/10/24 14:44:50 bporter Exp $
+ */
+
+/******************************** Description *********************************/
+
+/*
+ * Usage: webcomp prefix filelist >webrom.c
+ *
+ * filelist is a file containing the pathnames of all web pages
+ * prefix is a path prefix to remove from all the web page pathnames
+ * webrom.c is the resulting C source file to compile and link.
+ */
+
+/********************************* Includes ***********************************/
+
+#include "wsIntrn.h"
+
+/**************************** Forward Declarations ****************************/
+
+static int compile(char_t *fileList, char_t *prefix);
+static void usage();
+
+/*********************************** Code *************************************/
+/*
+ * Main program for webpack test harness
+ */
+
+int gmain(int argc, char_t* argv[])
+{
+ char_t *fileList, *prefix;
+
+ fileList = NULL;
+
+ if (argc != 3) {
+ usage();
+ }
+
+ prefix = argv[1];
+ fileList = argv[2];
+
+ if (compile(fileList, prefix) < 0) {
+ return -1;
+ }
+ return 0;
+}
+
+/******************************************************************************/
+/*
+ * Output usage message
+ */
+
+static void usage()
+{
+ fprintf(stderr, "usage: webcomp prefix filelist >output.c\n");
+ exit(2);
+}
+
+/******************************************************************************/
+/*
+ * Compile the web pages
+ */
+
+static int compile(char_t *fileList, char_t *prefix)
+{
+ gstat_t sbuf;
+ FILE *lp;
+ time_t now;
+ char_t file[FNAMESIZE];
+ char_t *cp, *sl;
+ char buf[512];
+ unsigned char *p;
+ int j, i, len, fd, nFile;
+
+/*
+ * Open list of files
+ */
+ if ((lp = fopen(fileList, "r")) == NULL) {
+ fprintf(stderr, "Can't open file list %s\n", fileList);
+ return -1;
+ }
+
+ time(&now);
+ fprintf(stdout, "/*\n * webrom.c -- Compiled Web Pages\n *\n");
+ fprintf(stdout, " * Compiled by GoAhead WebCompile: %s */\n\n",
+ gctime(&now));
+ fprintf(stdout, "#include \"wsIntrn.h\"\n\n");
+ fprintf(stdout, "#ifndef WEBS_PAGE_ROM\n");
+ fprintf(stdout, "websRomPageIndexType websRomPageIndex[] = {\n");
+ fprintf(stdout, " { 0, 0, 0 },\n};\n");
+ fprintf(stdout, "#else\n");
+
+/*
+ * Open each input file and compile each web page
+ */
+ nFile = 0;
+ while (fgets(file, sizeof(file), lp) != NULL) {
+ if ((p = strchr(file, '\n')) || (p = strchr(file, '\r'))) {
+ *p = '\0';
+ }
+ if (*file == '\0') {
+ continue;
+ }
+ if (gstat(file, &sbuf) == 0 && sbuf.st_mode & S_IFDIR) {
+ continue;
+ }
+ if ((fd = gopen(file, O_RDONLY | O_BINARY)) < 0) {
+ fprintf(stderr, "Can't open file %s\n", file);
+ return -1;
+ }
+ fprintf(stdout, "static unsigned char page_%d[] = {\n", nFile);
+
+ while ((len = read(fd, buf, sizeof(buf))) > 0) {
+ p = buf;
+ for (i = 0; i < len; ) {
+ fprintf(stdout, " ");
+ for (j = 0; p < &buf[len] && j < 16; j++, p++) {
+ fprintf(stdout, "%3d,", *p);
+ }
+ i += j;
+ fprintf(stdout, "\n");
+ }
+ }
+ fprintf(stdout, " 0 };\n\n");
+
+ close(fd);
+ nFile++;
+ }
+ fclose(lp);
+
+/*
+ * Now output the page index
+ */
+ fprintf(stdout, "websRomPageIndexType websRomPageIndex[] = {\n");
+
+ if ((lp = fopen(fileList, "r")) == NULL) {
+ fprintf(stderr, "Can't open file list %s\n", fileList);
+ return -1;
+ }
+ nFile = 0;
+ while (fgets(file, sizeof(file), lp) != NULL) {
+ if ((p = strchr(file, '\n')) || (p = strchr(file, '\r'))) {
+ *p = '\0';
+ }
+ if (*file == '\0') {
+ continue;
+ }
+/*
+ * Remove the prefix and add a leading "/" when we print the path
+ */
+ if (strncmp(file, prefix, gstrlen(prefix)) == 0) {
+ cp = &file[gstrlen(prefix)];
+ } else {
+ cp = file;
+ }
+ while((sl = strchr(file, '\\')) != NULL) {
+ *sl = '/';
+ }
+ if (*cp == '/') {
+ cp++;
+ }
+
+ if (gstat(file, &sbuf) == 0 && sbuf.st_mode & S_IFDIR) {
+ fprintf(stdout, " { T(\"/%s\"), 0, 0 },\n", cp);
+ continue;
+ }
+ fprintf(stdout, " { T(\"/%s\"), page_%d, %d },\n", cp, nFile,
+ sbuf.st_size);
+ nFile++;
+ }
+ fclose(lp);
+
+ fprintf(stdout, " { 0, 0, 0 },\n");
+ fprintf(stdout, "};\n");
+ fprintf(stdout, "#endif /* WEBS_PAGE_ROM */\n");
+
+ fclose(lp);
+ fflush(stdout);
+ return 0;
+}
+
+/******************************************************************************/
+
diff --git a/cleopatre/application/spidgoahead/webrom.c b/cleopatre/application/spidgoahead/webrom.c
new file mode 100644
index 0000000000..66b77b2582
--- /dev/null
+++ b/cleopatre/application/spidgoahead/webrom.c
@@ -0,0 +1,16 @@
+/*
+ * webrom.c -- Compiled Web Pages
+ *
+ * Copyright (c) GoAhead Software Inc., 1995-2000. All Rights Reserved.
+ *
+ * See the file "license.txt" for usage and redistribution license requirements
+ *
+ * $Id: webrom.c,v 1.3 2002/10/24 14:44:50 bporter Exp $
+ */
+
+#include "wsIntrn.h"
+
+websRomPageIndexType websRomPageIndex[] = {
+ { 0, 0, 0 },
+};
+
diff --git a/cleopatre/application/spidgoahead/webs.c b/cleopatre/application/spidgoahead/webs.c
new file mode 100644
index 0000000000..f21f456109
--- /dev/null
+++ b/cleopatre/application/spidgoahead/webs.c
@@ -0,0 +1,3078 @@
+/*
+ * webs.c -- GoAhead Embedded HTTP webs server
+ *
+ * Copyright (c) GoAhead Software Inc., 1995-2000. All Rights Reserved.
+ *
+ * See the file "license.txt" for usage and redistribution license requirements
+ *
+ * $Id: webs.c,v 1.16 2003/04/11 18:02:02 bporter Exp $
+ */
+
+/******************************** Description *********************************/
+
+/*
+ * This module implements an embedded HTTP/1.1 web server. It supports
+ * loadable URL handlers that define the nature of URL processing performed.
+ */
+
+/********************************* Includes ***********************************/
+
+#include "wsIntrn.h"
+#ifdef DIGEST_ACCESS_SUPPORT
+ #include "websda.h"
+#endif
+
+/******************************** Global Data *********************************/
+
+websStatsType websStats; /* Web access stats */
+webs_t *webs; /* Open connection list head */
+sym_fd_t websMime; /* Set of mime types */
+int websMax; /* List size */
+int websPort; /* Listen port for server */
+char_t websHost[64]; /* Host name for the server */
+char_t websIpaddr[64]; /* IP address for the server */
+char_t *websHostUrl = NULL; /* URL to access server */
+char_t *websIpaddrUrl = NULL; /* URL to access server */
+
+/*********************************** Locals ***********************************/
+/*
+ * Standard HTTP error codes
+ */
+
+websErrorType websErrors[] = {
+ { 200, T("Data follows") },
+ { 204, T("No Content") },
+ { 301, T("Redirect") },
+ { 302, T("Redirect") },
+ { 304, T("Use local copy") },
+ { 400, T("Page not found") },
+ { 401, T("Unauthorized") },
+ { 403, T("Forbidden") },
+ { 404, T("Site or Page Not Found") },
+ { 405, T("Access Denied") },
+ { 500, T("Web Error") },
+ { 501, T("Not Implemented") },
+ { 503, T("Site Temporarily Unavailable. Try again.") },
+ { 0, NULL }
+};
+
+#ifdef WEBS_LOG_SUPPORT
+static char_t websLogname[64] = T("log.txt"); /* Log filename */
+static int websLogFd; /* Log file handle */
+#endif
+
+static int websListenSock; /* Listen socket */
+static char_t websRealm[64] = T("GoAhead"); /* Realm name */
+
+static int websOpenCount = 0; /* count of apps using this module */
+
+/**************************** Forward Declarations ****************************/
+
+
+/*static char_t *websErrorMsg(int code);*/
+static int websGetInput(webs_t wp, char_t **ptext, int *nbytes);
+static int websParseFirst(webs_t wp, char_t *text);
+static void websParseRequest(webs_t wp);
+static void websSocketEvent(int sid, int mask, int data);
+static int websGetTimeSinceMark(webs_t wp);
+
+#ifdef WEBS_LOG_SUPPORT
+static void websLog(webs_t wp, int code);
+#endif
+#ifdef WEBS_IF_MODIFIED_SUPPORT
+static time_t dateParse(time_t tip, char_t *cmd);
+#endif
+
+/*********************************** Code *************************************/
+/*
+ * Open the GoAhead WebServer
+ */
+
+int websOpenServer(int port, int retries)
+{
+ websMimeType *mt;
+
+ if (++websOpenCount != 1) {
+ return websPort;
+ }
+
+ a_assert(port > 0);
+ a_assert(retries >= 0);
+
+#ifdef WEBS_PAGE_ROM
+ websRomOpen();
+#endif
+
+ webs = NULL;
+ websMax = 0;
+/*
+ * Create a mime type lookup table for quickly determining the content type
+ */
+ websMime = symOpen(WEBS_SYM_INIT * 4);
+ a_assert(websMime >= 0);
+ for (mt = websMimeList; mt->type; mt++) {
+ symEnter(websMime, mt->ext, valueString(mt->type, 0), 0);
+ }
+
+/*
+ * Open the URL handler module. The caller should create the required
+ * URL handlers after calling this function.
+ */
+ if (websUrlHandlerOpen() < 0) {
+ return -1;
+ }
+ websFormOpen();
+
+#ifdef WEBS_LOG_SUPPORT
+/*
+ * Optional request log support
+ */
+ websLogFd = gopen(websLogname, O_CREAT | O_TRUNC | O_APPEND | O_WRONLY,
+ 0666);
+ a_assert(websLogFd >= 0);
+#endif
+
+ return websOpenListen(port, retries);
+}
+
+/******************************************************************************/
+/*
+ * Close the GoAhead WebServer
+ */
+
+void websCloseServer()
+{
+ webs_t wp;
+ int wid;
+
+ if (--websOpenCount > 0) {
+ return;
+ }
+
+/*
+ * Close the listen handle first then all open connections.
+ */
+ websCloseListen();
+
+/*
+ * Close each open browser connection and free all resources
+ */
+ for (wid = websMax; webs && wid >= 0; wid--) {
+ if ((wp = webs[wid]) == NULL) {
+ continue;
+ }
+ socketCloseConnection(wp->sid);
+ websFree(wp);
+ }
+
+#ifdef WEBS_LOG_SUPPORT
+ if (websLogFd >= 0) {
+ close(websLogFd);
+ websLogFd = -1;
+ }
+#endif
+
+#ifdef WEBS_PAGE_ROM
+ websRomClose();
+#endif
+ symClose(websMime);
+ websFormClose();
+ websUrlHandlerClose();
+}
+
+/******************************************************************************/
+/*
+ * Open the GoAhead WebServer listen port
+ */
+
+int websOpenListen(int port, int retries)
+{
+ int i, orig;
+
+ a_assert(port > 0);
+ a_assert(retries >= 0);
+
+ orig = port;
+/*
+ * Open the webs webs listen port. If we fail, try the next port.
+ */
+ for (i = 0; i <= retries; i++) {
+ websListenSock = socketOpenConnection(NULL, port, websAccept, 0);
+ if (websListenSock >= 0) {
+ break;
+ }
+ port++;
+ }
+ if (i > retries) {
+ error(E_L, E_USER, T("Couldn't open a socket on ports %d - %d"),
+ orig, port - 1);
+ return -1;
+ }
+
+/*
+ * Determine the full URL address to access the home page for this web server
+ */
+ websPort = port;
+ bfreeSafe(B_L, websHostUrl);
+ bfreeSafe(B_L, websIpaddrUrl);
+ websIpaddrUrl = websHostUrl = NULL;
+
+ if (port == 80) {
+ websHostUrl = bstrdup(B_L, websHost);
+ websIpaddrUrl = bstrdup(B_L, websIpaddr);
+ } else {
+ fmtAlloc(&websHostUrl, WEBS_MAX_URL + 80, T("%s:%d"), websHost, port);
+ fmtAlloc(&websIpaddrUrl, WEBS_MAX_URL + 80, T("%s:%d"),
+ websIpaddr, port);
+ }
+ trace(0, T("webs: Listening for HTTP requests at address %s\n"),
+ websIpaddrUrl);
+
+ return port;
+}
+
+/******************************************************************************/
+/*
+ * Close webs listen port
+ */
+
+void websCloseListen()
+{
+ if (websListenSock >= 0) {
+ socketCloseConnection(websListenSock);
+ websListenSock = -1;
+ }
+ bfreeSafe(B_L, websHostUrl);
+ bfreeSafe(B_L, websIpaddrUrl);
+ websIpaddrUrl = websHostUrl = NULL;
+}
+
+/******************************************************************************/
+/*
+ * Accept a connection
+ */
+
+int websAccept(int sid, char *ipaddr, int port, int listenSid)
+{
+ webs_t wp;
+ int wid;
+
+ a_assert(ipaddr && *ipaddr);
+ a_assert(sid >= 0);
+ a_assert(port >= 0);
+
+/*
+ * Allocate a new handle for this accepted connection. This will allocate
+ * a webs_t structure in the webs[] list
+ */
+ if ((wid = websAlloc(sid)) < 0) {
+ return -1;
+ }
+ wp = webs[wid];
+ a_assert(wp);
+ wp->listenSid = listenSid;
+
+ ascToUni(wp->ipaddr, ipaddr, min(sizeof(wp->ipaddr), strlen(ipaddr) + 1));
+
+/*
+ * Check if this is a request from a browser on this system. This is useful
+ * to know for permitting administrative operations only for local access
+ */
+ /*if (gstrcmp(wp->ipaddr, T("127.0.0.1")) == 0 ||
+ gstrcmp(wp->ipaddr, websIpaddr) == 0 ||
+ gstrcmp(wp->ipaddr, websHost) == 0) {
+ wp->flags |= WEBS_LOCAL_REQUEST;
+ }*/
+
+/*
+ * Arrange for websSocketEvent to be called when read data is available
+ */
+ socketCreateHandler(sid, SOCKET_READABLE, websSocketEvent, (int) wp);
+
+/*
+ * Arrange for a timeout to kill hung requests
+ */
+ wp->timeout = emfSchedCallback(WEBS_TIMEOUT, websTimeout, (void *) wp);
+ trace(8, T("webs: accept request\n"));
+ return 0;
+}
+
+/******************************************************************************/
+/*
+ * The webs socket handler. Called in response to I/O. We just pass control
+ * to the relevant read or write handler. A pointer to the webs structure
+ * is passed as an (int) in iwp.
+ */
+
+static void websSocketEvent(int sid, int mask, int iwp)
+{
+ webs_t wp;
+
+ wp = (webs_t) iwp;
+ a_assert(wp);
+
+ if (! websValid(wp)) {
+ return;
+ }
+
+ if (mask & SOCKET_READABLE) {
+ websReadEvent(wp);
+ }
+ if (mask & SOCKET_WRITABLE) {
+ if (websValid(wp) && wp->writeSocket) {
+ (*wp->writeSocket)(wp);
+ }
+ }
+}
+
+/******************************************************************************/
+/*
+ * The webs read handler. This is the primary read event loop. It uses a
+ * state machine to track progress while parsing the HTTP request.
+ * Note: we never block as the socket is always in non-blocking mode.
+ */
+
+void websReadEvent(webs_t wp)
+{
+ char_t *text;
+ int rc, nbytes, len, done, fd;
+
+ a_assert(wp);
+ a_assert(websValid(wp));
+
+ websSetTimeMark(wp);
+
+/*
+ * Read as many lines as possible. socketGets is called to read the header
+ * and socketRead is called to read posted data.
+ */
+ text = NULL;
+ fd = -1;
+ for (done = 0; !done; ) {
+ if (text) {
+ bfree(B_L, text);
+ text = NULL;
+ }
+
+/*
+ * Get more input into "text". Returns 0, if more data is needed
+ * to continue, -1 if finished with the request, or 1 if all
+ * required data is available for current state.
+ */
+ while ((rc = websGetInput(wp, &text, &nbytes)) == 0) {
+ ;
+ }
+
+/*
+ * websGetInput returns -1 if it finishes with the request
+ */
+ if (rc < 0) {
+ break;
+ }
+
+/*
+ * This is the state machine for the web server.
+ */
+ switch(wp->state) {
+ case WEBS_BEGIN:
+/*
+ * Parse the first line of the Http header
+ */
+ if (websParseFirst(wp, text) < 0) {
+ done++;
+ break;
+ }
+ wp->state = WEBS_HEADER;
+ break;
+
+ case WEBS_HEADER:
+/*
+ * Store more of the HTTP header. As we are doing line reads, we
+ * need to separate the lines with '\n'
+ */
+ if (ringqLen(&wp->header) > 0) {
+ ringqPutStr(&wp->header, T("\n"));
+ }
+ ringqPutStr(&wp->header, text);
+ break;
+
+ case WEBS_POST_CLEN:
+/*
+ * POST request with content specified by a content length.
+ * If this is a CGI request, write the data to the cgi stdin.
+ * socketGets was used to get the data and it strips \n's so
+ * add them back in here.
+ */
+#ifndef __NO_CGI_BIN
+ if (wp->flags & WEBS_CGI_REQUEST) {
+ if (fd == -1) {
+ fd = gopen(wp->cgiStdin, O_CREAT | O_WRONLY | O_BINARY,
+ 0666);
+ }
+ gwrite(fd, text, gstrlen(text));
+ /*
+ * NOTE that the above comment is wrong -- if the content length
+ * is set, websGetInput() does NOT use socketGets(), it uses
+ * socketRead(), so the line below that adds an additional newline
+ * is destructive.
+ */
+ /*gwrite(fd, T("\n"), sizeof(char_t));*/
+/*
+ * Line removed as per BUG02488
+ *
+ nbytes += 1;
+ */
+ } else
+#endif
+ if (wp->query) {
+ if (wp->query[0] && !(wp->flags & WEBS_POST_DATA)) {
+/*
+ * Special case where the POST request also had query data
+ * specified in the URL, ie. url?query_data. In this case
+ * the URL query data is separated by a '&' from the posted
+ * query data.
+ */
+ len = gstrlen(wp->query);
+ wp->query = brealloc(B_L, wp->query, (len + gstrlen(text) +
+ 2) * sizeof(char_t));
+ wp->query[len++] = '&';
+ gstrcpy(&wp->query[len], text);
+
+ } else {
+/*
+ * The existing query data came from the POST request so just
+ * append it.
+ */
+ if (text != NULL)
+ {
+ len = gstrlen(wp->query);
+ wp->query = brealloc(B_L, wp->query, (len + gstrlen(text) +
+ 1) * sizeof(char_t));
+ if (wp->query) {
+ gstrcpy(&wp->query[len], text);
+ }
+ }
+ }
+
+ } else {
+ wp->query = bstrdup(B_L, text);
+ }
+/*
+ * Calculate how much more post data is to be read.
+ */
+ wp->flags |= WEBS_POST_DATA;
+ wp->clen -= nbytes;
+ if (wp->clen > 0) {
+ if (nbytes > 0) {
+ break;
+ }
+ done++;
+ break;
+ }
+/*
+ * No more data so process the request, (but be sure to close
+ * the input file first!).
+ */
+ if (fd != -1) {
+ gclose (fd);
+ fd = -1;
+ }
+ websUrlHandlerRequest(wp);
+ done++;
+ break;
+
+ case WEBS_POST:
+/*
+ * POST without content-length specification
+ * If this is a CGI request, write the data to the cgi stdin.
+ * socketGets was used to get the data and it strips \n's so
+ * add them back in here.
+ */
+
+#ifndef __NO_CGI_BIN
+ if (wp->flags & WEBS_CGI_REQUEST) {
+ if (fd == -1) {
+ fd = gopen(wp->cgiStdin, O_CREAT | O_WRONLY | O_BINARY,
+ 0666);
+ }
+ gwrite(fd, text, gstrlen(text));
+ gwrite(fd, T("\n"), sizeof(char_t));
+ } else
+#endif
+ if (wp->query && *wp->query && !(wp->flags & WEBS_POST_DATA)) {
+ len = gstrlen(wp->query);
+ wp->query = brealloc(B_L, wp->query, (len + gstrlen(text) +
+ 2) * sizeof(char_t));
+ if (wp->query) {
+ wp->query[len++] = '&';
+ gstrcpy(&wp->query[len], text);
+ }
+
+ } else {
+ wp->query = bstrdup(B_L, text);
+ }
+ wp->flags |= WEBS_POST_DATA;
+ done++;
+ break;
+
+ default:
+ websError(wp, 404, T("Bad state"));
+ done++;
+ break;
+ }
+ }
+
+ if (fd != -1) {
+ fd = gclose (fd);
+ }
+
+ if (text) {
+ bfree(B_L, text);
+ }
+}
+
+/******************************************************************************/
+/*
+ * Get input from the browser. Return TRUE (!0) if the request has been
+ * handled. Return -1 on errors or if the request has been processed,
+ * 1 if input read, and 0 to instruct the caller to call again for more input.
+ *
+ * Note: socketRead will Return the number of bytes read if successful. This
+ * may be less than the requested "bufsize" and may be zero. It returns -1 for
+ * errors. It returns 0 for EOF. Otherwise it returns the number of bytes
+ * read. Since this may be zero, callers should use socketEof() to
+ * distinguish between this and EOF.
+ */
+
+static int websGetInput(webs_t wp, char_t **ptext, int *pnbytes)
+{
+ char_t *text;
+ char buf[WEBS_SOCKET_BUFSIZ+1];
+ int nbytes, len, clen;
+
+ a_assert(websValid(wp));
+ a_assert(ptext);
+ a_assert(pnbytes);
+
+ *ptext = text = NULL;
+ *pnbytes = 0;
+
+/*
+ * If this request is a POST with a content length, we know the number
+ * of bytes to read so we use socketRead().
+ */
+ if (wp->state == WEBS_POST_CLEN) {
+ len = (wp->clen > WEBS_SOCKET_BUFSIZ) ? WEBS_SOCKET_BUFSIZ : wp->clen;
+ } else {
+ len = 0;
+ }
+
+ if (len > 0) {
+
+#ifdef WEBS_SSL_SUPPORT
+ if (wp->flags & WEBS_SECURE) {
+ nbytes = websSSLRead(wp->wsp, buf, len);
+ } else {
+ nbytes = socketRead(wp->sid, buf, len);
+ }
+#else
+ nbytes = socketRead(wp->sid, buf, len);
+#endif
+ if (nbytes < 0) { /* Error */
+ websDone(wp, 0);
+ return -1;
+
+ } else if (nbytes == 0) { /* EOF or No data available */
+ return -1;
+
+ } else { /* Valid data */
+/*
+ * Convert to UNICODE if necessary. First be sure the string
+ * is NULL terminated.
+ */
+ buf[nbytes] = '\0';
+ if ((text = ballocAscToUni(buf, nbytes)) == NULL) {
+ websError(wp, 503, T("Insufficient memory"));
+ return -1;
+ }
+ }
+
+ } else {
+#ifdef WEBS_SSL_SUPPORT
+ if (wp->flags & WEBS_SECURE) {
+ nbytes = websSSLGets(wp->wsp, &text);
+ } else {
+ nbytes = socketGets(wp->sid, &text);
+ }
+#else
+ nbytes = socketGets(wp->sid, &text);
+#endif
+
+ if (nbytes < 0) {
+ int eof;
+/*
+ * Error, EOF or incomplete
+ */
+#ifdef WEBS_SSL_SUPPORT
+ if (wp->flags & WEBS_SECURE) {
+/*
+ * If state is WEBS_BEGIN and the request is secure, a -1 will
+ * usually indicate SSL negotiation
+ */
+ if (wp->state == WEBS_BEGIN) {
+ eof = 1;
+ } else {
+ eof = websSSLEof(wp->wsp);
+ }
+ } else {
+ eof = socketEof(wp->sid);
+ }
+#else
+ eof = socketEof(wp->sid);
+#endif
+
+ if (eof) {
+/*
+ * If this is a post request without content length, process
+ * the request as we now have all the data. Otherwise just
+ * close the connection.
+ */
+ if (wp->state == WEBS_POST) {
+ websUrlHandlerRequest(wp);
+ } else {
+ websDone(wp, 0);
+ }
+ } else {
+/*
+ * If an error occurred and it wasn't an eof, close the connection
+ */
+#ifdef HP_FIX
+ websDone(wp, 0);
+#endif /*HP_FIX*/
+
+ }
+/*
+ * If state is WEBS_HEADER and the ringq is empty, then this is a
+ * simple request with no additional header fields to process and
+ * no empty line terminator.
+ */
+/*
+ * NOTE: this fix for earlier versions of browsers is troublesome
+ * because if we don't receive the entire header in the first pass
+ * this code assumes we were only expecting a one line header, which
+ * is not necessarily the case. So we weren't processing the whole
+ * header and weren't fufilling requests properly.
+ */
+#ifdef UNUSED
+ if (wp->state == WEBS_HEADER && ringqLen(&wp->header) <= 0) {
+ websParseRequest(wp);
+ websUrlHandlerRequest(wp);
+ }
+#endif
+ return -1;
+
+ } else if (nbytes == 0) {
+ if (wp->state == WEBS_HEADER) {
+/*
+ * Valid empty line, now finished with header
+ */
+ websParseRequest(wp);
+ if (wp->flags & WEBS_POST_REQUEST) {
+ if (wp->flags & WEBS_CLEN) {
+ wp->state = WEBS_POST_CLEN;
+ clen = wp->clen;
+ } else {
+ wp->state = WEBS_POST;
+ clen = 1;
+ }
+ if (clen > 0) {
+/*
+ * Return 0 to get more data.
+ */
+ return 0;
+ }
+ return 1;
+ }
+/*
+ * We've read the header so go and handle the request
+ */
+ websUrlHandlerRequest(wp);
+ }
+ return -1;
+ }
+ }
+ a_assert(text);
+ a_assert(nbytes > 0);
+ *ptext = text;
+ *pnbytes = nbytes;
+ return 1;
+}
+
+/******************************************************************************/
+/*
+ * Parse the first line of a HTTP request
+ */
+
+static int websParseFirst(webs_t wp, char_t *text)
+{
+ char_t *op, *proto, *protoVer, *url, *host, *query, *path, *port, *ext;
+ char_t *buf;
+ int testPort;
+
+ a_assert(websValid(wp));
+ a_assert(text && *text);
+
+/*
+ * Determine the request type: GET, HEAD or POST
+ */
+ op = gstrtok(text, T(" \t"));
+ if (op == NULL || *op == '\0') {
+ websError(wp, 400, T("Bad HTTP request"));
+ return -1;
+ }
+ if (gstrcmp(op, T("GET")) != 0) {
+ if (gstrcmp(op, T("POST")) == 0) {
+ wp->flags |= WEBS_POST_REQUEST;
+ } else if (gstrcmp(op, T("HEAD")) == 0) {
+ wp->flags |= WEBS_HEAD_REQUEST;
+ } else {
+ websError(wp, 400, T("Bad request type"));
+ return -1;
+ }
+ }
+
+/*
+ * Store result in the form (CGI) variable store
+ */
+ websSetVar(wp, T("REQUEST_METHOD"), op);
+
+ url = gstrtok(NULL, T(" \t\n"));
+ if (url == NULL || *url == '\0') {
+ websError(wp, 400, T("Bad HTTP request"));
+ return -1;
+ }
+ protoVer = gstrtok(NULL, T(" \t\n"));
+
+/*
+ * Parse the URL and store all the various URL components. websUrlParse
+ * returns an allocated buffer in buf which we must free. We support both
+ * proxied and non-proxied requests. Proxied requests will have http://host/
+ * at the start of the URL. Non-proxied will just be local path names.
+ */
+ host = path = port = proto = query = ext = NULL;
+ if (websUrlParse(url, &buf, &host, &path, &port, &query, &proto,
+ NULL, &ext) < 0) {
+ websError(wp, 400, T("Bad URL format"));
+ return -1;
+ }
+
+ wp->url = bstrdup(B_L, url);
+
+#ifndef __NO_CGI_BIN
+ if (gstrstr(url, CGI_BIN) != NULL) {
+ wp->flags |= WEBS_CGI_REQUEST;
+ if (wp->flags & WEBS_POST_REQUEST) {
+ wp->cgiStdin = websGetCgiCommName();
+ }
+ }
+#endif
+
+ wp->query = bstrdup(B_L, query);
+ wp->host = bstrdup(B_L, host);
+ wp->path = bstrdup(B_L, path);
+ wp->protocol = bstrdup(B_L, proto);
+ wp->protoVersion = bstrdup(B_L, protoVer);
+
+ if ((testPort = socketGetPort(wp->listenSid)) >= 0) {
+ wp->port = testPort;
+ } else {
+ wp->port = gatoi(port);
+ }
+
+ if (gstrcmp(ext, T(".asp")) == 0) {
+ wp->flags |= WEBS_ASP;
+ }
+ bfree(B_L, buf);
+
+ websUrlType(url, wp->type, TSZ(wp->type));
+
+#ifdef WEBS_PROXY_SUPPORT
+/*
+ * Determine if this is a request for local webs data. If it is not a proxied
+ * request from the browser, we won't see the "http://" or the system name, so
+ * we assume it must be talking to us directly for local webs data.
+ * Note: not fully implemented yet.
+ */
+ if (gstrstr(wp->url, T("http://")) == NULL ||
+ ((gstrcmp(wp->host, T("localhost")) == 0 ||
+ gstrcmp(wp->host, websHost) == 0) && (wp->port == websPort))) {
+ wp->flags |= WEBS_LOCAL_PAGE;
+ if (gstrcmp(wp->path, T("/")) == 0) {
+ wp->flags |= WEBS_HOME_PAGE;
+ }
+ }
+#endif
+
+ ringqFlush(&wp->header);
+ return 0;
+}
+
+/******************************************************************************/
+/*
+ * Parse a full request
+ */
+
+#define isgoodchar(s) (gisalnum((s)) || ((s) == '/') || ((s) == '_') || \
+ ((s) == '.') || ((s) == '-') )
+
+static void websParseRequest(webs_t wp)
+{
+ char_t *authType, *upperKey, *cp, *browser, *lp, *key, *value;
+
+ a_assert(websValid(wp));
+
+/*
+ * Define default CGI values
+ */
+ websSetVar(wp, T("HTTP_AUTHORIZATION"), T(""));
+
+/*
+ * Parse the header and create the Http header keyword variables
+ * We rewrite the header as we go for non-local requests. NOTE: this
+ * modifies the header string directly and tokenizes each line with '\0'.
+ */
+ browser = NULL;
+ for (lp = (char_t*) wp->header.servp; lp && *lp; ) {
+ cp = lp;
+ if ((lp = gstrchr(lp, '\n')) != NULL) {
+ lp++;
+ }
+
+ if ((key = gstrtok(cp, T(": \t\n"))) == NULL) {
+ continue;
+ }
+
+ if ((value = gstrtok(NULL, T("\n"))) == NULL) {
+ value = T("");
+ }
+
+ while (gisspace(*value)) {
+ value++;
+ }
+ strlower(key);
+
+/*
+ * Create a variable (CGI) for each line in the header
+ */
+ fmtAlloc(&upperKey, (gstrlen(key) + 6), T("HTTP_%s"), key);
+ for (cp = upperKey; *cp; cp++) {
+ if (*cp == '-')
+ *cp = '_';
+ }
+ strupper(upperKey);
+ websSetVar(wp, upperKey, value);
+ bfree(B_L, upperKey);
+
+/*
+ * Track the requesting agent (browser) type
+ */
+ if (gstrcmp(key, T("user-agent")) == 0) {
+ wp->userAgent = bstrdup(B_L, value);
+
+/*
+ * Parse the user authorization. ie. password
+ */
+ } else if (gstricmp(key, T("authorization")) == 0) {
+/*
+ * Determine the type of Authorization Request
+ */
+ authType = bstrdup (B_L, value);
+ a_assert (authType);
+/*
+ * Truncate authType at the next non-alpha character
+ */
+ cp = authType;
+ while (gisalpha(*cp)) {
+ cp++;
+ }
+ *cp = '\0';
+
+ wp->authType = bstrdup(B_L, authType);
+ bfree(B_L, authType);
+
+ if (gstricmp(wp->authType, T("basic")) == 0) {
+ char_t userAuth[FNAMESIZE];
+/*
+ * The incoming value is username:password (Basic authentication)
+ */
+ if ((cp = gstrchr(value, ' ')) != NULL) {
+ *cp = '\0';
+ /*
+ * bugfix 5/24/02 -- we were leaking the memory pointed to by
+ * wp->authType that was allocated just before the if()
+ * statement that we are currently in. Thanks to Simon Byholm.
+ */
+ bfree(B_L, wp->authType);
+ wp->authType = bstrdup(B_L, value);
+ websDecode64(userAuth, ++cp, sizeof(userAuth));
+ } else {
+ websDecode64(userAuth, value, sizeof(userAuth));
+ }
+/*
+ * Split userAuth into userid and password
+ */
+ if ((cp = gstrchr(userAuth, ':')) != NULL) {
+ *cp++ = '\0';
+ }
+ if (cp) {
+ wp->userName = bstrdup(B_L, userAuth);
+ wp->password = bstrdup(B_L, cp);
+ } else {
+ wp->userName = bstrdup(B_L, T(""));
+ wp->password = bstrdup(B_L, T(""));
+ }
+/*
+ * Set the flags to indicate digest authentication
+ */
+ wp->flags |= WEBS_AUTH_BASIC;
+ } else {
+#ifdef DIGEST_ACCESS_SUPPORT
+/*
+ * The incoming value is slightly more complicated (Digest)
+ */
+ char_t *np; /* pointer to end of tag name */
+ char_t tp; /* temporary character holding space */
+ char_t *vp; /* pointer to value */
+ char_t *npv; /* pointer to end of value, "next" pointer */
+ char_t tpv; /* temporary character holding space */
+/*
+ * Set the flags to indicate digest authentication
+ */
+ wp->flags |= WEBS_AUTH_DIGEST;
+/*
+ * Move cp to Next word beyond "Digest",
+ * vp to first char after '='.
+ */
+ cp = value;
+ while (isgoodchar(*cp)) {
+ cp++;
+ }
+ while (!isgoodchar(*cp)) {
+ cp++;
+ }
+
+/*
+ * Find beginning of value
+ */
+ vp = gstrchr(cp, '=');
+ while (vp) {
+/*
+ * Zero-terminate tag name
+ */
+ np = cp;
+ while (isgoodchar(*np)) {
+ np++;
+ }
+ tp = *np;
+ *np = 0;
+/*
+ * Advance value pointer to first legit character
+ */
+ vp++;
+ while (!isgoodchar(*vp)) {
+ vp++;
+ }
+/*
+ * Zero-terminate value
+ */
+ npv = vp;
+ while (isgoodchar(*npv)) {
+ npv++;
+ }
+ tpv = *npv;
+ *npv = 0;
+/*
+ * Extract the fields
+ */
+ if (gstricmp(cp, T("username")) == 0) {
+ wp->userName = bstrdup(B_L, vp);
+ } else if (gstricmp(cp, T("response")) == 0) {
+ wp->digest = bstrdup(B_L, vp);
+ } else if (gstricmp(cp, T("opaque")) == 0) {
+ wp->opaque = bstrdup(B_L, vp);
+ } else if (gstricmp(cp, T("uri")) == 0) {
+ wp->uri = bstrdup(B_L, vp);
+ } else if (gstricmp(cp, T("realm")) == 0) {
+ wp->realm = bstrdup(B_L, vp);
+ } else if (gstricmp(cp, T("nonce")) == 0) {
+ wp->nonce = bstrdup(B_L, vp);
+ } else if (gstricmp(cp, T("nc")) == 0) {
+ wp->nc = bstrdup(B_L, vp);
+ } else if (gstricmp(cp, T("cnonce")) == 0) {
+ wp->cnonce = bstrdup(B_L, vp);
+ } else if (gstricmp(cp, T("qop")) == 0) {
+ wp->qop = bstrdup(B_L, vp);
+ }
+/*
+ * Restore tag name and value zero-terminations
+ */
+ *np = tp;
+ *npv = tpv;
+/*
+ * Advance tag name and value pointers
+ */
+ cp = npv;
+ while (*cp && isgoodchar(*cp)) {
+ cp++;
+ }
+ while (*cp && !isgoodchar(*cp)) {
+ cp++;
+ }
+
+ if (*cp) {
+ vp = gstrchr(cp, '=');
+ } else {
+ vp = NULL;
+ }
+ }
+#endif /* DIGEST_ACCESS_SUPPORT */
+ } /* if (gstrcmp(wp->authType)) */
+/*
+ * Parse the content length
+ */
+ } else if (gstrcmp(key, T("content-length")) == 0) {
+ /*
+ * 11 Oct 02 BgP -- The server would crash if an attacker sent a POST
+ * message with a content-length value <= 0. We assume that anyone
+ * sending this is malicious, and the POST is read from the socket,
+ * but it is ignored, and the socket is closed.
+ */
+ wp->clen = gatoi(value);
+ if (wp->clen > 0)
+ {
+ wp->flags |= WEBS_CLEN;
+ websSetVar(wp, T("CONTENT_LENGTH"), value);
+ }
+ else
+ {
+ wp->clen = 0;
+ }
+
+/*
+ * Parse the content type
+ */
+ } else if (gstrcmp(key, T("content-type")) == 0) {
+ websSetVar(wp, T("CONTENT_TYPE"), value);
+
+#ifdef WEBS_KEEP_ALIVE_SUPPORT
+ } else if (gstrcmp(key, T("connection")) == 0) {
+ strlower(value);
+ if (gstrcmp(value, T("keep-alive")) == 0) {
+ wp->flags |= WEBS_KEEP_ALIVE;
+ }
+#endif
+
+#ifdef WEBS_PROXY_SUPPORT
+/*
+ * This may be useful if you wish to keep a local cache of web pages
+ * for proxied requests.
+ */
+ } else if (gstrcmp(key, T("pragma")) == 0) {
+ char_t tmp[256];
+ gstrncpy(tmp, value, TSZ(tmp));
+ strlower(tmp);
+ if (gstrstr(tmp, T("no-cache"))) {
+ wp->flags |= WEBS_DONT_USE_CACHE;
+ }
+#endif /* WEBS_PROXY_SUPPORT */
+
+/*
+ * Store the cookie
+ */
+ } else if (gstrcmp(key, T("cookie")) == 0) {
+ wp->flags |= WEBS_COOKIE;
+ wp->cookie = bstrdup(B_L, value);
+
+#ifdef WEBS_IF_MODIFIED_SUPPORT
+/*
+ * See if the local page has been modified since the browser last
+ * requested this document. If not, just return a 302
+ */
+ } else if (gstrcmp(key, T("if-modified-since")) == 0) {
+ char_t *cmd;
+ time_t tip = 0;
+
+ if ((cp = gstrchr(value, ';')) != NULL) {
+ *cp = '\0';
+ }
+
+ fmtAlloc(&cmd, 64, T("%s"), value);
+
+ if ((wp->since = dateParse(tip, cmd)) != 0) {
+ wp->flags |= WEBS_IF_MODIFIED;
+ }
+
+ bfreeSafe(B_L, cmd);
+#endif /* WEBS_IF_MODIFIED_SUPPORT */
+ }
+ }
+}
+
+/******************************************************************************/
+/*
+ * Set the variable (CGI) environment for this request. Create variables
+ * for all standard CGI variables. Also decode the query string and create
+ * a variable for each name=value pair.
+ */
+
+void websSetEnv(webs_t wp)
+{
+ char_t portBuf[8];
+ char_t *keyword, *value, *valCheck, *valNew;
+
+ a_assert(websValid(wp));
+
+ websSetVar(wp, T("QUERY_STRING"), wp->query);
+ websSetVar(wp, T("GATEWAY_INTERFACE"), T("CGI/1.1"));
+ websSetVar(wp, T("SERVER_HOST"), websHost);
+ websSetVar(wp, T("SERVER_NAME"), websHost);
+ websSetVar(wp, T("SERVER_URL"), websHostUrl);
+ websSetVar(wp, T("REMOTE_HOST"), wp->ipaddr);
+ websSetVar(wp, T("REMOTE_ADDR"), wp->ipaddr);
+ websSetVar(wp, T("PATH_INFO"), wp->path);
+ stritoa(websPort, portBuf, sizeof(portBuf));
+ websSetVar(wp, T("SERVER_PORT"), portBuf);
+ websSetVar(wp, T("SERVER_ADDR"), websIpaddr);
+ fmtAlloc(&value, FNAMESIZE, T("%s/%s"), WEBS_NAME, WEBS_VERSION);
+ websSetVar(wp, T("SERVER_SOFTWARE"), value);
+ bfreeSafe(B_L, value);
+ websSetVar(wp, T("SERVER_PROTOCOL"), wp->protoVersion);
+
+/*
+ * Decode and create an environment query variable for each query keyword.
+ * We split into pairs at each '&', then split pairs at the '='.
+ * Note: we rely on wp->decodedQuery preserving the decoded values in the
+ * symbol table.
+ */
+ wp->decodedQuery = bstrdup(B_L, wp->query);
+ keyword = gstrtok(wp->decodedQuery, T("&"));
+ while (keyword != NULL) {
+ if ((value = gstrchr(keyword, '=')) != NULL) {
+ *value++ = '\0';
+ websDecodeUrl(keyword, keyword, gstrlen(keyword));
+ websDecodeUrl(value, value, gstrlen(value));
+ } else {
+ value = T("");
+ }
+
+ if (*keyword) {
+/*
+ * If keyword has already been set, append the new value to what has
+ * been stored.
+ */
+ if ((valCheck = websGetVar(wp, keyword, NULL)) != 0) {
+ fmtAlloc(&valNew, 256, T("%s %s"), valCheck, value);
+ websSetVar(wp, keyword, valNew);
+ bfreeSafe(B_L, valNew);
+ } else {
+ websSetVar(wp, keyword, value);
+ }
+ }
+ keyword = gstrtok(NULL, T("&"));
+ }
+
+#ifdef EMF
+/*
+ * Add GoAhead Embedded Management Framework defines
+ */
+ websSetEmfEnvironment(wp);
+#endif
+}
+
+/******************************************************************************/
+/*
+ * Define a webs (CGI) variable for this connection. Also create in relevant
+ * scripting engines. Note: the incoming value may be volatile.
+ */
+
+void websSetVar(webs_t wp, char_t *var, char_t *value)
+{
+ value_t v;
+
+ a_assert(websValid(wp));
+
+/*
+ * value_instring will allocate the string if required.
+ */
+ if (value) {
+ v = valueString(value, VALUE_ALLOCATE);
+ } else {
+ v = valueString(T(""), VALUE_ALLOCATE);
+ }
+ symEnter(wp->cgiVars, var, v, 0);
+}
+
+/******************************************************************************/
+/*
+ * Return TRUE if a webs variable exists for this connection.
+ */
+
+int websTestVar(webs_t wp, char_t *var)
+{
+ sym_t *sp;
+
+ a_assert(websValid(wp));
+
+ if (var == NULL || *var == '\0') {
+ return 0;
+ }
+
+ if ((sp = symLookup(wp->cgiVars, var)) == NULL) {
+ return 0;
+ }
+ return 1;
+}
+
+/******************************************************************************/
+/*
+ * Get a webs variable but return a default value if string not found.
+ * Note, defaultGetValue can be NULL to permit testing existence.
+ */
+
+char_t *websGetVar(webs_t wp, char_t *var, char_t *defaultGetValue)
+{
+ sym_t *sp;
+
+ a_assert(websValid(wp));
+ a_assert(var && *var);
+
+ if ((sp = symLookup(wp->cgiVars, var)) != NULL) {
+ a_assert(sp->content.type == string);
+ if (sp->content.value.string) {
+ return sp->content.value.string;
+ } else {
+ return T("");
+ }
+ }
+ return defaultGetValue;
+}
+
+/******************************************************************************/
+/*
+ * Return TRUE if a webs variable is set to a given value
+ */
+
+int websCompareVar(webs_t wp, char_t *var, char_t *value)
+{
+ a_assert(websValid(wp));
+ a_assert(var && *var);
+
+ if (gstrcmp(value, websGetVar(wp, var, T(" __UNDEF__ "))) == 0) {
+ return 1;
+ }
+ return 0;
+}
+
+/******************************************************************************/
+/*
+ * Cancel the request timeout. Note may be called multiple times.
+ */
+
+void websTimeoutCancel(webs_t wp)
+{
+ a_assert(websValid(wp));
+
+ if (wp->timeout >= 0) {
+ emfUnschedCallback(wp->timeout);
+ wp->timeout = -1;
+ }
+}
+
+/******************************************************************************/
+/*
+ * Output a HTTP response back to the browser. If redirect is set to a
+ * URL, the browser will be sent to this location.
+ */
+
+void websResponse(webs_t wp, int code, char_t *message, char_t *redirect)
+{
+ char_t *date;
+
+ a_assert(websValid(wp));
+
+/*
+ * IE3.0 needs no Keep Alive for some return codes.
+ */
+ wp->flags &= ~WEBS_KEEP_ALIVE;
+
+/*
+ * Only output the header if a header has not already been output.
+ */
+ if ( !(wp->flags & WEBS_HEADER_DONE)) {
+ wp->flags |= WEBS_HEADER_DONE;
+/*
+ * Redirect behaves much better when sent with HTTP/1.0
+ */
+ if (redirect != NULL) {
+ websWrite(wp, T("HTTP/1.0 %d %s\r\n"), code, websErrorMsg(code));
+ } else {
+ websWrite(wp, T("HTTP/1.1 %d %s\r\n"), code, websErrorMsg(code));
+ }
+
+/*
+ * By license terms the following line of code must not be modified.
+ */
+ websWrite(wp, T("Server: %s\r\n"), WEBS_NAME);
+
+/*
+ * Timestamp/Date is usually the next to go
+ */
+ if ((date = websGetDateString(NULL)) != NULL) {
+ websWrite(wp, T("Date: %s\r\n"), date);
+ bfree(B_L, date);
+ }
+/*
+ * If authentication is required, send the auth header info
+ */
+ if (code == 401) {
+ if (!(wp->flags & WEBS_AUTH_DIGEST)) {
+ websWrite(wp, T("WWW-Authenticate: Basic realm=\"%s\"\r\n"),
+ websGetRealm());
+#ifdef DIGEST_ACCESS_SUPPORT
+ } else {
+ char_t *nonce, *opaque;
+
+ /* $$$ before... (note commas instead of semicolons...)
+ nonce = websCalcNonce(wp),
+ opaque = websCalcOpaque(wp),
+ $$$ after */
+ nonce = websCalcNonce(wp);
+ opaque = websCalcOpaque(wp);
+ /* ...$$$ end */
+ websWrite(wp,
+ T("WWW-Authenticate: Digest realm=\"%s\", domain=\"%s\",")
+ T("qop=\"%s\", nonce=\"%s\", opaque=\"%s\",")
+ T("algorithm=\"%s\", stale=\"%s\"\r\n"),
+ websGetRealm(),
+ websGetHostUrl(),
+ T("auth"),
+ nonce,
+ opaque, T("MD5"), T("FALSE"));
+ bfree(B_L, nonce);
+ bfree(B_L, opaque);
+#endif
+ }
+ }
+
+ if (wp->flags & WEBS_KEEP_ALIVE) {
+ websWrite(wp, T("Connection: keep-alive\r\n"));
+ }
+
+ websWrite(wp, T("Pragma: no-cache\r\nCache-Control: no-cache\r\n"));
+ websWrite(wp, T("Content-Type: text/html\r\n"));
+/*
+ * We don't do a string length here as the message may be multi-line.
+ * Ie. <CR><LF> will count as only one and we will have a content-length
+ * that is too short.
+ *
+ * websWrite(wp, T("Content-Length: %s\r\n"), message);
+ */
+ if (redirect) {
+ websWrite(wp, T("Location: %s\r\n"), redirect);
+ }
+ websWrite(wp, T("\r\n"));
+ }
+
+/*
+ * If the browser didn't do a HEAD only request, send the message as well.
+ */
+ if ((wp->flags & WEBS_HEAD_REQUEST) == 0 && message && *message) {
+ websWrite(wp, T("%s\r\n"), message);
+ }
+ websDone(wp, code);
+}
+
+/******************************************************************************/
+/*
+ * Redirect the user to another webs page
+ */
+
+void websRedirect(webs_t wp, char_t *url)
+{
+ char_t *msgbuf, *urlbuf, *redirectFmt;
+
+ a_assert(websValid(wp));
+ a_assert(url);
+
+ websStats.redirects++;
+ msgbuf = urlbuf = NULL;
+
+/*
+ * Some browsers require a http://host qualified URL for redirection
+ */
+ if (gstrstr(url, T("http://")) == NULL) {
+ if (*url == '/') {
+ url++;
+ }
+
+ redirectFmt = T("http://%s/%s");
+
+#ifdef WEBS_SSL_SUPPORT
+ if (wp->flags & WEBS_SECURE) {
+ redirectFmt = T("https://%s/%s");
+ }
+#endif
+
+ fmtAlloc(&urlbuf, WEBS_MAX_URL + 80, redirectFmt,
+ websGetVar(wp, T("HTTP_HOST"), websHostUrl), url);
+ url = urlbuf;
+ }
+
+/*
+ * Add human readable message for completeness. Should not be required.
+ */
+ fmtAlloc(&msgbuf, WEBS_MAX_URL + 80,
+ T("<html><head></head><body>\r\n\
+ This document has moved to a new <a href=\"%s\">location</a>.\r\n\
+ Please update your documents to reflect the new location.\r\n\
+ </body></html>\r\n"), url);
+
+ websResponse(wp, 302, msgbuf, url);
+
+ bfreeSafe(B_L, msgbuf);
+ bfreeSafe(B_L, urlbuf);
+}
+
+
+/*
+ * websSafeUrl -- utility function to clean up URLs that will be printed by
+ * the websError() function, below. To prevent problems with the 'cross-site
+ * scripting exploit', where attackers request an URL containing embedded
+ * JavaScript code, we replace all '<' and '>' characters with HTML entities
+ * so that the user's browser will not interpret the URL as JavaScript.
+ */
+
+#define kLt '<'
+#define kLessThan T("&lt;")
+#define kGt '>'
+#define kGreaterThan T("&gt;")
+
+
+
+
+static int charCount(const char_t* str, char_t ch)
+{
+ int count = 0;
+ char_t* p = (char_t*) str;
+
+ if (NULL == str)
+ {
+ return 0;
+ }
+
+ while (1)
+ {
+ p = gstrchr(p, ch);
+ if (NULL == p)
+ {
+ break;
+ }
+ /*
+ * increment the count, and begin looking at the next character
+ */
+ ++count;
+ ++p;
+ }
+ return count;
+}
+
+
+
+static char_t* websSafeUrl(const char_t* url)
+{
+
+ int ltCount = charCount(url, kLt);
+ int gtCount = charCount(url, kGt);
+ int safeLen = 0;
+ char_t* safeUrl = NULL;
+ char_t* src = NULL;
+ char_t* dest = NULL;
+
+ if (NULL != url)
+ {
+ safeLen = gstrlen(url);
+ if (ltCount == 0 && gtCount == 0)
+ {
+ safeUrl = bstrdup(B_L, (char_t*) url);
+ }
+ else
+ {
+ safeLen += (ltCount * 4);
+ safeLen += (gtCount * 4);
+
+ safeUrl = balloc(B_L, safeLen);
+ if (safeUrl != NULL)
+ {
+ src = (char_t*) url;
+ dest = safeUrl;
+ while (*src)
+ {
+ if (*src == kLt)
+ {
+ gstrcpy(dest, kLessThan);
+ dest += gstrlen(kLessThan);
+ }
+ else if (*src == kGt)
+ {
+ gstrcpy(dest, kGreaterThan);
+ dest += gstrlen(kGreaterThan);
+ }
+ else
+ {
+ *dest++ = *src;
+ }
+ ++src;
+ }
+ /* don't forget to terminate the string...*/
+ *dest = '\0';
+ }
+ }
+ }
+ return safeUrl;
+}
+
+
+/******************************************************************************/
+/*
+ * Output an error message and cleanup
+ */
+
+#ifdef qRichErrorPage
+extern int dmfRichError(webs_t wp, int code, char_t* userMsg);
+#endif
+void websError(webs_t wp, int code, char_t *fmt, ...)
+{
+ va_list args;
+ char_t *msg, *userMsg, *buf;
+ char_t* safeUrl = NULL;
+ char_t* safeMsg = NULL;
+#ifdef qRichErrorPage
+ static int reEntry = 0;
+ int errorOk;
+#endif
+
+ a_assert(websValid(wp));
+ a_assert(fmt);
+
+ websStats.errors++;
+
+ /* remove any dangerous characters in the url, and replace the string in the
+ * wp structure. The webs_t cleanup code will free this memory for us.
+ */
+ safeUrl = websSafeUrl(wp->url);
+ bfreeSafe(B_L, wp->url);
+ wp->url = safeUrl;
+
+ va_start(args, fmt);
+ userMsg = NULL;
+ fmtValloc(&userMsg, WEBS_BUFSIZE, fmt, args);
+ va_end(args);
+ safeMsg = websSafeUrl(userMsg);
+ bfreeSafe(B_L, userMsg);
+ userMsg = safeMsg;
+ safeMsg = NULL;
+
+
+
+#ifdef qRichErrorPage
+ if (!reEntry)
+ {
+ /*
+ * The dmfRichError function that we're about to call may very well call
+ * websError() as part of its work. If that happens, we do NOT want to
+ * get into a never-ending recursive call chain. When we get back here
+ * in a call from inside dmfRichError(), we check to see if we're
+ * already trying to call dmfRichError. If we are, we just revert to the
+ * old non-rich behavior and display a black on white error page.
+ */
+
+ reEntry = 1;
+ errorOk = dmfRichError(wp, code, userMsg);
+ reEntry = 0;
+ if (errorOk)
+ {
+ bfreeSafe(B_L, userMsg);
+ return;
+ }
+ /* ...else we need to fall through and execute the simple error page. */
+ }
+ /* implicit else... */
+#endif
+
+ msg = T("<html><head><title>Document Error: %s</title></head>\r\n\
+ <body><h2>Access Error: %s</h2>\r\n\
+ <p>%s</p></body></html>\r\n");
+/*
+ * Ensure we have plenty of room
+ */
+
+ buf = NULL;
+ fmtAlloc(&buf, WEBS_BUFSIZE, msg, websErrorMsg(code),
+ websErrorMsg(code), userMsg);
+
+ websResponse(wp, code, buf, NULL);
+ bfreeSafe(B_L, buf);
+ bfreeSafe(B_L, userMsg);
+}
+
+/******************************************************************************/
+/*
+ * Return the error message for a given code
+ */
+
+/*static char_t *websErrorMsg(int code)*/
+char_t *websErrorMsg(int code)
+{
+ websErrorType *ep;
+
+ for (ep = websErrors; ep->code; ep++) {
+ if (code == ep->code) {
+ return ep->msg;
+ }
+ }
+ a_assert(0);
+ return T("");
+}
+
+/******************************************************************************/
+/*
+ * Do formatted output to the browser. This is the public ASP and form
+ * write procedure.
+ */
+
+int websWrite(webs_t wp, char_t *fmt, ...)
+{
+ va_list vargs;
+ char_t *buf;
+ int rc;
+
+ a_assert(websValid(wp));
+
+ va_start(vargs, fmt);
+
+ buf = NULL;
+ rc = 0;
+
+ if (fmtValloc(&buf, WEBS_BUFSIZE, fmt, vargs) >= WEBS_BUFSIZE) {
+ trace(0, T("webs: websWrite lost data, buffer overflow\n"));
+ }
+
+ va_end(vargs);
+ a_assert(buf);
+ if (buf) {
+ rc = websWriteBlock(wp, buf, gstrlen(buf));
+ bfree(B_L, buf);
+ }
+ return rc;
+}
+
+/******************************************************************************/
+/*
+ * Write a block of data of length "nChars" to the user's browser. Public
+ * write block procedure. If unicode is turned on this function expects
+ * buf to be a unicode string and it converts it to ASCII before writing.
+ * See websWriteDataNonBlock to always write binary or ASCII data with no
+ * unicode conversion. This returns the number of char_t's processed.
+ * It spins until nChars are flushed to the socket. For non-blocking
+ * behavior, use websWriteDataNonBlock.
+ */
+
+int websWriteBlock(webs_t wp, char_t *buf, int nChars)
+{
+ int len, done;
+ char *asciiBuf, *pBuf;
+
+ a_assert(wp);
+ a_assert(websValid(wp));
+ a_assert(buf);
+ a_assert(nChars >= 0);
+
+ done = len = 0;
+
+/*
+ * ballocUniToAsc will convert Unicode to strings to Ascii. If Unicode is
+ * not turned on then ballocUniToAsc will not do the conversion.
+ */
+ pBuf = asciiBuf = ballocUniToAsc(buf, nChars);
+
+ while (nChars > 0) {
+#ifdef WEBS_SSL_SUPPORT
+ if (wp->flags & WEBS_SECURE) {
+ if ((len = websSSLWrite(wp->wsp, pBuf, nChars)) < 0) {
+ bfree(B_L, asciiBuf);
+ return -1;
+ }
+ websSSLFlush(wp->wsp);
+ } else {
+ if ((len = socketWrite(wp->sid, pBuf, nChars)) < 0) {
+ bfree(B_L, asciiBuf);
+ return -1;
+ }
+ socketFlush(wp->sid);
+ }
+#else /* ! WEBS_SSL_SUPPORT */
+ if ((len = socketWrite(wp->sid, pBuf, nChars)) < 0) {
+ bfree(B_L, asciiBuf);
+ return -1;
+ }
+ socketFlush(wp->sid);
+#endif /* WEBS_SSL_SUPPORT */
+ nChars -= len;
+ pBuf += len;
+ done += len;
+ }
+
+ bfree(B_L, asciiBuf);
+ return done;
+}
+
+/******************************************************************************/
+/*
+ * Write a block of data of length "nChars" to the user's browser. Same as
+ * websWriteBlock except that it expects straight ASCII or binary and does no
+ * unicode conversion before writing the data. If the socket cannot hold all
+ * the data, it will return the number of bytes flushed to the socket before
+ * it would have blocked. This returns the number of chars processed or -1
+ * if socketWrite fails.
+ */
+
+int websWriteDataNonBlock(webs_t wp, char *buf, int nChars)
+{
+ int r;
+
+ a_assert(wp);
+ a_assert(websValid(wp));
+ a_assert(buf);
+ a_assert(nChars >= 0);
+
+#ifdef WEBS_SSL_SUPPORT
+ if (wp->flags & WEBS_SECURE) {
+ r = websSSLWrite(wp->wsp, buf, nChars);
+ websSSLFlush(wp->wsp);
+ } else {
+ r = socketWrite(wp->sid, buf, nChars);
+ socketFlush(wp->sid);
+ }
+#else
+ r = socketWrite(wp->sid, buf, nChars);
+ socketFlush(wp->sid);
+#endif
+
+ return r;
+}
+
+/******************************************************************************/
+/*
+ * Decode a URL (or part thereof). Allows insitu decoding.
+ */
+
+void websDecodeUrl(char_t *decoded, char_t *token, int len)
+{
+ char_t *ip, *op;
+ int num, i, c;
+
+ a_assert(decoded);
+ a_assert(token);
+
+ op = decoded;
+ for (ip = token; *ip && len > 0; ip++, op++) {
+ if (*ip == '+') {
+ *op = ' ';
+ } else if (*ip == '%' && gisxdigit(ip[1]) && gisxdigit(ip[2])) {
+
+/*
+ * Convert %nn to a single character
+ */
+ ip++;
+ for (i = 0, num = 0; i < 2; i++, ip++) {
+ c = tolower(*ip);
+ if (c >= 'a' && c <= 'f') {
+ num = (num * 16) + 10 + c - 'a';
+ } else {
+ num = (num * 16) + c - '0';
+ }
+ }
+ *op = (char_t) num;
+ ip--;
+
+ } else {
+ *op = *ip;
+ }
+ len--;
+ }
+ *op = '\0';
+}
+
+/******************************************************************************/
+#ifdef WEBS_LOG_SUPPORT
+/*
+ * Output a log message
+ */
+
+static void websLog(webs_t wp, int code)
+{
+ char_t *buf;
+ char *abuf;
+ int len;
+#define qAnlLog 1
+#if (defined(qAnlLog) && !defined(CE))
+ time_t timer;
+ char_t* newLine = NULL;
+ char_t* timeStr = NULL;
+#endif
+ a_assert(websValid(wp));
+
+ buf = NULL;
+
+#if (defined(qAnlLog) && !defined(CE))
+ time(&timer);
+ timeStr = ctime(&timer);
+ newLine = gstrchr(timeStr, '\n');
+ if (newLine)
+ {
+ *newLine = '\0';
+ }
+ fmtAlloc(&buf, WEBS_MAX_URL + 80, T("%s\t%s\t%s\tcode = %d\n"),
+ timeStr, wp->ipaddr, wp->url, code);
+#else
+ fmtAlloc(&buf, WEBS_MAX_URL + 80, T("%d %s %d %d\n"), time(0),
+ wp->url, code, wp->written);
+#endif
+ len = gstrlen(buf);
+ abuf = ballocUniToAsc(buf, len+1);
+ write(websLogFd, abuf, len);
+ bfreeSafe(B_L, buf);
+ bfreeSafe(B_L, abuf);
+}
+
+#endif /* WEBS_LOG_SUPPORT */
+
+/******************************************************************************/
+/*
+ * Request timeout. The timeout triggers if we have not read any data from
+ * the users browser in the last WEBS_TIMEOUT period. If we have heard from
+ * the browser, simply re-issue the timeout.
+ */
+
+void websTimeout(void *arg, int id)
+{
+ webs_t wp;
+ int delay, tm;
+
+ wp = (webs_t) arg;
+ a_assert(websValid(wp));
+
+ tm = websGetTimeSinceMark(wp) * 1000;
+ if (tm >= WEBS_TIMEOUT) {
+ websStats.timeouts++;
+ emfUnschedCallback(id);
+
+/*
+ * Clear the timeout id
+ */
+ wp->timeout = -1;
+ websDone(wp, 404);
+ } else {
+ delay = WEBS_TIMEOUT - tm;
+ a_assert(delay > 0);
+ emfReschedCallback(id, delay);
+ }
+}
+
+/******************************************************************************/
+/*
+ * Called when the request is done.
+ */
+
+void websDone(webs_t wp, int code)
+{
+ a_assert(websValid(wp));
+
+/*
+ * Disable socket handler in case keep alive set.
+ */
+ socketDeleteHandler(wp->sid);
+
+ if (code != 200) {
+ wp->flags &= ~WEBS_KEEP_ALIVE;
+ }
+
+#ifdef WEBS_PROXY_SUPPORT
+ if (! (wp->flags & WEBS_LOCAL_PAGE)) {
+ websStats.activeNetRequests--;
+ }
+#endif
+
+#ifdef WEBS_LOG_SUPPORT
+ if (! (wp->flags & WEBS_REQUEST_DONE)) {
+ websLog(wp, code);
+ }
+#endif
+
+/*
+ * Close any opened document by a handler
+ */
+ websPageClose(wp);
+
+/*
+ * Exit if secure.
+ */
+#ifdef WEBS_SSL_SUPPORT
+ if (wp->flags & WEBS_SECURE) {
+ websTimeoutCancel(wp);
+ websSSLFlush(wp->wsp);
+ socketCloseConnection(wp->sid);
+ websFree(wp);
+ return;
+ }
+#endif
+
+/*
+ * If using Keep Alive (HTTP/1.1) we keep the socket open for a period
+ * while waiting for another request on the socket.
+ */
+ if (wp->flags & WEBS_KEEP_ALIVE) {
+ if (socketFlush(wp->sid) == 0) {
+ wp->state = WEBS_BEGIN;
+ wp->flags |= WEBS_REQUEST_DONE;
+ if (wp->header.buf) {
+ ringqFlush(&wp->header);
+ }
+ socketCreateHandler(wp->sid, SOCKET_READABLE, websSocketEvent,
+ (int) wp);
+ websTimeoutCancel(wp);
+ wp->timeout = emfSchedCallback(WEBS_TIMEOUT, websTimeout,
+ (void *) wp);
+ return;
+ }
+ } else {
+ websTimeoutCancel(wp);
+ socketSetBlock(wp->sid, 1);
+ socketFlush(wp->sid);
+ socketCloseConnection(wp->sid);
+ }
+ websFree(wp);
+}
+
+/******************************************************************************/
+/*
+ * Allocate a new webs structure
+ */
+
+int websAlloc(int sid)
+{
+ webs_t wp;
+ int wid;
+
+/*
+ * Allocate a new handle for this connection
+ */
+ if ((wid = hAllocEntry((void***) &webs, &websMax,
+ sizeof(struct websRec))) < 0) {
+ return -1;
+ }
+ wp = webs[wid];
+
+ wp->wid = wid;
+ wp->sid = sid;
+ wp->state = WEBS_BEGIN;
+ wp->docfd = -1;
+ wp->timeout = -1;
+ wp->dir = NULL;
+ wp->authType = NULL;
+ wp->protocol = NULL;
+ wp->protoVersion = NULL;
+ wp->password = NULL;
+ wp->userName = NULL;
+#ifdef DIGEST_ACCESS_SUPPORT
+ wp->realm = NULL;
+ wp->nonce = NULL;
+ wp->digest = NULL;
+ wp->uri = NULL;
+ wp->opaque = NULL;
+ wp->nc = NULL;
+ wp->cnonce = NULL;
+ wp->qop = NULL;
+#endif
+#ifdef WEBS_SSL_SUPPORT
+ wp->wsp = NULL;
+#endif
+
+ ringqOpen(&wp->header, WEBS_HEADER_BUFINC, WEBS_MAX_HEADER);
+
+/*
+ * Create storage for the CGI variables. We supply the symbol tables for
+ * both the CGI variables and for the global functions. The function table
+ * is common to all webs instances (ie. all browsers)
+ */
+ wp->cgiVars = symOpen(WEBS_SYM_INIT);
+
+ return wid;
+}
+
+/******************************************************************************/
+/*
+ * Free a webs structure
+ */
+
+void websFree(webs_t wp)
+{
+ a_assert(websValid(wp));
+
+ if (wp->path)
+ bfree(B_L, wp->path);
+ if (wp->url)
+ bfree(B_L, wp->url);
+ if (wp->host)
+ bfree(B_L, wp->host);
+ if (wp->lpath)
+ bfree(B_L, wp->lpath);
+ if (wp->query)
+ bfree(B_L, wp->query);
+ if (wp->decodedQuery)
+ bfree(B_L, wp->decodedQuery);
+ if (wp->authType)
+ bfree(B_L, wp->authType);
+ if (wp->password)
+ bfree(B_L, wp->password);
+ if (wp->userName)
+ bfree(B_L, wp->userName);
+ if (wp->cookie)
+ bfree(B_L, wp->cookie);
+ if (wp->userAgent)
+ bfree(B_L, wp->userAgent);
+ if (wp->dir)
+ bfree(B_L, wp->dir);
+ if (wp->protocol)
+ bfree(B_L, wp->protocol);
+ if (wp->protoVersion)
+ bfree(B_L, wp->protoVersion);
+ if (wp->cgiStdin)
+ bfree(B_L, wp->cgiStdin);
+
+
+#ifdef DIGEST_ACCESS_SUPPORT
+ if (wp->realm)
+ bfree(B_L, wp->realm);
+ if (wp->uri)
+ bfree(B_L, wp->uri);
+ if (wp->digest)
+ bfree(B_L, wp->digest);
+ if (wp->opaque)
+ bfree(B_L, wp->opaque);
+ if (wp->nonce)
+ bfree(B_L, wp->nonce);
+ if (wp->nc)
+ bfree(B_L, wp->nc);
+ if (wp->cnonce)
+ bfree(B_L, wp->cnonce);
+ if (wp->qop)
+ bfree(B_L, wp->qop);
+#endif
+#ifdef WEBS_SSL_SUPPORT
+ websSSLFree(wp->wsp);
+#endif
+ symClose(wp->cgiVars);
+
+ if (wp->header.buf) {
+ ringqClose(&wp->header);
+ }
+
+ websMax = hFree((void***) &webs, wp->wid);
+ bfree(B_L, wp);
+ a_assert(websMax >= 0);
+}
+
+/******************************************************************************/
+/*
+ * Return the server address
+ */
+
+char_t *websGetHost()
+{
+ return websHost;
+}
+
+/******************************************************************************/
+/*
+ * Return the the url to access the server. (ip address)
+ */
+
+char_t *websGetIpaddrUrl()
+{
+ return websIpaddrUrl;
+}
+
+/******************************************************************************/
+/*
+ * Return the server address
+ */
+
+char_t *websGetHostUrl()
+{
+ return websHostUrl;
+}
+
+/******************************************************************************/
+/*
+ * Return the listen port
+ */
+
+int websGetPort()
+{
+ return websPort;
+}
+
+/******************************************************************************/
+/*
+ * Get the number of bytes to write
+ */
+
+int websGetRequestBytes(webs_t wp)
+{
+ a_assert(websValid(wp));
+
+ return wp->numbytes;
+}
+
+/******************************************************************************/
+/*
+ * Get the directory for this request
+ */
+
+char_t *websGetRequestDir(webs_t wp)
+{
+ a_assert(websValid(wp));
+
+ if (wp->dir == NULL) {
+ return T("");
+ }
+
+ return wp->dir;
+}
+
+/******************************************************************************/
+/*
+ * Get the flags for this request
+ */
+
+int websGetRequestFlags(webs_t wp)
+{
+ a_assert(websValid(wp));
+
+ return wp->flags;
+}
+
+/******************************************************************************/
+/*
+ * Return the IP address
+ */
+
+char_t *websGetRequestIpaddr(webs_t wp)
+{
+ a_assert(websValid(wp));
+
+ return wp->ipaddr;
+}
+
+/******************************************************************************/
+/*
+ * Set the local path for the request
+ */
+
+char_t *websGetRequestLpath(webs_t wp)
+{
+ a_assert(websValid(wp));
+
+#ifdef WEBS_PAGE_ROM
+ return wp->path;
+#else
+ return wp->lpath;
+#endif
+}
+
+/******************************************************************************/
+/*
+ * Get the path for this request
+ */
+
+char_t *websGetRequestPath(webs_t wp)
+{
+ a_assert(websValid(wp));
+
+ if (wp->path == NULL) {
+ return T("");
+ }
+
+ return wp->path;
+}
+
+/******************************************************************************/
+/*
+ * Return the password
+ */
+
+char_t *websGetRequestPassword(webs_t wp)
+{
+ a_assert(websValid(wp));
+
+ return wp->password;
+}
+
+/******************************************************************************/
+/*
+ * Return the request type
+ */
+
+char_t *websGetRequestType(webs_t wp)
+{
+ a_assert(websValid(wp));
+
+ return wp->type;
+}
+
+/******************************************************************************/
+/*
+ * Return the username
+ */
+
+char_t *websGetRequestUserName(webs_t wp)
+{
+ a_assert(websValid(wp));
+
+ return wp->userName;
+}
+
+/******************************************************************************/
+/*
+ * Get the number of bytes written
+ */
+
+int websGetRequestWritten(webs_t wp)
+{
+ a_assert(websValid(wp));
+
+ return wp->written;
+}
+
+/******************************************************************************/
+/*
+ * Set the hostname
+ */
+
+void websSetHost(char_t *host)
+{
+ gstrncpy(websHost, host, TSZ(websHost));
+}
+
+/******************************************************************************/
+/*
+ * Set the host URL
+ */
+
+void websSetHostUrl(char_t *url)
+{
+ a_assert(url && *url);
+
+ bfreeSafe(B_L, websHostUrl);
+ websHostUrl = gstrdup(B_L, url);
+}
+
+/******************************************************************************/
+/*
+ * Set the IP address
+ */
+
+void websSetIpaddr(char_t *ipaddr)
+{
+ a_assert(ipaddr && *ipaddr);
+
+ gstrncpy(websIpaddr, ipaddr, TSZ(websIpaddr));
+}
+
+/******************************************************************************/
+/*
+ * Set the number of bytes to write
+ */
+
+void websSetRequestBytes(webs_t wp, int bytes)
+{
+ a_assert(websValid(wp));
+ a_assert(bytes >= 0);
+
+ wp->numbytes = bytes;
+}
+
+/******************************************************************************/
+/*
+ * Set the flags for this request
+ */
+
+void websSetRequestFlags(webs_t wp, int flags)
+{
+ a_assert(websValid(wp));
+
+ wp->flags = flags;
+}
+
+/******************************************************************************/
+/*
+ * Set the local path for the request
+ */
+
+void websSetRequestLpath(webs_t wp, char_t *lpath)
+{
+ a_assert(websValid(wp));
+ a_assert(lpath && *lpath);
+
+ if (wp->lpath) {
+ bfree(B_L, wp->lpath);
+ }
+ wp->lpath = bstrdup(B_L, lpath);
+ websSetVar(wp, T("PATH_TRANSLATED"), wp->lpath);
+}
+
+/******************************************************************************/
+/*
+ * Update the URL path and the directory containing the web page
+ */
+
+void websSetRequestPath(webs_t wp, char_t *dir, char_t *path)
+{
+ char_t *tmp;
+
+ a_assert(websValid(wp));
+
+ if (dir) {
+ tmp = wp->dir;
+ wp->dir = bstrdup(B_L, dir);
+ if (tmp) {
+ bfree(B_L, tmp);
+ }
+ }
+ if (path) {
+ tmp = wp->path;
+ wp->path = bstrdup(B_L, path);
+ websSetVar(wp, T("PATH_INFO"), wp->path);
+ if (tmp) {
+ bfree(B_L, tmp);
+ }
+ }
+}
+
+/******************************************************************************/
+/*
+ * Set the Write handler for this socket
+ */
+
+void websSetRequestSocketHandler(webs_t wp, int mask, void (*fn)(webs_t wp))
+{
+ a_assert(websValid(wp));
+
+ wp->writeSocket = fn;
+ socketCreateHandler(wp->sid, SOCKET_WRITABLE, websSocketEvent, (int) wp);
+}
+
+/******************************************************************************/
+/*
+ * Set the number of bytes written
+ */
+
+void websSetRequestWritten(webs_t wp, int written)
+{
+ a_assert(websValid(wp));
+
+ wp->written = written;
+}
+
+/******************************************************************************/
+/*
+ * Reurn true if the webs handle is valid
+ */
+
+int websValid(webs_t wp)
+{
+ int wid;
+
+ for (wid = 0; wid < websMax; wid++) {
+ if (wp == webs[wid]) {
+ return 1;
+ }
+ }
+ return 0;
+}
+
+/******************************************************************************/
+/*
+ * Build an ASCII time string. If sbuf is NULL we use the current time,
+ * else we use the last modified time of sbuf;
+ */
+
+char_t *websGetDateString(websStatType *sbuf)
+{
+ char_t* cp, *r;
+ time_t now;
+
+ if (sbuf == NULL) {
+ time(&now);
+ } else {
+ now = sbuf->mtime;
+ }
+ if ((cp = gctime(&now)) != NULL) {
+ cp[gstrlen(cp) - 1] = '\0';
+ r = bstrdup(B_L, cp);
+ return r;
+ }
+ return NULL;
+}
+
+/******************************************************************************/
+/*
+ * Mark time. Set a timestamp so that, later, we can return the number of
+ * seconds since we made the mark. Note that the mark my not be a
+ * "real" time, but rather a relative marker.
+ */
+
+void websSetTimeMark(webs_t wp)
+{
+ wp->timestamp = time(0);
+}
+
+/******************************************************************************/
+/*
+ * Get the number of seconds since the last mark.
+ */
+
+static int websGetTimeSinceMark(webs_t wp)
+{
+ return time(0) - wp->timestamp;
+}
+
+/******************************************************************************/
+/*
+ * Store the new realm name
+ */
+
+void websSetRealm(char_t *realmName)
+{
+ a_assert(realmName);
+
+ gstrncpy(websRealm, realmName, TSZ(websRealm));
+}
+
+/******************************************************************************/
+/*
+ * Return the realm name (used for authorization)
+ */
+
+char_t *websGetRealm()
+{
+ return websRealm;
+}
+
+
+#ifdef WEBS_IF_MODIFIED_SUPPORT
+/******************************************************************************/
+/*
+ * These functions are intended to closely mirror the syntax for HTTP-date
+ * from RFC 2616 (HTTP/1.1 spec). This code was submitted by Pete Bergstrom.
+ */
+
+/*
+ * RFC1123Date = wkday "," SP date1 SP time SP "GMT"
+ * RFC850Date = weekday "," SP date2 SP time SP "GMT"
+ * ASCTimeDate = wkday SP date3 SP time SP 4DIGIT
+ *
+ * Each of these functions tries to parse the value and update the index to
+ * the point it leaves off parsing.
+ */
+
+typedef enum { JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC } MonthEnumeration;
+typedef enum { SUN, MON, TUE, WED, THU, FRI, SAT } WeekdayEnumeration;
+
+/******************************************************************************/
+/*
+ * Parse an N-digit value
+ */
+
+static int parseNDIGIT(char_t *buf, int digits, int *index)
+{
+ int tmpIndex, returnValue;
+
+ returnValue = 0;
+
+ for (tmpIndex = *index; tmpIndex < *index+digits; tmpIndex++) {
+ if (gisdigit(buf[tmpIndex])) {
+ returnValue = returnValue * 10 + (buf[tmpIndex] - T('0'));
+ }
+ }
+ *index = tmpIndex;
+
+ return returnValue;
+}
+
+/******************************************************************************/
+/*
+ * Return an index into the month array
+ */
+
+static int parseMonth(char_t *buf, int *index)
+{
+/*
+ * "Jan" | "Feb" | "Mar" | "Apr" | "May" | "Jun" |
+ * "Jul" | "Aug" | "Sep" | "Oct" | "Nov" | "Dec"
+ */
+ int tmpIndex, returnValue;
+
+ returnValue = -1;
+ tmpIndex = *index;
+
+ switch (buf[tmpIndex]) {
+ case 'A':
+ switch (buf[tmpIndex+1]) {
+ case 'p':
+ returnValue = APR;
+ break;
+ case 'u':
+ returnValue = AUG;
+ break;
+ }
+ break;
+ case 'D':
+ returnValue = DEC;
+ break;
+ case 'F':
+ returnValue = FEB;
+ break;
+ case 'J':
+ switch (buf[tmpIndex+1]) {
+ case 'a':
+ returnValue = JAN;
+ break;
+ case 'u':
+ switch (buf[tmpIndex+2]) {
+ case 'l':
+ returnValue = JUL;
+ break;
+ case 'n':
+ returnValue = JUN;
+ break;
+ }
+ break;
+ }
+ break;
+ case 'M':
+ switch (buf[tmpIndex+1]) {
+ case 'a':
+ switch (buf[tmpIndex+2]) {
+ case 'r':
+ returnValue = MAR;
+ break;
+ case 'y':
+ returnValue = MAY;
+ break;
+ }
+ break;
+ }
+ break;
+ case 'N':
+ returnValue = NOV;
+ break;
+ case 'O':
+ returnValue = OCT;
+ break;
+ case 'S':
+ returnValue = SEP;
+ break;
+ }
+
+ if (returnValue >= 0) {
+ *index += 3;
+ }
+
+ return returnValue;
+}
+
+/******************************************************************************/
+/*
+ * Parse a year value (either 2 or 4 digits)
+ */
+
+static int parseYear(char_t *buf, int *index)
+{
+ int tmpIndex, returnValue;
+
+ tmpIndex = *index;
+ returnValue = parseNDIGIT(buf, 4, &tmpIndex);
+
+ if (returnValue >= 0) {
+ *index = tmpIndex;
+ } else {
+ returnValue = parseNDIGIT(buf, 2, &tmpIndex);
+ if (returnValue >= 0) {
+/*
+ * Assume that any year earlier than the start of the
+ * epoch for time_t (1970) specifies 20xx
+ */
+ if (returnValue < 70) {
+ returnValue += 2000;
+ } else {
+ returnValue += 1900;
+ }
+
+ *index = tmpIndex;
+ }
+ }
+
+ return returnValue;
+}
+
+/******************************************************************************/
+/*
+ * The formulas used to build these functions are from "Calendrical Calculations",
+ * by Nachum Dershowitz, Edward M. Reingold, Cambridge University Press, 1997.
+ */
+
+#include <math.h>
+
+const int GregorianEpoch = 1;
+
+/******************************************************************************/
+/*
+ * Determine if year is a leap year
+ */
+
+int GregorianLeapYearP(long year)
+{
+ int result;
+ long tmp;
+
+ tmp = year % 400;
+
+ if ((year % 4 == 0) &&
+ (tmp != 100) &&
+ (tmp != 200) &&
+ (tmp != 300)) {
+ result = TRUE;
+ } else {
+ result = FALSE;
+ }
+
+ return result;
+}
+
+/******************************************************************************/
+/*
+ * Return the fixed date from the gregorian date
+ */
+
+long FixedFromGregorian(long month, long day, long year)
+{
+ long fixedDate;
+
+ fixedDate = (long)(GregorianEpoch - 1 + 365 * (year - 1) +
+ floor((year - 1) / 4.0) -
+ floor((double)(year - 1) / 100.0) +
+ floor((double)(year - 1) / 400.0) +
+ floor((367.0 * ((double)month) - 362.0) / 12.0));
+
+ if (month <= 2) {
+ fixedDate += 0;
+ } else if (TRUE == GregorianLeapYearP(year)) {
+ fixedDate += -1;
+ } else {
+ fixedDate += -2;
+ }
+
+ fixedDate += day;
+
+ return fixedDate;
+}
+
+/******************************************************************************/
+/*
+ * Return the gregorian year from a fixed date
+ */
+
+long GregorianYearFromFixed(long fixedDate)
+{
+ long result, d0, n400, d1, n100, d2, n4, d3, n1, d4, year;
+
+ d0 = fixedDate - GregorianEpoch;
+ n400 = (long)(floor((double)d0 / (double)146097));
+ d1 = d0 % 146097;
+ n100 = (long)(floor((double)d1 / (double)36524));
+ d2 = d1 % 36524;
+ n4 = (long)(floor((double)d2 / (double)1461));
+ d3 = d2 % 1461;
+ n1 = (long)(floor((double)d3 / (double)365));
+ d4 = (d3 % 365) + 1;
+ year = 400 * n400 + 100 * n100 + 4 * n4 + n1;
+
+ if ((n100 == 4) || (n1 == 4)) {
+ result = year;
+ } else {
+ result = year + 1;
+ }
+
+ return result;
+}
+
+/******************************************************************************/
+/*
+ * Returns the Gregorian date from a fixed date
+ * (not needed for this use, but included for completeness
+ */
+
+#if 0
+GregorianFromFixed(long fixedDate, long *month, long *day, long *year)
+{
+ long priorDays, correction;
+
+ *year = GregorianYearFromFixed(fixedDate);
+ priorDays = fixedDate - FixedFromGregorian(1, 1, *year);
+
+ if (fixedDate < FixedFromGregorian(3,1,*year)) {
+ correction = 0;
+ } else if (true == GregorianLeapYearP(*year)) {
+ correction = 1;
+ } else {
+ correction = 2;
+ }
+
+ *month = (long)(floor((12.0 * (double)(priorDays + correction) + 373.0) / 367.0));
+ *day = fixedDate - FixedFromGregorian(*month, 1, *year);
+}
+#endif
+
+/******************************************************************************/
+/*
+ * Returns the difference between two Gregorian dates
+ */
+
+long GregorianDateDifference( long month1, long day1, long year1,
+ long month2, long day2, long year2)
+{
+ return FixedFromGregorian(month2, day2, year2) -
+ FixedFromGregorian(month1, day1, year1);
+}
+
+
+/******************************************************************************/
+/*
+ * Return the number of seconds into the current day
+ */
+
+#define SECONDS_PER_DAY 24*60*60
+
+static int parseTime(char_t *buf, int *index)
+{
+/*
+ * Format of buf is - 2DIGIT ":" 2DIGIT ":" 2DIGIT
+ */
+ int returnValue, tmpIndex, hourValue, minuteValue, secondValue;
+
+ hourValue = minuteValue = secondValue = -1;
+ returnValue = -1;
+ tmpIndex = *index;
+
+ hourValue = parseNDIGIT(buf, 2, &tmpIndex);
+
+ if (hourValue >= 0) {
+ tmpIndex++;
+ minuteValue = parseNDIGIT(buf, 2, &tmpIndex);
+ if (minuteValue >= 0) {
+ tmpIndex++;
+ secondValue = parseNDIGIT(buf, 2, &tmpIndex);
+ }
+ }
+
+ if ((hourValue >= 0) &&
+ (minuteValue >= 0) &&
+ (secondValue >= 0)) {
+ returnValue = (((hourValue * 60) + minuteValue) * 60) + secondValue;
+ *index = tmpIndex;
+ }
+
+ return returnValue;
+}
+
+/******************************************************************************/
+/*
+ * Return the equivalent of time() given a gregorian date
+ */
+
+static time_t dateToTimet(int year, int month, int day)
+{
+ long dayDifference;
+
+ /*
+ * Bug fix by Jeff Reeder (Jun 14, 2002): The 'month' parameter is
+ * numbered from 0 (Jan == 0), but FixedFromGregorian() takes
+ * months numbered from 1 (January == 1). We need to add 1
+ * to the month
+ */
+ dayDifference = FixedFromGregorian(month + 1, day, year) -
+ FixedFromGregorian(1, 1, 1970);
+
+ return dayDifference * SECONDS_PER_DAY;
+}
+
+/******************************************************************************/
+/*
+ * Return the number of seconds between Jan 1, 1970 and the parsed date
+ * (corresponds to documentation for time() function)
+ */
+
+static time_t parseDate1or2(char_t *buf, int *index)
+{
+/*
+ * Format of buf is either
+ * 2DIGIT SP month SP 4DIGIT
+ * or
+ * 2DIGIT "-" month "-" 2DIGIT
+ */
+ int dayValue, monthValue, yearValue, tmpIndex;
+ time_t returnValue;
+
+ returnValue = (time_t) -1;
+ tmpIndex = *index;
+
+ dayValue = monthValue = yearValue = -1;
+
+ if (buf[tmpIndex] == T(',')) {
+/*
+ * Skip over the ", "
+ */
+ tmpIndex += 2;
+
+ dayValue = parseNDIGIT(buf, 2, &tmpIndex);
+ if (dayValue >= 0) {
+/*
+ * Skip over the space or hyphen
+ */
+ tmpIndex++;
+ monthValue = parseMonth(buf, &tmpIndex);
+ if (monthValue >= 0) {
+/*
+ * Skip over the space or hyphen
+ */
+ tmpIndex++;
+ yearValue = parseYear(buf, &tmpIndex);
+ }
+ }
+
+ if ((dayValue >= 0) &&
+ (monthValue >= 0) &&
+ (yearValue >= 0)) {
+ if (yearValue < 1970) {
+/*
+ * Allow for Microsoft IE's year 1601 dates
+ */
+ returnValue = 0;
+ } else {
+ returnValue = dateToTimet(yearValue, monthValue, dayValue);
+ }
+ *index = tmpIndex;
+ }
+ }
+
+ return returnValue;
+}
+
+/******************************************************************************/
+/*
+ * Return the number of seconds between Jan 1, 1970 and the parsed date
+ */
+
+static time_t parseDate3Time(char_t *buf, int *index)
+{
+/*
+ * Format of buf is month SP ( 2DIGIT | ( SP 1DIGIT ))
+ */
+ int dayValue, monthValue, yearValue, timeValue, tmpIndex;
+ time_t returnValue;
+
+ returnValue = (time_t) -1;
+ tmpIndex = *index;
+
+ dayValue = monthValue = yearValue = timeValue = -1;
+
+ monthValue = parseMonth(buf, &tmpIndex);
+ if (monthValue >= 0) {
+/*
+ * Skip over the space
+ */
+ tmpIndex++;
+ if (buf[tmpIndex] == T(' ')) {
+/*
+ * Skip over this space too
+ */
+ tmpIndex++;
+ dayValue = parseNDIGIT(buf, 1, &tmpIndex);
+ } else {
+ dayValue = parseNDIGIT(buf, 2, &tmpIndex);
+ }
+/*
+ * Now get the time and time SP 4DIGIT
+ */
+ timeValue = parseTime(buf, &tmpIndex);
+ if (timeValue >= 0) {
+/*
+ * Now grab the 4DIGIT year value
+ */
+ yearValue = parseYear(buf, &tmpIndex);
+ }
+ }
+
+ if ((dayValue >= 0) &&
+ (monthValue >= 0) &&
+ (yearValue >= 0)) {
+ returnValue = dateToTimet(yearValue, monthValue, dayValue);
+ returnValue += timeValue;
+ *index = tmpIndex;
+ }
+
+ return returnValue;
+}
+
+
+/******************************************************************************/
+/*
+ * Although this looks like a trivial function, I found I was replicating the implementation
+ * seven times in the parseWeekday function. In the interests of minimizing code size
+ * and redundancy, it is broken out into a separate function. The cost of an extra
+ * function call I can live with given that it should only be called once per HTTP request.
+ */
+
+static int bufferIndexIncrementGivenNTest(char_t *buf, int testIndex, char_t testChar,
+ int foundIncrement, int notfoundIncrement)
+{
+ if (buf[testIndex] == testChar) {
+ return foundIncrement;
+ }
+
+ return notfoundIncrement;
+}
+
+/******************************************************************************/
+/*
+ * Return an index into a logical weekday array
+ */
+
+static int parseWeekday(char_t *buf, int *index)
+{
+/*
+ * Format of buf is either
+ * "Mon" | "Tue" | "Wed" | "Thu" | "Fri" | "Sat" | "Sun"
+ * or
+ * "Monday" | "Tuesday" | "Wednesday" | "Thursday" | "Friday" | "Saturday" | "Sunday"
+ */
+ int tmpIndex, returnValue;
+
+ returnValue = -1;
+ tmpIndex = *index;
+
+ switch (buf[tmpIndex]) {
+ case 'F':
+ returnValue = FRI;
+ *index += bufferIndexIncrementGivenNTest(buf, tmpIndex+3, 'd', sizeof("Friday"), 3);
+ break;
+ case 'M':
+ returnValue = MON;
+ *index += bufferIndexIncrementGivenNTest(buf, tmpIndex+3, 'd', sizeof("Monday"), 3);
+ break;
+ case 'S':
+ switch (buf[tmpIndex+1]) {
+ case 'a':
+ returnValue = SAT;
+ *index += bufferIndexIncrementGivenNTest(buf, tmpIndex+3, 'u', sizeof("Saturday"), 3);
+ break;
+ case 'u':
+ returnValue = SUN;
+ *index += bufferIndexIncrementGivenNTest(buf, tmpIndex+3, 'd', sizeof("Sunday"), 3);
+ break;
+ }
+ break;
+ case 'T':
+ switch (buf[tmpIndex+1]) {
+ case 'h':
+ returnValue = THU;
+ *index += bufferIndexIncrementGivenNTest(buf, tmpIndex+3, 'r', sizeof("Thursday"), 3);
+ break;
+ case 'u':
+ returnValue = TUE;
+ *index += bufferIndexIncrementGivenNTest(buf, tmpIndex+3, 's', sizeof("Tuesday"), 3);
+ break;
+ }
+ break;
+ case 'W':
+ returnValue = WED;
+ *index += bufferIndexIncrementGivenNTest(buf, tmpIndex+3, 'n', sizeof("Wednesday"), 3);
+ break;
+ }
+ return returnValue;
+}
+
+/******************************************************************************/
+/*
+ * Parse the date and time string.
+ */
+
+static time_t dateParse(time_t tip, char_t *cmd)
+{
+ int index, tmpIndex, weekday, timeValue;
+ time_t parsedValue, dateValue;
+
+ parsedValue = (time_t) 0;
+ index = timeValue = 0;
+ weekday = parseWeekday(cmd, &index);
+
+ if (weekday >= 0) {
+ tmpIndex = index;
+ dateValue = parseDate1or2(cmd, &tmpIndex);
+ if (dateValue >= 0) {
+ index = tmpIndex + 1;
+/*
+ * One of these two forms is being used
+ * wkday "," SP date1 SP time SP "GMT"
+ * weekday "," SP date2 SP time SP "GMT"
+ */
+ timeValue = parseTime(cmd, &index);
+ if (timeValue >= 0) {
+/*
+ * Now match up that "GMT" string for completeness
+ * Compute the final value if there were no problems in the parse
+ */
+ if ((weekday >= 0) &&
+ (dateValue >= 0) &&
+ (timeValue >= 0)) {
+ parsedValue = dateValue + timeValue;
+ }
+ }
+ } else {
+/*
+ * Try the other form - wkday SP date3 SP time SP 4DIGIT
+ */
+ tmpIndex = index;
+ parsedValue = parseDate3Time(cmd, &tmpIndex);
+ }
+ }
+
+ return parsedValue;
+}
+
+#endif /* WEBS_IF_MODIFIED_SUPPORT */
+
+/******************************************************************************/
+
diff --git a/cleopatre/application/spidgoahead/webs.h b/cleopatre/application/spidgoahead/webs.h
new file mode 100644
index 0000000000..4548d5b090
--- /dev/null
+++ b/cleopatre/application/spidgoahead/webs.h
@@ -0,0 +1,234 @@
+/*
+ * webs.h -- GoAhead Web public header
+ *
+ * Copyright (c) GoAhead Software Inc., 1992-2000. All Rights Reserved.
+ *
+ * See the file "license.txt" for information on usage and redistribution
+ *
+ * $Id: webs.h,v 1.10 2003/12/01 23:52:30 hwolff Exp $
+ */
+
+#ifndef _h_WEBS
+#define _h_WEBS 1
+
+/******************************** Description *********************************/
+
+/*
+ * GoAhead Web Server header. This defines the Web public APIs.
+ * Include this header for files that contain ASP or Form procedures.
+ * Include wsIntrn.h when creating URL handlers.
+ */
+
+/********************************* Includes ***********************************/
+
+#include "ej.h"
+#ifdef WEBS_SSL_SUPPORT
+ #include "websSSL.h"
+#endif
+
+/********************************** Defines ***********************************/
+/*
+ * By license terms the server software name defined in the following line of
+ * code must not be modified.
+ */
+#define WEBS_NAME T("GoAhead-Webs")
+#define WEBS_VERSION T("2.1.8")
+
+#define WEBS_HEADER_BUFINC 512 /* Header buffer size */
+#define WEBS_ASP_BUFINC 512 /* Asp expansion increment */
+#define WEBS_MAX_PASS 32 /* Size of password */
+#define WEBS_BUFSIZE 1000 /* websWrite max output string */
+#define WEBS_MAX_HEADER (5 * 1024) /* Sanity check header */
+#define WEBS_MAX_URL 4096 /* Maximum URL size for sanity */
+#define WEBS_SOCKET_BUFSIZ 256 /* Bytes read from socket */
+
+#define WEBS_HTTP_PORT T("httpPort")
+#define CGI_BIN T("cgi-bin")
+
+/*
+ * Request flags. Also returned by websGetRequestFlags().
+ */
+#define WEBS_LOCAL_PAGE 0x1 /* Request for local webs page */
+#define WEBS_KEEP_ALIVE 0x2 /* HTTP/1.1 keep alive */
+#define WEBS_DONT_USE_CACHE 0x4 /* Not implemented cache support */
+#define WEBS_COOKIE 0x8 /* Cookie supplied in request */
+#define WEBS_IF_MODIFIED 0x10 /* If-modified-since in request */
+#define WEBS_POST_REQUEST 0x20 /* Post request operation */
+#define WEBS_LOCAL_REQUEST 0x40 /* Request from this system */
+#define WEBS_HOME_PAGE 0x80 /* Request for the home page */
+#define WEBS_ASP 0x100 /* ASP request */
+#define WEBS_HEAD_REQUEST 0x200 /* Head request */
+#define WEBS_CLEN 0x400 /* Request had a content length */
+#define WEBS_FORM 0x800 /* Request is a form */
+#define WEBS_REQUEST_DONE 0x1000 /* Request complete */
+#define WEBS_POST_DATA 0x2000 /* Already appended post data */
+#define WEBS_CGI_REQUEST 0x4000 /* cgi-bin request */
+#define WEBS_SECURE 0x8000 /* connection uses SSL */
+#define WEBS_AUTH_BASIC 0x10000 /* Basic authentication request */
+#define WEBS_AUTH_DIGEST 0x20000 /* Digest authentication request */
+#define WEBS_HEADER_DONE 0x40000 /* Already output the HTTP header */
+
+/*
+ * URL handler flags
+ */
+#define WEBS_HANDLER_FIRST 0x1 /* Process this handler first */
+#define WEBS_HANDLER_LAST 0x2 /* Process this handler last */
+
+/*
+ * Per socket connection webs structure
+ */
+typedef struct websRec {
+ ringq_t header; /* Header dynamic string */
+ time_t since; /* Parsed if-modified-since time */
+ sym_fd_t cgiVars; /* CGI standard variables */
+ sym_fd_t cgiQuery; /* CGI decoded query string */
+ time_t timestamp; /* Last transaction with browser */
+ int timeout; /* Timeout handle */
+ char_t ipaddr[32]; /* Connecting ipaddress */
+ char_t type[64]; /* Mime type */
+ char_t *dir; /* Directory containing the page */
+ char_t *path; /* Path name without query */
+ char_t *url; /* Full request url */
+ char_t *host; /* Requested host */
+ char_t *lpath; /* Cache local path name */
+ char_t *query; /* Request query */
+ char_t *decodedQuery; /* Decoded request query */
+ char_t *authType; /* Authorization type (Basic/DAA) */
+ char_t *password; /* Authorization password */
+ char_t *userName; /* Authorization username */
+ char_t *cookie; /* Cookie string */
+ char_t *userAgent; /* User agent (browser) */
+ char_t *protocol; /* Protocol (normally HTTP) */
+ char_t *protoVersion; /* Protocol version */
+ int sid; /* Socket id (handler) */
+ int listenSid; /* Listen Socket id */
+ int port; /* Request port number */
+ int state; /* Current state */
+ int flags; /* Current flags -- see above */
+ int code; /* Request result code */
+ int clen; /* Content length */
+ int wid; /* Index into webs */
+ char_t *cgiStdin; /* filename for CGI stdin */
+ int docfd; /* Document file descriptor */
+ int numbytes; /* Bytes to transfer to browser */
+ int written; /* Bytes actually transferred */
+ void (*writeSocket)(struct websRec *wp);
+#ifdef DIGEST_ACCESS_SUPPORT
+ char_t *realm; /* usually the same as "host" from websRec */
+ char_t *nonce; /* opaque-to-client string sent by server */
+ char_t *digest; /* digest form of user password */
+ char_t *uri; /* URI found in DAA header */
+ char_t *opaque; /* opaque value passed from server */
+ char_t *nc; /* nonce count */
+ char_t *cnonce; /* check nonce */
+ char_t *qop; /* quality operator */
+#endif
+#ifdef WEBS_SSL_SUPPORT
+ websSSL_t *wsp; /* SSL data structure */
+#endif
+} websRec;
+
+typedef websRec *webs_t;
+typedef websRec websType;
+
+/******************************** Prototypes **********************************/
+extern int websAccept(int sid, char *ipaddr, int port, int listenSid);
+extern int websAspDefine(char_t *name,
+ int (*fn)(int ejid, webs_t wp, int argc, char_t **argv));
+extern int websAspRequest(webs_t wp, char_t *lpath);
+extern void websCloseListen();
+extern int websDecode64(char_t *outbuf, char_t *string, int buflen);
+extern void websDecodeUrl(char_t *token, char_t *decoded, int len);
+extern void websDone(webs_t wp, int code);
+extern void websEncode64(char_t *outbuf, char_t *string, int buflen);
+extern void websError(webs_t wp, int code, char_t *msg, ...);
+/* function websErrorMsg() made extern 03 Jun 02 BgP */
+extern char_t *websErrorMsg(int code);
+extern void websFooter(webs_t wp);
+extern int websFormDefine(char_t *name, void (*fn)(webs_t wp,
+ char_t *path, char_t *query));
+extern char_t *websGetDefaultDir();
+extern char_t *websGetDefaultPage();
+extern char_t *websGetHostUrl();
+extern char_t *websGetIpaddrUrl();
+extern char_t *websGetPassword();
+extern int websGetPort();
+extern char_t *websGetPublishDir(char_t *path, char_t **urlPrefix);
+extern char_t *websGetRealm();
+extern int websGetRequestBytes(webs_t wp);
+extern char_t *websGetRequestDir(webs_t wp);
+extern int websGetRequestFlags(webs_t wp);
+extern char_t *websGetRequestIpaddr(webs_t wp);
+extern char_t *websGetRequestLpath(webs_t wp);
+extern char_t *websGetRequestPath(webs_t wp);
+extern char_t *websGetRequestPassword(webs_t wp);
+extern char_t *websGetRequestType(webs_t wp);
+extern int websGetRequestWritten(webs_t wp);
+extern char_t *websGetVar(webs_t wp, char_t *var, char_t *def);
+extern int websCompareVar(webs_t wp, char_t *var, char_t *value);
+extern void websHeader(webs_t wp);
+extern int websOpenListen(int port, int retries);
+extern int websPageOpen(webs_t wp, char_t *lpath, char_t *path,
+ int mode, int perm);
+extern void websPageClose(webs_t wp);
+extern int websPublish(char_t *urlPrefix, char_t *path);
+extern void websRedirect(webs_t wp, char_t *url);
+extern void websSecurityDelete();
+extern int websSecurityHandler(webs_t wp, char_t *urlPrefix,
+ char_t *webDir, int arg, char_t *url, char_t *path,
+ char_t *query);
+extern void websSetDefaultDir(char_t *dir);
+extern void websSetDefaultPage(char_t *page);
+extern void websSetEnv(webs_t wp);
+extern void websSetHost(char_t *host);
+extern void websSetIpaddr(char_t *ipaddr);
+extern void websSetPassword(char_t *password);
+extern void websSetRealm(char_t *realmName);
+extern void websSetRequestBytes(webs_t wp, int bytes);
+extern void websSetRequestFlags(webs_t wp, int flags);
+extern void websSetRequestLpath(webs_t wp, char_t *lpath);
+extern void websSetRequestPath(webs_t wp, char_t *dir, char_t *path);
+extern char_t *websGetRequestUserName(webs_t wp);
+extern void websSetRequestWritten(webs_t wp, int written);
+extern void websSetVar(webs_t wp, char_t *var, char_t *value);
+extern int websTestVar(webs_t wp, char_t *var);
+extern void websTimeoutCancel(webs_t wp);
+extern int websUrlHandlerDefine(char_t *urlPrefix, char_t *webDir,
+ int arg, int (*fn)(webs_t wp, char_t *urlPrefix,
+ char_t *webDir, int arg, char_t *url, char_t *path,
+ char_t *query), int flags);
+extern int websUrlHandlerDelete(int (*fn)(webs_t wp, char_t *urlPrefix,
+ char_t *webDir, int arg, char_t *url, char_t *path,
+ char_t *query));
+extern int websUrlHandlerRequest(webs_t wp);
+extern int websUrlParse(char_t *url, char_t **buf, char_t **host,
+ char_t **path, char_t **port, char_t **query,
+ char_t **proto, char_t **tag, char_t **ext);
+extern char_t *websUrlType(char_t *webs, char_t *buf, int charCnt);
+extern int websWrite(webs_t wp, char_t* fmt, ...);
+extern int websWriteBlock(webs_t wp, char_t *buf, int nChars);
+extern int websWriteDataNonBlock(webs_t wp, char *buf, int nChars);
+extern int websValid(webs_t wp);
+extern int websValidateUrl(webs_t wp, char_t *path);
+extern void websSetTimeMark(webs_t wp);
+
+/*
+ * The following prototypes are used by the SSL patch found in websSSL.c
+ */
+extern int websAlloc(int sid);
+extern void websFree(webs_t wp);
+extern void websTimeout(void *arg, int id);
+extern void websReadEvent(webs_t wp);
+
+/*
+ * Prototypes for functions available when running as part of the
+ * GoAhead Embedded Management Framework (EMF)
+ */
+#ifdef EMF
+extern void websFormExplain(webs_t wp, char_t *path, char_t *query);
+#endif
+
+#endif /* _h_WEBS */
+
+/******************************************************************************/
+
diff --git a/cleopatre/application/spidgoahead/websSSL.c b/cleopatre/application/spidgoahead/websSSL.c
new file mode 100644
index 0000000000..5937418395
--- /dev/null
+++ b/cleopatre/application/spidgoahead/websSSL.c
@@ -0,0 +1,709 @@
+/*
+ * websSSL.c -- SSL envrionment creation
+ *
+ * Copyright (c) GoAhead Software Inc., 1995-2000. All Rights Reserved.
+ *
+ * See the file "license.txt" for usage and redistribution license requirements
+ *
+ * $Id: websSSL.c,v 1.3 2003/09/29 20:30:48 bporter Exp $
+ */
+
+/******************************** Description *********************************/
+
+/*
+ * This module implements a patch into SSL implementations for the webs
+ * module.
+ */
+
+#ifndef __ENABLE_MOCANA_SSL_SERVER__
+/********************************* Includes ***********************************/
+
+#include "wsIntrn.h"
+#include "webs.h"
+#include "websSSL.h"
+
+/******************************* Definitions **********************************/
+
+#define DEFAULT_CERT_FILE "/etc/server.pem"
+#define DEFAULT_KEY_FILE "/etc/certs/cakey.pem"
+#define DEFAULT_CA_FILE "/etc/certs/cacert.pem"
+#define DEFAULT_CA_PATH "/etc/certs/"
+#define SSL_PORT 443
+
+/*
+ * Define the components of the apps_startup() macro
+ */
+
+#ifdef SIGPIPE
+#define do_pipe_sig() signal(SIGPIPE,SIG_IGN)
+#else
+#define do_pipe_sig()
+#endif
+
+#ifdef OPENSSL
+#define SSLC_add_all_algorithms() SSLeay_add_all_algorithms()
+#else
+extern void SSLC_add_all_algorithms(void);
+#endif
+
+/*
+ * Define the apps_startup() macro
+ */
+
+# if defined(MSDOS) || defined(WIN16) || defined(WIN32)
+# ifdef _O_BINARY
+# define apps_startup() \
+ _fmode=_O_BINARY; do_pipe_sig(); CRYPTO_malloc_init(); \
+ SSLC_add_all_algorithms()
+# else
+# define apps_startup() \
+ _fmode=O_BINARY; do_pipe_sig(); CRYPTO_malloc_init(); \
+ SSLC_add_all_algorithms()
+# endif
+# else
+# define apps_startup() do_pipe_sig(); SSLC_add_all_algorithms();
+# endif
+
+/*************************** Forward Declarations *****************************/
+
+static int websSSLSetCertStuff(SSL_CTX *ctx,
+ char *cert_file,
+ char *key_file);
+static int websSSLVerifyCallback(int ok, X509_STORE_CTX *ctx);
+static RSA *websSSLTempRSACallback(SSL *s, int is_export, int keylength);
+
+static int websSSLReadEvent (webs_t wp);
+static int websSSLAccept(int sid, char *ipaddr, int port, int listenSid);
+static void websSSLSocketEvent(int sid, int mask, int data);
+
+/*********************************** Locals ***********************************/
+
+static int sslListenSock = -1; /* Listen socket */
+static SSL_CTX *sslctx = NULL;
+
+/******************************************************************************/
+/*
+ * Start up the SSL Context for the application, and start a listen on the
+ * SSL port (usually 443, and defined by SSL_PORT)
+ * Return 0 on success, -1 on failure.
+ */
+
+int websSSLOpen()
+{
+ char *certFile, *keyFile, *CApath, *CAfile;
+ SSL_METHOD *meth;
+
+/*
+ * Install and initialize the SSL library
+ */
+ apps_startup();
+ trace(7, T("SSL: Initializing SSL\n"));
+
+#ifdef SSLC
+ SSL_library_init();
+#endif
+
+ SSL_load_error_strings();
+
+#ifdef OPENSSL
+ SSLeay_add_ssl_algorithms();
+#endif
+
+/*
+ * Important! Enable both SSL versions 2 and 3
+ */
+ meth = SSLv23_server_method();
+ sslctx = SSL_CTX_new(meth);
+
+ a_assert(sslctx);
+
+ if (sslctx == NULL) {
+ trace(2, T("SSL: Unable to create SSL context!\n"));
+ return -1;
+ }
+
+/*
+ * Adjust some SSL Context variables
+ */
+ SSL_CTX_set_quiet_shutdown(sslctx, 1);
+ SSL_CTX_set_options(sslctx, 0);
+ SSL_CTX_sess_set_cache_size(sslctx, 128);
+
+/*
+ * Set the certificate verification locations
+ */
+ CApath = DEFAULT_CA_PATH;
+ CAfile = DEFAULT_CA_FILE;
+ if ((!SSL_CTX_load_verify_locations(sslctx, CAfile, CApath)) ||
+ (!SSL_CTX_set_default_verify_paths(sslctx))) {
+ trace(2, T("SSL: Unable to set cert verification locations!\n"));
+ websSSLClose();
+ return -1;
+ }
+
+/*
+ * Set the certificate and key files for the SSL context
+ */
+ certFile = DEFAULT_CERT_FILE;
+ keyFile = NULL;
+ if (websSSLSetCertStuff(sslctx, certFile, keyFile) != 0) {
+ websSSLClose();
+ return -1;
+ }
+
+/*
+ * Set the RSA callback for the SSL context
+ */
+ SSL_CTX_set_tmp_rsa_callback(sslctx, websSSLTempRSACallback);
+
+/*
+ * Set the verification callback for the SSL context
+ */
+ SSL_CTX_set_verify(sslctx, SSL_VERIFY_NONE, websSSLVerifyCallback);
+
+/*
+ * Set the certificate authority list for the client
+ */
+ SSL_CTX_set_client_CA_list(sslctx, SSL_load_client_CA_file(CAfile));
+
+/*
+ * Open the socket
+ */
+ sslListenSock = socketOpenConnection(NULL, SSL_PORT,
+ websSSLAccept, SOCKET_BLOCK);
+
+ if (sslListenSock < 0) {
+ trace(2, T("SSL: Unable to open SSL socket on port <%d>!\n"),
+ SSL_PORT);
+ return -1;
+ }
+
+ return 0;
+}
+
+/******************************************************************************/
+/*
+ * Return TRUE if websSSL has been opened
+ */
+
+int websSSLIsOpen()
+{
+ return (sslListenSock != -1);
+}
+
+/******************************************************************************/
+/*
+ * Stops the SSL
+ */
+
+void websSSLClose()
+{
+ trace(7, T("SSL: Closing SSL\n"));
+
+ if (sslctx != NULL) {
+ SSL_CTX_free(sslctx);
+ sslctx = NULL;
+ }
+
+ if (sslListenSock != -1) {
+ socketCloseConnection(sslListenSock);
+ sslListenSock = -1;
+ }
+
+#ifdef SSLC
+ SSL_library_cleanup();
+#endif
+}
+
+/******************************************************************************/
+/*
+ * Accept a connection
+ */
+
+int websSSLAccept(int sid, char *ipaddr, int port, int listenSid)
+{
+ webs_t wp;
+ int wid;
+
+ a_assert(ipaddr && *ipaddr);
+ a_assert(sid >= 0);
+ a_assert(port >= 0);
+
+/*
+ * Allocate a new handle for this accepted connection. This will allocate
+ * a webs_t structure in the webs[] list
+ */
+ if ((wid = websAlloc(sid)) < 0) {
+ return -1;
+ }
+ wp = webs[wid];
+ a_assert(wp);
+ wp->listenSid = listenSid;
+
+ ascToUni(wp->ipaddr, ipaddr, min(sizeof(wp->ipaddr), strlen(ipaddr)+1));
+
+/*
+ * Check if this is a request from a browser on this system. This is useful
+ * to know for permitting administrative operations only for local access
+ */
+ if (gstrcmp(wp->ipaddr, T("127.0.0.1")) == 0 ||
+ gstrcmp(wp->ipaddr, websIpaddr) == 0 ||
+ gstrcmp(wp->ipaddr, websHost) == 0) {
+ wp->flags |= WEBS_LOCAL_REQUEST;
+ }
+/*
+ * Since the acceptance came in on this channel, it must be secure
+ */
+ wp->flags |= WEBS_SECURE;
+
+/*
+ * Arrange for websSocketEvent to be called when read data is available
+ */
+ socketCreateHandler(sid, SOCKET_READABLE, websSSLSocketEvent, (int) wp);
+
+/*
+ * Arrange for a timeout to kill hung requests
+ */
+ wp->timeout = emfSchedCallback(WEBS_TIMEOUT, websTimeout, (void *) wp);
+ trace(8, T("webs: accept request\n"));
+ return 0;
+}
+
+/******************************************************************************/
+/*
+ * The webs socket handler. Called in response to I/O. We just pass control
+ * to the relevant read or write handler. A pointer to the webs structure
+ * is passed as an (int) in iwp.
+ */
+
+static void websSSLSocketEvent(int sid, int mask, int iwp)
+{
+ webs_t wp;
+
+ wp = (webs_t) iwp;
+ a_assert(wp);
+
+ if (! websValid(wp)) {
+ return;
+ }
+
+ if (mask & SOCKET_READABLE) {
+ websSSLReadEvent(wp);
+ }
+ if (mask & SOCKET_WRITABLE) {
+ if (wp->writeSocket) {
+ (*wp->writeSocket)(wp);
+ }
+ }
+}
+
+/******************************************************************************/
+/*
+ * Handler for SSL Read Events
+ */
+
+static int websSSLReadEvent (webs_t wp)
+{
+ int ret, sock;
+ socket_t *sptr;
+ SSL *ssl;
+ BIO *bio, *bioSSL, *bioSock;
+#ifdef DEV
+ const char *ciphers;
+#endif
+
+ a_assert (wp);
+ a_assert(websValid(wp));
+
+ sptr = socketPtr(wp->sid);
+ a_assert(sptr);
+
+ sock = sptr->sock;
+
+/*
+ * Create a new BIO and SSL session for this web request
+ */
+ bio = BIO_new(BIO_f_buffer());
+ a_assert(bio);
+
+ if (!BIO_set_write_buffer_size(bio, 128)) {
+ return -1;
+ }
+
+ ssl = (SSL *) SSL_new(sslctx);
+ a_assert(ssl);
+
+ if (ssl == NULL) {
+ return -1;
+ }
+
+ SSL_set_session(ssl, NULL);
+
+ bioSSL = BIO_new(BIO_f_ssl());
+ a_assert(bioSSL);
+
+ bioSock = BIO_new_socket(sock, BIO_NOCLOSE);
+ a_assert(bioSock);
+
+ SSL_set_bio(ssl, bioSock, bioSock);
+ SSL_set_accept_state(ssl);
+
+ ret = BIO_set_ssl(bioSSL, ssl, BIO_CLOSE);
+ BIO_push(bio, bioSSL);
+
+#ifdef DEV
+ ciphers = SSL_get_cipher_list(ssl, 10);
+#endif
+
+/*
+ * Create the SSL data structure in the wp.
+ */
+#ifdef WEBS_SSL_SUPPORT
+ wp->wsp = balloc(B_L, sizeof(websSSL_t));
+ a_assert (wp->wsp);
+ (wp->wsp)->bio = bio;
+ (wp->wsp)->ssl = ssl;
+#endif
+
+/*
+ * Call the default Read Event
+ */
+ websReadEvent(wp);
+
+ return ret;
+}
+
+
+/******************************************************************************/
+/*
+ * SSL Verification Callback
+ */
+
+static int sslVerifyDepth = 0;
+static int sslVerifyError = X509_V_OK;
+
+int websSSLVerifyCallback(int ok, X509_STORE_CTX *ctx)
+{
+ char buf[256];
+ X509 *errCert;
+ int err;
+ int depth;
+
+ errCert = X509_STORE_CTX_get_current_cert(ctx);
+ err = X509_STORE_CTX_get_error(ctx);
+ depth = X509_STORE_CTX_get_error_depth(ctx);
+
+ X509_NAME_oneline(X509_get_subject_name(errCert), buf, 256);
+
+ if (!ok) {
+ if (sslVerifyDepth >= depth) {
+ ok = 1;
+ sslVerifyError = X509_V_OK;
+ } else {
+ ok=0;
+ sslVerifyError = X509_V_ERR_CERT_CHAIN_TOO_LONG;
+ }
+ }
+
+ switch (err) {
+ case X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT:
+#ifdef OPENSSL
+ X509_NAME_oneline(X509_get_issuer_name(ctx->current_cert), buf, 256);
+#endif
+ break;
+
+ case X509_V_ERR_CERT_NOT_YET_VALID:
+ case X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD:
+ case X509_V_ERR_CERT_HAS_EXPIRED:
+ case X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD:
+ break;
+ }
+
+ return ok;
+}
+
+/******************************************************************************/
+/*
+ * Set the SSL certificate and key for the SSL context
+ */
+
+int websSSLSetCertStuff(SSL_CTX *ctx, char *certFile, char *keyFile)
+{
+ a_assert (ctx);
+ a_assert (certFile);
+
+ if (certFile != NULL) {
+ if (SSL_CTX_use_certificate_file(ctx, certFile,
+ SSL_FILETYPE_PEM) <= 0) {
+ trace(2, T("SSL: Unable to set certificate file <%s>\n"),
+ certFile);
+ return -1;
+ }
+
+ if (keyFile == NULL) {
+ keyFile = certFile;
+ }
+
+ if (SSL_CTX_use_PrivateKey_file(ctx, keyFile, SSL_FILETYPE_PEM) <= 0) {
+ trace(2, T("SSL: Unable to set private key file <%s>\n"),
+ keyFile);
+ return -1;
+ }
+
+/*
+ * Now we know that a key and cert have been set against
+ * the SSL context
+ */
+ if (!SSL_CTX_check_private_key(ctx)) {
+ trace(2, T("SSL: Check of private key file <%s> FAILED!\n"),
+ keyFile);
+ return -1;
+ }
+ }
+
+ return 0;
+}
+
+/******************************************************************************/
+/*
+ * Set certificate file for SSL context
+ */
+
+int websSSLSetCertFile(char_t *certFile)
+{
+ a_assert (sslctx);
+ a_assert (certFile);
+
+ if (sslctx == NULL) {
+ return -1;
+ }
+
+ if (SSL_CTX_use_certificate_file(sslctx, certFile,
+ SSL_FILETYPE_PEM) <= 0) {
+ return -1;
+ }
+/*
+ * Confirm that the certificate and the private key jive.
+ */
+ if (!SSL_CTX_check_private_key(sslctx)) {
+ return -1;
+ }
+
+ return 0;
+}
+
+/******************************************************************************/
+/*
+ * Set key file for SSL context
+ */
+
+int websSSLSetKeyFile(char_t *keyFile)
+{
+ a_assert (sslctx);
+ a_assert (keyFile);
+
+ if (sslctx == NULL) {
+ return -1;
+ }
+
+ if (SSL_CTX_use_PrivateKey_file(sslctx, keyFile, SSL_FILETYPE_PEM) <= 0) {
+ return -1;
+ }
+/*
+ * Confirm that the certificate and the private key jive.
+ */
+ if (!SSL_CTX_check_private_key(sslctx)) {
+ return -1;
+ }
+
+ return 0;
+}
+
+#ifdef SSLC
+extern RSA *RSA_new(void);
+#endif
+
+/******************************************************************************/
+/*
+ * the Temporary RSA callback
+ */
+
+static RSA *websSSLTempRSACallback(SSL *ssl, int isExport, int keyLength)
+{
+ static RSA *rsaTemp = NULL;
+
+ if (rsaTemp == NULL) {
+
+#ifdef OPENSSL
+ rsaTemp = RSA_generate_key(keyLength, RSA_F4, NULL, NULL);
+#endif
+
+#ifdef SSLC
+ rsaTemp = RSA_new();
+#endif
+
+ }
+
+ return rsaTemp;
+}
+
+/******************************************************************************/
+/*
+ * Free SSL resources
+ */
+
+int websSSLFree(websSSL_t *wsp)
+{
+ if (wsp == NULL) {
+ return -1;
+ }
+
+/*
+ * Make sure we re-use sessions
+ */
+ if (wsp->ssl != NULL) {
+ SSL_set_shutdown(wsp->ssl, SSL_SENT_SHUTDOWN | SSL_RECEIVED_SHUTDOWN);
+ }
+
+ if (wsp->bio != NULL) {
+ BIO_free_all(wsp->bio);
+ }
+
+ bfree(B_L, wsp);
+
+ return 0;
+}
+
+/******************************************************************************/
+/*
+ * Return Eof for the SSL BIO
+ */
+
+int websSSLEof(websSSL_t *wsp)
+{
+ a_assert(wsp);
+
+ if ((wsp == NULL) || (wsp->bio == NULL)) {
+ return -1;
+ }
+
+ return BIO_eof(wsp->bio);
+}
+
+/******************************************************************************/
+/*
+ * Perform a read of the SSL BIO
+ */
+
+int websSSLRead(websSSL_t *wsp, char_t *buf, int len)
+{
+ a_assert(wsp);
+ a_assert(buf);
+
+ if ((wsp == NULL) || (wsp->bio == NULL)) {
+ return -1;
+ }
+
+ return BIO_read(wsp->bio, buf, len);
+}
+
+/******************************************************************************/
+/*
+ * Perform a gets of the SSL BIO, returning an balloc'ed string
+ */
+
+#define BUF_BLOCK 256
+
+int websSSLGets(websSSL_t *wsp, char_t **buf)
+{
+ int rc, len, lenBuf;
+ char c;
+
+ a_assert(wsp);
+ a_assert(buf);
+
+ lenBuf = 0;
+ len = 0;
+
+ if ((wsp == NULL) || (wsp->bio == NULL)) {
+ return -1;
+ }
+
+ while (1) {
+
+ if ((rc = BIO_read(wsp->bio, &c, 1)) < 0) {
+ return rc;
+ }
+
+ if (rc == 0) {
+/*
+ * If there is a partial line and we are at EOF, pretend we saw a '\n'
+ */
+ if (len > 0 && BIO_eof(wsp->bio)) {
+ c = '\n';
+ } else {
+ return -1;
+ }
+ }
+/*
+ * If a newline is seen, return the data excluding the new line to the
+ * caller. If carriage return is seen, just eat it.
+ */
+ if (c == '\n') {
+ if ((len > 0) && (len < lenBuf)) {
+ (*buf)[len] = 0;
+ }
+ return len;
+ } else if (c == '\r') {
+ continue;
+ }
+/*
+ * Append character to buf
+ */
+ if (len >= lenBuf) {
+ lenBuf += BUF_BLOCK;
+ *buf = brealloc(B_L, *buf, lenBuf);
+ }
+
+ a_assert(*buf);
+ (*buf)[len] = c;
+ len++;
+ }
+}
+
+/******************************************************************************/
+/*
+ * Perform a write to the SSL BIO
+ */
+
+int websSSLWrite(websSSL_t *wsp, char_t *buf, int len)
+{
+ a_assert(wsp);
+ a_assert(buf);
+
+ if ((wsp == NULL) || (wsp->bio == NULL)) {
+ return -1;
+ }
+
+ return BIO_write(wsp->bio, buf, len);
+}
+
+/******************************************************************************/
+/*
+ * Perform a flush of the SSL BIO
+ */
+
+int websSSLFlush(websSSL_t *wsp)
+{
+ a_assert(wsp);
+
+ if ((wsp == NULL) || (wsp->bio == NULL)) {
+ return -1;
+ }
+
+ return BIO_flush(wsp->bio);
+}
+
+/******************************************************************************/
+
+#endif
diff --git a/cleopatre/application/spidgoahead/websSSL.h b/cleopatre/application/spidgoahead/websSSL.h
new file mode 100644
index 0000000000..1afec14310
--- /dev/null
+++ b/cleopatre/application/spidgoahead/websSSL.h
@@ -0,0 +1,66 @@
+/*
+ * websSSL.h -- SSL Patch header
+ *
+ * Copyright (c) GoAhead Software Inc., 1992-2000. All Rights Reserved.
+ *
+ * See the file "license.txt" for information on usage and redistribution
+ *
+ * $Id: websSSL.h,v 1.3 2003/09/29 19:50:50 bporter Exp $
+ */
+
+#ifndef _h_websSSL
+#define _h_websSSL 1
+
+/******************************** Description *********************************/
+
+/*
+ * Header file for the GoAhead Patch for SSL. This defines the interface to
+ * integrate SSL into the GoAhead Webserver.
+ */
+
+/********************************* Includes ***********************************/
+
+
+#ifdef OPENSSL
+#define SSLEAY /* turn off a few special case MONOLITH macros */
+#define USE_SOCKETS /* needed for the _O_BINARY defs in the MS world */
+#include <openssl/ssl.h>
+#else
+#include <sslc.h>
+#endif
+
+#ifndef UEMF
+ #include "basic/basic.h"
+ #include "emf/emf.h"
+#else
+ #include "uemf.h"
+#endif
+
+/********************************** Defines ***********************************/
+typedef struct {
+ SSL *ssl;
+ BIO *bio;
+} websSSL_t;
+
+/******************************** Prototypes **********************************/
+
+extern int websSSLOpen();
+extern int websSSLIsOpen();
+extern void websSSLClose();
+
+extern int websSSLWrite(websSSL_t *wsp, char_t *buf, int nChars);
+extern int websSSLGets(websSSL_t *wsp, char_t **buf);
+extern int websSSLRead(websSSL_t *wsp, char_t *buf, int nChars);
+extern int websSSLEof(websSSL_t *wsp);
+
+extern int websSSLFree(websSSL_t *wsp);
+extern int websSSLFlush(websSSL_t *wsp);
+
+extern int websSSLSetKeyFile(char_t *keyFile);
+extern int websSSLSetCertFile(char_t *certFile);
+
+
+#endif /* _h_websSSL */
+
+/*****************************************************************************/
+
diff --git a/cleopatre/application/spidgoahead/websda.c b/cleopatre/application/spidgoahead/websda.c
new file mode 100644
index 0000000000..979c89abd7
--- /dev/null
+++ b/cleopatre/application/spidgoahead/websda.c
@@ -0,0 +1,245 @@
+/*
+ * websda.c -- Digest Access Authentication routines
+ *
+ * Copyright (c) GoAhead Software Inc., 1995-2000. All Rights Reserved.
+ *
+ * See the file "license.txt" for usage and redistribution license requirements
+ *
+ * $Id: websda.c,v 1.2 2002/10/24 14:44:50 bporter Exp $
+ */
+
+/******************************** Description *********************************/
+
+/*
+ * Routines for generating DAA data. The module uses the
+ * "RSA Data Security, Inc. MD5 Message-Digest Algorithm" found in md5c.c
+ */
+
+/********************************* Includes ***********************************/
+
+#ifndef CE
+#include <time.h>
+#endif
+#include "websda.h"
+#include "md5.h"
+
+/******************************** Local Data **********************************/
+
+#define RANDOMKEY T("onceuponatimeinparadise")
+#define NONCE_SIZE 34
+#define HASH_SIZE 16
+
+/*********************************** Code *************************************/
+/*
+ * websMD5binary returns the MD5 hash
+ */
+
+char *websMD5binary(unsigned char *buf, int length)
+{
+ const char *hex = "0123456789abcdef";
+ MD5_CONTEXT md5ctx;
+ unsigned char hash[HASH_SIZE];
+ char *r, *strReturn;
+ char result[(HASH_SIZE * 2) + 1];
+ int i;
+
+/*
+ * Take the MD5 hash of the string argument.
+ */
+ MD5Init(&md5ctx);
+ MD5Update(&md5ctx, buf, (unsigned int)length);
+ MD5Final(hash, &md5ctx);
+
+/*
+ * Prepare the resulting hash string
+ */
+ for (i = 0, r = result; i < 16; i++) {
+ *r++ = hex[hash[i] >> 4];
+ *r++ = hex[hash[i] & 0xF];
+ }
+
+/*
+ * Zero terminate the hash string
+ */
+ *r = '\0';
+
+/*
+ * Allocate a new copy of the hash string
+ */
+ strReturn = balloc(B_L, sizeof(result));
+ strcpy(strReturn, result);
+
+ return strReturn;
+}
+
+/*****************************************************************************/
+/*
+ * Convenience call to websMD5binary
+ * (Performs char_t to char conversion and back)
+ */
+
+char_t *websMD5(char_t *string)
+{
+ char_t *strReturn;
+
+ a_assert(string && *string);
+
+ if (string && *string) {
+ char *strTemp, *strHash;
+ int nLen;
+/*
+ * Convert input char_t string to char string
+ */
+ nLen = gstrlen(string);
+ strTemp = ballocUniToAsc(string, nLen + 1);
+/*
+ * Execute the digest calculation
+ */
+ strHash = websMD5binary((unsigned char *)strTemp, nLen);
+/*
+ * Convert the returned char string digest to a char_t string
+ */
+ nLen = strlen(strHash);
+ strReturn = ballocAscToUni(strHash, nLen);
+/*
+ * Free up the temporary allocated resources
+ */
+ bfree(B_L, strTemp);
+ bfree(B_L, strHash);
+ } else {
+ strReturn = NULL;
+ }
+
+ return strReturn;
+}
+
+/******************************************************************************/
+/*
+ * Get a Nonce value for passing along to the client. This function
+ * composes the string "RANDOMKEY:timestamp:myrealm" and
+ * calculates the MD5 digest placing it in output.
+ */
+
+char_t *websCalcNonce(webs_t wp)
+{
+ char_t *nonce, *prenonce;
+ struct tm *newtime;
+ time_t longTime;
+
+ a_assert(wp);
+/*
+ * Get time as long integer.
+ */
+ time(&longTime);
+/*
+ * Convert to local time.
+ */
+ newtime = localtime(&longTime);
+/*
+ * Create prenonce string.
+ */
+ prenonce = NULL;
+#ifdef DIGEST_ACCESS_SUPPORT
+ fmtAlloc(&prenonce, 256, T("%s:%s:%s"), RANDOMKEY, gasctime(newtime),
+ wp->realm);
+#else
+ fmtAlloc(&prenonce, 256, T("%s:%s:%s"), RANDOMKEY, gasctime(newtime),
+ RANDOMKEY);
+#endif
+ a_assert(prenonce);
+/*
+ * Create the nonce
+ */
+ nonce = websMD5(prenonce);
+/*
+ * Cleanup
+ */
+ bfreeSafe(B_L, prenonce);
+
+ return nonce;
+}
+
+/******************************************************************************/
+/*
+ * Get an Opaque value for passing along to the client
+ */
+
+char_t *websCalcOpaque(webs_t wp)
+{
+ char_t *opaque;
+ a_assert(wp);
+/*
+ * Temporary stub!
+ */
+ opaque = bstrdup(B_L, T("5ccc069c403ebaf9f0171e9517f40e41"));
+
+ return opaque;
+}
+
+/******************************************************************************/
+/*
+ * Get a Digest value using the MD5 algorithm
+ */
+
+char_t *websCalcDigest(webs_t wp)
+{
+#ifdef DIGEST_ACCESS_SUPPORT
+ char_t *digest, *a1, *a1prime, *a2, *a2prime, *preDigest, *method;
+
+ a_assert(wp);
+ digest = NULL;
+
+/*
+ * Calculate first portion of digest H(A1)
+ */
+ a1 = NULL;
+ fmtAlloc(&a1, 255, T("%s:%s:%s"), wp->userName, wp->realm, wp->password);
+ a_assert(a1);
+ a1prime = websMD5(a1);
+ bfreeSafe(B_L, a1);
+/*
+ * Calculate second portion of digest H(A2)
+ */
+ method = websGetVar(wp, T("REQUEST_METHOD"), NULL);
+ a_assert(method);
+ a2 = NULL;
+ fmtAlloc(&a2, 255, T("%s:%s"), method, wp->uri);
+ a_assert(a2);
+ a2prime = websMD5(a2);
+ bfreeSafe(B_L, a2);
+/*
+ * Construct final digest KD(H(A1):nonce:H(A2))
+ */
+ a_assert(a1prime);
+ a_assert(a2prime);
+ a_assert(wp->nonce);
+
+ preDigest = NULL;
+ if (!wp->qop) {
+ fmtAlloc(&preDigest, 255, T("%s:%s:%s"), a1prime, wp->nonce, a2prime);
+ } else {
+ fmtAlloc(&preDigest, 255, T("%s:%s:%s:%s:%s:%s"),
+ a1prime,
+ wp->nonce,
+ wp->nc,
+ wp->cnonce,
+ wp->qop,
+ a2prime);
+ }
+
+ a_assert(preDigest);
+ digest = websMD5(preDigest);
+/*
+ * Now clean up
+ */
+ bfreeSafe(B_L, a1prime);
+ bfreeSafe(B_L, a2prime);
+ bfreeSafe(B_L, preDigest);
+ return digest;
+#else
+ return NULL;
+#endif /* DIGEST_ACCESS_SUPPORT */
+}
+
+/******************************************************************************/
+
diff --git a/cleopatre/application/spidgoahead/websda.h b/cleopatre/application/spidgoahead/websda.h
new file mode 100644
index 0000000000..e19392c048
--- /dev/null
+++ b/cleopatre/application/spidgoahead/websda.h
@@ -0,0 +1,42 @@
+/*
+ * websda.h -- GoAhead Digest Access Authentication public header
+ *
+ * Copyright (c) GoAhead Software Inc., 1992-2000. All Rights Reserved.
+ *
+ * See the file "license.txt" for information on usage and redistribution
+ *
+ * $Id: websda.h,v 1.3 2002/10/24 14:44:50 bporter Exp $
+ */
+
+#ifndef _h_WEBSDA
+#define _h_WEBSDA 1
+
+/******************************** Description *********************************/
+
+/*
+ * GoAhead Digest Access Authentication header. This defines the Digest
+ * access authentication public APIs. Include this header for files that
+ * use DAA functions
+ */
+
+/********************************* Includes ***********************************/
+
+#ifndef UEMF
+ #include "basic/basic.h"
+ #include "emf/emf.h"
+#else
+ #include "uemf.h"
+#endif
+
+#include "webs.h"
+
+/****************************** Definitions ***********************************/
+
+extern char_t *websCalcNonce(webs_t wp);
+extern char_t *websCalcOpaque(webs_t wp);
+extern char_t *websCalcDigest(webs_t wp);
+
+#endif /* _h_WEBSDA */
+
+/******************************************************************************/
+
diff --git a/cleopatre/application/spidgoahead/websuemf.c b/cleopatre/application/spidgoahead/websuemf.c
new file mode 100644
index 0000000000..63a6926271
--- /dev/null
+++ b/cleopatre/application/spidgoahead/websuemf.c
@@ -0,0 +1,218 @@
+/*
+ * websuemf.c -- GoAhead Micro Embedded Management Framework
+ *
+ * Copyright (c) GoAhead Software Inc., 1995-2000. All Rights Reserved.
+ *
+ * See the file "license.txt" for usage and redistribution license requirements
+ *
+ * $Id: websuemf.c,v 1.4 2002/10/24 14:44:50 bporter Exp $
+ */
+
+/********************************** Description *******************************/
+
+/*
+ * This modules provides compatibility with the full GoAhead EMF.
+ */
+
+/*********************************** Includes *********************************/
+
+#include "ejIntrn.h"
+#include "wsIntrn.h"
+
+/*********************************** Defines **********************************/
+
+/*
+ * This structure stores scheduled events.
+ */
+typedef struct {
+ void (*routine)(void *arg, int id);
+ void *arg;
+ time_t at;
+ int schedid;
+} sched_t;
+
+/*********************************** Locals ***********************************/
+
+static sched_t **sched;
+static int schedMax;
+
+/************************************* Code ***********************************/
+/*
+ * Evaluate a script
+ */
+
+int scriptEval(int engine, char_t *cmd, char_t **result, int chan)
+{
+ int ejid;
+
+ if (engine == EMF_SCRIPT_EJSCRIPT) {
+ ejid = (int) chan;
+ /*
+ * NOTE -- to disable better reporting of ASP errors, change the
+ * following line of code to
+ * if (ejEval(ejid, cmd, NULL) ) {
+ */
+ if (ejEval(ejid, cmd, result) ) {
+ return 0;
+ } else {
+ return -1;
+ }
+ }
+ return -1;
+}
+
+/******************************************************************************/
+/*
+ * Compare strings, ignoring case: normal strcmp return codes.
+ *
+ * WARNING: It is not good form to increment or decrement pointers inside a
+ * "call" to tolower et al. These can be MACROS, and have undesired side
+ * effects.
+ */
+
+int strcmpci(char_t *s1, char_t *s2)
+{
+ int rc;
+
+ a_assert(s1 && s2);
+ if (s1 == NULL || s2 == NULL) {
+ return 0;
+ }
+
+ if (s1 == s2) {
+ return 0;
+ }
+
+ do {
+ rc = gtolower(*s1) - gtolower(*s2);
+ if (*s1 == '\0') {
+ break;
+ }
+ s1++;
+ s2++;
+ } while (rc == 0);
+ return rc;
+}
+
+/******************************************************************************/
+/*
+ * This function is called when a scheduled process time has come.
+ */
+
+void TimerProc(int schedid)
+{
+ sched_t *s;
+
+ a_assert(0 <= schedid && schedid < schedMax);
+ s = sched[schedid];
+ a_assert(s);
+
+ (s->routine)(s->arg, s->schedid);
+}
+
+/******************************************************************************/
+/*
+ * Schedule an event in delay milliseconds time. We will use 1 second
+ * granularity for webServer.
+ */
+
+int emfSchedCallback(int delay, emfSchedProc *proc, void *arg)
+{
+ sched_t *s;
+ int schedid;
+
+ if ((schedid = hAllocEntry((void***) &sched, &schedMax,
+ sizeof(sched_t))) < 0) {
+ return -1;
+ }
+ s = sched[schedid];
+ s->routine = proc;
+ s->arg = arg;
+ s->schedid = schedid;
+
+/*
+ * Round the delay up to seconds.
+ */
+ s->at = ((delay + 500) / 1000) + time(0);
+
+ return schedid;
+}
+
+/******************************************************************************/
+/*
+ * Reschedule to a new delay.
+ */
+
+void emfReschedCallback(int schedid, int delay)
+{
+ sched_t *s;
+
+ if (sched == NULL || schedid == -1 || schedid >= schedMax ||
+ (s = sched[schedid]) == NULL) {
+ return;
+ }
+ s->at = ((delay + 500) / 1000) + time(0);
+}
+
+/******************************************************************************/
+
+void emfUnschedCallback(int schedid)
+{
+ sched_t *s;
+
+ if (sched == NULL || schedid == -1 || schedid >= schedMax ||
+ (s = sched[schedid]) == NULL) {
+ return;
+ }
+ bfree(B_L, s);
+ schedMax = hFree((void***) &sched, schedid);
+}
+
+/******************************************************************************/
+/*
+ * Take the tasks off the queue in a round robin fashion.
+ */
+
+void emfSchedProcess()
+{
+ sched_t *s;
+ int schedid;
+ static int next = 0;
+
+/*
+ * If schedMax is 0, there are no tasks scheduled, so just return.
+ */
+ if (schedMax <= 0) {
+ return;
+ }
+
+/*
+ * If next >= schedMax, the schedule queue was reduced in our absence
+ * so reset next to 0 to start from the begining of the queue again.
+ */
+ if (next >= schedMax) {
+ next = 0;
+ }
+
+ schedid = next;
+ for (;;) {
+ if ((s = sched[schedid]) != NULL && (int)s->at <= (int)time(0)) {
+ TimerProc(schedid);
+ next = schedid + 1;
+ return;
+ }
+ if (++schedid >= schedMax) {
+ schedid = 0;
+ }
+ if (schedid == next) {
+/*
+ * We've gone all the way through the queue without finding
+ * anything to do so just return.
+ */
+ return;
+ }
+ }
+}
+
+/******************************************************************************/
+
diff --git a/cleopatre/application/spidgoahead/wsIntrn.h b/cleopatre/application/spidgoahead/wsIntrn.h
new file mode 100644
index 0000000000..d3b1e7da7e
--- /dev/null
+++ b/cleopatre/application/spidgoahead/wsIntrn.h
@@ -0,0 +1,310 @@
+/*
+ * wsIntrn.h -- Internal GoAhead Web server header
+ *
+ * Copyright (c) GoAhead Software Inc., 1992-2000. All Rights Reserved.
+ *
+ * See the file "license.txt" for information on usage and redistribution
+ *
+ * $Id: wsIntrn.h,v 1.4 2002/10/24 14:44:50 bporter Exp $
+ */
+
+#ifndef _h_WEBS_INTERNAL
+#define _h_WEBS_INTERNAL 1
+
+/******************************** Description *********************************/
+
+/*
+ * Internal GoAhead Web Server header. This defines the Web private APIs
+ * Include this header when you want to create URL handlers.
+ */
+
+/*********************************** Defines **********************************/
+
+/*
+ * Define this to enable logging of web accesses to a file
+ * #define WEBS_LOG_SUPPORT 1
+ *
+ * Define this to enable HTTP/1.1 keep alive support
+ * #define WEBS_KEEP_ALIVE_SUPPORT 1
+ *
+ * Define this to enable if-modified-since support
+ * #define WEBS_IF_MODIFIED_SUPPORT 1
+ *
+ * Define this to support proxy capability and track local vs remote request
+ * Note: this is not yet fully implemented.
+ * #define WEBS_PROXY_SUPPORT 1
+ *
+ * Define this to support reading pages from ROM
+ * #define WEBS_PAGE_ROM 1
+ *
+ * Define this to enable memory allocation and stack usage tracking
+ * #define B_STATS 1
+ */
+
+/********************************** Includes **********************************/
+
+#include <ctype.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdarg.h>
+
+#ifdef NETWARE
+ #include <fcntl.h>
+ #include <sys/stat.h>
+ #include <signal.h>
+ #include <io.h>
+#endif
+
+#ifdef WIN
+ #include <fcntl.h>
+ #include <sys/stat.h>
+ #include <io.h>
+#endif
+
+#ifdef CE
+#ifndef UEMF
+ #include <io.h>
+#endif
+#endif
+
+#ifdef NW
+ #include <fcntl.h>
+ #include <sys/stat.h>
+#endif
+
+#ifdef SCOV5
+ #include <fcntl.h>
+ #include <sys/stat.h>
+ #include <signal.h>
+ #include <unistd.h>
+#endif
+
+#ifdef LYNX
+ #include <fcntl.h>
+ #include <sys/stat.h>
+ #include <signal.h>
+ #include <unistd.h>
+#endif
+
+#ifdef UNIX
+ #include <fcntl.h>
+ #include <sys/stat.h>
+ #include <signal.h>
+ #include <unistd.h>
+#endif
+
+#ifdef QNX4
+ #include <fcntl.h>
+ #include <sys/stat.h>
+ #include <signal.h>
+ #include <unistd.h>
+ #include <unix.h>
+#endif
+
+#ifdef UW
+ #include <fcntl.h>
+ #include <sys/stat.h>
+#endif
+
+#ifdef VXWORKS
+ #include <vxWorks.h>
+ #include <fcntl.h>
+ #include <sys/stat.h>
+#endif
+
+#ifdef SOLARIS
+ #include <macros.h>
+ #include <fcntl.h>
+ #include <sys/stat.h>
+#endif
+
+#ifdef UEMF
+ #include "uemf.h"
+ #include "ejIntrn.h"
+#else
+ #include "emf/emfInternal.h"
+ #include "ej/ejIntrn.h"
+#endif
+
+#include "webs.h"
+
+/********************************** Defines ***********************************/
+/*
+ * Read handler flags and state
+ */
+#define WEBS_BEGIN 0x1 /* Beginning state */
+#define WEBS_HEADER 0x2 /* Ready to read first line */
+#define WEBS_POST 0x4 /* POST without content */
+#define WEBS_POST_CLEN 0x8 /* Ready to read content for POST */
+#define WEBS_PROCESSING 0x10 /* Processing request */
+#define WEBS_KEEP_TIMEOUT 15000 /* Keep-alive timeout (15 secs) */
+#define WEBS_TIMEOUT 60000 /* General request timeout (60) */
+
+#define PAGE_READ_BUFSIZE 512 /* bytes read from page files */
+#define MAX_PORT_LEN 10 /* max digits in port number */
+#define WEBS_SYM_INIT 64 /* initial # of sym table entries */
+
+/*
+ * URL handler structure. Stores the leading URL path and the handler
+ * function to call when the URL path is seen.
+ */
+typedef struct {
+ int (*handler)(webs_t wp, char_t *urlPrefix, char_t *webDir, int arg,
+ char_t *url, char_t *path,
+ char_t *query); /* Callback URL handler function */
+ char_t *webDir; /* Web directory if required */
+ char_t *urlPrefix; /* URL leading prefix */
+ int len; /* Length of urlPrefix for speed */
+ int arg; /* Argument to provide to handler */
+ int flags; /* Flags */
+} websUrlHandlerType;
+
+/*
+ * Webs statistics
+ */
+typedef struct {
+ long errors; /* General errors */
+ long redirects;
+ long net_requests;
+ long activeNetRequests;
+ long activeBrowserRequests;
+ long timeouts;
+ long access; /* Access violations */
+ long localHits;
+ long remoteHits;
+ long formHits;
+ long cgiHits;
+ long handlerHits;
+} websStatsType;
+
+extern websStatsType websStats; /* Web access stats */
+
+/*
+ * Error code list
+ */
+typedef struct {
+ int code; /* HTTP error code */
+ char_t *msg; /* HTTP error message */
+} websErrorType;
+
+/*
+ * Mime type list
+ */
+typedef struct {
+ char_t *type; /* Mime type */
+ char_t *ext; /* File extension */
+} websMimeType;
+
+/*
+ * File information structure.
+ */
+typedef struct {
+ unsigned long size; /* File length */
+ int isDir; /* Set if directory */
+ time_t mtime; /* Modified time */
+} websStatType;
+
+/*
+ * Compiled Rom Page Index
+ */
+typedef struct {
+ char_t *path; /* Web page URL path */
+ unsigned char *page; /* Web page data */
+ int size; /* Size of web page in bytes */
+ int pos; /* Current read position */
+} websRomPageIndexType;
+
+/*
+ * Defines for file open.
+ */
+#ifndef CE
+#define SOCKET_RDONLY O_RDONLY
+#define SOCKET_BINARY O_BINARY
+#else /* CE */
+#define SOCKET_RDONLY 0x1
+#define SOCKET_BINARY 0x2
+#endif /* CE */
+
+extern websRomPageIndexType websRomPageIndex[];
+extern websMimeType websMimeList[]; /* List of mime types */
+extern sym_fd_t websMime; /* Set of mime types */
+extern webs_t* webs; /* Session list head */
+extern int websMax; /* List size */
+extern char_t websHost[64]; /* Name of this host */
+extern char_t websIpaddr[64]; /* IP address of this host */
+extern char_t *websHostUrl; /* URL for this host */
+extern char_t *websIpaddrUrl; /* URL for this host */
+extern int websPort; /* Port number */
+
+/******************************** Prototypes **********************************/
+
+extern int websAspOpen();
+extern void websAspClose();
+extern void websFormOpen();
+extern void websFormClose();
+extern int websAspWrite(int ejid, webs_t wp, int argc, char_t **argv);
+extern void websDefaultClose();
+extern int websDefaultHandler(webs_t wp, char_t *urlPrefix,
+ char_t *webDir, int arg, char_t *url, char_t *path,
+ char_t *query);
+extern int websFormHandler(webs_t wp, char_t *urlPrefix, char_t *webDir,
+ int arg, char_t *url, char_t *path, char_t *query);
+extern int websCgiHandler(webs_t wp, char_t *urlPrefix, char_t *webDir,
+ int arg, char_t *url, char_t *path, char_t *query);
+extern void websCgiCleanup();
+extern int websCheckCgiProc(int handle);
+extern char_t *websGetCgiCommName();
+
+extern int websLaunchCgiProc(char_t *cgiPath, char_t **argp,
+ char_t **envp, char_t *stdIn, char_t *stdOut);
+extern int websOpen(int sid);
+extern void websResponse(webs_t wp, int code, char_t *msg,
+ char_t *redirect);
+extern int websJavaScriptEval(webs_t wp, char_t *script);
+extern int websPageReadData(webs_t wp, char *buf, int nBytes);
+extern int websPageOpen(webs_t wp, char_t *lpath, char_t *path, int mode,
+ int perm);
+extern void websPageClose(webs_t wp);
+extern void websPageSeek(webs_t wp, long offset);
+extern int websPageStat(webs_t wp, char_t *lpath, char_t *path,
+ websStatType *sbuf);
+extern int websPageIsDirectory(char_t *lpath);
+extern int websRomOpen();
+extern void websRomClose();
+extern int websRomPageOpen(webs_t wp, char_t *path, int mode, int perm);
+extern void websRomPageClose(int fd);
+extern int websRomPageReadData(webs_t wp, char *buf, int len);
+extern int websRomPageStat(char_t *path, websStatType *sbuf);
+extern long websRomPageSeek(webs_t wp, long offset, int origin);
+extern void websSetRequestSocketHandler(webs_t wp, int mask,
+ void (*fn)(webs_t wp));
+extern int websSolutionHandler(webs_t wp, char_t *urlPrefix,
+ char_t *webDir, int arg, char_t *url, char_t *path,
+ char_t *query);
+extern void websUrlHandlerClose();
+extern int websUrlHandlerOpen();
+extern int websOpenServer(int port, int retries);
+extern void websCloseServer();
+extern char_t* websGetDateString(websStatType* sbuf);
+
+extern int strcmpci(char_t* s1, char_t* s2);
+
+/*
+ * Prototypes for functions available when running as part of the
+ * GoAhead Embedded Management Framework (EMF)
+ */
+#ifdef EMF
+extern int websEmfOpen();
+extern void websEmfClose();
+extern void websSetEmfEnvironment(webs_t wp);
+#endif
+
+#ifdef CE
+extern int writeUniToAsc(int fid, void *buf, unsigned int len);
+extern int readAscToUni(int fid, void **buf, unsigned int len);
+#endif
+
+#endif /* _h_WEBS_INTERNAL */
+
+/******************************************************************************/
+
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 , snmpt