X-Git-Url: https://git.llucax.com/z.facultad/75.43/tp2.git/blobdiff_plain/5af53565449f020b92628b391c5b493e9abb780d..20eff13ff2afd03dee6bb44053b2510e7ffc098c:/makeroute diff --git a/makeroute b/makeroute index 1cd184b..65c533d 100755 --- a/makeroute +++ b/makeroute @@ -1,7 +1,7 @@ #!/usr/bin/env python # vim: set et sw=4 sts=4 : -import sys +import sys, os def get_campos(line): r = [] @@ -20,12 +20,13 @@ def parse(f): hosts[host]['ifaces'] = [] while line and line.strip() <> '"red"\t"ip"\t"mascara"\t"gateway"\t"interfaz"\t"metrica"': if line.startswith('"'): - (iface, ip, mascara, broadcast) = get_campos(line)[:4] + (iface, ip, mascara, broadcast, peer) = get_campos(line)[:5] hosts[host]['ifaces'].append({ 'iface': iface, 'ip': ip, 'mascara': mascara, 'broadcast': broadcast, + 'peer': peer, }) line = f.readline() line = f.readline() @@ -46,24 +47,61 @@ def parse(f): line = f.readline() return hosts -def up(host): - hosts = parse(sys.stdin) +def up(host, fd): + hosts = parse(fd) + ppp = 0 for iface in hosts[host]['ifaces']: - if not iface['iface'].startswith('ppp'): - print 'ifconfig %(iface)s %(ip)s broadcast %(broadcast)s netmask %(mascara)s' % iface + if iface['iface'].startswith('ppp'): + if host == 'h131' or host == 'h118': + print 'UP: pppd -detach modem crtscts lock %(ip)s:%(peer)s /dev/ttyS0 9600' % iface + os.system('pppd -detach modem crtscts lock %(ip)s:%(peer)s /dev/ttyS0 9600 &' % iface) + else: + print 'UP: pppd -detach crtscts lock %(ip)s:%(peer)s /dev/ttyS0' % iface + os.system('pppd -detach crtscts lock %(ip)s:%(peer)s /dev/ttyS0 &' % iface) + ppp = 1 + else: + print 'UP: ifconfig %(iface)s %(ip)s broadcast %(broadcast)s netmask %(mascara)s' % iface + os.system('ifconfig %(iface)s %(ip)s broadcast %(broadcast)s netmask %(mascara)s' % iface) + if ppp: + print 'while sleep 1; do if ping -c1 %(peer)s 2>&1 > /dev/null; then break; else echo Esperando link ppp...; fi; done' % iface + os.system('while sleep 1; do if ping -c1 %(peer)s 2>&1 > /dev/null; then break; else echo Esperando link ppp...; fi; done' % iface) for ruta in hosts[host]['rutas']: if ruta['metrica'] <> "0": - print 'route add -net %(ip)s gw %(gateway)s netmask %(mascara)s dev %(iface)s metric %(metrica)s' % ruta + print 'UP: route add -net %(ip)s gw %(gateway)s netmask %(mascara)s dev %(iface)s metric %(metrica)s' % ruta + os.system('route add -net %(ip)s gw %(gateway)s netmask %(mascara)s dev %(iface)s metric %(metrica)s' % ruta) + os.system('cp /etc/hosts /etc/hosts.13.bak') + os.system('cp hosts /etc/hosts') + os.system('cp /etc/networks /etc/networks.13.bak') + os.system('cp networks /etc/networks') -def down(host): - hosts = parse(sys.stdin) +def down(host, fd): + hosts = parse(fd) for iface in hosts[host]['ifaces']: - if not iface['iface'].startswith('ppp'): - print 'ifconfig %(iface)s down' % iface + print 'DOWN: ifconfig %(iface)s down' % iface + if iface['iface'].startswith('ppp'): + os.system('killall pppd') + else: + os.system('ifconfig %(iface)s down' % iface) + os.system('mv /etc/hosts.13.bak /etc/hosts') + os.system('mv /etc/networks.13.bak /etc/networks') + +def list(fd): + hosts = parse(fd) + for host in hosts.keys(): + print host if __name__ == '__main__': + fd = file('routers_labo.csv') + if len(sys.argv) < 2: + print >>sys.stderr, 'Uso: %s [up|down] host' % sys.argv[0] + sys.exit(1) if sys.argv[1] == 'up': - up(sys.argv[2]) + up(sys.argv[2], fd) elif sys.argv[1] == 'down': - down(sys.argv[2]) + down(sys.argv[2], fd) + elif sys.argv[1] == 'restart': + down(sys.argv[2], fd) + up(sys.argv[2], file('routers_labo.csv')) + elif sys.argv[1] == 'list': + list(fd)