Index: nodes/genesis-to-yaml.pl
===================================================================
--- nodes/genesis-to-yaml.pl	(revision 8266)
+++ nodes/genesis-to-yaml.pl	(revision 8266)
@@ -0,0 +1,144 @@
+#!/usr/bin/env perl
+
+eval {
+  require Geo::Coordinates::RDNAP;
+};
+if (! $@) {
+  print "Foo";
+  Geo::Coordinates::RDNAP->import(qw/from_rd to_rd dms/);
+} else {
+  print STDERR "[WARN] Geo::Coordinates::RDNAP not installed\n";
+  sub from_rd {
+    return (0,0,0);
+  }
+}
+
+# RD X,Y -> RD Noorderbreedte, Oosterbreedte
+# http://web.inter.nl.net/users/F.Kissels/gps/conversie.html
+
+# Little perl to convert genesis files into python config files,
+# Which gonna be used for more logic stuff ;-)
+
+$argc = $#ARGV + 1;
+if ($argc == 0) {
+  print STDERR  "Usage $_ <wleiden.conf> ...\n";
+  exit 1;
+# Hack to easy support multiple files without remembering any variable in between
+} elsif ($argc > 1) {
+  foreach $file (@ARGV) {
+     print `perl $ENV{_} $file`;
+  }
+  exit 0;
+}
+
+
+do($ARGV[0]) || die;
+
+my %status_labels = ( up => 'up', down => 'dw', planned => 'pl' );
+
+$interfaces = [];
+foreach $if (keys %config) {
+  push(@interfaces, $if) if ($if =~ m/^[a-z0-9]+$/g);
+}
+$interfaces = join(",",@interfaces);
+
+if ( ($X =~ /\d+/) and ($Y =~ /\d+/) and ($X > 10) and ($Y > 10)) {
+    ($lat, $lon, $h) = from_rd( $X, $Y, 0);
+} else {
+    $lat = $lon = $h = 0;
+}
+
+$status = $status_labels{$status} || 'up'; # ensure reporting a correct status
+$comment = $comment || 'None';
+
+print <<EOF;
+# Genesis config yaml style
+# vim:ts=2:et:sw=2:ai
+#
+comment   : $comment
+interfaces: $interfaces
+latitude  : $lat
+location  : $location
+longitude : $lon
+masterip  : $master_ip
+nodename  : $nodename
+nodetype  : $nodetype
+rdnap_x   : $X
+rdnap_y   : $Y
+status    : $status
+EOF
+
+
+foreach $if (keys %config) {
+    ($iflabel, $alias) = split(':',$if);
+    $iflabel .= "_alias${alias}" if ($alias);
+    
+    print <<EOF;
+iface_$iflabel:
+EOF
+    %tmp = (
+        'configtype' => 'interface',
+        'dhcp' => 'False',
+        'compass_direction' => 'None',
+        'nodename' => $nodename,
+        'interface' => $if,
+        );
+    foreach $line  (split('\n',$config{$if})) {
+        ($key, $value) = split(/=/,$line);
+        if ($key and (lc($key) =~ /^[a-z].*/)) {
+            #print "$key : $value\n";
+            $value = lc($value) if not lc($key) =~ m/(desc|comment)/;
+            if ($key =~ /^type$/i) {
+                if ($value eq 'ethernet') {
+                    $value = 'eth';
+                } else {
+                    $value = '11b';
+                }
+            } elsif ($key =~ /^mode$/i) {
+                if ($value eq 'master') {
+                    $value = 'ms';
+                } else { # managed
+                    $value = 'mn';
+                }
+            } elsif ($key =~ /^polar$/i) {
+                if ($value eq 'hor') {
+                    $value = 'hr';
+                } else {
+                    $value = 'vr';
+                }
+            } elsif ($key =~ /^essid$/i) {
+                $key = 'ssid';
+
+                # Dirty hack to fetch compass direction of essid
+                $value =~ /[a-z]+-([a-z]+)\..*/;
+                $direction = $1;
+                # Translate into English
+                if ($direction ne "omni") {
+                    $direction =~ tr/oz/es/;
+                }
+                # node AMwtrt1 and 'test' directions
+                if ($direction eq "wtrtr" or $direction eq "test") {
+                    $direction = 'None';
+                }
+                $tmp{'compass_direction'} = $direction;
+            } elsif ($key =~ /^gain$/i) {
+                $value =~ s/dbi//;
+            }
+            $tmp{lc($key)} = $value;
+        }
+    }
+# ethernet2wifi bridges
+    if ( $tmp{extra_type} eq 'eth2wifibridge' ) {
+        $tmp{type} = '11b';
+    }
+# 11a
+    if ( $tmp{type} eq '11b' && $tmp{channel} > 13 ) {
+        $tmp{type} = '11a';
+    }
+
+    foreach $key (sort keys %tmp) {
+        printf "  %-11s: $tmp{$key}\n", $key;
+    }
+    print "\n";
+}
+
