# 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};
}
}