X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=python%2Fvserverimpl.c;h=41365258666545da9b21e526c5fa891ffea0f090;hb=91cec69dc44c4a25c6ed53b874da4de35b6812b8;hp=09e37825e7f27e053cc31f53692153f830d3961a;hpb=0f3e056bac8cdb4d7ed89e08f8886002942e0ab6;p=util-vserver.git diff --git a/python/vserverimpl.c b/python/vserverimpl.c index 09e3782..4136525 100644 --- a/python/vserverimpl.c +++ b/python/vserverimpl.c @@ -53,14 +53,32 @@ POSSIBILITY OF SUCH DAMAGE. #include "virtual.h" /* - * chcontext + * context create */ static PyObject * -vserver_chcontext(PyObject *self, PyObject *args) +vserver_create(PyObject *self, PyObject *args) +{ + xid_t ctx, xid; + + if (!PyArg_ParseTuple(args, "I", &ctx)) + return NULL; + + xid = vc_ctx_create(ctx); + if (xid == VC_NOCTX && errno != EEXIST) { + return PyErr_SetFromErrno(PyExc_OSError); + } + return Py_None; +} + +/* + * set flags + */ +static PyObject * +vserver_flags(PyObject *self, PyObject *args) { struct vc_ctx_caps caps; struct vc_ctx_flags flags; - xid_t ctx, xid; + xid_t ctx; caps.ccaps = ~vc_get_insecureccaps(); caps.cmask = ~0ull; @@ -73,24 +91,34 @@ vserver_chcontext(PyObject *self, PyObject *args) if (!PyArg_ParseTuple(args, "I", &ctx)) return NULL; - xid = vc_ctx_create(ctx); - if (xid == VC_NOCTX && errno != EEXIST) { + if (vc_set_ccaps(ctx, &caps) == -1) { return PyErr_SetFromErrno(PyExc_OSError); } - if (vc_set_ccaps(ctx, &caps) == -1) { + if (vc_set_cflags(ctx, &flags) == -1) { return PyErr_SetFromErrno(PyExc_OSError); } + return Py_None; +} - if (vc_set_cflags(ctx, &flags) == -1) { +/* + * enter + */ +static PyObject * +vserver_enter(PyObject *self, PyObject *args) +{ + xid_t ctx, xid; + if (!PyArg_ParseTuple(args, "I", &ctx)) + return NULL; + + xid = vc_ctx_create(ctx); + if (xid == VC_NOCTX && errno != EEXIST) { return PyErr_SetFromErrno(PyExc_OSError); } - /* context already exists, migrate to it */ if (xid == VC_NOCTX && vc_ctx_migrate(ctx) == -1) { return PyErr_SetFromErrno(PyExc_OSError); } - return Py_None; } @@ -156,9 +184,10 @@ vserver_setsched(PyObject *self, PyObject *args) VC_VXSM_TOKENS_MIN | VC_VXSM_TOKENS_MAX); - if (!PyArg_ParseTuple(args, "I|I|I|I|I|I", &xid, + if (!PyArg_ParseTuple(args, "I|I|I|I|I|I|I", &xid, &sched.fill_rate, &sched.interval, + &sched.tokens, &sched.tokens_min, &sched.tokens_max, &cpuguaranteed)) @@ -265,8 +294,12 @@ vserver_set_dlimit(PyObject *self, PyObject *args) } static PyMethodDef methods[] = { - { "chcontext", vserver_chcontext, METH_VARARGS, - "Change to the given vserver context" }, + { "create", vserver_create, METH_VARARGS, + "Create a new vserver context" }, + { "flags", vserver_flags, METH_VARARGS, + "Set the default flags and caps" }, + { "enter", vserver_flags, METH_VARARGS, + "Enter the vserver context" }, { "setsched", vserver_setsched, METH_VARARGS, "Change vserver scheduling attributes for given vserver context" }, { "setdlimit", vserver_set_dlimit, METH_VARARGS,