summaryrefslogtreecommitdiff
path: root/perl/agent/default_store
diff options
context:
space:
mode:
Diffstat (limited to 'perl/agent/default_store')
-rw-r--r--perl/agent/default_store/Makefile.PL228
-rw-r--r--perl/agent/default_store/default_store.pm370
-rw-r--r--perl/agent/default_store/default_store.xs705
-rwxr-xr-xperl/agent/default_store/gen118
-rw-r--r--perl/agent/default_store/test.pl69
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");
+}