Quoting Dongsheng Yang (yangds.f...@cn.fujitsu.com): > Signed-off-by: Dongsheng Yang <yangds.f...@cn.fujitsu.com>
(I'll leave it to Stéphane to review this :) > --- > src/python-lxc/lxc.c | 73 > ++++++++++++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 73 insertions(+) > > diff --git a/src/python-lxc/lxc.c b/src/python-lxc/lxc.c > index 91c199f..f773532 100644 > --- a/src/python-lxc/lxc.c > +++ b/src/python-lxc/lxc.c > @@ -520,6 +520,67 @@ Container_state(Container *self, void *closure) > > /* Container Functions */ > static PyObject * > +Container_attach_interface(Container *self, PyObject *args, PyObject *kwds) > +{ > + static char *kwlist[] = {"src_ifname", "dst_ifname", NULL}; > + char *src_name = NULL; > + char *dst_name = NULL; > + PyObject *py_src_name = NULL; > + PyObject *py_dst_name = NULL; > + > + if (! PyArg_ParseTupleAndKeywords(args, kwds, "O&|O&", kwlist, > + PyUnicode_FSConverter, &py_src_name, > + PyUnicode_FSConverter, &py_dst_name)) > + return NULL; > + > + if (py_src_name != NULL) { > + src_name = PyBytes_AS_STRING(py_src_name); > + assert(src_name != NULL); > + } > + > + if (py_dst_name != NULL) { > + dst_name = PyBytes_AS_STRING(py_dst_name); > + assert(dst_name != NULL); > + } > + > + if (self->container->attach_interface(self->container, src_name, > + dst_name)) { > + Py_XDECREF(py_src_name); > + Py_XDECREF(py_dst_name); > + Py_RETURN_TRUE; > + } > + > + Py_XDECREF(py_src_name); > + Py_XDECREF(py_dst_name); > + Py_RETURN_FALSE; > +} > + > +static PyObject * > +Container_detach_interface(Container *self, PyObject *args, PyObject *kwds) > +{ > + static char *kwlist[] = {"ifname", NULL}; > + char *ifname = NULL; > + PyObject *py_ifname = NULL; > + > + if (! PyArg_ParseTupleAndKeywords(args, kwds, "|O&", kwlist, > + PyUnicode_FSConverter, &py_ifname)) > + return NULL; > + > + if (py_ifname != NULL) { > + ifname = PyBytes_AS_STRING(py_ifname); > + assert(ifname != NULL); > + } > + > + if (self->container->detach_interface(self->container, ifname, NULL)) { > + Py_XDECREF(py_ifname); > + Py_RETURN_TRUE; > + } > + > + Py_XDECREF(py_ifname); > + Py_RETURN_FALSE; > +} > + > +static PyObject * > Container_add_device_node(Container *self, PyObject *args, PyObject *kwds) > { > static char *kwlist[] = {"src_path", "dest_path", NULL}; > @@ -1467,6 +1528,18 @@ static PyGetSetDef Container_getseters[] = { > }; > > static PyMethodDef Container_methods[] = { > + {"attach_interface", (PyCFunction)Container_attach_interface, > + METH_VARARGS|METH_KEYWORDS, > + "attach_interface(src_ifname, dest_ifname) -> boolean\n" > + "\n" > + "Pass a new network device to the container." > + }, > + {"detach_interface", (PyCFunction)Container_detach_interface, > + METH_VARARGS|METH_KEYWORDS, > + "detach_interface(ifname) -> boolean\n" > + "\n" > + "detach a network device from the container." > + }, > {"add_device_node", (PyCFunction)Container_add_device_node, > METH_VARARGS|METH_KEYWORDS, > "add_device_node(src_path, dest_path) -> boolean\n" > -- > 1.8.4.2 > _______________________________________________ lxc-devel mailing list lxc-devel@lists.linuxcontainers.org http://lists.linuxcontainers.org/listinfo/lxc-devel