diff options
Diffstat (limited to 'lib/snmp/bin/snmp-v2tov1.pl')
-rw-r--r-- | lib/snmp/bin/snmp-v2tov1.pl | 319 |
1 files changed, 319 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 +# [email protected] 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}; + } +} |