source: genesis/nodes/getrange.py@ 5526

Last change on this file since 5526 was 5519, checked in by lodewijk, 18 years ago

als er om een /24 gevraagd wordt, begin dan te kijken bij 172.17.0.0

  • Property svn:eol-style set to native
File size: 1.1 KB
Line 
1# zoek de eerste vrije (== niet in een wleiden.conf gedefinieerde) interlink
2# range
3# lodewijk@wirelessleiden.nl
4import popen2
5import re
6import sys
7
8size = 30
9if len(sys.argv) > 1:
10 size = int(sys.argv[1])
11numaddrs = 1 << (32 - size)
12
13ipre = re.compile("^IP=(172\.16\.[0-9]+\.[0-9]+)/([0-9]+) *")
14
15def parseaddr(s):
16 f = s.split('.')
17 return (long(f[0]) << 24L) + \
18 (long(f[1]) << 16L) + \
19 (long(f[2]) << 8L) + \
20 long(f[3])
21
22def showaddr(a):
23 return "%d.%d.%d.%d" % ((a >> 24) & 0xff, (a >> 16) & 0xff, (a >> 8) & 0xff, a & 0xff)
24
25bezet = {}
26
27(cout, cin) = popen2.popen2("cat */wleiden.conf | grep ^IP | grep 172.16\...*\/[28\|29\|30]")
28cin.close()
29for l in cout.readlines():
30 l = l[:-1]
31 match = ipre.match(l)
32 if match == None:
33 print "'" + l + "'"
34 addr = parseaddr(match.group(1))
35 mask = int(match.group(2))
36 addr = addr & ~((1 << (32 - mask)) - 1)
37 bezet[addr] = 1
38
39i = 0xffffffffL
40for k in bezet.keys():
41 if k < i:
42 i = k
43
44if size == 24:
45 i = 0xac110000
46
47while bezet.has_key(i):
48 i = i + numaddrs
49
50print "%s/%d:" % (showaddr(i), size),
51print " en ".join([showaddr(i) for i in range(i + 1, i + numaddrs - 1)])
Note: See TracBrowser for help on using the repository browser.