diff options
author | Arnaldo Carvalho de Melo <acme@redhat.com> | 2008-06-30 19:03:41 -0300 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2008-06-30 19:03:41 -0300 |
commit | 90517c2b64d2232d85857e989a4a3a15670c18be (patch) | |
tree | cd0bd7a5db4725281bc96ff6a0021cffab7a1e90 /python-ethtool/ethtool.c | |
parent | 92cd328edede3124ec64e4e5b39493305e5ea7c5 (diff) | |
download | python-ethtool-90517c2b64d2232d85857e989a4a3a15670c18be.tar.gz python-ethtool-90517c2b64d2232d85857e989a4a3a15670c18be.tar.xz python-ethtool-90517c2b64d2232d85857e989a4a3a15670c18be.zip |
ethtool: implement set_tso
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'python-ethtool/ethtool.c')
-rw-r--r-- | python-ethtool/ethtool.c | 60 |
1 files changed, 48 insertions, 12 deletions
diff --git a/python-ethtool/ethtool.c b/python-ethtool/ethtool.c index cc439cf..bf8fc45 100644 --- a/python-ethtool/ethtool.c +++ b/python-ethtool/ethtool.c @@ -405,25 +405,20 @@ static PyObject *get_businfo(PyObject *self __unused, PyObject *args) return PyString_FromString(((struct ethtool_drvinfo *)buf)->bus_info); } -static int get_dev_value(int cmd, PyObject *args, void *value, size_t len) +static int send_command(int cmd, char *devname, struct ethtool_value *eval) { - struct ethtool_value eval; - struct ifreq ifr; + /* Setup our control structures. */ int fd, err; - char *devname; - - if (!PyArg_ParseTuple(args, "s", &devname)) - return -1; + struct ifreq ifr; - /* Setup our control structures. */ memset(&ifr, 0, sizeof(ifr)); strncpy(&ifr.ifr_name[0], devname, IFNAMSIZ); ifr.ifr_name[IFNAMSIZ - 1] = 0; - ifr.ifr_data = (caddr_t)&eval; - eval.cmd = cmd; + ifr.ifr_data = (caddr_t)eval; + eval->cmd = cmd; /* Open control socket. */ - fd = socket(AF_INET, SOCK_DGRAM, 0); + fd = socket(AF_INET, SOCK_DGRAM, 0), err; if (fd < 0) { PyErr_SetString(PyExc_OSError, strerror(errno)); return -1; @@ -438,7 +433,20 @@ static int get_dev_value(int cmd, PyObject *args, void *value, size_t len) } close(fd); - memcpy(value, eval.data, len); + return err; +} + +static int get_dev_value(int cmd, PyObject *args, void *value, size_t len) +{ + char *devname; + int err = -1; + + if (PyArg_ParseTuple(args, "s", &devname)) { + struct ethtool_value eval; + /* Setup our control structures. */ + err = send_command(cmd, devname, &eval); + memcpy(value, &eval.data, len); + } return err; } @@ -448,6 +456,17 @@ static int get_dev_int_value(int cmd, PyObject *args, int *value) return get_dev_value(cmd, args, value, sizeof(*value)); } +static int dev_set_int_value(int cmd, PyObject *args) +{ + struct ethtool_value eval; + char *devname; + + if (!PyArg_ParseTuple(args, "si", &devname, &eval.data)) + return -1; + + return send_command(cmd, devname, &eval); +} + static PyObject *get_tso(PyObject *self __unused, PyObject *args) { int value; @@ -458,6 +477,18 @@ static PyObject *get_tso(PyObject *self __unused, PyObject *args) return Py_BuildValue("b", value); } +static PyObject *set_tso(PyObject *self __unused, PyObject *args) +{ + int pid, policy, priority; + struct ethtool_value param; + + if (dev_set_int_value(ETHTOOL_STSO, args) < 0) + return NULL; + + Py_INCREF(Py_None); + return Py_None; +} + static PyObject *get_ufo(PyObject *self __unused, PyObject *args) { int value; @@ -535,6 +566,11 @@ static struct PyMethodDef PyEthModuleMethods[] = { .ml_flags = METH_VARARGS, }, { + .ml_name = "set_tso", + .ml_meth = (PyCFunction)set_tso, + .ml_flags = METH_VARARGS, + }, + { .ml_name = "get_ufo", .ml_meth = (PyCFunction)get_ufo, .ml_flags = METH_VARARGS, |