aboutsummaryrefslogtreecommitdiffstats
path: root/lib/snmp/bin
diff options
context:
space:
mode:
Diffstat (limited to 'lib/snmp/bin')
-rw-r--r--lib/snmp/bin/snmp-v2tov1.pl319
-rw-r--r--lib/snmp/bin/snmp-v2tov1.sed9
-rw-r--r--lib/snmp/bin/snmp-v2tov1.src32
3 files changed, 360 insertions, 0 deletions
diff --git a/lib/snmp/bin/snmp-v2tov1.pl b/lib/snmp/bin/snmp-v2tov1.pl
new file mode 100644
index 0000000000..f9ecfc9dd8
--- /dev/null
+++ b/lib/snmp/bin/snmp-v2tov1.pl
@@ -0,0 +1,319 @@
+# snmp-v2tov1.awk
+# nawk script - pass 1 of translation from SNMP v2 SMI to v1 SMI
+#
+
+# Translate v2 IMPORTs to their v1 equivalents
+$[ = 1; # set array base to 1
+$, = ' '; # set output field separator
+$\ = "\n"; # set output record separator
+
+line: while (<>) {
+ chomp; # strip record separator
+ @Fld = split(' ', $_, 9999);
+ if (/IMPORT/) {
+ $import = 1;
+ $isave = 0;
+ print $_;
+ next line;
+ }
+ if (($import == 1) && ($Fld[1] eq ';')) {
+ $import = 0;
+ }
+ if (($import == 1) && ($Fld[1] ne 'FROM')) {
+ for ($i = 1; $i <= $#Fld; $i++) {
+ $s = ',', $Fld[$i] =~ s/$s//;
+ $imp{$i + $isave} = $Fld[$i];
+ }
+ $isave = $isave + ($i - 1);
+ next line;
+ }
+ if (($import == 1) && ($Fld[1] eq 'FROM')) {
+ &print_imp($Fld[2], *imp, $isave);
+ $isave = 0;
+ next line;
+ }
+
+ # str is 1 if we're inside a string, and 0 otherwise.
+ if (/\"/) {
+ $str = 1;
+ }
+ if ($Fld[$#Fld] =~ /\"$/) {
+ $str = 0;
+ }
+
+ # Just reprint all comments
+ if (/^--/) {
+ print $_;
+ next line;
+ }
+
+ # Place comments around MODULE-IDENTITY
+ if (/MODULE-IDENTITY/ && ($str == 0)) {
+ $moduleid = 1;
+ print '--', $_;
+ next line;
+ }
+ if (($moduleid == 1) && ($Fld[1] eq '::=')) {
+ $moduleid = 0;
+ print '--', $_;
+ next line;
+ }
+ if ($moduleid == 1) {
+ print '--', $_;
+ next line;
+ }
+
+ # Translate TEXTUAL-CONVENTION into an ordinary type assignement.
+ # Place comments around body.
+ if (/TEXTUAL-CONVENTION/ && ($str == 0)) {
+ $textual = 1;
+
+ print $Fld[1], $Fld[2];
+ print '--TEXTUAL-CONVENTION';
+ next line;
+ }
+ if (($textual == 1) && ($Fld[1] eq 'SYNTAX')) {
+ $textual = 0;
+ print "--SYNTAX\n";
+ for ($i = 2; $i <= $#Fld; $i++) {
+ print $Fld[$i];
+ }
+ next line;
+ }
+ if ($textual == 1) {
+ $s = '--', s/$s/-- --/;
+ print '--', $_;
+ next line;
+ }
+
+ # Translate OBJECT-IDENTITY into an OBJECT IDENTIFIER.
+ # Place comments around body.
+ if (/OBJECT-IDENTITY/ && ($str == 0)) {
+ $objid = 1;
+
+ print $Fld[1], 'OBJECT IDENTIFIER';
+ print '--OBJECT-IDENTITY';
+ next line;
+ }
+ if (($objid == 1) && ($Fld[1] eq '::=')) {
+ $objid = 0;
+ print $_;
+ next line;
+ }
+ if ($objid == 1) {
+ $s = '--', s/$s/-- --/;
+ print '--', $_;
+ next line;
+ }
+
+ # Place comments around MODULE-COMPLIANCE
+ if (/MODULE-COMPLIANCE/ && ($str == 0)) {
+ $modcomp = 1;
+ print '--', $_;
+ next line;
+ }
+ if (($modcomp == 1) && ($Fld[1] eq '::=')) {
+ $modcomp = 0;
+ print '--', $_;
+ next line;
+ }
+ if ($modcomp == 1) {
+ $s = '--', s/$s/-- --/;
+ print '--', $_;
+ next line;
+ }
+
+ # Place comments around OBJECT-GROUP
+ if (/OBJECT-GROUP/ && ($str == 0)) {
+ $objgr = 1;
+ print '--', $_;
+ next line;
+ }
+ if (($objgr == 1) && ($Fld[1] eq '::=')) {
+ $objgr = 0;
+ print '--', $_;
+ next line;
+ }
+ if ($objgr == 1) {
+ $s = '--', s/$s/-- --/;
+ print '--', $_;
+ next line;
+ }
+
+ if (/OBJECT-GROUP/) {
+ print 'tjolaopp';
+ }
+
+ # Place comments around NOTIFICATION-GROUP
+ if (/NOTIFICATION-GROUP/ && ($str == 0)) {
+ $notgr = 1;
+ print '--', $_;
+ next line;
+ }
+ if (($notgr == 1) && ($Fld[1] eq '::=')) {
+ $notgr = 0;
+ print '--', $_;
+ next line;
+ }
+ if ($notgr == 1) {
+ $s = '--', s/$s/-- --/;
+ print '--', $_;
+ next line;
+ }
+
+ # Translate NOTIFICATION-TYPE into a TRAP-TYPE.
+ if (/NOTIFICATION-TYPE/ && ($str == 0)) {
+ $trap = 1;
+ print $Fld[1], ' TRAP-TYPE';
+ printf ' ENTERPRISE ';
+ $tri = 1;
+ next line;
+ }
+ if (($trap == 1) && ($Fld[1] eq 'OBJECTS')) {
+ $tra{$tri++} = $_;
+ next line;
+ }
+ if (($trap == 1) && ($Fld[1] eq 'STATUS')) {
+ next line;
+ }
+ if (($trap == 1) && ($Fld[1] eq '::=')) {
+ print $Fld[3];
+ &pr_trap(*tra, $tri);
+ printf ' ::= ';
+ print $Fld[4];
+ $tri = 1;
+ $trap = 0;
+ next line;
+ }
+ if ($trap == 1) {
+ $tra{$tri++} = $_;
+ next line;
+ }
+
+ if (/UNITS/) {
+ $s = '--', s/$s/-- --/;
+ print '--', $_;
+ next line;
+ }
+
+ print $_;
+
+ # Print v1 IMPORT statements
+
+ # Print a trap
+}
+
+sub print_imp {
+ local($mib, *imp, $isave) = @_;
+ for ($i = 1; $i <= $isave; $i++) {
+ if ($imp{$i} eq 'Counter32') {
+ print ' ', $imp{$i};
+ print ' FROM RFC1155-SMI';
+ }
+ elsif ($imp{$i} eq 'Gauge32') {
+ print ' ', $imp{$i};
+ print ' FROM RFC1155-SMI';
+ }
+ elsif ($imp{$i} eq 'TimeTicks') {
+ print ' ', $imp{$i};
+ print ' FROM RFC1155-SMI';
+ }
+ elsif ($imp{$i} eq 'Opaque') {
+ print ' ', $imp{$i};
+ print ' FROM RFC1155-SMI';
+ }
+ elsif ($imp{$i} eq 'IpAddress') {
+ print ' ', $imp{$i};
+ print ' FROM RFC1155-SMI';
+ }
+ elsif ($imp{$i} eq 'NetworkAddress') {
+ print ' ', $imp{$i};
+ print ' FROM RFC1155-SMI';
+ }
+ elsif ($imp{$i} eq 'enterprises') {
+ print ' ', $imp{$i};
+ print ' FROM RFC1155-SMI';
+ }
+ elsif ($imp{$i} eq 'private') {
+ print ' ', $imp{$i};
+ print ' FROM RFC1155-SMI';
+ }
+ elsif ($imp{$i} eq 'experimental') {
+ print ' ', $imp{$i};
+ print ' FROM RFC1155-SMI';
+ }
+ elsif ($imp{$i} eq 'mgmt') {
+ print ' ', $imp{$i};
+ print ' FROM RFC1155-SMI';
+ }
+ elsif ($imp{$i} eq 'internet') {
+ print ' ', $imp{$i};
+ print ' FROM RFC1155-SMI';
+ }
+ elsif ($imp{$i} eq 'directory') {
+ print ' ', $imp{$i};
+ print ' FROM RFC1155-SMI';
+ }
+ elsif ($imp{$i} eq 'DisplayString') {
+ print ' ', $imp{$i};
+ print ' FROM RFC1213-MIB';
+ }
+ elsif ($imp{$i} eq 'mib-2') {
+ print ' ', $imp{$i};
+ print ' FROM RFC1213-MIB';
+ }
+ elsif ($imp{$i} eq 'OBJECT-TYPE') {
+ print ' ', $imp{$i};
+ print ' FROM RFC-1212';
+ }
+ elsif ($imp{$i} eq 'Integer32') {
+ ;
+ }
+ elsif ($imp{$i} eq 'MODULE-IDENTITY') {
+ ;
+ }
+ elsif ($imp{$i} eq 'TEXTUAL-CONVENTION') {
+ ;
+ }
+ elsif ($imp{$i} eq 'OBJECT-IDENTITY') {
+ ;
+ }
+ elsif ($imp{$i} eq 'OBJECT-GROUP') {
+ ;
+ }
+ elsif ($imp{$i} eq 'MODULE-COMPLIANCE') {
+ ;
+ }
+ elsif ($imp{$i} eq 'NOTIFICATION-GROUP') {
+ ;
+ }
+ elsif ($imp{$i} eq 'NOTIFICATION-TYPE') {
+ print ' TRAP-TYPE';
+ print ' FROM RFC-1215';
+ }
+ elsif ($imp{$i} eq 'DateAndTime') {
+ print ' ', $imp{$i};
+ print ' FROM STANDARD-MIB';
+ }
+ elsif ($imp{$i} eq 'TruthValue') {
+ print ' ', $imp{$i};
+ print ' FROM STANDARD-MIB';
+ }
+ elsif ($imp{$i} eq 'RowStatus') {
+ print ' ', $imp{$i};
+ print ' FROM STANDARD-MIB';
+ }
+ else {
+ print ' ', $imp{$i};
+ print ' FROM', $mib;
+ }
+ }
+}
+
+sub pr_trap {
+ local(*tra, $tri) = @_;
+ for ($i = 1; $i < $tri; $i++) {
+ print $tra{$i};
+ }
+}
diff --git a/lib/snmp/bin/snmp-v2tov1.sed b/lib/snmp/bin/snmp-v2tov1.sed
new file mode 100644
index 0000000000..f940295d69
--- /dev/null
+++ b/lib/snmp/bin/snmp-v2tov1.sed
@@ -0,0 +1,9 @@
+s/Integer32/INTEGER/g
+s/Counter32/Counter/g
+s/Gauge32/Gauge/g
+s/MAX-ACCESS/ACCESS /g
+s/OBJECTS/VARIABLES/g
+s/current[^a-zA-Z0-9]/mandatory/g
+s/current$/mandatory/g
+s/accessible-for-notify/not-accessible/g
+s/read-create/read-write/g
diff --git a/lib/snmp/bin/snmp-v2tov1.src b/lib/snmp/bin/snmp-v2tov1.src
new file mode 100644
index 0000000000..891487af2a
--- /dev/null
+++ b/lib/snmp/bin/snmp-v2tov1.src
@@ -0,0 +1,32 @@
+#!/bin/sh
+#
+# Converts a SNMPv2 MIB to a SNMPv1 MIB
+# Some kind of ad hoc algorithm is used - the
+# v2 MIBs must be well-formatted.
+
+Out=nope
+
+while [ $# -gt 0 ];
+do
+ case $1 in
+ -h*)
+ echo "Usage: snmp-v2tov1 [-o OutFile] FileName"
+ echo " Converts a SNMPv2 MIB to a SNMPv1 MIB"
+ exit;;
+ -o)
+ Out=$2
+ shift;
+ shift;;
+ *)
+ File=$1
+ shift;;
+ esac
+done
+
+if [ "X$Out" = "Xnope" ]
+then
+ Out=$File.v1
+fi
+
+%PERL% $ERL_TOP/lib/snmp/bin/snmp-v2tov1.pl $File | sed -f $ERL_TOP/lib/snmp/bin/snmp-v2tov1.sed > $Out