source: genesis/nodes/getrange.py@ 7957

Last change on this file since 7957 was 7936, checked in by lodewijk, 15 years ago

herschrijf het zoeken naar IP adressen. ipv de uitvoer van grep pakken, ga
zelf over */wleiden.conf's heen. hou variabelen bij, en handel vervolgens
references naar die variabelen af als er een "IP=" voorbij komt.

  • Property svn:eol-style set to native
  • Property svn:executable set to *
File size: 1.5 KB
Line 
1#!/usr/bin/env python
2# zoek de eerste vrije (== niet in een wleiden.conf gedefinieerde) interlink
3# range
4# lodewijk@wirelessleiden.nl
5import popen2
6import re
7import sys
8import glob
9
10size = 30
11if len(sys.argv) < 2:
12 print "Gebruik: python getrange.py <interlink|subnet> <size>"
13 print "dus voor een /28 interlink is het 'python getrange.py interlink 28'"
14 print "en voor een /25 subnet is het 'python getrange.py subnet 25'"
15interlink = sys.argv[1] == 'interlink'
16size = int(sys.argv[2])
17numaddrs = 1 << (32 - size)
18
19substre = re.compile("^(\$[a-zA-Z][^ =]*) ?= ?'([^']*)';")
20
21def parseaddr(s):
22 f = s.split('.')
23 return (long(f[0]) << 24L) + \
24 (long(f[1]) << 16L) + \
25 (long(f[2]) << 8L) + \
26 long(f[3])
27
28def showaddr(a):
29 return "%d.%d.%d.%d" % ((a >> 24) & 0xff, (a >> 16) & 0xff, (a >> 8) & 0xff, a & 0xff)
30
31bezet = {}
32
33for fname in glob.glob("*/wleiden.conf"):
34 substs = {}
35 for l in open(fname):
36 l = l[:-1]
37 match = substre.match(l)
38 if match != None:
39 substs[match.group(1)] = match.group(2)
40 if l.startswith("IP="):
41 right = l[3:]
42 if '/' not in right:
43 addr = right
44 mask = 32
45 else:
46 addr, mask = right.split('/')
47 if addr in substs:
48 addr = substs[addr]
49 addr = parseaddr(addr)
50 mask = int(mask)
51 addr = addr & ~((1 << (32 - mask)) - 1)
52 bezet[addr] = 1
53
54i = 0xffffffffL
55for k in bezet.keys():
56 if k < i:
57 i = k
58
59
60i = 0xac100300
61if not interlink:
62 i = 0xac110000
63while bezet.has_key(i):
64 i = i + numaddrs
65
66print "%s/%d:" % (showaddr(i), size),
67print " en ".join([showaddr(i) for i in range(i + 1, i + numaddrs - 1)])
Note: See TracBrowser for help on using the repository browser.