libdnet icon indicating copy to clipboard operation
libdnet copied to clipboard

1.14: libdnet is not LTO ready

Open kloczek opened this issue 3 years ago • 11 comments

Summary stats about compile/link time warnings:

[tkloczko@barrel SPECS]$ rpmbuild -ba --with check libdnet.spec --quiet 2>&1 | grep -- -W | sed 's/.*\[//; s/\]//' | sort | uniq -c | sort -nr
     55 -Wunused-variable
     25 -Wparentheses
     22 -Wunused-label
     14 -Wpointer-sign
     13 -Wunused-function
     10 -Wincompatible-pointer-types
      3 -Wlto-type-mismatch
      2 -Wdeprecated-declarations
      1 -Wunused-result
      1 -Wimplicit-function-declaration

Mosts importand are those -Wlto-type-mismatch warnings because they are trashing LTO. Here is the full warnings log:

rand.c: In function 'rand_open':
rand.c:84:17: warning: ignoring return value of 'read' declared with attribute 'warn_unused_result' [-Wunused-result]
   84 |                 read(fd, seed + sizeof(*tv), sizeof(seed) - sizeof(*tv));
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../include/config.h:298:5: warning: type of 'strlcpy' does not match original declaration [-Wlto-type-mismatch]
  298 | int strlcpy(char *, const char *, int);
      |     ^
strlcpy.c:43:1: note: return value type mismatch
   43 | strlcpy(dst, src, siz)
      | ^
strlcpy.c:43:1: note: type 'size_t' should match type 'int'
strlcpy.c:43:1: note: 'strlcpy' was previously declared here
strlcpy.c:43:1: note: code may be misoptimized unless '-fno-strict-aliasing' is used
./dnet.c: In function ‘__pyx_f_4dnet_3eth_get’:
./dnet.c:583:49: warning: pointer targets in passing argument 1 of ‘PyBytes_FromStringAndSize’ differ in signedness [-Wpointer-sign]
  583 |   __pyx_2 = PyBytes_FromStringAndSize(__pyx_v_ea.data,6); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 120; goto __pyx_L1;}
      |                                       ~~~~~~~~~~^~~~~
      |                                                 |
      |                                                 uint8_t * {aka unsigned char *}
In file included from /usr/include/python3.8/Python.h:96,
                 from ./dnet.c:5:
/usr/include/python3.8/bytesobject.h:51:50: note: expected ‘const char *’ but argument is of type ‘uint8_t *’ {aka ‘unsigned char *’}
   51 | PyAPI_FUNC(PyObject *) PyBytes_FromStringAndSize(const char *, Py_ssize_t);
      |                                                  ^~~~~~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_3eth_set’:
./dnet.c:615:46: warning: pointer targets in passing argument 1 of ‘__pyx_f_4dnet___memcpy’ differ in signedness [-Wpointer-sign]
  615 |   __pyx_1 = __pyx_f_4dnet___memcpy(__pyx_v_ea.data,__pyx_v_value,6); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 130; goto __pyx_L1;}
      |                                    ~~~~~~~~~~^~~~~
      |                                              |
      |                                              uint8_t * {aka unsigned char *}
./dnet.c:400:48: note: expected ‘char *’ but argument is of type ‘uint8_t *’ {aka ‘unsigned char *’}
  400 | static PyObject *__pyx_f_4dnet___memcpy(char (*__pyx_v_dst),PyObject *__pyx_v_src,int __pyx_v_n) {
      |                                         ~~~~~~~^~~~~~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_3eth___dealloc__’:
./dnet.c:693:3: warning: label ‘__pyx_L1’ defined but not used [-Wunused-label]
  693 |   __pyx_L1:;
      |   ^~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_eth_ntoa’:
./dnet.c:711:46: warning: pointer targets in passing argument 1 of ‘__pyx_f_4dnet___memcpy’ differ in signedness [-Wpointer-sign]
  711 |   __pyx_1 = __pyx_f_4dnet___memcpy(__pyx_v_ea.data,__pyx_v_buf,6); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 151; goto __pyx_L1;}
      |                                    ~~~~~~~~~~^~~~~
      |                                              |
      |                                              uint8_t * {aka unsigned char *}
./dnet.c:400:48: note: expected ‘char *’ but argument is of type ‘uint8_t *’ {aka ‘unsigned char *’}
  400 | static PyObject *__pyx_f_4dnet___memcpy(char (*__pyx_v_dst),PyObject *__pyx_v_src,int __pyx_v_n) {
      |                                         ~~~~~~~^~~~~~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_eth_aton’:
./dnet.c:763:49: warning: pointer targets in passing argument 1 of ‘PyBytes_FromStringAndSize’ differ in signedness [-Wpointer-sign]
  763 |   __pyx_3 = PyBytes_FromStringAndSize(__pyx_v_ea.data,6); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 160; goto __pyx_L1;}
      |                                       ~~~~~~~~~~^~~~~
      |                                                 |
      |                                                 uint8_t * {aka unsigned char *}
In file included from /usr/include/python3.8/Python.h:96,
                 from ./dnet.c:5:
/usr/include/python3.8/bytesobject.h:51:50: note: expected ‘const char *’ but argument is of type ‘uint8_t *’ {aka ‘unsigned char *’}
   51 | PyAPI_FUNC(PyObject *) PyBytes_FromStringAndSize(const char *, Py_ssize_t);
      |                                                  ^~~~~~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_eth_pack_hdr’:
./dnet.c:801:45: warning: pointer targets in passing argument 1 of ‘__pyx_f_4dnet___memcpy’ differ in signedness [-Wpointer-sign]
  801 |   __pyx_1 = __pyx_f_4dnet___memcpy(__pyx_v_s.data,__pyx_v_src,6); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; goto __pyx_L1;}
      |                                    ~~~~~~~~~^~~~~
      |                                             |
      |                                             uint8_t * {aka unsigned char *}
./dnet.c:400:48: note: expected ‘char *’ but argument is of type ‘uint8_t *’ {aka ‘unsigned char *’}
  400 | static PyObject *__pyx_f_4dnet___memcpy(char (*__pyx_v_dst),PyObject *__pyx_v_src,int __pyx_v_n) {
      |                                         ~~~~~~~^~~~~~~~~~~~
./dnet.c:805:45: warning: pointer targets in passing argument 1 of ‘__pyx_f_4dnet___memcpy’ differ in signedness [-Wpointer-sign]
  805 |   __pyx_1 = __pyx_f_4dnet___memcpy(__pyx_v_d.data,__pyx_v_dst,6); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; goto __pyx_L1;}
      |                                    ~~~~~~~~~^~~~~
      |                                             |
      |                                             uint8_t * {aka unsigned char *}
