summaryrefslogtreecommitdiffstats
path: root/python-ethtool/etherinfo_struct.h
Commit message (Collapse)AuthorAgeFilesLines
* cleanup: Rename etherinfo_py and ethtool_etherinfo_TypeDavid Sommerseth2014-01-091-1/+1
| | | | | | | | | Use PyEtherInfo and PyEtherInfoType the base names, to more easily see their relation, and more clearly indicate they are Python objects. Also remove an initialisation of PyEtherInfo/etherinfo_py not needed any more. Signed-off-by: David Sommerseth <davids@redhat.com>
* Merge struct etherinfo and etherinfo_pyDavid Sommerseth2013-12-201-12/+4
| | | | | | | | | | | | | Make things more "pythonic" and avoid another layer of wrapping by removing the struct etherinfo. Move that information to the main Python object instead. This simplifies the object creation and handling too, as now all strings are python objects. Also update some of the documentation blocks along the way. Signed-off-by: David Sommerseth <davids@redhat.com>
* Make the device string a python object as wellDavid Sommerseth2013-12-201-1/+1
| | | | | | This will simplify to "pythonize" struct etherinfo further. Signed-off-by: David Sommerseth <davids@redhat.com>
* Get rid of compiler warningDavid Sommerseth2013-12-201-0/+2
| | | | | | | make_python_address_from_rtnl_addr() referenced an undefined struct without netlink/route/addr.h included. Signed-off-by: David Sommerseth <davids@redhat.com>
* Get rid of the internal IP address listsDavid Sommerseth2013-12-201-2/+0
| | | | | | | | With the new structure, these pointers are of no use. Kick them out. The result of this is that get_etherinfo_address() now returns a Python object which contains a list of IP address objects. Signed-off-by: David Sommerseth <davids@redhat.com>
* Kick out struct etherinfo_obj_dataDavid Sommerseth2013-12-171-11/+2
| | | | | | This simplifies and clarifies the object/struct relations a bit better. Signed-off-by: David Sommerseth <davids@redhat.com>
* Reduce the NETLINK pointer complexityDavid Sommerseth2013-12-171-3/+1
| | | | | | | | | | | | Make the NETLINK connection pointer and user counter local global variables inside netlink.c only. Where NETLINK calls via libnl is required, rather use get_nlc() to get a NETLINK connection. This also prepares the next step, to get rid of the struct etherinfo_obj_data wrapper. Signed-off-by: David Sommerseth <davids@redhat.com>
* Get rid of a single-user macro: RETURN_STRING()David Sommerseth2013-12-161-8/+0
| | | | Signed-off-by: David Sommerseth <davids@redhat.com>
* Make the internal MAC address a Python string objectDavid Sommerseth2013-12-161-1/+1
| | | | Signed-off-by: David Sommerseth <davids@redhat.com>
* Merge PyNetlinkIPv4Address and PyNetlinkIPv6Address classesDavid Sommerseth2013-09-131-14/+8
| | | | | | | | | Simplify the overall implementation by reusing code more efficiently. The differences between the IPv4 and IPv6 implementation in libnl is minimal and can more easily be differentiated those few places its needed instead. Signed-off-by: David Sommerseth <davids@redhat.com>
* Re-implement the IPv6 supportDavid Sommerseth2013-09-131-0/+10
| | | | | | This uses the same approach as IPv4 uses. Signed-off-by: David Sommerseth <davids@redhat.com>
* Rip out the old IPv6 implementation completelyDavid Sommerseth2013-09-131-21/+0
| | | | | | | The whole IPv6 support will be re-implemented using a simliar strategy as the newer IPv4 support uses. Signed-off-by: David Sommerseth <davids@redhat.com>
* Migrated from libnl-1 to libnl-3David Sommerseth2013-09-121-6/+3
| | | | | | | | This ports the current functionality from libnl-1 to libnl-3.0. At the current stage, it should be functional but more patches cleaning up the code will come. Signed-off-by: David Sommerseth <davids@redhat.com>
* Support devices with multiple IPv4 addressesDavid Malcolm2013-01-301-3/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add a get_ipv4_addresses() method to ethtool.etherinfo to support devices with multiple IPv4 addresses (rhbz#759150) Previously, get_etherinfo() made queries to NETLINK with NLQRY_ADDR, and callback_nl_address handled responses of family AF_INET (IPv4) by writing to fields within a struct etherinfo. If multiple AF_INET responses come back, each overwrote the last, and the last one won. This patch generalizes things by moving the relevant fields: char *ipv4_address; /**< Configured IPv4 address */ int ipv4_netmask; /**< Configured IPv4 netmask */ char *ipv4_broadcast; from (struct etherinfo) into a new Python class, currently named PyNetlinkIPv4Address. This object has a sane repr(): >>> ethtool.get_interfaces_info('eth1')[0].get_ipv4_addresses() [ethtool.NetlinkIPv4Address(address='192.168.1.10', netmask=24, broadcast='192.168.1.255')] and attributes: >>> print [iface.address for iface in ethtool.get_interfaces_info('eth1')[0].get_ipv4_addresses()] ['192.168.1.10'] >>> print [iface.netmask for iface in ethtool.get_interfaces_info('eth1')[0].get_ipv4_addresses()] [24] >>> print [iface.broadcast for iface in ethtool.get_interfaces_info('eth1')[0].get_ipv4_addresses()] ['192.168.1.255'] The (struct etherinfo) then gains a new field: PyObject *ipv4_addresses; /**< list of PyNetlinkIPv4Address instances */ which is created before starting the query, and populated by the callback as responses come in. All direct usage of the old fields (which assumed a single IPv4 address) are changed to use the last entry in the list (if any), to mimic the old behavior. dump_etherinfo() and _ethtool_etherinfo_str() are changed to loop over all of the IPv4 addresses when outputting, rather than just outputting one. Caveats: * the exact terminology is probably incorrect: I'm not a networking specialist * the relationship between each of devices, get_interfaces_info() results, and addresses seems both unclear and messy to me: how changable is the API? >>> ethtool.get_interfaces_info('eth1')[0].get_ipv4_addresses() [ethtool.NetlinkIPv4Address(address='192.168.1.10', netmask=24, broadcast='192.168.1.255')] It seems that an etherinfo object relates to a device: perhaps it should be named as such? But it may be too late to make this change. Notes: The _ethtool_etherinfo_members array within python-ethtool/etherinfo_obj.c was broken: it defined 4 attributes of type PyObject*, to be extracted from etherinfo_py->data, which is of a completed different type. If these PyMemberDef fields were ever used, Python would segfault. Thankfully _ethtool_etherinfo_getter() has handlers for these attributes, and gets called first. This is a modified version of the patch applied downstream in RHEL 6.4 within python-ethtool-0.6-3.el6: python-ethtool-0.6-add-get_ipv4_addresses-method.patch ported to take account of 508ffffbb3c48eeeb11eeab2bf971180fe4e1940
* Only open the NETLINK interface when neededDavid Sommerseth2011-04-111-2/+4
| | | | | | | | | Do not open a NETLINK connection when loading the module, but rahter open it when needed. In a case where multiple users needs the connection, it will be shared and only closed when the last active user is done. Signed-off-by: David Sommerseth <davids@redhat.com>
* RETURN_STRING() did not use Py_INCREF() when returning Py_NoneDavid Sommerseth2011-02-251-1/+1
| | | | | | | | | | | | | | | From RH BZ#680269: #define RETURN_STRING(str) (str ? PyString_FromString(str) : Py_None) This isn't incrementing the reference count on the Py_None singleton when it should be (the caller assumes that it "owns" a ref on the result of _getter, and will decref it), it could cause the python process to bail out: "Fatal Python error: deallocating None" if run repeatedly. Reported-by: Dave Malcolm <dmalcolm@redhat.com> Signed-off-by: David Sommerseth <davids@redhat.com>
* Get rid of not needed struct wrappingDavid Sommerseth2010-08-031-8/+1
| | | | | | | | | | The struct nl_handle was wrapped inside struct _nlconnection. This is really not needed if open_netlink() and close_netlink() functions uses "pointer's pointer" (struct nl_handle **) instead. Removes also the need to declare a static struct _nlconnection, as the global nlconnection variable can now be a pointer as well. Signed-off-by: David Sommerseth <davids@redhat.com>
* Added missing copyright notifications and updated where neededDavid Sommerseth2010-08-031-0/+15
| | | | Signed-off-by: David Sommerseth <davids@redhat.com>
* Renamed etherinfo_ipv6_py to etherinfo_ipv6addr_pyDavid Sommerseth2010-08-021-1/+1
| | | | | | The new name reflects the contents of the data type better. Signed-off-by: David Sommerseth <davids@redhat.com>
* Improved documentation in the codeDavid Sommerseth2010-08-021-16/+31
| | | | Signed-off-by: David Sommerseth <davids@redhat.com>
* Improved IPv6 supportDavid Sommerseth2010-07-301-2/+23
| | | | | | | | | | | | | | | | | | | | | | | | | | | | As the IPv6 protocol allows a single device to have more than one IPv6 address, the previous implementation did not provide all IPv6 information. It would reject all except the last parsed IPv6 address. NOTE: This implementation will break the previous API. This change removes the ethtool.etherinfo.ipv6_address and ethtool.etherinfo.ipv6_netmask members. A new member is added, ethtool.etherinfo.ipv6_addresses (in plural). This contains a tupple list containing of ethtool.etherinfo_ipv6addr objects, one object for each configured IPv6 address on the device. These objects have the following members available: .address - The IPv6 address .netmask - The IPv6 netmask (in bit notation) .scope - A string with the IPv6 address scope Example code: import ethtool devs = ethtool.get_interfaces_info('eth0') for ip6 in devs[0].ipv6_addresses: print "[%s] %s/%i" % (ip6.scope, ip6.address, ip6.netmask) Signed-off-by: David Sommerseth <davids@redhat.com>
* Updated to fetch the interface information when the "getter" function triggersDavid Sommerseth2010-04-281-2/+27
|
* First cut at a python etherinfo class in C. Does nothing useful yet.David Sommerseth2009-09-041-0/+23