Logo
Home page Net-SNMP

Archive Search:

Require all words?

Site Search:
Google
Main Page | Modules | Data Structures | File List | Data Fields | Related Pages | Examples

multiplexer.c

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 }

Generated on Fri Dec 30 13:47:45 2005 for net-snmp by  doxygen 1.3.9.1

Valid CSS!


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.