]> git.llucax.com Git - z.facultad/75.43/tp2.git/blob - makeroute
Se agrega al script un comando para bajar las interfaces.
[z.facultad/75.43/tp2.git] / makeroute
1 #!/usr/bin/env python
2 # vim: set et sw=4 sts=4 :
3
4 import sys
5
6 def get_campos(line):
7     r = []
8     for c in line.split('\t'):
9         r.append(c.strip('"\n'))
10     return r
11
12 def parse(f):
13     hosts = {}
14     line = f.readline()
15     while line:
16         if line.startswith('"tabla de ruteo de '):
17             host = line[19:-7]
18             hosts[host] = {}
19             line = f.readline()
20             hosts[host]['ifaces'] = []
21             while line and line.strip() <> '"red"\t"ip"\t"mascara"\t"gateway"\t"interfaz"\t"metrica"':
22                 if line.startswith('"'):
23                     (iface, ip, mascara, broadcast) = get_campos(line)[:4]
24                     hosts[host]['ifaces'].append({
25                         'iface': iface,
26                         'ip': ip,
27                         'mascara': mascara,
28                         'broadcast': broadcast,
29                     })
30                 line = f.readline()
31             line = f.readline()
32             hosts[host]['rutas'] = []
33             while line and line.strip() <> '"--"':
34                 if line.startswith('"'):
35                     (red, ip, mascara, gateway, iface, metrica) = get_campos(line)
36                     if not metrica: metrica = "1"
37                     hosts[host]['rutas'].append({
38                         'red': red,
39                         'ip': ip,
40                         'mascara': mascara,
41                         'gateway': gateway,
42                         'iface': iface,
43                         'metrica': metrica,
44                         })
45                 line = f.readline()
46         line = f.readline()
47     return hosts
48
49 def up(host):
50     hosts = parse(sys.stdin)
51     for iface in hosts[host]['ifaces']:
52         if not iface['iface'].startswith('ppp'):
53             print 'ifconfig %(iface)s %(ip)s broadcast %(broadcast)s netmask %(mascara)s' % iface
54     for ruta in hosts[host]['rutas']:
55         if ruta['metrica'] <> "0":
56             print 'route add -net %(ip)s gw %(gateway)s netmask %(mascara)s dev %(iface)s metric %(metrica)s' % ruta
57
58 def down(host):
59     hosts = parse(sys.stdin)
60     for iface in hosts[host]['ifaces']:
61         if not iface['iface'].startswith('ppp'):
62             print 'ifconfig %(iface)s down' % iface
63
64 if __name__ == '__main__':
65     if sys.argv[1] == 'up':
66         up(sys.argv[2])
67     elif sys.argv[1] == 'down':
68         down(sys.argv[2])
69