123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182 |
- #include "stm32f4xx.h"
- #if 0
- #include "private_mib.h"
- #include "lwip/snmp.h"
- #include "lwip/snmp_msg.h"
- #include "lwip/snmp_asn1.h"
- #include "lwip/snmp_structs.h"
- #include "settings_api.h"
- #include "parameters.h"
- #include "web_params_api.h"
- #include "snmp_api.h"
- #include "trap_api.h"
- #include "common_config.h"
- #include "log.h"
- #include "megatec.h"
- #include "FreeRTOS.h"
- #include "task.h"
- #ifdef PRINTF_STDLIB
- #include <stdio.h>
- #endif
- #ifdef PRINTF_CUSTOM
- #include "tinystdio.h"
- #endif
- #include <stdlib.h>
- /**
- * @brief Общая структура настроек
- */
- extern SETTINGS_t sSettings;
- extern float TimeParamFloat;
- extern void ocstrncpy(u8_t *dst, u8_t *src, u16_t n);
- char paramStr[255];
- uint8_t paramLength = 0;
- uint32_t paramInt = 0;
- static void system_get_object_def_ee( u8_t ident_len, s32_t *ident, struct obj_def *od );
- static void system_get_value_ee(struct obj_def *od, u16_t len, void *value);
- static u8_t system_set_test_ee(struct obj_def *od, u16_t len, void *value);
- static void system_set_value_ee(struct obj_def *od, u16_t len, void *value);
- /* Функции для узла Signals */
- static void signals_get_object_def (u8_t ident_len, s32_t *ident, struct obj_def *od);
- static void signals_get_value (struct obj_def *od, u16_t len, void *value);
- static u8_t signals_set_test (struct obj_def *od, u16_t len, void *value);
- static void signals_set_value (struct obj_def *od, u16_t len, void *value);
- /*------------------------------------------------------------------------------
- Описание узлов
- ------------------------------------------------------------------------------*/
- /* узел SYSTEM (операции с EEPROM) */
- /* 0 1 2 3 4 5 6 */
- /* system .1.3.6.1.2.1.1 */
- const mib_scalar_node system_scalar_ee = {
- &system_get_object_def_ee,
- &system_get_value_ee,
- &system_set_test_ee,
- &system_set_value_ee,
- MIB_NODE_SC,
- 0
- };
- // переменные узла SIGNALS ------------------------------------------
- const mib_scalar_node signals_var =
- {
- &signals_get_object_def,
- &signals_get_value,
- &signals_set_test,
- &signals_set_value,
- MIB_NODE_SC,
- 0
- };
- // узел SIGNALS -----------------------------------------------------
- const s32_t signals_ids[18] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18 };
- struct mib_node* const signals_nodes[18] =
- {
- (struct mib_node* const)&signals_var,
- (struct mib_node* const)&signals_var,
- (struct mib_node* const)&signals_var,
- (struct mib_node* const)&signals_var,
- (struct mib_node* const)&signals_var,
- (struct mib_node* const)&signals_var,
- (struct mib_node* const)&signals_var,
- (struct mib_node* const)&signals_var,
- (struct mib_node* const)&signals_var,
- (struct mib_node* const)&signals_var,
- (struct mib_node* const)&signals_var,
- (struct mib_node* const)&signals_var,
- (struct mib_node* const)&signals_var,
- (struct mib_node* const)&signals_var,
- (struct mib_node* const)&signals_var,
- (struct mib_node* const)&signals_var,
- (struct mib_node* const)&signals_var,
- (struct mib_node* const)&signals_var,
- };
- const struct mib_array_node signals =
- {
- &noleafs_get_object_def,
- &noleafs_get_value,
- &noleafs_set_test,
- &noleafs_set_value,
- MIB_NODE_AR,
- 18,
- signals_ids,
- signals_nodes
- };
- // узел BT-6701 ------------------------------------------------------------
- const s32_t bt6701_ids[1] = { 1 };
- struct mib_node* const bt6701_nodes[1] =
- {
- (struct mib_node* const)&signals,
- };
- const struct mib_array_node bt6701 =
- {
- &noleafs_get_object_def,
- &noleafs_get_value,
- &noleafs_set_test,
- &noleafs_set_value,
- MIB_NODE_AR,
- 1,
- bt6701_ids,
- bt6701_nodes
- };
- // узел swt ------------------------------------------------------------
- const s32_t swt_ids[1] = {
- 3
- };
- struct mib_node* const swt_nodes[1] =
- {
- (struct mib_node* const)&bt6701,
- };
- const struct mib_array_node swt =
- {
- &noleafs_get_object_def,
- &noleafs_get_value,
- &noleafs_set_test,
- &noleafs_set_value,
- MIB_NODE_AR,
- 1,
- swt_ids,
- swt_nodes
- };
- // узел ROTEK ------------------------------------------------------------
- const s32_t rotek_ids[1] = { 911 };
- struct mib_node* const rotek_nodes[1] =
- {
- (struct mib_node* const)&swt,
- };
- const struct mib_array_node rotek =
- {
- &noleafs_get_object_def,
- &noleafs_get_value,
- &noleafs_set_test,
- &noleafs_set_value,
- MIB_NODE_AR,
- 1,
- rotek_ids,
- rotek_nodes
- };
- // узел ENTERPRISES -------------------------------------------------------
- const s32_t enterprises_ids[1] = { 41752 };
- struct mib_node* const enterprises_nodes[1] =
- {
- (struct mib_node* const)&rotek
- };
- const struct mib_array_node enterprises =
- {
- &noleafs_get_object_def,
- &noleafs_get_value,
- &noleafs_set_test,
- &noleafs_set_value,
- MIB_NODE_AR,
- 1,
- enterprises_ids,
- enterprises_nodes
- };
- // узел PRIVATE -----------------------------------------------------------
- const s32_t mib_private_ids[1] = { 1 };
- struct mib_node* const mib_pivate_nodes[1] =
- {
- (struct mib_node* const)&enterprises
- };
- const struct mib_array_node mib_private =
- {
- &noleafs_get_object_def,
- &noleafs_get_value,
- &noleafs_set_test,
- &noleafs_set_value,
- MIB_NODE_AR,
- 1,
- mib_private_ids,
- mib_pivate_nodes
- };
- /*------------------------------------------------------------------------------
- Функции
- ------------------------------------------------------------------------------*/
- // Функции для узла SIGNALS
- /**-----------------------------------------------------------------------------
- \fn static void signals_get_object_def (u8_t ident_len, s32_t *ident, struct obj_def *od)
- \brief функция получения свойств переменных узла Identification
- \param ident_len - the address length. длина адреса
- \param ident - points to objectname.0 (object id trailer)
- \param od - points to object definition. указатель на описание переменной
- \return нет
- ------------------------------------------------------------------------------*/
- static void signals_get_object_def (u8_t ident_len, s32_t *ident, struct obj_def *od)
- {
- u8_t id;
-
- /* return to object name, adding index depth (1) */
- ident_len += 1;
- ident -= 1;
- if (ident_len == 2)
- {
- od->id_inst_len = ident_len;
- od->id_inst_ptr = ident;
- id = ident[0];
-
- switch (id)
- {
- case 1: /* FWVersion */
- GetVersionStr(paramStr, ¶mLength);
- od->instance = MIB_OBJECT_SCALAR;
- od->access = MIB_OBJECT_READ_ONLY;
- od->asn_type = SNMP_ASN1_OC_STR;
- od->v_len = paramLength;
- break;
- case 2: /* RestoreSignal */
- od->instance = MIB_OBJECT_SCALAR;
- od->access = MIB_OBJECT_WRITE_ONLY;
- od->asn_type = SNMP_ASN1_INTEG;
- od->v_len = sizeof(s32_t);
- break;
- case 3: /* RebootSignal */
- od->instance = MIB_OBJECT_SCALAR;
- od->access = MIB_OBJECT_WRITE_ONLY;
- od->asn_type = SNMP_ASN1_INTEG;
- od->v_len = sizeof(s32_t);
- break;
- case 4: /* UPSModel*/
- GetUPSModelStr(paramStr, ¶mLength);
- od->instance = MIB_OBJECT_SCALAR;
- od->access = MIB_OBJECT_READ_ONLY;
- od->asn_type = SNMP_ASN1_OC_STR;
- od->v_len = paramLength;
- break;
- case 5: /* DO1*/
- GetDOUTStatusStr(paramStr, ¶mLength, 0);
- od->instance = MIB_OBJECT_SCALAR;
- od->access = MIB_OBJECT_READ_WRITE;
- od->asn_type = SNMP_ASN1_OC_STR;
- od->v_len = paramLength;
- break;
- case 6: /* DO2*/
- GetDOUTStatusStr(paramStr, ¶mLength, 1);
- od->instance = MIB_OBJECT_SCALAR;
- od->access = MIB_OBJECT_READ_WRITE;
- od->asn_type = SNMP_ASN1_OC_STR;
- od->v_len = paramLength;
- break;
- case 7: /* BatTest*/
- od->instance = MIB_OBJECT_SCALAR;
- od->access = MIB_OBJECT_WRITE_ONLY;
- od->asn_type = SNMP_ASN1_INTEG;
- od->v_len = sizeof(s32_t);
- break;
- case 8: /* Shutdown UPS*/
- od->instance = MIB_OBJECT_SCALAR;
- od->access = MIB_OBJECT_WRITE_ONLY;
- od->asn_type = SNMP_ASN1_OC_STR;
- od->v_len = paramLength;
- break;
- case 9: /* DIO*/
- GetDINStatusStr(paramStr, ¶mLength, 0);
- od->instance = MIB_OBJECT_SCALAR;
- od->access = MIB_OBJECT_READ_ONLY;
- od->asn_type = SNMP_ASN1_OC_STR;
- od->v_len = paramLength;
- break;
- case 10: /* IntTemp */
- GetInternalTempStr(paramStr, ¶mLength);
- od->instance = MIB_OBJECT_SCALAR;
- od->access = MIB_OBJECT_READ_ONLY;
- od->asn_type = SNMP_ASN1_OC_STR;
- od->v_len = paramLength;
- break;
- case 11: /* InFreq */
- GetInputFreqStr(paramStr, ¶mLength);
- od->instance = MIB_OBJECT_SCALAR;
- od->access = MIB_OBJECT_READ_ONLY;
- od->asn_type = SNMP_ASN1_OC_STR;
- od->v_len = paramLength;
- break;
- case 12: /* InVoltVAC */
- GetInputVoltageStr(paramStr, ¶mLength);
- od->instance = MIB_OBJECT_SCALAR;
- od->access = MIB_OBJECT_READ_ONLY;
- od->asn_type = SNMP_ASN1_OC_STR;
- od->v_len = paramLength;
- break;
- case 13: /* OutVoltVAC */
- GetOutputVoltageStr(paramStr, ¶mLength);
- od->instance = MIB_OBJECT_SCALAR;
- od->access = MIB_OBJECT_READ_ONLY;
- od->asn_type = SNMP_ASN1_OC_STR;
- od->v_len = paramLength;
- break;
- case 14: /* Power */
- GetPowerStr(paramStr, ¶mLength);
- od->instance = MIB_OBJECT_SCALAR;
- od->access = MIB_OBJECT_READ_ONLY;
- od->asn_type = SNMP_ASN1_OC_STR;
- od->v_len = paramLength;
- break;
- case 15: /* BatCap */
- GetBatCapacityStr(paramStr, ¶mLength);
- od->instance = MIB_OBJECT_SCALAR;
- od->access = MIB_OBJECT_READ_ONLY;
- od->asn_type = SNMP_ASN1_OC_STR;
- od->v_len = paramLength;
- break;
- case 16: /* BatTime */
- GetRuntimeStr(paramStr, ¶mLength);
- od->instance = MIB_OBJECT_SCALAR;
- od->access = MIB_OBJECT_READ_ONLY;
- od->asn_type = SNMP_ASN1_OC_STR;
- od->v_len = paramLength;
- break;
- case 17: /* ConnectMonitor */
- GetConnectMonitorStr(paramStr, ¶mLength);
- od->instance = MIB_OBJECT_SCALAR;
- od->access = MIB_OBJECT_READ_ONLY;
- od->asn_type = SNMP_ASN1_OC_STR;
- od->v_len = paramLength;
- break;
- case 18: /* Alarms */
- GetAlarmStr(paramStr, ¶mLength);
- od->instance = MIB_OBJECT_SCALAR;
- od->access = MIB_OBJECT_READ_ONLY;
- od->asn_type = SNMP_ASN1_OC_STR;
- od->v_len = paramLength;
- break;
- default:
- //LWIP_DEBUGF(SNMP_MIB_DEBUG,("planar_get_object_def: no such object\n"));
- od->instance = MIB_OBJECT_NONE;
- break;
- };
- }
- else
- {
- LWIP_DEBUGF(SNMP_MIB_DEBUG,("planar_get_object_def: no scalar\n"));
- od->instance = MIB_OBJECT_NONE;
- }
- }
- /**-----------------------------------------------------------------------------
- \fn static void Identification_get_value(struct obj_def *od, u16_t len, void *value)
- \brief функция получения значения переменных узла Identification
- \param obj_def - указатель на описание переменной
- \param len - длина переменной в байтах
- \param value - указатель на значение переменной
- \return нет
- ------------------------------------------------------------------------------*/
- static void signals_get_value (struct obj_def *od, u16_t len, void *value)
- {
- u8_t id;
-
- id = od->id_inst_ptr[0];
-
- switch (id)
- {
- case 1: /* FWVersion */
- ocstrncpy((u8_t*)value, (u8_t*)paramStr, len);
- break;
- case 2: /* RestoreSignal */
- *((s32_t*)value) = 0;
- break;
- case 3: /* RebootSignal */
- *((s32_t*)value) = 0;
- break;
- case 4: /* UPSModel */
- ocstrncpy((u8_t*)value, (u8_t*)paramStr, len);
- break;
- case 5: /* DO1 */
- ocstrncpy((u8_t*)value, (u8_t*)paramStr, len);
- break;
- case 6: /* DO2 */
- ocstrncpy((u8_t*)value, (u8_t*)paramStr, len);
- break;
- case 7: /* BatTest */
- *((s32_t*)value) = 0;
- break;
- case 8: /* Shutdown UPS */
- *((s32_t*)value) = 0;
- break;
- case 9: /* DIO */
- ocstrncpy((u8_t*)value, (u8_t*)paramStr, len);
- break;
- case 10: /* IntTemp */
- ocstrncpy((u8_t*)value, (u8_t*)paramStr, len);
- break;
- case 11: /* InFreq */
- ocstrncpy((u8_t*)value, (u8_t*)paramStr, len);
- break;
- case 12: /* InVoltVAC */
- ocstrncpy((u8_t*)value, (u8_t*)paramStr, len);
- break;
- case 13: /* OutVoltVAC */
- ocstrncpy((u8_t*)value, (u8_t*)paramStr, len);
- break;
- case 14: /* Power */
- ocstrncpy((u8_t*)value, (u8_t*)paramStr, len);
- break;
- case 15: /* BatCap */
- ocstrncpy((u8_t*)value, (u8_t*)paramStr, len);
- break;
- case 16: /* BatTime */
- ocstrncpy((u8_t*)value, (u8_t*)paramStr, len);
- break;
- case 17: /* ConnectMonitor */
- ocstrncpy((u8_t*)value, (u8_t*)paramStr, len);
- break;
- case 18: /* Alarms */
- ocstrncpy((u8_t*)value, (u8_t*)paramStr, len);
- break;
- default :
- break;
- };
- }
- /**-----------------------------------------------------------------------------
- \fn static void Identification_set_value (struct obj_def *od, u16_t len, void *value)
- \brief функция записи значений переменных узла Identification
- \param obj_def - указатель на описание переменной
- \param len - длина переменной в байтах
- \param value - указатель на значение переменной
- \return нет
- ------------------------------------------------------------------------------*/
- static void signals_set_value (struct obj_def *od, u16_t len, void *value)
- {
- u8_t id;
- uint32_t val;
- char *val_string;
- char str[20];
- int8_t res = 0;
- memset(str, 0, 20);
-
- id = od->id_inst_ptr[0];
-
- switch (id)
- {
- case 2: /* RestoreSignal */
- val = *((s32_t*)value);
- if (val == 1) {
- SNMP_SendUserTrap(DEVICE_RESTORED);
- log_event_data(LOG_SYSTEM_DEFCONFIG, "Администратор");
- vTaskDelay(500);
- SETTINGS_SetPartDefault();
- SETTINGS_Save();
- }
- break;
- case 3: /* RebootSignal */
- val = *((s32_t*)value);
- if (val == 1){
- #ifndef BT6702_SERVICE
- SNMP_SendUserTrap(DEVICE_REBOOTED);
- log_event_data(LOG_SYSTEM_BOOT, "Администратор");
- vTaskDelay(1010);
- LOG_Disable();
- #endif
- NVIC_SystemReset();
- }
- break;
- case 5: /* DO1 */
- if(sSettings.sInOuts.ro_type_source[0] == SNMP_SET){
- val_string = (char*)value;
- SetROStr(val_string, 0);
- if(val_string[0] == 0x31)
- strcat(str, "Замкнуто");
- else
- strcat(str, "Разомкнуто");
- SNMP_SendUserTrap(DO0_TOGGLED);
- log_event_data(LOG_DO0_STATE, str);
- }
- break;
- case 6: /* DO2 */
- if(sSettings.sInOuts.ro_type_source[1] == SNMP_SET){
- val_string = (char*)value;
- SetROStr(val_string, 1);
- if(val_string[0] == 0x31)
- strcat(str, "Замкнуто");
- else
- strcat(str, "Разомкнуто");
- SNMP_SendUserTrap(DO1_TOGGLED);
- log_event_data(LOG_DO1_STATE, str);
- }
- break;
- case 7: /* BatTest */
- val =*((s32_t*)value);
- if(val == 0){
- res = ups_metac_service_pdu(ups_cancel_test);
- if(res == 1){
- log_event_data(LOG_TEST_UPS, "Администратор (Останов)");
- }
- }
- else if(val > 0 && val < 100){
- TimeParam = val;
- res = ups_metac_service_pdu(ups_test_time);
- if(res == 1){
- log_event_data(LOG_TEST_UPS, "Администратор (Запущен)");
- }
- }
- else if(val == 100){
- res = ups_metac_service_pdu(ups_test_10sec);
- if(res == 1){
- log_event_data(LOG_TEST_UPS, "Администратор (Запущен)");
- }
- }
- else if(val == 999){
- res = ups_metac_service_pdu(ups_test_low_bat);
- if(res == 1){
- log_event_data(LOG_TEST_UPS, "Администратор (Запущен)");
- }
- }
- break;
- case 8: /* Shutdown UPS */
- val_string = (char*)value;
- float shtdn_val = atof(val_string);
- if(shtdn_val == 0){
- res = ups_metac_service_pdu(ups_cancel_shut_down);
- if(res == 1){
- log_event_data(LOG_SHUTDOWN_UPS, "Администратор (Останов)");
- }
- }
- else{
- TimeParamFloat = shtdn_val;
- res = ups_metac_service_pdu(ups_shutdown);
- if(res == 1)
- log_event_data(LOG_SHUTDOWN_UPS, "Администратор");
- }
- break;
- default :
- break;
- };
-
- }
- /**-----------------------------------------------------------------------------
- \fn static u8_t Identification_set_test (struct obj_def *od, u16_t len, void *value)
- \brief функция проверки записываемых значений переменных узла Identification
- \param obj_def - указатель на описание переменной
- \param len - длина переменной в байтах
- \param value - указатель на значение переменной
- \return 0 - некорректное значение
- 1 - корректное значение
- ------------------------------------------------------------------------------*/
- static u8_t signals_set_test (struct obj_def *od, u16_t len, void *value)
- {
- u8_t id, set_ok;
- char *val_string;
- int32_t val;
- LWIP_UNUSED_ARG(value);
- set_ok = 0;
- id = od->id_inst_ptr[0];
-
- switch (id)
- {
- case 2:
- if ( len == sizeof(s32_t) )
- {
- set_ok = 1;
- }
- break;
-
- case 3:
- if ( len == sizeof(s32_t) )
- {
- set_ok = 1;
- }
- break;
- case 5: /* DO1 */
- if ( len <= 1 )
- {
- val_string = (char*)value;
- val_string[len] = 0;
- if(atoi(val_string) <= 1){
- if(sSettings.sInOuts.ro_type_source[0] == SNMP_SET)
- set_ok = 1;
- }
- }
- break;
- case 6: /* DO2 */
- if ( len <= 1 )
- {
- val_string = (char*)value;
- val_string[len] = 0;
- if(atoi(val_string) <= 1){
- if(sSettings.sInOuts.ro_type_source[1] == SNMP_SET)
- set_ok = 1;
- }
- }
- break;
- case 7: /* BatTest */
- val = *((s32_t*)value);
- if((val >= 0 && val <= 100) || val == 999){
- set_ok = 1;
- }
- break;
- case 8: /* Shutdown UPS */
- if ( len <= 3 )
- {
- val_string = (char*)value;
- val_string[len] = 0;
- if(atof(val_string) <= 10){
- set_ok = 1;
- }
- }
- break;
- };
-
- return set_ok;
- }
- /**
- * Returns systems object definitions (eeprom).
- *
- * @param ident_len the address length (2)
- * @param ident points to objectname.0 (object id trailer)
- * @param od points to object definition.
- */
- static void
- system_get_object_def_ee(u8_t ident_len, s32_t *ident, struct obj_def *od)
- {
- u8_t id;
- /* return to object name, adding index depth (1) */
- ident_len += 1;
- ident -= 1;
- if (ident_len == 2)
- {
- od->id_inst_len = ident_len;
- od->id_inst_ptr = ident;
- id = ident[0];
- //LWIP_DEBUGF(SNMP_MIB_DEBUG,("get_object_def_ee system.%"U16_F".0\n",(u16_t)id));
- switch (id)
- {
- case 4: /* sysContact */
- od->instance = MIB_OBJECT_SCALAR;
- od->access = MIB_OBJECT_READ_WRITE;
- od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR);
- od->v_len = 1 /*GetSnmpStringLen(SNMP_SYSCONTACT_TYPE)*/;
- break;
- case 5: /* sysName */
- od->instance = MIB_OBJECT_SCALAR;
- od->access = MIB_OBJECT_READ_WRITE;
- od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR);
- od->v_len = 1 /*GetSnmpStringLen(SNMP_SYSNAME_TYPE)*/;
- break;
- case 6: /* sysLocation */
- od->instance = MIB_OBJECT_SCALAR;
- od->access = MIB_OBJECT_READ_WRITE;
- od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR);
- od->v_len = 1 /*GetSnmpStringLen(SNMP_SYSLOCATION_TYPE)*/;
- break;
- default:
- //LWIP_DEBUGF(SNMP_MIB_DEBUG,("system_get_object_def_ee: no such object\n"));
- od->instance = MIB_OBJECT_NONE;
- break;
- };
- }
- else
- {
- LWIP_DEBUGF(SNMP_MIB_DEBUG,("system_get_object_def_ee: no scalar\n"));
- od->instance = MIB_OBJECT_NONE;
- }
- }
- // ----------------------------------------------------------------------------
- /**
- * Returns system object value.
- *
- * @param ident_len the address length (2)
- * @param ident points to objectname.0 (object id trailer)
- * @param len return value space (in bytes)
- * @param value points to (varbind) space to copy value into.
- */
- static void
- system_get_value_ee(struct obj_def *od, u16_t len, void *value)
- {
- u8_t id;
- id = od->id_inst_ptr[0];
- switch (id)
- {
- case 4: /* sysContact */
- //GetSnmpString(SNMP_SYSCONTACT_TYPE, value, len );
- break;
- case 5: /* sysName */
- //GetSnmpString(SNMP_SYSNAME_TYPE, value, len );
- break;
- case 6: /* sysLocation */
- //GetSnmpString(SNMP_SYSLOCATION_TYPE, value, len );
- break;
- };
- }
- // ----------------------------------------------------------------------------
- static u8_t
- system_set_test_ee(struct obj_def *od, u16_t len, void *value)
- {
- u8_t id, set_ok;
- LWIP_UNUSED_ARG(value);
- set_ok = 0;
- id = od->id_inst_ptr[0];
- switch (id)
- {
- case 4: /* sysContact */
- if ( len <= 255 )
- {
- set_ok = 1;
- }
- break;
- case 5: /* sysName */
- if ( len <= 255 )
- {
- set_ok = 1;
- }
- break;
- case 6: /* sysLocation */
- if ( len <= 255 )
- {
- set_ok = 1;
- }
- break;
- };
- return set_ok;
- }
- // ----------------------------------------------------------------------------
- static void
- system_set_value_ee(struct obj_def *od, u16_t len, void *value)
- {
- u8_t id;
- id = od->id_inst_ptr[0];
- switch (id)
- {
- case 4: /* sysContact */
- //SetSnmpString(SNMP_SYSCONTACT_TYPE, value, len );
- //*syscontact_len_ptr = len;
- break;
- case 5: /* sysName */
- //SetSnmpString(SNMP_SYSNAME_TYPE, value, len );
- //*sysname_len_ptr = len;
- break;
- case 6: /* sysLocation */
- //SetSnmpString(SNMP_SYSLOCATION_TYPE, value, len );
- //*syslocation_len_ptr = len;
- break;
- };
- }
- // ----------------------------------------------------------------------------
- /**-----------------------------------------------------------------------------
- \fn err_t snmp_send_trap_ex (s8_t generic_trap,
- struct snmp_obj_id *eoid,
- s32_t specific_trap,
- struct snmp_obj_id* varbinds,
- u8_t varbinds_num)
- \brief функция посылки трапа с возможностью пристыковывать переменные
- \param generic_trap - код трапа
- \param eoid - указатель на enterprise object identifier
- \param specific_trap - used for enterprise traps when generic_trap == 6
- \param varbinds - указатель на переменные
- \param varbinds_num - число переменных
- \return код ошибки
- ------------------------------------------------------------------------------*/
- err_t snmp_send_trap_ex (s8_t generic_trap,
- struct snmp_obj_id *eoid,
- s32_t specific_trap,
- struct snmp_obj_id* varbinds,
- u8_t varbinds_num)
- {
- uint8_t bSnmpActive = 1;
-
- struct snmp_varbind** vb_list;
- struct mib_node* node;
- struct obj_def obj;
- err_t tResult;
- s32_t* VarNum;
- struct snmp_name_ptr np;
-
- /* SNMP не готово - ничего не отправляем */
- if( !bSnmpActive )
- {
- return ERR_MEM;
- }
-
- /* создаем таблицу указателей переменных */
- pvPortMalloc( varbinds_num * sizeof(struct snmp_varbind*) );
- /*
- if(vb_list == NULL)
- {
- return ERR_MEM;
- }
- */
- /* создаем сами переменные */
- for(u8_t i = 0; i < varbinds_num; i++)
- {
- /* ищем узел в дереве*/
- node = snmp_search_tree( (struct mib_node*)&internet, varbinds[i].len - 3,
- &varbinds[i].id[4], &np );
-
- //node = snmp_search_tree( (struct mib_node*)&internet, varbinds[i].len,
- // &varbinds[i].id[0], &np );
-
- if(node != NULL)
- {
- /* получаем информацию о переменной узла */
- VarNum = &varbinds[i].id[ varbinds[i].len - 1 ];
-
- if( node->node_type == MIB_NODE_EX)
- {
- struct mib_external_node* node_ex;
- node_ex = (struct mib_external_node*)node;
- /* TODO: подставить правильный rid вместо 0 */
- node_ex->get_object_def_a(0, 1, VarNum, &obj);
- }
- else
- {
- node->get_object_def(1, VarNum, &obj);
- }
-
- /* создаем переменную */
- vb_list[i] = snmp_varbind_alloc(&varbinds[i], obj.asn_type, obj.v_len);
- if( vb_list[i] != NULL )
- {
- {
- /* получаем значение переменной */
- if( node->node_type == MIB_NODE_EX)
- {
- struct mib_external_node* node_ex;
- node_ex = (struct mib_external_node*)node;
- /* TODO: подставить правильный rid вместо 0 */
- node_ex->get_value_a(0, &obj, obj.v_len, vb_list[i]->value);
- }
- else
- {
- node->get_value(&obj, obj.v_len, vb_list[i]->value);
- }
- /* добавляем переменную в ловушку */
- snmp_varbind_tail_add(&trap_msg.outvb, vb_list[i]);
- }
- }
- }
- }
- /* посылаем ловушку */
- tResult = snmp_send_trap(generic_trap, eoid, specific_trap);
-
- /* удаляем переменные из списка */
- snmp_varbind_list_free(&trap_msg.outvb);
-
- /* удаляем указатели переменных */
- vPortFree(vb_list);
-
- return tResult;
- }
- void SNMP_SendTestTrap(void)
- {
- /*
- struct snmp_varbind *vb;
- struct snmp_obj_id objid = {11, {1, 3, 6, 1, 4, 1, 41752, 5, 16, 2, 1}};
- unsigned char msg[] = "Sex, drugs and LwIP";
- unsigned char msglen = 19;
-
- vb = snmp_varbind_alloc(&objid, SNMP_ASN1_OPAQUE, msglen);
-
- vb->value = &msg;
-
- trap_msg.outvb.head = vb;
- trap_msg.outvb.tail = vb;
- trap_msg.outvb.count = 1;
-
- snmp_send_trap(SNMP_GENTRAP_ENTERPRISESPC, &objid, 0);
-
- trap_msg.outvb.head = NULL;
- trap_msg.outvb.tail = NULL;
- trap_msg.outvb.count = 0;
- //vb->value = NULL;
-
- snmp_varbind_free(vb);
- */
- static struct snmp_obj_id trapObjId = {11, {1, 3, 6, 1, 4, 1, 41752, 5, 16, 2, 1}};
- static struct snmp_obj_id varObjId = {11, {1, 3, 6, 1, 4, 1, 41752, 5, 16, 1, 1}};
-
- struct snmp_varbind* vb;
- u32_t *u32ptr;
-
- vb = snmp_varbind_alloc(&varObjId, MIB_NODE_SC, 4);
-
- vb->value_len = 4;
- vb->value_type = 0x02;
- u32ptr = vb->value;
- *u32ptr = 23;
-
- if( vb != NULL )
- snmp_varbind_tail_add(&trap_msg.outvb, vb);
-
- snmp_send_trap(SNMP_GENTRAP_ENTERPRISESPC, &trapObjId, 0);
-
- /* удаляем переменные из списка */
- snmp_varbind_list_free(&trap_msg.outvb);
-
- //snmp_send_trap_ex(SNMP_GENTRAP_ENTERPRISESPC, &trapObjId, 0, &varObjId, 1);
-
-
- #if 0
- struct snmp_varbind** vb_list;
- struct mib_node* node;
- struct obj_def obj;
- err_t tResult;
- s32_t* VarNum;
- struct snmp_name_ptr np;
-
- /* создаем указатель на переменную */
- pvPortMalloc(sizeof(struct snmp_varbind*) );
- /* создаем сами переменные */
- for(u8_t i = 0; i < varbinds_num; i++)
- {
- /* ищем узел в дереве*/
- node = snmp_search_tree( (struct mib_node*)&internet, varbinds[i].len - 4,
- &varbinds[i].id[4], &np );
-
- //node = snmp_search_tree( (struct mib_node*)&internet, varbinds[i].len,
- // &varbinds[i].id[0], &np );
-
- if(node != NULL)
- {
- /* получаем информацию о переменной узла */
- VarNum = &varbinds[i].id[ varbinds[i].len - 1 ];
-
- if( node->node_type == MIB_NODE_EX)
- {
- struct mib_external_node* node_ex;
- node_ex = (struct mib_external_node*)node;
- /* TODO: подставить правильный rid вместо 0 */
- node_ex->get_object_def_a(0, 1, VarNum, &obj);
- }
- else
- {
- node->get_object_def(1, VarNum, &obj);
- }
-
- /* создаем переменную */
- vb_list[i] = snmp_varbind_alloc(&varbinds[i], obj.asn_type, obj.v_len);
- if( vb_list[i] != NULL )
- {
- {
- /* получаем значение переменной */
- if( node->node_type == MIB_NODE_EX)
- {
- struct mib_external_node* node_ex;
- node_ex = (struct mib_external_node*)node;
- /* TODO: подставить правильный rid вместо 0 */
- node_ex->get_value_a(0, &obj, obj.v_len, vb_list[i]->value);
- }
- else
- {
- node->get_value(&obj, obj.v_len, vb_list[i]->value);
- }
- /* добавляем переменную в ловушку */
- snmp_varbind_tail_add(&trap_msg.outvb, vb_list[i]);
- }
- }
- }
- }
- /* посылаем ловушку */
- tResult = snmp_send_trap(generic_trap, eoid, specific_trap);
-
- /* удаляем переменные из списка */
- snmp_varbind_list_free(&trap_msg.outvb);
-
- /* удаляем указатели переменных */
- vPortFree(vb_list);
-
- return tResult;
- #endif
- }
- #define NUM_PRIVATE_TRAP 10
-
- //static unsigned char SNMP_TRAP_0_FLAG = 1;
- //static struct ip_addr SNMP_TRAP_0_ADDR;
-
- extern struct snmp_msg_trap trap_msg;
-
- struct private_trap
- {
- /* source enterprise ID (sysObjectID) */
- struct snmp_obj_id *enterprise;
- /* trap ID */
- struct snmp_obj_id *trap_oid;
-
- /* specific trap code */
- u32_t spc_trap;
-
- /* object value ASN1 type */
- u8_t value_type;
- /* object value length (in u8_t) */
- u8_t value_len;
- /* object value */
- void *value;
- /* indicate that the trap is sent */
- u8_t in_use;
- };
-
- struct private_trap trap_bank[NUM_PRIVATE_TRAP];
-
- struct private_trap * getNextFreePrivateTrap()
- {
- u8_t index;
- void * result = NULL;
-
- for(index = 0; index < NUM_PRIVATE_TRAP; index++)
- {
- if(!trap_bank[index].in_use)
- {
- trap_bank[index].in_use = 1;
- result = &trap_bank[index];
- break;
- }
- }
-
- return result;
- }
-
- void freePrivateTrap(struct private_trap * trap)
- {
- trap->enterprise = NULL;
- trap->trap_oid = NULL;
- trap->value = NULL;
- trap->in_use = 0;
- }
-
- void vSendTrapCallback( void * parameters )
- {
- struct private_trap * trapToSend;
- struct snmp_varbind * vb;
-
- if( parameters != NULL )
- {
- trapToSend = (struct private_trap *) parameters;
-
- vb = snmp_varbind_alloc(trapToSend->enterprise,
- trapToSend->value_type,
- trapToSend->value_len);
-
- vb->value = trapToSend->value;
-
- trap_msg.outvb.head = vb;
- trap_msg.outvb.tail = vb;
- trap_msg.outvb.count = 1;
-
- snmp_send_trap(SNMP_GENTRAP_ENTERPRISESPC, trapToSend->trap_oid, trapToSend->spc_trap);
-
- trap_msg.outvb.head = NULL;
- trap_msg.outvb.tail = NULL;
- trap_msg.outvb.count = 0;
-
- vb->value = NULL;
-
- snmp_varbind_free(vb);
-
- freePrivateTrap(trapToSend);
- }
- }
- #endif
-
|