diff options
-rw-r--r-- | include/nms/util.pm | 137 | ||||
-rwxr-xr-x | tools/add_switches.txt.pl | 110 |
2 files changed, 142 insertions, 105 deletions
diff --git a/include/nms/util.pm b/include/nms/util.pm new file mode 100644 index 0000000..e1ebaa3 --- /dev/null +++ b/include/nms/util.pm @@ -0,0 +1,137 @@ +#! /usr/bin/perl +use strict; +use warnings; +package nms::util; +use Data::Dumper; + +use base 'Exporter'; +our @EXPORT = qw(guess_placement parse_switches_txt parse_switches parse_switch); + +# Parse a single switches.txt-formatted switch +sub parse_switch { + my ($switch, $subnet4, $subnet6, $mgtmt4, $mgtmt6, $lolid, $distro) = split(/ /); + my %foo = guess_placement($switch); + my %ret = ( + 'name' => "$switch", + 'subnet4' => "$subnet4", + 'subnet6' => "$subnet6", + 'mgtmt4' => "$mgtmt4", + 'mgtmt6' => "$mgtmt6", + 'lolid' => "$lolid", + 'distro' => "$distro" + ); + %{$ret{'placement_guess'}} = guess_placement($switch); + return %ret; +} + +# Parses a switches_txt given as a filehandle on $_[0] +# (e.g.: parse_switches_txt(*STDIN) or parse_switches_txt(whatever). +sub parse_switches_txt { + my $fh = $_[0]; + my %switches = (); + while(<$fh>) { + chomp; + my %switch = parse_switch($_); + %{$switches{$switch{'name'}}} = %switch; + } + return %switches; +} + +# Parses switches in switches.txt format given as $_[0]. +# E.g: parse_switches("e1-3 88.92.0.0/26 2a06:5840:0a::/64 88.92.54.2/26 2a06:5840:54a::2/64 1013 distro0") +sub parse_switches { + my %switches = (); + my $txt = $_[0]; + foreach (split("\n",$txt)) { + chomp; + my %switch = parse_switch($_); + %{$switches{$switch{'name'}}} = %switch; + } + return %switches; +} + +# Guesses placement from name to get a starting point +# Largely courtesy of Knuta +sub guess_placement { + my ($x, $y, $xx, $yy); + + my $name = $_[0]; + my $src = "unknown"; + if ($name =~ /^e\d+-\d+$/) { + $name =~ /e(\d+)-(\d+)/; + my ($e, $s) = ($1, $2); + $src = "main"; + + $x = int(232 + (($e-1)/2) * 31.1); + $y = undef; + + $x += 14 if ($e >= 17); + $x += 14 if ($e >= 29); + $x += 14 if ($e >= 45); + $x += 14 if ($e >= 63); + + if ($s > 2) { + $y = 405 - 120 * ($s-2); + } else { + $y = 689 - 120 * ($s); + } + + $xx = $x + 16; + $yy = $y + 120; + + # Justeringer + $y += 45 if $name eq "e1-4"; + $y += 20 if $name eq "e3-4"; + $y += 15 if $name eq "e5-4"; + $yy -= 25 if $name eq "e11-1"; + + #$yy -= 14 if $name eq "e77-1"; + #$yy -= 28 if $name eq "e79-1"; + #$yy -= 15 if $name eq "e81-1"; + #$yy -= 56 if $name eq "e83-1"; + } elsif ($name =~ /^sw(\d+)-creativia$/) { + my ($s) = ($1); + $src = "creativia"; + $x = 1535; + $y = int(130 + 32.2 * $s); + $yy = $y + 20; + if ($s == 1) { + $xx = $x + 70; + } elsif ($s == 2) { + $xx = $x + 90; + } elsif ($s == 3) { + $xx = $x + 102; + } else { + $xx = $x + 142; + } + + } elsif ($name =~ /^crew(\d+)-(\d+)$/) { + my ($s, $n) = ($1, $2); + $src = "crew"; + $x = 1023 + 45 * $n; + $y = int(329 + 20.5 * $s); + $xx = $x + 45; + $yy = $y + 14; + + if ($s == 1 && $n == 1) { + $xx += 25; + } + } else { + # Fallback to have _some_ position + $src = "random"; + $x = int(rand(500)); + $y = int(rand(500)); + $xx = $x + 20; + $yy = $y + 130; + }; + + + my %box = ( + 'src' => "$src", + 'x1' => $x, + 'y1' => $y, + 'xx' => $xx, + 'yy' => $yy + ); + return %box; +} diff --git a/tools/add_switches.txt.pl b/tools/add_switches.txt.pl index c3def24..283eeea 100755 --- a/tools/add_switches.txt.pl +++ b/tools/add_switches.txt.pl @@ -1,116 +1,16 @@ #!/usr/bin/perl # Usage: ./add_switches.txt.pl < switches.txt > switches.json # -# Parses switches.txt into json and does some guesswork for placement based -# on name, if possible. -# -# Actually adding them comes later. +# Parses switches.txt into json currently just throws it to stdout # +# Actually adding them to a DB comes later. use strict; use warnings; use Data::Dumper; +use lib '../include'; +use nms::util; -my %switches = (); - -# Guesses placement from name to get a starting point -# Largely courtesy of Knuta -sub guess_placement { - my ($x, $y, $xx, $yy); - - my $name = $_[0]; - my $src = "unknown"; - if ($name =~ /^e\d+-\d+$/) { - $name =~ /e(\d+)-(\d+)/; - my ($e, $s) = ($1, $2); - $src = "main"; - - $x = int(232 + (($e-1)/2) * 31.1); - $y = undef; - - $x += 14 if ($e >= 17); - $x += 14 if ($e >= 29); - $x += 14 if ($e >= 45); - $x += 14 if ($e >= 63); - - if ($s > 2) { - $y = 405 - 120 * ($s-2); - } else { - $y = 689 - 120 * ($s); - } - - $xx = $x + 16; - $yy = $y + 120; - - # Justeringer - $y += 45 if $name eq "e1-4"; - $y += 20 if $name eq "e3-4"; - $y += 15 if $name eq "e5-4"; - $yy -= 25 if $name eq "e11-1"; - - #$yy -= 14 if $name eq "e77-1"; - #$yy -= 28 if $name eq "e79-1"; - #$yy -= 15 if $name eq "e81-1"; - #$yy -= 56 if $name eq "e83-1"; - } elsif ($name =~ /^sw(\d+)-creativia$/) { - my ($s) = ($1); - $src = "creativia"; - $x = 1535; - $y = int(130 + 32.2 * $s); - $yy = $y + 20; - if ($s == 1) { - $xx = $x + 70; - } elsif ($s == 2) { - $xx = $x + 90; - } elsif ($s == 3) { - $xx = $x + 102; - } else { - $xx = $x + 142; - } - - } elsif ($name =~ /^crew(\d+)-(\d+)$/) { - my ($s, $n) = ($1, $2); - $src = "crew"; - $x = 1023 + 45 * $n; - $y = int(329 + 20.5 * $s); - $xx = $x + 45; - $yy = $y + 14; - - if ($s == 1 && $n == 1) { - $xx += 25; - } - } else { - # Fallback to have _some_ position - $src = "random"; - $x = int(rand(500)); - $y = int(rand(500)); - $xx = $x + 20; - $yy = $y + 130; - }; - - - my %box = ( - 'src' => "$src", - 'x1' => $x, - 'y1' => $y, - 'xx' => $xx, - 'yy' => $yy - ); - return %box; -} -while (<STDIN>) { - chomp; - my ($switch, $subnet4, $subnet6, $mgtmt4, $mgtmt6, $lolid, $distro) = split(/ /); - my %foo = guess_placement($switch); - $switches{$switch} = { - 'subnet4' => "$subnet4", - 'subnet6' => "$subnet6", - 'mgtmt4' => "$mgtmt4", - 'mgtmt6' => "$mgtmt6", - 'lolid' => "$lolid", - 'distro' => "$distro" - }; - $switches{$switch}{'placement_guess'} = \%foo; -} +my %switches = parse_switches_txt(*STDIN); print Dumper(\%switches); |