diff --git a/python-ethtool/etherinfo.c b/python-ethtool/etherinfo.c index 3d2072b..23f03c6 100644 --- a/python-ethtool/etherinfo.c +++ b/python-ethtool/etherinfo.c @@ -30,6 +30,52 @@ #include "etherinfo_struct.h" #include "etherinfo.h" +#ifdef LIBNL_1_0 +#define NLHDR_COMMON \ + int ce_refcnt; \ + struct nl_object_ops * ce_ops; \ + struct nl_cache * ce_cache; \ + struct nl_list_head ce_list; \ + int ce_msgtype; \ + int ce_flags; \ + uint32_t ce_mask; + +struct nl_cache +{ + struct nl_list_head c_items; + int c_nitems; + int c_iarg1; + int c_iarg2; + struct nl_cache_ops * c_ops; +}; + +struct nl_object +{ + NLHDR_COMMON +}; + +void nl_cache_free(struct nl_cache *cache) +{ + struct nl_object *obj, *tmp; + + if( !cache ) + return; + + nl_list_for_each_entry_safe(obj, tmp, &cache->c_items, ce_list) { + struct nl_cache *cache = obj->ce_cache; + if( !cache ) { + break; + } + + nl_list_del(&obj->ce_list); + obj->ce_cache = NULL; + nl_object_put(obj); + cache->c_nitems--; + } + free(cache); +} +#endif + /* * * Internal functions for working with struct etherinfo diff --git a/setup.py b/setup.py index bde04dc..9adff64 100644 --- a/setup.py +++ b/setup.py @@ -67,7 +67,8 @@ setup(name='ethtool', include_dirs = libnl['include'], library_dirs = libnl['libdirs'], libraries = libnl['libs'], - define_macros = [('VERSION', '"%s"' % version)] + define_macros = [('VERSION', '"%s"' % version), + ('LIBNL_1_0', None)] ) ] )