123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341 |
- /********************************* (C) ROTEK ***********************************
- * @module template
- * @file template.c
- * @version 1.0.0
- * @date XX.XX.XXXX
- * $brief Template
- *******************************************************************************
- * @history Version Author Comment
- * XX.XX.XXXX 1.0.0 Telenkov D.A. First release.
- *******************************************************************************
- */
- #include "stm32f4xx.h"
- #include "snmp_api.h"
- #include "trap_api.h"
- #include "settings_api.h"
- #include "common_config.h"
- #include "rtc.h"
- #include "megatec.h"
- #include "log.h"
- #include "parameters.h"
- #include "apps/snmp.h"
- #include "snmp_mib2.h"
- #include "snmp_core.h"
- #include "private_mib.h"
- #include "snmp_trap_pdu2.h"
- #ifdef PRINTF_STDLIB
- #include <stdio.h>
- #endif
- #ifdef PRINTF_CUSTOM
- #include "tinystdio.h"
- #endif
- #include <stdbool.h>
- #include <string.h>
- #include "lwip/opt.h"
- #include "lwip/api.h"
- #include "lwip/sys.h"
- #include "lwip/udp.h"
- //#include "snmp.h"
- //#include "snmp_msg.h"
- //#include "private_mib.h"
- #include "FreeRTOS.h"
- #include "task.h"
- #include "queue.h"
- /**
- * @brief Пул всех возможных трапов устройства
- */
- extern TRAP_t traps[];
- /**
- * @brief Общая структура настроек
- */
- extern SETTINGS_t sSettings;
- extern bool isIpReceived;
- /**
- * @brief Очередь для отправки трапов
- */
- QueueHandle_t SNMP_TrapQueue;
- /**
- * @brief Инициализация параметров SNMP
- * @retval
- */
- void SNMP_Init(void)
- {
- //snmp_mib *my_snmp_mibs[] = { &mib2, &private_mib };
- //SETTINGS_SetSnmpDef();
- SNMP_AgentInit();
- lwip_privmib_init();
- //snmp_set_mibs(my_snmp_mibs, LWIP_ARRAYSIZE(my_snmp_mibs));
- }
- /**
- * @brief Системный тик SNMP. Таск должен вызываться с частотой 100Гц.
- * @retval
- */
- void SNMP_SysUpTimeTask(void *arg)
- {
- TickType_t xLastWakeTime;
- const TickType_t xFrequency = 10;
- xLastWakeTime = xTaskGetTickCount();
- while (1) {
- vTaskDelayUntil( &xLastWakeTime, xFrequency );
- //snmp_inc_sysuptime();
- }
- }
- /**
- * @brief Тестовый таск для проверки отправки трапов
- * @retval
- */
- void snmp_trap_tread(void *arg)
- {
- uint8_t trapName;
- while (1) {
- if (isIpReceived) {
- if (xQueueReceive(SNMP_TrapQueue, &trapName, 0) == pdTRUE) {
- #ifdef NOTIFICATION_CONTROL_ENABLE
- if (sSettings.sFlagNotification[trapName])
- #endif
- {
- SNMP_SetManagerIP(sSettings.sSnmp.managerIP);
- SNMP_SendVarbindTrap(&traps[trapName]);
- SNMP_SetManagerIP(sSettings.sSnmp.managerIP2);
- SNMP_SendVarbindTrap(&traps[trapName]);
- SNMP_SetManagerIP(sSettings.sSnmp.managerIP3);
- SNMP_SendVarbindTrap(&traps[trapName]);
- SNMP_SetManagerIP(sSettings.sSnmp.managerIP4);
- SNMP_SendVarbindTrap(&traps[trapName]);
- SNMP_SetManagerIP(sSettings.sSnmp.managerIP5);
- SNMP_SendVarbindTrap(&traps[trapName]);
- }
- }
- }
- vTaskDelay(10);
- }
- }
- /**
- * @brief Инициализация SNMP агента
- * @retval
- */
- void SNMP_AgentInit(void)
- {
- SNMP_SetObjDescr();
- SNMP_SetReadCommunity(sSettings.sSnmp.readCommunity);
- SNMP_SetWriteCommunity(sSettings.sSnmp.writeCommunity);
- SNMP_SetSysContact(&sSettings.sSnmp.sysContact);
- SNMP_SetSysName(&sSettings.sSnmp.sysName);
- SNMP_SetSysLocation(&sSettings.sSnmp.sysLocation);
- SNMP_SetManagerIP(sSettings.sSnmp.managerIP); //SNMP_SetManagerIP("192.168.14.37");
- SNMP_SetObjID();
- SNMP_SetTrapOnOff(1);
- SNMP_InitTrapsBase();
- snmp_init();
- udp_init();
- SNMP_TrapQueue = xQueueCreate(SNMP_TRAP_QUEUE_SIZE, sizeof(uint8_t));
- }
- /**
- * @brief Пользовательская функция для отправки трапа из массива traps[]
- * Трап помещается в очередь. Работа с очередью происходит по принципу
- * FIFO буфера.
- * Если в настройках трапа отправка отключена, то трап игнорируется.
- * @retval
- */
- void SNMP_SendUserTrap(uint8_t trapName)
- {
- uint16_t availableSpace;
- uint8_t dummyTrap;
- if (traps[trapName].trapEnable) {
- availableSpace = uxQueueSpacesAvailable(SNMP_TrapQueue);
- if (availableSpace == 0) {
- xQueueReceive(SNMP_TrapQueue, &dummyTrap, 0);
- }
- xQueueSend(SNMP_TrapQueue, &trapName, 0);
- }
- }
- /**
- * @brief Установить SNMP Descriptor
- * @retval
- */
- // TODO
- void SNMP_SetObjDescr(void)
- {
- char str[50];
- uint8_t len = 0;
- memset(sSettings.sSnmp.sysDesc.description, 0, sizeof(sSettings.sSnmp.sysDesc.description));
- #if HARDWARE_BT6711 || HARDWARE_BT6711_V1
- strcpy(sSettings.sSnmp.sysDesc.description, HW_REV);
- #elif HARDWARE_BT6709_MTS || HARDWARE_BT6710
- strcat(sSettings.sSnmp.sysDesc.description, UPS.model);
- #else
- strcpy(sSettings.sSnmp.sysDesc.description, HW_REV);
- strcat(sSettings.sSnmp.sysDesc.description, " ");
- strcat(sSettings.sSnmp.sysDesc.description, VERSION);
- strcat(sSettings.sSnmp.sysDesc.description, " ");
- sSettings.sSnmp.sysContact.contact[sSettings.sSnmp.sysContact.len] = 0;
- strcat(sSettings.sSnmp.sysDesc.description, sSettings.sSnmp.sysContact.contact);
- strcat(sSettings.sSnmp.sysDesc.description, " ");
- strcat(sSettings.sSnmp.sysDesc.description, sSettings.sInfo.serialNumber);
- strcat(sSettings.sSnmp.sysDesc.description, " ");
- strcat(sSettings.sSnmp.sysDesc.description, UPS.model);
- strcat(sSettings.sSnmp.sysDesc.description, " ");
- memset(str, 0, sizeof(str));
- GetUPSSerialStr(str, &len);
- strcat(sSettings.sSnmp.sysDesc.description, str);
- #endif
- sSettings.sSnmp.sysDesc.len = strlen(sSettings.sSnmp.sysDesc.description);
- snmp_mib2_set_sysdescr((u8_t *)sSettings.sSnmp.sysDesc.description, &sSettings.sSnmp.sysDesc.len);
- }
- void SNMP_SettingsSave(void)
- {
- SETTINGS_Save();
- log_event_data(LOG_SETTING_SAVE, "Администратор (SNMP)");
- SNMP_SetObjDescr();
- }
- /**
- * @brief Установить SNMP Community для чтения
- */
- void SNMP_SetReadCommunity(char *comm)
- {
- //strcpy(sSettings.sSnmp.readCommunity, comm);
- snmp_set_community(comm);
- }
- /**
- * @brief Установить SNMP Community для записи
- */
- void SNMP_SetWriteCommunity(char *comm)
- {
- //strcpy(sSettings.sSnmp.writeCommunity, comm);
- snmp_set_community_write(comm);
- }
- /**
- * @brief Установить SNMP SysContact
- * @retval
- */
- void SNMP_SetSysContact(SNMP_SYS_CONTACT_t *con)
- {
- snmp_mib2_set_syscontact((u8_t *)con->contact, &con->len, (sizeof(con->contact) - 1));
- }
- /**
- * @brief Установить SNMP SysName
- * @retval
- */
- void SNMP_SetSysName(SNMP_SYS_NAME_t *name)
- {
- snmp_mib2_set_sysname((u8_t *)name->name, &name->len, (sizeof(name->name) - 1));
- }
- /**
- * @brief Установить SNMP SysLocation
- * @retval
- */
- void SNMP_SetSysLocation(SNMP_SYS_LOCATION_t *loc)
- {
- snmp_mib2_set_syslocation((u8_t *)loc->location, &loc->len, (sizeof(loc->location) - 1));
- }
- /**
- * @brief Установить SNMP SysManagerIP
- * @retval
- */
- void SNMP_SetManagerIP(char *ip)
- {
- static ip_addr_t trap_addr;
- ipaddr_aton(ip, &trap_addr);
- // snmp_trap_dst_ip_set(0, &trap_addr);
- snmp_trap_pduv2_dst_ip_set(0, &trap_addr);
- }
- /**
- * @brief Установить SNMP Object ID
- * @retval
- */
- void SNMP_SetObjID(void)
- {
- static struct snmp_obj_id my_object_id = {9, {1, 3, 6, 1, 4, 1, 41752, 911, SNMP_DEV_ROOT_OID}};
- snmp_set_device_enterprise_oid(&my_object_id);
- }
- /**
- * @brief Установка sysObjectID согласно логике МТС (данное решение согласовано с заказчиком)
- */
- const struct snmp_obj_id* SNMP_GetSysObjectIDforMTS(void)
- {
- if (strlen(UPS.model) == 0) {
- static struct snmp_obj_id my_object_id = {9, {1, 3, 6, 1, 4, 1, 41752, 911, SNMP_DEV_ROOT_OID}};
- return &my_object_id;
- } else if(strncmp(UPS.model, "RTMP-I 600r", 11) == 0) {
- static struct snmp_obj_id my_object_id = {10, {1, 3, 6, 1, 4, 1, 41752, 911, SNMP_DEV_ROOT_OID, 600}};
- return &my_object_id;
- } else if(strncmp(UPS.model, "RTMP-II r", 9) == 0) {
- static struct snmp_obj_id my_object_id = {10, {1, 3, 6, 1, 4, 1, 41752, 911, SNMP_DEV_ROOT_OID, 1000}};
- return &my_object_id;
- } else if(strncmp(UPS.model, "RTMP-II v2r", 11) == 0) {
- static struct snmp_obj_id my_object_id = {10, {1, 3, 6, 1, 4, 1, 41752, 911, SNMP_DEV_ROOT_OID, 2000}};
- return &my_object_id;
- } else if(strncmp(UPS.model, "RTMP-II v3r", 11) == 0) {
- static struct snmp_obj_id my_object_id = {10, {1, 3, 6, 1, 4, 1, 41752, 911, SNMP_DEV_ROOT_OID, 3000}};
- return &my_object_id;
- } else if(strncmp(UPS.model, "RTMP-II v10r", 12) == 0) {
- static struct snmp_obj_id my_object_id = {10, {1, 3, 6, 1, 4, 1, 41752, 911, SNMP_DEV_ROOT_OID, 10000}};
- return &my_object_id;
- } else if(strncmp(UPS.model, "RTPS-v3310r", 11) == 0) {
- static struct snmp_obj_id my_object_id = {10, {1, 3, 6, 1, 4, 1, 41752, 911, SNMP_DEV_ROOT_OID, 3310}};
- return &my_object_id;
- } else {
- static struct snmp_obj_id my_object_id = {9, {1, 3, 6, 1, 4, 1, 41752, 911, SNMP_DEV_ROOT_OID}};
- return &my_object_id;
- }
- return 0;
- }
- /**
- * @brief Вкл/выкл трапы
- * @retval
- */
- void SNMP_SetTrapOnOff(uint8_t state)
- {
- //snmp_trap_dst_enable(0, (u8_t)state);
- snmp_trap_pduv2_dst_enable(0, (u8_t)state);
- }
- /********************************* (C) ROTEK **********************************/
|