source: genesis/nodes/getrange.py@ 7971

Last change on this file since 7971 was 7971, checked in by rick, 14 years ago

Should kill itself after usage warning

  • 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'"
15 exit(1)
16
17interlink = sys.argv[1] == 'interlink'
18size = int(sys.argv[2])
19numaddrs = 1 << (32 - size)
20
21substre = re.compile("^(\$[a-zA-Z][^ =]*) ?= ?'([^']*)';")
22
23def parseaddr(s):
24 f = s.split('.')
25 return (long(f[0]) << 24L) + \
26 (long(f[1]) << 16L) + \
27 (long(f[2]) << 8L) + \
28 long(f[3])
29
30def showaddr(a):
31 return "%d.%d.%d.%d" % ((a >> 24) & 0xff, (a >> 16) & 0xff, (a >> 8) & 0xff, a & 0xff)
32
33bezet = {}
34
35for fname in glob.glob("*/wleiden.conf"):
36 substs = {}
37 for l in open(fname):
38 l = l[:-1]
39 match = substre.match(l)
40 if match != None:
41 substs[match.group(1)] = match.group(2)
42 if l.startswith("IP="):
43 right = l[3:]
44 if '/' not in right:
45 addr = right
46 mask = 32
47 else:
48 addr, mask = right.split('/')
49 if addr in substs:
50 addr = substs[addr]
51 addr = parseaddr(addr)
52 mask = int(mask)
53 addr = addr & ~((1 << (32 - mask)) - 1)
54 bezet[addr] = 1
55
56i = 0xffffffffL
57for k in bezet.keys():
58 if k < i:
59 i = k
60
61
62i = 0xac100300
63if not interlink:
64 i = 0xac110000
65while bezet.has_key(i):
66 i = i + numaddrs
67
68print "%s/%d:" % (showaddr(i), size),
69print " en ".join([showaddr(i) for i in range(i + 1, i + numaddrs - 1)])
Note: See TracBrowser for help on using the repository browser.