2 # -*- coding: iso8859-1 -*-
4 # Dette er litt slitsomt, men virker.
5 # Scriptet produserer et runscript -script, som kjøres
8 # Du setter scriptet som _tolker_ i minicom. C-a O, valg "D".
9 # det skal stå som: "konfgen.py | runscript /dev/stdin"
11 # Husk at du må ha en fungerende minicom -konfig fra før. Rett
12 # serieport, 9600 8N1 osv. Med bare "minicom -o" skal du kunne
13 # trykke enter og få "please enter password"
15 # Start med "minicom -o -S hihi" (scriptfilen trenger ikke finnes)
18 # * generisk hostoppsett (host, syslog, dato og saann)
19 # * ip-oppsett med router og slikt
22 # start og sluttporter for å ikke stenge seg selv ute
28 TRAPHOST="194.0.255.20"
29 LOGHOST="194.0.255.20"
35 # z = antall svitsjer pr. distro
36 # DEN FANTASTISKE Z-KONSTANTEN
43 sys.stderr = open("/tmp/err","w+")
44 #sys.stdout = open("/tmp/out","w+")
45 sys.stdout = open(sys.argv[1],"w+")
48 # virker kun hvis man kjører manuelt.
50 (row, no) = sys.argv[1].split("-")
51 return (int(row), int(no))
53 # okay, dette er for jævlig.
54 # jeg burde vinne en eller annen perlpris for dette.
55 # min ppid er også runscripts ppid. den har -S -argumentet oppgitt
56 # på kommandolinjen. (hihi i eksempel over)
57 # jeg vil hente den ut, slik at vi kan vatte inn svitsjnummer der.
58 log( "print inget argument. forsøker å dedusere fra prosesstabell")
59 lines = os.popen("ps -f --ppid %s -o pid,cmd 2>/dev/null" % os.getppid()).readlines()
62 if (line[1] == "runscript"):
63 log( "linje som traff: %s" % line)
64 tmp = line[3] # det som skrives etter -S
65 row = tmp.split("-")[0]
66 num = tmp.split("-")[1]
67 log( "jeg tror vi snakker om %s" % line[3])
68 return (int(row),int(num))
69 log("KLARTE IKKE DEDUSERE SVITSJ. AVBRYTER.")
71 send("! killall -9 minicom")
76 # vi trenger ikke kommentarer i raw-mode.
78 elif MODE == "minicom":
80 sys.stdout.write("print \"%s\"\n" % text)
82 sys.stderr.write(text +"\n")
86 sys.stdout.write(text + "\n")
87 elif MODE == "minicom":
88 sys.stdout.write("send \"%s\"\n" % text)
89 # sys.stdout.write("print \"kommendoen er: %s\"\n" % text)
91 sys.stdout.write(text + "\n")
95 b = (((rad * 3)-4) / Z) + 1
102 gangefaktor = rad - ((rad - 1) / 2)
103 lopenr = 2 + 6 * gangefaktor + num
104 return NETWORK + ".%s.%s" % (retSubnet(sw), lopenr)
108 if ((sw[0] % 2) == 0):
109 print "det er ingen svitsjer på rad %i" % sw[0]
113 print "det er maks 6 svitsjer pr. bordrad!"
118 GW = "%s.%s.1" % (NETWORK, retSubnet(sw))
120 NAME = "e%i-%isw" % sw
122 MNGTVLAN = "90%s" % retSubnet(sw)[-1]
124 if MODE == "minicom":
132 ### GENERISK HOSTOPPSETT
134 send("sys hostname %s" % NAME)
136 send("sys syslog server %s" % LOGHOST)
138 send("sys snmp getCommunity 2 immer" )
139 send("sys snmp setCommunity 2 dabei")
140 send("sys snmp trapCommunity 2 jungel")
141 send("sys snmp trapDest 2 %s" % TRAPHOST)
142 send("sys snmp trustedHost 2 %s" % TRAPHOST)
144 send( "ip igmpsnoop enable")
145 # sansynligvis noe med broadcast storm control her
150 send("ip ifconfig swif0 %s/24" % IP)
151 # konfig fra fabrikken. fjerner om den finnes.
152 send("ip route drop 192.168.1.0/24")
154 send("ip route add default %s" % GW)
157 send("sys sw bw port set 1 * 25 0 200000 TIL-VERDEN")
158 send("sys sw bw port set 1 25 * 0 200000 FRA-VERDEN")
162 send("sys sw vlan type 802.1q")
163 # oppretter management-vlanet
164 send("sys sw vlan1q svlan setentry MNGT %s 25 fixed tag" % MNGTVLAN)
165 send("sys sw vlan1q svlan active %s" % MNGTVLAN )
169 send("sys sw vlan1q svlan delentry 1")
171 # oppretter brukervlan
172 send("sys sw vlan1q svlan setentry %s %s 25 fixed tag" % (NAME, VLAN))
173 send("sys sw vlan1q svlan active %s" % VLAN)
175 # Usage: sw vlan1q svlan setentry <name> <VID> <PORT> <ADCTL> <TAGCTL>
176 # name maa stemme, ellers setter du nytt navn paa vlanet.
177 # adctl er forbidden,fixed,normal
178 # tagctl er tag / untag
180 for i in range(p1,p2):
181 send("sys sw vlan1q svlan setentry %s %s %i fixed untag" % (NAME, VLAN, i))
183 for i in range(p1,p2):
184 send("sys sw vlan1q svlan setentry MNGT %s %i forbidden tag" % (MNGTVLAN, i))
188 log( "* portoppsett")
189 send("sys sw vlan1q port vlanTrunking 25 enable")
191 for i in range(p1,p2):
192 send("sys sw vlan1q port accept %s untagged" % i)
194 for i in range(p1,p2):
195 send("sys sw vlan1q port defaultVID %s %s" % (i, VLAN))
197 for i in range(p1,p2):
198 send("sys sw bmstorm set %i 8192 egress" % i)
199 send("sys sw bmstorm set %i 8192 ingress" % i)
201 send("sys sw bmstorm set 25 32767 ingress")
203 # disse tar av uante grunner flere sekunder pr. kommando.
204 # det virker som at alle er disablet i utgangspunktet, så vi slå
205 # kun på den som trengs.
206 send("sys sw vlan1q port defaultVID 25 %s" % MNGTVLAN)
210 send("sys sw vlan1q svlan cpu %s" % MNGTVLAN)
212 if MODE == "minicom":
215 print "! killall -9 minicom"