]> git.sesse.net Git - nms/commitdiff
Add Zyxel config stuff from TG05.
authorSteinar H. Gunderson <sesse@samfundet.no>
Thu, 6 Apr 2006 12:35:15 +0000 (12:35 +0000)
committerSteinar H. Gunderson <sesse@samfundet.no>
Thu, 6 Apr 2006 12:35:15 +0000 (12:35 +0000)
zyxel/konfgen.py [new file with mode: 0755]
zyxel/maketextkonfig.sh [new file with mode: 0755]

diff --git a/zyxel/konfgen.py b/zyxel/konfgen.py
new file mode 100755 (executable)
index 0000000..3d55528
--- /dev/null
@@ -0,0 +1,215 @@
+#!/usr/bin/env python
+# -*- coding: iso8859-1 -*-
+#
+# Dette er litt slitsomt, men virker.
+# Scriptet produserer et runscript -script, som kjøres
+# i minicom. 
+#
+# Du setter scriptet som _tolker_ i minicom. C-a O, valg "D".
+# det skal stå som: "konfgen.py | runscript /dev/stdin"
+#
+# Husk at du må ha en fungerende minicom -konfig fra før. Rett
+# serieport, 9600 8N1 osv. Med bare "minicom -o" skal du kunne
+# trykke enter og få "please enter password"
+#
+# Start med "minicom -o -S hihi" (scriptfilen trenger ikke finnes)
+#
+# gangen i scriptet:
+# * generisk hostoppsett (host, syslog, dato og saann)
+# * ip-oppsett med router og slikt
+# * vlan-oppsett
+
+# start og sluttporter for å ikke stenge seg selv ute 
+# mens man tester.
+p1 = 1
+p2 = 24+1
+
+NETWORK="81.162"
+TRAPHOST="81.162.254.60"
+LOGHOST="81.162.254.61"
+
+#MODE="RAW"
+MODE="minicom"
+
+
+# z = antall svitsjer pr. distro
+# DEN FANTASTISKE Z-KONSTANTEN
+Z = 42
+
+import sys
+import os
+import time
+
+sys.stderr = open("/tmp/err","w+")
+#sys.stdout = open("/tmp/out","w+")
+sys.stdout = open(sys.argv[1],"w+")
+
+def deduceSwitch():
+    # virker kun hvis man kjører manuelt.
+    if len(sys.argv) > 1:
+        (row, no) = sys.argv[1].split("-")
+       return (int(row), int(no))
+    else:
+        # okay, dette er for jævlig.
+       # jeg burde vinne en eller annen perlpris for dette.
+       # min ppid er også runscripts ppid. den har -S -argumentet oppgitt
+       # på kommandolinjen. (hihi i eksempel over)
+       # jeg vil hente den ut, slik at vi kan vatte inn svitsjnummer der.
+       log( "print inget argument. forsøker å dedusere fra prosesstabell")
+        lines = os.popen("ps -f --ppid %s -o pid,cmd 2>/dev/null" % os.getppid()).readlines()
+       for line in lines:
+           line = line.split()
+           if (line[1] == "runscript"):
+               log( "linje som traff: %s" % line)
+               tmp = line[3] # det som skrives etter -S
+               row = tmp.split("-")[0]
+               num = tmp.split("-")[1]
+               log( "jeg tror vi snakker om %s" % line[3])
+               return (int(row),int(num))
+       log("KLARTE IKKE DEDUSERE SVITSJ. AVBRYTER.")
+       if MODE == "minicom":
+            send("! killall -9 minicom")
+       sys.exit(255)
+
+def log(text):
+    if MODE=="RAW":
+        # vi trenger ikke kommentarer i raw-mode.
+        return 
+    elif MODE == "minicom":
+        # runscript -format
+        sys.stdout.write("print \"%s\"\n" % text)
+    else:
+       sys.stderr.write(text +"\n")
+
+def send(text):
+    if MODE=="RAW":
+        sys.stdout.write(text + "\n")
+    elif MODE == "minicom":
+       sys.stdout.write("send \"%s\"\n" % text)
+#        sys.stdout.write("print \"kommendoen er: %s\"\n" % text)
+    else: 
+        sys.stdout.write(text + "\n")
+
+def retSubnet(sw):
+    (rad,num) = sw
+    b = (((rad * 3)-4) / Z) + 1
+    if b == 6:
+        b=5
+    return "24%s" % b
+
+def retIP(sw):
+    (rad,num) = sw
+    gangefaktor = rad - ((rad - 1) / 2)
+    lopenr = 2 + 6 * gangefaktor + num
+    return NETWORK + ".%s.%s" % (retSubnet(sw), lopenr)
+
+sw = deduceSwitch()
+
+if ((sw[0] % 2) == 0):
+    print "det er ingen svitsjer på rad %i" % sw[0]
+    sys.exit(255)
+
+if (sw[1] > 6):
+    print "det er maks 6 svitsjer pr. bordrad!"
+    sys.exit(255)
+
+
+
+GW             = "%s.%s.1" % (NETWORK, retSubnet(sw)) 
+IP             = retIP(sw)
+NAME           = "e%i-%isw" % sw
+VLAN           = "%i%i" % sw
+MNGTVLAN       = "90%s" % retSubnet(sw)[-1]
+
+if MODE == "minicom":
+    log ("logger paa")
+    # logger paa
+    send( "exit")
+    send( "exit")
+    send( "z1234")
+
+
+### GENERISK HOSTOPPSETT
+log( "* generisk")
+send("sys hostname %s" % NAME)
+
+send("sys syslog server %s" % LOGHOST)
+
+send("sys snmp getCommunity 2 immer" )
+send("sys snmp setCommunity 2 dabei") 
+send("sys snmp trapCommunity 2 jungel")
+send("sys snmp trapDest 2 %s"    % TRAPHOST)
+send("sys snmp trustedHost 2 %s" % TRAPHOST)
+
+send( "ip igmpsnoop enable")
+# sansynligvis noe med broadcast storm control her
+
+### IP
+log( "* ip")
+
+send("ip ifconfig swif0 %s/24" % IP)
+# konfig fra fabrikken. fjerner om den finnes.
+send("ip route drop 192.168.1.0/24")
+# naermeste distro
+send("ip route add default %s" % GW)
+
+### bw-begrensninger
+send("sys sw bw port set 1 * 25 0 200000 TIL-VERDEN")
+send("sys sw bw port set 1 25 * 0 200000 FRA-VERDEN")
+
+### VLAN
+log( "* vlan")
+send("sys sw vlan type 802.1q")
+# oppretter management-vlanet
+send("sys sw vlan1q svlan setentry MNGT %s 25 fixed tag" % MNGTVLAN)
+send("sys sw vlan1q svlan active %s" % MNGTVLAN )
+
+
+# sletter defaulten
+send("sys sw vlan1q svlan delentry 1")
+
+# oppretter brukervlan
+send("sys sw vlan1q svlan setentry %s %s 25 fixed tag" % (NAME, VLAN))
+send("sys sw vlan1q svlan active %s" % VLAN)
+
+# Usage: sw vlan1q svlan setentry <name> <VID> <PORT> <ADCTL> <TAGCTL>
+# name maa stemme, ellers setter du nytt navn paa vlanet.
+# adctl er forbidden,fixed,normal
+# tagctl er tag / untag
+
+for i in range(p1,p2): 
+    send("sys sw vlan1q svlan setentry %s   %s %i fixed untag"   % (NAME, VLAN, i))
+
+for i in range(p1,p2): 
+    send("sys sw vlan1q svlan setentry MNGT %s %i forbidden tag" % (MNGTVLAN, i))
+
+
+### PORT-oppsett
+log( "* portoppsett")
+send("sys sw vlan1q port vlanTrunking 25 enable")
+
+for i in range(p1,p2): 
+    send("sys sw vlan1q port accept %s untagged" % i)
+
+for i in range(p1,p2): 
+    send("sys sw vlan1q port defaultVID %s %s" % (i, VLAN))
+
+for i in range(p1,p2): 
+    send("sys sw bmstorm set %i 8192 egress" % i)
+    send("sys sw bmstorm set %i 8192 ingress" % i)
+
+send("sys sw bmstorm set 25 32767 ingress")
+
+# disse tar av uante grunner flere sekunder pr. kommando.
+# det virker som at alle er disablet i utgangspunktet, så vi slå
+# kun på den som trengs.
+send("sys sw vlan1q port defaultVID 25 %s" % MNGTVLAN)
+
+send("config save")
+# sette mngt-vlan
+send("sys sw vlan1q svlan cpu %s" % MNGTVLAN)
+
+if MODE == "minicom":
+    log("logger av")
+    send("exit")
+    print "! killall -9 minicom"
diff --git a/zyxel/maketextkonfig.sh b/zyxel/maketextkonfig.sh
new file mode 100755 (executable)
index 0000000..fa2ef60
--- /dev/null
@@ -0,0 +1,12 @@
+#!/bin/bash
+
+for i in `seq 1 73`; do
+    for j in `seq 1 6`; do 
+       if [ $(($i%2)) == 0 ]; then
+           break; 
+       fi
+       ../konfgen.py $i-$j
+    done; 
+done;
+
+