diff options
Diffstat (limited to 'python-ethtool/etherinfo_obj.c')
-rw-r--r-- | python-ethtool/etherinfo_obj.c | 87 |
1 files changed, 23 insertions, 64 deletions
diff --git a/python-ethtool/etherinfo_obj.c b/python-ethtool/etherinfo_obj.c index 07e4b58..cdf5263 100644 --- a/python-ethtool/etherinfo_obj.c +++ b/python-ethtool/etherinfo_obj.c @@ -34,58 +34,17 @@ /** * ethtool.etherinfo deallocator - cleans up when a object is deleted * - * @param self etherinfo_py object structure + * @param self etherinfo_py Python object to deallocate */ -void _ethtool_etherinfo_dealloc(etherinfo_py *self) +static void _ethtool_etherinfo_dealloc(etherinfo_py *self) { close_netlink(self); - if( self->ethinfo ) { - free_etherinfo(self->ethinfo); - } + Py_XDECREF(self->device); self->device = NULL; + Py_XDECREF(self->hwaddress); self->hwaddress = NULL; self->ob_type->tp_free((PyObject*)self); } -/** - * ethtool.etherinfo function, creating a new etherinfo object - * - * @param type - * @param args - * @param kwds - * - * @return Returns in PyObject with the new object on success, otherwise NULL - */ -PyObject *_ethtool_etherinfo_new(PyTypeObject *type, PyObject *args, PyObject *kwds) -{ - etherinfo_py *self; - - self = (etherinfo_py *)type->tp_alloc(type, 0); - return (PyObject *)self; -} - - -/** - * ethtool.etherinfo init (constructor) method. Makes sure the object is initialised correctly. - * - * @param self - * @param args - * @param kwds - * - * @return Returns 0 on success. - */ -int _ethtool_etherinfo_init(etherinfo_py *self, PyObject *args, PyObject *kwds) -{ - static char *etherinfo_kwlist[] = {"etherinfo_ptr", NULL}; - PyObject *ethinf_ptr = NULL; - - if( !PyArg_ParseTupleAndKeywords(args, kwds, "O", etherinfo_kwlist, ðinf_ptr)) { - PyErr_SetString(PyExc_AttributeError, "Invalid data pointer to constructor"); - return -1; - } - self->ethinfo = (struct etherinfo *) PyCObject_AsVoidPtr(ethinf_ptr); - return 0; -} - /* The old approach of having a single IPv4 address per device meant each result that came in from netlink overwrote the old result. @@ -120,7 +79,7 @@ static PyNetlinkIPaddress * get_last_ipv4_address(PyObject *addrlist) /** * ethtool.etherinfo function for retrieving data from a Python object. * - * @param self + * @param self Pointer to the current etherinfo_py device object * @param attr_o contains the object member request (which element to return) * * @return Returns a PyObject with the value requested on success, otherwise NULL @@ -131,22 +90,22 @@ PyObject *_ethtool_etherinfo_getter(etherinfo_py *self, PyObject *attr_o) PyNetlinkIPaddress *py_addr; PyObject *addrlist = NULL; - if( !self || !self->ethinfo ) { + if( !self ) { PyErr_SetString(PyExc_AttributeError, "No data available"); return NULL; } if( strcmp(attr, "device") == 0 ) { - if( self->ethinfo->device ) { - Py_INCREF(self->ethinfo->device); - return self->ethinfo->device; + if( self->device ) { + Py_INCREF(self->device); + return self->device; } else { return Py_INCREF(Py_None), Py_None; } } else if( strcmp(attr, "mac_address") == 0 ) { get_etherinfo_link(self); - Py_INCREF(self->ethinfo->hwaddress); - return self->ethinfo->hwaddress; + Py_INCREF(self->hwaddress); + return self->hwaddress; } else if( strcmp(attr, "ipv4_address") == 0 ) { addrlist = get_etherinfo_address(self, NLQRY_ADDR4); /* For compatiblity with old approach, return last IPv4 address: */ @@ -200,7 +159,7 @@ int _ethtool_etherinfo_setter(etherinfo_py *self, PyObject *attr_o, PyObject *va /** * Creates a human readable format of the information when object is being treated as a string * - * @param self + * @param self Pointer to the current etherinfo_py device object * * @return Returns a PyObject with a string with all of the information */ @@ -209,7 +168,7 @@ PyObject *_ethtool_etherinfo_str(etherinfo_py *self) PyObject *ret = NULL; PyObject *ipv4addrs = NULL, *ipv6addrs = NULL; - if( !self || !self->ethinfo ) { + if( !self ) { PyErr_SetString(PyExc_AttributeError, "No data available"); return NULL; } @@ -217,12 +176,12 @@ PyObject *_ethtool_etherinfo_str(etherinfo_py *self) get_etherinfo_link(self); ret = PyString_FromFormat("Device "); - PyString_Concat(&ret, self->ethinfo->device); + PyString_Concat(&ret, self->device); PyString_ConcatAndDel(&ret, PyString_FromString(":\n")); - if( self->ethinfo->hwaddress ) { + if( self->hwaddress ) { PyString_ConcatAndDel(&ret, PyString_FromString("\tMAC address: ")); - PyString_Concat(&ret, self->ethinfo->hwaddress); + PyString_Concat(&ret, self->hwaddress); PyString_ConcatAndDel(&ret, PyString_FromString("\n")); } @@ -265,13 +224,13 @@ PyObject *_ethtool_etherinfo_str(etherinfo_py *self) /** * Returns a tuple list of configured IPv4 addresses * - * @param self + * @param self Pointer to the current etherinfo_py device object to extract IPv4 info from * @param notused * * @return Returns a Python tuple list of NetlinkIP4Address objects */ static PyObject *_ethtool_etherinfo_get_ipv4_addresses(etherinfo_py *self, PyObject *notused) { - if( !self || !self->ethinfo ) { + if( !self ) { PyErr_SetString(PyExc_AttributeError, "No data available"); return NULL; } @@ -281,15 +240,15 @@ static PyObject *_ethtool_etherinfo_get_ipv4_addresses(etherinfo_py *self, PyObj /** - * Returns a tuple list of configured IPv4 addresses + * Returns a tuple list of configured IPv6 addresses * - * @param self + * @param self Pointer to the current etherinfo_py device object to extract IPv6 info from * @param notused * * @return Returns a Python tuple list of NetlinkIP6Address objects */ static PyObject *_ethtool_etherinfo_get_ipv6_addresses(etherinfo_py *self, PyObject *notused) { - if( !self || !self->ethinfo ) { + if( !self ) { PyErr_SetString(PyExc_AttributeError, "No data available"); return NULL; } @@ -351,8 +310,8 @@ PyTypeObject ethtool_etherinfoType = { 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ - (initproc)_ethtool_etherinfo_init, /* tp_init */ + 0, /* tp_init */ 0, /* tp_alloc */ - _ethtool_etherinfo_new, /* tp_new */ + 0, /* tp_new */ }; |