1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
#!/usr/bin/env python
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of version 2.1 of the GNU Lesser General Public
# License as published by the Free Software Foundation.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
import os
_scripts_dir = {
"Linux": "/etc/xen/scripts",
"SunOS": "/usr/lib/xen/scripts",
}
_xend_autorestart = {
"Linux": True,
"SunOS": False,
}
_pygrub_path = {
"SunOS": "/usr/lib/xen/bin/pygrub"
}
_netback_type = {
"SunOS": "SUNW_mac"
}
_vif_script = {
"SunOS": "vif-vnic"
}
def _linux_balloon_stat(label):
"""Returns the value for the named label, or None if an error occurs."""
PROC_XEN_BALLOON = '/proc/xen/balloon'
f = file(PROC_XEN_BALLOON, 'r')
try:
for line in f:
keyvalue = line.split(':')
if keyvalue[0] == label:
values = keyvalue[1].split()
if values[0].isdigit():
return int(values[0])
else:
return None
return None
finally:
f.close()
def _solaris_balloon_stat(label):
"""Returns the value for the named label, or None if an error occurs."""
import fcntl
import array
DEV_XEN_BALLOON = '/dev/xen/balloon'
BLN_IOCTL_CURRENT = 0x42410001
BLN_IOCTL_TARGET = 0x42410002
BLN_IOCTL_LOW = 0x42410003
BLN_IOCTL_HIGH = 0x42410004
BLN_IOCTL_LIMIT = 0x42410005
label_to_ioctl = { 'Current allocation' : BLN_IOCTL_CURRENT,
'Requested target' : BLN_IOCTL_TARGET,
'Low-mem balloon' : BLN_IOCTL_LOW,
'High-mem balloon' : BLN_IOCTL_HIGH,
'Xen hard limit' : BLN_IOCTL_LIMIT }
f = file(DEV_XEN_BALLOON, 'r')
try:
values = array.array('L', [0])
if fcntl.ioctl(f.fileno(), label_to_ioctl[label], values, 1) == 0:
return values[0]
else:
return None
finally:
f.close()
_balloon_stat = {
"SunOS": _solaris_balloon_stat
}
def _get(var, default=None):
return var.get(os.uname()[0], default)
scripts_dir = _get(_scripts_dir, "/etc/xen/scripts")
xend_autorestart = _get(_xend_autorestart)
pygrub_path = _get(_pygrub_path, "/usr/bin/pygrub")
netback_type = _get(_netback_type, "netfront")
vif_script = _get(_vif_script, "vif-bridge")
lookup_balloon_stat = _get(_balloon_stat, _linux_balloon_stat)
|