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