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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
|
https://github.com/ofalk/libdnet/pull/104
From de57a2349172148496386e284db91abe6406b02a Mon Sep 17 00:00:00 2001
From: "Z. Liu" <zhixu.liu@gmail.com>
Date: Wed, 19 Feb 2025 11:37:37 +0800
Subject: [PATCH 1/2] python/dnet.pyx: fix incompatible-function-pointer-types
for modern compiler
which is error now, see https://bugs.gentoo.org/933360,
clang 19 (maybe earlier) has the same problem too
Signed-off-by: Z. Liu <zhixu.liu@gmail.com>
---
python/dnet.pyx | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
diff --git a/python/dnet.pyx b/python/dnet.pyx
index 4e3604f..04db2c6 100644
--- a/python/dnet.pyx
+++ b/python/dnet.pyx
@@ -661,7 +661,7 @@ cdef extern from *:
addr_t arp_ha
ctypedef struct arp_t:
int __xxx
- ctypedef int (*arp_handler)(arp_entry *entry, void *arg) except -1
+ ctypedef int (*arp_handler)(const arp_entry *entry, void *arg) except -1
arp_t *arp_open()
int arp_add(arp_t *arp, arp_entry *entry)
@@ -687,7 +687,7 @@ ARP_OP_REPLY = 2 # /* response giving hardware address */
ARP_OP_REVREQUEST = 3 # /* request to resolve pa given ha */
ARP_OP_REVREPLY = 4 # /* response giving protocol address */
-cdef int __arp_callback(arp_entry *entry, void *arg) except -1:
+cdef int __arp_callback(const arp_entry *entry, void *arg) except -1:
f, a = <object>arg
pa, ha = addr(), addr()
(<addr>pa)._addr = entry.arp_pa
@@ -911,7 +911,7 @@ cdef extern from *:
addr_t intf_alias_addrs[8] # XXX
ctypedef struct intf_t:
int __xxx
- ctypedef int (*intf_handler)(intf_entry *entry, void *arg) except -1
+ ctypedef int (*intf_handler)(const intf_entry *entry, void *arg) except -1
intf_t *intf_open()
int intf_get(intf_t *intf, intf_entry *entry)
@@ -933,7 +933,7 @@ INTF_FLAG_NOARP = 0x08 # /* disable ARP */
INTF_FLAG_BROADCAST = 0x10 # /* supports broadcast (r/o) */
INTF_FLAG_MULTICAST = 0x20 # /* supports multicast (r/o) */
-cdef object ifent_to_dict(intf_entry *entry):
+cdef object ifent_to_dict(const intf_entry *entry):
d = {}
d['name'] = entry.intf_name
d['type'] = entry.intf_type
@@ -970,7 +970,7 @@ cdef dict_to_ifent(object d, intf_entry *entry):
for i from 0 <= i < entry.intf_alias_num:
entry.intf_alias_addrs[i] = (<addr>d['alias_addrs'][i])._addr
-cdef int __intf_callback(intf_entry *entry, void *arg) except -1:
+cdef int __intf_callback(const intf_entry *entry, void *arg) except -1:
f, a = <object>arg
ret = f(ifent_to_dict(entry), a)
if not ret:
@@ -1077,7 +1077,7 @@ cdef extern from *:
addr_t route_gw
ctypedef struct route_t:
int __xxx
- ctypedef int (*route_handler)(route_entry *entry, void *arg) except -1
+ ctypedef int (*route_handler)(const route_entry *entry, void *arg) except -1
route_t *route_open()
int route_add(route_t *route, route_entry *entry)
@@ -1086,7 +1086,7 @@ cdef extern from *:
int route_loop(route_t *route, route_handler callback, void *arg)
route_t *route_close(route_t *route)
-cdef int __route_callback(route_entry *entry, void *arg) except -1:
+cdef int __route_callback(const route_entry *entry, void *arg) except -1:
f, a = <object>arg
dst, gw = addr(), addr()
(<addr>dst)._addr = entry.route_dst
@@ -1183,7 +1183,7 @@ cdef extern from *:
ctypedef struct fw_t:
int __xxx
- ctypedef int (*fw_handler)(fw_rule *rule, void *arg) except -1
+ ctypedef int (*fw_handler)(const fw_rule *rule, void *arg) except -1
fw_t *fw_open()
int fw_add(fw_t *f, fw_rule *rule)
@@ -1197,7 +1197,7 @@ FW_OP_BLOCK = 2
FW_DIR_IN = 1
FW_DIR_OUT = 2
-cdef object rule_to_dict(fw_rule *rule):
+cdef object rule_to_dict(const fw_rule *rule):
d = {}
d['device'] = rule.fw_device
d['op'] = rule.fw_op
@@ -1235,7 +1235,7 @@ cdef dict_to_rule(object d, fw_rule *rule):
rule.fw_dport[0] = d['dport'][0]
rule.fw_dport[1] = d['dport'][1]
-cdef int __fw_callback(fw_rule *rule, void *arg) except -1:
+cdef int __fw_callback(const fw_rule *rule, void *arg) except -1:
f, a = <object>arg
ret = f(rule_to_dict(rule), a)
if not ret:
--
2.45.2
From 0a742400b2167f67067e13bfcbecb9f17a7eefe8 Mon Sep 17 00:00:00 2001
From: "Z. Liu" <zhixu.liu@gmail.com>
Date: Thu, 3 Apr 2025 08:09:26 +0000
Subject: [PATCH 2/2] python/dnet.pyx: fix -Wincompatible-pointer-types
reported by gcc14
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
./dnet.c:8451:52: error: passing argument 2 of ‘PyObject_AsReadBuffer’ from incompatible pointer type [-Wincompatible-pointer-types]
8451 | __pyx_t_1 = (PyObject_AsReadBuffer(__pyx_v_pkt, (&__pyx_v_p), (&__pyx_v_n)) == 0);
| ~^~~~~~~~~~~
| |
| char **
/usr/include/python3.12/abstract.h:370:52: note: expected ‘const void **’ but argument is of type ‘char **’
370 | const void **buffer,
| ~~~~~~~~~~~~~^~~~~~
./dnet.c:8451:66: error: passing argument 3 of ‘PyObject_AsReadBuffer’ from incompatible pointer type [-Wincompatible-pointer-types]
8451 | __pyx_t_1 = (PyObject_AsReadBuffer(__pyx_v_pkt, (&__pyx_v_p), (&__pyx_v_n)) == 0);
| ~^~~~~~~~~~~
| |
| int *
/usr/include/python3.12/abstract.h:371:51: note: expected ‘Py_ssize_t *’ {aka ‘long int *’} but argument is of type ‘int *’
371 | Py_ssize_t *buffer_len);
| ~~~~~~~~~~~~^~~~~~~~~~
Signed-off-by: Z. Liu <zhixu.liu@gmail.com>
---
python/dnet.pyx | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/python/dnet.pyx b/python/dnet.pyx
index 04db2c6..6aefaa2 100644
--- a/python/dnet.pyx
+++ b/python/dnet.pyx
@@ -25,7 +25,7 @@ cdef extern from "dnet.h":
cdef extern from "Python.h":
object PyBytes_FromStringAndSize(char *s, int len)
int PyBytes_Size(object o)
- int PyObject_AsReadBuffer(object o, char **pp, int *lenp)
+ int PyObject_AsReadBuffer(object o, const void **pp, ssize_t *lenp)
int PyLong_Check(object o)
int PyLong_Check(object o)
long PyLong_AsLong(object o)
@@ -294,8 +294,8 @@ def ip_checksum(pkt):
"""
cdef char buf[2048]
cdef char *p
- cdef int n
- if PyObject_AsReadBuffer(pkt, &p, &n) == 0:
+ cdef ssize_t n
+ if PyObject_AsReadBuffer(pkt, <const void **>&p, &n) == 0:
if n < 2048:
memcpy(buf, p, n)
__ip_checksum(buf, n)
@@ -310,8 +310,8 @@ def ip_checksum(pkt):
def ip_cksum_add(buf, int sum):
cdef char *p
- cdef int n
- if PyObject_AsReadBuffer(buf, &p, &n) == 0:
+ cdef ssize_t n
+ if PyObject_AsReadBuffer(buf, <const void **>&p, &n) == 0:
return __ip_cksum_add(p, n, sum)
else:
raise TypeError
--
2.45.2
|