Przeglądaj źródła

1、修复SNMP GETNEXT WALK指令错误;2、QT增加二氧化碳传感器显示

liyuezong 1 rok temu
rodzic
commit
22e6e01a45
2 zmienionych plików z 144 dodań i 29 usunięć
  1. BIN
      cust_data/qt/Qt_Test
  2. 144 29
      pro/src/pduMIB_form.c

BIN
cust_data/qt/Qt_Test


+ 144 - 29
pro/src/pduMIB_form.c

@@ -522,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)
                   {
@@ -762,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)
           {
@@ -953,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;
 }
@@ -975,12 +1019,36 @@ pduSensorTable_handler(
     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;
 
@@ -990,8 +1058,6 @@ pduSensorTable_handler(
              {
                 continue;
              }
-             findinstance = true;
-
              memset(buffer, 0, sizeof(buffer));
              switch (table_info->colnum)
              {
@@ -1010,6 +1076,9 @@ pduSensorTable_handler(
              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;
@@ -1032,10 +1101,6 @@ pduSensorTable_handler(
              break;
           }
 
-          if (!findinstance)
-          {
-             netsnmp_set_request_error(reqinfo, request, SNMP_NOSUCHINSTANCE);
-          }
        }
        break;
     case MODE_SET_RESERVE1:
@@ -1132,9 +1197,12 @@ pduAlarmHistoryTable_handler(
 
     //
     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;
@@ -1162,12 +1230,33 @@ pduAlarmHistoryTable_handler(
           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;
-          bool findinstance = false;
           _AlarmAckInfo *_temp;
           list_for_each_entry(_temp, &_alarm_ack_info.list, list)
           {
@@ -1182,8 +1271,6 @@ pduAlarmHistoryTable_handler(
                 break;
              }
 
-             findinstance = true;
-
              memset(buffer, 0, sizeof(buffer));
              switch (table_info->colnum)
              {
@@ -1215,11 +1302,6 @@ pduAlarmHistoryTable_handler(
              //}
              break;
           }
-
-          if (!findinstance)
-          {
-             netsnmp_set_request_error(reqinfo, request, SNMP_NOSUCHINSTANCE);
-          }
        }
 
        // 释放资源
@@ -1273,14 +1355,35 @@ pduChannelLimitTable_handler(
     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;
-          bool findinstance = false;
 
           list_for_each_entry(iterator, &__globalDeviceManage._globalPowerManger.list, list)
           {
@@ -1293,7 +1396,6 @@ pduChannelLimitTable_handler(
              {
                 break;
              }
-             findinstance = true;
 
              memset(buffer, 0, sizeof(buffer));
              switch (table_info->colnum)
@@ -1331,11 +1433,6 @@ pduChannelLimitTable_handler(
              //}
              break;
           }
-
-          if (!findinstance)
-          {
-             netsnmp_set_request_error(reqinfo, request, SNMP_NOSUCHINSTANCE);
-          }
        }
        break;
     case MODE_SET_RESERVE1:
@@ -1375,14 +1472,37 @@ pduSensorLimitTable_handler(
     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];
-          bool findinstance = false;
 
           list_for_each_entry(iterator, &__globalDeviceManage._globalSensorManger.list, list)
           {
@@ -1390,7 +1510,6 @@ pduSensorLimitTable_handler(
              {
                 continue;
              }
-             findinstance = true;
 
              memset(buffer, 0, sizeof(buffer));
              switch (table_info->colnum)
@@ -1421,10 +1540,6 @@ pduSensorLimitTable_handler(
              break;
           }
 
-          if (!findinstance)
-          {
-             netsnmp_set_request_error(reqinfo, request, SNMP_NOSUCHINSTANCE);
-          }
        }
        break;
     case MODE_SET_RESERVE1: