* [PATCH] tools/python: remove broken xl binding
@ 2015-10-06 16:57 Wei Liu
2015-10-06 17:13 ` Andrew Cooper
2015-10-06 18:06 ` Konrad Rzeszutek Wilk
0 siblings, 2 replies; 10+ messages in thread
From: Wei Liu @ 2015-10-06 16:57 UTC (permalink / raw)
To: xen-devel; +Cc: Andrew Cooper, Ian Jackson, Ian Campbell, Wei Liu
Various people say this binding doesn't compile or doesn't work. Remove
it for the benefit of xl feature development -- so that new features
won't need to worry about making this broken binding happy.
This isn't going to expose any user visible changes because that module
is not built by default.
Signed-off-by: Wei Liu <wei.liu2@citrix.com>
---
tools/python/setup.py | 9 -
tools/python/xen/lowlevel/xl/xl.c | 797 --------------------------------------
2 files changed, 806 deletions(-)
delete mode 100644 tools/python/xen/lowlevel/xl/xl.c
diff --git a/tools/python/setup.py b/tools/python/setup.py
index 5bf81be..fdba866 100644
--- a/tools/python/setup.py
+++ b/tools/python/setup.py
@@ -27,17 +27,8 @@ xs = Extension("xs",
depends = [ PATH_XENSTORE + "/libxenstore.so" ],
sources = [ "xen/lowlevel/xs/xs.c" ])
-xl = Extension("xl",
- extra_compile_args = extra_compile_args,
- include_dirs = [ PATH_XEN, PATH_LIBXL, PATH_LIBXC + "/include", "xen/lowlevel/xl" ],
- library_dirs = [ PATH_LIBXL ],
- libraries = [ "xenlight" ],
- depends = [ PATH_LIBXL + "/libxenlight.so" ],
- sources = [ "xen/lowlevel/xl/xl.c", "xen/lowlevel/xl/_pyxl_types.c" ])
-
plat = os.uname()[0]
modules = [ xc, xs ]
-#modules.extend([ xl ])
setup(name = 'xen',
version = '3.0',
diff --git a/tools/python/xen/lowlevel/xl/xl.c b/tools/python/xen/lowlevel/xl/xl.c
deleted file mode 100644
index 9b33731..0000000
--- a/tools/python/xen/lowlevel/xl/xl.c
+++ /dev/null
@@ -1,797 +0,0 @@
-/******************************************************************************
- * xl.c
- *
- * Copyright (c) 2010 Citrix Ltd.
- * Author: Gianni Tedesco
- *
- * 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, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include <Python.h>
-#include <stdio.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <time.h>
-#include <getopt.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/time.h>
-#include <fcntl.h>
-#include <signal.h>
-#include <sys/socket.h>
-#include <sys/select.h>
-#include <arpa/inet.h>
-#include <ctype.h>
-#include <inttypes.h>
-
-#include <libxl.h>
-#include <libxl_utils.h>
-#include <libxlutil.h>
-
-#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
-
-/* Needed for Python versions earlier than 2.3. */
-#ifndef PyMODINIT_FUNC
-#define PyMODINIT_FUNC DL_EXPORT(void)
-#endif
-
-#define CLS "ctx"
-
-#if PY_MAJOR_VERSION < 2 || (PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION < 5)
-#define Py_ssize_t int
-#endif
-
-static PyObject *xl_error_obj;
-
-int genwrap__obj_init(PyObject *self, PyObject *args, PyObject *kwds)
-{
- PyObject *key, *value;
- Py_ssize_t pos = 0;
-
- if ( NULL == kwds )
- return 0;
-
- while (PyDict_Next(kwds, &pos, &key, &value)) {
- if ( PyObject_SetAttr(self, key, value) < 0 )
- return -1;
- }
-
- return 0;
-}
-
-int genwrap__string_set(PyObject *v, char **str)
-{
- char *tmp;
- if ( NULL == v || Py_None == v ) {
- free(*str);
- *str = NULL;
- return 0;
- }
- if ( !PyString_Check(v) ) {
- PyErr_SetString(PyExc_TypeError, "Attribute expected string");
- return -1;
- }
- tmp = strdup(PyString_AsString(v));
- if ( NULL == tmp ) {
- PyErr_SetString(PyExc_MemoryError, "Allocating string attribute");
- return -1;
- }
- free(*str);
- *str = tmp;
- return 0;
-}
-
-PyObject *genwrap__string_get(char **str)
-{
- if ( NULL == *str ) {
- Py_INCREF(Py_None);
- return Py_None;
- }
- return PyString_FromString(*str);
-}
-
-PyObject *genwrap__ull_get(unsigned long long val)
-{
- return PyLong_FromUnsignedLongLong(val);
-}
-
-int genwrap__ull_set(PyObject *v, unsigned long long *val, unsigned long long mask)
-{
- unsigned long long tmp;
- if ( NULL == v ) {
- *val = 0;
- return 0;
- }
- if ( PyLong_Check(v) ) {
- tmp = PyLong_AsUnsignedLongLong(v);
- }else if ( PyInt_Check(v) ) {
- tmp = (unsigned long long)PyInt_AsLong(v);
- }else{
- PyErr_SetString(PyExc_TypeError, "Attribute expected int or long");
- return -1;
- }
- if ( tmp & ~mask ) {
- PyErr_SetString(PyExc_ValueError, "Integer overflow");
- return -1;
- }
- *val = tmp;
- return 0;
-}
-
-PyObject *genwrap__ll_get(long long val)
-{
- return PyLong_FromLongLong(val);
-}
-
-int genwrap__ll_set(PyObject *v, long long *val, long long mask)
-{
- long long tmp;
- if ( NULL == v ) {
- *val = 0;
- return 0;
- }
- if ( PyLong_Check(v) ) {
- tmp = PyLong_AsLongLong(v);
- }else{
- tmp = (long long)PyInt_AsLong(v);
- }
- if ( tmp & ~mask ) {
- PyErr_SetString(PyExc_ValueError, "Integer overflow");
- return -1;
- }
- *val = tmp;
- return 0;
-}
-
-PyObject *genwrap__defbool_get(libxl_defbool *db)
-{
- PyObject *ret;
- ret = libxl_defbool_val(*db) ? Py_True : Py_False;
- Py_INCREF(ret);
- return ret;
-}
-
-int genwrap__defbool_set(PyObject *v, libxl_defbool *db)
-{
- bool val = !(NULL == v || Py_None == v || Py_False == v);
- libxl_defbool_set(db, val);
- return 0;
-}
-
-static int fixed_bytearray_set(PyObject *v, uint8_t *ptr, size_t len)
-{
- char *tmp;
- size_t sz;
-
- if ( NULL == v ) {
- memset(ptr, 0, len);
- return 0;
- }
-
-#ifdef PyByteArray_Check
- if ( PyByteArray_Check(v) ) {
- sz = PyByteArray_Size(v);
- tmp = PyByteArray_AsString(v);
- }else
-#endif
- if ( PyString_Check(v) ) {
- Py_ssize_t ssz;
- if ( PyString_AsStringAndSize(v, &tmp, &ssz) )
- return -1;
- if ( ssz < 0 )
- tmp = NULL;
- sz = ssz;
- }else{
- PyErr_SetString(PyExc_TypeError, "Attribute expected bytearray or string");
- return -1;
- }
-
- if ( NULL == tmp ) {
- memset(ptr, 0, len);
- return 0;
- }
- if ( sz != len ) {
- PyErr_SetString(PyExc_ValueError,
- (sz < len) ? "Buffer underflow" : "Buffer overflow");
- return -1;
- }
-
- memcpy(ptr, tmp, sz);
- return 0;
-}
-
-static PyObject *fixed_bytearray_get(const uint8_t *ptr, size_t len)
-{
-#ifdef PyByteArray_Check
- return PyByteArray_FromStringAndSize((const char *)ptr, len);
-#else
- return PyString_FromStringAndSize((const char *)ptr, len);
-#endif
-}
-
-#include "_pyxl_types.h"
-
-int attrib__libxl_cpuid_policy_list_set(PyObject *v, libxl_cpuid_policy_list *pptr)
-{
- PyErr_SetString(PyExc_NotImplementedError, "Setting cpuid_policy_list");
- return -1;
-}
-
-int attrib__libxl_bitmap_set(PyObject *v, libxl_bitmap *pptr)
-{
- int i;
- long cpu;
-
- for (i = 0; i < PyList_Size(v); i++) {
- cpu = PyInt_AsLong(PyList_GetItem(v, i));
- libxl_bitmap_set(pptr, cpu);
- }
- return 0;
-}
-
-int attrib__libxl_hwcap_set(PyObject *v, libxl_hwcap *pptr)
-{
- PyErr_SetString(PyExc_NotImplementedError, "Setting hwcap");
- return -1;
-}
-
-int attrib__libxl_key_value_list_set(PyObject *v, libxl_key_value_list *pptr)
-{
- if ( *pptr ) {
- libxl_key_value_list_dispose(pptr);
- *pptr = NULL;
- }
- if ( v == Py_None )
- return 0;
- return -1;
-}
-
-int attrib__libxl_mac_set(PyObject *v, libxl_mac *pptr)
-{
- return fixed_bytearray_set(v, *pptr, 6);
-}
-
-int attrib__libxl_string_list_set(PyObject *v, libxl_string_list *pptr)
-{
- PyErr_SetString(PyExc_NotImplementedError, "Setting string_list");
- return -1;
-}
-
-int attrib__libxl_uuid_set(PyObject *v, libxl_uuid *pptr)
-{
- return fixed_bytearray_set(v, libxl_uuid_bytearray(pptr), 16);
-}
-
-int attrib__libxl_domid_set(PyObject *v, libxl_domid *domid) {
- *domid = PyInt_AsLong(v);
- return 0;
-}
-
-int attrib__libxl_devid_set(PyObject *v, libxl_devid *devid) {
- *devid = PyInt_AsLong(v);
- return 0;
-}
-
-int attrib__struct_in_addr_set(PyObject *v, struct in_addr *pptr)
-{
- PyErr_SetString(PyExc_NotImplementedError, "Setting in_addr");
- return -1;
-}
-
-PyObject *attrib__libxl_cpuid_policy_list_get(libxl_cpuid_policy_list *pptr)
-{
- PyErr_SetString(PyExc_NotImplementedError, "Getting cpuid_policy_list");
- return NULL;
-}
-
-PyObject *attrib__libxl_bitmap_get(libxl_bitmap *pptr)
-{
- PyObject *cpulist = NULL;
- int i;
-
- cpulist = PyList_New(0);
- libxl_for_each_bit(i, *pptr) {
- if ( libxl_bitmap_test(pptr, i) ) {
- PyObject* pyint = PyInt_FromLong(i);
-
- PyList_Append(cpulist, pyint);
- Py_DECREF(pyint);
- }
- }
- return cpulist;
-}
-
-PyObject *attrib__libxl_hwcap_get(libxl_hwcap *pptr)
-{
- PyErr_SetString(PyExc_NotImplementedError, "Getting hwcap");
- return NULL;
-}
-
-PyObject *attrib__libxl_key_value_list_get(libxl_key_value_list *pptr)
-{
- PyErr_SetString(PyExc_NotImplementedError, "Getting key_value_list");
- return NULL;
-}
-
-PyObject *attrib__libxl_mac_get(libxl_mac *pptr)
-{
- return fixed_bytearray_get(*pptr, 6);
-}
-
-PyObject *attrib__libxl_string_list_get(libxl_string_list *pptr)
-{
- PyErr_SetString(PyExc_NotImplementedError, "Getting string_list");
- return NULL;
-}
-
-PyObject *attrib__libxl_uuid_get(libxl_uuid *pptr)
-{
- return fixed_bytearray_get(libxl_uuid_bytearray(pptr), 16);
-}
-
-PyObject *attrib__libxl_domid_get(libxl_domid *domid) {
- return PyInt_FromLong(*domid);
-}
-
-PyObject *attrib__libxl_devid_get(libxl_devid *devid) {
- return PyInt_FromLong(*devid);
-}
-
-PyObject *attrib__struct_in_addr_get(struct in_addr *pptr)
-{
- PyErr_SetString(PyExc_NotImplementedError, "Getting in_addr");
- return NULL;
-}
-
-typedef struct {
- PyObject_HEAD;
- libxl_ctx *ctx;
- xentoollog_logger_stdiostream *logger;
- xentoollog_level minmsglevel;
-} XlObject;
-
-static PyObject *pyxl_list_domains(XlObject *self)
-{
- libxl_dominfo *cur, *info;
- PyObject *list;
- int nr_dom, i;
-
- info = libxl_list_domain(self->ctx, &nr_dom);
- if ( NULL == info )
- return PyList_New(0);
-
- list = PyList_New(nr_dom);
- if ( NULL == list )
- goto err_mem;
-
- for(i = 0, cur = info; i < nr_dom; i++, cur++) {
- Py_dominfo *di;
- di = Pydominfo_New();
- if ( NULL == di )
- goto err_mem;
- memcpy(&di->obj, cur, sizeof(di->obj));
- /* SetItem steals a reference */
- PyList_SetItem(list, i, (PyObject *)di);
- }
-
- free(info);
- return list;
-err_mem:
- Py_DECREF(list);
- PyErr_SetString(PyExc_MemoryError, "Allocating domain list");
- return NULL;
-}
-
-static PyObject *pyxl_domid_to_name(XlObject *self, PyObject *args)
-{
- char *domname;
- int domid;
- PyObject *ret = Py_None;
-
- if ( !PyArg_ParseTuple(args, "i", &domid) )
- return NULL;
-
- domname = libxl_domid_to_name(self->ctx, domid);
- if (domname)
- ret = PyString_FromString(domname);
- else
- Py_INCREF(Py_None);
- free(domname);
-
- return ret;
-}
-
-static PyObject *pyxl_domain_shutdown(XlObject *self, PyObject *args)
-{
- int domid;
- if ( !PyArg_ParseTuple(args, "i", &domid) )
- return NULL;
- if ( libxl_domain_shutdown(self->ctx, domid) ) {
- PyErr_SetString(xl_error_obj, "cannot shutdown domain");
- return NULL;
- }
- Py_INCREF(Py_None);
- return Py_None;
-}
-
-static PyObject *pyxl_domain_reboot(XlObject *self, PyObject *args)
-{
- int domid;
- if ( !PyArg_ParseTuple(args, "i", &domid) )
- return NULL;
- if ( libxl_domain_reboot(self->ctx, domid) ) {
- PyErr_SetString(xl_error_obj, "cannot reboot domain");
- return NULL;
- }
- Py_INCREF(Py_None);
- return Py_None;
-}
-
-static PyObject *pyxl_domain_destroy(XlObject *self, PyObject *args)
-{
- int domid;
- if ( !PyArg_ParseTuple(args, "i", &domid) )
- return NULL;
- if ( libxl_domain_destroy(self->ctx, domid, 0) ) {
- PyErr_SetString(xl_error_obj, "cannot destroy domain");
- return NULL;
- }
- Py_INCREF(Py_None);
- return Py_None;
-}
-
-static PyObject *pyxl_domain_pause(XlObject *self, PyObject *args)
-{
- int domid;
- if ( !PyArg_ParseTuple(args, "i", &domid) )
- return NULL;
- if ( libxl_domain_pause(self->ctx, domid) ) {
- PyErr_SetString(xl_error_obj, "cannot pause domain");
- return NULL;
- }
- Py_INCREF(Py_None);
- return Py_None;
-}
-
-static PyObject *pyxl_domain_unpause(XlObject *self, PyObject *args)
-{
- int domid;
- if ( !PyArg_ParseTuple(args, "i", &domid) )
- return NULL;
- if ( libxl_domain_unpause(self->ctx, domid) ) {
- PyErr_SetString(xl_error_obj, "cannot unpause domain");
- return NULL;
- }
- Py_INCREF(Py_None);
- return Py_None;
-}
-
-static PyObject *pyxl_domain_rename(XlObject *self, PyObject *args)
-{
- char *old_name = NULL, *new_name;
- int domid;
- if ( !PyArg_ParseTuple(args, "is|s", &domid, &new_name, &old_name) )
- return NULL;
- if ( libxl_domain_rename(self->ctx, domid, old_name, new_name) ) {
- PyErr_SetString(xl_error_obj, "cannot rename domain");
- return NULL;
- }
- Py_INCREF(Py_None);
- return Py_None;
-}
-
-static PyObject *pyxl_pci_add(XlObject *self, PyObject *args)
-{
- Py_device_pci *pci;
- PyObject *obj;
- int domid;
- if ( !PyArg_ParseTuple(args, "iO", &domid, &obj) )
- return NULL;
- if ( !Pydevice_pci_Check(obj) ) {
- PyErr_SetString(PyExc_TypeError, "Xxpected xl.device_pci");
- return NULL;
- }
- pci = (Py_device_pci *)obj;
- if ( libxl_device_pci_add(self->ctx, domid, &pci->obj, 0) ) {
- PyErr_SetString(xl_error_obj, "cannot add pci device");
- return NULL;
- }
- Py_INCREF(Py_None);
- return Py_None;
-}
-
-static PyObject *pyxl_pci_del(XlObject *self, PyObject *args)
-{
- Py_device_pci *pci;
- PyObject *obj;
- int domid, force = 0;
-
- if ( !PyArg_ParseTuple(args, "iO|i", &domid, &obj, &force) )
- return NULL;
- if ( !Pydevice_pci_Check(obj) ) {
- PyErr_SetString(PyExc_TypeError, "Xxpected xl.device_pci");
- return NULL;
- }
- pci = (Py_device_pci *)obj;
- if ( force ) {
- if ( libxl_device_pci_destroy(self->ctx, domid, &pci->obj, 0) ) {
- PyErr_SetString(xl_error_obj, "cannot remove pci device");
- return NULL;
- }
- } else {
- if ( libxl_device_pci_remove(self->ctx, domid, &pci->obj, 0) ) {
- PyErr_SetString(xl_error_obj, "cannot remove pci device");
- return NULL;
- }
- }
- Py_INCREF(Py_None);
- return Py_None;
-}
-
-static PyObject *pyxl_pci_parse(XlObject *self, PyObject *args)
-{
- Py_device_pci *pci;
- char *str;
-
- if ( !PyArg_ParseTuple(args, "s", &str) )
- return NULL;
-
- pci = Pydevice_pci_New();
- if ( NULL == pci ) {
- PyErr_SetString(PyExc_MemoryError, "Allocating domain list");
- return NULL;
- }
-
- if ( xlu_pci_parse_bdf(NULL, &pci->obj, str) ) {
- PyErr_SetString(xl_error_obj, "cannot parse pci device spec (BDF)");
- Py_DECREF(pci);
- return NULL;
- }
-
- return (PyObject *)pci;
-}
-
-static PyObject *pyxl_pci_assignable_list(XlObject *self, PyObject *args)
-{
- libxl_device_pci *dev;
- PyObject *list;
- int nr_dev, i;
-
- dev = libxl_device_pci_assignable_list(self->ctx, &nr_dev);
- if ( dev == NULL ) {
- PyErr_SetString(xl_error_obj, "Cannot list assignable devices");
- return NULL;
- }
-
- list = PyList_New(nr_dev);
- if ( NULL == list )
- return NULL;
-
- for(i = 0; i < nr_dev; i++) {
- Py_device_pci *pd;
- pd = Pydevice_pci_New();
- if ( NULL == pd )
- goto err_mem;
- memcpy(&pd->obj, &dev[i], sizeof(pd->obj));
- /* SetItem steals a reference */
- PyList_SetItem(list, i, (PyObject *)pd);
- }
-
- free(dev);
- return list;
-err_mem:
- Py_DECREF(list);
- PyErr_SetString(PyExc_MemoryError, "Allocating PCI device list");
- return NULL;
-}
-
-static PyObject *pyxl_pci_list(XlObject *self, PyObject *args)
-{
- libxl_device_pci *dev;
- PyObject *list;
- int nr_dev, i, domid;
-
- if ( !PyArg_ParseTuple(args, "i", &domid) )
- return NULL;
-
- dev = libxl_device_pci_list(self->ctx, domid, &nr_dev);
- if ( dev == NULL ) {
- PyErr_SetString(xl_error_obj, "Cannot list assignable devices");
- return NULL;
- }
-
- list = PyList_New(nr_dev);
- if ( NULL == list )
- return NULL;
-
- for(i = 0; i < nr_dev; i++) {
- Py_device_pci *pd;
- pd = Pydevice_pci_New();
- if ( NULL == pd )
- goto err_mem;
- memcpy(&pd->obj, &dev[i], sizeof(pd->obj));
- /* SetItem steals a reference */
- PyList_SetItem(list, i, (PyObject *)pd);
- }
-
- free(dev);
- return list;
-err_mem:
- Py_DECREF(list);
- PyErr_SetString(PyExc_MemoryError, "Allocating PCI device list");
- return NULL;
-}
-
-static PyMethodDef pyxl_methods[] = {
- {"list_domains", (PyCFunction)pyxl_list_domains, METH_NOARGS,
- "List domains"},
- {"domid_to_name", (PyCFunction)pyxl_domid_to_name, METH_VARARGS,
- "Retrieve name from domain-id"},
- {"domain_shutdown", (PyCFunction)pyxl_domain_shutdown, METH_VARARGS,
- "Shutdown a domain"},
- {"domain_reboot", (PyCFunction)pyxl_domain_reboot, METH_VARARGS,
- "Reboot a domain"},
- {"domain_destroy", (PyCFunction)pyxl_domain_destroy, METH_VARARGS,
- "Destroy a domain"},
- {"domain_pause", (PyCFunction)pyxl_domain_pause, METH_VARARGS,
- "Pause a domain"},
- {"domain_unpause", (PyCFunction)pyxl_domain_unpause, METH_VARARGS,
- "Unpause a domain"},
- {"domain_rename", (PyCFunction)pyxl_domain_rename, METH_VARARGS,
- "Rename a domain"},
- {"device_pci_add", (PyCFunction)pyxl_pci_add, METH_VARARGS,
- "Insert a pass-through PCI device"},
- {"device_pci_del", (PyCFunction)pyxl_pci_del, METH_VARARGS,
- "Remove a pass-through PCI device"},
- {"device_pci_parse_bdf", (PyCFunction)pyxl_pci_parse, METH_VARARGS,
- "Parse pass-through PCI device spec (BDF)"},
- {"device_pci_list", (PyCFunction)pyxl_pci_list, METH_VARARGS,
- "List PCI devices assigned to a domain"},
- {"device_pci_assignable_list",
- (PyCFunction)pyxl_pci_assignable_list, METH_NOARGS,
- "List assignable PCI devices"},
- { NULL, NULL, 0, NULL }
-};
-
-static PyObject *PyXl_getattr(PyObject *obj, char *name)
-{
- return Py_FindMethod(pyxl_methods, obj, name);
-}
-
-static PyObject *PyXl_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
-{
- XlObject *self = (XlObject *)type->tp_alloc(type, 0);
-
- if (self == NULL)
- return NULL;
-
- self->ctx = NULL;
- self->logger = NULL;
- self->minmsglevel = XTL_PROGRESS;
-
- return (PyObject *)self;
-}
-
-static int
-PyXl_init(XlObject *self, PyObject *args, PyObject *kwds)
-{
- self->logger = xtl_createlogger_stdiostream(stderr, self->minmsglevel, 0);
- if (!self->logger) {
- PyErr_SetString(xl_error_obj, "cannot init xl logger");
- return -1;
- }
-
- if ( libxl_ctx_alloc(&self->ctx, LIBXL_VERSION, 0,
- (xentoollog_logger*)self->logger) ) {
- PyErr_SetString(xl_error_obj, "cannot init xl context");
- return -1;
- }
-
- return 0;
-}
-
-static void PyXl_dealloc(XlObject *self)
-{
- libxl_ctx_free(self->ctx);
- if ( self->logger )
- xtl_logger_destroy((xentoollog_logger*)self->logger);
-
- self->ob_type->tp_free((PyObject *)self);
-}
-
-static PyTypeObject PyXlType = {
- PyObject_HEAD_INIT(NULL)
- 0,
- PKG "." CLS,
- sizeof(XlObject),
- 0,
- (destructor)PyXl_dealloc, /* tp_dealloc */
- NULL, /* tp_print */
- PyXl_getattr, /* tp_getattr */
- NULL, /* tp_setattr */
- NULL, /* tp_compare */
- NULL, /* tp_repr */
- NULL, /* tp_as_number */
- NULL, /* tp_as_sequence */
- NULL, /* tp_as_mapping */
- NULL, /* tp_hash */
- NULL, /* tp_call */
- NULL, /* tp_str */
- NULL, /* tp_getattro */
- NULL, /* tp_setattro */
- NULL, /* tp_as_buffer */
- Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */
- "libxenlight connection", /* tp_doc */
- NULL, /* tp_traverse */
- NULL, /* tp_clear */
- NULL, /* tp_richcompare */
- 0, /* tp_weaklistoffset */
- NULL, /* tp_iter */
- NULL, /* tp_iternext */
- pyxl_methods, /* tp_methods */
- NULL, /* tp_members */
- NULL, /* tp_getset */
- NULL, /* tp_base */
- NULL, /* tp_dict */
- NULL, /* tp_descr_get */
- NULL, /* tp_descr_set */
- 0, /* tp_dictoffset */
- (initproc)PyXl_init, /* tp_init */
- NULL, /* tp_alloc */
- PyXl_new, /* tp_new */
-};
-
-static PyMethodDef xl_methods[] = { { NULL } };
-
-#define _INT_CONST(m, c) PyModule_AddIntConstant(m, #c, c)
-#define _INT_CONST_LIBXL(m, c) PyModule_AddIntConstant(m, #c, LIBXL_ ## c)
-PyMODINIT_FUNC initxl(void)
-{
- PyObject *m;
-
- if (PyType_Ready(&PyXlType) < 0)
- return;
-
- m = Py_InitModule(PKG, xl_methods);
-
- if (m == NULL)
- return;
-
- xl_error_obj = PyErr_NewException(PKG ".Error", PyExc_RuntimeError, NULL);
-
- Py_INCREF(&PyXlType);
- PyModule_AddObject(m, CLS, (PyObject *)&PyXlType);
-
- Py_INCREF(xl_error_obj);
- PyModule_AddObject(m, "Error", xl_error_obj);
-
- _INT_CONST_LIBXL(m, SHUTDOWN_REASON_POWEROFF);
- _INT_CONST_LIBXL(m, SHUTDOWN_REASON_REBOOT);
- _INT_CONST_LIBXL(m, SHUTDOWN_REASON_SUSPEND);
- _INT_CONST_LIBXL(m, SHUTDOWN_REASON_CRASH);
- _INT_CONST_LIBXL(m, SHUTDOWN_REASON_WATCHDOG);
- _INT_CONST_LIBXL(m, SHUTDOWN_REASON_SOFT_RESET);
-
- genwrap__init(m);
-}
-
-
-/*
- * Local variables:
- * c-indent-level: 4
- * c-basic-offset: 4
- * End:
- */
--
2.5.3
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH] tools/python: remove broken xl binding
2015-10-06 16:57 [PATCH] tools/python: remove broken xl binding Wei Liu
@ 2015-10-06 17:13 ` Andrew Cooper
2015-10-06 19:09 ` Konrad Rzeszutek Wilk
2015-10-06 18:06 ` Konrad Rzeszutek Wilk
1 sibling, 1 reply; 10+ messages in thread
From: Andrew Cooper @ 2015-10-06 17:13 UTC (permalink / raw)
To: Wei Liu, xen-devel; +Cc: Ian Jackson, Ian Campbell
On 06/10/15 17:57, Wei Liu wrote:
> Various people say this binding doesn't compile or doesn't work. Remove
> it for the benefit of xl feature development -- so that new features
> won't need to worry about making this broken binding happy.
>
> This isn't going to expose any user visible changes because that module
> is not built by default.
>
> Signed-off-by: Wei Liu <wei.liu2@citrix.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] tools/python: remove broken xl binding
2015-10-06 17:13 ` Andrew Cooper
@ 2015-10-06 19:09 ` Konrad Rzeszutek Wilk
2015-10-08 14:40 ` Ian Campbell
0 siblings, 1 reply; 10+ messages in thread
From: Konrad Rzeszutek Wilk @ 2015-10-06 19:09 UTC (permalink / raw)
To: Andrew Cooper; +Cc: xen-devel, Zhigang Wang, Wei Liu, Ian Jackson, Ian Campbell
On Tue, Oct 06, 2015 at 06:13:04PM +0100, Andrew Cooper wrote:
> On 06/10/15 17:57, Wei Liu wrote:
> > Various people say this binding doesn't compile or doesn't work. Remove
> > it for the benefit of xl feature development -- so that new features
> > won't need to worry about making this broken binding happy.
> >
> > This isn't going to expose any user visible changes because that module
> > is not built by default.
> >
> > Signed-off-by: Wei Liu <wei.liu2@citrix.com>
>
> Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
And Zhigang mentioned to me offline that he is OK with these being
gone too.
RIP python..
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xen.org
> http://lists.xen.org/xen-devel
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] tools/python: remove broken xl binding
2015-10-06 19:09 ` Konrad Rzeszutek Wilk
@ 2015-10-08 14:40 ` Ian Campbell
2015-10-08 14:58 ` Zhigang Wang
0 siblings, 1 reply; 10+ messages in thread
From: Ian Campbell @ 2015-10-08 14:40 UTC (permalink / raw)
To: Konrad Rzeszutek Wilk, Andrew Cooper
Cc: xen-devel, Zhigang Wang, Wei Liu, Ian Jackson
On Tue, 2015-10-06 at 15:09 -0400, Konrad Rzeszutek Wilk wrote:
> On Tue, Oct 06, 2015 at 06:13:04PM +0100, Andrew Cooper wrote:
> > On 06/10/15 17:57, Wei Liu wrote:
> > > Various people say this binding doesn't compile or doesn't work.
> > > Remove
> > > it for the benefit of xl feature development -- so that new features
> > > won't need to worry about making this broken binding happy.
> > >
> > > This isn't going to expose any user visible changes because that
> > > module
> > > is not built by default.
> > >
> > > Signed-off-by: Wei Liu <wei.liu2@citrix.com>
> >
> > Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
>
> And Zhigang mentioned to me offline that he is OK with these being
> gone too.
Could we get a formal ack from one of you then please?
> RIP python..
Just the (already broken) libxl bindings. The other ones remain (for now)
and I'd be quite happy to see non-broken libxl bindings at some point.
Ian.
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] tools/python: remove broken xl binding
2015-10-08 14:40 ` Ian Campbell
@ 2015-10-08 14:58 ` Zhigang Wang
2015-10-08 15:28 ` Ian Campbell
0 siblings, 1 reply; 10+ messages in thread
From: Zhigang Wang @ 2015-10-08 14:58 UTC (permalink / raw)
To: Ian Campbell, Konrad Rzeszutek Wilk
Cc: Andrew Cooper, Wei Liu, Ian Jackson, xen-devel
On 10/08/2015 10:40 AM, Ian Campbell wrote:
> On Tue, 2015-10-06 at 15:09 -0400, Konrad Rzeszutek Wilk wrote:
>> On Tue, Oct 06, 2015 at 06:13:04PM +0100, Andrew Cooper wrote:
>>> On 06/10/15 17:57, Wei Liu wrote:
>>>> Various people say this binding doesn't compile or doesn't work.
>>>> Remove
>>>> it for the benefit of xl feature development -- so that new features
>>>> won't need to worry about making this broken binding happy.
>>>>
>>>> This isn't going to expose any user visible changes because that
>>>> module
>>>> is not built by default.
>>>>
>>>> Signed-off-by: Wei Liu <wei.liu2@citrix.com>
>>>
>>> Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
>>
>> And Zhigang mentioned to me offline that he is OK with these being
>> gone too.
>
> Could we get a formal ack from one of you then please?
I'm OK with removing libxl python bindings.
Sorry I was intended to reply to all, but actually replied to Konrad only.
Thanks,
Zhigang
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] tools/python: remove broken xl binding
2015-10-08 14:58 ` Zhigang Wang
@ 2015-10-08 15:28 ` Ian Campbell
2015-10-08 16:10 ` Zhigang Wang
0 siblings, 1 reply; 10+ messages in thread
From: Ian Campbell @ 2015-10-08 15:28 UTC (permalink / raw)
To: Zhigang Wang, Konrad Rzeszutek Wilk
Cc: Andrew Cooper, Wei Liu, Ian Jackson, xen-devel
On Thu, 2015-10-08 at 10:58 -0400, Zhigang Wang wrote:
> On 10/08/2015 10:40 AM, Ian Campbell wrote:
> > On Tue, 2015-10-06 at 15:09 -0400, Konrad Rzeszutek Wilk wrote:
> > > On Tue, Oct 06, 2015 at 06:13:04PM +0100, Andrew Cooper wrote:
> > > > On 06/10/15 17:57, Wei Liu wrote:
> > > > > Various people say this binding doesn't compile or doesn't work.
> > > > > Remove
> > > > > it for the benefit of xl feature development -- so that new
> > > > > features
> > > > > won't need to worry about making this broken binding happy.
> > > > >
> > > > > This isn't going to expose any user visible changes because that
> > > > > module
> > > > > is not built by default.
> > > > >
> > > > > Signed-off-by: Wei Liu <wei.liu2@citrix.com>
> > > >
> > > > Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
> > >
> > > And Zhigang mentioned to me offline that he is OK with these being
> > > gone too.
> >
> > Could we get a formal ack from one of you then please?
>
> I'm OK with removing libxl python bindings.
Thanks, are you okay with me translating this into
Acked-by: Zhigang Wang <zhigang.x.wang@oracle.com>
in the final commit?
>
> Sorry I was intended to reply to all, but actually replied to Konrad
> only.
>
> Thanks,
>
> Zhigang
>
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] tools/python: remove broken xl binding
2015-10-08 15:28 ` Ian Campbell
@ 2015-10-08 16:10 ` Zhigang Wang
2015-10-23 13:51 ` Ian Campbell
0 siblings, 1 reply; 10+ messages in thread
From: Zhigang Wang @ 2015-10-08 16:10 UTC (permalink / raw)
To: Ian Campbell, Konrad Rzeszutek Wilk
Cc: Andrew Cooper, Wei Liu, Ian Jackson, xen-devel
On 10/08/2015 11:28 AM, Ian Campbell wrote:
> On Thu, 2015-10-08 at 10:58 -0400, Zhigang Wang wrote:
>> On 10/08/2015 10:40 AM, Ian Campbell wrote:
>>> On Tue, 2015-10-06 at 15:09 -0400, Konrad Rzeszutek Wilk wrote:
>>>> On Tue, Oct 06, 2015 at 06:13:04PM +0100, Andrew Cooper wrote:
>>>>> On 06/10/15 17:57, Wei Liu wrote:
>>>>>> Various people say this binding doesn't compile or doesn't work.
>>>>>> Remove
>>>>>> it for the benefit of xl feature development -- so that new
>>>>>> features
>>>>>> won't need to worry about making this broken binding happy.
>>>>>>
>>>>>> This isn't going to expose any user visible changes because that
>>>>>> module
>>>>>> is not built by default.
>>>>>>
>>>>>> Signed-off-by: Wei Liu <wei.liu2@citrix.com>
>>>>>
>>>>> Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
>>>>
>>>> And Zhigang mentioned to me offline that he is OK with these being
>>>> gone too.
>>>
>>> Could we get a formal ack from one of you then please?
>>
>> I'm OK with removing libxl python bindings.
>
> Thanks, are you okay with me translating this into
>
> Acked-by: Zhigang Wang <zhigang.x.wang@oracle.com>
>
> in the final commit?
Yes.
Acked-by: Zhigang Wang <zhigang.x.wang@oracle.com>
Thanks,
Zhigang
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] tools/python: remove broken xl binding
2015-10-08 16:10 ` Zhigang Wang
@ 2015-10-23 13:51 ` Ian Campbell
0 siblings, 0 replies; 10+ messages in thread
From: Ian Campbell @ 2015-10-23 13:51 UTC (permalink / raw)
To: Zhigang Wang, Konrad Rzeszutek Wilk
Cc: Andrew Cooper, Wei Liu, Ian Jackson, xen-devel
On Thu, 2015-10-08 at 12:10 -0400, Zhigang Wang wrote:
> On 10/08/2015 11:28 AM, Ian Campbell wrote:
> > On Thu, 2015-10-08 at 10:58 -0400, Zhigang Wang wrote:
> > > On 10/08/2015 10:40 AM, Ian Campbell wrote:
> > > > On Tue, 2015-10-06 at 15:09 -0400, Konrad Rzeszutek Wilk wrote:
> > > > > On Tue, Oct 06, 2015 at 06:13:04PM +0100, Andrew Cooper wrote:
> > > > > > On 06/10/15 17:57, Wei Liu wrote:
> > > > > > > Various people say this binding doesn't compile or doesn't
> > > > > > > work.
> > > > > > > Remove
> > > > > > > it for the benefit of xl feature development -- so that new
> > > > > > > features
> > > > > > > won't need to worry about making this broken binding happy.
> > > > > > >
> > > > > > > This isn't going to expose any user visible changes because
> > > > > > > that
> > > > > > > module
> > > > > > > is not built by default.
> > > > > > >
> > > > > > > Signed-off-by: Wei Liu <wei.liu2@citrix.com>
> > > > > >
> > > > > > Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
> > > > >
> > > > > And Zhigang mentioned to me offline that he is OK with these
> > > > > being
> > > > > gone too.
> > > >
> > > > Could we get a formal ack from one of you then please?
> > >
> > > I'm OK with removing libxl python bindings.
> >
> > Thanks, are you okay with me translating this into
> >
> > Acked-by: Zhigang Wang <zhigang.x.wang@oracle.com>
> >
> > in the final commit?
>
> Yes.
>
> Acked-by: Zhigang Wang <zhigang.x.wang@oracle.com>
Thanks, acked it myself and applied.
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] tools/python: remove broken xl binding
2015-10-06 16:57 [PATCH] tools/python: remove broken xl binding Wei Liu
2015-10-06 17:13 ` Andrew Cooper
@ 2015-10-06 18:06 ` Konrad Rzeszutek Wilk
2015-10-06 18:09 ` Konrad Rzeszutek Wilk
1 sibling, 1 reply; 10+ messages in thread
From: Konrad Rzeszutek Wilk @ 2015-10-06 18:06 UTC (permalink / raw)
To: Wei Liu; +Cc: xen-devel, Ian Jackson, Ian Campbell, Andrew Cooper
On Tue, Oct 06, 2015 at 05:57:26PM +0100, Wei Liu wrote:
> Various people say this binding doesn't compile or doesn't work. Remove
> it for the benefit of xl feature development -- so that new features
> won't need to worry about making this broken binding happy.
>
> This isn't going to expose any user visible changes because that module
> is not built by default.
>
> Signed-off-by: Wei Liu <wei.liu2@citrix.com>
CC-ing Zhigang.
> ---
> tools/python/setup.py | 9 -
> tools/python/xen/lowlevel/xl/xl.c | 797 --------------------------------------
> 2 files changed, 806 deletions(-)
> delete mode 100644 tools/python/xen/lowlevel/xl/xl.c
>
> diff --git a/tools/python/setup.py b/tools/python/setup.py
> index 5bf81be..fdba866 100644
> --- a/tools/python/setup.py
> +++ b/tools/python/setup.py
> @@ -27,17 +27,8 @@ xs = Extension("xs",
> depends = [ PATH_XENSTORE + "/libxenstore.so" ],
> sources = [ "xen/lowlevel/xs/xs.c" ])
>
> -xl = Extension("xl",
> - extra_compile_args = extra_compile_args,
> - include_dirs = [ PATH_XEN, PATH_LIBXL, PATH_LIBXC + "/include", "xen/lowlevel/xl" ],
> - library_dirs = [ PATH_LIBXL ],
> - libraries = [ "xenlight" ],
> - depends = [ PATH_LIBXL + "/libxenlight.so" ],
> - sources = [ "xen/lowlevel/xl/xl.c", "xen/lowlevel/xl/_pyxl_types.c" ])
> -
> plat = os.uname()[0]
> modules = [ xc, xs ]
> -#modules.extend([ xl ])
>
> setup(name = 'xen',
> version = '3.0',
> diff --git a/tools/python/xen/lowlevel/xl/xl.c b/tools/python/xen/lowlevel/xl/xl.c
> deleted file mode 100644
> index 9b33731..0000000
> --- a/tools/python/xen/lowlevel/xl/xl.c
> +++ /dev/null
> @@ -1,797 +0,0 @@
> -/******************************************************************************
> - * xl.c
> - *
> - * Copyright (c) 2010 Citrix Ltd.
> - * Author: Gianni Tedesco
> - *
> - * 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, see <http://www.gnu.org/licenses/>.
> - *
> - */
> -
> -#include <Python.h>
> -#include <stdio.h>
> -#include <assert.h>
> -#include <stdlib.h>
> -#include <string.h>
> -#include <unistd.h>
> -#include <time.h>
> -#include <getopt.h>
> -#include <sys/types.h>
> -#include <sys/stat.h>
> -#include <sys/time.h>
> -#include <fcntl.h>
> -#include <signal.h>
> -#include <sys/socket.h>
> -#include <sys/select.h>
> -#include <arpa/inet.h>
> -#include <ctype.h>
> -#include <inttypes.h>
> -
> -#include <libxl.h>
> -#include <libxl_utils.h>
> -#include <libxlutil.h>
> -
> -#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
> -
> -/* Needed for Python versions earlier than 2.3. */
> -#ifndef PyMODINIT_FUNC
> -#define PyMODINIT_FUNC DL_EXPORT(void)
> -#endif
> -
> -#define CLS "ctx"
> -
> -#if PY_MAJOR_VERSION < 2 || (PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION < 5)
> -#define Py_ssize_t int
> -#endif
> -
> -static PyObject *xl_error_obj;
> -
> -int genwrap__obj_init(PyObject *self, PyObject *args, PyObject *kwds)
> -{
> - PyObject *key, *value;
> - Py_ssize_t pos = 0;
> -
> - if ( NULL == kwds )
> - return 0;
> -
> - while (PyDict_Next(kwds, &pos, &key, &value)) {
> - if ( PyObject_SetAttr(self, key, value) < 0 )
> - return -1;
> - }
> -
> - return 0;
> -}
> -
> -int genwrap__string_set(PyObject *v, char **str)
> -{
> - char *tmp;
> - if ( NULL == v || Py_None == v ) {
> - free(*str);
> - *str = NULL;
> - return 0;
> - }
> - if ( !PyString_Check(v) ) {
> - PyErr_SetString(PyExc_TypeError, "Attribute expected string");
> - return -1;
> - }
> - tmp = strdup(PyString_AsString(v));
> - if ( NULL == tmp ) {
> - PyErr_SetString(PyExc_MemoryError, "Allocating string attribute");
> - return -1;
> - }
> - free(*str);
> - *str = tmp;
> - return 0;
> -}
> -
> -PyObject *genwrap__string_get(char **str)
> -{
> - if ( NULL == *str ) {
> - Py_INCREF(Py_None);
> - return Py_None;
> - }
> - return PyString_FromString(*str);
> -}
> -
> -PyObject *genwrap__ull_get(unsigned long long val)
> -{
> - return PyLong_FromUnsignedLongLong(val);
> -}
> -
> -int genwrap__ull_set(PyObject *v, unsigned long long *val, unsigned long long mask)
> -{
> - unsigned long long tmp;
> - if ( NULL == v ) {
> - *val = 0;
> - return 0;
> - }
> - if ( PyLong_Check(v) ) {
> - tmp = PyLong_AsUnsignedLongLong(v);
> - }else if ( PyInt_Check(v) ) {
> - tmp = (unsigned long long)PyInt_AsLong(v);
> - }else{
> - PyErr_SetString(PyExc_TypeError, "Attribute expected int or long");
> - return -1;
> - }
> - if ( tmp & ~mask ) {
> - PyErr_SetString(PyExc_ValueError, "Integer overflow");
> - return -1;
> - }
> - *val = tmp;
> - return 0;
> -}
> -
> -PyObject *genwrap__ll_get(long long val)
> -{
> - return PyLong_FromLongLong(val);
> -}
> -
> -int genwrap__ll_set(PyObject *v, long long *val, long long mask)
> -{
> - long long tmp;
> - if ( NULL == v ) {
> - *val = 0;
> - return 0;
> - }
> - if ( PyLong_Check(v) ) {
> - tmp = PyLong_AsLongLong(v);
> - }else{
> - tmp = (long long)PyInt_AsLong(v);
> - }
> - if ( tmp & ~mask ) {
> - PyErr_SetString(PyExc_ValueError, "Integer overflow");
> - return -1;
> - }
> - *val = tmp;
> - return 0;
> -}
> -
> -PyObject *genwrap__defbool_get(libxl_defbool *db)
> -{
> - PyObject *ret;
> - ret = libxl_defbool_val(*db) ? Py_True : Py_False;
> - Py_INCREF(ret);
> - return ret;
> -}
> -
> -int genwrap__defbool_set(PyObject *v, libxl_defbool *db)
> -{
> - bool val = !(NULL == v || Py_None == v || Py_False == v);
> - libxl_defbool_set(db, val);
> - return 0;
> -}
> -
> -static int fixed_bytearray_set(PyObject *v, uint8_t *ptr, size_t len)
> -{
> - char *tmp;
> - size_t sz;
> -
> - if ( NULL == v ) {
> - memset(ptr, 0, len);
> - return 0;
> - }
> -
> -#ifdef PyByteArray_Check
> - if ( PyByteArray_Check(v) ) {
> - sz = PyByteArray_Size(v);
> - tmp = PyByteArray_AsString(v);
> - }else
> -#endif
> - if ( PyString_Check(v) ) {
> - Py_ssize_t ssz;
> - if ( PyString_AsStringAndSize(v, &tmp, &ssz) )
> - return -1;
> - if ( ssz < 0 )
> - tmp = NULL;
> - sz = ssz;
> - }else{
> - PyErr_SetString(PyExc_TypeError, "Attribute expected bytearray or string");
> - return -1;
> - }
> -
> - if ( NULL == tmp ) {
> - memset(ptr, 0, len);
> - return 0;
> - }
> - if ( sz != len ) {
> - PyErr_SetString(PyExc_ValueError,
> - (sz < len) ? "Buffer underflow" : "Buffer overflow");
> - return -1;
> - }
> -
> - memcpy(ptr, tmp, sz);
> - return 0;
> -}
> -
> -static PyObject *fixed_bytearray_get(const uint8_t *ptr, size_t len)
> -{
> -#ifdef PyByteArray_Check
> - return PyByteArray_FromStringAndSize((const char *)ptr, len);
> -#else
> - return PyString_FromStringAndSize((const char *)ptr, len);
> -#endif
> -}
> -
> -#include "_pyxl_types.h"
> -
> -int attrib__libxl_cpuid_policy_list_set(PyObject *v, libxl_cpuid_policy_list *pptr)
> -{
> - PyErr_SetString(PyExc_NotImplementedError, "Setting cpuid_policy_list");
> - return -1;
> -}
> -
> -int attrib__libxl_bitmap_set(PyObject *v, libxl_bitmap *pptr)
> -{
> - int i;
> - long cpu;
> -
> - for (i = 0; i < PyList_Size(v); i++) {
> - cpu = PyInt_AsLong(PyList_GetItem(v, i));
> - libxl_bitmap_set(pptr, cpu);
> - }
> - return 0;
> -}
> -
> -int attrib__libxl_hwcap_set(PyObject *v, libxl_hwcap *pptr)
> -{
> - PyErr_SetString(PyExc_NotImplementedError, "Setting hwcap");
> - return -1;
> -}
> -
> -int attrib__libxl_key_value_list_set(PyObject *v, libxl_key_value_list *pptr)
> -{
> - if ( *pptr ) {
> - libxl_key_value_list_dispose(pptr);
> - *pptr = NULL;
> - }
> - if ( v == Py_None )
> - return 0;
> - return -1;
> -}
> -
> -int attrib__libxl_mac_set(PyObject *v, libxl_mac *pptr)
> -{
> - return fixed_bytearray_set(v, *pptr, 6);
> -}
> -
> -int attrib__libxl_string_list_set(PyObject *v, libxl_string_list *pptr)
> -{
> - PyErr_SetString(PyExc_NotImplementedError, "Setting string_list");
> - return -1;
> -}
> -
> -int attrib__libxl_uuid_set(PyObject *v, libxl_uuid *pptr)
> -{
> - return fixed_bytearray_set(v, libxl_uuid_bytearray(pptr), 16);
> -}
> -
> -int attrib__libxl_domid_set(PyObject *v, libxl_domid *domid) {
> - *domid = PyInt_AsLong(v);
> - return 0;
> -}
> -
> -int attrib__libxl_devid_set(PyObject *v, libxl_devid *devid) {
> - *devid = PyInt_AsLong(v);
> - return 0;
> -}
> -
> -int attrib__struct_in_addr_set(PyObject *v, struct in_addr *pptr)
> -{
> - PyErr_SetString(PyExc_NotImplementedError, "Setting in_addr");
> - return -1;
> -}
> -
> -PyObject *attrib__libxl_cpuid_policy_list_get(libxl_cpuid_policy_list *pptr)
> -{
> - PyErr_SetString(PyExc_NotImplementedError, "Getting cpuid_policy_list");
> - return NULL;
> -}
> -
> -PyObject *attrib__libxl_bitmap_get(libxl_bitmap *pptr)
> -{
> - PyObject *cpulist = NULL;
> - int i;
> -
> - cpulist = PyList_New(0);
> - libxl_for_each_bit(i, *pptr) {
> - if ( libxl_bitmap_test(pptr, i) ) {
> - PyObject* pyint = PyInt_FromLong(i);
> -
> - PyList_Append(cpulist, pyint);
> - Py_DECREF(pyint);
> - }
> - }
> - return cpulist;
> -}
> -
> -PyObject *attrib__libxl_hwcap_get(libxl_hwcap *pptr)
> -{
> - PyErr_SetString(PyExc_NotImplementedError, "Getting hwcap");
> - return NULL;
> -}
> -
> -PyObject *attrib__libxl_key_value_list_get(libxl_key_value_list *pptr)
> -{
> - PyErr_SetString(PyExc_NotImplementedError, "Getting key_value_list");
> - return NULL;
> -}
> -
> -PyObject *attrib__libxl_mac_get(libxl_mac *pptr)
> -{
> - return fixed_bytearray_get(*pptr, 6);
> -}
> -
> -PyObject *attrib__libxl_string_list_get(libxl_string_list *pptr)
> -{
> - PyErr_SetString(PyExc_NotImplementedError, "Getting string_list");
> - return NULL;
> -}
> -
> -PyObject *attrib__libxl_uuid_get(libxl_uuid *pptr)
> -{
> - return fixed_bytearray_get(libxl_uuid_bytearray(pptr), 16);
> -}
> -
> -PyObject *attrib__libxl_domid_get(libxl_domid *domid) {
> - return PyInt_FromLong(*domid);
> -}
> -
> -PyObject *attrib__libxl_devid_get(libxl_devid *devid) {
> - return PyInt_FromLong(*devid);
> -}
> -
> -PyObject *attrib__struct_in_addr_get(struct in_addr *pptr)
> -{
> - PyErr_SetString(PyExc_NotImplementedError, "Getting in_addr");
> - return NULL;
> -}
> -
> -typedef struct {
> - PyObject_HEAD;
> - libxl_ctx *ctx;
> - xentoollog_logger_stdiostream *logger;
> - xentoollog_level minmsglevel;
> -} XlObject;
> -
> -static PyObject *pyxl_list_domains(XlObject *self)
> -{
> - libxl_dominfo *cur, *info;
> - PyObject *list;
> - int nr_dom, i;
> -
> - info = libxl_list_domain(self->ctx, &nr_dom);
> - if ( NULL == info )
> - return PyList_New(0);
> -
> - list = PyList_New(nr_dom);
> - if ( NULL == list )
> - goto err_mem;
> -
> - for(i = 0, cur = info; i < nr_dom; i++, cur++) {
> - Py_dominfo *di;
> - di = Pydominfo_New();
> - if ( NULL == di )
> - goto err_mem;
> - memcpy(&di->obj, cur, sizeof(di->obj));
> - /* SetItem steals a reference */
> - PyList_SetItem(list, i, (PyObject *)di);
> - }
> -
> - free(info);
> - return list;
> -err_mem:
> - Py_DECREF(list);
> - PyErr_SetString(PyExc_MemoryError, "Allocating domain list");
> - return NULL;
> -}
> -
> -static PyObject *pyxl_domid_to_name(XlObject *self, PyObject *args)
> -{
> - char *domname;
> - int domid;
> - PyObject *ret = Py_None;
> -
> - if ( !PyArg_ParseTuple(args, "i", &domid) )
> - return NULL;
> -
> - domname = libxl_domid_to_name(self->ctx, domid);
> - if (domname)
> - ret = PyString_FromString(domname);
> - else
> - Py_INCREF(Py_None);
> - free(domname);
> -
> - return ret;
> -}
> -
> -static PyObject *pyxl_domain_shutdown(XlObject *self, PyObject *args)
> -{
> - int domid;
> - if ( !PyArg_ParseTuple(args, "i", &domid) )
> - return NULL;
> - if ( libxl_domain_shutdown(self->ctx, domid) ) {
> - PyErr_SetString(xl_error_obj, "cannot shutdown domain");
> - return NULL;
> - }
> - Py_INCREF(Py_None);
> - return Py_None;
> -}
> -
> -static PyObject *pyxl_domain_reboot(XlObject *self, PyObject *args)
> -{
> - int domid;
> - if ( !PyArg_ParseTuple(args, "i", &domid) )
> - return NULL;
> - if ( libxl_domain_reboot(self->ctx, domid) ) {
> - PyErr_SetString(xl_error_obj, "cannot reboot domain");
> - return NULL;
> - }
> - Py_INCREF(Py_None);
> - return Py_None;
> -}
> -
> -static PyObject *pyxl_domain_destroy(XlObject *self, PyObject *args)
> -{
> - int domid;
> - if ( !PyArg_ParseTuple(args, "i", &domid) )
> - return NULL;
> - if ( libxl_domain_destroy(self->ctx, domid, 0) ) {
> - PyErr_SetString(xl_error_obj, "cannot destroy domain");
> - return NULL;
> - }
> - Py_INCREF(Py_None);
> - return Py_None;
> -}
> -
> -static PyObject *pyxl_domain_pause(XlObject *self, PyObject *args)
> -{
> - int domid;
> - if ( !PyArg_ParseTuple(args, "i", &domid) )
> - return NULL;
> - if ( libxl_domain_pause(self->ctx, domid) ) {
> - PyErr_SetString(xl_error_obj, "cannot pause domain");
> - return NULL;
> - }
> - Py_INCREF(Py_None);
> - return Py_None;
> -}
> -
> -static PyObject *pyxl_domain_unpause(XlObject *self, PyObject *args)
> -{
> - int domid;
> - if ( !PyArg_ParseTuple(args, "i", &domid) )
> - return NULL;
> - if ( libxl_domain_unpause(self->ctx, domid) ) {
> - PyErr_SetString(xl_error_obj, "cannot unpause domain");
> - return NULL;
> - }
> - Py_INCREF(Py_None);
> - return Py_None;
> -}
> -
> -static PyObject *pyxl_domain_rename(XlObject *self, PyObject *args)
> -{
> - char *old_name = NULL, *new_name;
> - int domid;
> - if ( !PyArg_ParseTuple(args, "is|s", &domid, &new_name, &old_name) )
> - return NULL;
> - if ( libxl_domain_rename(self->ctx, domid, old_name, new_name) ) {
> - PyErr_SetString(xl_error_obj, "cannot rename domain");
> - return NULL;
> - }
> - Py_INCREF(Py_None);
> - return Py_None;
> -}
> -
> -static PyObject *pyxl_pci_add(XlObject *self, PyObject *args)
> -{
> - Py_device_pci *pci;
> - PyObject *obj;
> - int domid;
> - if ( !PyArg_ParseTuple(args, "iO", &domid, &obj) )
> - return NULL;
> - if ( !Pydevice_pci_Check(obj) ) {
> - PyErr_SetString(PyExc_TypeError, "Xxpected xl.device_pci");
> - return NULL;
> - }
> - pci = (Py_device_pci *)obj;
> - if ( libxl_device_pci_add(self->ctx, domid, &pci->obj, 0) ) {
> - PyErr_SetString(xl_error_obj, "cannot add pci device");
> - return NULL;
> - }
> - Py_INCREF(Py_None);
> - return Py_None;
> -}
> -
> -static PyObject *pyxl_pci_del(XlObject *self, PyObject *args)
> -{
> - Py_device_pci *pci;
> - PyObject *obj;
> - int domid, force = 0;
> -
> - if ( !PyArg_ParseTuple(args, "iO|i", &domid, &obj, &force) )
> - return NULL;
> - if ( !Pydevice_pci_Check(obj) ) {
> - PyErr_SetString(PyExc_TypeError, "Xxpected xl.device_pci");
> - return NULL;
> - }
> - pci = (Py_device_pci *)obj;
> - if ( force ) {
> - if ( libxl_device_pci_destroy(self->ctx, domid, &pci->obj, 0) ) {
> - PyErr_SetString(xl_error_obj, "cannot remove pci device");
> - return NULL;
> - }
> - } else {
> - if ( libxl_device_pci_remove(self->ctx, domid, &pci->obj, 0) ) {
> - PyErr_SetString(xl_error_obj, "cannot remove pci device");
> - return NULL;
> - }
> - }
> - Py_INCREF(Py_None);
> - return Py_None;
> -}
> -
> -static PyObject *pyxl_pci_parse(XlObject *self, PyObject *args)
> -{
> - Py_device_pci *pci;
> - char *str;
> -
> - if ( !PyArg_ParseTuple(args, "s", &str) )
> - return NULL;
> -
> - pci = Pydevice_pci_New();
> - if ( NULL == pci ) {
> - PyErr_SetString(PyExc_MemoryError, "Allocating domain list");
> - return NULL;
> - }
> -
> - if ( xlu_pci_parse_bdf(NULL, &pci->obj, str) ) {
> - PyErr_SetString(xl_error_obj, "cannot parse pci device spec (BDF)");
> - Py_DECREF(pci);
> - return NULL;
> - }
> -
> - return (PyObject *)pci;
> -}
> -
> -static PyObject *pyxl_pci_assignable_list(XlObject *self, PyObject *args)
> -{
> - libxl_device_pci *dev;
> - PyObject *list;
> - int nr_dev, i;
> -
> - dev = libxl_device_pci_assignable_list(self->ctx, &nr_dev);
> - if ( dev == NULL ) {
> - PyErr_SetString(xl_error_obj, "Cannot list assignable devices");
> - return NULL;
> - }
> -
> - list = PyList_New(nr_dev);
> - if ( NULL == list )
> - return NULL;
> -
> - for(i = 0; i < nr_dev; i++) {
> - Py_device_pci *pd;
> - pd = Pydevice_pci_New();
> - if ( NULL == pd )
> - goto err_mem;
> - memcpy(&pd->obj, &dev[i], sizeof(pd->obj));
> - /* SetItem steals a reference */
> - PyList_SetItem(list, i, (PyObject *)pd);
> - }
> -
> - free(dev);
> - return list;
> -err_mem:
> - Py_DECREF(list);
> - PyErr_SetString(PyExc_MemoryError, "Allocating PCI device list");
> - return NULL;
> -}
> -
> -static PyObject *pyxl_pci_list(XlObject *self, PyObject *args)
> -{
> - libxl_device_pci *dev;
> - PyObject *list;
> - int nr_dev, i, domid;
> -
> - if ( !PyArg_ParseTuple(args, "i", &domid) )
> - return NULL;
> -
> - dev = libxl_device_pci_list(self->ctx, domid, &nr_dev);
> - if ( dev == NULL ) {
> - PyErr_SetString(xl_error_obj, "Cannot list assignable devices");
> - return NULL;
> - }
> -
> - list = PyList_New(nr_dev);
> - if ( NULL == list )
> - return NULL;
> -
> - for(i = 0; i < nr_dev; i++) {
> - Py_device_pci *pd;
> - pd = Pydevice_pci_New();
> - if ( NULL == pd )
> - goto err_mem;
> - memcpy(&pd->obj, &dev[i], sizeof(pd->obj));
> - /* SetItem steals a reference */
> - PyList_SetItem(list, i, (PyObject *)pd);
> - }
> -
> - free(dev);
> - return list;
> -err_mem:
> - Py_DECREF(list);
> - PyErr_SetString(PyExc_MemoryError, "Allocating PCI device list");
> - return NULL;
> -}
> -
> -static PyMethodDef pyxl_methods[] = {
> - {"list_domains", (PyCFunction)pyxl_list_domains, METH_NOARGS,
> - "List domains"},
> - {"domid_to_name", (PyCFunction)pyxl_domid_to_name, METH_VARARGS,
> - "Retrieve name from domain-id"},
> - {"domain_shutdown", (PyCFunction)pyxl_domain_shutdown, METH_VARARGS,
> - "Shutdown a domain"},
> - {"domain_reboot", (PyCFunction)pyxl_domain_reboot, METH_VARARGS,
> - "Reboot a domain"},
> - {"domain_destroy", (PyCFunction)pyxl_domain_destroy, METH_VARARGS,
> - "Destroy a domain"},
> - {"domain_pause", (PyCFunction)pyxl_domain_pause, METH_VARARGS,
> - "Pause a domain"},
> - {"domain_unpause", (PyCFunction)pyxl_domain_unpause, METH_VARARGS,
> - "Unpause a domain"},
> - {"domain_rename", (PyCFunction)pyxl_domain_rename, METH_VARARGS,
> - "Rename a domain"},
> - {"device_pci_add", (PyCFunction)pyxl_pci_add, METH_VARARGS,
> - "Insert a pass-through PCI device"},
> - {"device_pci_del", (PyCFunction)pyxl_pci_del, METH_VARARGS,
> - "Remove a pass-through PCI device"},
> - {"device_pci_parse_bdf", (PyCFunction)pyxl_pci_parse, METH_VARARGS,
> - "Parse pass-through PCI device spec (BDF)"},
> - {"device_pci_list", (PyCFunction)pyxl_pci_list, METH_VARARGS,
> - "List PCI devices assigned to a domain"},
> - {"device_pci_assignable_list",
> - (PyCFunction)pyxl_pci_assignable_list, METH_NOARGS,
> - "List assignable PCI devices"},
> - { NULL, NULL, 0, NULL }
> -};
> -
> -static PyObject *PyXl_getattr(PyObject *obj, char *name)
> -{
> - return Py_FindMethod(pyxl_methods, obj, name);
> -}
> -
> -static PyObject *PyXl_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
> -{
> - XlObject *self = (XlObject *)type->tp_alloc(type, 0);
> -
> - if (self == NULL)
> - return NULL;
> -
> - self->ctx = NULL;
> - self->logger = NULL;
> - self->minmsglevel = XTL_PROGRESS;
> -
> - return (PyObject *)self;
> -}
> -
> -static int
> -PyXl_init(XlObject *self, PyObject *args, PyObject *kwds)
> -{
> - self->logger = xtl_createlogger_stdiostream(stderr, self->minmsglevel, 0);
> - if (!self->logger) {
> - PyErr_SetString(xl_error_obj, "cannot init xl logger");
> - return -1;
> - }
> -
> - if ( libxl_ctx_alloc(&self->ctx, LIBXL_VERSION, 0,
> - (xentoollog_logger*)self->logger) ) {
> - PyErr_SetString(xl_error_obj, "cannot init xl context");
> - return -1;
> - }
> -
> - return 0;
> -}
> -
> -static void PyXl_dealloc(XlObject *self)
> -{
> - libxl_ctx_free(self->ctx);
> - if ( self->logger )
> - xtl_logger_destroy((xentoollog_logger*)self->logger);
> -
> - self->ob_type->tp_free((PyObject *)self);
> -}
> -
> -static PyTypeObject PyXlType = {
> - PyObject_HEAD_INIT(NULL)
> - 0,
> - PKG "." CLS,
> - sizeof(XlObject),
> - 0,
> - (destructor)PyXl_dealloc, /* tp_dealloc */
> - NULL, /* tp_print */
> - PyXl_getattr, /* tp_getattr */
> - NULL, /* tp_setattr */
> - NULL, /* tp_compare */
> - NULL, /* tp_repr */
> - NULL, /* tp_as_number */
> - NULL, /* tp_as_sequence */
> - NULL, /* tp_as_mapping */
> - NULL, /* tp_hash */
> - NULL, /* tp_call */
> - NULL, /* tp_str */
> - NULL, /* tp_getattro */
> - NULL, /* tp_setattro */
> - NULL, /* tp_as_buffer */
> - Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */
> - "libxenlight connection", /* tp_doc */
> - NULL, /* tp_traverse */
> - NULL, /* tp_clear */
> - NULL, /* tp_richcompare */
> - 0, /* tp_weaklistoffset */
> - NULL, /* tp_iter */
> - NULL, /* tp_iternext */
> - pyxl_methods, /* tp_methods */
> - NULL, /* tp_members */
> - NULL, /* tp_getset */
> - NULL, /* tp_base */
> - NULL, /* tp_dict */
> - NULL, /* tp_descr_get */
> - NULL, /* tp_descr_set */
> - 0, /* tp_dictoffset */
> - (initproc)PyXl_init, /* tp_init */
> - NULL, /* tp_alloc */
> - PyXl_new, /* tp_new */
> -};
> -
> -static PyMethodDef xl_methods[] = { { NULL } };
> -
> -#define _INT_CONST(m, c) PyModule_AddIntConstant(m, #c, c)
> -#define _INT_CONST_LIBXL(m, c) PyModule_AddIntConstant(m, #c, LIBXL_ ## c)
> -PyMODINIT_FUNC initxl(void)
> -{
> - PyObject *m;
> -
> - if (PyType_Ready(&PyXlType) < 0)
> - return;
> -
> - m = Py_InitModule(PKG, xl_methods);
> -
> - if (m == NULL)
> - return;
> -
> - xl_error_obj = PyErr_NewException(PKG ".Error", PyExc_RuntimeError, NULL);
> -
> - Py_INCREF(&PyXlType);
> - PyModule_AddObject(m, CLS, (PyObject *)&PyXlType);
> -
> - Py_INCREF(xl_error_obj);
> - PyModule_AddObject(m, "Error", xl_error_obj);
> -
> - _INT_CONST_LIBXL(m, SHUTDOWN_REASON_POWEROFF);
> - _INT_CONST_LIBXL(m, SHUTDOWN_REASON_REBOOT);
> - _INT_CONST_LIBXL(m, SHUTDOWN_REASON_SUSPEND);
> - _INT_CONST_LIBXL(m, SHUTDOWN_REASON_CRASH);
> - _INT_CONST_LIBXL(m, SHUTDOWN_REASON_WATCHDOG);
> - _INT_CONST_LIBXL(m, SHUTDOWN_REASON_SOFT_RESET);
> -
> - genwrap__init(m);
> -}
> -
> -
> -/*
> - * Local variables:
> - * c-indent-level: 4
> - * c-basic-offset: 4
> - * End:
> - */
> --
> 2.5.3
>
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xen.org
> http://lists.xen.org/xen-devel
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] tools/python: remove broken xl binding
2015-10-06 18:06 ` Konrad Rzeszutek Wilk
@ 2015-10-06 18:09 ` Konrad Rzeszutek Wilk
0 siblings, 0 replies; 10+ messages in thread
From: Konrad Rzeszutek Wilk @ 2015-10-06 18:09 UTC (permalink / raw)
To: Wei Liu, zhigang.x.wang
Cc: xen-devel, Ian Jackson, Ian Campbell, Andrew Cooper
On Tue, Oct 06, 2015 at 02:06:57PM -0400, Konrad Rzeszutek Wilk wrote:
> On Tue, Oct 06, 2015 at 05:57:26PM +0100, Wei Liu wrote:
> > Various people say this binding doesn't compile or doesn't work. Remove
> > it for the benefit of xl feature development -- so that new features
> > won't need to worry about making this broken binding happy.
> >
> > This isn't going to expose any user visible changes because that module
> > is not built by default.
> >
> > Signed-off-by: Wei Liu <wei.liu2@citrix.com>
>
> CC-ing Zhigang.
Actually doing it.
>
> > ---
> > tools/python/setup.py | 9 -
> > tools/python/xen/lowlevel/xl/xl.c | 797 --------------------------------------
> > 2 files changed, 806 deletions(-)
> > delete mode 100644 tools/python/xen/lowlevel/xl/xl.c
> >
> > diff --git a/tools/python/setup.py b/tools/python/setup.py
> > index 5bf81be..fdba866 100644
> > --- a/tools/python/setup.py
> > +++ b/tools/python/setup.py
> > @@ -27,17 +27,8 @@ xs = Extension("xs",
> > depends = [ PATH_XENSTORE + "/libxenstore.so" ],
> > sources = [ "xen/lowlevel/xs/xs.c" ])
> >
> > -xl = Extension("xl",
> > - extra_compile_args = extra_compile_args,
> > - include_dirs = [ PATH_XEN, PATH_LIBXL, PATH_LIBXC + "/include", "xen/lowlevel/xl" ],
> > - library_dirs = [ PATH_LIBXL ],
> > - libraries = [ "xenlight" ],
> > - depends = [ PATH_LIBXL + "/libxenlight.so" ],
> > - sources = [ "xen/lowlevel/xl/xl.c", "xen/lowlevel/xl/_pyxl_types.c" ])
> > -
> > plat = os.uname()[0]
> > modules = [ xc, xs ]
> > -#modules.extend([ xl ])
> >
> > setup(name = 'xen',
> > version = '3.0',
> > diff --git a/tools/python/xen/lowlevel/xl/xl.c b/tools/python/xen/lowlevel/xl/xl.c
> > deleted file mode 100644
> > index 9b33731..0000000
> > --- a/tools/python/xen/lowlevel/xl/xl.c
> > +++ /dev/null
> > @@ -1,797 +0,0 @@
> > -/******************************************************************************
> > - * xl.c
> > - *
> > - * Copyright (c) 2010 Citrix Ltd.
> > - * Author: Gianni Tedesco
> > - *
> > - * 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, see <http://www.gnu.org/licenses/>.
> > - *
> > - */
> > -
> > -#include <Python.h>
> > -#include <stdio.h>
> > -#include <assert.h>
> > -#include <stdlib.h>
> > -#include <string.h>
> > -#include <unistd.h>
> > -#include <time.h>
> > -#include <getopt.h>
> > -#include <sys/types.h>
> > -#include <sys/stat.h>
> > -#include <sys/time.h>
> > -#include <fcntl.h>
> > -#include <signal.h>
> > -#include <sys/socket.h>
> > -#include <sys/select.h>
> > -#include <arpa/inet.h>
> > -#include <ctype.h>
> > -#include <inttypes.h>
> > -
> > -#include <libxl.h>
> > -#include <libxl_utils.h>
> > -#include <libxlutil.h>
> > -
> > -#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
> > -
> > -/* Needed for Python versions earlier than 2.3. */
> > -#ifndef PyMODINIT_FUNC
> > -#define PyMODINIT_FUNC DL_EXPORT(void)
> > -#endif
> > -
> > -#define CLS "ctx"
> > -
> > -#if PY_MAJOR_VERSION < 2 || (PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION < 5)
> > -#define Py_ssize_t int
> > -#endif
> > -
> > -static PyObject *xl_error_obj;
> > -
> > -int genwrap__obj_init(PyObject *self, PyObject *args, PyObject *kwds)
> > -{
> > - PyObject *key, *value;
> > - Py_ssize_t pos = 0;
> > -
> > - if ( NULL == kwds )
> > - return 0;
> > -
> > - while (PyDict_Next(kwds, &pos, &key, &value)) {
> > - if ( PyObject_SetAttr(self, key, value) < 0 )
> > - return -1;
> > - }
> > -
> > - return 0;
> > -}
> > -
> > -int genwrap__string_set(PyObject *v, char **str)
> > -{
> > - char *tmp;
> > - if ( NULL == v || Py_None == v ) {
> > - free(*str);
> > - *str = NULL;
> > - return 0;
> > - }
> > - if ( !PyString_Check(v) ) {
> > - PyErr_SetString(PyExc_TypeError, "Attribute expected string");
> > - return -1;
> > - }
> > - tmp = strdup(PyString_AsString(v));
> > - if ( NULL == tmp ) {
> > - PyErr_SetString(PyExc_MemoryError, "Allocating string attribute");
> > - return -1;
> > - }
> > - free(*str);
> > - *str = tmp;
> > - return 0;
> > -}
> > -
> > -PyObject *genwrap__string_get(char **str)
> > -{
> > - if ( NULL == *str ) {
> > - Py_INCREF(Py_None);
> > - return Py_None;
> > - }
> > - return PyString_FromString(*str);
> > -}
> > -
> > -PyObject *genwrap__ull_get(unsigned long long val)
> > -{
> > - return PyLong_FromUnsignedLongLong(val);
> > -}
> > -
> > -int genwrap__ull_set(PyObject *v, unsigned long long *val, unsigned long long mask)
> > -{
> > - unsigned long long tmp;
> > - if ( NULL == v ) {
> > - *val = 0;
> > - return 0;
> > - }
> > - if ( PyLong_Check(v) ) {
> > - tmp = PyLong_AsUnsignedLongLong(v);
> > - }else if ( PyInt_Check(v) ) {
> > - tmp = (unsigned long long)PyInt_AsLong(v);
> > - }else{
> > - PyErr_SetString(PyExc_TypeError, "Attribute expected int or long");
> > - return -1;
> > - }
> > - if ( tmp & ~mask ) {
> > - PyErr_SetString(PyExc_ValueError, "Integer overflow");
> > - return -1;
> > - }
> > - *val = tmp;
> > - return 0;
> > -}
> > -
> > -PyObject *genwrap__ll_get(long long val)
> > -{
> > - return PyLong_FromLongLong(val);
> > -}
> > -
> > -int genwrap__ll_set(PyObject *v, long long *val, long long mask)
> > -{
> > - long long tmp;
> > - if ( NULL == v ) {
> > - *val = 0;
> > - return 0;
> > - }
> > - if ( PyLong_Check(v) ) {
> > - tmp = PyLong_AsLongLong(v);
> > - }else{
> > - tmp = (long long)PyInt_AsLong(v);
> > - }
> > - if ( tmp & ~mask ) {
> > - PyErr_SetString(PyExc_ValueError, "Integer overflow");
> > - return -1;
> > - }
> > - *val = tmp;
> > - return 0;
> > -}
> > -
> > -PyObject *genwrap__defbool_get(libxl_defbool *db)
> > -{
> > - PyObject *ret;
> > - ret = libxl_defbool_val(*db) ? Py_True : Py_False;
> > - Py_INCREF(ret);
> > - return ret;
> > -}
> > -
> > -int genwrap__defbool_set(PyObject *v, libxl_defbool *db)
> > -{
> > - bool val = !(NULL == v || Py_None == v || Py_False == v);
> > - libxl_defbool_set(db, val);
> > - return 0;
> > -}
> > -
> > -static int fixed_bytearray_set(PyObject *v, uint8_t *ptr, size_t len)
> > -{
> > - char *tmp;
> > - size_t sz;
> > -
> > - if ( NULL == v ) {
> > - memset(ptr, 0, len);
> > - return 0;
> > - }
> > -
> > -#ifdef PyByteArray_Check
> > - if ( PyByteArray_Check(v) ) {
> > - sz = PyByteArray_Size(v);
> > - tmp = PyByteArray_AsString(v);
> > - }else
> > -#endif
> > - if ( PyString_Check(v) ) {
> > - Py_ssize_t ssz;
> > - if ( PyString_AsStringAndSize(v, &tmp, &ssz) )
> > - return -1;
> > - if ( ssz < 0 )
> > - tmp = NULL;
> > - sz = ssz;
> > - }else{
> > - PyErr_SetString(PyExc_TypeError, "Attribute expected bytearray or string");
> > - return -1;
> > - }
> > -
> > - if ( NULL == tmp ) {
> > - memset(ptr, 0, len);
> > - return 0;
> > - }
> > - if ( sz != len ) {
> > - PyErr_SetString(PyExc_ValueError,
> > - (sz < len) ? "Buffer underflow" : "Buffer overflow");
> > - return -1;
> > - }
> > -
> > - memcpy(ptr, tmp, sz);
> > - return 0;
> > -}
> > -
> > -static PyObject *fixed_bytearray_get(const uint8_t *ptr, size_t len)
> > -{
> > -#ifdef PyByteArray_Check
> > - return PyByteArray_FromStringAndSize((const char *)ptr, len);
> > -#else
> > - return PyString_FromStringAndSize((const char *)ptr, len);
> > -#endif
> > -}
> > -
> > -#include "_pyxl_types.h"
> > -
> > -int attrib__libxl_cpuid_policy_list_set(PyObject *v, libxl_cpuid_policy_list *pptr)
> > -{
> > - PyErr_SetString(PyExc_NotImplementedError, "Setting cpuid_policy_list");
> > - return -1;
> > -}
> > -
> > -int attrib__libxl_bitmap_set(PyObject *v, libxl_bitmap *pptr)
> > -{
> > - int i;
> > - long cpu;
> > -
> > - for (i = 0; i < PyList_Size(v); i++) {
> > - cpu = PyInt_AsLong(PyList_GetItem(v, i));
> > - libxl_bitmap_set(pptr, cpu);
> > - }
> > - return 0;
> > -}
> > -
> > -int attrib__libxl_hwcap_set(PyObject *v, libxl_hwcap *pptr)
> > -{
> > - PyErr_SetString(PyExc_NotImplementedError, "Setting hwcap");
> > - return -1;
> > -}
> > -
> > -int attrib__libxl_key_value_list_set(PyObject *v, libxl_key_value_list *pptr)
> > -{
> > - if ( *pptr ) {
> > - libxl_key_value_list_dispose(pptr);
> > - *pptr = NULL;
> > - }
> > - if ( v == Py_None )
> > - return 0;
> > - return -1;
> > -}
> > -
> > -int attrib__libxl_mac_set(PyObject *v, libxl_mac *pptr)
> > -{
> > - return fixed_bytearray_set(v, *pptr, 6);
> > -}
> > -
> > -int attrib__libxl_string_list_set(PyObject *v, libxl_string_list *pptr)
> > -{
> > - PyErr_SetString(PyExc_NotImplementedError, "Setting string_list");
> > - return -1;
> > -}
> > -
> > -int attrib__libxl_uuid_set(PyObject *v, libxl_uuid *pptr)
> > -{
> > - return fixed_bytearray_set(v, libxl_uuid_bytearray(pptr), 16);
> > -}
> > -
> > -int attrib__libxl_domid_set(PyObject *v, libxl_domid *domid) {
> > - *domid = PyInt_AsLong(v);
> > - return 0;
> > -}
> > -
> > -int attrib__libxl_devid_set(PyObject *v, libxl_devid *devid) {
> > - *devid = PyInt_AsLong(v);
> > - return 0;
> > -}
> > -
> > -int attrib__struct_in_addr_set(PyObject *v, struct in_addr *pptr)
> > -{
> > - PyErr_SetString(PyExc_NotImplementedError, "Setting in_addr");
> > - return -1;
> > -}
> > -
> > -PyObject *attrib__libxl_cpuid_policy_list_get(libxl_cpuid_policy_list *pptr)
> > -{
> > - PyErr_SetString(PyExc_NotImplementedError, "Getting cpuid_policy_list");
> > - return NULL;
> > -}
> > -
> > -PyObject *attrib__libxl_bitmap_get(libxl_bitmap *pptr)
> > -{
> > - PyObject *cpulist = NULL;
> > - int i;
> > -
> > - cpulist = PyList_New(0);
> > - libxl_for_each_bit(i, *pptr) {
> > - if ( libxl_bitmap_test(pptr, i) ) {
> > - PyObject* pyint = PyInt_FromLong(i);
> > -
> > - PyList_Append(cpulist, pyint);
> > - Py_DECREF(pyint);
> > - }
> > - }
> > - return cpulist;
> > -}
> > -
> > -PyObject *attrib__libxl_hwcap_get(libxl_hwcap *pptr)
> > -{
> > - PyErr_SetString(PyExc_NotImplementedError, "Getting hwcap");
> > - return NULL;
> > -}
> > -
> > -PyObject *attrib__libxl_key_value_list_get(libxl_key_value_list *pptr)
> > -{
> > - PyErr_SetString(PyExc_NotImplementedError, "Getting key_value_list");
> > - return NULL;
> > -}
> > -
> > -PyObject *attrib__libxl_mac_get(libxl_mac *pptr)
> > -{
> > - return fixed_bytearray_get(*pptr, 6);
> > -}
> > -
> > -PyObject *attrib__libxl_string_list_get(libxl_string_list *pptr)
> > -{
> > - PyErr_SetString(PyExc_NotImplementedError, "Getting string_list");
> > - return NULL;
> > -}
> > -
> > -PyObject *attrib__libxl_uuid_get(libxl_uuid *pptr)
> > -{
> > - return fixed_bytearray_get(libxl_uuid_bytearray(pptr), 16);
> > -}
> > -
> > -PyObject *attrib__libxl_domid_get(libxl_domid *domid) {
> > - return PyInt_FromLong(*domid);
> > -}
> > -
> > -PyObject *attrib__libxl_devid_get(libxl_devid *devid) {
> > - return PyInt_FromLong(*devid);
> > -}
> > -
> > -PyObject *attrib__struct_in_addr_get(struct in_addr *pptr)
> > -{
> > - PyErr_SetString(PyExc_NotImplementedError, "Getting in_addr");
> > - return NULL;
> > -}
> > -
> > -typedef struct {
> > - PyObject_HEAD;
> > - libxl_ctx *ctx;
> > - xentoollog_logger_stdiostream *logger;
> > - xentoollog_level minmsglevel;
> > -} XlObject;
> > -
> > -static PyObject *pyxl_list_domains(XlObject *self)
> > -{
> > - libxl_dominfo *cur, *info;
> > - PyObject *list;
> > - int nr_dom, i;
> > -
> > - info = libxl_list_domain(self->ctx, &nr_dom);
> > - if ( NULL == info )
> > - return PyList_New(0);
> > -
> > - list = PyList_New(nr_dom);
> > - if ( NULL == list )
> > - goto err_mem;
> > -
> > - for(i = 0, cur = info; i < nr_dom; i++, cur++) {
> > - Py_dominfo *di;
> > - di = Pydominfo_New();
> > - if ( NULL == di )
> > - goto err_mem;
> > - memcpy(&di->obj, cur, sizeof(di->obj));
> > - /* SetItem steals a reference */
> > - PyList_SetItem(list, i, (PyObject *)di);
> > - }
> > -
> > - free(info);
> > - return list;
> > -err_mem:
> > - Py_DECREF(list);
> > - PyErr_SetString(PyExc_MemoryError, "Allocating domain list");
> > - return NULL;
> > -}
> > -
> > -static PyObject *pyxl_domid_to_name(XlObject *self, PyObject *args)
> > -{
> > - char *domname;
> > - int domid;
> > - PyObject *ret = Py_None;
> > -
> > - if ( !PyArg_ParseTuple(args, "i", &domid) )
> > - return NULL;
> > -
> > - domname = libxl_domid_to_name(self->ctx, domid);
> > - if (domname)
> > - ret = PyString_FromString(domname);
> > - else
> > - Py_INCREF(Py_None);
> > - free(domname);
> > -
> > - return ret;
> > -}
> > -
> > -static PyObject *pyxl_domain_shutdown(XlObject *self, PyObject *args)
> > -{
> > - int domid;
> > - if ( !PyArg_ParseTuple(args, "i", &domid) )
> > - return NULL;
> > - if ( libxl_domain_shutdown(self->ctx, domid) ) {
> > - PyErr_SetString(xl_error_obj, "cannot shutdown domain");
> > - return NULL;
> > - }
> > - Py_INCREF(Py_None);
> > - return Py_None;
> > -}
> > -
> > -static PyObject *pyxl_domain_reboot(XlObject *self, PyObject *args)
> > -{
> > - int domid;
> > - if ( !PyArg_ParseTuple(args, "i", &domid) )
> > - return NULL;
> > - if ( libxl_domain_reboot(self->ctx, domid) ) {
> > - PyErr_SetString(xl_error_obj, "cannot reboot domain");
> > - return NULL;
> > - }
> > - Py_INCREF(Py_None);
> > - return Py_None;
> > -}
> > -
> > -static PyObject *pyxl_domain_destroy(XlObject *self, PyObject *args)
> > -{
> > - int domid;
> > - if ( !PyArg_ParseTuple(args, "i", &domid) )
> > - return NULL;
> > - if ( libxl_domain_destroy(self->ctx, domid, 0) ) {
> > - PyErr_SetString(xl_error_obj, "cannot destroy domain");
> > - return NULL;
> > - }
> > - Py_INCREF(Py_None);
> > - return Py_None;
> > -}
> > -
> > -static PyObject *pyxl_domain_pause(XlObject *self, PyObject *args)
> > -{
> > - int domid;
> > - if ( !PyArg_ParseTuple(args, "i", &domid) )
> > - return NULL;
> > - if ( libxl_domain_pause(self->ctx, domid) ) {
> > - PyErr_SetString(xl_error_obj, "cannot pause domain");
> > - return NULL;
> > - }
> > - Py_INCREF(Py_None);
> > - return Py_None;
> > -}
> > -
> > -static PyObject *pyxl_domain_unpause(XlObject *self, PyObject *args)
> > -{
> > - int domid;
> > - if ( !PyArg_ParseTuple(args, "i", &domid) )
> > - return NULL;
> > - if ( libxl_domain_unpause(self->ctx, domid) ) {
> > - PyErr_SetString(xl_error_obj, "cannot unpause domain");
> > - return NULL;
> > - }
> > - Py_INCREF(Py_None);
> > - return Py_None;
> > -}
> > -
> > -static PyObject *pyxl_domain_rename(XlObject *self, PyObject *args)
> > -{
> > - char *old_name = NULL, *new_name;
> > - int domid;
> > - if ( !PyArg_ParseTuple(args, "is|s", &domid, &new_name, &old_name) )
> > - return NULL;
> > - if ( libxl_domain_rename(self->ctx, domid, old_name, new_name) ) {
> > - PyErr_SetString(xl_error_obj, "cannot rename domain");
> > - return NULL;
> > - }
> > - Py_INCREF(Py_None);
> > - return Py_None;
> > -}
> > -
> > -static PyObject *pyxl_pci_add(XlObject *self, PyObject *args)
> > -{
> > - Py_device_pci *pci;
> > - PyObject *obj;
> > - int domid;
> > - if ( !PyArg_ParseTuple(args, "iO", &domid, &obj) )
> > - return NULL;
> > - if ( !Pydevice_pci_Check(obj) ) {
> > - PyErr_SetString(PyExc_TypeError, "Xxpected xl.device_pci");
> > - return NULL;
> > - }
> > - pci = (Py_device_pci *)obj;
> > - if ( libxl_device_pci_add(self->ctx, domid, &pci->obj, 0) ) {
> > - PyErr_SetString(xl_error_obj, "cannot add pci device");
> > - return NULL;
> > - }
> > - Py_INCREF(Py_None);
> > - return Py_None;
> > -}
> > -
> > -static PyObject *pyxl_pci_del(XlObject *self, PyObject *args)
> > -{
> > - Py_device_pci *pci;
> > - PyObject *obj;
> > - int domid, force = 0;
> > -
> > - if ( !PyArg_ParseTuple(args, "iO|i", &domid, &obj, &force) )
> > - return NULL;
> > - if ( !Pydevice_pci_Check(obj) ) {
> > - PyErr_SetString(PyExc_TypeError, "Xxpected xl.device_pci");
> > - return NULL;
> > - }
> > - pci = (Py_device_pci *)obj;
> > - if ( force ) {
> > - if ( libxl_device_pci_destroy(self->ctx, domid, &pci->obj, 0) ) {
> > - PyErr_SetString(xl_error_obj, "cannot remove pci device");
> > - return NULL;
> > - }
> > - } else {
> > - if ( libxl_device_pci_remove(self->ctx, domid, &pci->obj, 0) ) {
> > - PyErr_SetString(xl_error_obj, "cannot remove pci device");
> > - return NULL;
> > - }
> > - }
> > - Py_INCREF(Py_None);
> > - return Py_None;
> > -}
> > -
> > -static PyObject *pyxl_pci_parse(XlObject *self, PyObject *args)
> > -{
> > - Py_device_pci *pci;
> > - char *str;
> > -
> > - if ( !PyArg_ParseTuple(args, "s", &str) )
> > - return NULL;
> > -
> > - pci = Pydevice_pci_New();
> > - if ( NULL == pci ) {
> > - PyErr_SetString(PyExc_MemoryError, "Allocating domain list");
> > - return NULL;
> > - }
> > -
> > - if ( xlu_pci_parse_bdf(NULL, &pci->obj, str) ) {
> > - PyErr_SetString(xl_error_obj, "cannot parse pci device spec (BDF)");
> > - Py_DECREF(pci);
> > - return NULL;
> > - }
> > -
> > - return (PyObject *)pci;
> > -}
> > -
> > -static PyObject *pyxl_pci_assignable_list(XlObject *self, PyObject *args)
> > -{
> > - libxl_device_pci *dev;
> > - PyObject *list;
> > - int nr_dev, i;
> > -
> > - dev = libxl_device_pci_assignable_list(self->ctx, &nr_dev);
> > - if ( dev == NULL ) {
> > - PyErr_SetString(xl_error_obj, "Cannot list assignable devices");
> > - return NULL;
> > - }
> > -
> > - list = PyList_New(nr_dev);
> > - if ( NULL == list )
> > - return NULL;
> > -
> > - for(i = 0; i < nr_dev; i++) {
> > - Py_device_pci *pd;
> > - pd = Pydevice_pci_New();
> > - if ( NULL == pd )
> > - goto err_mem;
> > - memcpy(&pd->obj, &dev[i], sizeof(pd->obj));
> > - /* SetItem steals a reference */
> > - PyList_SetItem(list, i, (PyObject *)pd);
> > - }
> > -
> > - free(dev);
> > - return list;
> > -err_mem:
> > - Py_DECREF(list);
> > - PyErr_SetString(PyExc_MemoryError, "Allocating PCI device list");
> > - return NULL;
> > -}
> > -
> > -static PyObject *pyxl_pci_list(XlObject *self, PyObject *args)
> > -{
> > - libxl_device_pci *dev;
> > - PyObject *list;
> > - int nr_dev, i, domid;
> > -
> > - if ( !PyArg_ParseTuple(args, "i", &domid) )
> > - return NULL;
> > -
> > - dev = libxl_device_pci_list(self->ctx, domid, &nr_dev);
> > - if ( dev == NULL ) {
> > - PyErr_SetString(xl_error_obj, "Cannot list assignable devices");
> > - return NULL;
> > - }
> > -
> > - list = PyList_New(nr_dev);
> > - if ( NULL == list )
> > - return NULL;
> > -
> > - for(i = 0; i < nr_dev; i++) {
> > - Py_device_pci *pd;
> > - pd = Pydevice_pci_New();
> > - if ( NULL == pd )
> > - goto err_mem;
> > - memcpy(&pd->obj, &dev[i], sizeof(pd->obj));
> > - /* SetItem steals a reference */
> > - PyList_SetItem(list, i, (PyObject *)pd);
> > - }
> > -
> > - free(dev);
> > - return list;
> > -err_mem:
> > - Py_DECREF(list);
> > - PyErr_SetString(PyExc_MemoryError, "Allocating PCI device list");
> > - return NULL;
> > -}
> > -
> > -static PyMethodDef pyxl_methods[] = {
> > - {"list_domains", (PyCFunction)pyxl_list_domains, METH_NOARGS,
> > - "List domains"},
> > - {"domid_to_name", (PyCFunction)pyxl_domid_to_name, METH_VARARGS,
> > - "Retrieve name from domain-id"},
> > - {"domain_shutdown", (PyCFunction)pyxl_domain_shutdown, METH_VARARGS,
> > - "Shutdown a domain"},
> > - {"domain_reboot", (PyCFunction)pyxl_domain_reboot, METH_VARARGS,
> > - "Reboot a domain"},
> > - {"domain_destroy", (PyCFunction)pyxl_domain_destroy, METH_VARARGS,
> > - "Destroy a domain"},
> > - {"domain_pause", (PyCFunction)pyxl_domain_pause, METH_VARARGS,
> > - "Pause a domain"},
> > - {"domain_unpause", (PyCFunction)pyxl_domain_unpause, METH_VARARGS,
> > - "Unpause a domain"},
> > - {"domain_rename", (PyCFunction)pyxl_domain_rename, METH_VARARGS,
> > - "Rename a domain"},
> > - {"device_pci_add", (PyCFunction)pyxl_pci_add, METH_VARARGS,
> > - "Insert a pass-through PCI device"},
> > - {"device_pci_del", (PyCFunction)pyxl_pci_del, METH_VARARGS,
> > - "Remove a pass-through PCI device"},
> > - {"device_pci_parse_bdf", (PyCFunction)pyxl_pci_parse, METH_VARARGS,
> > - "Parse pass-through PCI device spec (BDF)"},
> > - {"device_pci_list", (PyCFunction)pyxl_pci_list, METH_VARARGS,
> > - "List PCI devices assigned to a domain"},
> > - {"device_pci_assignable_list",
> > - (PyCFunction)pyxl_pci_assignable_list, METH_NOARGS,
> > - "List assignable PCI devices"},
> > - { NULL, NULL, 0, NULL }
> > -};
> > -
> > -static PyObject *PyXl_getattr(PyObject *obj, char *name)
> > -{
> > - return Py_FindMethod(pyxl_methods, obj, name);
> > -}
> > -
> > -static PyObject *PyXl_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
> > -{
> > - XlObject *self = (XlObject *)type->tp_alloc(type, 0);
> > -
> > - if (self == NULL)
> > - return NULL;
> > -
> > - self->ctx = NULL;
> > - self->logger = NULL;
> > - self->minmsglevel = XTL_PROGRESS;
> > -
> > - return (PyObject *)self;
> > -}
> > -
> > -static int
> > -PyXl_init(XlObject *self, PyObject *args, PyObject *kwds)
> > -{
> > - self->logger = xtl_createlogger_stdiostream(stderr, self->minmsglevel, 0);
> > - if (!self->logger) {
> > - PyErr_SetString(xl_error_obj, "cannot init xl logger");
> > - return -1;
> > - }
> > -
> > - if ( libxl_ctx_alloc(&self->ctx, LIBXL_VERSION, 0,
> > - (xentoollog_logger*)self->logger) ) {
> > - PyErr_SetString(xl_error_obj, "cannot init xl context");
> > - return -1;
> > - }
> > -
> > - return 0;
> > -}
> > -
> > -static void PyXl_dealloc(XlObject *self)
> > -{
> > - libxl_ctx_free(self->ctx);
> > - if ( self->logger )
> > - xtl_logger_destroy((xentoollog_logger*)self->logger);
> > -
> > - self->ob_type->tp_free((PyObject *)self);
> > -}
> > -
> > -static PyTypeObject PyXlType = {
> > - PyObject_HEAD_INIT(NULL)
> > - 0,
> > - PKG "." CLS,
> > - sizeof(XlObject),
> > - 0,
> > - (destructor)PyXl_dealloc, /* tp_dealloc */
> > - NULL, /* tp_print */
> > - PyXl_getattr, /* tp_getattr */
> > - NULL, /* tp_setattr */
> > - NULL, /* tp_compare */
> > - NULL, /* tp_repr */
> > - NULL, /* tp_as_number */
> > - NULL, /* tp_as_sequence */
> > - NULL, /* tp_as_mapping */
> > - NULL, /* tp_hash */
> > - NULL, /* tp_call */
> > - NULL, /* tp_str */
> > - NULL, /* tp_getattro */
> > - NULL, /* tp_setattro */
> > - NULL, /* tp_as_buffer */
> > - Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */
> > - "libxenlight connection", /* tp_doc */
> > - NULL, /* tp_traverse */
> > - NULL, /* tp_clear */
> > - NULL, /* tp_richcompare */
> > - 0, /* tp_weaklistoffset */
> > - NULL, /* tp_iter */
> > - NULL, /* tp_iternext */
> > - pyxl_methods, /* tp_methods */
> > - NULL, /* tp_members */
> > - NULL, /* tp_getset */
> > - NULL, /* tp_base */
> > - NULL, /* tp_dict */
> > - NULL, /* tp_descr_get */
> > - NULL, /* tp_descr_set */
> > - 0, /* tp_dictoffset */
> > - (initproc)PyXl_init, /* tp_init */
> > - NULL, /* tp_alloc */
> > - PyXl_new, /* tp_new */
> > -};
> > -
> > -static PyMethodDef xl_methods[] = { { NULL } };
> > -
> > -#define _INT_CONST(m, c) PyModule_AddIntConstant(m, #c, c)
> > -#define _INT_CONST_LIBXL(m, c) PyModule_AddIntConstant(m, #c, LIBXL_ ## c)
> > -PyMODINIT_FUNC initxl(void)
> > -{
> > - PyObject *m;
> > -
> > - if (PyType_Ready(&PyXlType) < 0)
> > - return;
> > -
> > - m = Py_InitModule(PKG, xl_methods);
> > -
> > - if (m == NULL)
> > - return;
> > -
> > - xl_error_obj = PyErr_NewException(PKG ".Error", PyExc_RuntimeError, NULL);
> > -
> > - Py_INCREF(&PyXlType);
> > - PyModule_AddObject(m, CLS, (PyObject *)&PyXlType);
> > -
> > - Py_INCREF(xl_error_obj);
> > - PyModule_AddObject(m, "Error", xl_error_obj);
> > -
> > - _INT_CONST_LIBXL(m, SHUTDOWN_REASON_POWEROFF);
> > - _INT_CONST_LIBXL(m, SHUTDOWN_REASON_REBOOT);
> > - _INT_CONST_LIBXL(m, SHUTDOWN_REASON_SUSPEND);
> > - _INT_CONST_LIBXL(m, SHUTDOWN_REASON_CRASH);
> > - _INT_CONST_LIBXL(m, SHUTDOWN_REASON_WATCHDOG);
> > - _INT_CONST_LIBXL(m, SHUTDOWN_REASON_SOFT_RESET);
> > -
> > - genwrap__init(m);
> > -}
> > -
> > -
> > -/*
> > - * Local variables:
> > - * c-indent-level: 4
> > - * c-basic-offset: 4
> > - * End:
> > - */
> > --
> > 2.5.3
> >
> >
> > _______________________________________________
> > Xen-devel mailing list
> > Xen-devel@lists.xen.org
> > http://lists.xen.org/xen-devel
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2015-10-23 13:51 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-10-06 16:57 [PATCH] tools/python: remove broken xl binding Wei Liu
2015-10-06 17:13 ` Andrew Cooper
2015-10-06 19:09 ` Konrad Rzeszutek Wilk
2015-10-08 14:40 ` Ian Campbell
2015-10-08 14:58 ` Zhigang Wang
2015-10-08 15:28 ` Ian Campbell
2015-10-08 16:10 ` Zhigang Wang
2015-10-23 13:51 ` Ian Campbell
2015-10-06 18:06 ` Konrad Rzeszutek Wilk
2015-10-06 18:09 ` Konrad Rzeszutek Wilk
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).