source: genesis/nodes/getrange.py@ 6721

Last change on this file since 6721 was 6024, checked in by lodewijk, 17 years ago

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

  • Property svn:eol-style set to native
File size: 1.2 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 continue
35 if len(match.groups()) == 0:
36 continue
37 addr = parseaddr(match.group(1))
38 mask = int(match.group(2))
39 addr = addr & ~((1 << (32 - mask)) - 1)
40 bezet[addr] = 1
41
42i = 0xffffffffL
43for k in bezet.keys():
44 if k < i:
45 i = k
46
47
48i = 0xac100300
49if size == 24:
50 i = 0xac110000
51while bezet.has_key(i):
52 i = i + numaddrs
53
54print "%s/%d:" % (showaddr(i), size),
55print " en ".join([showaddr(i) for i in range(i + 1, i + numaddrs - 1)])
Note: See TracBrowser for help on using the repository browser.