summaryrefslogtreecommitdiffstats
path: root/python-ethtool/etherinfo_obj.c
diff options
context:
space:
mode:
authorDavid Sommerseth <davids@redhat.com>2009-09-04 19:36:23 +0200
committerDavid Sommerseth <davids@redhat.com>2009-09-04 19:36:23 +0200
commit0be405b9c6245b59489b7e6987af0dc56ded1406 (patch)
tree2850c36fde83eae17bb721343d0db9d260039e77 /python-ethtool/etherinfo_obj.c
parente957168cde93978d62fc9908325d32ed432fe33e (diff)
downloadpython-ethtool-0be405b9c6245b59489b7e6987af0dc56ded1406.tar.gz
python-ethtool-0be405b9c6245b59489b7e6987af0dc56ded1406.tar.xz
python-ethtool-0be405b9c6245b59489b7e6987af0dc56ded1406.zip
First cut at a python etherinfo class in C. Does nothing useful yet.
Diffstat (limited to 'python-ethtool/etherinfo_obj.c')
-rw-r--r--python-ethtool/etherinfo_obj.c121
1 files changed, 121 insertions, 0 deletions
diff --git a/python-ethtool/etherinfo_obj.c b/python-ethtool/etherinfo_obj.c
new file mode 100644
index 0000000..5e9878c
--- /dev/null
+++ b/python-ethtool/etherinfo_obj.c
@@ -0,0 +1,121 @@
+/**
+ * @file etherinfo_obj.c
+ * @author David Sommerseth <davids@redhat.com>
+ * @date Fri Sep 4 18:41:28 2009
+ *
+ * @brief Python ethtool.etherinfo class functions.
+ *
+ */
+
+#include <Python.h>
+#include "structmember.h"
+#include "etherinfo.h"
+#include "etherinfo_struct.h"
+
+
+/**
+ * ethtool.etherinfo deallocator - cleans up when a object is deleted
+ *
+ * @param self etherinfo_py object structure
+ */
+void _ethtool_etherinfo_dealloc(etherinfo_py *self)
+{
+ if( self->info ) {
+ free_etherinfo(self->info);
+ }
+ 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);
+ if (self != NULL) {
+ }
+ 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)
+{
+ self->info = (struct etherinfo *) malloc(sizeof(struct etherinfo)+2);
+ memset(self->info, 0, sizeof(struct etherinfo)+2);
+ self->info->device = strdup("test");
+ return 0;
+}
+
+
+/**
+ * ethtool.etherinfo function for retrieving data from a Python object.
+ *
+ * @param self
+ * @param attr_o contains the object member request (which element to return)
+ *
+ * @return Returns a PyObject with the value requested on success, otherwise NULL
+ */
+PyObject *_ethtool_etherinfo_getter(etherinfo_py *self, PyObject *attr_o)
+{
+ char *attr = PyString_AsString(attr_o);
+
+ if( !self || !self->info ) {
+ PyErr_SetString(PyExc_AttributeError, "No data available");
+ return NULL;
+ }
+
+ if( strcmp(attr, "device") == 0 ) {
+ return PyString_FromString(self->info->device);
+ } else if( strcmp(attr, "mac_address") == 0 ) {
+ return PyString_FromString(self->info->hwaddress);
+ } else if( strcmp(attr, "ipv4_address") == 0 ) {
+ return PyString_FromString(self->info->ipv4_address);
+ } else if( strcmp(attr, "ipv4_netmask") == 0 ) {
+ return PyInt_FromLong(self->info->ipv4_netmask);
+ } else if( strcmp(attr, "ipv4_broadcast") == 0 ) {
+ return PyString_FromString(self->info->ipv4_broadcast);
+ } else if( strcmp(attr, "ipv6_address") == 0 ) {
+ return PyString_FromString(self->info->ipv6_address);
+ } else if( strcmp(attr, "ipv6_netmask") == 0 ) {
+ return PyInt_FromLong(self->info->ipv6_netmask);
+ }
+ PyErr_SetString(PyExc_AttributeError, "Unknown attribute name");
+ return NULL;
+}
+
+
+/**
+ * ethtool.etherinfo function for setting a value to a object member. This feature is
+ * disabled by always returning -1, as the values are read-only by the user.
+ *
+ * @param self
+ * @param attr_o
+ * @param val_o
+ *
+ * @return Returns always -1 (failure).
+ */
+int _ethtool_etherinfo_setter(etherinfo_py *self, PyObject *attr_o, PyObject *val_o)
+{
+ PyErr_SetString(PyExc_AttributeError, "etherinfo member values are read-only.");
+ return -1;
+}
+
+