Revision 536721a9

b/contrib/ganeti-hooks/kvm-vif-bridge
4 4
# interfaces based on the initial deployment of the Okeanos project
5 5

  
6 6
TAP_CONSTANT_MAC=cc:47:52:4e:45:54 # GRNET in hex :-)
7
MAC2EUI64=/etc/ganeti/mac2eui64.py
7
MAC2EUI64=/usr/bin/mac2eui64
8 8
NFDHCPD_STATE_DIR=/var/lib/nfdhcpd
9 9

  
10 10
function routed_setup_ipv4 {
/dev/null
1
#!/usr/bin/env python
2

  
3
import sys
4

  
5
from IPy import IP
6

  
7
if len(sys.argv) != 3:
8
    sys.stderr.write("Usage: %s <mac_address> <IPv6 prefix>\n" % sys.argv[0])
9
    sys.exit(127)
10

  
11
mac = sys.argv[1]
12
try:
13
    prefix = IP(sys.argv[2])
14
except ValueError:
15
    sys.stderr.write("Invalid IPv6 prefix '%s'\n" % sys.argv[2])
16
    
17

  
18
if prefix.version() != 6:
19
    sys.stderr.write("%s is not a valid IPv6 prefix\n" % prefix)
20
    sys.exit(1)
21

  
22
if prefix.prefixlen() != 64:
23
    sys.stderr.write("Cannot generate an EUI-64 address on a non-64 subnet\n")
24
    sys.exit(1)
25

  
26
mac_parts = mac.split(":")
27
pfx_parts = prefix.net().strFullsize().split(":")
28

  
29
if len(mac_parts) != 6:
30
    sys.stderr.write("%s is not a valid MAC-48 address\n" % mac)
31
    sys.exit(1)
32

  
33
eui64 = mac_parts[:3] + [ "ff", "fe" ] + mac_parts[3:]
34

  
35
eui64[0] = "%02x" % (int(eui64[0], 16) ^ 0x02)
36

  
37
ip = ":".join(pfx_parts[:4])
38
for l in range(0, len(eui64), 2):
39
    ip += ":%s" % "".join(eui64[l:l+2])
40

  
41
try:
42
    print IP(ip).strCompressed()
43
except ValueError, e:
44
    sys.stderr.write("Ooops, something went wrong: '%s'!\n" % str(e))
45

  
46
# vim: set ts=4 sts=4 sw=4 et ai :

Also available in: Unified diff