diff options
Diffstat (limited to 'perl/agent/default_store')
-rw-r--r-- | perl/agent/default_store/Makefile.PL | 228 | ||||
-rw-r--r-- | perl/agent/default_store/default_store.pm | 370 | ||||
-rw-r--r-- | perl/agent/default_store/default_store.xs | 705 | ||||
-rwxr-xr-x | perl/agent/default_store/gen | 118 | ||||
-rw-r--r-- | perl/agent/default_store/test.pl | 69 |
5 files changed, 1490 insertions, 0 deletions
diff --git a/perl/agent/default_store/Makefile.PL b/perl/agent/default_store/Makefile.PL new file mode 100644 index 0000000..ed6483a --- /dev/null +++ b/perl/agent/default_store/Makefile.PL @@ -0,0 +1,228 @@ +use ExtUtils::MakeMaker; +require 5; +use Config; +use Getopt::Long; +my $lib_version; +my %MakeParams = (); + +%MakeParams = InitMakeParams(); + +WriteMakefile(%MakeParams); + +Check_Version(); + +sub InitMakeParams { + my $opts; + my %Params = ( + 'NAME' => 'NetSNMP::agent::default_store', + 'VERSION_FROM' => 'default_store.pm', # finds $VERSION + 'XSPROTOARG' => '-prototypes', + ); + + if ($ENV{'OSTYPE'} eq 'msys') { + $Params{'DEFINE'} = "-DMINGW_PERL"; + } + + my ($snmp_lib, $snmp_llib, $sep); + if (($Config{'osname'} eq 'MSWin32' && $ENV{'OSTYPE'} eq '')) { + $opts = NetSNMPGetOpts(); + $Params{'DEFINE'} = "-DMSVC_PERL -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_WARNINGS"; + $sep = '\\'; + $snmp_lib_file = 'netsnmp.lib'; + $snmp_link_lib = 'netsnmp'; + + if (lc($opts->{'debug'}) eq "true") { + $lib_dir = 'lib\\debug'; + } + else { + $lib_dir = 'lib\\release'; + } + + if (lc($opts->{'insource'}) eq "true") { + $Params{'LIBS'} = "-L$basedir\\win32\\$lib_dir\\ -l$snmp_link_lib"; + } + else { + my @LibDirs = split (';',$ENV{LIB}); + my $LibDir; + if ($opts->{'prefix'}) { + push (@LibDirs,"$ENV{'NET-SNMP-PATH'}${sep}lib"); + } + $noLibDir = 1; + while ($noLibDir) { + $LibDir = find_files(["$snmp_lib_file"],\@LibDirs); + if ($LibDir ne '') { + $noLibDir = 0; + # Put quotes around LibDir to allow spaces in paths + $LibDir = '"' . $LibDir . '"'; + } + else + { + @LibDirs = (); + $LibDirs[0] = prompt("The Net-SNMP library ($snmp_lib_file) could not be found.\nPlease enter the directory where it is located:"); + $LibDirs[0] =~ s/\\$//; + } + } + $Params{LIBS} = "-L$LibDir -l$snmp_link_lib"; + } + + $Params{'INC'} = "-I$basedir\\include\\ -I$basedir\\include\\net-snmp\\ -I$basedir\\win32\\ "; + } + else { + $opts = NetSNMPGetOpts("../../"); + $Params{'LIBS'} = `$opts->{'nsconfig'} --libs`; + chomp($Params{'LIBS'}); + $Params{'CCFLAGS'} = `$opts->{'nsconfig'} --cflags`; + chomp($Params{'CCFLAGS'}); + $Params{'CCFLAGS'} .= " " . $Config{'ccflags'}; + $lib_version = `$opts->{'nsconfig'} --version`; + if ($opts->{'insource'} eq "true") { + $Params{'LIBS'} = "-L../../../snmplib/.libs -L../../../snmplib/ " . $Params{'LIBS'}; + $Params{'CCFLAGS'} = "-I../../../include " . $Params{'CCFLAGS'}; + } + $Params{'CCFLAGS'} =~ s/ -W(all|inline|strict-prototypes|write-strings|cast-qual|no-char-subscripts)//g; # ignore developer warnings + if ($Params{'LIBS'} eq "" || $Params{'CCFLAGS'} eq "") { + die "You need to install net-snmp first (I can't find net-snmp-config)"; + } + } + + return(%Params); +} + +# common subroutines -- DO NOT EDIT. +# They are imported from the Makefile.subs.pl file +sub NetSNMPGetOpts { + my %ret; + my $rootpath = shift; + $rootpath = "../" if (!$rootpath); + $rootpath .= '/' if ($rootpath !~ /\/$/); + + if (($Config{'osname'} eq 'MSWin32' && $ENV{'OSTYPE'} eq '')) { + + # Grab command line options first. Only used if environment variables are not set + GetOptions("NET-SNMP-IN-SOURCE=s" => \$ret{'insource'}, + "NET-SNMP-PATH=s" => \$ret{'prefix'}, + "NET-SNMP-DEBUG=s" => \$ret{'debug'}); + + if ($ENV{'NET-SNMP-IN-SOURCE'}) + { + $ret{'insource'} = $ENV{'NET-SNMP-IN-SOURCE'}; + undef ($ret{'prefix'}); + } + elsif ($ENV{'NET-SNMP-PATH'}) + { + $ret{'prefix'} = $ENV{'NET-SNMP-PATH'}; + } + + if ($ENV{'NET-SNMP-DEBUG'}) + { + $ret{'debug'} = $ENV{'NET-SNMP-DEBUG'}; + } + + # Update environment variables in case they are needed + $ENV{'NET-SNMP-IN-SOURCE'} = $ret{'insource'}; + $ENV{'NET-SNMP-PATH'} = $ret{'prefix'}; + $ENV{'NET-SNMP-DEBUG'} = $ret{'debug'}; + + $basedir = `%COMSPEC% /c cd`; + chomp $basedir; + $basedir =~ /(.*?)\\perl.*/; + $basedir = $1; + print "Net-SNMP base directory: $basedir\n"; + if ($basedir =~ / /) { + die "\nA space has been detected in the base directory. This is not " . + "supported\nPlease rename the folder and try again.\n\n"; + } + } + else + { + if ($ENV{'NET-SNMP-CONFIG'} && + $ENV{'NET-SNMP-IN-SOURCE'}) { + # have env vars, pull from there + $ret{'nsconfig'} = $ENV{'NET-SNMP-CONFIG'}; + $ret{'insource'} = $ENV{'NET-SNMP-IN-SOURCE'}; + } else { + # don't have env vars, pull from command line and put there + GetOptions("NET-SNMP-CONFIG=s" => \$ret{'nsconfig'}, + "NET-SNMP-IN-SOURCE=s" => \$ret{'insource'}); + + if (lc($ret{'insource'}) eq "true" && $ret{'nsconfig'} eq "") { + $ret{'nsconfig'}="sh ROOTPATH../net-snmp-config"; + } elsif ($ret{'nsconfig'} eq "") { + $ret{'nsconfig'}="net-snmp-config"; + } + + $ENV{'NET-SNMP-CONFIG'} = $ret{'nsconfig'}; + $ENV{'NET-SNMP-IN-SOURCE'} = $ret{'insource'}; + } + } + + $ret{'nsconfig'} =~ s/ROOTPATH/$rootpath/; + + $ret{'rootpath'} = $rootpath; + + \%ret; +} + +sub find_files { + my($f,$d) = @_; + my ($dir,$found,$file); + for $dir (@$d){ + $found = 0; + for $file (@$f) { + $found++ if -f "$dir/$file"; + } + if ($found == @$f) { + return $dir; + } + } +} + + +sub Check_Version { + if (($Config{'osname'} ne 'MSWin32' || $ENV{'OSTYPE'} ne '')) { + my $foundversion = 0; + return if ($ENV{'NETSNMP_DONT_CHECK_VERSION'}); + open(I,"<Makefile"); + while (<I>) { + if (/^VERSION = (.*)/) { + my $perlver = $1; + my $srcver = $lib_version; + chomp($srcver); + my $srcfloat = floatize_version($srcver); + $perlver =~ s/pre/0./; + # we allow for perl/CPAN-only revisions beyond the default + # version formatting of net-snmp itself. + $perlver =~ s/(\.\d{5}).*/\1/; + $perlver =~ s/0*$//; + if ($srcfloat ne $perlver) { + if (!$foundversion) { + print STDERR "ERROR: +Net-SNMP installed version: $srcver => $srcfloat +Perl Module Version: $perlver + +These versions must match for perfect support of the module. It is possible +that different versions may work together, but it is strongly recommended +that you make these two versions identical. You can get the Net-SNMP +source code and the associated perl modules directly from + + http://www.net-snmp.org/ + +If you want to continue anyway please set the NETSNMP_DONT_CHECK_VERSION +environmental variable to 1 and re-run the Makefile.PL script.\n"; + exit(1); + } + } + $foundversion = 1; + last; + } + } + close(I); + die "ERROR: Couldn't find version number of this module\n" + if (!$foundversion); + } +} + +sub floatize_version { + my ($major, $minor, $patch, $opps) = ($_[0] =~ /^(\d+)\.(\d+)\.?(\d*)\.?(\d*)/); + return $major + $minor/100 + $patch/10000 + $opps/100000; +} diff --git a/perl/agent/default_store/default_store.pm b/perl/agent/default_store/default_store.pm new file mode 100644 index 0000000..ebac1ec --- /dev/null +++ b/perl/agent/default_store/default_store.pm @@ -0,0 +1,370 @@ +package NetSNMP::agent::default_store; + +use strict; +use warnings; +use Carp; + +require Exporter; +require DynaLoader; +use AutoLoader; + +use vars qw(@ISA %EXPORT_TAGS @EXPORT_OK @EXPORT $VERSION $AUTOLOAD); + +@ISA = qw(Exporter DynaLoader); + +# Items to export into callers namespace by default. Note: do not export +# names by default without a very good reason. Use EXPORT_OK instead. +# Do not simply export all your public functions/methods/constants. + +# This allows declaration use NetSNMP::agent::default_store ':all'; +# If you do not need this, moving things directly into @EXPORT or @EXPORT_OK +# will save memory. +%EXPORT_TAGS = ( 'all' => [ qw( + NETSNMP_DS_AGENT_VERBOSE + NETSNMP_DS_AGENT_ROLE + NETSNMP_DS_AGENT_NO_ROOT_ACCESS + NETSNMP_DS_AGENT_AGENTX_MASTER + NETSNMP_DS_AGENT_QUIT_IMMEDIATELY + NETSNMP_DS_AGENT_DISABLE_PERL + NETSNMP_DS_AGENT_NO_CONNECTION_WARNINGS + NETSNMP_DS_AGENT_LEAVE_PIDFILE + NETSNMP_DS_AGENT_NO_CACHING + NETSNMP_DS_AGENT_STRICT_DISMAN + NETSNMP_DS_AGENT_DONT_RETAIN_NOTIFICATIONS + NETSNMP_DS_AGENT_DONT_LOG_TCPWRAPPERS_CONNECTS + NETSNMP_DS_AGENT_SKIPNFSINHOSTRESOURCES + NETSNMP_DS_AGENT_PROGNAME + NETSNMP_DS_AGENT_X_SOCKET + NETSNMP_DS_AGENT_PORTS + NETSNMP_DS_AGENT_INTERNAL_SECNAME + NETSNMP_DS_AGENT_PERL_INIT_FILE + NETSNMP_DS_SMUX_SOCKET + NETSNMP_DS_NOTIF_LOG_CTX + NETSNMP_DS_AGENT_FLAGS + NETSNMP_DS_AGENT_USERID + NETSNMP_DS_AGENT_GROUPID + NETSNMP_DS_AGENT_AGENTX_PING_INTERVAL + NETSNMP_DS_AGENT_AGENTX_TIMEOUT + NETSNMP_DS_AGENT_AGENTX_RETRIES + NETSNMP_DS_AGENT_X_SOCK_PERM + NETSNMP_DS_AGENT_X_DIR_PERM + NETSNMP_DS_AGENT_X_SOCK_USER + NETSNMP_DS_AGENT_X_SOCK_GROUP + NETSNMP_DS_AGENT_CACHE_TIMEOUT + NETSNMP_DS_AGENT_INTERNAL_VERSION + NETSNMP_DS_AGENT_INTERNAL_SECLEVEL + NETSNMP_DS_AGENT_MAX_GETBULKREPEATS + NETSNMP_DS_AGENT_MAX_GETBULKRESPONSES +) ] ); + +@EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } ); + +@EXPORT = qw( + NETSNMP_DS_AGENT_VERBOSE + NETSNMP_DS_AGENT_ROLE + NETSNMP_DS_AGENT_NO_ROOT_ACCESS + NETSNMP_DS_AGENT_AGENTX_MASTER + NETSNMP_DS_AGENT_QUIT_IMMEDIATELY + NETSNMP_DS_AGENT_DISABLE_PERL + NETSNMP_DS_AGENT_NO_CONNECTION_WARNINGS + NETSNMP_DS_AGENT_LEAVE_PIDFILE + NETSNMP_DS_AGENT_NO_CACHING + NETSNMP_DS_AGENT_STRICT_DISMAN + NETSNMP_DS_AGENT_DONT_RETAIN_NOTIFICATIONS + NETSNMP_DS_AGENT_DONT_LOG_TCPWRAPPERS_CONNECTS + NETSNMP_DS_AGENT_SKIPNFSINHOSTRESOURCES + NETSNMP_DS_AGENT_PROGNAME + NETSNMP_DS_AGENT_X_SOCKET + NETSNMP_DS_AGENT_PORTS + NETSNMP_DS_AGENT_INTERNAL_SECNAME + NETSNMP_DS_AGENT_PERL_INIT_FILE + NETSNMP_DS_SMUX_SOCKET + NETSNMP_DS_NOTIF_LOG_CTX + NETSNMP_DS_AGENT_FLAGS + NETSNMP_DS_AGENT_USERID + NETSNMP_DS_AGENT_GROUPID + NETSNMP_DS_AGENT_AGENTX_PING_INTERVAL + NETSNMP_DS_AGENT_AGENTX_TIMEOUT + NETSNMP_DS_AGENT_AGENTX_RETRIES + NETSNMP_DS_AGENT_X_SOCK_PERM + NETSNMP_DS_AGENT_X_DIR_PERM + NETSNMP_DS_AGENT_X_SOCK_USER + NETSNMP_DS_AGENT_X_SOCK_GROUP + NETSNMP_DS_AGENT_CACHE_TIMEOUT + NETSNMP_DS_AGENT_INTERNAL_VERSION + NETSNMP_DS_AGENT_INTERNAL_SECLEVEL + NETSNMP_DS_AGENT_MAX_GETBULKREPEATS + NETSNMP_DS_AGENT_MAX_GETBULKRESPONSES +); +$VERSION = '5.0702'; + +sub AUTOLOAD { + # This AUTOLOAD is used to 'autoload' constants from the constant() + # XS function. + + my $constname; + ($constname = $AUTOLOAD) =~ s/.*:://; + croak "&NetSNMP::agent::default_store::constant not defined" if $constname eq 'cons +tant'; + my ($error, $val) = constant($constname); + if ($error) { croak $error; } + { + no strict 'refs'; + # Fixed between 5.005_53 and 5.005_61 +#XXX if ($] >= 5.00561) { +#XXX *$AUTOLOAD = sub () { $val }; +#XXX } +#XXX else { + *$AUTOLOAD = sub { $val }; +#XXX } + } + goto &$AUTOLOAD; +} + +bootstrap NetSNMP::agent::default_store $VERSION; + +# Preloaded methods go here. + +# Autoload methods go after =cut, and are processed by the autosplit program. + +1; +__END__ + +=head1 NAME + +NetSNMP::agent::default_store - Perl extension for Net-SNMP agent default storage + +=head1 SYNOPSIS + + use NetSNMP::agent::default_store qw(:all); + +=head1 DESCRIPTION + +The NetSNMP::agent::default_store module defines the agent-specific Net-SNMP +default storage variables. + +=head2 EXPORT + +None by default. + +=head2 Exportable constants + + NETSNMP_DS_AGENT_VERBOSE + NETSNMP_DS_AGENT_ROLE + NETSNMP_DS_AGENT_NO_ROOT_ACCESS + NETSNMP_DS_AGENT_AGENTX_MASTER + NETSNMP_DS_AGENT_QUIT_IMMEDIATELY + NETSNMP_DS_AGENT_DISABLE_PERL + NETSNMP_DS_AGENT_NO_CONNECTION_WARNINGS + NETSNMP_DS_AGENT_LEAVE_PIDFILE + NETSNMP_DS_AGENT_NO_CACHING + NETSNMP_DS_AGENT_STRICT_DISMAN + NETSNMP_DS_AGENT_DONT_RETAIN_NOTIFICATIONS + NETSNMP_DS_AGENT_DONT_LOG_TCPWRAPPERS_CONNECTS + NETSNMP_DS_AGENT_SKIPNFSINHOSTRESOURCES + NETSNMP_DS_AGENT_PROGNAME + NETSNMP_DS_AGENT_X_SOCKET + NETSNMP_DS_AGENT_PORTS + NETSNMP_DS_AGENT_INTERNAL_SECNAME + NETSNMP_DS_AGENT_PERL_INIT_FILE + NETSNMP_DS_SMUX_SOCKET + NETSNMP_DS_NOTIF_LOG_CTX + NETSNMP_DS_AGENT_FLAGS + NETSNMP_DS_AGENT_USERID + NETSNMP_DS_AGENT_GROUPID + NETSNMP_DS_AGENT_AGENTX_PING_INTERVAL + NETSNMP_DS_AGENT_AGENTX_TIMEOUT + NETSNMP_DS_AGENT_AGENTX_RETRIES + NETSNMP_DS_AGENT_X_SOCK_PERM + NETSNMP_DS_AGENT_X_DIR_PERM + NETSNMP_DS_AGENT_X_SOCK_USER + NETSNMP_DS_AGENT_X_SOCK_GROUP + NETSNMP_DS_AGENT_CACHE_TIMEOUT + NETSNMP_DS_AGENT_INTERNAL_VERSION + NETSNMP_DS_AGENT_INTERNAL_SECLEVEL + NETSNMP_DS_AGENT_MAX_GETBULKREPEATS + NETSNMP_DS_AGENT_MAX_GETBULKRESPONSES + + + NETSNMP_DS_AGENT_VERBOSE + NETSNMP_DS_AGENT_ROLE + NETSNMP_DS_AGENT_NO_ROOT_ACCESS + NETSNMP_DS_AGENT_AGENTX_MASTER + NETSNMP_DS_AGENT_QUIT_IMMEDIATELY + NETSNMP_DS_AGENT_DISABLE_PERL + NETSNMP_DS_AGENT_NO_CONNECTION_WARNINGS + NETSNMP_DS_AGENT_LEAVE_PIDFILE + NETSNMP_DS_AGENT_NO_CACHING + NETSNMP_DS_AGENT_STRICT_DISMAN + NETSNMP_DS_AGENT_DONT_RETAIN_NOTIFICATIONS + NETSNMP_DS_AGENT_DONT_LOG_TCPWRAPPERS_CONNECTS + NETSNMP_DS_AGENT_SKIPNFSINHOSTRESOURCES + NETSNMP_DS_AGENT_PROGNAME + NETSNMP_DS_AGENT_X_SOCKET + NETSNMP_DS_AGENT_PORTS + NETSNMP_DS_AGENT_INTERNAL_SECNAME + NETSNMP_DS_AGENT_PERL_INIT_FILE + NETSNMP_DS_SMUX_SOCKET + NETSNMP_DS_NOTIF_LOG_CTX + NETSNMP_DS_AGENT_FLAGS + NETSNMP_DS_AGENT_USERID + NETSNMP_DS_AGENT_GROUPID + NETSNMP_DS_AGENT_AGENTX_PING_INTERVAL + NETSNMP_DS_AGENT_AGENTX_TIMEOUT + NETSNMP_DS_AGENT_AGENTX_RETRIES + NETSNMP_DS_AGENT_X_SOCK_PERM + NETSNMP_DS_AGENT_X_DIR_PERM + NETSNMP_DS_AGENT_X_SOCK_USER + NETSNMP_DS_AGENT_X_SOCK_GROUP + NETSNMP_DS_AGENT_CACHE_TIMEOUT + NETSNMP_DS_AGENT_INTERNAL_VERSION + NETSNMP_DS_AGENT_INTERNAL_SECLEVEL + + + NETSNMP_DS_AGENT_VERBOSE + NETSNMP_DS_AGENT_ROLE + NETSNMP_DS_AGENT_NO_ROOT_ACCESS + NETSNMP_DS_AGENT_AGENTX_MASTER + NETSNMP_DS_AGENT_QUIT_IMMEDIATELY + NETSNMP_DS_AGENT_DISABLE_PERL + NETSNMP_DS_AGENT_NO_CONNECTION_WARNINGS + NETSNMP_DS_AGENT_LEAVE_PIDFILE + NETSNMP_DS_AGENT_NO_CACHING + NETSNMP_DS_AGENT_STRICT_DISMAN + NETSNMP_DS_AGENT_DONT_RETAIN_NOTIFICATIONS + NETSNMP_DS_AGENT_DONT_LOG_TCPWRAPPERS_CONNECTS + NETSNMP_DS_AGENT_SKIPNFSINHOSTRESOURCES + NETSNMP_DS_AGENT_PROGNAME + NETSNMP_DS_AGENT_X_SOCKET + NETSNMP_DS_AGENT_PORTS + NETSNMP_DS_AGENT_INTERNAL_SECNAME + NETSNMP_DS_AGENT_PERL_INIT_FILE + NETSNMP_DS_SMUX_SOCKET + NETSNMP_DS_NOTIF_LOG_CTX + NETSNMP_DS_AGENT_FLAGS + NETSNMP_DS_AGENT_USERID + NETSNMP_DS_AGENT_GROUPID + NETSNMP_DS_AGENT_AGENTX_PING_INTERVAL + NETSNMP_DS_AGENT_AGENTX_TIMEOUT + NETSNMP_DS_AGENT_AGENTX_RETRIES + NETSNMP_DS_AGENT_X_SOCK_PERM + NETSNMP_DS_AGENT_X_DIR_PERM + NETSNMP_DS_AGENT_X_SOCK_USER + NETSNMP_DS_AGENT_X_SOCK_GROUP + NETSNMP_DS_AGENT_CACHE_TIMEOUT + NETSNMP_DS_AGENT_INTERNAL_VERSION + NETSNMP_DS_AGENT_INTERNAL_SECLEVEL + + + NETSNMP_DS_AGENT_VERBOSE + NETSNMP_DS_AGENT_ROLE + NETSNMP_DS_AGENT_NO_ROOT_ACCESS + NETSNMP_DS_AGENT_AGENTX_MASTER + NETSNMP_DS_AGENT_QUIT_IMMEDIATELY + NETSNMP_DS_AGENT_DISABLE_PERL + NETSNMP_DS_AGENT_NO_CONNECTION_WARNINGS + NETSNMP_DS_AGENT_LEAVE_PIDFILE + NETSNMP_DS_AGENT_NO_CACHING + NETSNMP_DS_AGENT_STRICT_DISMAN + NETSNMP_DS_AGENT_DONT_RETAIN_NOTIFICATIONS + NETSNMP_DS_AGENT_DONT_LOG_TCPWRAPPERS_CONNECTS + NETSNMP_DS_AGENT_SKIPNFSINHOSTRESOURCES + NETSNMP_DS_AGENT_PROGNAME + NETSNMP_DS_AGENT_X_SOCKET + NETSNMP_DS_AGENT_PORTS + NETSNMP_DS_AGENT_INTERNAL_SECNAME + NETSNMP_DS_AGENT_PERL_INIT_FILE + NETSNMP_DS_SMUX_SOCKET + NETSNMP_DS_NOTIF_LOG_CTX + NETSNMP_DS_AGENT_FLAGS + NETSNMP_DS_AGENT_USERID + NETSNMP_DS_AGENT_GROUPID + NETSNMP_DS_AGENT_AGENTX_PING_INTERVAL + NETSNMP_DS_AGENT_AGENTX_TIMEOUT + NETSNMP_DS_AGENT_AGENTX_RETRIES + NETSNMP_DS_AGENT_X_SOCK_PERM + NETSNMP_DS_AGENT_X_DIR_PERM + NETSNMP_DS_AGENT_X_SOCK_USER + NETSNMP_DS_AGENT_X_SOCK_GROUP + NETSNMP_DS_AGENT_CACHE_TIMEOUT + NETSNMP_DS_AGENT_INTERNAL_VERSION + NETSNMP_DS_AGENT_INTERNAL_SECLEVEL + + + NETSNMP_DS_AGENT_VERBOSE + NETSNMP_DS_AGENT_ROLE + NETSNMP_DS_AGENT_NO_ROOT_ACCESS + NETSNMP_DS_AGENT_AGENTX_MASTER + NETSNMP_DS_AGENT_QUIT_IMMEDIATELY + NETSNMP_DS_AGENT_DISABLE_PERL + NETSNMP_DS_AGENT_NO_CONNECTION_WARNINGS + NETSNMP_DS_AGENT_LEAVE_PIDFILE + NETSNMP_DS_AGENT_NO_CACHING + NETSNMP_DS_AGENT_STRICT_DISMAN + NETSNMP_DS_AGENT_DONT_RETAIN_NOTIFICATIONS + NETSNMP_DS_AGENT_DONT_LOG_TCPWRAPPERS_CONNECTS + NETSNMP_DS_AGENT_SKIPNFSINHOSTRESOURCES + NETSNMP_DS_AGENT_PROGNAME + NETSNMP_DS_AGENT_X_SOCKET + NETSNMP_DS_AGENT_PORTS + NETSNMP_DS_AGENT_INTERNAL_SECNAME + NETSNMP_DS_AGENT_PERL_INIT_FILE + NETSNMP_DS_SMUX_SOCKET + NETSNMP_DS_NOTIF_LOG_CTX + NETSNMP_DS_AGENT_FLAGS + NETSNMP_DS_AGENT_USERID + NETSNMP_DS_AGENT_GROUPID + NETSNMP_DS_AGENT_AGENTX_PING_INTERVAL + NETSNMP_DS_AGENT_AGENTX_TIMEOUT + NETSNMP_DS_AGENT_AGENTX_RETRIES + NETSNMP_DS_AGENT_X_SOCK_PERM + NETSNMP_DS_AGENT_X_DIR_PERM + NETSNMP_DS_AGENT_X_SOCK_USER + NETSNMP_DS_AGENT_X_SOCK_GROUP + NETSNMP_DS_AGENT_CACHE_TIMEOUT + NETSNMP_DS_AGENT_INTERNAL_VERSION + NETSNMP_DS_AGENT_INTERNAL_SECLEVEL + + + + + NETSNMP_DS_AGENT_VERBOSE + NETSNMP_DS_AGENT_ROLE + NETSNMP_DS_AGENT_NO_ROOT_ACCESS + NETSNMP_DS_AGENT_AGENTX_MASTER + NETSNMP_DS_AGENT_QUIT_IMMEDIATELY + NETSNMP_DS_AGENT_DISABLE_PERL + NETSNMP_DS_AGENT_PROGNAME + NETSNMP_DS_AGENT_X_SOCKET + NETSNMP_DS_AGENT_PORTS + NETSNMP_DS_AGENT_INTERNAL_SECNAME + NETSNMP_DS_AGENT_PERL_INIT_FILE + NETSNMP_DS_AGENT_FLAGS + NETSNMP_DS_AGENT_USERID + NETSNMP_DS_AGENT_GROUPID + NETSNMP_DS_AGENT_AGENTX_PING_INTERVAL + + + DS_AGENT_AGENTX_MASTER + DS_AGENT_AGENTX_PING_INTERVAL + DS_AGENT_FLAGS + DS_AGENT_GROUPID + DS_AGENT_INTERNAL_SECNAME + DS_AGENT_NO_ROOT_ACCESS + DS_AGENT_PORTS + DS_AGENT_PROGNAME + DS_AGENT_ROLE + DS_AGENT_USERID + DS_AGENT_VERBOSE + DS_AGENT_X_SOCKET + + +=head1 AUTHOR + +Wes Hardaker, E<lt>hardaker@users.sourceforge.netE<gt> + +=head1 SEE ALSO + +NetSNMP::default_store(3pm), NetSNMP::agent(3pm), perl(1). + +=cut diff --git a/perl/agent/default_store/default_store.xs b/perl/agent/default_store/default_store.xs new file mode 100644 index 0000000..bff1485 --- /dev/null +++ b/perl/agent/default_store/default_store.xs @@ -0,0 +1,705 @@ +#if defined(_WIN32) && !defined(_WIN32_WINNT) +#define _WIN32_WINNT 0x501 +#endif + +#include "EXTERN.h" +#include "perl.h" +#include "XSUB.h" + +#include <net-snmp/net-snmp-config.h> +#include <net-snmp/agent/ds_agent.h> + + +/* autogenerated by "gen" from const-c.inc */ + +#define PERL_constant_NOTFOUND 1 +#define PERL_constant_NOTDEF 2 +#define PERL_constant_ISIV 3 +#define PERL_constant_ISNO 4 +#define PERL_constant_ISNV 5 +#define PERL_constant_ISPV 6 +#define PERL_constant_ISPVN 7 +#define PERL_constant_ISSV 8 +#define PERL_constant_ISUNDEF 9 +#define PERL_constant_ISUV 10 +#define PERL_constant_ISYES 11 + +#ifndef NVTYPE +typedef double NV; /* 5.6 and later define NVTYPE, and typedef NV to it. */ +#endif +#ifndef aTHX_ +#define aTHX_ /* 5.6 or later define this for threading support. */ +#endif +#ifndef pTHX_ +#define pTHX_ /* 5.6 or later define this for threading support. */ +#endif + +static int +constant_22 (pTHX_ const char *name, IV *iv_return) { + /* When generated this function returned values for the list of names given + here. However, subsequent manual editing may have added or removed some. + NETSNMP_DS_AGENT_FLAGS NETSNMP_DS_AGENT_PORTS NETSNMP_DS_SMUX_SOCKET */ + /* Offset 17 gives the best switch position. */ + switch (name[17]) { + case 'F': + if (memEQ(name, "NETSNMP_DS_AGENT_FLAGS", 22)) { + /* ^ */ +#ifdef NETSNMP_DS_AGENT_FLAGS + *iv_return = NETSNMP_DS_AGENT_FLAGS; + return PERL_constant_ISIV; +#else + return PERL_constant_NOTDEF; +#endif + } + break; + case 'O': + if (memEQ(name, "NETSNMP_DS_SMUX_SOCKET", 22)) { + /* ^ */ +#ifdef NETSNMP_DS_SMUX_SOCKET + *iv_return = NETSNMP_DS_SMUX_SOCKET; + return PERL_constant_ISIV; +#else + return PERL_constant_NOTDEF; +#endif + } + break; + case 'P': + if (memEQ(name, "NETSNMP_DS_AGENT_PORTS", 22)) { + /* ^ */ +#ifdef NETSNMP_DS_AGENT_PORTS + *iv_return = NETSNMP_DS_AGENT_PORTS; + return PERL_constant_ISIV; +#else + return PERL_constant_NOTDEF; +#endif + } + break; + } + return PERL_constant_NOTFOUND; +} + +static int +constant_24 (pTHX_ const char *name, IV *iv_return) { + /* When generated this function returned values for the list of names given + here. However, subsequent manual editing may have added or removed some. + NETSNMP_DS_AGENT_GROUPID NETSNMP_DS_AGENT_VERBOSE NETSNMP_DS_NOTIF_LOG_CTX + */ + /* Offset 19 gives the best switch position. */ + switch (name[19]) { + case 'G': + if (memEQ(name, "NETSNMP_DS_NOTIF_LOG_CTX", 24)) { + /* ^ */ +#ifdef NETSNMP_DS_NOTIF_LOG_CTX + *iv_return = NETSNMP_DS_NOTIF_LOG_CTX; + return PERL_constant_ISIV; +#else + return PERL_constant_NOTDEF; +#endif + } + break; + case 'O': + if (memEQ(name, "NETSNMP_DS_AGENT_GROUPID", 24)) { + /* ^ */ +#ifdef NETSNMP_DS_AGENT_GROUPID + *iv_return = NETSNMP_DS_AGENT_GROUPID; + return PERL_constant_ISIV; +#else + return PERL_constant_NOTDEF; +#endif + } + break; + case 'R': + if (memEQ(name, "NETSNMP_DS_AGENT_VERBOSE", 24)) { + /* ^ */ +#ifdef NETSNMP_DS_AGENT_VERBOSE + *iv_return = NETSNMP_DS_AGENT_VERBOSE; + return PERL_constant_ISIV; +#else + return PERL_constant_NOTDEF; +#endif + } + break; + } + return PERL_constant_NOTFOUND; +} + +static int +constant_30 (pTHX_ const char *name, IV *iv_return) { + /* When generated this function returned values for the list of names given + here. However, subsequent manual editing may have added or removed some. + NETSNMP_DS_AGENT_AGENTX_MASTER NETSNMP_DS_AGENT_CACHE_TIMEOUT + NETSNMP_DS_AGENT_LEAVE_PIDFILE NETSNMP_DS_AGENT_STRICT_DISMAN */ + /* Offset 27 gives the best switch position. */ + switch (name[27]) { + case 'I': + if (memEQ(name, "NETSNMP_DS_AGENT_LEAVE_PIDFILE", 30)) { + /* ^ */ +#ifdef NETSNMP_DS_AGENT_LEAVE_PIDFILE + *iv_return = NETSNMP_DS_AGENT_LEAVE_PIDFILE; + return PERL_constant_ISIV; +#else + return PERL_constant_NOTDEF; +#endif + } + break; + case 'M': + if (memEQ(name, "NETSNMP_DS_AGENT_STRICT_DISMAN", 30)) { + /* ^ */ +#ifdef NETSNMP_DS_AGENT_STRICT_DISMAN + *iv_return = NETSNMP_DS_AGENT_STRICT_DISMAN; + return PERL_constant_ISIV; +#else + return PERL_constant_NOTDEF; +#endif + } + break; + case 'O': + if (memEQ(name, "NETSNMP_DS_AGENT_CACHE_TIMEOUT", 30)) { + /* ^ */ +#ifdef NETSNMP_DS_AGENT_CACHE_TIMEOUT + *iv_return = NETSNMP_DS_AGENT_CACHE_TIMEOUT; + return PERL_constant_ISIV; +#else + return PERL_constant_NOTDEF; +#endif + } + break; + case 'T': + if (memEQ(name, "NETSNMP_DS_AGENT_AGENTX_MASTER", 30)) { + /* ^ */ +#ifdef NETSNMP_DS_AGENT_AGENTX_MASTER + *iv_return = NETSNMP_DS_AGENT_AGENTX_MASTER; + return PERL_constant_ISIV; +#else + return PERL_constant_NOTDEF; +#endif + } + break; + } + return PERL_constant_NOTFOUND; +} + +static int +constant_31 (pTHX_ const char *name, IV *iv_return) { + /* When generated this function returned values for the list of names given + here. However, subsequent manual editing may have added or removed some. + NETSNMP_DS_AGENT_AGENTX_RETRIES NETSNMP_DS_AGENT_AGENTX_TIMEOUT + NETSNMP_DS_AGENT_NO_ROOT_ACCESS NETSNMP_DS_AGENT_PERL_INIT_FILE */ + /* Offset 27 gives the best switch position. */ + switch (name[27]) { + case 'C': + if (memEQ(name, "NETSNMP_DS_AGENT_NO_ROOT_ACCESS", 31)) { + /* ^ */ +#ifdef NETSNMP_DS_AGENT_NO_ROOT_ACCESS + *iv_return = NETSNMP_DS_AGENT_NO_ROOT_ACCESS; + return PERL_constant_ISIV; +#else + return PERL_constant_NOTDEF; +#endif + } + break; + case 'E': + if (memEQ(name, "NETSNMP_DS_AGENT_AGENTX_TIMEOUT", 31)) { + /* ^ */ +#ifdef NETSNMP_DS_AGENT_AGENTX_TIMEOUT + *iv_return = NETSNMP_DS_AGENT_AGENTX_TIMEOUT; + return PERL_constant_ISIV; +#else + return PERL_constant_NOTDEF; +#endif + } + break; + case 'F': + if (memEQ(name, "NETSNMP_DS_AGENT_PERL_INIT_FILE", 31)) { + /* ^ */ +#ifdef NETSNMP_DS_AGENT_PERL_INIT_FILE + *iv_return = NETSNMP_DS_AGENT_PERL_INIT_FILE; + return PERL_constant_ISIV; +#else + return PERL_constant_NOTDEF; +#endif + } + break; + case 'R': + if (memEQ(name, "NETSNMP_DS_AGENT_AGENTX_RETRIES", 31)) { + /* ^ */ +#ifdef NETSNMP_DS_AGENT_AGENTX_RETRIES + *iv_return = NETSNMP_DS_AGENT_AGENTX_RETRIES; + return PERL_constant_ISIV; +#else + return PERL_constant_NOTDEF; +#endif + } + break; + } + return PERL_constant_NOTFOUND; +} + +static int +constant_33 (pTHX_ const char *name, IV *iv_return) { + /* When generated this function returned values for the list of names given + here. However, subsequent manual editing may have added or removed some. + NETSNMP_DS_AGENT_INTERNAL_SECNAME NETSNMP_DS_AGENT_INTERNAL_VERSION + NETSNMP_DS_AGENT_QUIT_IMMEDIATELY */ + /* Offset 31 gives the best switch position. */ + switch (name[31]) { + case 'L': + if (memEQ(name, "NETSNMP_DS_AGENT_QUIT_IMMEDIATELY", 33)) { + /* ^ */ +#ifdef NETSNMP_DS_AGENT_QUIT_IMMEDIATELY + *iv_return = NETSNMP_DS_AGENT_QUIT_IMMEDIATELY; + return PERL_constant_ISIV; +#else + return PERL_constant_NOTDEF; +#endif + } + break; + case 'M': + if (memEQ(name, "NETSNMP_DS_AGENT_INTERNAL_SECNAME", 33)) { + /* ^ */ +#ifdef NETSNMP_DS_AGENT_INTERNAL_SECNAME + *iv_return = NETSNMP_DS_AGENT_INTERNAL_SECNAME; + return PERL_constant_ISIV; +#else + return PERL_constant_NOTDEF; +#endif + } + break; + case 'O': + if (memEQ(name, "NETSNMP_DS_AGENT_INTERNAL_VERSION", 33)) { + /* ^ */ +#ifdef NETSNMP_DS_AGENT_INTERNAL_VERSION + *iv_return = NETSNMP_DS_AGENT_INTERNAL_VERSION; + return PERL_constant_ISIV; +#else + return PERL_constant_NOTDEF; +#endif + } + break; + } + return PERL_constant_NOTFOUND; +} + +static int +constant (pTHX_ const char *name, STRLEN len, IV *iv_return) { + /* Initially switch on the length of the name. */ + /* When generated this function returned values for the list of names given + in this section of perl code. Rather than manually editing these functions + to add or remove constants, which would result in this comment and section + of code becoming inaccurate, we recommend that you edit this section of + code, and use it to regenerate a new set of constant functions which you + then use to replace the originals. + + Regenerate these constant functions by feeding this entire source file to + perl -x + +#!/usr/bin/perl -w +use ExtUtils::Constant qw (constant_types C_constant XS_constant); + +my $types = {map {($_, 1)} qw(IV)}; +my @names = (qw(NETSNMP_DS_AGENT_AGENTX_MASTER + NETSNMP_DS_AGENT_AGENTX_PING_INTERVAL + NETSNMP_DS_AGENT_AGENTX_RETRIES NETSNMP_DS_AGENT_AGENTX_TIMEOUT + NETSNMP_DS_AGENT_CACHE_TIMEOUT NETSNMP_DS_AGENT_DISABLE_PERL + NETSNMP_DS_AGENT_DONT_LOG_TCPWRAPPERS_CONNECTS + NETSNMP_DS_AGENT_DONT_RETAIN_NOTIFICATIONS + NETSNMP_DS_AGENT_FLAGS NETSNMP_DS_AGENT_GROUPID + NETSNMP_DS_AGENT_INTERNAL_SECLEVEL + NETSNMP_DS_AGENT_INTERNAL_SECNAME + NETSNMP_DS_AGENT_INTERNAL_VERSION NETSNMP_DS_AGENT_LEAVE_PIDFILE + NETSNMP_DS_AGENT_MAX_GETBULKREPEATS + NETSNMP_DS_AGENT_MAX_GETBULKRESPONSES + NETSNMP_DS_AGENT_NO_CACHING + NETSNMP_DS_AGENT_NO_CONNECTION_WARNINGS + NETSNMP_DS_AGENT_NO_ROOT_ACCESS NETSNMP_DS_AGENT_PERL_INIT_FILE + NETSNMP_DS_AGENT_PORTS NETSNMP_DS_AGENT_PROGNAME + NETSNMP_DS_AGENT_QUIT_IMMEDIATELY NETSNMP_DS_AGENT_ROLE + NETSNMP_DS_AGENT_SKIPNFSINHOSTRESOURCES + NETSNMP_DS_AGENT_STRICT_DISMAN NETSNMP_DS_AGENT_USERID + NETSNMP_DS_AGENT_VERBOSE NETSNMP_DS_AGENT_X_DIR_PERM + NETSNMP_DS_AGENT_X_SOCKET NETSNMP_DS_AGENT_X_SOCK_GROUP + NETSNMP_DS_AGENT_X_SOCK_PERM NETSNMP_DS_AGENT_X_SOCK_USER + NETSNMP_DS_APP_DONT_LOG NETSNMP_DS_NOTIF_LOG_CTX + NETSNMP_DS_SMUX_SOCKET)); + +print constant_types(); # macro defs +foreach (C_constant ("NetSNMP::agent::default_store", 'constant', 'IV', $types, undef, 3, @names) ) { + print $_, "\n"; # C constant subs +} +print "#### XS Section:\n"; +print XS_constant ("NetSNMP::agent::default_store", $types); +__END__ + */ + + switch (len) { + case 21: + if (memEQ(name, "NETSNMP_DS_AGENT_ROLE", 21)) { +#ifdef NETSNMP_DS_AGENT_ROLE + *iv_return = NETSNMP_DS_AGENT_ROLE; + return PERL_constant_ISIV; +#else + return PERL_constant_NOTDEF; +#endif + } + break; + case 22: + return constant_22 (aTHX_ name, iv_return); + break; + case 23: + /* Names all of length 23. */ + /* NETSNMP_DS_AGENT_USERID NETSNMP_DS_APP_DONT_LOG */ + /* Offset 18 gives the best switch position. */ + switch (name[18]) { + case 'S': + if (memEQ(name, "NETSNMP_DS_AGENT_USERID", 23)) { + /* ^ */ +#ifdef NETSNMP_DS_AGENT_USERID + *iv_return = NETSNMP_DS_AGENT_USERID; + return PERL_constant_ISIV; +#else + return PERL_constant_NOTDEF; +#endif + } + break; + case 'T': + if (memEQ(name, "NETSNMP_DS_APP_DONT_LOG", 23)) { + /* ^ */ +#ifdef NETSNMP_DS_APP_DONT_LOG + *iv_return = NETSNMP_DS_APP_DONT_LOG; + return PERL_constant_ISIV; +#else + return PERL_constant_NOTDEF; +#endif + } + break; + } + break; + case 24: + return constant_24 (aTHX_ name, iv_return); + break; + case 25: + /* Names all of length 25. */ + /* NETSNMP_DS_AGENT_PROGNAME NETSNMP_DS_AGENT_X_SOCKET */ + /* Offset 19 gives the best switch position. */ + switch (name[19]) { + case 'O': + if (memEQ(name, "NETSNMP_DS_AGENT_PROGNAME", 25)) { + /* ^ */ +#ifdef NETSNMP_DS_AGENT_PROGNAME + *iv_return = NETSNMP_DS_AGENT_PROGNAME; + return PERL_constant_ISIV; +#else + return PERL_constant_NOTDEF; +#endif + } + break; + case 'S': + if (memEQ(name, "NETSNMP_DS_AGENT_X_SOCKET", 25)) { + /* ^ */ +#ifdef NETSNMP_DS_AGENT_X_SOCKET + *iv_return = NETSNMP_DS_AGENT_X_SOCKET; + return PERL_constant_ISIV; +#else + return PERL_constant_NOTDEF; +#endif + } + break; + } + break; + case 27: + /* Names all of length 27. */ + /* NETSNMP_DS_AGENT_NO_CACHING NETSNMP_DS_AGENT_X_DIR_PERM */ + /* Offset 24 gives the best switch position. */ + switch (name[24]) { + case 'E': + if (memEQ(name, "NETSNMP_DS_AGENT_X_DIR_PERM", 27)) { + /* ^ */ +#ifdef NETSNMP_DS_AGENT_X_DIR_PERM + *iv_return = NETSNMP_DS_AGENT_X_DIR_PERM; + return PERL_constant_ISIV; +#else + return PERL_constant_NOTDEF; +#endif + } + break; + case 'I': + if (memEQ(name, "NETSNMP_DS_AGENT_NO_CACHING", 27)) { + /* ^ */ +#ifdef NETSNMP_DS_AGENT_NO_CACHING + *iv_return = NETSNMP_DS_AGENT_NO_CACHING; + return PERL_constant_ISIV; +#else + return PERL_constant_NOTDEF; +#endif + } + break; + } + break; + case 28: + /* Names all of length 28. */ + /* NETSNMP_DS_AGENT_X_SOCK_PERM NETSNMP_DS_AGENT_X_SOCK_USER */ + /* Offset 27 gives the best switch position. */ + switch (name[27]) { + case 'M': + if (memEQ(name, "NETSNMP_DS_AGENT_X_SOCK_PER", 27)) { + /* M */ +#ifdef NETSNMP_DS_AGENT_X_SOCK_PERM + *iv_return = NETSNMP_DS_AGENT_X_SOCK_PERM; + return PERL_constant_ISIV; +#else + return PERL_constant_NOTDEF; +#endif + } + break; + case 'R': + if (memEQ(name, "NETSNMP_DS_AGENT_X_SOCK_USE", 27)) { + /* R */ +#ifdef NETSNMP_DS_AGENT_X_SOCK_USER + *iv_return = NETSNMP_DS_AGENT_X_SOCK_USER; + return PERL_constant_ISIV; +#else + return PERL_constant_NOTDEF; +#endif + } + break; + } + break; + case 29: + /* Names all of length 29. */ + /* NETSNMP_DS_AGENT_DISABLE_PERL NETSNMP_DS_AGENT_X_SOCK_GROUP */ + /* Offset 21 gives the best switch position. */ + switch (name[21]) { + case 'B': + if (memEQ(name, "NETSNMP_DS_AGENT_DISABLE_PERL", 29)) { + /* ^ */ +#ifdef NETSNMP_DS_AGENT_DISABLE_PERL + *iv_return = NETSNMP_DS_AGENT_DISABLE_PERL; + return PERL_constant_ISIV; +#else + return PERL_constant_NOTDEF; +#endif + } + break; + case 'C': + if (memEQ(name, "NETSNMP_DS_AGENT_X_SOCK_GROUP", 29)) { + /* ^ */ +#ifdef NETSNMP_DS_AGENT_X_SOCK_GROUP + *iv_return = NETSNMP_DS_AGENT_X_SOCK_GROUP; + return PERL_constant_ISIV; +#else + return PERL_constant_NOTDEF; +#endif + } + break; + } + break; + case 30: + return constant_30 (aTHX_ name, iv_return); + break; + case 31: + return constant_31 (aTHX_ name, iv_return); + break; + case 33: + return constant_33 (aTHX_ name, iv_return); + break; + case 34: + if (memEQ(name, "NETSNMP_DS_AGENT_INTERNAL_SECLEVEL", 34)) { +#ifdef NETSNMP_DS_AGENT_INTERNAL_SECLEVEL + *iv_return = NETSNMP_DS_AGENT_INTERNAL_SECLEVEL; + return PERL_constant_ISIV; +#else + return PERL_constant_NOTDEF; +#endif + } + break; + case 35: + if (memEQ(name, "NETSNMP_DS_AGENT_MAX_GETBULKREPEATS", 35)) { +#ifdef NETSNMP_DS_AGENT_MAX_GETBULKREPEATS + *iv_return = NETSNMP_DS_AGENT_MAX_GETBULKREPEATS; + return PERL_constant_ISIV; +#else + return PERL_constant_NOTDEF; +#endif + } + break; + case 37: + /* Names all of length 37. */ + /* NETSNMP_DS_AGENT_AGENTX_PING_INTERVAL + NETSNMP_DS_AGENT_MAX_GETBULKRESPONSES */ + /* Offset 26 gives the best switch position. */ + switch (name[26]) { + case 'L': + if (memEQ(name, "NETSNMP_DS_AGENT_MAX_GETBULKRESPONSES", 37)) { + /* ^ */ +#ifdef NETSNMP_DS_AGENT_MAX_GETBULKRESPONSES + *iv_return = NETSNMP_DS_AGENT_MAX_GETBULKRESPONSES; + return PERL_constant_ISIV; +#else + return PERL_constant_NOTDEF; +#endif + } + break; + case 'N': + if (memEQ(name, "NETSNMP_DS_AGENT_AGENTX_PING_INTERVAL", 37)) { + /* ^ */ +#ifdef NETSNMP_DS_AGENT_AGENTX_PING_INTERVAL + *iv_return = NETSNMP_DS_AGENT_AGENTX_PING_INTERVAL; + return PERL_constant_ISIV; +#else + return PERL_constant_NOTDEF; +#endif + } + break; + } + break; + case 39: + /* Names all of length 39. */ + /* NETSNMP_DS_AGENT_NO_CONNECTION_WARNINGS + NETSNMP_DS_AGENT_SKIPNFSINHOSTRESOURCES */ + /* Offset 21 gives the best switch position. */ + switch (name[21]) { + case 'N': + if (memEQ(name, "NETSNMP_DS_AGENT_SKIPNFSINHOSTRESOURCES", 39)) { + /* ^ */ +#ifdef NETSNMP_DS_AGENT_SKIPNFSINHOSTRESOURCES + *iv_return = NETSNMP_DS_AGENT_SKIPNFSINHOSTRESOURCES; + return PERL_constant_ISIV; +#else + return PERL_constant_NOTDEF; +#endif + } + break; + case 'O': + if (memEQ(name, "NETSNMP_DS_AGENT_NO_CONNECTION_WARNINGS", 39)) { + /* ^ */ +#ifdef NETSNMP_DS_AGENT_NO_CONNECTION_WARNINGS + *iv_return = NETSNMP_DS_AGENT_NO_CONNECTION_WARNINGS; + return PERL_constant_ISIV; +#else + return PERL_constant_NOTDEF; +#endif + } + break; + } + break; + case 42: + if (memEQ(name, "NETSNMP_DS_AGENT_DONT_RETAIN_NOTIFICATIONS", 42)) { +#ifdef NETSNMP_DS_AGENT_DONT_RETAIN_NOTIFICATIONS + *iv_return = NETSNMP_DS_AGENT_DONT_RETAIN_NOTIFICATIONS; + return PERL_constant_ISIV; +#else + return PERL_constant_NOTDEF; +#endif + } + break; + case 46: + if (memEQ(name, "NETSNMP_DS_AGENT_DONT_LOG_TCPWRAPPERS_CONNECTS", 46)) { +#ifdef NETSNMP_DS_AGENT_DONT_LOG_TCPWRAPPERS_CONNECTS + *iv_return = NETSNMP_DS_AGENT_DONT_LOG_TCPWRAPPERS_CONNECTS; + return PERL_constant_ISIV; +#else + return PERL_constant_NOTDEF; +#endif + } + break; + } + return PERL_constant_NOTFOUND; +} + + + +/* autogenerated by "gen" from const-xs.inc */ + +MODULE = NetSNMP::agent::default_store PACKAGE = NetSNMP::agent::default_store + +void +constant(sv) + PREINIT: +#ifdef dXSTARG + dXSTARG; /* Faster if we have it. */ +#else + dTARGET; +#endif + STRLEN len; + int type; + IV iv = 0; + /* NV nv; Uncomment this if you need to return NVs */ + /* const char *pv; Uncomment this if you need to return PVs */ + INPUT: + SV * sv; + const char * s = SvPV(sv, len); + PPCODE: + /* Change this to constant(aTHX_ s, len, &iv, &nv); + if you need to return both NVs and IVs */ + type = constant(aTHX_ s, len, &iv); + /* Return 1 or 2 items. First is error message, or undef if no error. + Second, if present, is found value */ + switch (type) { + case PERL_constant_NOTFOUND: + sv = sv_2mortal(newSVpvf("%s is not a valid NetSNMP::agent::default_store macro", s)); + PUSHs(sv); + break; + case PERL_constant_NOTDEF: + sv = sv_2mortal(newSVpvf( + "Your vendor has not defined NetSNMP::agent::default_store macro %s, used", s)); + PUSHs(sv); + break; + case PERL_constant_ISIV: + EXTEND(SP, 1); + PUSHs(&PL_sv_undef); + PUSHi(iv); + break; + /* Uncomment this if you need to return NOs + case PERL_constant_ISNO: + EXTEND(SP, 1); + PUSHs(&PL_sv_undef); + PUSHs(&PL_sv_no); + break; */ + /* Uncomment this if you need to return NVs + case PERL_constant_ISNV: + EXTEND(SP, 1); + PUSHs(&PL_sv_undef); + PUSHn(nv); + break; */ + /* Uncomment this if you need to return PVs + case PERL_constant_ISPV: + EXTEND(SP, 1); + PUSHs(&PL_sv_undef); + PUSHp(pv, strlen(pv)); + break; */ + /* Uncomment this if you need to return PVNs + case PERL_constant_ISPVN: + EXTEND(SP, 1); + PUSHs(&PL_sv_undef); + PUSHp(pv, iv); + break; */ + /* Uncomment this if you need to return SVs + case PERL_constant_ISSV: + EXTEND(SP, 1); + PUSHs(&PL_sv_undef); + PUSHs(sv); + break; */ + /* Uncomment this if you need to return UNDEFs + case PERL_constant_ISUNDEF: + break; */ + /* Uncomment this if you need to return UVs + case PERL_constant_ISUV: + EXTEND(SP, 1); + PUSHs(&PL_sv_undef); + PUSHu((UV)iv); + break; */ + /* Uncomment this if you need to return YESs + case PERL_constant_ISYES: + EXTEND(SP, 1); + PUSHs(&PL_sv_undef); + PUSHs(&PL_sv_yes); + break; */ + default: + sv = sv_2mortal(newSVpvf( + "Unexpected return type %d while processing NetSNMP::agent::default_store macro %s, used", + type, s)); + PUSHs(sv); + } + + + diff --git a/perl/agent/default_store/gen b/perl/agent/default_store/gen new file mode 100755 index 0000000..55823d6 --- /dev/null +++ b/perl/agent/default_store/gen @@ -0,0 +1,118 @@ +#!/usr/bin/perl + +system("grep 'define NETSNMP_DS_' ../../../include/net-snmp/agent/ds_agent.h > default_store.h"); +#gcc -E ../../include/net-snmp/library/default_store.h | grep -v default_store.h >> default_store.h +system("h2xs -b 5.5.0 -n NetSNMP::agent::default_store -O default_store.h"); + +open(ORIG,"default_store.xs"); +open(NEW1,"NetSNMP-agent-default_store/fallback/const-c.inc") || die "can't open inc file 1"; +open(NEW2,"NetSNMP-agent-default_store/fallback/const-xs.inc") || die "can't open inc file 2"; +open(OUT,">default_store_new.xs"); + +# get up to the include from the original file +while(<ORIG>) { + print OUT; + last if (/include <net-snmp\/agent\/ds_agent.h/); +} + +# include the entire new file +print OUT "\n\n/* autogenerated by \"gen\" from const-c.inc */\n\n"; +print OUT <NEW1>; +print OUT "\n\n/* autogenerated by \"gen\" from const-xs.inc */\n\n"; +print OUT "MODULE = NetSNMP::agent::default_store PACKAGE = NetSNMP::agent::default_store\n\n"; + +print OUT <NEW2>; + +#print OUT "\n\n/* autogenerated by \"gen\" from tail of old .xs file */\n\n"; +print OUT "\n\n\n"; + +close(OUT); + +# +# generate test +# +open(H,"default_store.h"); +open(ORIG,"test.pl"); +open(OUT,">test.pl.new"); + +while(<ORIG>) { + print OUT; + last if (/\%tests =/); +} + +while(<H>) { + if (/define\s+(\w+)\s+(\d+)/) { + printf OUT (" %-40s => %d,\n", "\"$1\"", $2); + $tokenlist .= " $1\n"; + } +} + +while(<ORIG>) { + last if (/\);/); +} +print OUT; +print OUT <ORIG>; +close(OUT); + +# +# modify the perl module itself +# +open(H,"default_store.h"); +open(ORIG,"default_store.pm"); +open(OUT,">default_store_new.pm"); + +# first list +while(<ORIG>) { + print OUT; + last if (/\%EXPORT_TAGS =/); +} +print OUT $tokenlist; +while(<ORIG>) { + last if (/\) \] \);/); +} +print OUT; + +# second list +while(<ORIG>) { + print OUT; + last if (/\@EXPORT =/); +} +print OUT $tokenlist; +while(<ORIG>) { + last if (/\);/); +} +print OUT; + +# last section +while(<ORIG>) { + print OUT; + last if (/head2 Exportable constants/); +} +print OUT "\n"; +print OUT $tokenlist; +while(<ORIG>) { + last if (/^\s*$/); +} +print OUT "\n"; +print OUT; + +# tail end +print OUT <ORIG>; +close(OUT); + +# +# install new files +# +print "updated test.pl\n"; +rename("test.pl.new","test.pl"); +rename("default_store_new.pm", "default_store.pm"); +print "updated default_store.pm\n"; +rename("default_store_new.xs", "default_store.xs"); +print "updated default_store.xs\n"; + +# +# remove the temp files. +# +system("rm -rf NetSNMP-agent-default_store"); +unlink("default_store.h"); + diff --git a/perl/agent/default_store/test.pl b/perl/agent/default_store/test.pl new file mode 100644 index 0000000..23b5611 --- /dev/null +++ b/perl/agent/default_store/test.pl @@ -0,0 +1,69 @@ +# Before `make install' is performed this script should be runnable with +# `make test'. After `make install' it should work as `perl test.pl' + +######################### We start with some black magic to print on failure. + +# Change 1..1 below to 1..last_test_to_print . +# (It may become useful if the test is moved to ./t subdirectory.) + +BEGIN { $| = 1; + + %tests = ( + "NETSNMP_DS_AGENT_VERBOSE" => 0, + "NETSNMP_DS_AGENT_ROLE" => 1, + "NETSNMP_DS_AGENT_NO_ROOT_ACCESS" => 2, + "NETSNMP_DS_AGENT_AGENTX_MASTER" => 3, + "NETSNMP_DS_AGENT_QUIT_IMMEDIATELY" => 4, + "NETSNMP_DS_AGENT_DISABLE_PERL" => 5, + "NETSNMP_DS_AGENT_NO_CONNECTION_WARNINGS" => 6, + "NETSNMP_DS_AGENT_LEAVE_PIDFILE" => 7, + "NETSNMP_DS_AGENT_NO_CACHING" => 8, + "NETSNMP_DS_AGENT_STRICT_DISMAN" => 9, + "NETSNMP_DS_AGENT_DONT_RETAIN_NOTIFICATIONS" => 10, + "NETSNMP_DS_AGENT_DONT_LOG_TCPWRAPPERS_CONNECTS" => 12, + "NETSNMP_DS_AGENT_SKIPNFSINHOSTRESOURCES" => 13, + "NETSNMP_DS_AGENT_PROGNAME" => 0, + "NETSNMP_DS_AGENT_X_SOCKET" => 1, + "NETSNMP_DS_AGENT_PORTS" => 2, + "NETSNMP_DS_AGENT_INTERNAL_SECNAME" => 3, + "NETSNMP_DS_AGENT_PERL_INIT_FILE" => 4, + "NETSNMP_DS_SMUX_SOCKET" => 5, + "NETSNMP_DS_NOTIF_LOG_CTX" => 6, + "NETSNMP_DS_AGENT_FLAGS" => 0, + "NETSNMP_DS_AGENT_USERID" => 1, + "NETSNMP_DS_AGENT_GROUPID" => 2, + "NETSNMP_DS_AGENT_AGENTX_PING_INTERVAL" => 3, + "NETSNMP_DS_AGENT_AGENTX_TIMEOUT" => 4, + "NETSNMP_DS_AGENT_AGENTX_RETRIES" => 5, + "NETSNMP_DS_AGENT_X_SOCK_PERM" => 6, + "NETSNMP_DS_AGENT_X_DIR_PERM" => 7, + "NETSNMP_DS_AGENT_X_SOCK_USER" => 8, + "NETSNMP_DS_AGENT_X_SOCK_GROUP" => 9, + "NETSNMP_DS_AGENT_CACHE_TIMEOUT" => 10, + "NETSNMP_DS_AGENT_INTERNAL_VERSION" => 11, + "NETSNMP_DS_AGENT_INTERNAL_SECLEVEL" => 12, + "NETSNMP_DS_AGENT_MAX_GETBULKREPEATS" => 13, + "NETSNMP_DS_AGENT_MAX_GETBULKRESPONSES" => 14, + ); + + print "1.." . (scalar(keys(%tests)) + 2) . "\n"; + } +END {print "not ok 1\n" unless $loaded;} +use NetSNMP::agent::default_store (':all'); +$loaded = 1; +print "ok 1\n"; + +######################### End of black magic. + +# Insert your test code below (better if it prints "ok 13" +# (correspondingly "not ok 13") depending on the success of chunk 13 +# of the test code): + +$c = 2; +foreach my $i (keys(%tests)) { + my $str = "NetSNMP::agent::default_store::$i"; + my $val = eval $str; +# print "$i -> $val -> $tests{$i}\n"; + $c++; + print (($val eq $tests{$i})?"ok $c\n" : "not ok $c\n# error: name=$i value_expected=$tests{$i} value_got=$val \n"); +} |