1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
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)]
)
]
)
|