source: genesis/nodes/genesis-to-py.pl@ 6536

Last change on this file since 6536 was 6535, checked in by roland, 16 years ago

Modifed genesis-to-py.pl to know 11a interfaces. The problem is that
genesis doesn't define 11a interfaces in a correct way, the second
problem is that there are ethernet-wifi bridges which are a pain
to configure normally.

  • Property svn:executable set to *
File size: 2.7 KB
Line 
1#!/usr/bin/env perl
2use Geo::Coordinates::RDNAP qw/from_rd to_rd dms/;
3
4
5# RD X,Y -> RD Noorderbreedte, Oosterbreedte
6# http://web.inter.nl.net/users/F.Kissels/gps/conversie.html
7
8# Little perl to convert genesis files into python config files,
9# Which gonna be used for more logic stuff ;-)
10
11# Avoid junk node imports, use following line to import valid nodes
12# Usage: for file in CNode*/wleiden.conf proxy*/wleiden.conf; do ./genesis-to-py.pl $file; done > py.conf
13do($ARGV[0]) || die;
14
15my %status_labels = ( up => 'up', down => 'dw', planned => 'pl' );
16
17$interfaces = join(',',keys %config);
18if ( ($X =~ /\d+/) and ($Y =~ /\d+/) and ($X > 10) and ($Y > 10)) {
19 ($lat, $lon, $h) = from_rd( $X, $Y, 0);
20} else {
21 $lat = $lon = $h = 0;
22}
23
24$status = $status_labels{$status} || 'up'; # ensure reporting a correct status
25
26print <<EOF;
27[$nodename]
28location = $location
29status = $status
30latitude = $lat
31longitude = $lon
32interfaces = $interfaces
33x = $X
34y = $Y
35masterip = $master_ip
36nodetype = $nodetype
37name = $nodename
38configtype = node
39
40EOF
41
42
43foreach $if (keys %config) {
44 print <<EOF;
45[$nodename/$if]
46EOF
47 %tmp = (
48 'configtype' => 'interface',
49 'dhcp' => 'no',
50 'compass-direction' => '',
51 );
52 foreach $line (split('\n',$config{$if})) {
53 ($key, $value) = split(/=/,$line);
54 if ($key and (lc($key) =~ /^[a-z].*/)) {
55 #print "$key : $value\n";
56 $value = lc($value);
57 if ($key =~ /^type$/i) {
58 if ($value eq 'ethernet') {
59 $value = 'eth';
60 } else {
61 $value = '11b';
62 }
63 } elsif ($key =~ /^mode$/i) {
64 if ($value eq 'master') {
65 $value = 'ms';
66 } else { # managed
67 $value = 'mn';
68 }
69 } elsif ($key =~ /^polar$/i) {
70 if ($value eq 'hor') {
71 $value = 'hr';
72 } else {
73 $value = 'vr';
74 }
75 } elsif ($key =~ /^essid$/i) {
76 $key = 'ssid';
77
78 # Dirty hack to fetch compass direction of essid
79 $value =~ /[a-z]+-([a-z]+)\..*/;
80 $direction = $1;
81 # Translate into English
82 if ($direction ne "omni") {
83 $direction =~ tr/oz/es/;
84 }
85 $tmp{'compass-direction'} = $direction;
86 } elsif ($key =~ /^gain$/i) {
87 $value =~ s/dbi//;
88 }
89 $tmp{lc($key)} = $value;
90 }
91 }
92
93 if ( $tmp{type} eq '11b' && $tmp{channel} > 13 ) {
94 $tmp{type} = '11a';
95 }
96
97 foreach $key (keys %tmp) {
98 print "$key=$tmp{$key}\n";
99 }
100 print "\n";
101}
Note: See TracBrowser for help on using the repository browser.