./dnet.c:400:48: note: expected ‘char *’ but argument is of type ‘uint8_t *’ {aka ‘unsigned char *’}
  400 | static PyObject *__pyx_f_4dnet___memcpy(char (*__pyx_v_dst),PyObject *__pyx_v_src,int __pyx_v_n) {
      |                                         ~~~~~~~^~~~~~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_2ip___dealloc__’:
./dnet.c:918:3: warning: label ‘__pyx_L1’ defined but not used [-Wunused-label]
  918 |   __pyx_L1:;
      |   ^~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_ip_checksum’:
./dnet.c:1046:3: warning: ‘PyObject_AsReadBuffer’ is deprecated [-Wdeprecated-declarations]
 1046 |   __pyx_1 = (PyObject_AsReadBuffer(__pyx_v_pkt,(&__pyx_v_p),(&__pyx_v_n)) == 0);
      |   ^~~~~~~
In file included from /usr/include/python3.8/Python.h:147,
                 from ./dnet.c:5:
/usr/include/python3.8/abstract.h:337:17: note: declared here
  337 | PyAPI_FUNC(int) PyObject_AsReadBuffer(PyObject *obj,
      |                 ^~~~~~~~~~~~~~~~~~~~~
./dnet.c:1046:49: warning: passing argument 2 of ‘PyObject_AsReadBuffer’ from incompatible pointer type [-Wincompatible-pointer-types]
 1046 |   __pyx_1 = (PyObject_AsReadBuffer(__pyx_v_pkt,(&__pyx_v_p),(&__pyx_v_n)) == 0);
      |                                                ~^~~~~~~~~~~
      |                                                 |
      |                                                 char **
In file included from /usr/include/python3.8/Python.h:147,
                 from ./dnet.c:5:
/usr/include/python3.8/abstract.h:338:52: note: expected ‘const void **’ but argument is of type ‘char **’
  338 |                                       const void **buffer,
      |                                       ~~~~~~~~~~~~~^~~~~~
./dnet.c:1046:62: warning: passing argument 3 of ‘PyObject_AsReadBuffer’ from incompatible pointer type [-Wincompatible-pointer-types]
 1046 |   __pyx_1 = (PyObject_AsReadBuffer(__pyx_v_pkt,(&__pyx_v_p),(&__pyx_v_n)) == 0);
      |                                                             ~^~~~~~~~~~~
      |                                                              |
      |                                                              int *
In file included from /usr/include/python3.8/Python.h:147,
                 from ./dnet.c:5:
/usr/include/python3.8/abstract.h:339:51: note: expected ‘Py_ssize_t *’ {aka ‘long int *’} but argument is of type ‘int *’
  339 |                                       Py_ssize_t *buffer_len);
      |                                       ~~~~~~~~~~~~^~~~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_ip_cksum_add’:
./dnet.c:1127:3: warning: ‘PyObject_AsReadBuffer’ is deprecated [-Wdeprecated-declarations]
 1127 |   __pyx_1 = (PyObject_AsReadBuffer(__pyx_v_buf,(&__pyx_v_p),(&__pyx_v_n)) == 0);
      |   ^~~~~~~
In file included from /usr/include/python3.8/Python.h:147,
                 from ./dnet.c:5:
/usr/include/python3.8/abstract.h:337:17: note: declared here
  337 | PyAPI_FUNC(int) PyObject_AsReadBuffer(PyObject *obj,
      |                 ^~~~~~~~~~~~~~~~~~~~~
./dnet.c:1127:49: warning: passing argument 2 of ‘PyObject_AsReadBuffer’ from incompatible pointer type [-Wincompatible-pointer-types]
 1127 |   __pyx_1 = (PyObject_AsReadBuffer(__pyx_v_buf,(&__pyx_v_p),(&__pyx_v_n)) == 0);
      |                                                ~^~~~~~~~~~~
      |                                                 |
      |                                                 char **
In file included from /usr/include/python3.8/Python.h:147,
                 from ./dnet.c:5:
/usr/include/python3.8/abstract.h:338:52: note: expected ‘const void **’ but argument is of type ‘char **’
  338 |                                       const void **buffer,
      |                                       ~~~~~~~~~~~~~^~~~~~
./dnet.c:1127:62: warning: passing argument 3 of ‘PyObject_AsReadBuffer’ from incompatible pointer type [-Wincompatible-pointer-types]
 1127 |   __pyx_1 = (PyObject_AsReadBuffer(__pyx_v_buf,(&__pyx_v_p),(&__pyx_v_n)) == 0);
      |                                                             ~^~~~~~~~~~~
      |                                                              |
      |                                                              int *
In file included from /usr/include/python3.8/Python.h:147,
                 from ./dnet.c:5:
/usr/include/python3.8/abstract.h:339:51: note: expected ‘Py_ssize_t *’ {aka ‘long int *’} but argument is of type ‘int *’
  339 |                                       Py_ssize_t *buffer_len);
      |                                       ~~~~~~~~~~~~^~~~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_4addr___init__’:
./dnet.c:1473:7: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
 1473 |   if (__pyx_1=PyObject_RichCompareBool(__pyx_v_addrtxt, Py_None, Py_EQ) == 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 445; goto __pyx_L1;}
      |       ^~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_4addr_4data___get__’:
./dnet.c:1661:7: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
 1661 |   if (__pyx_3 = PyObject_RichCompareBool(__pyx_1, __pyx_2, Py_EQ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 472; goto __pyx_L1;}
      |       ^~~~~~~
./dnet.c:1676:7: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
 1676 |   if (__pyx_3=PyObject_RichCompareBool(__pyx_2, __pyx_1, Py_EQ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 474; goto __pyx_L1;}
      |       ^~~~~~~
./dnet.c:1691:7: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
 1691 |   if (__pyx_3=PyObject_RichCompareBool(__pyx_1, __pyx_2, Py_EQ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 476; goto __pyx_L1;}
      |       ^~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_4addr_3eth___get__’:
./dnet.c:1741:7: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
 1741 |   if (__pyx_3 = PyObject_RichCompareBool(__pyx_1, __pyx_2,Py_EQ ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 484; goto __pyx_L1;}
      |       ^~~~~~~
In file included from ../include/dnet.h:17,
                 from ./dnet.c:24:
../include/dnet/addr.h:35:33: warning: pointer targets in passing argument 1 of ‘PyBytes_FromStringAndSize’ differ in signedness [-Wpointer-sign]
   35 | #define addr_data8      __addr_u.__data8
./dnet.c:1757:92: note: in expansion of macro ‘addr_data8’
 1757 |   __pyx_2 = PyBytes_FromStringAndSize(((struct __pyx_obj_4dnet_addr *)__pyx_v_self)->_addr.addr_data8,6); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 486; goto __pyx_L1;}
      |                                                                                            ^~~~~~~~~~
In file included from /usr/include/python3.8/Python.h:96,
                 from ./dnet.c:5:
/usr/include/python3.8/bytesobject.h:51:50: note: expected ‘const char *’ but argument is of type ‘uint8_t *’ {aka ‘unsigned char *’}
   51 | PyAPI_FUNC(PyObject *) PyBytes_FromStringAndSize(const char *, Py_ssize_t);
      |                                                  ^~~~~~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_4addr_3eth___set__’:
./dnet.c:1791:7: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
 1791 |   if (__pyx_3=PyObject_RichCompareBool(__pyx_1, __pyx_2,Py_EQ ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 489; goto __pyx_L1;}
      |       ^~~~~~~
In file included from ../include/dnet.h:17,
                 from ./dnet.c:24:
../include/dnet/addr.h:35:33: warning: pointer targets in passing argument 1 of ‘__pyx_f_4dnet___memcpy’ differ in signedness [-Wpointer-sign]
   35 | #define addr_data8      __addr_u.__data8
./dnet.c:1807:89: note: in expansion of macro ‘addr_data8’
 1807 |   __pyx_2 = __pyx_f_4dnet___memcpy(((struct __pyx_obj_4dnet_addr *)__pyx_v_self)->_addr.addr_data8,__pyx_v_value,6); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 491; goto __pyx_L1;}
      |                                                                                         ^~~~~~~~~~
./dnet.c:400:48: note: expected ‘char *’ but argument is of type ‘uint8_t *’ {aka ‘unsigned char *’}
  400 | static PyObject *__pyx_f_4dnet___memcpy(char (*__pyx_v_dst),PyObject *__pyx_v_src,int __pyx_v_n) {
      |                                         ~~~~~~~^~~~~~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_4addr_2ip___get__’:
./dnet.c:1850:7: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
 1850 |   if (__pyx_3=PyObject_RichCompareBool(__pyx_1, __pyx_2, Py_EQ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 498; goto __pyx_L1;}
      |       ^~~~~~~
In file included from ../include/dnet.h:17,
                 from ./dnet.c:24:
../include/dnet/addr.h:35:33: warning: pointer targets in passing argument 1 of ‘PyBytes_FromStringAndSize’ differ in signedness [-Wpointer-sign]
   35 | #define addr_data8      __addr_u.__data8
./dnet.c:1866:92: note: in expansion of macro ‘addr_data8’
 1866 |   __pyx_2 = PyBytes_FromStringAndSize(((struct __pyx_obj_4dnet_addr *)__pyx_v_self)->_addr.addr_data8,4); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 500; goto __pyx_L1;}
      |                                                                                            ^~~~~~~~~~
In file included from /usr/include/python3.8/Python.h:96,
                 from ./dnet.c:5:
/usr/include/python3.8/bytesobject.h:51:50: note: expected ‘const char *’ but argument is of type ‘uint8_t *’ {aka ‘unsigned char *’}
   51 | PyAPI_FUNC(PyObject *) PyBytes_FromStringAndSize(const char *, Py_ssize_t);
      |                                                  ^~~~~~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_4addr_2ip___set__’:
./dnet.c:1914:7: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
 1914 |   if (__pyx_1 = PyObject_RichCompareBool(__pyx_2, __pyx_3, Py_EQ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 508; goto __pyx_L1;}
      |       ^~~~~~~
In file included from ../include/dnet.h:17,
                 from ./dnet.c:24:
../include/dnet/addr.h:35:33: warning: pointer targets in passing argument 1 of ‘__pyx_f_4dnet___memcpy’ differ in signedness [-Wpointer-sign]
   35 | #define addr_data8      __addr_u.__data8
./dnet.c:1930:91: note: in expansion of macro ‘addr_data8’
 1930 |     __pyx_3 = __pyx_f_4dnet___memcpy(((struct __pyx_obj_4dnet_addr *)__pyx_v_self)->_addr.addr_data8,__pyx_v_value,4); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 511; goto __pyx_L1;}
      |                                                                                           ^~~~~~~~~~
./dnet.c:400:48: note: expected ‘char *’ but argument is of type ‘uint8_t *’ {aka ‘unsigned char *’}
  400 | static PyObject *__pyx_f_4dnet___memcpy(char (*__pyx_v_dst),PyObject *__pyx_v_src,int __pyx_v_n) {
      |                                         ~~~~~~~^~~~~~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_4addr_3ip6___get__’:
./dnet.c:1975:7: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
 1975 |   if (__pyx_3 = PyObject_RichCompareBool(__pyx_1, __pyx_2, Py_EQ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 518; goto __pyx_L1;}
      |       ^~~~~~~
In file included from ../include/dnet.h:17,
                 from ./dnet.c:24:
../include/dnet/addr.h:35:33: warning: pointer targets in passing argument 1 of ‘PyBytes_FromStringAndSize’ differ in signedness [-Wpointer-sign]
   35 | #define addr_data8      __addr_u.__data8
./dnet.c:1991:92: note: in expansion of macro ‘addr_data8’
 1991 |   __pyx_2 = PyBytes_FromStringAndSize(((struct __pyx_obj_4dnet_addr *)__pyx_v_self)->_addr.addr_data8,16); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; goto __pyx_L1;}
      |                                                                                            ^~~~~~~~~~
In file included from /usr/include/python3.8/Python.h:96,
                 from ./dnet.c:5:
/usr/include/python3.8/bytesobject.h:51:50: note: expected ‘const char *’ but argument is of type ‘uint8_t *’ {aka ‘unsigned char *’}
   51 | PyAPI_FUNC(PyObject *) PyBytes_FromStringAndSize(const char *, Py_ssize_t);
      |                                                  ^~~~~~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_4addr_3ip6___set__’:
./dnet.c:2025:7: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
 2025 |   if (__pyx_3 = PyObject_RichCompareBool(__pyx_1, __pyx_2, Py_EQ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 523; goto __pyx_L1;}
      |       ^~~~~~~
In file included from ../include/dnet.h:17,
                 from ./dnet.c:24:
../include/dnet/addr.h:35:33: warning: pointer targets in passing argument 1 of ‘__pyx_f_4dnet___memcpy’ differ in signedness [-Wpointer-sign]
   35 | #define addr_data8      __addr_u.__data8
./dnet.c:2041:89: note: in expansion of macro ‘addr_data8’
 2041 |   __pyx_2 = __pyx_f_4dnet___memcpy(((struct __pyx_obj_4dnet_addr *)__pyx_v_self)->_addr.addr_data8,__pyx_v_value,16); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 525; goto __pyx_L1;}
      |                                                                                         ^~~~~~~~~~
./dnet.c:400:48: note: expected ‘char *’ but argument is of type ‘uint8_t *’ {aka ‘unsigned char *’}
  400 | static PyObject *__pyx_f_4dnet___memcpy(char (*__pyx_v_dst),PyObject *__pyx_v_src,int __pyx_v_n) {
      |                                         ~~~~~~~^~~~~~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_4addr___hash__’:
./dnet.c:2412:7: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
 2412 |   if (__pyx_3=PyObject_RichCompareBool(__pyx_1, __pyx_2, Py_EQ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 578; goto __pyx_L1;}
      |       ^~~~~~~
./dnet.c:2422:7: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
 2422 |   if (__pyx_3 = PyObject_RichCompareBool(__pyx_1, __pyx_2, Py_EQ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 579; goto __pyx_L1;}
      |       ^~~~~~~
./dnet.c:2432:7: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
 2432 |   if (__pyx_3=PyObject_RichCompareBool(__pyx_1, __pyx_2, Py_EQ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 580; goto __pyx_L1;}
      |       ^~~~~~~
./dnet.c:2466:3: warning: label ‘__pyx_L4’ defined but not used [-Wunused-label]
 2466 |   __pyx_L4:;
      |   ^~~~~~~~
./dnet.c:2464:5: warning: label ‘__pyx_L3’ defined but not used [-Wunused-label]
 2464 |     __pyx_L3:;
      |     ^~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_4addr___int__’:
./dnet.c:2518:7: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
 2518 |   if (__pyx_3=PyObject_RichCompareBool(__pyx_1, __pyx_2, Py_EQ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 594; goto __pyx_L1;}
      |       ^~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_4addr___iter__’:
./dnet.c:2598:7: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
 2598 |   if (__pyx_1 = PyObject_RichCompareBool(__pyx_2, __pyx_3,Py_EQ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 603; goto __pyx_L1;}
      |       ^~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_3arp_loop’:
./dnet.c:3120:88: warning: passing argument 2 of ‘arp_loop’ from incompatible pointer type [-Wincompatible-pointer-types]
 3120 |   __pyx_1 = PyLong_FromLong(arp_loop(((struct __pyx_obj_4dnet_arp *)__pyx_v_self)->arp,__pyx_f_4dnet___arp_callback,((void (*))__pyx_v__arg))); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 749; goto __pyx_L1;}
      |                                                                                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                                                                                        |
      |                                                                                        int (*)(struct arp_entry *, void *)
In file included from ../include/dnet.h:18,
                 from ./dnet.c:24:
../include/dnet/arp.h:101:43: note: expected ‘arp_handler’ {aka ‘int (*)(const struct arp_entry *, void *)’} but argument is of type ‘int (*)(struct arp_entry *, void *)’
  101 | int      arp_loop(arp_t *arp, arp_handler callback, void *arg);
      |                               ~~~~~~~~~~~~^~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_3arp___dealloc__’:
./dnet.c:3213:3: warning: label ‘__pyx_L1’ defined but not used [-Wunused-label]
 3213 |   __pyx_L1:;
      |   ^~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_arp_pack_hdr_ethip’:
./dnet.c:3249:46: warning: pointer targets in passing argument 1 of ‘__pyx_f_4dnet___memcpy’ differ in signedness [-Wpointer-sign]
 3249 |   __pyx_1 = __pyx_f_4dnet___memcpy(__pyx_v_sh.data,__pyx_v_sha,6); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 775; goto __pyx_L1;}
      |                                    ~~~~~~~~~~^~~~~
      |                                              |
      |                                              uint8_t * {aka unsigned char *}
./dnet.c:400:48: note: expected ‘char *’ but argument is of type ‘uint8_t *’ {aka ‘unsigned char *’}
  400 | static PyObject *__pyx_f_4dnet___memcpy(char (*__pyx_v_dst),PyObject *__pyx_v_src,int __pyx_v_n) {
      |                                         ~~~~~~~^~~~~~~~~~~~
./dnet.c:3253:46: warning: pointer targets in passing argument 1 of ‘__pyx_f_4dnet___memcpy’ differ in signedness [-Wpointer-sign]
 3253 |   __pyx_1 = __pyx_f_4dnet___memcpy(__pyx_v_dh.data,__pyx_v_dha,6); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 776; goto __pyx_L1;}
      |                                    ~~~~~~~~~~^~~~~
      |                                              |
      |                                              uint8_t * {aka unsigned char *}
./dnet.c:400:48: note: expected ‘char *’ but argument is of type ‘uint8_t *’ {aka ‘unsigned char *’}
  400 | static PyObject *__pyx_f_4dnet___memcpy(char (*__pyx_v_dst),PyObject *__pyx_v_src,int __pyx_v_n) {
      |                                         ~~~~~~~^~~~~~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_ifent_to_dict’:
./dnet.c:3494:7: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
 3494 |   if (__pyx_3 = PyObject_RichCompareBool(__pyx_1, __pyx_2, Py_EQ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 931; goto __pyx_L1;}
      |       ^~~~~~~
./dnet.c:3516:7: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
 3516 |   if (__pyx_3 = PyObject_RichCompareBool(__pyx_2, __pyx_1, Py_EQ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 933; goto __pyx_L1;}
      |       ^~~~~~~
./dnet.c:3538:7: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
 3538 |   if (__pyx_3 = PyObject_RichCompareBool(__pyx_1, __pyx_2, Py_EQ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 935; goto __pyx_L1;}
      |       ^~~~~~~
./dnet.c:3593:5: warning: label ‘__pyx_L7’ defined but not used [-Wunused-label]
 3593 |     __pyx_L7:;
      |     ^~~~~~~~
./dnet.c:3591:7: warning: label ‘__pyx_L6’ defined but not used [-Wunused-label]
 3591 |       __pyx_L6:;
      |       ^~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_dict_to_ifent’:
./dnet.c:3649:3: warning: implicit declaration of function ‘strlcpy’; did you mean ‘strncpy’? [-Wimplicit-function-declaration]
 3649 |   strlcpy(__pyx_v_entry->intf_name,__pyx_2,16);
      |   ^~~~~~~
      |   strncpy
./dnet.c:3747:5: warning: label ‘__pyx_L9’ defined but not used [-Wunused-label]
 3747 |     __pyx_L9:;
      |     ^~~~~~~~
./dnet.c:3745:7: warning: label ‘__pyx_L8’ defined but not used [-Wunused-label]
 3745 |       __pyx_L8:;
      |       ^~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_4intf_loop’:
./dnet.c:4137:91: warning: passing argument 2 of ‘intf_loop’ from incompatible pointer type [-Wincompatible-pointer-types]
 4137 |   __pyx_1 = PyLong_FromLong(intf_loop(((struct __pyx_obj_4dnet_intf *)__pyx_v_self)->intf,__pyx_f_4dnet___intf_callback,((void (*))__pyx_v__arg))); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1049; goto __pyx_L1;}
      |                                                                                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                                                                                           |
      |                                                                                           int (*)(struct intf_entry *, void *)
In file included from ../include/dnet.h:24,
                 from ./dnet.c:24:
../include/dnet/intf.h:64:44: note: expected ‘intf_handler’ {aka ‘int (*)(const struct intf_entry *, void *)’} but argument is of type ‘int (*)(struct intf_entry *, void *)’
   64 | int      intf_loop(intf_t *i, intf_handler callback, void *arg);
      |                               ~~~~~~~~~~~~~^~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_4intf___dealloc__’:
./dnet.c:4227:3: warning: label ‘__pyx_L1’ defined but not used [-Wunused-label]
 4227 |   __pyx_L1:;
      |   ^~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_5route_loop’:
./dnet.c:4558:94: warning: passing argument 2 of ‘route_loop’ from incompatible pointer type [-Wincompatible-pointer-types]
 4558 |   __pyx_1 = PyLong_FromLong(route_loop(((struct __pyx_obj_4dnet_route *)__pyx_v_self)->route,__pyx_f_4dnet___route_callback,((void (*))__pyx_v__arg))); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1148; goto __pyx_L1;}
      |                                                                                              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                                                                                              |
      |                                                                                              int (*)(struct route_entry *, void *)
In file included from ../include/dnet.h:25,
                 from ./dnet.c:24:
../include/dnet/route.h:31:47: note: expected ‘route_handler’ {aka ‘int (*)(const struct route_entry *, void *)’} but argument is of type ‘int (*)(struct route_entry *, void *)’
   31 | int      route_loop(route_t *r, route_handler callback, void *arg);
      |                                 ~~~~~~~~~~~~~~^~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_5route___dealloc__’:
./dnet.c:4648:3: warning: label ‘__pyx_L1’ defined but not used [-Wunused-label]
 4648 |   __pyx_L1:;
      |   ^~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_rule_to_dict’:
./dnet.c:4710:7: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
 4710 |   if (__pyx_2 = PyObject_RichCompareBool(__pyx_1, __pyx_3, Py_EQ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1196; goto __pyx_L1;}
      |       ^~~~~~~
./dnet.c:4732:7: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
 4732 |   if (__pyx_2 = PyObject_RichCompareBool(__pyx_3, __pyx_1, Py_EQ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1198; goto __pyx_L1;}
      |       ^~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_dict_to_rule’:
./dnet.c:4860:9: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
 4860 |     if (__pyx_3 = PyObject_RichCompareBool(__pyx_1, __pyx_4, Py_EQ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1213; goto __pyx_L1;}
      |         ^~~~~~~
./dnet.c:4867:11: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
 4867 |       if (__pyx_3 = PyObject_RichCompareBool(__pyx_1, __pyx_4, Py_EQ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1213; goto __pyx_L1;}
      |           ^~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_2fw_loop’:
./dnet.c:5218:85: warning: passing argument 2 of ‘fw_loop’ from incompatible pointer type [-Wincompatible-pointer-types]
 5218 |   __pyx_1 = PyLong_FromLong(fw_loop(((struct __pyx_obj_4dnet_fw *)__pyx_v_self)->fw,__pyx_f_4dnet___fw_callback,((void (*))__pyx_v__arg))); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1284; goto __pyx_L1;}
      |                                                                                     ^~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                                                                                     |
      |                                                                                     int (*)(struct fw_rule *, void *)
In file included from ../include/dnet.h:26,
                 from ./dnet.c:24:
../include/dnet/fw.h:50:38: note: expected ‘fw_handler’ {aka ‘int (*)(const struct fw_rule *, void *)’} but argument is of type ‘int (*)(struct fw_rule *, void *)’
   50 | int      fw_loop(fw_t *f, fw_handler callback, void *arg);
      |                           ~~~~~~~~~~~^~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_2fw___dealloc__’:
./dnet.c:5308:3: warning: label ‘__pyx_L1’ defined but not used [-Wunused-label]
 5308 |   __pyx_L1:;
      |   ^~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_4rand_get’:
./dnet.c:5372:7: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
 5372 |   if (__pyx_2 = PyObject_RichCompareBool(__pyx_v_len, __pyx_1, Py_EQ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1334; goto __pyx_L1;}
      |       ^~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_4rand_xrange’:
./dnet.c:5574:7: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
 5574 |   if (__pyx_1 = PyObject_RichCompareBool(__pyx_v_stop, Py_None, Py_EQ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1377; goto __pyx_L1;}
      |       ^~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_4rand___dealloc__’:
./dnet.c:5642:3: warning: label ‘__pyx_L1’ defined but not used [-Wunused-label]
 5642 |   __pyx_L1:;
      |   ^~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_13__rand_xrange___init__’:
./dnet.c:5738:3: warning: label ‘__pyx_L5’ defined but not used [-Wunused-label]
 5738 |   __pyx_L5:;
      |   ^~~~~~~~
./dnet.c:5731:5: warning: label ‘__pyx_L4’ defined but not used [-Wunused-label]
 5731 |     __pyx_L4:;
      |     ^~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_13__rand_xrange___iter__’:
./dnet.c:5800:3: warning: label ‘__pyx_L1’ defined but not used [-Wunused-label]
 5800 |   __pyx_L1:;
      |   ^~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_13__rand_xrange___len__’:
./dnet.c:5819:3: warning: label ‘__pyx_L1’ defined but not used [-Wunused-label]
 5819 |   __pyx_L1:;
      |   ^~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_13__rand_xrange___next__’:
./dnet.c:5892:5: warning: label ‘__pyx_L6’ defined but not used [-Wunused-label]
 5892 |     __pyx_L6:;
      |     ^~~~~~~~
./dnet.c:5890:7: warning: label ‘__pyx_L5’ defined but not used [-Wunused-label]
 5890 |       __pyx_L5:;
      |       ^~~~~~~~
./dnet.c:5856:5: warning: label ‘__pyx_L3’ defined but not used [-Wunused-label]
 5856 |     __pyx_L3:;
      |     ^~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_3tun_close’:
./dnet.c:6148:3: warning: label ‘__pyx_L1’ defined but not used [-Wunused-label]
 6148 |   __pyx_L1:;
      |   ^~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_3tun___dealloc__’:
./dnet.c:6182:3: warning: label ‘__pyx_L1’ defined but not used [-Wunused-label]
 6182 |   __pyx_L1:;
      |   ^~~~~~~~
./dnet.c: In function ‘__pyx_tp_new_4dnet_eth’:
./dnet.c:6404:31: warning: unused variable ‘p’ [-Wunused-variable]
 6404 |   struct __pyx_obj_4dnet_eth *p = (struct __pyx_obj_4dnet_eth *)o;
      |                               ^
./dnet.c: In function ‘__pyx_tp_dealloc_4dnet_eth’:
./dnet.c:6409:31: warning: unused variable ‘p’ [-Wunused-variable]
 6409 |   struct __pyx_obj_4dnet_eth *p = (struct __pyx_obj_4dnet_eth *)o;
      |                               ^
./dnet.c: In function ‘__pyx_tp_traverse_4dnet_eth’:
./dnet.c:6424:31: warning: unused variable ‘p’ [-Wunused-variable]
 6424 |   struct __pyx_obj_4dnet_eth *p = (struct __pyx_obj_4dnet_eth *)o;
      |                               ^
./dnet.c:6423:7: warning: unused variable ‘e’ [-Wunused-variable]
 6423 |   int e;
      |       ^
./dnet.c: In function ‘__pyx_tp_clear_4dnet_eth’:
./dnet.c:6429:31: warning: unused variable ‘p’ [-Wunused-variable]
 6429 |   struct __pyx_obj_4dnet_eth *p = (struct __pyx_obj_4dnet_eth *)o;
      |                               ^
./dnet.c: At top level:
./dnet.c:6477:3: warning: excess elements in struct initializer
 6477 |   0, /*nb_inplace_floor_divide*/
      |   ^
./dnet.c:6477:3: note: (near initialization for ‘__pyx_tp_as_number_eth’)
./dnet.c:6478:3: warning: excess elements in struct initializer
 6478 |   0, /*nb_inplace_true_divide*/
      |   ^
./dnet.c:6478:3: note: (near initialization for ‘__pyx_tp_as_number_eth’)
./dnet.c:6503:3: warning: excess elements in struct initializer
 6503 |   0, /*bf_getsegcount*/
      |   ^
./dnet.c:6503:3: note: (near initialization for ‘__pyx_tp_as_buffer_eth’)
./dnet.c:6504:3: warning: excess elements in struct initializer
 6504 |   0, /*bf_getcharbuffer*/
      |   ^
./dnet.c:6504:3: note: (near initialization for ‘__pyx_tp_as_buffer_eth’)
./dnet.c: In function ‘__pyx_tp_new_4dnet_ip’:
./dnet.c:6557:30: warning: unused variable ‘p’ [-Wunused-variable]
 6557 |   struct __pyx_obj_4dnet_ip *p = (struct __pyx_obj_4dnet_ip *)o;
      |                              ^
./dnet.c: In function ‘__pyx_tp_dealloc_4dnet_ip’:
./dnet.c:6562:30: warning: unused variable ‘p’ [-Wunused-variable]
 6562 |   struct __pyx_obj_4dnet_ip *p = (struct __pyx_obj_4dnet_ip *)o;
      |                              ^
./dnet.c: In function ‘__pyx_tp_traverse_4dnet_ip’:
./dnet.c:6577:30: warning: unused variable ‘p’ [-Wunused-variable]
 6577 |   struct __pyx_obj_4dnet_ip *p = (struct __pyx_obj_4dnet_ip *)o;
      |                              ^
./dnet.c:6576:7: warning: unused variable ‘e’ [-Wunused-variable]
 6576 |   int e;
      |       ^
./dnet.c: In function ‘__pyx_tp_clear_4dnet_ip’:
./dnet.c:6582:30: warning: unused variable ‘p’ [-Wunused-variable]
 6582 |   struct __pyx_obj_4dnet_ip *p = (struct __pyx_obj_4dnet_ip *)o;
      |                              ^
./dnet.c: At top level:
./dnet.c:6628:3: warning: excess elements in struct initializer
 6628 |   0, /*nb_inplace_floor_divide*/
      |   ^
./dnet.c:6628:3: note: (near initialization for ‘__pyx_tp_as_number_ip’)
./dnet.c:6629:3: warning: excess elements in struct initializer
 6629 |   0, /*nb_inplace_true_divide*/
      |   ^
./dnet.c:6629:3: note: (near initialization for ‘__pyx_tp_as_number_ip’)
./dnet.c:6654:3: warning: excess elements in struct initializer
 6654 |   0, /*bf_getsegcount*/
      |   ^
./dnet.c:6654:3: note: (near initialization for ‘__pyx_tp_as_buffer_ip’)
./dnet.c:6655:3: warning: excess elements in struct initializer
 6655 |   0, /*bf_getcharbuffer*/
      |   ^
./dnet.c:6655:3: note: (near initialization for ‘__pyx_tp_as_buffer_ip’)
./dnet.c: In function ‘__pyx_tp_new_4dnet_addr’:
./dnet.c:6708:32: warning: unused variable ‘p’ [-Wunused-variable]
 6708 |   struct __pyx_obj_4dnet_addr *p = (struct __pyx_obj_4dnet_addr *)o;
      |                                ^
./dnet.c: In function ‘__pyx_tp_dealloc_4dnet_addr’:
./dnet.c:6713:32: warning: unused variable ‘p’ [-Wunused-variable]
 6713 |   struct __pyx_obj_4dnet_addr *p = (struct __pyx_obj_4dnet_addr *)o;
      |                                ^
./dnet.c: In function ‘__pyx_tp_traverse_4dnet_addr’:
./dnet.c:6719:32: warning: unused variable ‘p’ [-Wunused-variable]
 6719 |   struct __pyx_obj_4dnet_addr *p = (struct __pyx_obj_4dnet_addr *)o;
      |                                ^
./dnet.c:6718:7: warning: unused variable ‘e’ [-Wunused-variable]
 6718 |   int e;
      |       ^
./dnet.c: In function ‘__pyx_tp_clear_4dnet_addr’:
./dnet.c:6724:32: warning: unused variable ‘p’ [-Wunused-variable]
 6724 |   struct __pyx_obj_4dnet_addr *p = (struct __pyx_obj_4dnet_addr *)o;
      |                                ^
./dnet.c: At top level:
./dnet.c:6839:3: warning: initialization of ‘PyObject * (*)(PyObject *, PyObject *)’ {aka ‘struct _object * (*)(struct _object *, struct _object *)’} from incompatible pointer type ‘PyObject * (*)(PyObject *)’ {aka ‘struct _object * (*)(struct _object *)’} [-Wincompatible-pointer-types]
 6839 |   __pyx_f_4dnet_4addr___long__, /*nb_long*/
      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
./dnet.c:6839:3: note: (near initialization for ‘__pyx_tp_as_number_addr.nb_inplace_add’)
./dnet.c:6856:3: warning: excess elements in struct initializer
 6856 |   0, /*nb_inplace_floor_divide*/
      |   ^
./dnet.c:6856:3: note: (near initialization for ‘__pyx_tp_as_number_addr’)
./dnet.c:6857:3: warning: excess elements in struct initializer
 6857 |   0, /*nb_inplace_true_divide*/
      |   ^
./dnet.c:6857:3: note: (near initialization for ‘__pyx_tp_as_number_addr’)
./dnet.c:6882:3: warning: excess elements in struct initializer
 6882 |   0, /*bf_getsegcount*/
      |   ^
./dnet.c:6882:3: note: (near initialization for ‘__pyx_tp_as_buffer_addr’)
./dnet.c:6883:3: warning: excess elements in struct initializer
 6883 |   0, /*bf_getcharbuffer*/
      |   ^
./dnet.c:6883:3: note: (near initialization for ‘__pyx_tp_as_buffer_addr’)
./dnet.c:6895:3: warning: initialization of ‘PyAsyncMethods *’ from incompatible pointer type ‘int (*)(PyObject *, PyObject *)’ {aka ‘int (*)(struct _object *, struct _object *)’} [-Wincompatible-pointer-types]
 6895 |   __pyx_f_4dnet_4addr___cmp__, /*tp_compare*/
      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~
./dnet.c:6895:3: note: (near initialization for ‘__pyx_type_4dnet_addr.tp_as_async’)
./dnet.c: In function ‘__pyx_tp_new_4dnet___addr_ip4_iter’:
./dnet.c:6936:43: warning: unused variable ‘p’ [-Wunused-variable]
 6936 |   struct __pyx_obj_4dnet___addr_ip4_iter *p = (struct __pyx_obj_4dnet___addr_ip4_iter *)o;
      |                                           ^
./dnet.c: In function ‘__pyx_tp_dealloc_4dnet___addr_ip4_iter’:
./dnet.c:6941:43: warning: unused variable ‘p’ [-Wunused-variable]
 6941 |   struct __pyx_obj_4dnet___addr_ip4_iter *p = (struct __pyx_obj_4dnet___addr_ip4_iter *)o;
      |                                           ^
./dnet.c: In function ‘__pyx_tp_traverse_4dnet___addr_ip4_iter’:
./dnet.c:6947:43: warning: unused variable ‘p’ [-Wunused-variable]
 6947 |   struct __pyx_obj_4dnet___addr_ip4_iter *p = (struct __pyx_obj_4dnet___addr_ip4_iter *)o;
      |                                           ^
./dnet.c:6946:7: warning: unused variable ‘e’ [-Wunused-variable]
 6946 |   int e;
      |       ^
./dnet.c: In function ‘__pyx_tp_clear_4dnet___addr_ip4_iter’:
./dnet.c:6952:43: warning: unused variable ‘p’ [-Wunused-variable]
 6952 |   struct __pyx_obj_4dnet___addr_ip4_iter *p = (struct __pyx_obj_4dnet___addr_ip4_iter *)o;
      |                                           ^
./dnet.c: At top level:
./dnet.c:6997:3: warning: excess elements in struct initializer
 6997 |   0, /*nb_inplace_floor_divide*/
      |   ^
./dnet.c:6997:3: note: (near initialization for ‘__pyx_tp_as_number___addr_ip4_iter’)
./dnet.c:6998:3: warning: excess elements in struct initializer
 6998 |   0, /*nb_inplace_true_divide*/
      |   ^
./dnet.c:6998:3: note: (near initialization for ‘__pyx_tp_as_number___addr_ip4_iter’)
./dnet.c:7023:3: warning: excess elements in struct initializer
 7023 |   0, /*bf_getsegcount*/
      |   ^
./dnet.c:7023:3: note: (near initialization for ‘__pyx_tp_as_buffer___addr_ip4_iter’)
./dnet.c:7024:3: warning: excess elements in struct initializer
 7024 |   0, /*bf_getcharbuffer*/
      |   ^
./dnet.c:7024:3: note: (near initialization for ‘__pyx_tp_as_buffer___addr_ip4_iter’)
./dnet.c: In function ‘__pyx_tp_new_4dnet_arp’:
./dnet.c:7077:31: warning: unused variable ‘p’ [-Wunused-variable]
 7077 |   struct __pyx_obj_4dnet_arp *p = (struct __pyx_obj_4dnet_arp *)o;
      |                               ^
./dnet.c: In function ‘__pyx_tp_dealloc_4dnet_arp’:
./dnet.c:7082:31: warning: unused variable ‘p’ [-Wunused-variable]
 7082 |   struct __pyx_obj_4dnet_arp *p = (struct __pyx_obj_4dnet_arp *)o;
      |                               ^
./dnet.c: In function ‘__pyx_tp_traverse_4dnet_arp’:
./dnet.c:7097:31: warning: unused variable ‘p’ [-Wunused-variable]
 7097 |   struct __pyx_obj_4dnet_arp *p = (struct __pyx_obj_4dnet_arp *)o;
      |                               ^
./dnet.c:7096:7: warning: unused variable ‘e’ [-Wunused-variable]
 7096 |   int e;
      |       ^
./dnet.c: In function ‘__pyx_tp_clear_4dnet_arp’:
./dnet.c:7102:31: warning: unused variable ‘p’ [-Wunused-variable]
 7102 |   struct __pyx_obj_4dnet_arp *p = (struct __pyx_obj_4dnet_arp *)o;
      |                               ^
./dnet.c: At top level:
./dnet.c:7151:3: warning: excess elements in struct initializer
 7151 |   0, /*nb_inplace_floor_divide*/
      |   ^
./dnet.c:7151:3: note: (near initialization for ‘__pyx_tp_as_number_arp’)
./dnet.c:7152:3: warning: excess elements in struct initializer
 7152 |   0, /*nb_inplace_true_divide*/
      |   ^
./dnet.c:7152:3: note: (near initialization for ‘__pyx_tp_as_number_arp’)
./dnet.c:7177:3: warning: excess elements in struct initializer
 7177 |   0, /*bf_getsegcount*/
      |   ^
./dnet.c:7177:3: note: (near initialization for ‘__pyx_tp_as_buffer_arp’)
./dnet.c:7178:3: warning: excess elements in struct initializer
 7178 |   0, /*bf_getcharbuffer*/
      |   ^
./dnet.c:7178:3: note: (near initialization for ‘__pyx_tp_as_buffer_arp’)
./dnet.c: In function ‘__pyx_tp_new_4dnet_intf’:
./dnet.c:7231:32: warning: unused variable ‘p’ [-Wunused-variable]
 7231 |   struct __pyx_obj_4dnet_intf *p = (struct __pyx_obj_4dnet_intf *)o;
      |                                ^
./dnet.c: In function ‘__pyx_tp_dealloc_4dnet_intf’:
./dnet.c:7236:32: warning: unused variable ‘p’ [-Wunused-variable]
 7236 |   struct __pyx_obj_4dnet_intf *p = (struct __pyx_obj_4dnet_intf *)o;
      |                                ^
./dnet.c: In function ‘__pyx_tp_traverse_4dnet_intf’:
./dnet.c:7251:32: warning: unused variable ‘p’ [-Wunused-variable]
 7251 |   struct __pyx_obj_4dnet_intf *p = (struct __pyx_obj_4dnet_intf *)o;
      |                                ^
./dnet.c:7250:7: warning: unused variable ‘e’ [-Wunused-variable]
 7250 |   int e;
      |       ^
./dnet.c: In function ‘__pyx_tp_clear_4dnet_intf’:
./dnet.c:7256:32: warning: unused variable ‘p’ [-Wunused-variable]
 7256 |   struct __pyx_obj_4dnet_intf *p = (struct __pyx_obj_4dnet_intf *)o;
      |                                ^
./dnet.c: At top level:
./dnet.c:7306:3: warning: excess elements in struct initializer
 7306 |   0, /*nb_inplace_floor_divide*/
      |   ^
./dnet.c:7306:3: note: (near initialization for ‘__pyx_tp_as_number_intf’)
./dnet.c:7307:3: warning: excess elements in struct initializer
 7307 |   0, /*nb_inplace_true_divide*/
      |   ^
./dnet.c:7307:3: note: (near initialization for ‘__pyx_tp_as_number_intf’)
./dnet.c:7332:3: warning: excess elements in struct initializer
 7332 |   0, /*bf_getsegcount*/
      |   ^
./dnet.c:7332:3: note: (near initialization for ‘__pyx_tp_as_buffer_intf’)
./dnet.c:7333:3: warning: excess elements in struct initializer
 7333 |   0, /*bf_getcharbuffer*/
      |   ^
./dnet.c:7333:3: note: (near initialization for ‘__pyx_tp_as_buffer_intf’)
./dnet.c: In function ‘__pyx_tp_new_4dnet_route’:
./dnet.c:7386:33: warning: unused variable ‘p’ [-Wunused-variable]
 7386 |   struct __pyx_obj_4dnet_route *p = (struct __pyx_obj_4dnet_route *)o;
      |                                 ^
./dnet.c: In function ‘__pyx_tp_dealloc_4dnet_route’:
./dnet.c:7391:33: warning: unused variable ‘p’ [-Wunused-variable]
 7391 |   struct __pyx_obj_4dnet_route *p = (struct __pyx_obj_4dnet_route *)o;
      |                                 ^
./dnet.c: In function ‘__pyx_tp_traverse_4dnet_route’:
./dnet.c:7406:33: warning: unused variable ‘p’ [-Wunused-variable]
 7406 |   struct __pyx_obj_4dnet_route *p = (struct __pyx_obj_4dnet_route *)o;
      |                                 ^
./dnet.c:7405:7: warning: unused variable ‘e’ [-Wunused-variable]
 7405 |   int e;
      |       ^
./dnet.c: In function ‘__pyx_tp_clear_4dnet_route’:
./dnet.c:7411:33: warning: unused variable ‘p’ [-Wunused-variable]
 7411 |   struct __pyx_obj_4dnet_route *p = (struct __pyx_obj_4dnet_route *)o;
      |                                 ^
./dnet.c: At top level:
./dnet.c:7460:3: warning: excess elements in struct initializer
 7460 |   0, /*nb_inplace_floor_divide*/
      |   ^
./dnet.c:7460:3: note: (near initialization for ‘__pyx_tp_as_number_route’)
./dnet.c:7461:3: warning: excess elements in struct initializer
 7461 |   0, /*nb_inplace_true_divide*/
      |   ^
./dnet.c:7461:3: note: (near initialization for ‘__pyx_tp_as_number_route’)
./dnet.c:7486:3: warning: excess elements in struct initializer
 7486 |   0, /*bf_getsegcount*/
      |   ^
./dnet.c:7486:3: note: (near initialization for ‘__pyx_tp_as_buffer_route’)
./dnet.c:7487:3: warning: excess elements in struct initializer
 7487 |   0, /*bf_getcharbuffer*/
      |   ^
./dnet.c:7487:3: note: (near initialization for ‘__pyx_tp_as_buffer_route’)
./dnet.c: In function ‘__pyx_tp_new_4dnet_fw’:
./dnet.c:7540:30: warning: unused variable ‘p’ [-Wunused-variable]
 7540 |   struct __pyx_obj_4dnet_fw *p = (struct __pyx_obj_4dnet_fw *)o;
      |                              ^
./dnet.c: In function ‘__pyx_tp_dealloc_4dnet_fw’:
./dnet.c:7545:30: warning: unused variable ‘p’ [-Wunused-variable]
 7545 |   struct __pyx_obj_4dnet_fw *p = (struct __pyx_obj_4dnet_fw *)o;
      |                              ^
./dnet.c: In function ‘__pyx_tp_traverse_4dnet_fw’:
./dnet.c:7560:30: warning: unused variable ‘p’ [-Wunused-variable]
 7560 |   struct __pyx_obj_4dnet_fw *p = (struct __pyx_obj_4dnet_fw *)o;
      |                              ^
./dnet.c:7559:7: warning: unused variable ‘e’ [-Wunused-variable]
 7559 |   int e;
      |       ^
./dnet.c: In function ‘__pyx_tp_clear_4dnet_fw’:
./dnet.c:7565:30: warning: unused variable ‘p’ [-Wunused-variable]
 7565 |   struct __pyx_obj_4dnet_fw *p = (struct __pyx_obj_4dnet_fw *)o;
      |                              ^
./dnet.c: At top level:
./dnet.c:7613:3: warning: excess elements in struct initializer
 7613 |   0, /*nb_inplace_floor_divide*/
      |   ^
./dnet.c:7613:3: note: (near initialization for ‘__pyx_tp_as_number_fw’)
./dnet.c:7614:3: warning: excess elements in struct initializer
 7614 |   0, /*nb_inplace_true_divide*/
      |   ^
./dnet.c:7614:3: note: (near initialization for ‘__pyx_tp_as_number_fw’)
./dnet.c:7639:3: warning: excess elements in struct initializer
 7639 |   0, /*bf_getsegcount*/
      |   ^
./dnet.c:7639:3: note: (near initialization for ‘__pyx_tp_as_buffer_fw’)
./dnet.c:7640:3: warning: excess elements in struct initializer
 7640 |   0, /*bf_getcharbuffer*/
      |   ^
./dnet.c:7640:3: note: (near initialization for ‘__pyx_tp_as_buffer_fw’)
./dnet.c: In function ‘__pyx_tp_new_4dnet_rand’:
./dnet.c:7693:32: warning: unused variable ‘p’ [-Wunused-variable]
 7693 |   struct __pyx_obj_4dnet_rand *p = (struct __pyx_obj_4dnet_rand *)o;
      |                                ^
./dnet.c: In function ‘__pyx_tp_dealloc_4dnet_rand’:
./dnet.c:7698:32: warning: unused variable ‘p’ [-Wunused-variable]
 7698 |   struct __pyx_obj_4dnet_rand *p = (struct __pyx_obj_4dnet_rand *)o;
      |                                ^
./dnet.c: In function ‘__pyx_tp_traverse_4dnet_rand’:
./dnet.c:7713:32: warning: unused variable ‘p’ [-Wunused-variable]
 7713 |   struct __pyx_obj_4dnet_rand *p = (struct __pyx_obj_4dnet_rand *)o;
      |                                ^
./dnet.c:7712:7: warning: unused variable ‘e’ [-Wunused-variable]
 7712 |   int e;
      |       ^
./dnet.c: In function ‘__pyx_tp_clear_4dnet_rand’:
./dnet.c:7718:32: warning: unused variable ‘p’ [-Wunused-variable]
 7718 |   struct __pyx_obj_4dnet_rand *p = (struct __pyx_obj_4dnet_rand *)o;
      |                                ^
./dnet.c: At top level:
./dnet.c:7770:3: warning: excess elements in struct initializer
 7770 |   0, /*nb_inplace_floor_divide*/
      |   ^
./dnet.c:7770:3: note: (near initialization for ‘__pyx_tp_as_number_rand’)
./dnet.c:7771:3: warning: excess elements in struct initializer
 7771 |   0, /*nb_inplace_true_divide*/
      |   ^
./dnet.c:7771:3: note: (near initialization for ‘__pyx_tp_as_number_rand’)
./dnet.c:7796:3: warning: excess elements in struct initializer
 7796 |   0, /*bf_getsegcount*/
      |   ^
./dnet.c:7796:3: note: (near initialization for ‘__pyx_tp_as_buffer_rand’)
./dnet.c:7797:3: warning: excess elements in struct initializer
 7797 |   0, /*bf_getcharbuffer*/
      |   ^
./dnet.c:7797:3: note: (near initialization for ‘__pyx_tp_as_buffer_rand’)
./dnet.c: In function ‘__pyx_tp_new_4dnet___rand_xrange’:
./dnet.c:7850:41: warning: unused variable ‘p’ [-Wunused-variable]
 7850 |   struct __pyx_obj_4dnet___rand_xrange *p = (struct __pyx_obj_4dnet___rand_xrange *)o;
      |                                         ^
./dnet.c: In function ‘__pyx_tp_dealloc_4dnet___rand_xrange’:
./dnet.c:7855:41: warning: unused variable ‘p’ [-Wunused-variable]
 7855 |   struct __pyx_obj_4dnet___rand_xrange *p = (struct __pyx_obj_4dnet___rand_xrange *)o;
      |                                         ^
./dnet.c: In function ‘__pyx_tp_traverse_4dnet___rand_xrange’:
./dnet.c:7861:41: warning: unused variable ‘p’ [-Wunused-variable]
 7861 |   struct __pyx_obj_4dnet___rand_xrange *p = (struct __pyx_obj_4dnet___rand_xrange *)o;
      |                                         ^
./dnet.c:7860:7: warning: unused variable ‘e’ [-Wunused-variable]
 7860 |   int e;
      |       ^
./dnet.c: In function ‘__pyx_tp_clear_4dnet___rand_xrange’:
./dnet.c:7866:41: warning: unused variable ‘p’ [-Wunused-variable]
 7866 |   struct __pyx_obj_4dnet___rand_xrange *p = (struct __pyx_obj_4dnet___rand_xrange *)o;
      |                                         ^
./dnet.c: At top level:
./dnet.c:7911:3: warning: excess elements in struct initializer
 7911 |   0, /*nb_inplace_floor_divide*/
      |   ^
./dnet.c:7911:3: note: (near initialization for ‘__pyx_tp_as_number___rand_xrange’)
./dnet.c:7912:3: warning: excess elements in struct initializer
 7912 |   0, /*nb_inplace_true_divide*/
      |   ^
./dnet.c:7912:3: note: (near initialization for ‘__pyx_tp_as_number___rand_xrange’)
./dnet.c:7937:3: warning: excess elements in struct initializer
 7937 |   0, /*bf_getsegcount*/
      |   ^
./dnet.c:7937:3: note: (near initialization for ‘__pyx_tp_as_buffer___rand_xrange’)
./dnet.c:7938:3: warning: excess elements in struct initializer
 7938 |   0, /*bf_getcharbuffer*/
      |   ^
./dnet.c:7938:3: note: (near initialization for ‘__pyx_tp_as_buffer___rand_xrange’)
./dnet.c: In function ‘__pyx_tp_new_4dnet_tun’:
./dnet.c:7991:31: warning: unused variable ‘p’ [-Wunused-variable]
 7991 |   struct __pyx_obj_4dnet_tun *p = (struct __pyx_obj_4dnet_tun *)o;
      |                               ^
./dnet.c: In function ‘__pyx_tp_dealloc_4dnet_tun’:
./dnet.c:7996:31: warning: unused variable ‘p’ [-Wunused-variable]
 7996 |   struct __pyx_obj_4dnet_tun *p = (struct __pyx_obj_4dnet_tun *)o;
      |                               ^
./dnet.c: In function ‘__pyx_tp_traverse_4dnet_tun’:
./dnet.c:8011:31: warning: unused variable ‘p’ [-Wunused-variable]
 8011 |   struct __pyx_obj_4dnet_tun *p = (struct __pyx_obj_4dnet_tun *)o;
      |                               ^
./dnet.c:8010:7: warning: unused variable ‘e’ [-Wunused-variable]
 8010 |   int e;
      |       ^
./dnet.c: In function ‘__pyx_tp_clear_4dnet_tun’:
./dnet.c:8016:31: warning: unused variable ‘p’ [-Wunused-variable]
 8016 |   struct __pyx_obj_4dnet_tun *p = (struct __pyx_obj_4dnet_tun *)o;
      |                               ^
./dnet.c: At top level:
./dnet.c:8079:3: warning: excess elements in struct initializer
 8079 |   0, /*nb_inplace_floor_divide*/
      |   ^
./dnet.c:8079:3: note: (near initialization for ‘__pyx_tp_as_number_tun’)
./dnet.c:8080:3: warning: excess elements in struct initializer
 8080 |   0, /*nb_inplace_true_divide*/
      |   ^
./dnet.c:8080:3: note: (near initialization for ‘__pyx_tp_as_number_tun’)
./dnet.c:8105:3: warning: excess elements in struct initializer
 8105 |   0, /*bf_getsegcount*/
      |   ^
./dnet.c:8105:3: note: (near initialization for ‘__pyx_tp_as_buffer_tun’)
./dnet.c:8106:3: warning: excess elements in struct initializer
 8106 |   0, /*bf_getcharbuffer*/
      |   ^
./dnet.c:8106:3: note: (near initialization for ‘__pyx_tp_as_buffer_tun’)
./dnet.c: In function ‘__Pyx_EndUnpack’:
./dnet.c:9275:7: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
 9275 |   if (item = PySequence_GetItem(seq, i)) {
      |       ^~~~
./dnet.c: At top level:
./dnet.c:32:12: warning: ‘__Pyx_PrintItem’ declared ‘static’ but never defined [-Wunused-function]
   32 | static int __Pyx_PrintItem(PyObject *); /*proto*/
      |            ^~~~~~~~~~~~~~~
./dnet.c:33:12: warning: ‘__Pyx_PrintNewline’ declared ‘static’ but never defined [-Wunused-function]
   33 | static int __Pyx_PrintNewline(void); /*proto*/
      |            ^~~~~~~~~~~~~~~~~~
./dnet.c:35:13: warning: ‘__Pyx_ReRaise’ declared ‘static’ but never defined [-Wunused-function]
   35 | static void __Pyx_ReRaise(void); /*proto*/
      |             ^~~~~~~~~~~~~
./dnet.c:36:18: warning: ‘__Pyx_Import’ declared ‘static’ but never defined [-Wunused-function]
   36 | static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list); /*proto*/
      |                  ^~~~~~~~~~~~
./dnet.c:37:18: warning: ‘__Pyx_GetExcValue’ declared ‘static’ but never defined [-Wunused-function]
   37 | static PyObject *__Pyx_GetExcValue(void); /*proto*/
      |                  ^~~~~~~~~~~~~~~~~
./dnet.c:40:12: warning: ‘__Pyx_GetStarArgs’ declared ‘static’ but never defined [-Wunused-function]
   40 | static int __Pyx_GetStarArgs(PyObject **args, PyObject **kwds, char *kwd_list[], Py_ssize_t nargs, PyObject **args2, PyObject **kwds2); /*proto*/
      |            ^~~~~~~~~~~~~~~~~
./dnet.c:41:13: warning: ‘__Pyx_WriteUnraisable’ declared ‘static’ but never defined [-Wunused-function]
   41 | static void __Pyx_WriteUnraisable(char *name); /*proto*/
      |             ^~~~~~~~~~~~~~~~~~~~~
./dnet.c:43:22: warning: ‘__Pyx_ImportType’ declared ‘static’ but never defined [-Wunused-function]
   43 | static PyTypeObject *__Pyx_ImportType(char *module_name, char *class_name, long size);  /*proto*/
      |                      ^~~~~~~~~~~~~~~~
./dnet.c:44:12: warning: ‘__Pyx_SetVtable’ declared ‘static’ but never defined [-Wunused-function]
   44 | static int __Pyx_SetVtable(PyObject *dict, void *vtable); /*proto*/
      |            ^~~~~~~~~~~~~~~
./dnet.c:45:12: warning: ‘__Pyx_GetVtable’ declared ‘static’ but never defined [-Wunused-function]
   45 | static int __Pyx_GetVtable(PyObject *dict, void *vtabptr); /*proto*/
      |            ^~~~~~~~~~~~~~~
./dnet.c:46:18: warning: ‘__Pyx_CreateClass’ declared ‘static’ but never defined [-Wunused-function]
   46 | static PyObject *__Pyx_CreateClass(PyObject *bases, PyObject *dict, PyObject *name, char *modname); /*proto*/
      |                  ^~~~~~~~~~~~~~~~~
./dnet.c:49:12: warning: ‘__Pyx_InitCApi’ declared ‘static’ but never defined [-Wunused-function]
   49 | static int __Pyx_InitCApi(PyObject *module); /*proto*/
      |            ^~~~~~~~~~~~~~
./dnet.c:50:12: warning: ‘__Pyx_ImportModuleCApi’ declared ‘static’ but never defined [-Wunused-function]
   50 | static int __Pyx_ImportModuleCApi(__Pyx_CApiTabEntry *t); /*proto*/
      |            ^~~~~~~~~~~~~~~~~~~~~~
./dnet.c:3649:3: warning: type of ‘strlcpy’ does not match original declaration [-Wlto-type-mismatch]
 3649 |   strlcpy(__pyx_v_entry->intf_name,__pyx_2,16);
      |   ^
../src/strlcpy.c:43:1: note: return value type mismatch
   43 | strlcpy(dst, src, siz)
      | ^
../src/strlcpy.c:43:1: note: type ‘size_t’ should match type ‘int’
../src/../include/config.h:298:5: warning: type of ‘strlcpy’ does not match original declaration [-Wlto-type-mismatch]
  298 | int strlcpy(char *, const char *, int);
      |     ^
../src/strlcpy.c:43:1: note: return value type mismatch
   43 | strlcpy(dst, src, siz)
      | ^
../src/strlcpy.c:43:1: note: type ‘size_t’ should match type ‘int’
../src/strlcpy.c:43:1: note: ‘strlcpy’ was previously declared here
../src/strlcpy.c:43:1: note: code may be misoptimized unless ‘-fno-strict-aliasing’ is used

kloczek avatar Jun 01 '21 12:06 kloczek

gentle pin 😄

kloczek avatar Apr 30 '22 06:04 kloczek

Please have a look at the new branch, where I tried removing the local versions of strl* and strsep: https://github.com/ofalk/libdnet/commit/58d3a7915104bb1d6605c8ddc484fc5951546ca9

ofalk avatar Apr 30 '22 13:04 ofalk

Thanks for the ping @kloczek !

ofalk avatar Apr 30 '22 13:04 ofalk

Cannot apply that commit on top of master. Do you have maybe some plans to make the new release soon? 🤔

If you are thinking that issue is resolved feel free to close it. I'll retest it on next release. Thx 😃

kloczek avatar Apr 30 '22 17:04 kloczek

New release has been created: 1.16 (yes, 1.15 skipped)

Note: Python bindings are currently not really working fine, but that's another story.

ofalk avatar May 02 '22 07:05 ofalk

There are sill some LTO related warnings. Updated stats for 1.16

     90 -Wformat-extra-args
     20 -Wpointer-sign
      2 -Wunused-variable
      2 -Wsizeof-pointer-memaccess
      1 -Wunused-result
      1 -Wstringop-overread
      1 -Wlto-type-mismatch

autoreconf from autoconf 2.71 shows as well some arnings. At the end of the log is as well -fno-strict-aliasing warning. All warnings:

autoreconf: export WARNINGS=
autoreconf: Entering directory '.'
autoreconf: configure.ac: not using Gettext
autoreconf: running: aclocal --force
autoreconf: configure.ac: tracing
autoreconf: running: libtoolize --copy --force
autoreconf: configure.ac: not using Intltool
autoreconf: configure.ac: not using Gtkdoc
autoreconf: running: aclocal --force
autoreconf: running: /usr/bin/autoconf --force
configure.ac:41: warning: The macro `AC_LIBTOOL_DLOPEN' is obsolete.
configure.ac:41: You should run autoupdate.
m4/ltoptions.m4:113: AC_LIBTOOL_DLOPEN is expanded from...
configure.ac:41: the top level
configure.ac:41: warning: AC_LIBTOOL_DLOPEN: Remove this warning and the call to _LT_SET_OPTION when you
configure.ac:41: put the 'dlopen' option into LT_INIT's first parameter.
./lib/autoconf/general.m4:2434: AC_DIAGNOSE is expanded from...
m4/ltoptions.m4:113: AC_LIBTOOL_DLOPEN is expanded from...
configure.ac:41: the top level
configure.ac:42: warning: The macro `AM_PROG_LIBTOOL' is obsolete.
configure.ac:42: You should run autoupdate.
m4/libtool.m4:101: AM_PROG_LIBTOOL is expanded from...
configure.ac:42: the top level
configure.ac:47: warning: The macro `AC_ERROR' is obsolete.
configure.ac:47: You should run autoupdate.
./lib/autoconf/oldnames.m4:34: AC_ERROR is expanded from...
lib/m4sugar/m4sh.m4:699: AS_IF is expanded from...
./lib/autoconf/general.m4:1553: AC_ARG_WITH is expanded from...
configure.ac:47: the top level
configure.ac:131: warning: The macro `AC_ERROR' is obsolete.
configure.ac:131: You should run autoupdate.
./lib/autoconf/oldnames.m4:34: AC_ERROR is expanded from...
lib/m4sugar/m4sh.m4:699: AS_IF is expanded from...
./lib/autoconf/general.m4:1553: AC_ARG_WITH is expanded from...
configure.ac:131: the top level
configure.ac:168: warning: The macro `AC_HEADER_STDC' is obsolete.
configure.ac:168: You should run autoupdate.
./lib/autoconf/headers.m4:704: AC_HEADER_STDC is expanded from...
configure.ac:168: the top level
configure.ac:191: warning: The macro `AC_TRY_COMPILE' is obsolete.
configure.ac:191: You should run autoupdate.
./lib/autoconf/general.m4:2847: AC_TRY_COMPILE is expanded from...
m4/acinclude.m4:30: AC_DNET_SOCKADDR_IN6 is expanded from...
configure.ac:191: the top level
configure.ac:193: warning: The macro `AC_TRY_COMPILE' is obsolete.
configure.ac:193: You should run autoupdate.
./lib/autoconf/general.m4:2847: AC_TRY_COMPILE is expanded from...
m4/acinclude.m4:7: AC_DNET_SOCKADDR_SA_LEN is expanded from...
configure.ac:193: the top level
configure.ac:196: warning: The macro `AC_TRY_COMPILE' is obsolete.
configure.ac:196: You should run autoupdate.
./lib/autoconf/general.m4:2847: AC_TRY_COMPILE is expanded from...
m4/acinclude.m4:51: AC_DNET_ARPREQ_ARP_DEV is expanded from...
configure.ac:196: the top level
configure.ac:199: warning: The macro `AC_TRY_COMPILE' is obsolete.
configure.ac:199: You should run autoupdate.
./lib/autoconf/general.m4:2847: AC_TRY_COMPILE is expanded from...
m4/acinclude.m4:72: AC_DNET_ROUTE_RT_MSGHDR is expanded from...
configure.ac:199: the top level
configure.ac:214: warning: The macro `AC_TRY_COMPILE' is obsolete.
configure.ac:214: You should run autoupdate.
./lib/autoconf/general.m4:2847: AC_TRY_COMPILE is expanded from...
m4/acinclude.m4:137: AC_DNET_LINUX_PF_PACKET is expanded from...
configure.ac:214: the top level
configure.ac:329: warning: AC_OUTPUT should be used without arguments.
configure.ac:329: You should run autoupdate.
autoreconf: running: /usr/bin/autoheader --force
autoheader: warning: WARNING: Using auxiliary files such as 'acconfig.h', 'config.h.bot'
autoheader: WARNING: and 'config.h.top', to define templates for 'config.h.in'
autoheader: WARNING: is deprecated and discouraged.
autoheader:
autoheader: WARNING: Using the third argument of 'AC_DEFINE_UNQUOTED' and
autoheader: WARNING: 'AC_DEFINE' allows one to define a template without
autoheader: WARNING: 'acconfig.h':
autoheader:
autoheader: WARNING:   AC_DEFINE([NEED_FUNC_MAIN], 1,
autoheader:             [Define if a function 'main' is needed.])
autoheader:
autoheader: WARNING: More sophisticated templates can also be produced, see the
autoheader: WARNING: documentation.
autoreconf: running: automake --add-missing --copy --force-missing
configure.ac:18: installing 'config/compile'
configure.ac:14: installing 'config/missing'
parallel-tests: installing 'config/test-driver'
autoreconf: Leaving directory '.'
ndisc-linux.c: In function 'ndisc_modify':
ndisc-linux.c:78:24: warning: unused variable 'rta' [-Wunused-variable]
   78 |         struct rtattr *rta;
      |                        ^~~
rand.c: In function 'rand_open':
rand.c:84:17: warning: ignoring return value of 'read' declared with attribute 'warn_unused_result' [-Wunused-result]
   84 |                 read(fd, seed + sizeof(*tv), sizeof(seed) - sizeof(*tv));
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../include/config.h:298:5: warning: type of 'strlcpy' does not match original declaration [-Wlto-type-mismatch]
  298 | int strlcpy(char *, const char *, int);
      |     ^
strlcpy.c:43:1: note: return value type mismatch
   43 | strlcpy(dst, src, siz)
      | ^
strlcpy.c:43:1: note: type 'size_t' should match type 'int'
strlcpy.c:43:1: note: 'strlcpy' was previously declared here
strlcpy.c:43:1: note: code may be misoptimized unless '-fno-strict-aliasing' is used
In file included from check_fw.c:10:
check_fw.c: In function 'test_fw_openclose_fn':
check_fw.c:21:47: warning: too many arguments for format [-Wformat-extra-args]
   21 |         fail_unless((fw = fw_open()) != NULL, "open failed");
      |                                               ^~~~~~~~~~~~~
check_fw.c:22:50: warning: too many arguments for format [-Wformat-extra-args]
   22 |         fail_unless((fw = fw_close(fw)) == NULL, "closed failed");
      |                                                  ^~~~~~~~~~~~~~~
check_fw.c: At top level:
check_fw.c:41:12: warning: 'test_fw_close' defined but not used [-Wunused-variable]
   41 | START_TEST(test_fw_close)
      |            ^~~~~~~~~~~~~
In file included from check_arp.c:10:
check_arp.c: In function 'test_arp_openclose_fn':
check_arp.c:21:47: warning: too many arguments for format [-Wformat-extra-args]
   21 |         fail_unless((a = arp_open()) != NULL, "open failed");
      |                                               ^~~~~~~~~~~~~
check_arp.c:22:49: warning: too many arguments for format [-Wformat-extra-args]
   22 |         fail_unless((a = arp_close(a)) == NULL, "close failed");
      |                                                 ^~~~~~~~~~~~~~
In file included from check_route.c:10:
check_route.c: In function 'test_route_openclose_fn':
check_route.c:16:49: warning: too many arguments for format [-Wformat-extra-args]
   16 |         fail_unless((r = route_open()) != NULL, "open failed");
      |                                                 ^~~~~~~~~~~~~
check_route.c:17:51: warning: too many arguments for format [-Wformat-extra-args]
   17 |         fail_unless((r = route_close(r)) == NULL, "close failed");
      |                                                   ^~~~~~~~~~~~~~
In file included from check_ip.c:10:
check_ip.c: In function 'test_ip_openclose_fn':
check_ip.c:21:46: warning: too many arguments for format [-Wformat-extra-args]
   21 |         fail_unless((i = ip_open()) != NULL, "open failed");
      |                                              ^~~~~~~~~~~~~
check_ip.c:22:48: warning: too many arguments for format [-Wformat-extra-args]
   22 |         fail_unless((i = ip_close(i)) == NULL, "close failed");
      |                                                ^~~~~~~~~~~~~~
In file included from check_intf.c:10:
check_intf.c: In function 'test_intf_openclose_fn':
check_intf.c:16:48: warning: too many arguments for format [-Wformat-extra-args]
   16 |         fail_unless((i = intf_open()) != NULL, "open failed");
      |                                                ^~~~~~~~~~~~~
check_intf.c:17:50: warning: too many arguments for format [-Wformat-extra-args]
   17 |         fail_unless((i = intf_close(i)) == NULL, "closed failed");
      |                                                  ^~~~~~~~~~~~~~~
check_intf.c: In function 'test_intf_get_fn':
check_intf.c:28:46: warning: too many arguments for format [-Wformat-extra-args]
   28 |         fail_unless(intf_get(i, &ifent) < 0, "didn't fail on empty request");
      |                                              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
check_intf.c:30:46: warning: too many arguments for format [-Wformat-extra-args]
   30 |         fail_unless(intf_get(i, &ifent) < 0, "didn't fail on empty name");
      |                                              ^~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from check_blob.c:10:
check_blob.c: In function 'test_blob_newfree_fn':
check_blob.c:16:47: warning: too many arguments for format [-Wformat-extra-args]
   16 |         fail_unless((b = blob_new()) != NULL, "new failed");
      |                                               ^~~~~~~~~~~~
check_blob.c:17:49: warning: too many arguments for format [-Wformat-extra-args]
   17 |         fail_unless((b = blob_free(b)) == NULL, "free failed");
      |                                                 ^~~~~~~~~~~~~
check_blob.c: In function 'test_blob_readwrite_fn':
check_blob.c:33:49: warning: too many arguments for format [-Wformat-extra-args]
   33 |         fail_unless(strcmp(tmp, "foobar") == 0, "read1 failed");
      |                                                 ^~~~~~~~~~~~~~
check_blob.c:35:49: warning: too many arguments for format [-Wformat-extra-args]
   35 |         fail_unless(strcmp(tmp, "spazzo") == 0, "read2 failed");
      |                                                 ^~~~~~~~~~~~~~
check_blob.c:37:49: warning: too many arguments for format [-Wformat-extra-args]
   37 |         fail_unless(strcmp(tmp, "doofus") == 0, "read3 failed");
      |                                                 ^~~~~~~~~~~~~~
check_blob.c: In function 'test_blob_insertdelete_fn':
check_blob.c:48:52: warning: too many arguments for format [-Wformat-extra-args]
   48 |         fail_unless(blob_insert(b, "foo", 3) == 3, "insert1 failed");
      |                                                    ^~~~~~~~~~~~~~~~
check_blob.c:50:52: warning: too many arguments for format [-Wformat-extra-args]
   50 |         fail_unless(blob_insert(b, "bar", 3) == 3, "insert2 failed");
      |                                                    ^~~~~~~~~~~~~~~~
check_blob.c:54:48: warning: too many arguments for format [-Wformat-extra-args]
   54 |         fail_unless(strcmp(tmp,"barfoo") == 0, "read failed");
      |                                                ^~~~~~~~~~~~~
check_blob.c:56:51: warning: too many arguments for format [-Wformat-extra-args]
   56 |         fail_unless(blob_delete(b, NULL, 3) == 3, "delete failed");
      |                                                   ^~~~~~~~~~~~~~~
check_blob.c:60:45: warning: too many arguments for format [-Wformat-extra-args]
   60 |         fail_unless(strcmp(tmp,"foo") == 0, "read failed");
      |                                             ^~~~~~~~~~~~~
check_blob.c:62:50: warning: too many arguments for format [-Wformat-extra-args]
   62 |         fail_unless(blob_delete(b, NULL, 4) < 0, "deleted more than size");
      |                                                  ^~~~~~~~~~~~~~~~~~~~~~~~
check_blob.c:65:17: warning: pointer targets in assignment from 'char *' to 'u_char *' {aka 'unsigned char *'} differ in signedness [-Wpointer-sign]
   65 |         bf.base = "foobar";
      |                 ^
check_blob.c:69:56: warning: too many arguments for format [-Wformat-extra-args]
   69 |         fail_unless(blob_insert(&bf, "foobar", 6) < 0, "inserted into fixed");
      |                                                        ^~~~~~~~~~~~~~~~~~~~~
check_blob.c:70:52: warning: too many arguments for format [-Wformat-extra-args]
   70 |         fail_unless(blob_delete(&bf, NULL, 3) < 0, "deleted from fixed");
      |                                                    ^~~~~~~~~~~~~~~~~~~~
check_blob.c: In function 'test_blob_packunpack_fn':
check_blob.c:98:13: warning: too many arguments for format [-Wformat-extra-args]
   98 |             "pack failed");
      |             ^~~~~~~~~~~~~
check_blob.c:106:13: warning: too many arguments for format [-Wformat-extra-args]
  106 |             "unpack failed");
      |             ^~~~~~~~~~~~~~~
check_blob.c:114:22: warning: too many arguments for format [-Wformat-extra-args]
  114 |                 fail("unpacked weird crap");
      |                      ^~~~~~~~~~~~~~~~~~~~~
check_blob.c: In function 'test_blob_seek_fn':
check_blob.c:127:43: warning: too many arguments for format [-Wformat-extra-args]
  127 |         fail_unless(blob_skip(b, 3) == 3, "skip failed");
      |                                           ^~~~~~~~~~~~~
check_blob.c:128:43: warning: too many arguments for format [-Wformat-extra-args]
  128 |         fail_unless(blob_skip(b, 3) == 6, "skip to end failed");
      |                                           ^~~~~~~~~~~~~~~~~~~~
check_blob.c:129:42: warning: too many arguments for format [-Wformat-extra-args]
  129 |         fail_unless(blob_skip(b, 1) < 0, "skipped past end");
      |                                          ^~~~~~~~~~~~~~~~~~
check_blob.c:130:54: warning: too many arguments for format [-Wformat-extra-args]
  130 |         fail_unless(blob_seek(b, -1, SEEK_END) == 5, "end seek failed");
      |                                                      ^~~~~~~~~~~~~~~~~
check_blob.c:131:53: warning: too many arguments for format [-Wformat-extra-args]
  131 |         fail_unless(blob_seek(b, 1, SEEK_SET) == 1, "set seek failed");
      |                                                     ^~~~~~~~~~~~~~~~~
check_blob.c:133:53: warning: too many arguments for format [-Wformat-extra-args]
  133 |         fail_unless(blob_seek(b, -1, SEEK_CUR) < 0, "seeked past 0");
      |                                                     ^~~~~~~~~~~~~~~
check_blob.c:134:53: warning: too many arguments for format [-Wformat-extra-args]
  134 |         fail_unless(blob_seek(b, 3, SEEK_CUR) == 3, "cur seek failed");
      |                                                     ^~~~~~~~~~~~~~~~~
check_blob.c: In function 'test_blob_index_fn':
check_blob.c:146:52: warning: too many arguments for format [-Wformat-extra-args]
  146 |         fail_unless(blob_index(b, "this", 4) == 0, "index start failed");
      |                                                    ^~~~~~~~~~~~~~~~~~~~
check_blob.c:147:50: warning: too many arguments for format [-Wformat-extra-args]
  147 |         fail_unless(blob_index(b, "!", 1) == 19, "index end failed");
      |                                                  ^~~~~~~~~~~~~~~~~~
check_blob.c:148:53: warning: too many arguments for format [-Wformat-extra-args]
  148 |         fail_unless(blob_index(b, "only ", 5) == 8, "index middle failed");
      |                                                     ^~~~~~~~~~~~~~~~~~~~~
check_blob.c:149:51: warning: too many arguments for format [-Wformat-extra-args]
  149 |         fail_unless(blob_rindex(b, "!", 1) == 19, "rindex end failed");
      |                                                   ^~~~~~~~~~~~~~~~~~~
check_blob.c:150:53: warning: too many arguments for format [-Wformat-extra-args]
  150 |         fail_unless(blob_rindex(b, "this", 4) == 0, "rindex start failed");
      |                                                     ^~~~~~~~~~~~~~~~~~~~~
check_blob.c:151:54: warning: too many arguments for format [-Wformat-extra-args]
  151 |         fail_unless(blob_rindex(b, "only ", 5) == 8, "rindex middle failed");
      |                                                      ^~~~~~~~~~~~~~~~~~~~~~
In file included from check_rand.c:10:
check_rand.c: In function 'test_rand_openclose_fn':
check_rand.c:16:48: warning: too many arguments for format [-Wformat-extra-args]
   16 |         fail_unless((r = rand_open()) != NULL, "open failed");
      |                                                ^~~~~~~~~~~~~
check_rand.c:17:50: warning: too many arguments for format [-Wformat-extra-args]
   17 |         fail_unless((r = rand_close(r)) == NULL, "close failed");
      |                                                  ^~~~~~~~~~~~~~
check_rand.c: In function 'test_rand_get_fn':
check_rand.c:27:54: warning: too many arguments for format [-Wformat-extra-args]
   27 |         fail_unless(rand_get(r, &i, sizeof(i)) == 0, "get failed");
      |                                                      ^~~~~~~~~~~~
check_rand.c: In function 'test_rand_set_fn':
check_rand.c:43:59: warning: too many arguments for format [-Wformat-extra-args]
   43 |         fail_unless(rand_get(r, buf1, sizeof(buf1)) == 0, "get failed");
      |                                                           ^~~~~~~~~~~~
check_rand.c:44:60: warning: too many arguments for format [-Wformat-extra-args]
   44 |         fail_unless(memcmp(buf1, buf2, sizeof(buf1)) != 0, "get b0rked");
      |                                                            ^~~~~~~~~~~~
check_rand.c:45:54: warning: too many arguments for format [-Wformat-extra-args]
   45 |         fail_unless(rand_set(r, &i, sizeof(i)) == 0, "set failed");
      |                                                      ^~~~~~~~~~~~
check_rand.c:46:59: warning: too many arguments for format [-Wformat-extra-args]
   46 |         fail_unless(rand_get(r, buf2, sizeof(buf2)) == 0, "get2 failed");
      |                                                           ^~~~~~~~~~~~~
check_rand.c:47:60: warning: too many arguments for format [-Wformat-extra-args]
   47 |         fail_unless(memcmp(buf1, buf2, sizeof(buf1)) != 0, "set/get b0rked");
      |                                                            ^~~~~~~~~~~~~~~~
check_rand.c:48:54: warning: too many arguments for format [-Wformat-extra-args]
   48 |         fail_unless(rand_set(r, &i, sizeof(i)) == 0, "set2 failed");
      |                                                      ^~~~~~~~~~~~~
check_rand.c:49:59: warning: too many arguments for format [-Wformat-extra-args]
   49 |         fail_unless(rand_get(r, buf1, sizeof(buf1)) == 0, "get3 failed");
      |                                                           ^~~~~~~~~~~~~
check_rand.c:50:60: warning: too many arguments for format [-Wformat-extra-args]
   50 |         fail_unless(memcmp(buf1, buf2, sizeof(buf1)) == 0, "set b0rked");
      |                                                            ^~~~~~~~~~~~
check_rand.c: In function 'test_rand_shuffle_fn':
check_rand.c:64:53: warning: too many arguments for format [-Wformat-extra-args]
   64 |         fail_unless(strcmp(buf, SHUFFLE_TEXT) != 0, "shuffle failed");
      |                                                     ^~~~~~~~~~~~~~~~
In file included from check_addr.c:16:
check_addr.c: In function 'test_addr_pack_fn':
check_addr.c:46:53: warning: too many arguments for format [-Wformat-extra-args]
   46 |         fail_unless(memcmp(&a, &b, sizeof(a)) == 0, "got different address");
      |                                                     ^~~~~~~~~~~~~~~~~~~~~~~
check_addr.c: In function 'test_addr_cmp_fn':
check_addr.c:56:44: warning: too many arguments for format [-Wformat-extra-args]
   56 |         fail_unless(addr_cmp(&a, &b) == 0, "failed on equal addresses");
      |                                            ^~~~~~~~~~~~~~~~~~~~~~~~~~~
check_addr.c:58:44: warning: too many arguments for format [-Wformat-extra-args]
   58 |         fail_unless(addr_cmp(&a, &b) != 0, "failed on different addr_type");
      |                                            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
check_addr.c:60:43: warning: too many arguments for format [-Wformat-extra-args]
   60 |         fail_unless(addr_cmp(&a, &b) > 0, "failed on lesser addr_bits");
      |                                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
check_addr.c:62:44: warning: too many arguments for format [-Wformat-extra-args]
   62 |         fail_unless(addr_cmp(&a, &b) != 0, "failed on different addr_ip");
      |                                            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
check_addr.c:66:43: warning: too many arguments for format [-Wformat-extra-args]
   66 |         fail_unless(addr_cmp(&a, &b) < 0, "failed on lesser addr compare");
      |                                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
check_addr.c:67:43: warning: too many arguments for format [-Wformat-extra-args]
   67 |         fail_unless(addr_cmp(&b, &a) > 0, "failed on greater addr compare");
      |                                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
check_addr.c: In function 'test_addr_bcast_fn':
check_addr.c:77:53: warning: too many arguments for format [-Wformat-extra-args]
   77 |         fail_unless(b.addr_ip == htonl(0x01020307), "wrong for /29");
      |                                                     ^~~~~~~~~~~~~~~
check_addr.c:79:53: warning: too many arguments for format [-Wformat-extra-args]
   79 |         fail_unless(b.addr_ip == htonl(0x0102ffff), "wrong for /16");
      |                                                     ^~~~~~~~~~~~~~~
check_addr.c:81:52: warning: too many arguments for format [-Wformat-extra-args]
   81 |         fail_unless(b.addr_ip == htonl(0x7ffffff), "wrong for /5");
      |                                                    ^~~~~~~~~~~~~~
check_addr.c: In function 'test_addr_net_fn':
check_addr.c:91:53: warning: too many arguments for format [-Wformat-extra-args]
   91 |         fail_unless(b.addr_ip == htonl(0x01020300), "wrong for /24");
      |                                                     ^~~~~~~~~~~~~~~
check_addr.c:96:44: warning: too many arguments for format [-Wformat-extra-args]
   96 |         fail_unless(addr_cmp(&a, &b) == 0, "IPv6 net failed");
      |                                            ^~~~~~~~~~~~~~~~~
In file included from ../../include/dnet.h:16,
                 from check_addr.c:10:
check_addr.c: In function 'test_addr_ntop_fn':
../../include/dnet/ip6.h:161:9: warning: pointer targets in initialization of 'u_char *' {aka 'unsigned char *'} from 'char *' differ in signedness [-Wpointer-sign]
  161 |         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
      |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../include/dnet/ip6.h:161:9: note: in definition of macro 'IP6_ADDR_UNSPEC'
  161 |         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
      |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../include/dnet/ip6.h:161:9: note: (near initialization for 'ntop_ip6[0].n')
  161 |         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
      |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../include/dnet/ip6.h:161:9: note: in definition of macro 'IP6_ADDR_UNSPEC'
  161 |         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
      |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../include/dnet/ip6.h:163:9: warning: pointer targets in initialization of 'u_char *' {aka 'unsigned char *'} from 'char *' differ in signedness [-Wpointer-sign]
  163 |         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01"
      |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../include/dnet/ip6.h:163:9: note: in definition of macro 'IP6_ADDR_LOOPBACK'
  163 |         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01"
      |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../include/dnet/ip6.h:163:9: note: (near initialization for 'ntop_ip6[1].n')
  163 |         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01"
      |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../include/dnet/ip6.h:163:9: note: in definition of macro 'IP6_ADDR_LOOPBACK'
  163 |         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01"
      |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
check_addr.c:108:19: warning: pointer targets in initialization of 'u_char *' {aka 'unsigned char *'} from 'char *' differ in signedness [-Wpointer-sign]
  108 |                 { "\xfe\x08\x00\x00\x00\x00\x00\x00"
      |                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
check_addr.c:108:19: note: (near initialization for 'ntop_ip6[2].n')
check_addr.c:110:19: warning: pointer targets in initialization of 'u_char *' {aka 'unsigned char *'} from 'char *' differ in signedness [-Wpointer-sign]
  110 |                 { "\xff\xff\xff\xff\xff\xff\xff\xff"
      |                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
check_addr.c:110:19: note: (near initialization for 'ntop_ip6[3].n')
check_addr.c:113:19: warning: pointer targets in initialization of 'u_char *' {aka 'unsigned char *'} from 'char *' differ in signedness [-Wpointer-sign]
  113 |                 { "\xca\xfe\xba\xbe\x00\x00\x00\x00\x00\x00\x00\x00"
      |                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
check_addr.c:113:19: note: (near initialization for 'ntop_ip6[4].n')
check_addr.c:115:19: warning: pointer targets in initialization of 'u_char *' {aka 'unsigned char *'} from 'char *' differ in signedness [-Wpointer-sign]
  115 |                 { "\xfe\xed\xfa\xce\x00\x00\x00\x00\x00\x00\x00\x00"
      |                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
check_addr.c:115:19: note: (near initialization for 'ntop_ip6[5].n')
check_addr.c:117:19: warning: pointer targets in initialization of 'u_char *' {aka 'unsigned char *'} from 'char *' differ in signedness [-Wpointer-sign]
  117 |                 { "\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00"
      |                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
check_addr.c:117:19: note: (near initialization for 'ntop_ip6[6].n')
check_addr.c:119:19: warning: pointer targets in initialization of 'u_char *' {aka 'unsigned char *'} from 'char *' differ in signedness [-Wpointer-sign]
  119 |                 { "\x00\x00\x00\x00\x00\x00\x00\x00"
      |                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
check_addr.c:119:19: note: (near initialization for 'ntop_ip6[7].n')
check_addr.c:128:55: warning: too many arguments for format [-Wformat-extra-args]
  128 |         fail_unless(strcmp(buf, "1.2.3.255/23") == 0, "bad /23 handling");
      |                                                       ^~~~~~~~~~~~~~~~~~
check_addr.c:130:54: warning: too many arguments for format [-Wformat-extra-args]
  130 |         fail_unless(strcmp(buf, "1.2.3.255/0") == 0, "bad /0 handling");
      |                                                      ^~~~~~~~~~~~~~~~~
check_addr.c:132:52: warning: too many arguments for format [-Wformat-extra-args]
  132 |         fail_unless(strcmp(buf, "1.2.3.255") == 0, "bad /32 handling");
      |                                                    ^~~~~~~~~~~~~~~~~~
check_addr.c:133:52: warning: too many arguments for format [-Wformat-extra-args]
  133 |         fail_unless(addr_ntop(&a, buf, 9) == NULL, "buffer overflow?");
      |                                                    ^~~~~~~~~~~~~~~~~~
check_addr.c:138:40: warning: too many arguments for format [-Wformat-extra-args]
  138 |             "00:00:00:00:00:00") == 0, "bad empty MAC handling");
      |                                        ^~~~~~~~~~~~~~~~~~~~~~~~
check_addr.c:141:40: warning: too many arguments for format [-Wformat-extra-args]
  141 |             "00:0d:0e:0a:0d:00") == 0, "b0rked");
      |                                        ^~~~~~~~
check_addr.c:143:62: warning: too many arguments for format [-Wformat-extra-args]
  143 |         fail_unless(addr_ntop(&a, buf, sizeof(buf)) == NULL, "took /16 mask");
      |                                                              ^~~~~~~~~~~~~~~
check_addr.c: In function 'test_addr_pton_fn':
../../include/dnet/ip6.h:161:9: warning: pointer targets in initialization of 'u_char *' {aka 'unsigned char *'} from 'char *' differ in signedness [-Wpointer-sign]
  161 |         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
      |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../include/dnet/ip6.h:161:9: note: in definition of macro 'IP6_ADDR_UNSPEC'
  161 |         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
      |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../include/dnet/ip6.h:161:9: note: (near initialization for 'pton_ip6[0].n')
  161 |         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
      |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../include/dnet/ip6.h:161:9: note: in definition of macro 'IP6_ADDR_UNSPEC'
  161 |         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
      |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../include/dnet/ip6.h:163:9: warning: pointer targets in initialization of 'u_char *' {aka 'unsigned char *'} from 'char *' differ in signedness [-Wpointer-sign]
  163 |         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01"
      |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../include/dnet/ip6.h:163:9: note: in definition of macro 'IP6_ADDR_LOOPBACK'
  163 |         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01"
      |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../include/dnet/ip6.h:163:9: note: (near initialization for 'pton_ip6[1].n')
  163 |         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01"
      |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../include/dnet/ip6.h:163:9: note: in definition of macro 'IP6_ADDR_LOOPBACK'
  163 |         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01"
      |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
check_addr.c:162:29: warning: pointer targets in initialization of 'u_char *' {aka 'unsigned char *'} from 'char *' differ in signedness [-Wpointer-sign]
  162 |                 { "fe08::", "\xfe\x08\x00\x00\x00\x00\x00\x00"
      |                             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
check_addr.c:162:29: note: (near initialization for 'pton_ip6[2].n')
check_addr.c:164:30: warning: pointer targets in initialization of 'u_char *' {aka 'unsigned char *'} from 'char *' differ in signedness [-Wpointer-sign]
  164 |                 { "fe08::1", "\xfe\x08\x00\x00\x00\x00\x00\x00"
      |                              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
check_addr.c:164:30: note: (near initialization for 'pton_ip6[3].n')
check_addr.c:166:62: warning: pointer targets in initialization of 'u_char *' {aka 'unsigned char *'} from 'char *' differ in signedness [-Wpointer-sign]
  166 |                 { "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", "\xff\xff\xff\xff"
      |                                                              ^~~~~~~~~~~~~~~~~~
check_addr.c:166:62: note: (near initialization for 'pton_ip6[4].n')
check_addr.c:168:50: warning: pointer targets in initialization of 'u_char *' {aka 'unsigned char *'} from 'char *' differ in signedness [-Wpointer-sign]
  168 |                 { "cafe::babe:dead:beef:0:ffff", "\xca\xfe\x00\x00\x00\x00"
      |                                                  ^~~~~~~~~~~~~~~~~~~~~~~~~~
check_addr.c:168:50: note: (near initialization for 'pton_ip6[5].n')
check_addr.c:170:32: warning: pointer targets in initialization of 'u_char *' {aka 'unsigned char *'} from 'char *' differ in signedness [-Wpointer-sign]
  170 |                 { "::1.2.3.4", "\x00\x00\x00\x00\x00\x00\x00\x00"
      |                                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
check_addr.c:170:32: note: (near initialization for 'pton_ip6[6].n')
check_addr.c:175:34: warning: pointer targets in initialization of 'u_char *' {aka 'unsigned char *'} from 'char *' differ in signedness [-Wpointer-sign]
  175 |                 { "0:d:e:a:d:0", "\x00\x0d\x0e\x0a\x0d\x00" },
      |                                  ^~~~~~~~~~~~~~~~~~~~~~~~~~
check_addr.c:175:34: note: (near initialization for 'pton_eth[0].n')
In file included from ../../include/dnet.h:14:
../../include/dnet/eth.h:53:33: warning: pointer targets in initialization of 'u_char *' {aka 'unsigned char *'} from 'char *' differ in signedness [-Wpointer-sign]
   53 | #define ETH_ADDR_BROADCAST      "\xff\xff\xff\xff\xff\xff"
      |                                 ^~~~~~~~~~~~~~~~~~~~~~~~~~
check_addr.c:176:40: note: in expansion of macro 'ETH_ADDR_BROADCAST'
  176 |                 { "ff:ff:ff:ff:ff:ff", ETH_ADDR_BROADCAST },
      |                                        ^~~~~~~~~~~~~~~~~~
../../include/dnet/eth.h:53:33: note: (near initialization for 'pton_eth[1].n')
   53 | #define ETH_ADDR_BROADCAST      "\xff\xff\xff\xff\xff\xff"
      |                                 ^~~~~~~~~~~~~~~~~~~~~~~~~~
check_addr.c:176:40: note: in expansion of macro 'ETH_ADDR_BROADCAST'
  176 |                 { "ff:ff:ff:ff:ff:ff", ETH_ADDR_BROADCAST },
      |                                        ^~~~~~~~~~~~~~~~~~
check_addr.c:177:37: warning: pointer targets in initialization of 'u_char *' {aka 'unsigned char *'} from 'char *' differ in signedness [-Wpointer-sign]
  177 |                 { "00:d:0e:a:0d:0", "\x00\x0d\x0e\x0a\x0d\x00" },
      |                                     ^~~~~~~~~~~~~~~~~~~~~~~~~~
check_addr.c:177:37: note: (near initialization for 'pton_eth[2].n')
check_addr.c:180:34: warning: pointer targets in initialization of 'u_char *' {aka 'unsigned char *'} from 'char *' differ in signedness [-Wpointer-sign]
  180 |                 { "0:0:0:0:0:0", "\x00\x00\x00\x00\x00\x00" },
      |                                  ^~~~~~~~~~~~~~~~~~~~~~~~~~
check_addr.c:180:34: note: (near initialization for 'pton_eth[7].n')
check_addr.c:188:44: warning: too many arguments for format [-Wformat-extra-args]
  188 |         fail_unless(addr_cmp(&a, &b) == 0, "bad /17 handling");
      |                                            ^~~~~~~~~~~~~~~~~~
check_addr.c:190:44: warning: too many arguments for format [-Wformat-extra-args]
  190 |         fail_unless(addr_cmp(&a, &b) == 0, "bad handling of missing /32");
      |                                            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
check_addr.c:191:54: warning: too many arguments for format [-Wformat-extra-args]
  191 |         fail_unless(addr_pton("1.2.3.4/33", &b) < 0, "accepted /33");
      |                                                      ^~~~~~~~~~~~~~
check_addr.c:192:53: warning: too many arguments for format [-Wformat-extra-args]
  192 |         fail_unless(addr_pton("1.2.3.256", &b) < 0, "accepted .256");
      |                                                     ^~~~~~~~~~~~~~~
check_addr.c:193:53: warning: too many arguments for format [-Wformat-extra-args]
  193 |         fail_unless(addr_pton("1.2.3.4.5", &b) < 0, "accepted quint octet");
      |                                                     ^~~~~~~~~~~~~~~~~~~~~~
check_addr.c:194:49: warning: too many arguments for format [-Wformat-extra-args]
  194 |         fail_unless(addr_pton("1.2.3", &b) < 0, "accepted triple octet");
      |                                                 ^~~~~~~~~~~~~~~~~~~~~~~
check_addr.c:195:53: warning: too many arguments for format [-Wformat-extra-args]
  195 |         fail_unless(addr_pton("localhost", &b) < 0, "barfed on localhost");
      |                                                     ^~~~~~~~~~~~~~~~~~~~~
check_addr.c:197:13: warning: too many arguments for format [-Wformat-extra-args]
  197 |             "barfed on localhost/24");
      |             ^~~~~~~~~~~~~~~~~~~~~~~~
check_addr.c:200:44: warning: too many arguments for format [-Wformat-extra-args]
  200 |         fail_unless(addr_cmp(&a, &b) == 0, "bad /255.255.255.0 handling");
      |                                            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
check_addr.c: In function 'test_addr_ntoa_fn':
check_addr.c:237:21: warning: too many arguments for format [-Wformat-extra-args]
  237 |                     "barfed on 1.2.3.4 loop");
      |                     ^~~~~~~~~~~~~~~~~~~~~~~~
check_addr.c: In function 'test_addr_ntos_fn':
check_addr.c:252:56: warning: too many arguments for format [-Wformat-extra-args]
  252 |         fail_unless(memcmp(&s1, &s2, sizeof(s1)) == 0, "bad sockaddr_in");
      |                                                        ^~~~~~~~~~~~~~~~~
check_addr.c: In function 'test_addr_ston_fn':
check_addr.c:263:30: warning: argument to 'sizeof' in 'memcpy' call is the same expression as the destination; did you mean to remove the addressof? [-Wsizeof-pointer-memaccess]
  263 |         memcpy(&b, &a, sizeof(&b));
      |                              ^
check_addr.c:265:30: warning: argument to 'sizeof' in 'memcpy' call is the same expression as the destination; did you mean to remove the addressof? [-Wsizeof-pointer-memaccess]
  265 |         memcpy(&t, &s, sizeof(&t));
      |                              ^
check_addr.c:268:53: warning: too many arguments for format [-Wformat-extra-args]
  268 |         fail_unless(memcmp(&a, &b, sizeof(a)) == 0, "bad addr");
      |                                                     ^~~~~~~~~~
check_addr.c:275:50: warning: too many arguments for format [-Wformat-extra-args]
  275 |         fail_unless(addr_ston((SA *)&s, &b) < 0, "sin_family == 123");
      |                                                  ^~~~~~~~~~~~~~~~~~~
check_addr.c: In function 'test_addr_btos_fn':
check_addr.c:286:54: warning: too many arguments for format [-Wformat-extra-args]
  286 |         fail_unless(addr_btos(a.addr_bits, &s) == 0, "b0rked");
      |                                                      ^~~~~~~~
check_addr.c: In function 'test_addr_stob_fn':
check_addr.c:297:40: warning: too many arguments for format [-Wformat-extra-args]
  297 |         fail_unless(a.addr_bits == 24, "b0rked");
      |                                        ^~~~~~~~
check_addr.c:301:32: warning: too many arguments for format [-Wformat-extra-args]
  301 |             a.addr_bits == 24, "sin_family = 0");
      |                                ^~~~~~~~~~~~~~~~
check_addr.c: In function 'test_addr_btom_fn':
check_addr.c:313:48: warning: too many arguments for format [-Wformat-extra-args]
  313 |         fail_unless(mask == htonl(0xffffff00), "b0rked");
      |                                                ^~~~~~~~
check_addr.c: In function 'test_addr_mtob_fn':
check_addr.c:324:40: warning: too many arguments for format [-Wformat-extra-args]
  324 |         fail_unless(a.addr_bits == 24, "b0rked");
      |                                        ^~~~~~~~
In function 'memcpy',
    inlined from 'test_blob_packunpack_fn' at check_blob.c:87:2:
/usr/include/bits/string_fortified.h:29:10: warning: '__builtin_memcpy' reading 6 bytes from a region of size 5 [-Wstringop-overread]
   29 |   return __builtin___memcpy_chk (__dest, __src, __len,
      |          ^
./dnet.c: In function ‘__pyx_f_4dnet_3eth_get’:
./dnet.c:584:49: warning: pointer targets in passing argument 1 of ‘PyBytes_FromStringAndSize’ differ in signedness [-Wpointer-sign]
  584 |   __pyx_2 = PyBytes_FromStringAndSize(__pyx_v_ea.data,6); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 120; goto __pyx_L1;}
      |                                       ~~~~~~~~~~^~~~~
      |                                                 |
      |                                                 uint8_t * {aka unsigned char *}
In file included from /usr/include/python3.8/Python.h:96,
                 from ./dnet.c:5:
/usr/include/python3.8/bytesobject.h:51:50: note: expected ‘const char *’ but argument is of type ‘uint8_t *’ {aka ‘unsigned char *’}
   51 | PyAPI_FUNC(PyObject *) PyBytes_FromStringAndSize(const char *, Py_ssize_t);
      |                                                  ^~~~~~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_3eth_set’:
./dnet.c:616:46: warning: pointer targets in passing argument 1 of ‘__pyx_f_4dnet___memcpy’ differ in signedness [-Wpointer-sign]
  616 |   __pyx_1 = __pyx_f_4dnet___memcpy(__pyx_v_ea.data,__pyx_v_value,6); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 130; goto __pyx_L1;}
      |                                    ~~~~~~~~~~^~~~~
      |                                              |
      |                                              uint8_t * {aka unsigned char *}
./dnet.c:401:48: note: expected ‘char *’ but argument is of type ‘uint8_t *’ {aka ‘unsigned char *’}
  401 | static PyObject *__pyx_f_4dnet___memcpy(char (*__pyx_v_dst),PyObject *__pyx_v_src,int __pyx_v_n) {
      |                                         ~~~~~~~^~~~~~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_3eth___dealloc__’:
./dnet.c:694:3: warning: label ‘__pyx_L1’ defined but not used [-Wunused-label]
  694 |   __pyx_L1:;
      |   ^~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_eth_ntoa’:
./dnet.c:712:46: warning: pointer targets in passing argument 1 of ‘__pyx_f_4dnet___memcpy’ differ in signedness [-Wpointer-sign]
  712 |   __pyx_1 = __pyx_f_4dnet___memcpy(__pyx_v_ea.data,__pyx_v_buf,6); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 151; goto __pyx_L1;}
      |                                    ~~~~~~~~~~^~~~~
      |                                              |
      |                                              uint8_t * {aka unsigned char *}
./dnet.c:401:48: note: expected ‘char *’ but argument is of type ‘uint8_t *’ {aka ‘unsigned char *’}
  401 | static PyObject *__pyx_f_4dnet___memcpy(char (*__pyx_v_dst),PyObject *__pyx_v_src,int __pyx_v_n) {
      |                                         ~~~~~~~^~~~~~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_eth_aton’:
./dnet.c:764:49: warning: pointer targets in passing argument 1 of ‘PyBytes_FromStringAndSize’ differ in signedness [-Wpointer-sign]
  764 |   __pyx_3 = PyBytes_FromStringAndSize(__pyx_v_ea.data,6); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 160; goto __pyx_L1;}
      |                                       ~~~~~~~~~~^~~~~
      |                                                 |
      |                                                 uint8_t * {aka unsigned char *}
/usr/include/python3.8/bytesobject.h:51:50: note: expected ‘const char *’ but argument is of type ‘uint8_t *’ {aka ‘unsigned char *’}
   51 | PyAPI_FUNC(PyObject *) PyBytes_FromStringAndSize(const char *, Py_ssize_t);
      |                                                  ^~~~~~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_eth_pack_hdr’:
./dnet.c:802:45: warning: pointer targets in passing argument 1 of ‘__pyx_f_4dnet___memcpy’ differ in signedness [-Wpointer-sign]
  802 |   __pyx_1 = __pyx_f_4dnet___memcpy(__pyx_v_s.data,__pyx_v_src,6); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; goto __pyx_L1;}
      |                                    ~~~~~~~~~^~~~~
      |                                             |
      |                                             uint8_t * {aka unsigned char *}
./dnet.c:401:48: note: expected ‘char *’ but argument is of type ‘uint8_t *’ {aka ‘unsigned char *’}
  401 | static PyObject *__pyx_f_4dnet___memcpy(char (*__pyx_v_dst),PyObject *__pyx_v_src,int __pyx_v_n) {
      |                                         ~~~~~~~^~~~~~~~~~~~
./dnet.c:806:45: warning: pointer targets in passing argument 1 of ‘__pyx_f_4dnet___memcpy’ differ in signedness [-Wpointer-sign]
  806 |   __pyx_1 = __pyx_f_4dnet___memcpy(__pyx_v_d.data,__pyx_v_dst,6); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; goto __pyx_L1;}
      |                                    ~~~~~~~~~^~~~~
      |                                             |
      |                                             uint8_t * {aka unsigned char *}
./dnet.c:401:48: note: expected ‘char *’ but argument is of type ‘uint8_t *’ {aka ‘unsigned char *’}
  401 | static PyObject *__pyx_f_4dnet___memcpy(char (*__pyx_v_dst),PyObject *__pyx_v_src,int __pyx_v_n) {
      |                                         ~~~~~~~^~~~~~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_2ip___dealloc__’:
./dnet.c:919:3: warning: label ‘__pyx_L1’ defined but not used [-Wunused-label]
  919 |   __pyx_L1:;
      |   ^~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_ip_checksum’:
./dnet.c:1047:3: warning: ‘PyObject_AsReadBuffer’ is deprecated [-Wdeprecated-declarations]
 1047 |   __pyx_1 = (PyObject_AsReadBuffer(__pyx_v_pkt,(&__pyx_v_p),(&__pyx_v_n)) == 0);
      |   ^~~~~~~
In file included from /usr/include/python3.8/Python.h:147:
/usr/include/python3.8/abstract.h:337:17: note: declared here
  337 | PyAPI_FUNC(int) PyObject_AsReadBuffer(PyObject *obj,
      |                 ^~~~~~~~~~~~~~~~~~~~~
./dnet.c:1047:49: warning: passing argument 2 of ‘PyObject_AsReadBuffer’ from incompatible pointer type [-Wincompatible-pointer-types]
 1047 |   __pyx_1 = (PyObject_AsReadBuffer(__pyx_v_pkt,(&__pyx_v_p),(&__pyx_v_n)) == 0);
      |                                                ~^~~~~~~~~~~
      |                                                 |
      |                                                 char **
/usr/include/python3.8/abstract.h:338:52: note: expected ‘const void **’ but argument is of type ‘char **’
  338 |                                       const void **buffer,
      |                                       ~~~~~~~~~~~~~^~~~~~
./dnet.c:1047:62: warning: passing argument 3 of ‘PyObject_AsReadBuffer’ from incompatible pointer type [-Wincompatible-pointer-types]
 1047 |   __pyx_1 = (PyObject_AsReadBuffer(__pyx_v_pkt,(&__pyx_v_p),(&__pyx_v_n)) == 0);
      |                                                             ~^~~~~~~~~~~
      |                                                              |
      |                                                              int *
/usr/include/python3.8/abstract.h:339:51: note: expected ‘Py_ssize_t *’ {aka ‘long int *’} but argument is of type ‘int *’
  339 |                                       Py_ssize_t *buffer_len);
      |                                       ~~~~~~~~~~~~^~~~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_ip_cksum_add’:
./dnet.c:1128:3: warning: ‘PyObject_AsReadBuffer’ is deprecated [-Wdeprecated-declarations]
 1128 |   __pyx_1 = (PyObject_AsReadBuffer(__pyx_v_buf,(&__pyx_v_p),(&__pyx_v_n)) == 0);
      |   ^~~~~~~
/usr/include/python3.8/abstract.h:337:17: note: declared here
  337 | PyAPI_FUNC(int) PyObject_AsReadBuffer(PyObject *obj,
      |                 ^~~~~~~~~~~~~~~~~~~~~
./dnet.c:1128:49: warning: passing argument 2 of ‘PyObject_AsReadBuffer’ from incompatible pointer type [-Wincompatible-pointer-types]
 1128 |   __pyx_1 = (PyObject_AsReadBuffer(__pyx_v_buf,(&__pyx_v_p),(&__pyx_v_n)) == 0);
      |                                                ~^~~~~~~~~~~
      |                                                 |
      |                                                 char **
/usr/include/python3.8/abstract.h:338:52: note: expected ‘const void **’ but argument is of type ‘char **’
  338 |                                       const void **buffer,
      |                                       ~~~~~~~~~~~~~^~~~~~
./dnet.c:1128:62: warning: passing argument 3 of ‘PyObject_AsReadBuffer’ from incompatible pointer type [-Wincompatible-pointer-types]
 1128 |   __pyx_1 = (PyObject_AsReadBuffer(__pyx_v_buf,(&__pyx_v_p),(&__pyx_v_n)) == 0);
      |                                                             ~^~~~~~~~~~~
      |                                                              |
      |                                                              int *
/usr/include/python3.8/abstract.h:339:51: note: expected ‘Py_ssize_t *’ {aka ‘long int *’} but argument is of type ‘int *’
  339 |                                       Py_ssize_t *buffer_len);
      |                                       ~~~~~~~~~~~~^~~~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_4addr___init__’:
./dnet.c:1474:7: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
 1474 |   if (__pyx_1=PyObject_RichCompareBool(__pyx_v_addrtxt, Py_None, Py_EQ) == 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 445; goto __pyx_L1;}
      |       ^~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_4addr_4data___get__’:
./dnet.c:1662:7: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
 1662 |   if (__pyx_3 = PyObject_RichCompareBool(__pyx_1, __pyx_2, Py_EQ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 472; goto __pyx_L1;}
      |       ^~~~~~~
./dnet.c:1677:7: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
 1677 |   if (__pyx_3=PyObject_RichCompareBool(__pyx_2, __pyx_1, Py_EQ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 474; goto __pyx_L1;}
      |       ^~~~~~~
./dnet.c:1692:7: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
 1692 |   if (__pyx_3=PyObject_RichCompareBool(__pyx_1, __pyx_2, Py_EQ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 476; goto __pyx_L1;}
      |       ^~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_4addr_3eth___get__’:
./dnet.c:1742:7: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
 1742 |   if (__pyx_3 = PyObject_RichCompareBool(__pyx_1, __pyx_2,Py_EQ ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 484; goto __pyx_L1;}
      |       ^~~~~~~
In file included from ../include/dnet.h:17,
                 from ./dnet.c:24:
../include/dnet/addr.h:35:33: warning: pointer targets in passing argument 1 of ‘PyBytes_FromStringAndSize’ differ in signedness [-Wpointer-sign]
   35 | #define addr_data8      __addr_u.__data8
./dnet.c:1758:92: note: in expansion of macro ‘addr_data8’
 1758 |   __pyx_2 = PyBytes_FromStringAndSize(((struct __pyx_obj_4dnet_addr *)__pyx_v_self)->_addr.addr_data8,6); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 486; goto __pyx_L1;}
      |                                                                                            ^~~~~~~~~~
/usr/include/python3.8/bytesobject.h:51:50: note: expected ‘const char *’ but argument is of type ‘uint8_t *’ {aka ‘unsigned char *’}
   51 | PyAPI_FUNC(PyObject *) PyBytes_FromStringAndSize(const char *, Py_ssize_t);
      |                                                  ^~~~~~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_4addr_3eth___set__’:
./dnet.c:1792:7: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
 1792 |   if (__pyx_3=PyObject_RichCompareBool(__pyx_1, __pyx_2,Py_EQ ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 489; goto __pyx_L1;}
      |       ^~~~~~~
../include/dnet/addr.h:35:33: warning: pointer targets in passing argument 1 of ‘__pyx_f_4dnet___memcpy’ differ in signedness [-Wpointer-sign]
   35 | #define addr_data8      __addr_u.__data8
./dnet.c:1808:89: note: in expansion of macro ‘addr_data8’
 1808 |   __pyx_2 = __pyx_f_4dnet___memcpy(((struct __pyx_obj_4dnet_addr *)__pyx_v_self)->_addr.addr_data8,__pyx_v_value,6); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 491; goto __pyx_L1;}
      |                                                                                         ^~~~~~~~~~
./dnet.c:401:48: note: expected ‘char *’ but argument is of type ‘uint8_t *’ {aka ‘unsigned char *’}
  401 | static PyObject *__pyx_f_4dnet___memcpy(char (*__pyx_v_dst),PyObject *__pyx_v_src,int __pyx_v_n) {
      |                                         ~~~~~~~^~~~~~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_4addr_2ip___get__’:
./dnet.c:1851:7: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
 1851 |   if (__pyx_3=PyObject_RichCompareBool(__pyx_1, __pyx_2, Py_EQ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 498; goto __pyx_L1;}
      |       ^~~~~~~
../include/dnet/addr.h:35:33: warning: pointer targets in passing argument 1 of ‘PyBytes_FromStringAndSize’ differ in signedness [-Wpointer-sign]
   35 | #define addr_data8      __addr_u.__data8
./dnet.c:1867:92: note: in expansion of macro ‘addr_data8’
 1867 |   __pyx_2 = PyBytes_FromStringAndSize(((struct __pyx_obj_4dnet_addr *)__pyx_v_self)->_addr.addr_data8,4); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 500; goto __pyx_L1;}
      |                                                                                            ^~~~~~~~~~
/usr/include/python3.8/bytesobject.h:51:50: note: expected ‘const char *’ but argument is of type ‘uint8_t *’ {aka ‘unsigned char *’}
   51 | PyAPI_FUNC(PyObject *) PyBytes_FromStringAndSize(const char *, Py_ssize_t);
      |                                                  ^~~~~~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_4addr_2ip___set__’:
./dnet.c:1915:7: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
 1915 |   if (__pyx_1 = PyObject_RichCompareBool(__pyx_2, __pyx_3, Py_EQ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 508; goto __pyx_L1;}
      |       ^~~~~~~
../include/dnet/addr.h:35:33: warning: pointer targets in passing argument 1 of ‘__pyx_f_4dnet___memcpy’ differ in signedness [-Wpointer-sign]
   35 | #define addr_data8      __addr_u.__data8
./dnet.c:1931:91: note: in expansion of macro ‘addr_data8’
 1931 |     __pyx_3 = __pyx_f_4dnet___memcpy(((struct __pyx_obj_4dnet_addr *)__pyx_v_self)->_addr.addr_data8,__pyx_v_value,4); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 511; goto __pyx_L1;}
      |                                                                                           ^~~~~~~~~~
./dnet.c:401:48: note: expected ‘char *’ but argument is of type ‘uint8_t *’ {aka ‘unsigned char *’}
  401 | static PyObject *__pyx_f_4dnet___memcpy(char (*__pyx_v_dst),PyObject *__pyx_v_src,int __pyx_v_n) {
      |                                         ~~~~~~~^~~~~~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_4addr_3ip6___get__’:
./dnet.c:1976:7: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
 1976 |   if (__pyx_3 = PyObject_RichCompareBool(__pyx_1, __pyx_2, Py_EQ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 518; goto __pyx_L1;}
      |       ^~~~~~~
../include/dnet/addr.h:35:33: warning: pointer targets in passing argument 1 of ‘PyBytes_FromStringAndSize’ differ in signedness [-Wpointer-sign]
   35 | #define addr_data8      __addr_u.__data8
./dnet.c:1992:92: note: in expansion of macro ‘addr_data8’
 1992 |   __pyx_2 = PyBytes_FromStringAndSize(((struct __pyx_obj_4dnet_addr *)__pyx_v_self)->_addr.addr_data8,16); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; goto __pyx_L1;}
      |                                                                                            ^~~~~~~~~~
/usr/include/python3.8/bytesobject.h:51:50: note: expected ‘const char *’ but argument is of type ‘uint8_t *’ {aka ‘unsigned char *’}
   51 | PyAPI_FUNC(PyObject *) PyBytes_FromStringAndSize(const char *, Py_ssize_t);
      |                                                  ^~~~~~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_4addr_3ip6___set__’:
./dnet.c:2026:7: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
 2026 |   if (__pyx_3 = PyObject_RichCompareBool(__pyx_1, __pyx_2, Py_EQ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 523; goto __pyx_L1;}
      |       ^~~~~~~
../include/dnet/addr.h:35:33: warning: pointer targets in passing argument 1 of ‘__pyx_f_4dnet___memcpy’ differ in signedness [-Wpointer-sign]
   35 | #define addr_data8      __addr_u.__data8
./dnet.c:2042:89: note: in expansion of macro ‘addr_data8’
 2042 |   __pyx_2 = __pyx_f_4dnet___memcpy(((struct __pyx_obj_4dnet_addr *)__pyx_v_self)->_addr.addr_data8,__pyx_v_value,16); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 525; goto __pyx_L1;}
      |                                                                                         ^~~~~~~~~~
./dnet.c:401:48: note: expected ‘char *’ but argument is of type ‘uint8_t *’ {aka ‘unsigned char *’}
  401 | static PyObject *__pyx_f_4dnet___memcpy(char (*__pyx_v_dst),PyObject *__pyx_v_src,int __pyx_v_n) {
      |                                         ~~~~~~~^~~~~~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_4addr___hash__’:
./dnet.c:2413:7: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
 2413 |   if (__pyx_3=PyObject_RichCompareBool(__pyx_1, __pyx_2, Py_EQ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 578; goto __pyx_L1;}
      |       ^~~~~~~
./dnet.c:2423:7: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
 2423 |   if (__pyx_3 = PyObject_RichCompareBool(__pyx_1, __pyx_2, Py_EQ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 579; goto __pyx_L1;}
      |       ^~~~~~~
./dnet.c:2433:7: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
 2433 |   if (__pyx_3=PyObject_RichCompareBool(__pyx_1, __pyx_2, Py_EQ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 580; goto __pyx_L1;}
      |       ^~~~~~~
./dnet.c:2467:3: warning: label ‘__pyx_L4’ defined but not used [-Wunused-label]
 2467 |   __pyx_L4:;
      |   ^~~~~~~~
./dnet.c:2465:5: warning: label ‘__pyx_L3’ defined but not used [-Wunused-label]
 2465 |     __pyx_L3:;
      |     ^~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_4addr___int__’:
./dnet.c:2519:7: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
 2519 |   if (__pyx_3=PyObject_RichCompareBool(__pyx_1, __pyx_2, Py_EQ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 594; goto __pyx_L1;}
      |       ^~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_4addr___iter__’:
./dnet.c:2599:7: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
 2599 |   if (__pyx_1 = PyObject_RichCompareBool(__pyx_2, __pyx_3,Py_EQ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 603; goto __pyx_L1;}
      |       ^~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_3arp_loop’:
./dnet.c:3121:88: warning: passing argument 2 of ‘arp_loop’ from incompatible pointer type [-Wincompatible-pointer-types]
 3121 |   __pyx_1 = PyLong_FromLong(arp_loop(((struct __pyx_obj_4dnet_arp *)__pyx_v_self)->arp,__pyx_f_4dnet___arp_callback,((void (*))__pyx_v__arg))); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 749; goto __pyx_L1;}
      |                                                                                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                                                                                        |
      |                                                                                        int (*)(struct arp_entry *, void *)
In file included from ../include/dnet.h:18:
../include/dnet/arp.h:101:43: note: expected ‘arp_handler’ {aka ‘int (*)(const struct arp_entry *, void *)’} but argument is of type ‘int (*)(struct arp_entry *, void *)’
  101 | int      arp_loop(arp_t *arp, arp_handler callback, void *arg);
      |                               ~~~~~~~~~~~~^~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_3arp___dealloc__’:
./dnet.c:3214:3: warning: label ‘__pyx_L1’ defined but not used [-Wunused-label]
 3214 |   __pyx_L1:;
      |   ^~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_arp_pack_hdr_ethip’:
./dnet.c:3250:46: warning: pointer targets in passing argument 1 of ‘__pyx_f_4dnet___memcpy’ differ in signedness [-Wpointer-sign]
 3250 |   __pyx_1 = __pyx_f_4dnet___memcpy(__pyx_v_sh.data,__pyx_v_sha,6); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 775; goto __pyx_L1;}
      |                                    ~~~~~~~~~~^~~~~
      |                                              |
      |                                              uint8_t * {aka unsigned char *}
./dnet.c:401:48: note: expected ‘char *’ but argument is of type ‘uint8_t *’ {aka ‘unsigned char *’}
  401 | static PyObject *__pyx_f_4dnet___memcpy(char (*__pyx_v_dst),PyObject *__pyx_v_src,int __pyx_v_n) {
      |                                         ~~~~~~~^~~~~~~~~~~~
./dnet.c:3254:46: warning: pointer targets in passing argument 1 of ‘__pyx_f_4dnet___memcpy’ differ in signedness [-Wpointer-sign]
 3254 |   __pyx_1 = __pyx_f_4dnet___memcpy(__pyx_v_dh.data,__pyx_v_dha,6); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 776; goto __pyx_L1;}
      |                                    ~~~~~~~~~~^~~~~
      |                                              |
      |                                              uint8_t * {aka unsigned char *}
./dnet.c:401:48: note: expected ‘char *’ but argument is of type ‘uint8_t *’ {aka ‘unsigned char *’}
  401 | static PyObject *__pyx_f_4dnet___memcpy(char (*__pyx_v_dst),PyObject *__pyx_v_src,int __pyx_v_n) {
      |                                         ~~~~~~~^~~~~~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_ifent_to_dict’:
./dnet.c:3495:7: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
 3495 |   if (__pyx_3 = PyObject_RichCompareBool(__pyx_1, __pyx_2, Py_EQ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 931; goto __pyx_L1;}
      |       ^~~~~~~
./dnet.c:3517:7: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
 3517 |   if (__pyx_3 = PyObject_RichCompareBool(__pyx_2, __pyx_1, Py_EQ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 933; goto __pyx_L1;}
      |       ^~~~~~~
./dnet.c:3539:7: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
 3539 |   if (__pyx_3 = PyObject_RichCompareBool(__pyx_1, __pyx_2, Py_EQ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 935; goto __pyx_L1;}
      |       ^~~~~~~
./dnet.c:3594:5: warning: label ‘__pyx_L7’ defined but not used [-Wunused-label]
 3594 |     __pyx_L7:;
      |     ^~~~~~~~
./dnet.c:3592:7: warning: label ‘__pyx_L6’ defined but not used [-Wunused-label]
 3592 |       __pyx_L6:;
      |       ^~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_dict_to_ifent’:
./dnet.c:3748:5: warning: label ‘__pyx_L9’ defined but not used [-Wunused-label]
 3748 |     __pyx_L9:;
      |     ^~~~~~~~
./dnet.c:3746:7: warning: label ‘__pyx_L8’ defined but not used [-Wunused-label]
 3746 |       __pyx_L8:;
      |       ^~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_4intf_loop’:
./dnet.c:4138:91: warning: passing argument 2 of ‘intf_loop’ from incompatible pointer type [-Wincompatible-pointer-types]
 4138 |   __pyx_1 = PyLong_FromLong(intf_loop(((struct __pyx_obj_4dnet_intf *)__pyx_v_self)->intf,__pyx_f_4dnet___intf_callback,((void (*))__pyx_v__arg))); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1049; goto __pyx_L1;}
      |                                                                                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                                                                                           |
      |                                                                                           int (*)(struct intf_entry *, void *)
In file included from ../include/dnet.h:25:
../include/dnet/intf.h:64:44: note: expected ‘intf_handler’ {aka ‘int (*)(const struct intf_entry *, void *)’} but argument is of type ‘int (*)(struct intf_entry *, void *)’
   64 | int      intf_loop(intf_t *i, intf_handler callback, void *arg);
      |                               ~~~~~~~~~~~~~^~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_4intf___dealloc__’:
./dnet.c:4228:3: warning: label ‘__pyx_L1’ defined but not used [-Wunused-label]
 4228 |   __pyx_L1:;
      |   ^~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_5route_loop’:
./dnet.c:4559:94: warning: passing argument 2 of ‘route_loop’ from incompatible pointer type [-Wincompatible-pointer-types]
 4559 |   __pyx_1 = PyLong_FromLong(route_loop(((struct __pyx_obj_4dnet_route *)__pyx_v_self)->route,__pyx_f_4dnet___route_callback,((void (*))__pyx_v__arg))); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1148; goto __pyx_L1;}
      |                                                                                              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                                                                                              |
      |                                                                                              int (*)(struct route_entry *, void *)
In file included from ../include/dnet.h:26:
../include/dnet/route.h:34:47: note: expected ‘route_handler’ {aka ‘int (*)(const struct route_entry *, void *)’} but argument is of type ‘int (*)(struct route_entry *, void *)’
   34 | int      route_loop(route_t *r, route_handler callback, void *arg);
      |                                 ~~~~~~~~~~~~~~^~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_5route___dealloc__’:
./dnet.c:4649:3: warning: label ‘__pyx_L1’ defined but not used [-Wunused-label]
 4649 |   __pyx_L1:;
      |   ^~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_rule_to_dict’:
./dnet.c:4711:7: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
 4711 |   if (__pyx_2 = PyObject_RichCompareBool(__pyx_1, __pyx_3, Py_EQ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1196; goto __pyx_L1;}
      |       ^~~~~~~
./dnet.c:4733:7: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
 4733 |   if (__pyx_2 = PyObject_RichCompareBool(__pyx_3, __pyx_1, Py_EQ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1198; goto __pyx_L1;}
      |       ^~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_dict_to_rule’:
./dnet.c:4861:9: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
 4861 |     if (__pyx_3 = PyObject_RichCompareBool(__pyx_1, __pyx_4, Py_EQ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1213; goto __pyx_L1;}
      |         ^~~~~~~
./dnet.c:4868:11: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
 4868 |       if (__pyx_3 = PyObject_RichCompareBool(__pyx_1, __pyx_4, Py_EQ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1213; goto __pyx_L1;}
      |           ^~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_2fw_loop’:
./dnet.c:5219:85: warning: passing argument 2 of ‘fw_loop’ from incompatible pointer type [-Wincompatible-pointer-types]
 5219 |   __pyx_1 = PyLong_FromLong(fw_loop(((struct __pyx_obj_4dnet_fw *)__pyx_v_self)->fw,__pyx_f_4dnet___fw_callback,((void (*))__pyx_v__arg))); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1284; goto __pyx_L1;}
      |                                                                                     ^~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                                                                                     |
      |                                                                                     int (*)(struct fw_rule *, void *)
In file included from ../include/dnet.h:27:
../include/dnet/fw.h:50:38: note: expected ‘fw_handler’ {aka ‘int (*)(const struct fw_rule *, void *)’} but argument is of type ‘int (*)(struct fw_rule *, void *)’
   50 | int      fw_loop(fw_t *f, fw_handler callback, void *arg);
      |                           ~~~~~~~~~~~^~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_2fw___dealloc__’:
./dnet.c:5309:3: warning: label ‘__pyx_L1’ defined but not used [-Wunused-label]
 5309 |   __pyx_L1:;
      |   ^~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_4rand_get’:
./dnet.c:5373:7: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
 5373 |   if (__pyx_2 = PyObject_RichCompareBool(__pyx_v_len, __pyx_1, Py_EQ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1334; goto __pyx_L1;}
      |       ^~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_4rand_xrange’:
./dnet.c:5575:7: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
 5575 |   if (__pyx_1 = PyObject_RichCompareBool(__pyx_v_stop, Py_None, Py_EQ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1377; goto __pyx_L1;}
      |       ^~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_4rand___dealloc__’:
./dnet.c:5643:3: warning: label ‘__pyx_L1’ defined but not used [-Wunused-label]
 5643 |   __pyx_L1:;
      |   ^~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_13__rand_xrange___init__’:
./dnet.c:5739:3: warning: label ‘__pyx_L5’ defined but not used [-Wunused-label]
 5739 |   __pyx_L5:;
      |   ^~~~~~~~
./dnet.c:5732:5: warning: label ‘__pyx_L4’ defined but not used [-Wunused-label]
 5732 |     __pyx_L4:;
      |     ^~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_13__rand_xrange___iter__’:
./dnet.c:5801:3: warning: label ‘__pyx_L1’ defined but not used [-Wunused-label]
 5801 |   __pyx_L1:;
      |   ^~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_13__rand_xrange___len__’:
./dnet.c:5820:3: warning: label ‘__pyx_L1’ defined but not used [-Wunused-label]
 5820 |   __pyx_L1:;
      |   ^~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_13__rand_xrange___next__’:
./dnet.c:5893:5: warning: label ‘__pyx_L6’ defined but not used [-Wunused-label]
 5893 |     __pyx_L6:;
      |     ^~~~~~~~
./dnet.c:5891:7: warning: label ‘__pyx_L5’ defined but not used [-Wunused-label]
 5891 |       __pyx_L5:;
      |       ^~~~~~~~
./dnet.c:5857:5: warning: label ‘__pyx_L3’ defined but not used [-Wunused-label]
 5857 |     __pyx_L3:;
      |     ^~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_3tun_close’:
./dnet.c:6149:3: warning: label ‘__pyx_L1’ defined but not used [-Wunused-label]
 6149 |   __pyx_L1:;
      |   ^~~~~~~~
./dnet.c: In function ‘__pyx_f_4dnet_3tun___dealloc__’:
./dnet.c:6183:3: warning: label ‘__pyx_L1’ defined but not used [-Wunused-label]
 6183 |   __pyx_L1:;
      |   ^~~~~~~~
./dnet.c: In function ‘__pyx_tp_new_4dnet_eth’:
./dnet.c:6405:31: warning: unused variable ‘p’ [-Wunused-variable]
 6405 |   struct __pyx_obj_4dnet_eth *p = (struct __pyx_obj_4dnet_eth *)o;
      |                               ^
./dnet.c: In function ‘__pyx_tp_dealloc_4dnet_eth’:
./dnet.c:6410:31: warning: unused variable ‘p’ [-Wunused-variable]
 6410 |   struct __pyx_obj_4dnet_eth *p = (struct __pyx_obj_4dnet_eth *)o;
      |                               ^
./dnet.c: In function ‘__pyx_tp_traverse_4dnet_eth’:
./dnet.c:6425:31: warning: unused variable ‘p’ [-Wunused-variable]
 6425 |   struct __pyx_obj_4dnet_eth *p = (struct __pyx_obj_4dnet_eth *)o;
      |                               ^
./dnet.c:6424:7: warning: unused variable ‘e’ [-Wunused-variable]
 6424 |   int e;
      |       ^
./dnet.c: In function ‘__pyx_tp_clear_4dnet_eth’:
./dnet.c:6430:31: warning: unused variable ‘p’ [-Wunused-variable]
 6430 |   struct __pyx_obj_4dnet_eth *p = (struct __pyx_obj_4dnet_eth *)o;
      |                               ^
./dnet.c: At top level:
./dnet.c:6478:3: warning: excess elements in struct initializer
 6478 |   0, /*nb_inplace_floor_divide*/
      |   ^
./dnet.c:6478:3: note: (near initialization for ‘__pyx_tp_as_number_eth’)
./dnet.c:6479:3: warning: excess elements in struct initializer
 6479 |   0, /*nb_inplace_true_divide*/
      |   ^
./dnet.c:6479:3: note: (near initialization for ‘__pyx_tp_as_number_eth’)
./dnet.c:6504:3: warning: excess elements in struct initializer
 6504 |   0, /*bf_getsegcount*/
      |   ^
./dnet.c:6504:3: note: (near initialization for ‘__pyx_tp_as_buffer_eth’)
./dnet.c:6505:3: warning: excess elements in struct initializer
 6505 |   0, /*bf_getcharbuffer*/
      |   ^
./dnet.c:6505:3: note: (near initialization for ‘__pyx_tp_as_buffer_eth’)
./dnet.c: In function ‘__pyx_tp_new_4dnet_ip’:
./dnet.c:6558:30: warning: unused variable ‘p’ [-Wunused-variable]
 6558 |   struct __pyx_obj_4dnet_ip *p = (struct __pyx_obj_4dnet_ip *)o;
      |                              ^
./dnet.c: In function ‘__pyx_tp_dealloc_4dnet_ip’:
./dnet.c:6563:30: warning: unused variable ‘p’ [-Wunused-variable]
 6563 |   struct __pyx_obj_4dnet_ip *p = (struct __pyx_obj_4dnet_ip *)o;
      |                              ^
./dnet.c: In function ‘__pyx_tp_traverse_4dnet_ip’:
./dnet.c:6578:30: warning: unused variable ‘p’ [-Wunused-variable]
 6578 |   struct __pyx_obj_4dnet_ip *p = (struct __pyx_obj_4dnet_ip *)o;
      |                              ^
./dnet.c:6577:7: warning: unused variable ‘e’ [-Wunused-variable]
 6577 |   int e;
      |       ^
./dnet.c: In function ‘__pyx_tp_clear_4dnet_ip’:
./dnet.c:6583:30: warning: unused variable ‘p’ [-Wunused-variable]
 6583 |   struct __pyx_obj_4dnet_ip *p = (struct __pyx_obj_4dnet_ip *)o;
      |                              ^
./dnet.c: At top level:
./dnet.c:6629:3: warning: excess elements in struct initializer
 6629 |   0, /*nb_inplace_floor_divide*/
      |   ^
./dnet.c:6629:3: note: (near initialization for ‘__pyx_tp_as_number_ip’)
./dnet.c:6630:3: warning: excess elements in struct initializer
 6630 |   0, /*nb_inplace_true_divide*/
      |   ^
./dnet.c:6630:3: note: (near initialization for ‘__pyx_tp_as_number_ip’)
./dnet.c:6655:3: warning: excess elements in struct initializer
 6655 |   0, /*bf_getsegcount*/
      |   ^
./dnet.c:6655:3: note: (near initialization for ‘__pyx_tp_as_buffer_ip’)
./dnet.c:6656:3: warning: excess elements in struct initializer
 6656 |   0, /*bf_getcharbuffer*/
      |   ^
./dnet.c:6656:3: note: (near initialization for ‘__pyx_tp_as_buffer_ip’)
./dnet.c: In function ‘__pyx_tp_new_4dnet_addr’:
./dnet.c:6709:32: warning: unused variable ‘p’ [-Wunused-variable]
 6709 |   struct __pyx_obj_4dnet_addr *p = (struct __pyx_obj_4dnet_addr *)o;
      |                                ^
./dnet.c: In function ‘__pyx_tp_dealloc_4dnet_addr’:
./dnet.c:6714:32: warning: unused variable ‘p’ [-Wunused-variable]
 6714 |   struct __pyx_obj_4dnet_addr *p = (struct __pyx_obj_4dnet_addr *)o;
      |                                ^
./dnet.c: In function ‘__pyx_tp_traverse_4dnet_addr’:
./dnet.c:6720:32: warning: unused variable ‘p’ [-Wunused-variable]
 6720 |   struct __pyx_obj_4dnet_addr *p = (struct __pyx_obj_4dnet_addr *)o;
      |                                ^
./dnet.c:6719:7: warning: unused variable ‘e’ [-Wunused-variable]
 6719 |   int e;
      |       ^
./dnet.c: In function ‘__pyx_tp_clear_4dnet_addr’:
./dnet.c:6725:32: warning: unused variable ‘p’ [-Wunused-variable]
 6725 |   struct __pyx_obj_4dnet_addr *p = (struct __pyx_obj_4dnet_addr *)o;
      |                                ^
./dnet.c: At top level:
./dnet.c:6840:3: warning: initialization of ‘PyObject * (*)(PyObject *, PyObject *)’ {aka ‘struct _object * (*)(struct _object *, struct _object *)’} from incompatible pointer type ‘PyObject * (*)(PyObject *)’ {aka ‘struct _object * (*)(struct _object *)’} [-Wincompatible-pointer-types]
 6840 |   __pyx_f_4dnet_4addr___long__, /*nb_long*/
      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
./dnet.c:6840:3: note: (near initialization for ‘__pyx_tp_as_number_addr.nb_inplace_add’)
./dnet.c:6857:3: warning: excess elements in struct initializer
 6857 |   0, /*nb_inplace_floor_divide*/
      |   ^
./dnet.c:6857:3: note: (near initialization for ‘__pyx_tp_as_number_addr’)
./dnet.c:6858:3: warning: excess elements in struct initializer
 6858 |   0, /*nb_inplace_true_divide*/
      |   ^
./dnet.c:6858:3: note: (near initialization for ‘__pyx_tp_as_number_addr’)
./dnet.c:6883:3: warning: excess elements in struct initializer
 6883 |   0, /*bf_getsegcount*/
      |   ^
./dnet.c:6883:3: note: (near initialization for ‘__pyx_tp_as_buffer_addr’)
./dnet.c:6884:3: warning: excess elements in struct initializer
 6884 |   0, /*bf_getcharbuffer*/
      |   ^
./dnet.c:6884:3: note: (near initialization for ‘__pyx_tp_as_buffer_addr’)
./dnet.c:6896:3: warning: initialization of ‘PyAsyncMethods *’ from incompatible pointer type ‘int (*)(PyObject *, PyObject *)’ {aka ‘int (*)(struct _object *, struct _object *)’} [-Wincompatible-pointer-types]
 6896 |   __pyx_f_4dnet_4addr___cmp__, /*tp_compare*/
      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~
./dnet.c:6896:3: note: (near initialization for ‘__pyx_type_4dnet_addr.tp_as_async’)
./dnet.c: In function ‘__pyx_tp_new_4dnet___addr_ip4_iter’:
./dnet.c:6937:43: warning: unused variable ‘p’ [-Wunused-variable]
 6937 |   struct __pyx_obj_4dnet___addr_ip4_iter *p = (struct __pyx_obj_4dnet___addr_ip4_iter *)o;
      |                                           ^
./dnet.c: In function ‘__pyx_tp_dealloc_4dnet___addr_ip4_iter’:
./dnet.c:6942:43: warning: unused variable ‘p’ [-Wunused-variable]
 6942 |   struct __pyx_obj_4dnet___addr_ip4_iter *p = (struct __pyx_obj_4dnet___addr_ip4_iter *)o;
      |                                           ^
./dnet.c: In function ‘__pyx_tp_traverse_4dnet___addr_ip4_iter’:
./dnet.c:6948:43: warning: unused variable ‘p’ [-Wunused-variable]
 6948 |   struct __pyx_obj_4dnet___addr_ip4_iter *p = (struct __pyx_obj_4dnet___addr_ip4_iter *)o;
      |                                           ^
./dnet.c:6947:7: warning: unused variable ‘e’ [-Wunused-variable]
 6947 |   int e;
      |       ^
./dnet.c: In function ‘__pyx_tp_clear_4dnet___addr_ip4_iter’:
./dnet.c:6953:43: warning: unused variable ‘p’ [-Wunused-variable]
 6953 |   struct __pyx_obj_4dnet___addr_ip4_iter *p = (struct __pyx_obj_4dnet___addr_ip4_iter *)o;
      |                                           ^
./dnet.c: At top level:
./dnet.c:6998:3: warning: excess elements in struct initializer
 6998 |   0, /*nb_inplace_floor_divide*/
      |   ^
./dnet.c:6998:3: note: (near initialization for ‘__pyx_tp_as_number___addr_ip4_iter’)
./dnet.c:6999:3: warning: excess elements in struct initializer
 6999 |   0, /*nb_inplace_true_divide*/
      |   ^
./dnet.c:6999:3: note: (near initialization for ‘__pyx_tp_as_number___addr_ip4_iter’)
./dnet.c:7024:3: warning: excess elements in struct initializer
 7024 |   0, /*bf_getsegcount*/
      |   ^
./dnet.c:7024:3: note: (near initialization for ‘__pyx_tp_as_buffer___addr_ip4_iter’)
./dnet.c:7025:3: warning: excess elements in struct initializer
 7025 |   0, /*bf_getcharbuffer*/
      |   ^
./dnet.c:7025:3: note: (near initialization for ‘__pyx_tp_as_buffer___addr_ip4_iter’)
./dnet.c: In function ‘__pyx_tp_new_4dnet_arp’:
./dnet.c:7078:31: warning: unused variable ‘p’ [-Wunused-variable]
 7078 |   struct __pyx_obj_4dnet_arp *p = (struct __pyx_obj_4dnet_arp *)o;
      |                               ^
./dnet.c: In function ‘__pyx_tp_dealloc_4dnet_arp’:
./dnet.c:7083:31: warning: unused variable ‘p’ [-Wunused-variable]
 7083 |   struct __pyx_obj_4dnet_arp *p = (struct __pyx_obj_4dnet_arp *)o;
      |                               ^
./dnet.c: In function ‘__pyx_tp_traverse_4dnet_arp’:
./dnet.c:7098:31: warning: unused variable ‘p’ [-Wunused-variable]
 7098 |   struct __pyx_obj_4dnet_arp *p = (struct __pyx_obj_4dnet_arp *)o;
      |                               ^
./dnet.c:7097:7: warning: unused variable ‘e’ [-Wunused-variable]
 7097 |   int e;
      |       ^
./dnet.c: In function ‘__pyx_tp_clear_4dnet_arp’:
./dnet.c:7103:31: warning: unused variable ‘p’ [-Wunused-variable]
 7103 |   struct __pyx_obj_4dnet_arp *p = (struct __pyx_obj_4dnet_arp *)o;
      |                               ^
./dnet.c: At top level:
./dnet.c:7152:3: warning: excess elements in struct initializer
 7152 |   0, /*nb_inplace_floor_divide*/
      |   ^
./dnet.c:7152:3: note: (near initialization for ‘__pyx_tp_as_number_arp’)
./dnet.c:7153:3: warning: excess elements in struct initializer
 7153 |   0, /*nb_inplace_true_divide*/
      |   ^
./dnet.c:7153:3: note: (near initialization for ‘__pyx_tp_as_number_arp’)
./dnet.c:7178:3: warning: excess elements in struct initializer
 7178 |   0, /*bf_getsegcount*/
      |   ^
./dnet.c:7178:3: note: (near initialization for ‘__pyx_tp_as_buffer_arp’)
./dnet.c:7179:3: warning: excess elements in struct initializer
 7179 |   0, /*bf_getcharbuffer*/
      |   ^
./dnet.c:7179:3: note: (near initialization for ‘__pyx_tp_as_buffer_arp’)
./dnet.c: In function ‘__pyx_tp_new_4dnet_intf’:
./dnet.c:7232:32: warning: unused variable ‘p’ [-Wunused-variable]
 7232 |   struct __pyx_obj_4dnet_intf *p = (struct __pyx_obj_4dnet_intf *)o;
      |                                ^
./dnet.c: In function ‘__pyx_tp_dealloc_4dnet_intf’:
./dnet.c:7237:32: warning: unused variable ‘p’ [-Wunused-variable]
 7237 |   struct __pyx_obj_4dnet_intf *p = (struct __pyx_obj_4dnet_intf *)o;
      |                                ^
./dnet.c: In function ‘__pyx_tp_traverse_4dnet_intf’:
./dnet.c:7252:32: warning: unused variable ‘p’ [-Wunused-variable]
 7252 |   struct __pyx_obj_4dnet_intf *p = (struct __pyx_obj_4dnet_intf *)o;
      |                                ^
./dnet.c:7251:7: warning: unused variable ‘e’ [-Wunused-variable]
 7251 |   int e;
      |       ^
./dnet.c: In function ‘__pyx_tp_clear_4dnet_intf’:
./dnet.c:7257:32: warning: unused variable ‘p’ [-Wunused-variable]
 7257 |   struct __pyx_obj_4dnet_intf *p = (struct __pyx_obj_4dnet_intf *)o;
      |                                ^
./dnet.c: At top level:
./dnet.c:7307:3: warning: excess elements in struct initializer
 7307 |   0, /*nb_inplace_floor_divide*/
      |   ^
./dnet.c:7307:3: note: (near initialization for ‘__pyx_tp_as_number_intf’)
./dnet.c:7308:3: warning: excess elements in struct initializer
 7308 |   0, /*nb_inplace_true_divide*/
      |   ^
./dnet.c:7308:3: note: (near initialization for ‘__pyx_tp_as_number_intf’)
./dnet.c:7333:3: warning: excess elements in struct initializer
 7333 |   0, /*bf_getsegcount*/
      |   ^
./dnet.c:7333:3: note: (near initialization for ‘__pyx_tp_as_buffer_intf’)
./dnet.c:7334:3: warning: excess elements in struct initializer
 7334 |   0, /*bf_getcharbuffer*/
      |   ^
./dnet.c:7334:3: note: (near initialization for ‘__pyx_tp_as_buffer_intf’)
./dnet.c: In function ‘__pyx_tp_new_4dnet_route’:
./dnet.c:7387:33: warning: unused variable ‘p’ [-Wunused-variable]
 7387 |   struct __pyx_obj_4dnet_route *p = (struct __pyx_obj_4dnet_route *)o;
      |                                 ^
./dnet.c: In function ‘__pyx_tp_dealloc_4dnet_route’:
./dnet.c:7392:33: warning: unused variable ‘p’ [-Wunused-variable]
 7392 |   struct __pyx_obj_4dnet_route *p = (struct __pyx_obj_4dnet_route *)o;
      |                                 ^
./dnet.c: In function ‘__pyx_tp_traverse_4dnet_route’:
./dnet.c:7407:33: warning: unused variable ‘p’ [-Wunused-variable]
 7407 |   struct __pyx_obj_4dnet_route *p = (struct __pyx_obj_4dnet_route *)o;
      |                                 ^
./dnet.c:7406:7: warning: unused variable ‘e’ [-Wunused-variable]
 7406 |   int e;
      |       ^
./dnet.c: In function ‘__pyx_tp_clear_4dnet_route’:
./dnet.c:7412:33: warning: unused variable ‘p’ [-Wunused-variable]
 7412 |   struct __pyx_obj_4dnet_route *p = (struct __pyx_obj_4dnet_route *)o;
      |                                 ^
./dnet.c: At top level:
./dnet.c:7461:3: warning: excess elements in struct initializer
 7461 |   0, /*nb_inplace_floor_divide*/
      |   ^
./dnet.c:7461:3: note: (near initialization for ‘__pyx_tp_as_number_route’)
./dnet.c:7462:3: warning: excess elements in struct initializer
 7462 |   0, /*nb_inplace_true_divide*/
      |   ^
./dnet.c:7462:3: note: (near initialization for ‘__pyx_tp_as_number_route’)
./dnet.c:7487:3: warning: excess elements in struct initializer
 7487 |   0, /*bf_getsegcount*/
      |   ^
./dnet.c:7487:3: note: (near initialization for ‘__pyx_tp_as_buffer_route’)
./dnet.c:7488:3: warning: excess elements in struct initializer
 7488 |   0, /*bf_getcharbuffer*/
      |   ^
./dnet.c:7488:3: note: (near initialization for ‘__pyx_tp_as_buffer_route’)
./dnet.c: In function ‘__pyx_tp_new_4dnet_fw’:
./dnet.c:7541:30: warning: unused variable ‘p’ [-Wunused-variable]
 7541 |   struct __pyx_obj_4dnet_fw *p = (struct __pyx_obj_4dnet_fw *)o;
      |                              ^
./dnet.c: In function ‘__pyx_tp_dealloc_4dnet_fw’:
./dnet.c:7546:30: warning: unused variable ‘p’ [-Wunused-variable]
 7546 |   struct __pyx_obj_4dnet_fw *p = (struct __pyx_obj_4dnet_fw *)o;
      |                              ^
./dnet.c: In function ‘__pyx_tp_traverse_4dnet_fw’:
./dnet.c:7561:30: warning: unused variable ‘p’ [-Wunused-variable]
 7561 |   struct __pyx_obj_4dnet_fw *p = (struct __pyx_obj_4dnet_fw *)o;
      |                              ^
./dnet.c:7560:7: warning: unused variable ‘e’ [-Wunused-variable]
 7560 |   int e;
      |       ^
./dnet.c: In function ‘__pyx_tp_clear_4dnet_fw’:
./dnet.c:7566:30: warning: unused variable ‘p’ [-Wunused-variable]
 7566 |   struct __pyx_obj_4dnet_fw *p = (struct __pyx_obj_4dnet_fw *)o;
      |                              ^
./dnet.c: At top level:
./dnet.c:7614:3: warning: excess elements in struct initializer
 7614 |   0, /*nb_inplace_floor_divide*/
      |   ^
./dnet.c:7614:3: note: (near initialization for ‘__pyx_tp_as_number_fw’)
./dnet.c:7615:3: warning: excess elements in struct initializer
 7615 |   0, /*nb_inplace_true_divide*/
      |   ^
./dnet.c:7615:3: note: (near initialization for ‘__pyx_tp_as_number_fw’)
./dnet.c:7640:3: warning: excess elements in struct initializer
 7640 |   0, /*bf_getsegcount*/
      |   ^
./dnet.c:7640:3: note: (near initialization for ‘__pyx_tp_as_buffer_fw’)
./dnet.c:7641:3: warning: excess elements in struct initializer
 7641 |   0, /*bf_getcharbuffer*/
      |   ^
./dnet.c:7641:3: note: (near initialization for ‘__pyx_tp_as_buffer_fw’)
./dnet.c: In function ‘__pyx_tp_new_4dnet_rand’:
./dnet.c:7694:32: warning: unused variable ‘p’ [-Wunused-variable]
 7694 |   struct __pyx_obj_4dnet_rand *p = (struct __pyx_obj_4dnet_rand *)o;
      |                                ^
./dnet.c: In function ‘__pyx_tp_dealloc_4dnet_rand’:
./dnet.c:7699:32: warning: unused variable ‘p’ [-Wunused-variable]
 7699 |   struct __pyx_obj_4dnet_rand *p = (struct __pyx_obj_4dnet_rand *)o;
      |                                ^
./dnet.c: In function ‘__pyx_tp_traverse_4dnet_rand’:
./dnet.c:7714:32: warning: unused variable ‘p’ [-Wunused-variable]
 7714 |   struct __pyx_obj_4dnet_rand *p = (struct __pyx_obj_4dnet_rand *)o;
      |                                ^
./dnet.c:7713:7: warning: unused variable ‘e’ [-Wunused-variable]
 7713 |   int e;
      |       ^
./dnet.c: In function ‘__pyx_tp_clear_4dnet_rand’:
./dnet.c:7719:32: warning: unused variable ‘p’ [-Wunused-variable]
 7719 |   struct __pyx_obj_4dnet_rand *p = (struct __pyx_obj_4dnet_rand *)o;
      |                                ^
./dnet.c: At top level:
./dnet.c:7771:3: warning: excess elements in struct initializer
 7771 |   0, /*nb_inplace_floor_divide*/
      |   ^
./dnet.c:7771:3: note: (near initialization for ‘__pyx_tp_as_number_rand’)
./dnet.c:7772:3: warning: excess elements in struct initializer
 7772 |   0, /*nb_inplace_true_divide*/
      |   ^
./dnet.c:7772:3: note: (near initialization for ‘__pyx_tp_as_number_rand’)
./dnet.c:7797:3: warning: excess elements in struct initializer
 7797 |   0, /*bf_getsegcount*/
      |   ^
./dnet.c:7797:3: note: (near initialization for ‘__pyx_tp_as_buffer_rand’)
./dnet.c:7798:3: warning: excess elements in struct initializer
 7798 |   0, /*bf_getcharbuffer*/
      |   ^
./dnet.c:7798:3: note: (near initialization for ‘__pyx_tp_as_buffer_rand’)
./dnet.c: In function ‘__pyx_tp_new_4dnet___rand_xrange’:
./dnet.c:7851:41: warning: unused variable ‘p’ [-Wunused-variable]
 7851 |   struct __pyx_obj_4dnet___rand_xrange *p = (struct __pyx_obj_4dnet___rand_xrange *)o;
      |                                         ^
./dnet.c: In function ‘__pyx_tp_dealloc_4dnet___rand_xrange’:
./dnet.c:7856:41: warning: unused variable ‘p’ [-Wunused-variable]
 7856 |   struct __pyx_obj_4dnet___rand_xrange *p = (struct __pyx_obj_4dnet___rand_xrange *)o;
      |                                         ^
./dnet.c: In function ‘__pyx_tp_traverse_4dnet___rand_xrange’:
./dnet.c:7862:41: warning: unused variable ‘p’ [-Wunused-variable]
 7862 |   struct __pyx_obj_4dnet___rand_xrange *p = (struct __pyx_obj_4dnet___rand_xrange *)o;
      |                                         ^
./dnet.c:7861:7: warning: unused variable ‘e’ [-Wunused-variable]
 7861 |   int e;
      |       ^
./dnet.c: In function ‘__pyx_tp_clear_4dnet___rand_xrange’:
./dnet.c:7867:41: warning: unused variable ‘p’ [-Wunused-variable]
 7867 |   struct __pyx_obj_4dnet___rand_xrange *p = (struct __pyx_obj_4dnet___rand_xrange *)o;
      |                                         ^
./dnet.c: At top level:
./dnet.c:7912:3: warning: excess elements in struct initializer
 7912 |   0, /*nb_inplace_floor_divide*/
      |   ^
./dnet.c:7912:3: note: (near initialization for ‘__pyx_tp_as_number___rand_xrange’)
./dnet.c:7913:3: warning: excess elements in struct initializer
 7913 |   0, /*nb_inplace_true_divide*/
      |   ^
./dnet.c:7913:3: note: (near initialization for ‘__pyx_tp_as_number___rand_xrange’)
./dnet.c:7938:3: warning: excess elements in struct initializer
 7938 |   0, /*bf_getsegcount*/
      |   ^
./dnet.c:7938:3: note: (near initialization for ‘__pyx_tp_as_buffer___rand_xrange’)
./dnet.c:7939:3: warning: excess elements in struct initializer
 7939 |   0, /*bf_getcharbuffer*/
      |   ^
./dnet.c:7939:3: note: (near initialization for ‘__pyx_tp_as_buffer___rand_xrange’)
./dnet.c: In function ‘__pyx_tp_new_4dnet_tun’:
./dnet.c:7992:31: warning: unused variable ‘p’ [-Wunused-variable]
 7992 |   struct __pyx_obj_4dnet_tun *p = (struct __pyx_obj_4dnet_tun *)o;
      |                               ^
./dnet.c: In function ‘__pyx_tp_dealloc_4dnet_tun’:
./dnet.c:7997:31: warning: unused variable ‘p’ [-Wunused-variable]
 7997 |   struct __pyx_obj_4dnet_tun *p = (struct __pyx_obj_4dnet_tun *)o;
      |                               ^
./dnet.c: In function ‘__pyx_tp_traverse_4dnet_tun’:
./dnet.c:8012:31: warning: unused variable ‘p’ [-Wunused-variable]
 8012 |   struct __pyx_obj_4dnet_tun *p = (struct __pyx_obj_4dnet_tun *)o;
      |                               ^
./dnet.c:8011:7: warning: unused variable ‘e’ [-Wunused-variable]
 8011 |   int e;
      |       ^
./dnet.c: In function ‘__pyx_tp_clear_4dnet_tun’:
./dnet.c:8017:31: warning: unused variable ‘p’ [-Wunused-variable]
 8017 |   struct __pyx_obj_4dnet_tun *p = (struct __pyx_obj_4dnet_tun *)o;
      |                               ^
./dnet.c: At top level:
./dnet.c:8080:3: warning: excess elements in struct initializer
 8080 |   0, /*nb_inplace_floor_divide*/
      |   ^
./dnet.c:8080:3: note: (near initialization for ‘__pyx_tp_as_number_tun’)
./dnet.c:8081:3: warning: excess elements in struct initializer
 8081 |   0, /*nb_inplace_true_divide*/
      |   ^
./dnet.c:8081:3: note: (near initialization for ‘__pyx_tp_as_number_tun’)
./dnet.c:8106:3: warning: excess elements in struct initializer
 8106 |   0, /*bf_getsegcount*/
      |   ^
./dnet.c:8106:3: note: (near initialization for ‘__pyx_tp_as_buffer_tun’)
./dnet.c:8107:3: warning: excess elements in struct initializer
 8107 |   0, /*bf_getcharbuffer*/
      |   ^
./dnet.c:8107:3: note: (near initialization for ‘__pyx_tp_as_buffer_tun’)
./dnet.c: In function ‘__Pyx_EndUnpack’:
./dnet.c:9276:7: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
 9276 |   if (item = PySequence_GetItem(seq, i)) {
      |       ^~~~
./dnet.c: At top level:
./dnet.c:33:12: warning: ‘__Pyx_PrintItem’ declared ‘static’ but never defined [-Wunused-function]
   33 | static int __Pyx_PrintItem(PyObject *); /*proto*/
      |            ^~~~~~~~~~~~~~~
./dnet.c:34:12: warning: ‘__Pyx_PrintNewline’ declared ‘static’ but never defined [-Wunused-function]
   34 | static int __Pyx_PrintNewline(void); /*proto*/
      |            ^~~~~~~~~~~~~~~~~~
./dnet.c:36:13: warning: ‘__Pyx_ReRaise’ declared ‘static’ but never defined [-Wunused-function]
   36 | static void __Pyx_ReRaise(void); /*proto*/
      |             ^~~~~~~~~~~~~
./dnet.c:37:18: warning: ‘__Pyx_Import’ declared ‘static’ but never defined [-Wunused-function]
   37 | static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list); /*proto*/
      |                  ^~~~~~~~~~~~
./dnet.c:38:18: warning: ‘__Pyx_GetExcValue’ declared ‘static’ but never defined [-Wunused-function]
   38 | static PyObject *__Pyx_GetExcValue(void); /*proto*/
      |                  ^~~~~~~~~~~~~~~~~
./dnet.c:41:12: warning: ‘__Pyx_GetStarArgs’ declared ‘static’ but never defined [-Wunused-function]
   41 | static int __Pyx_GetStarArgs(PyObject **args, PyObject **kwds, char *kwd_list[], Py_ssize_t nargs, PyObject **args2, PyObject **kwds2); /*proto*/
      |            ^~~~~~~~~~~~~~~~~
./dnet.c:42:13: warning: ‘__Pyx_WriteUnraisable’ declared ‘static’ but never defined [-Wunused-function]
   42 | static void __Pyx_WriteUnraisable(char *name); /*proto*/
      |             ^~~~~~~~~~~~~~~~~~~~~
./dnet.c:44:22: warning: ‘__Pyx_ImportType’ declared ‘static’ but never defined [-Wunused-function]
   44 | static PyTypeObject *__Pyx_ImportType(char *module_name, char *class_name, long size);  /*proto*/
      |                      ^~~~~~~~~~~~~~~~
./dnet.c:45:12: warning: ‘__Pyx_SetVtable’ declared ‘static’ but never defined [-Wunused-function]
   45 | static int __Pyx_SetVtable(PyObject *dict, void *vtable); /*proto*/
      |            ^~~~~~~~~~~~~~~
./dnet.c:46:12: warning: ‘__Pyx_GetVtable’ declared ‘static’ but never defined [-Wunused-function]
   46 | static int __Pyx_GetVtable(PyObject *dict, void *vtabptr); /*proto*/
      |            ^~~~~~~~~~~~~~~
./dnet.c:47:18: warning: ‘__Pyx_CreateClass’ declared ‘static’ but never defined [-Wunused-function]
   47 | static PyObject *__Pyx_CreateClass(PyObject *bases, PyObject *dict, PyObject *name, char *modname); /*proto*/
      |                  ^~~~~~~~~~~~~~~~~
./dnet.c:50:12: warning: ‘__Pyx_InitCApi’ declared ‘static’ but never defined [-Wunused-function]
   50 | static int __Pyx_InitCApi(PyObject *module); /*proto*/
      |            ^~~~~~~~~~~~~~
./dnet.c:51:12: warning: ‘__Pyx_ImportModuleCApi’ declared ‘static’ but never defined [-Wunused-function]
   51 | static int __Pyx_ImportModuleCApi(__Pyx_CApiTabEntry *t); /*proto*/
      |            ^~~~~~~~~~~~~~~~~~~~~~
../include/config.h:298:5: warning: type of ‘strlcpy’ does not match original declaration [-Wlto-type-mismatch]
  298 | int strlcpy(char *, const char *, int);
      |     ^
../src/strlcpy.c:43:1: note: return value type mismatch
   43 | strlcpy(dst, src, siz)
      | ^
../src/strlcpy.c:43:1: note: type ‘size_t’ should match type ‘int’
../src/strlcpy.c:43:1: note: ‘strlcpy’ was previously declared here
../src/strlcpy.c:43:1: note: code may be misoptimized unless ‘-fno-strict-aliasing’ is used

kloczek avatar May 02 '22 08:05 kloczek

Will try to help you with autoconf warnings so you can skipp that part 😄

kloczek avatar May 02 '22 08:05 kloczek

BTW looks like version in configure.ac has not been updated 😃 https://github.com/ofalk/libdnet/blob/5906d359a179f5d484eb2f77b53bd4b6bf8b0566/configure.ac#L9

kloczek avatar May 02 '22 08:05 kloczek

Oh crap. monday--

If you could look at the autoconf (beast), that would be awesome!

When sending an MR, please against devel branch. And if I find some time, I'll also look into the issue (again).

ofalk avatar May 02 '22 08:05 ofalk

I'll try to make few MRs because I see it is much more to clean in ac/am/lt stuff. With few MRs you will have better visibilito what is the propose of exact changes and aprove/reject/discuss in one chunk 😄 I'm not sure but probably it would be good to make next release with corrected version and than we will continue.

kloczek avatar May 02 '22 09:05 kloczek

Perfect!

I've now added 1.16.1 release: https://github.com/ofalk/libdnet/releases/tag/libdnet-1.16.1

ofalk avatar May 02 '22 09:05 ofalk

@kloczek do you think you have time to look into this again?

ofalk avatar Apr 07 '23 07:04 ofalk

Latest run against the default branch:

# rpmbuild -ba --with check libdnet.spec --quiet 2>&1 | grep -- -W | sed 's/.*\[//; s/\]//' | sort | uniq -c | sort -nr
     34 -Wpointer-sign
      8 -Wincompatible-pointer-types
      2 -Wsizeof-pointer-memaccess
      1 -Wunused-variable
      1 -Wunused-result
      1 -Wunused-function
      1 -Wstringop-overflow=
      1 -Wmaybe-uninitialized
      1 -Wimplicit-function-declaration
      1 -Warray-bounds

Since this issue was about LTO, I consider this closed. Thanks again for reporting it @kloczek !

ofalk avatar Nov 06 '23 14:11 ofalk

Thx. At least -Wstringop-overflow= would be good to fix as well 😋

kloczek avatar Nov 06 '23 19:11 kloczek

And -Wunused-variable, -Wunused-function are trivial as well 😄

kloczek avatar Nov 06 '23 19:11 kloczek

Agree with you @kloczek - it's not like I don't want to address these as well, but not as part of this issue. :-)

ofalk avatar Nov 07 '23 09:11 ofalk

Thx for the clarification👍 😄

kloczek avatar Nov 07 '23 17:11 kloczek