From 84adefa331c4159d432d22840663c38f155cd4c1 Mon Sep 17 00:00:00 2001 From: Erlang/OTP Date: Fri, 20 Nov 2009 14:54:40 +0000 Subject: The R13B03 release. --- lib/snmp/bin/snmp-v2tov1.pl | 319 +++++++++++++++++++++++++++++++++++++++++++ lib/snmp/bin/snmp-v2tov1.sed | 9 ++ lib/snmp/bin/snmp-v2tov1.src | 32 +++++ 3 files changed, 360 insertions(+) create mode 100644 lib/snmp/bin/snmp-v2tov1.pl create mode 100644 lib/snmp/bin/snmp-v2tov1.sed create mode 100644 lib/snmp/bin/snmp-v2tov1.src (limited to 'lib/snmp/bin') 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 +# mbj@erlang.ericsson.se 971114 +# + +# 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. +# mbj@erlang.ericsson.se 971114 + +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 -- cgit v1.2.3