Quellcode durchsuchen

1、修改snmp协议mib库文件及.h和.c头文件

liyuezong vor 2 Jahren
Ursprung
Commit
0f9a7ba146

Datei-Diff unterdrückt, da er zu groß ist
+ 353 - 16
Liyuezong/SNMP协议设计/Gowone-SmartPDU-mib-V2c/GOWONE-SMARTPDU-MIB.mib


BIN
Liyuezong/SNMP协议设计/Gowone-SmartPDU-mib-V2c/GOWONE-SMARTPDU-MIB.smidb


+ 85 - 0
Liyuezong/SNMP协议设计/Gowone-SmartPDU-mib-V2c/agent代理开发的.c及.h文件/pduMIB.c

@@ -42,6 +42,7 @@ init_pduMIB(void)
     const oid pduPactivePower_oid[] = { 1,3,6,1,4,1,2024,1,3,5 };
     const oid pduReactivePower_oid[] = { 1,3,6,1,4,1,2024,1,3,6 };
     const oid pduApparentPower_oid[] = { 1,3,6,1,4,1,2024,1,3,7 };
+    const oid pduPowerStatus_oid[] = { 1,3,6,1,4,1,2024,1,3,8 };
     const oid pduTelnetEnable_oid[] = { 1,3,6,1,4,1,2024,1,5,2,1 };
     const oid pduTelnetUserName_oid[] = { 1,3,6,1,4,1,2024,1,5,2,2 };
     const oid pduTelnetUserPW_oid[] = { 1,3,6,1,4,1,2024,1,5,2,3 };
@@ -220,6 +221,11 @@ init_pduMIB(void)
                                pduApparentPower_oid, OID_LENGTH(pduApparentPower_oid),
                                HANDLER_CAN_RONLY
         ));
+    netsnmp_register_scalar(
+        netsnmp_create_handler_registration("pduPowerStatus", handle_pduPowerStatus,
+                               pduPowerStatus_oid, OID_LENGTH(pduPowerStatus_oid),
+                               HANDLER_CAN_RWRITE
+        ));
     netsnmp_register_scalar(
         netsnmp_create_handler_registration("pduTelnetEnable", handle_pduTelnetEnable,
                                pduTelnetEnable_oid, OID_LENGTH(pduTelnetEnable_oid),
@@ -1968,6 +1974,85 @@ handle_pduApparentPower(netsnmp_mib_handler *handler,
     return SNMP_ERR_NOERROR;
 }
 int
+handle_pduPowerStatus(netsnmp_mib_handler *handler,
+                          netsnmp_handler_registration *reginfo,
+                          netsnmp_agent_request_info   *reqinfo,
+                          netsnmp_request_info         *requests)
+{
+    int ret;
+    /* We are never called for a GETNEXT if it's registered as a
+       "instance", as it's "magically" handled for us.  */
+
+    /* a instance handler also only hands us one request at a time, so
+       we don't need to loop over a list of requests; we'll only get one. */
+    
+    switch(reqinfo->mode) {
+
+        case MODE_GET:
+            snmp_set_var_typed_value(requests->requestvb, ASN_INTEGER,
+                                     /* XXX: a pointer to the scalar's data */,
+                                     /* XXX: the length of the data in bytes */);
+            break;
+
+        /*
+         * SET REQUEST
+         *
+         * multiple states in the transaction.  See:
+         * http://www.net-snmp.org/tutorial-5/toolkit/mib_module/set-actions.jpg
+         */
+        case MODE_SET_RESERVE1:
+                /* or you could use netsnmp_check_vb_type_and_size instead */
+            ret = netsnmp_check_vb_type(requests->requestvb, ASN_INTEGER);
+            if ( ret != SNMP_ERR_NOERROR ) {
+                netsnmp_set_request_error(reqinfo, requests, ret );
+            }
+            break;
+
+        case MODE_SET_RESERVE2:
+            /* XXX malloc "undo" storage buffer */
+            if (/* XXX if malloc, or whatever, failed: */) {
+                netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_RESOURCEUNAVAILABLE);
+            }
+            break;
+
+        case MODE_SET_FREE:
+            /* XXX: free resources allocated in RESERVE1 and/or
+               RESERVE2.  Something failed somewhere, and the states
+               below won't be called. */
+            break;
+
+        case MODE_SET_ACTION:
+            /* XXX: perform the value change here */
+            if (/* XXX: error? */) {
+                netsnmp_set_request_error(reqinfo, requests, /* some error */);
+            }
+            break;
+
+        case MODE_SET_COMMIT:
+            /* XXX: delete temporary storage */
+            if (/* XXX: error? */) {
+                /* try _really_really_ hard to never get to this point */
+                netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_COMMITFAILED);
+            }
+            break;
+
+        case MODE_SET_UNDO:
+            /* XXX: UNDO and return to previous value for the object */
+            if (/* XXX: error? */) {
+                /* try _really_really_ hard to never get to this point */
+                netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_UNDOFAILED);
+            }
+            break;
+
+        default:
+            /* we should never get here, so this is a really bad error */
+            snmp_log(LOG_ERR, "unknown mode (%d) in handle_pduPowerStatus\n", reqinfo->mode );
+            return SNMP_ERR_GENERR;
+    }
+
+    return SNMP_ERR_NOERROR;
+}
+int
 handle_pduTelnetEnable(netsnmp_mib_handler *handler,
                           netsnmp_handler_registration *reginfo,
                           netsnmp_agent_request_info   *reqinfo,

+ 1 - 0
Liyuezong/SNMP协议设计/Gowone-SmartPDU-mib-V2c/agent代理开发的.c及.h文件/pduMIB.h

@@ -37,6 +37,7 @@ Netsnmp_Node_Handler handle_pduPowerFactor;
 Netsnmp_Node_Handler handle_pduPactivePower;
 Netsnmp_Node_Handler handle_pduReactivePower;
 Netsnmp_Node_Handler handle_pduApparentPower;
+Netsnmp_Node_Handler handle_pduPowerStatus;
 Netsnmp_Node_Handler handle_pduTelnetEnable;
 Netsnmp_Node_Handler handle_pduTelnetUserName;
 Netsnmp_Node_Handler handle_pduTelnetUserPW;