#!/bin/sh . ../support/simple_eval_tools.sh HEADER 'AgentX subagent in Perl (using NetSNMP::agent)' SKIPIF NETSNMP_DISABLE_SNMPV2C SKIPIFNOT USING_AGENTX_MASTER_MODULE SKIPIFNOT USING_AGENTX_SUBAGENT_MODULE SKIPIFNOT HAVE_SIGHUP # make sure the toolkit has been configured --with-perl-modules [ -d ${SNMP_UPDIR}/perl/blib/arch/auto/NetSNMP/agent ] || SKIP Not --with-perl-modules # # Begin test # snmp_version=v2c TESTCOMMUNITY=testcommunity . ./Sv2cconfig TESTOID=.1.3.6.1.4.1.8872.9999.9999.1.0 TESTOID2=.1.3.6.1.4.1.8872.9999.9999.2.0 AGENTX_SOCKET=${SNMP_TMPDIR}/agentx_socket PERL_SUBAGENT=${SNMP_TMPDIR}/hello.pl PERL_SUBAGENT_CONF=${SNMP_TMPDIR}/hello.conf cat >$PERL_SUBAGENT <\$pidfile") or die "Couldn't open \$pidfile"; print PIDFILE \$\$; close(PIDFILE); sub my_snmp_handler { my (\$handler, \$registration_info, \$request_info, \$requests) = @_; for(my \$request = \$requests; \$request; \$request = \$request->next()) { if (\$request_info->getMode() == MODE_GET) { if (\$request->getOID() == new NetSNMP::OID(\$myoid)) { \$request->setValue(ASN_OCTET_STR, "hello world"); last; } elsif (\$request->getOID() == new NetSNMP::OID(\$myoid2)) { \$request->setValue(ASN_OCTET_STR, "hello again world"); last; } } } } sub shut_it_down { \$running = 0; } netsnmp_ds_set_boolean(NETSNMP_DS_APPLICATION_ID, NETSNMP_DS_AGENT_NO_ROOT_ACCESS, 1); my \$agent = new NetSNMP::agent('Name' => 'hello', 'AgentX' => 1); my \$regoid = new NetSNMP::OID(\$regat); \$agent->register("hello", \$regoid, \&my_snmp_handler); \$SIG{'INT'} = \&shut_it_down; \$SIG{'QUIT'} = \&shut_it_down; \$running = 1; while(\$running) { \$agent->agent_check_and_process(1); } \$agent->shutdown(); ## end main code exit 0; } exit 0; } waitpid(\$pid, 0); END echo "agentxsocket $AGENTX_SOCKET" > $PERL_SUBAGENT_CONF CONFIGAGENT master agentx CONFIGAGENT agentxsocket $AGENTX_SOCKET STARTAGENT # start perl subagent /usr/bin/env SNMPCONFPATH="${SNMP_TMPDIR}${SNMP_ENV_SEPARATOR}${SNMP_TMP_PERSISTENTDIR}" $SNMP_PERLPROG $PERL_SUBAGENT $SNMP_AGENTX_PID_FILE >$SNMP_AGENTX_LOG_FILE 2>&1 DELAY ## 1) SNMP GET against mib object implemented by the perl subagent CAPTURE "snmpget -$snmp_version -c $TESTCOMMUNITY $SNMP_TRANSPORT_SPEC:$SNMP_TEST_DEST$SNMP_SNMPD_PORT $TESTOID" CHECK "hello world" ## 2) persistency: reconfigure master agent (HUP), re-test HUPAGENT CAPTURE "snmpget -$snmp_version -c $TESTCOMMUNITY $SNMP_TRANSPORT_SPEC:$SNMP_TEST_DEST$SNMP_SNMPD_PORT $TESTOID2" CHECK "hello again world" ## stop STOPAGENT STOPPROG $SNMP_AGENTX_PID_FILE FINISHED