|
|
@@ -152,9 +152,9 @@ initialize_table_pduSensorTable(void)
|
|
|
NULL, 0,
|
|
|
COLUMN_PDUSENSORVALUENUM, ASN_INTEGER, 0,
|
|
|
NULL, 0,
|
|
|
- COLUMN_PDUSENSORVALUE1, ASN_INTEGER, 0,
|
|
|
+ COLUMN_PDUSENSORVALUE1, ASN_OCTET_STR, 0,
|
|
|
NULL, 0,
|
|
|
- COLUMN_PDUSENSORVALUE2, ASN_INTEGER, 0,
|
|
|
+ COLUMN_PDUSENSORVALUE2, ASN_OCTET_STR, 0,
|
|
|
NULL, 0,
|
|
|
0);
|
|
|
|
|
|
@@ -462,18 +462,22 @@ initialize_table_pduSensorLimitTable(void)
|
|
|
0);
|
|
|
|
|
|
DEBUGMSGTL(("initialize_table_pduSensorLimitTable",
|
|
|
- "adding column types to table pduSensorLimitTable\n"));
|
|
|
+ "adding column types to table pduSensorLimitTable\n"));
|
|
|
netsnmp_table_set_multi_add_default_row(table_set,
|
|
|
COLUMN_PDUSENSORLIMITID, ASN_INTEGER, 1,
|
|
|
NULL, 0,
|
|
|
COLUMN_PDUSENSORLIMITNAME, ASN_OCTET_STR, 1,
|
|
|
NULL, 0,
|
|
|
- COLUMN_PDUSENSORLIMITVALUE1, ASN_INTEGER, 1,
|
|
|
+ COLUMN_PDUSENSORLIMITVALUE1UP, ASN_INTEGER, 1,
|
|
|
NULL, 0,
|
|
|
- COLUMN_PDUSENSORLIMITVALUE2, ASN_INTEGER, 1,
|
|
|
+ COLUMN_PDUSENSORLIMITVALUE2UP, ASN_INTEGER, 1,
|
|
|
NULL, 0,
|
|
|
- 0);
|
|
|
-
|
|
|
+ COLUMN_PDUSENSORLIMITVALUE1DOWN, ASN_INTEGER, 1,
|
|
|
+ NULL, 0,
|
|
|
+ COLUMN_PDUSENSORLIMITVALUE2DOWN, ASN_INTEGER, 1,
|
|
|
+ NULL, 0,
|
|
|
+ 0);
|
|
|
+
|
|
|
/* registering the table with the master agent */
|
|
|
/* note: if you don't need a subhandler to deal with any aspects
|
|
|
of the request, change pduSensorLimitTable_handler to "NULL" */
|
|
|
@@ -518,12 +522,35 @@ pduChannelTable_handler(
|
|
|
GlobalPowerManger* iterator;
|
|
|
//GlobalPowerInfo powerInfo;
|
|
|
char buffer[16];
|
|
|
+ oid begin_next_oid[] = {1, 3, 6, 1, 4, 1, 2024, 1, 3, 9, 1, 1, 1};
|
|
|
+ int max_clonum=11;
|
|
|
switch(reqinfo->mode)
|
|
|
{
|
|
|
case MODE_GET:
|
|
|
+ case MODE_GETNEXT:
|
|
|
for (request = requests; request; request = request->next)
|
|
|
{
|
|
|
table_info = netsnmp_extract_table_info(request);
|
|
|
+ if (reqinfo->mode==MODE_GETNEXT)
|
|
|
+ {
|
|
|
+ if (table_info->index_oid[0] == 0)
|
|
|
+ {
|
|
|
+ table_info->index_oid[0] = 1;
|
|
|
+ table_info->colnum = 1;
|
|
|
+ snmp_set_var_objid(requests->requestvb, begin_next_oid, OID_LENGTH(begin_next_oid));
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if (table_info->colnum > max_clonum)
|
|
|
+ {
|
|
|
+ table_info->index_oid[0] += 1;
|
|
|
+ table_info->colnum =1;
|
|
|
+ }
|
|
|
+ oid next_oid[] = {1, 3, 6, 1, 4, 1, 2024, 1, 3, 9, 1, table_info->colnum, table_info->index_oid[0]};
|
|
|
+ snmp_set_var_objid(requests->requestvb, next_oid, OID_LENGTH(next_oid));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
int nIndex=1;
|
|
|
list_for_each_entry(iterator, &__globalDeviceManage._globalPowerManger.list, list)
|
|
|
{
|
|
|
@@ -541,7 +568,7 @@ pduChannelTable_handler(
|
|
|
// _over_all_pwr_back_info._Power_Trend_Info.ydata[POWER_REACTIVE_TYPE][i] = __PowerTrendInfo._power_trend_info.ydata[POWER_REACTIVE_TYPE][i];
|
|
|
// _over_all_pwr_back_info._Power_Trend_Info.ydata[POWER_APPARENT_TYPE][i] = __PowerTrendInfo._power_trend_info.ydata[POWER_APPARENT_TYPE][i];
|
|
|
// }
|
|
|
- //if(dev_search_latest_power_info(__globalDeviceManage.db,__globalDeviceManage._globalDevInfo.product_id,iterator->product_ch_id,&powerInfo)!=0)
|
|
|
+ //if(dev_search_latest_power_info(__globalDeviceManage.db,__globalDeviceManage._globalDevInfo.product.id,iterator->product_ch_id,&powerInfo)!=0)
|
|
|
//{
|
|
|
// log_e("search total pwr err at pduChannelTable_handler from db.");
|
|
|
//}
|
|
|
@@ -758,12 +785,34 @@ pduGroupTable_handler(
|
|
|
}
|
|
|
|
|
|
char buffer[16];
|
|
|
+ oid begin_next_oid[] = {1, 3, 6, 1, 4, 1, 2024, 1, 3, 10, 1, 1, 1};
|
|
|
+ int max_clonum = 4;
|
|
|
switch (reqinfo->mode)
|
|
|
{
|
|
|
case MODE_GET:
|
|
|
+ case MODE_GETNEXT:
|
|
|
for (request = requests; request; request = request->next)
|
|
|
{
|
|
|
table_info = netsnmp_extract_table_info(request);
|
|
|
+ if (reqinfo->mode == MODE_GETNEXT)
|
|
|
+ {
|
|
|
+ if (table_info->index_oid[0] == 0)
|
|
|
+ {
|
|
|
+ table_info->index_oid[0] = 1;
|
|
|
+ table_info->colnum = 1;
|
|
|
+ snmp_set_var_objid(requests->requestvb, begin_next_oid, OID_LENGTH(begin_next_oid));
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if (table_info->colnum > max_clonum)
|
|
|
+ {
|
|
|
+ table_info->index_oid[0] += 1;
|
|
|
+ table_info->colnum = 1;
|
|
|
+ }
|
|
|
+ oid next_oid[] = {1, 3, 6, 1, 4, 1, 2024, 1, 3, 10, 1, table_info->colnum, table_info->index_oid[0]};
|
|
|
+ snmp_set_var_objid(requests->requestvb, next_oid, OID_LENGTH(next_oid));
|
|
|
+ }
|
|
|
+ }
|
|
|
int nIndex = 1;
|
|
|
list_for_each_entry(_GroupInfoTemp, &group_list.list, list)
|
|
|
{
|
|
|
@@ -949,8 +998,7 @@ pduGroupTable_handler(
|
|
|
/* we should never get here, so this is a really bad error */
|
|
|
snmp_log(LOG_ERR, "unknown mode (%d) in handle_pduType\n", reqinfo->mode);
|
|
|
return SNMP_ERR_GENERR;
|
|
|
- }
|
|
|
-
|
|
|
+ }
|
|
|
|
|
|
return SNMP_ERR_NOERROR;
|
|
|
}
|
|
|
@@ -966,6 +1014,113 @@ pduSensorTable_handler(
|
|
|
already been processed by the master table_dataset handler, but
|
|
|
this gives you chance to act on the request in some other way
|
|
|
if need be. */
|
|
|
+ netsnmp_request_info *request;
|
|
|
+ netsnmp_table_request_info *table_info;
|
|
|
+ GlobalSensorManger *iterator = NULL;
|
|
|
+ //
|
|
|
+ char buffer[16];
|
|
|
+ oid begin_next_oid[] = {1, 3, 6, 1, 4, 1, 2024, 1, 4, 1, 1, 1, 1};
|
|
|
+ int max_clonum = 10;
|
|
|
+ switch (reqinfo->mode)
|
|
|
+ {
|
|
|
+ case MODE_GET:
|
|
|
+ case MODE_GETNEXT:
|
|
|
+ for (request = requests; request; request = request->next)
|
|
|
+ {
|
|
|
+ table_info = netsnmp_extract_table_info(request);
|
|
|
+
|
|
|
+ if (reqinfo->mode == MODE_GETNEXT)
|
|
|
+ {
|
|
|
+ if (table_info->index_oid[0] == 0)
|
|
|
+ {
|
|
|
+ table_info->index_oid[0] = 1;
|
|
|
+ table_info->colnum = 1;
|
|
|
+ snmp_set_var_objid(requests->requestvb, begin_next_oid, OID_LENGTH(begin_next_oid));
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if (table_info->colnum > max_clonum)
|
|
|
+ {
|
|
|
+ table_info->index_oid[0] += 1;
|
|
|
+ table_info->colnum = 1;
|
|
|
+ }
|
|
|
+ oid next_oid[] = {1, 3, 6, 1, 4, 1, 2024, 1, 4, 1, 1, table_info->colnum, table_info->index_oid[0]};
|
|
|
+ snmp_set_var_objid(requests->requestvb, next_oid, OID_LENGTH(next_oid));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ int nIndex = table_info->index_oid[0];
|
|
|
+ bool findinstance = false;
|
|
|
+
|
|
|
+ list_for_each_entry(iterator, &__globalDeviceManage._globalSensorManger.list, list)
|
|
|
+ {
|
|
|
+ if (!iterator || nIndex != iterator->sensor_id)
|
|
|
+ {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ memset(buffer, 0, sizeof(buffer));
|
|
|
+ switch (table_info->colnum)
|
|
|
+ {
|
|
|
+ case COLUMN_PDUSENSORID:
|
|
|
+ snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER, iterator->sensor_id);
|
|
|
+ break;
|
|
|
+ case COLUMN_PDUSENSORNAME:
|
|
|
+ snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR, iterator->sensor_name, strlen(iterator->sensor_name));
|
|
|
+ break;
|
|
|
+ case COLUMN_PDUSENSORTYPE:
|
|
|
+ snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER, iterator->sensor_type);
|
|
|
+ break;
|
|
|
+ case COLUMN_PDUSENSORDATACHENNEL:
|
|
|
+ snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER, iterator->sensor_interface_type);
|
|
|
+ break;
|
|
|
+ case COLUMN_PDUSENSORMODBUSADDRESS:
|
|
|
+ snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER, iterator->sensor_addr);
|
|
|
+ break;
|
|
|
+ case 6:
|
|
|
+ snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER, iterator->sensor_node_number);
|
|
|
+ break;
|
|
|
+ case COLUMN_PDUSENSORSTATUS:
|
|
|
+ snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER, iterator->sensor_status);
|
|
|
+ break;
|
|
|
+ case COLUMN_PDUSENSORVALUENUM:
|
|
|
+ snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER, iterator->sensor_val_count);
|
|
|
+ break;
|
|
|
+ case COLUMN_PDUSENSORVALUE1:
|
|
|
+ sprintf(buffer, "%0.3f", iterator->Cur_sensor_info.val1);
|
|
|
+ snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR, buffer, strlen(buffer));
|
|
|
+ break;
|
|
|
+ case COLUMN_PDUSENSORVALUE2:
|
|
|
+ sprintf(buffer, "%0.3f", iterator->Cur_sensor_info.val2);
|
|
|
+ snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR, buffer, strlen(buffer));
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ netsnmp_set_request_error(reqinfo, request, SNMP_NOSUCHOBJECT);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ //}
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case MODE_SET_RESERVE1:
|
|
|
+ break;
|
|
|
+ case MODE_SET_RESERVE2:
|
|
|
+ break;
|
|
|
+ case MODE_SET_FREE:
|
|
|
+ break;
|
|
|
+ case MODE_SET_ACTION:
|
|
|
+ break;
|
|
|
+ case MODE_SET_UNDO:
|
|
|
+ break;
|
|
|
+ case MODE_SET_COMMIT:
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ /* we should never get here, so this is a really bad error */
|
|
|
+ snmp_log(LOG_ERR, "unknown mode (%d) in handle_pduType\n", reqinfo->mode);
|
|
|
+ return SNMP_ERR_GENERR;
|
|
|
+ }
|
|
|
+
|
|
|
return SNMP_ERR_NOERROR;
|
|
|
}
|
|
|
|
|
|
@@ -1036,6 +1191,150 @@ pduAlarmHistoryTable_handler(
|
|
|
already been processed by the master table_dataset handler, but
|
|
|
this gives you chance to act on the request in some other way
|
|
|
if need be. */
|
|
|
+
|
|
|
+ netsnmp_request_info *request;
|
|
|
+ netsnmp_table_request_info *table_info;
|
|
|
+
|
|
|
+ //
|
|
|
+ char buffer[16];
|
|
|
+ oid begin_next_oid[] = {1, 3, 6, 1, 4, 1, 2024, 1, 6, 1, 1, 1, 1};
|
|
|
+ int max_clonum = 7;
|
|
|
+ switch (reqinfo->mode)
|
|
|
+ {
|
|
|
+ case MODE_GET:
|
|
|
+ case MODE_GETNEXT:
|
|
|
+ {
|
|
|
+ // 初始化表
|
|
|
+ int nAlarmNumber = 0;
|
|
|
+ _AlarmAckInfo _alarm_ack_info; // 填充数据
|
|
|
+ INIT_LIST_HEAD(&_alarm_ack_info.list);
|
|
|
+ // 查询数据库,最近的10个报警信息
|
|
|
+ char start_time[32] = {0};
|
|
|
+ char stop_time[32] = {0};
|
|
|
+
|
|
|
+ struct tm *t;
|
|
|
+ struct timeval tv;
|
|
|
+
|
|
|
+ gettimeofday(&tv, NULL);
|
|
|
+ t = localtime(&tv.tv_sec);
|
|
|
+ sprintf(stop_time, "%04d-%02d-%02d %02d:%02d:%02d", t->tm_year + 1900, t->tm_mon + 1, t->tm_mday, 23, 59, 59);
|
|
|
+ sprintf(start_time, "%04d-%02d-%02d %02d:%02d:%02d", t->tm_year + 1900, t->tm_mon + 1, t->tm_mday, 0, 0, 0);
|
|
|
+
|
|
|
+ int ret = dev_search_alarm_info(__globalDeviceManage.db,
|
|
|
+ __globalDeviceManage._globalDevInfo.product_id,
|
|
|
+ -1, start_time, stop_time,
|
|
|
+ 1, 10,
|
|
|
+ &_alarm_ack_info, &nAlarmNumber);
|
|
|
+ if (ret != 0)
|
|
|
+ {
|
|
|
+ log_e("get power alarm error.");
|
|
|
+ return SNMP_ERR_GENERR;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ for (request = requests; request; request = request->next)
|
|
|
+ {
|
|
|
+ table_info = netsnmp_extract_table_info(request);
|
|
|
+
|
|
|
+ if (reqinfo->mode == MODE_GETNEXT)
|
|
|
+ {
|
|
|
+ if (table_info->index_oid[0] == 0)
|
|
|
+ {
|
|
|
+ table_info->index_oid[0] = 1;
|
|
|
+ table_info->colnum = 1;
|
|
|
+ snmp_set_var_objid(requests->requestvb, begin_next_oid, OID_LENGTH(begin_next_oid));
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if (table_info->colnum > max_clonum)
|
|
|
+ {
|
|
|
+ table_info->index_oid[0] += 1;
|
|
|
+ table_info->colnum = 1;
|
|
|
+ }
|
|
|
+ oid next_oid[] = {1, 3, 6, 1, 4, 1, 2024, 1, 6, 1, 1, table_info->colnum, table_info->index_oid[0]};
|
|
|
+ snmp_set_var_objid(requests->requestvb, next_oid, OID_LENGTH(next_oid));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ int nIndex = 1;
|
|
|
+ _AlarmAckInfo *_temp;
|
|
|
+ list_for_each_entry(_temp, &_alarm_ack_info.list, list)
|
|
|
+ {
|
|
|
+ if (nIndex < table_info->index_oid[0])
|
|
|
+ {
|
|
|
+ nIndex++;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!_temp)
|
|
|
+ {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ memset(buffer, 0, sizeof(buffer));
|
|
|
+ switch (table_info->colnum)
|
|
|
+ {
|
|
|
+ case COLUMN_PDUALARMID:
|
|
|
+ snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER, nIndex);
|
|
|
+ break;
|
|
|
+ case COLUMN_PDUALARMTYPE:
|
|
|
+ snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER, _temp->alarmType);
|
|
|
+ break;
|
|
|
+ case COLUMN_PDUALARMCONTEXT:
|
|
|
+ snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR, _temp->alarmContent, strlen(_temp->alarmContent));
|
|
|
+ break;
|
|
|
+ case COLUMN_PDUALARMACTION:
|
|
|
+ snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER, -1);
|
|
|
+ break;
|
|
|
+ case COLUMN_PDUALARMACTIONPARA:
|
|
|
+ snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER, -1);
|
|
|
+ break;
|
|
|
+ case COLUMN_PDUALARMDATE:
|
|
|
+ snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR, _temp->alarmDate, strlen(_temp->alarmDate));
|
|
|
+ break;
|
|
|
+ case COLUMN_PDUALARMTIME:
|
|
|
+ snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR, _temp->alarmDate, strlen(_temp->alarmDate));
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ netsnmp_set_request_error(reqinfo, request, SNMP_NOSUCHOBJECT);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ //}
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 释放资源
|
|
|
+ if (0 == ret)
|
|
|
+ {
|
|
|
+ _AlarmAckInfo *node;
|
|
|
+ _AlarmAckInfo *next;
|
|
|
+ list_for_each_entry_safe(node, next, &_alarm_ack_info.list, list)
|
|
|
+ {
|
|
|
+ list_del(&node->list);
|
|
|
+ free(node);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case MODE_SET_RESERVE1:
|
|
|
+ break;
|
|
|
+ case MODE_SET_RESERVE2:
|
|
|
+ break;
|
|
|
+ case MODE_SET_FREE:
|
|
|
+ break;
|
|
|
+ case MODE_SET_ACTION:
|
|
|
+ break;
|
|
|
+ case MODE_SET_UNDO:
|
|
|
+ break;
|
|
|
+ case MODE_SET_COMMIT:
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ /* we should never get here, so this is a really bad error */
|
|
|
+ snmp_log(LOG_ERR, "unknown mode (%d) in handle_pduType\n", reqinfo->mode);
|
|
|
+ return SNMP_ERR_GENERR;
|
|
|
+ }
|
|
|
+
|
|
|
return SNMP_ERR_NOERROR;
|
|
|
}
|
|
|
|
|
|
@@ -1050,6 +1349,110 @@ pduChannelLimitTable_handler(
|
|
|
already been processed by the master table_dataset handler, but
|
|
|
this gives you chance to act on the request in some other way
|
|
|
if need be. */
|
|
|
+
|
|
|
+ netsnmp_request_info *request;
|
|
|
+ netsnmp_table_request_info *table_info;
|
|
|
+ GlobalPowerManger *iterator = NULL;
|
|
|
+ //
|
|
|
+ char buffer[16];
|
|
|
+ oid begin_next_oid[] = {1, 3, 6, 1, 4, 1, 2024, 1, 7, 2, 6, 1, 1, 1};
|
|
|
+ int max_clonum = 7;
|
|
|
+ switch (reqinfo->mode)
|
|
|
+ {
|
|
|
+ case MODE_GET:
|
|
|
+ case MODE_GETNEXT:
|
|
|
+ for (request = requests; request; request = request->next)
|
|
|
+ {
|
|
|
+ table_info = netsnmp_extract_table_info(request);
|
|
|
+ if (reqinfo->mode == MODE_GETNEXT)
|
|
|
+ {
|
|
|
+ if (table_info->index_oid[0] == 0)
|
|
|
+ {
|
|
|
+ table_info->index_oid[0] = 1;
|
|
|
+ table_info->colnum = 1;
|
|
|
+ snmp_set_var_objid(requests->requestvb, begin_next_oid, OID_LENGTH(begin_next_oid));
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if (table_info->colnum > max_clonum)
|
|
|
+ {
|
|
|
+ table_info->index_oid[0] += 1;
|
|
|
+ table_info->colnum = 1;
|
|
|
+ }
|
|
|
+ oid next_oid[] = {1, 3, 6, 1, 4, 1, 2024, 1, 7, 2, 6, 1,table_info->colnum, table_info->index_oid[0]};
|
|
|
+ snmp_set_var_objid(requests->requestvb, next_oid, OID_LENGTH(next_oid));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ int nIndex = 1;
|
|
|
+
|
|
|
+ list_for_each_entry(iterator, &__globalDeviceManage._globalPowerManger.list, list)
|
|
|
+ {
|
|
|
+ if (nIndex < table_info->index_oid[0])
|
|
|
+ {
|
|
|
+ nIndex++;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if (!iterator)
|
|
|
+ {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ memset(buffer, 0, sizeof(buffer));
|
|
|
+ switch (table_info->colnum)
|
|
|
+ {
|
|
|
+ case COLUMN_PDUCHANNELLIMITID:
|
|
|
+ snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER, iterator->product_ch_id);
|
|
|
+ break;
|
|
|
+ case COLUMN_PDUCHANNELLIMITNAME:
|
|
|
+ snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR, iterator->product_ch_name, strlen(iterator->product_ch_name));
|
|
|
+ break;
|
|
|
+ case COLUMN_PDUCHANNELCURRENTLIMITUP:
|
|
|
+ sprintf(buffer, "%0.2f", iterator->global_over_manager->product_cur_upper_threshold);
|
|
|
+ snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR, buffer, strlen(buffer));
|
|
|
+ break;
|
|
|
+ case COLUMN_PDUCHANNELVOLTAGELIMITUP:
|
|
|
+ sprintf(buffer, "%0.2f", iterator->global_over_manager->product_vol_upper_threshold);
|
|
|
+ snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR, buffer, strlen(buffer));
|
|
|
+ break;
|
|
|
+ case COLUMN_PDUCHANNELVOLTAGELIMITDOWN:
|
|
|
+ sprintf(buffer, "%0.2f", iterator->global_over_manager->product_vol_lower_threshold);
|
|
|
+ snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR, buffer, strlen(buffer));
|
|
|
+ break;
|
|
|
+ case COLUMN_PDUCHANNELPOWERLIMITUP:
|
|
|
+ sprintf(buffer, "%0.2f", iterator->global_over_manager->product_pwr_upper_threshold);
|
|
|
+ snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR, buffer, strlen(buffer));
|
|
|
+ break;
|
|
|
+ case COLUMN_PDUCHANNELCONSUMPTIONLIMITUP:
|
|
|
+ sprintf(buffer, "%0.2f", iterator->global_over_manager->product_pwrcon_upper_threshold);
|
|
|
+ snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR, buffer, strlen(buffer));
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ netsnmp_set_request_error(reqinfo, request, SNMP_NOSUCHOBJECT);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ //}
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case MODE_SET_RESERVE1:
|
|
|
+ break;
|
|
|
+ case MODE_SET_RESERVE2:
|
|
|
+ break;
|
|
|
+ case MODE_SET_FREE:
|
|
|
+ break;
|
|
|
+ case MODE_SET_ACTION:
|
|
|
+ break;
|
|
|
+ case MODE_SET_UNDO:
|
|
|
+ break;
|
|
|
+ case MODE_SET_COMMIT:
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ /* we should never get here, so this is a really bad error */
|
|
|
+ snmp_log(LOG_ERR, "unknown mode (%d) in handle_pduType\n", reqinfo->mode);
|
|
|
+ return SNMP_ERR_GENERR;
|
|
|
+ }
|
|
|
+
|
|
|
return SNMP_ERR_NOERROR;
|
|
|
}
|
|
|
|
|
|
@@ -1064,5 +1467,98 @@ pduSensorLimitTable_handler(
|
|
|
already been processed by the master table_dataset handler, but
|
|
|
this gives you chance to act on the request in some other way
|
|
|
if need be. */
|
|
|
+ netsnmp_request_info *request;
|
|
|
+ netsnmp_table_request_info *table_info;
|
|
|
+ GlobalSensorManger *iterator = NULL;
|
|
|
+ //
|
|
|
+ char buffer[16];
|
|
|
+ oid begin_next_oid[] = {1, 3, 6, 1, 4, 1, 2024, 1, 7, 3, 1, 1, 1, 1};
|
|
|
+ int max_clonum = 6;
|
|
|
+ switch (reqinfo->mode)
|
|
|
+ {
|
|
|
+ case MODE_GET:
|
|
|
+ case MODE_GETNEXT:
|
|
|
+ for (request = requests; request; request = request->next)
|
|
|
+ {
|
|
|
+ table_info = netsnmp_extract_table_info(request);
|
|
|
+
|
|
|
+ if (reqinfo->mode == MODE_GETNEXT)
|
|
|
+ {
|
|
|
+ if (table_info->index_oid[0] == 0)
|
|
|
+ {
|
|
|
+ table_info->index_oid[0] = 1;
|
|
|
+ table_info->colnum = 1;
|
|
|
+ snmp_set_var_objid(requests->requestvb, begin_next_oid, OID_LENGTH(begin_next_oid));
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if (table_info->colnum > max_clonum)
|
|
|
+ {
|
|
|
+ table_info->index_oid[0] += 1;
|
|
|
+ table_info->colnum = 1;
|
|
|
+ }
|
|
|
+ oid next_oid[] = {1, 3, 6, 1, 4, 1, 2024, 1, 7, 3, 1, 1, table_info->colnum, table_info->index_oid[0]};
|
|
|
+ snmp_set_var_objid(requests->requestvb, next_oid, OID_LENGTH(next_oid));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ int nIndex = table_info->index_oid[0];
|
|
|
+
|
|
|
+ list_for_each_entry(iterator, &__globalDeviceManage._globalSensorManger.list, list)
|
|
|
+ {
|
|
|
+ if (!iterator || nIndex != iterator->sensor_id)
|
|
|
+ {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ memset(buffer, 0, sizeof(buffer));
|
|
|
+ switch (table_info->colnum)
|
|
|
+ {
|
|
|
+ case COLUMN_PDUSENSORLIMITID:
|
|
|
+ snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER, iterator->sensor_id);
|
|
|
+ break;
|
|
|
+ case COLUMN_PDUSENSORLIMITNAME:
|
|
|
+ snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR, iterator->sensor_name, strlen(iterator->sensor_name));
|
|
|
+ break;
|
|
|
+ case COLUMN_PDUSENSORLIMITVALUE1UP:
|
|
|
+ snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER, iterator->over_manager->sensor_val1_upper_threshold);
|
|
|
+ break;
|
|
|
+ case COLUMN_PDUSENSORLIMITVALUE2UP:
|
|
|
+ snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER, iterator->over_manager->sensor_val2_upper_threshold);
|
|
|
+ break;
|
|
|
+ case COLUMN_PDUSENSORLIMITVALUE1DOWN:
|
|
|
+ snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER, iterator->over_manager->sensor_val1_lower_threshold);
|
|
|
+ break;
|
|
|
+ case COLUMN_PDUSENSORLIMITVALUE2DOWN:
|
|
|
+ snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER, iterator->over_manager->sensor_val2_lower_threshold);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ netsnmp_set_request_error(reqinfo, request, SNMP_NOSUCHOBJECT);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ //}
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case MODE_SET_RESERVE1:
|
|
|
+ break;
|
|
|
+ case MODE_SET_RESERVE2:
|
|
|
+ break;
|
|
|
+ case MODE_SET_FREE:
|
|
|
+ break;
|
|
|
+ case MODE_SET_ACTION:
|
|
|
+ break;
|
|
|
+ case MODE_SET_UNDO:
|
|
|
+ break;
|
|
|
+ case MODE_SET_COMMIT:
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ /* we should never get here, so this is a really bad error */
|
|
|
+ snmp_log(LOG_ERR, "unknown mode (%d) in handle_pduType\n", reqinfo->mode);
|
|
|
+ return SNMP_ERR_GENERR;
|
|
|
+ }
|
|
|
+
|
|
|
return SNMP_ERR_NOERROR;
|
|
|
}
|