diff options
author | Kozlov Dmitry <xeb@mail.ru> | 2011-12-27 17:24:55 +0400 |
---|---|---|
committer | Kozlov Dmitry <xeb@mail.ru> | 2011-12-27 17:24:55 +0400 |
commit | f1c39d3ff40aece8278afaec0098607d498cd768 (patch) | |
tree | 1b533df2004b636201ac52c02683a5a980744a83 /accel-pppd | |
parent | 1ade87d064ff682e0d836558e73ad7ca3e7148ec (diff) | |
download | accel-ppp-f1c39d3ff40aece8278afaec0098607d498cd768.tar.gz accel-ppp-f1c39d3ff40aece8278afaec0098607d498cd768.zip |
snmp: implemneted new node (ACCEL-PPP-MIB::cli.0) which can be used to send cli commands
Diffstat (limited to 'accel-pppd')
-rw-r--r-- | accel-pppd/cli/cli.c | 2 | ||||
-rw-r--r-- | accel-pppd/extra/net-snmp/ACCEL-PPP-MIB.txt | 8 | ||||
-rw-r--r-- | accel-pppd/extra/net-snmp/CMakeLists.txt | 1 | ||||
-rw-r--r-- | accel-pppd/extra/net-snmp/agent.c | 2 | ||||
-rw-r--r-- | accel-pppd/extra/net-snmp/exec_cli.c | 123 | ||||
-rw-r--r-- | accel-pppd/extra/net-snmp/exec_cli.h | 12 |
6 files changed, 147 insertions, 1 deletions
diff --git a/accel-pppd/cli/cli.c b/accel-pppd/cli/cli.c index 00d5ffb..917634c 100644 --- a/accel-pppd/cli/cli.c +++ b/accel-pppd/cli/cli.c @@ -128,7 +128,7 @@ static int split(char *buf, char **ptr) return i; } -int cli_process_cmd(struct cli_client_t *cln) +int __export cli_process_cmd(struct cli_client_t *cln) { struct cli_simple_cmd_t *cmd1; struct cli_regexp_cmd_t *cmd2; diff --git a/accel-pppd/extra/net-snmp/ACCEL-PPP-MIB.txt b/accel-pppd/extra/net-snmp/ACCEL-PPP-MIB.txt index 5af38e8..20f7f94 100644 --- a/accel-pppd/extra/net-snmp/ACCEL-PPP-MIB.txt +++ b/accel-pppd/extra/net-snmp/ACCEL-PPP-MIB.txt @@ -323,4 +323,12 @@ shutdown OBJECT-TYPE "shutdown accel-ppp" ::= { accelPPPAdmin 2 } +cli OBJECT-TYPE + SYNTAX OCTET STRING + MAX-ACCESS write-only + STATUS current + DESCRIPTION + "execute cli command" + ::= { accelPPPAdmin 3 } + END diff --git a/accel-pppd/extra/net-snmp/CMakeLists.txt b/accel-pppd/extra/net-snmp/CMakeLists.txt index bb0e6f7..b61c0d0 100644 --- a/accel-pppd/extra/net-snmp/CMakeLists.txt +++ b/accel-pppd/extra/net-snmp/CMakeLists.txt @@ -12,6 +12,7 @@ SET(sources statPPTP.c terminate.c shutdown.c + exec_cli.c ) ADD_LIBRARY(net-snmp SHARED ${sources}) diff --git a/accel-pppd/extra/net-snmp/agent.c b/accel-pppd/extra/net-snmp/agent.c index dd38b44..878cd9a 100644 --- a/accel-pppd/extra/net-snmp/agent.c +++ b/accel-pppd/extra/net-snmp/agent.c @@ -16,6 +16,7 @@ #include "terminate.h" #include "shutdown.h" #include "sessionTable.h" +#include "exec_cli.h" static const char *conf_agent_name = "accel-ppp"; static int conf_master = 0; @@ -96,6 +97,7 @@ static void *snmp_thread(void *a) init_terminate(); init_shutdown(); init_sessionTable(); + init_cli(); init_snmp(conf_agent_name); diff --git a/accel-pppd/extra/net-snmp/exec_cli.c b/accel-pppd/extra/net-snmp/exec_cli.c new file mode 100644 index 0000000..63a8958 --- /dev/null +++ b/accel-pppd/extra/net-snmp/exec_cli.c @@ -0,0 +1,123 @@ +/* + * Note: this file originally auto-generated by mib2c using + * : mib2c.scalar.conf 11805 2005-01-07 09:37:18Z dts12 $ + */ + +#include <net-snmp/net-snmp-config.h> +#include <net-snmp/net-snmp-includes.h> +#include <net-snmp/agent/net-snmp-agent-includes.h> +#include "exec_cli.h" +#include "cli_p.h" + +#include "memdebug.h" + +static void no_disconnect(struct cli_client_t *tcln) +{ +} + +static int no_send(struct cli_client_t *tcln, const void *_buf, int size) +{ + return 0; +} + +static int no_sendv(struct cli_client_t *tcln, const char *fmt, va_list ap) +{ + return 0; +} + +static void set_action(const char *cmd, size_t len) +{ + struct cli_client_t cc = { + .cmdline = _malloc(len + 1), + .send = no_send, + .sendv = no_sendv, + .disconnect = no_disconnect, + }; + + memcpy(cc.cmdline, cmd, len); + cc.cmdline[len] = 0; + + cli_process_cmd(&cc); + + _free(cc.cmdline); +} + +/** Initializes the cli module */ +void +init_cli(void) +{ + static oid cli_oid[] = { 1,3,6,1,4,1,8072,100,3,3 }; + + DEBUGMSGTL(("cli", "Initializing\n")); + + netsnmp_register_scalar( + netsnmp_create_handler_registration("cli", handle_cli, + cli_oid, OID_LENGTH(cli_oid), + HANDLER_CAN_RWRITE + )); +} + +int +handle_cli(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: + netsnmp_set_request_error(reqinfo, requests, SNMP_NOSUCHINSTANCE ); + 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_OCTET_STR); + if ( ret != SNMP_ERR_NOERROR ) { + netsnmp_set_request_error(reqinfo, requests, ret ); + } + break; + + case MODE_SET_RESERVE2: + /* XXX malloc "undo" storage buffer */ + 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 */ + set_action((char *)requests->requestvb->val.string, requests->requestvb->val_len); + break; + + case MODE_SET_COMMIT: + /* XXX: delete temporary storage */ + break; + + case MODE_SET_UNDO: + /* XXX: UNDO and return to previous value for the object */ + break; + + default: + /* we should never get here, so this is a really bad error */ + snmp_log(LOG_ERR, "unknown mode (%d) in handle_cli\n", reqinfo->mode ); + return SNMP_ERR_GENERR; + } + + return SNMP_ERR_NOERROR; +} diff --git a/accel-pppd/extra/net-snmp/exec_cli.h b/accel-pppd/extra/net-snmp/exec_cli.h new file mode 100644 index 0000000..78bcd50 --- /dev/null +++ b/accel-pppd/extra/net-snmp/exec_cli.h @@ -0,0 +1,12 @@ +/* + * Note: this file originally auto-generated by mib2c using + * : mib2c.scalar.conf 11805 2005-01-07 09:37:18Z dts12 $ + */ +#ifndef CLI_H +#define CLI_H + +/* function declarations */ +void init_cli(void); +Netsnmp_Node_Handler handle_cli; + +#endif /* CLI_H */ |