source:
genesis/nodes/getrange.py@
5700
Last change on this file since 5700 was 5519, checked in by , 18 years ago | |
---|---|
|
|
File size: 1.1 KB |
Line | |
---|---|
1 | # zoek de eerste vrije (== niet in een wleiden.conf gedefinieerde) interlink |
2 | # range |
3 | # lodewijk@wirelessleiden.nl |
4 | import popen2 |
5 | import re |
6 | import sys |
7 | |
8 | size = 30 |
9 | if len(sys.argv) > 1: |
10 | size = int(sys.argv[1]) |
11 | numaddrs = 1 << (32 - size) |
12 | |
13 | ipre = re.compile("^IP=(172\.16\.[0-9]+\.[0-9]+)/([0-9]+) *") |
14 | |
15 | def 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 | |
22 | def showaddr(a): |
23 | return "%d.%d.%d.%d" % ((a >> 24) & 0xff, (a >> 16) & 0xff, (a >> 8) & 0xff, a & 0xff) |
24 | |
25 | bezet = {} |
26 | |
27 | (cout, cin) = popen2.popen2("cat */wleiden.conf | grep ^IP | grep 172.16\...*\/[28\|29\|30]") |
28 | cin.close() |
29 | for 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 | |
39 | i = 0xffffffffL |
40 | for k in bezet.keys(): |
41 | if k < i: |
42 | i = k |
43 | |
44 | if size == 24: |
45 | i = 0xac110000 |
46 | |
47 | while bezet.has_key(i): |
48 | i = i + numaddrs |
49 | |
50 | print "%s/%d:" % (showaddr(i), size), |
51 | print " en ".join([showaddr(i) for i in range(i + 1, i + numaddrs - 1)]) |
Note:
See TracBrowser
for help on using the repository browser.