4 #include <net-snmp/net-snmp-config.h>
5 #include <net-snmp/net-snmp-includes.h>
6 #include <net-snmp/agent/net-snmp-agent-includes.h>
8 static PerlInterpreter *my_perl;
10 void boot_DynaLoader(CV * cv);
15 char myfile[] = __FILE__;
16 char modulename[] = "DynaLoader::boot_DynaLoader";
18 * DynaLoader is a special case
20 newXS(modulename, boot_DynaLoader, myfile);
24 maybe_source_perl_startup(void)
26 const char *embedargs[] = { "", "" };
27 const char *perl_init_file = netsnmp_ds_get_string(NETSNMP_DS_APPLICATION_ID,
28 NETSNMP_DS_AGENT_PERL_INIT_FILE);
29 char init_file[SNMP_MAXBUF];
31 static int have_done_init = 0;
37 if (!perl_init_file) {
38 snprintf(init_file, sizeof(init_file) - 1,
39 "%s/%s", SNMPSHAREPATH, "snmp_perl.pl");
40 perl_init_file = init_file;
42 embedargs[1] = perl_init_file;
44 DEBUGMSGTL(("perl", "initializing perl (%s)\n", embedargs[1]));
45 my_perl = perl_alloc();
49 perl_construct(my_perl);
50 if (perl_parse(my_perl, xs_init, 2, (char **) embedargs, NULL))
53 if (perl_run(my_perl))
56 DEBUGMSGTL(("perl", "done initializing perl\n"));
61 snmp_log(LOG_ERR, "embedded perl support failed to initalize\n");
62 netsnmp_ds_set_boolean(NETSNMP_DS_APPLICATION_ID,
63 NETSNMP_DS_AGENT_DISABLE_PERL, 1);
68 do_something_perlish(char *something)
70 if (netsnmp_ds_get_boolean(NETSNMP_DS_APPLICATION_ID,
71 NETSNMP_DS_AGENT_DISABLE_PERL)) {
74 maybe_source_perl_startup();
75 if (netsnmp_ds_get_boolean(NETSNMP_DS_APPLICATION_ID,
76 NETSNMP_DS_AGENT_DISABLE_PERL)) {
79 DEBUGMSGTL(("perl", "calling perl\n"));
82 eval_pv(something, TRUE);
84 #ifdef HAVE_PERL_EVAL_PV
86 perl_eval_pv(something, TRUE);
87 #endif /* HAVE_PERL_EVAL_PV */
88 #endif /* HAVE_EVAL_PV */
89 DEBUGMSGTL(("perl", "finished calling perl\n"));
93 perl_config_handler(const char *token, char *line)
95 do_something_perlish(line);
101 const char *appid = netsnmp_ds_get_string(NETSNMP_DS_LIBRARY_ID,
102 NETSNMP_DS_LIB_APPTYPE);
103 const char *defaultid = "snmpd";
110 * register config handlers
112 snmpd_register_config_handler("perl", perl_config_handler, NULL,
116 * define the perlInitFile token to point to an init file
118 netsnmp_ds_register_premib(ASN_OCTET_STR, appid, "perlInitFile",
119 NETSNMP_DS_APPLICATION_ID,
120 NETSNMP_DS_AGENT_PERL_INIT_FILE);
123 * define the perlInitFile token to point to an init file
125 netsnmp_ds_register_premib(ASN_BOOLEAN, appid, "disablePerl",
126 NETSNMP_DS_APPLICATION_ID,
127 NETSNMP_DS_AGENT_DISABLE_PERL);
133 if (netsnmp_ds_get_boolean(NETSNMP_DS_APPLICATION_ID,
134 NETSNMP_DS_AGENT_DISABLE_PERL)) {
137 DEBUGMSGTL(("perl", "shutting down perl\n"));
138 perl_destruct(my_perl);
140 DEBUGMSGTL(("perl", "finished shutting down perl\n"));