diff --git a/python-ethtool/etherinfo.c b/python-ethtool/etherinfo.c index 3f2a3e6..179f593 100644 --- a/python-ethtool/etherinfo.c +++ b/python-ethtool/etherinfo.c @@ -21,7 +21,6 @@ #include #include #include -#include #include #include #include @@ -34,6 +33,52 @@ pthread_mutex_t nlc_counter_mtx = PTHREAD_MUTEX_INITIALIZER; +#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 @@ -411,13 +456,6 @@ int open_netlink(struct etherinfo_obj_data *data) *data->nlc = nl_handle_alloc(); nl_connect(*data->nlc, NETLINK_ROUTE); if( (*data->nlc != NULL) ) { - /* Force O_CLOEXEC flag on the NETLINK socket */ - if( fcntl(nl_socket_get_fd(*data->nlc), F_SETFD, FD_CLOEXEC) == -1 ) { - fprintf(stderr, - "**WARNING** Failed to set O_CLOEXEC on NETLINK socket: %s\n", - strerror(errno)); - } - /* Tag this object as an active user */ pthread_mutex_lock(&nlc_counter_mtx); (*data->nlc_users)++; diff --git a/setup.py b/setup.py index 99dc718..4b2fcf3 100644 --- a/setup.py +++ b/setup.py @@ -64,7 +64,8 @@ def _str2list(pkgstr, onlystr): 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)] ) ] )