00001 #include <net-snmp/net-snmp-config.h> 00002 00003 #include <sys/types.h> 00004 00005 #include <net-snmp/net-snmp-includes.h> 00006 #include <net-snmp/agent/net-snmp-agent-includes.h> 00007 00008 #include <net-snmp/agent/multiplexer.h> 00009 00031 netsnmp_mib_handler * 00032 netsnmp_get_multiplexer_handler(netsnmp_mib_handler_methods *req) 00033 { 00034 netsnmp_mib_handler *ret = NULL; 00035 00036 if (!req) { 00037 snmp_log(LOG_INFO, 00038 "netsnmp_get_multiplexer_handler(NULL) called\n"); 00039 return NULL; 00040 } 00041 00042 ret = 00043 netsnmp_create_handler("multiplexer", 00044 netsnmp_multiplexer_helper_handler); 00045 if (ret) { 00046 ret->myvoid = (void *) req; 00047 } 00048 return ret; 00049 } 00050 00052 int 00053 netsnmp_multiplexer_helper_handler(netsnmp_mib_handler *handler, 00054 netsnmp_handler_registration *reginfo, 00055 netsnmp_agent_request_info *reqinfo, 00056 netsnmp_request_info *requests) 00057 { 00058 00059 netsnmp_mib_handler_methods *methods; 00060 00061 if (!handler->myvoid) { 00062 snmp_log(LOG_INFO, "improperly registered multiplexer found\n"); 00063 return SNMP_ERR_GENERR; 00064 } 00065 00066 methods = (netsnmp_mib_handler_methods *) handler->myvoid; 00067 00068 switch (reqinfo->mode) { 00069 case MODE_GETBULK: 00070 handler = methods->getbulk_handler; 00071 if (handler) 00072 break; 00073 /* Deliberate fallthrough to use GetNext handler */ 00074 case MODE_GETNEXT: 00075 handler = methods->getnext_handler; 00076 if (handler) 00077 break; 00078 /* Deliberate fallthrough to use Get handler */ 00079 case MODE_GET: 00080 handler = methods->get_handler; 00081 if (!handler) { 00082 netsnmp_request_set_error_all(requests, SNMP_NOSUCHOBJECT); 00083 } 00084 break; 00085 00086 case MODE_SET_RESERVE1: 00087 case MODE_SET_RESERVE2: 00088 case MODE_SET_ACTION: 00089 case MODE_SET_COMMIT: 00090 case MODE_SET_FREE: 00091 case MODE_SET_UNDO: 00092 handler = methods->set_handler; 00093 if (!handler) { 00094 netsnmp_request_set_error_all(requests, SNMP_ERR_NOTWRITABLE); 00095 return SNMP_ERR_NOERROR; 00096 } 00097 break; 00098 00099 /* 00100 * XXX: process SETs specially, and possibly others 00101 */ 00102 default: 00103 snmp_log(LOG_ERR, "unsupported mode for multiplexer: %d\n", 00104 reqinfo->mode); 00105 return SNMP_ERR_GENERR; 00106 } 00107 if (!handler) { 00108 snmp_log(LOG_ERR, 00109 "No handler enabled for mode %d in multiplexer\n", 00110 reqinfo->mode); 00111 return SNMP_ERR_GENERR; 00112 } 00113 return netsnmp_call_handler(handler, reginfo, reqinfo, requests); 00114 }
1.3.9.1
Last modified: Thursday, 01-Mar-2007 16:20:05 PST
For questions regarding web content and site functionality, please write to the net-snmp-users mail list.