Revision 9e20fcee

b/snf-common/synnefo/util/mac2eui64.py
1
# Copyright 2011 GRNET S.A. All rights reserved.
1
# Copyright 2011, 2012, 2013 GRNET S.A. All rights reserved.
2 2
#
3 3
# Redistribution and use in source and binary forms, with or
4 4
# without modification, are permitted provided that the following
/dev/null
1
#!/usr/bin/env python
2

  
3
import sys
4
from IPy import IP
5

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

  
10
mac = sys.argv[1]
11
try:
12
    prefix = IP(sys.argv[2])
13
except ValueError:
14
    sys.stderr.write("Invalid IPv6 prefix '%s'\n" % sys.argv[2])
15
    sys.exit(1)
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 :
b/snf-cyclades-app/synnefo/logic/management/commands/reconcile-servers.py
36 36
"""
37 37
import sys
38 38
import datetime
39
import subprocess
40 39

  
41 40
from optparse import make_option
42 41

  
......
45 44
from synnefo.db.models import VirtualMachine, Network, pooled_rapi_client
46 45
from synnefo.logic import reconciliation, utils
47 46
from synnefo.logic import backend as backend_mod
47
from synnefo.util.mac2eui64 import mac2eui64
48 48
from synnefo.management.common import get_backend
49 49

  
50 50

  
......
274 274
                backend_mod.process_net_status(vm=vm, etime=event_time,
275 275
                                               nics=final_nics)
276 276
            print >> sys.stderr, "    ...done"
277

  
278

  
279
def mac2eui64(mac, prefixstr):
280
    process = subprocess.Popen(["mac2eui64", mac, prefixstr],
281
                               stdout=subprocess.PIPE)
282
    return process.stdout.read().rstrip()
b/snf-cyclades-gtools/synnefo/ganeti/hook.py
43 43

  
44 44
import sys
45 45
import os
46
import subprocess
47

  
48 46
import json
49 47
import socket
50 48
import logging
......
54 52
from synnefo import settings
55 53
from synnefo.lib.amqp import AMQPClient
56 54
from synnefo.lib.utils import split_time
57

  
58

  
59
def mac2eui64(mac, prefixstr):
60
    process = subprocess.Popen(["mac2eui64", mac, prefixstr],
61
                                stdout=subprocess.PIPE)
62
    return process.stdout.read().rstrip()
55
from synnefo.util.mac2eui64 import mac2eui64
63 56

  
64 57

  
65 58
def ganeti_net_status(logger, environ):

Also available in: Unified diff