[Dnsmasq-discuss] Announce: dnsmasq-2.81rc1

Matthias Andree matthias.andree at gmx.de
Wed Mar 4 22:29:11 GMT 2020


Am 02.03.20 um 23:39 schrieb Simon Kelley:
> It's almost 18 months since the last release of dnsmasq, which is far
> too long.
>
> I've done my best over the last couple of weeks to tie up loose-ends, so
> that a 2.81 release can happen. There are ongoing development efforts,
> but they may have to wait for the 2.82 release, which I intend to be
> much sooner after 2.81.
>
> So, I've just tagged 2.81rc1, get it from git, or at
>
> http://www.thekelleys.org.uk/dnsmasq/release-candidates/dnsmasq-2.81rc1.tar.gz
>
> and let me know 1) if there are any showstopping bugs. or 2) there are
> are any loose ends I missed.
>
> Once those, if any, are dealt with, we shall have a new release!

Simon,

good to see progress towards a new release.

Unfortunately, dnsmasq 2.81rc1 doesn't compile under FreeBSD OOTB, and I
don't have much time to investigate run-time behaviour, so I hope the
info below helps. The patches I use are at
https://svnweb.freebsd.org/ports/head/dns/dnsmasq-devel/files, but the
warning issue at the end of this email isn't fixed by them.

The SOL_TCP is non-portable and it also contradicts POSIX and Linux
manpages, - unless we use SOL_SOCKET, we're supposed to use
getprotoent(3) to get the magic number for "TCP level", whereas POSIX
suggests to use IPPROTO_TCP.

Best read these error messages with a __fixed-width__ font.

> gmake[3]: Entering directory
> '/usr/ports.svn/dns/dnsmasq-devel/work/dnsmasq-2.81rc1/src'
> cc -O2 -pipe  -Wall -Wno-unused-value -Wno-unused-parameter
> -Wno-unused-variable -Wno-unused-function -DHAVE_LIBIDN2 -DHAVE_DBUS
> -DHAVE_LUASCRIPT -DHAVE_DNSSEC -I/usr/local/include -DLIBICONV_PLUG
> -fstack-protector-strong -fno-strict-aliasing  -O2 -pipe  -Wall
> -Wno-unused-value -Wno-unused-parameter -Wno-unused-variable
> -Wno-unused-function -DHAVE_LIBIDN2 -DHAVE_DBUS -DHAVE_LUASCRIPT
> -DHAVE_DNSSEC -I/usr/local/include -DLIBICONV_PLUG
> -fstack-protector-strong -fno-strict-aliasing 
> -DLOCALEDIR='"/usr/local/share/locale"' -DVERSION='"2.81rc1"'
> -I/usr/local/include/dbus-1.0 -I/usr/local/lib/dbus-1.0/include  
> -I/usr/local/include       -I/usr/local/include  -I/usr/local/include
> -I/usr/local/include/dbus-1.0 -I/usr/local/lib/dbus-1.0/include 
> -I/usr/local/include/lua52 -DLIBICONV_PLUG -c network.c    
> network.c:731:22: error: use of undeclared identifier 'SOL_TCP'
>       setsockopt(fd, SOL_TCP, TCP_FASTOPEN, &qlen, sizeof(qlen));
>                      ^
> 1 error generated.
> gmake[3]: ***
> [/usr/ports.svn/dns/dnsmasq-devel/work/dnsmasq-2.81rc1/Makefile:161:
> network.o] Error 1

The other things appears to be an improper reference, config->addr6
appears to be the union and not its member. First clang:

> cc -O2 -pipe  -Wall -Wno-unused-value -Wno-unused-parameter
> -Wno-unused-variable -Wno-unused-function -DHAVE_LIBIDN2 -DHAVE_DBUS
> -DHAVE_LUASCRIPT -DHAVE_DNSSEC -I/usr/local/include -DLIBICONV_PLUG
> -fstack-protector-strong -fno-strict-aliasing  -O2 -pipe  -Wall
> -Wno-unused-value -Wno-unused-parameter -Wno-unused-variable
> -Wno-unused-function -DHAVE_LIBIDN2 -DHAVE_DBUS -DHAVE_LUASCRIPT
> -DHAVE_DNSSEC -I/usr/local/include -DLIBICONV_PLUG
> -fstack-protector-strong -fno-strict-aliasing 
> -DLOCALEDIR='"/usr/local/share/locale"' -DVERSION='"2.81rc1"'
> -I/usr/local/include/dbus-1.0 -I/usr/local/lib/dbus-1.0/include  
> -I/usr/local/include       -I/usr/local/include  -I/usr/local/include
> -I/usr/local/include/dbus-1.0 -I/usr/local/lib/dbus-1.0/include 
> -I/usr/local/include/lua52 -DLIBICONV_PLUG -c rfc3315.c    
> rfc3315.c:1193:44: error: member reference base type 'struct addrlist
> *' is not a structure or union
>                 if (have_config(config, CONFIG_ADDR6) &&
> IN6_ARE_ADDR_EQUAL(&config->addr6, &addr))
>                                                         
> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> /usr/include/netinet6/in6.h:232:17: note: expanded from macro
> 'IN6_ARE_ADDR_EQUAL'
>     (memcmp(&(a)->s6_addr[0], &(b)->s6_addr[0], sizeof(struct
> in6_addr)) == 0)
>              ~~~^ ~~~~~~~
> 1 error generated.
GCC words the error differently:

> rfc3315.c: In function 'dhcp6_no_relay':
> rfc3315.c:1193:44: error: 'config->addr6' is a pointer; did you mean
> to use '->'?
>  1193 |   if (have_config(config, CONFIG_ADDR6) &&
> IN6_ARE_ADDR_EQUAL(&config->addr6, &addr))
>       |                                            ^~~~~~~~~~~~~~~~~~

here, you have

struct dhcp_config *config;

struct dhcp_config {
//...
  struct addrlist *addr6;
//...
}

struct addrlist {
  union all_addr addr;
// ...
  struct addrlist *next;
}

union all_addr {
//...
   struct in6_addr addr6;
// ...
}

So I guess this should be
/* ... */ && IN6_ARE_ADDR_EQUAL(&config->addr6->addr.addr6, &addr))   //
at least, this compiles


And finally there's a portability warning that I only get with clang,
but not with GCC:

> dump.c:136:18: warning: taking address of packed member 'ip6_src' of
> class or structure 'ip6_hdr' may result in an unaligned pointer value
> [-Waddress-of-packed-member]
>         sum += ((u16 *)&ip6.ip6_src)[i];
>                         ^~~~~~~~~~~
> 1 warning generated.

HTH & cheers,

Matthias





More information about the Dnsmasq-discuss mailing list