<div data-ntes="ntes_mail_body_root" style="line-height:1.7;color:#000000;font-size:14px;font-family:Arial"><p style="margin:0;"><span style="font-family: Arial; font-size: 14px;">Dear all, I start
dnsmasq(version 2.86) with --dhcp-lease-max=1, only one DHCP lease can be
allocated. I find that the behavior of IPv4 and IPv6 is inconsistent. IPv4
returns a DHCPNAK packet with log
"no leases left". Although IPv6 does not allocate a lease in
function lease_allocate, it still returns a DHCPADVERSISE packet and allocates
an IPv6 address.</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">Is IPv6
behavior normal? According to my understanding, if lease_allocate returns NULL,
then the IPv6 address should not be allocated and the DHCPADVERTISE message
should not be returned.</span></p>
<div style="margin:0in;font-family:Calibri;font-size:11.0pt"><span style="font-family: Arial; font-size: 14px;">Looking
forward to your reply, thank you!</span></div><div style="margin:0in;font-family:Calibri;font-size:11.0pt"><br></div><div style="margin:0in;font-family:Calibri;font-size:11.0pt"><p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">cmd:</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">dnsmasq
--dhcp-range=set:subnet,46:41::1:1,46:41::ffff:1,infinite --dhcp-lease-max=1</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;"> </span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">gdb
trace:</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">Breakpoint
1, lease6_allocate (addrp=addrp@entry=0x7fff0ecc0090, lease_type=32) at
lease.c:804</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">804
struct dhcp_lease *lease = lease_allocate();</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">(gdb) s</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">lease_allocate
() at lease.c:770</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">770 if
(!leases_left || !(lease = whine_malloc(sizeof(struct dhcp_lease))))</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">(gdb) p
leases_left</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">$2 = 0</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">(gdb) n</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">lease6_allocate
(addrp=addrp@entry=0x7fff0ecc0090, lease_type=32) at lease.c:806</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">806 if
(lease)</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">(gdb)</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">815
return lease;</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">(gdb) p
lease</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">$3 =
(struct dhcp_lease *) 0x0</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">(gdb) n</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">update_leases
(now=1734576779, lease_time=7500, addr=0x7fff0ecc0090, context=0x564b4c6cbaf0,
state=0x7fff0ecc0100) at rfc3315.c:1929</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">1929 if
(lease)</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">(gdb) n</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">1723 if
((lease = lease6_find_by_addr(addr, 128, 0)))</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">(gdb)</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">1727 if
(context->netid.next == &context->netid &&
context->netid.net)</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">(gdb) p
lease</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">$4 =
(struct dhcp_lease *) 0x0</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">(gdb) n</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">1729
context->netid.next = state->context_tags;</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">(gdb)</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">1730
state->context_tags = &context->netid;</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">(gdb)</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">1732 if
(!state->hostname_auth)</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">(gdb)</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">1736 for
(id_list = daemon->dhcp_ignore_names; id_list; id_list = id_list->next)</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">(gdb)</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">1744
log6_quiet(state, state->lease_allocate ? "DHCPREPLY" :
"DHCPADVERTISE", addr, state->hostname);</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">(gdb)</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">dhcp6_no_relay
(state=state@entry=0x7fff0ecc0100, msg_type=<optimized out>,
inbuff=<optimized out>, sz=sz@entry=102, is_unicast=<optimized
out>, now=now@entry=1734576779) at rfc3315.c:886</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">886
get_context_tag(state, dynamic);</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">(gdb)</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">887
address_assigned = 1;</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">(gdb)</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">844 for
(; ia_option; ia_option = opt6_find(opt6_next(ia_option, ia_end), ia_end,
OPTION6_IAADDR, 24))</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">(gdb)</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">900
end_ia(t1cntr, min_time, 0);</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">(gdb)</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">901
end_opt6(o);</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">(gdb)</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">825 for
(opt = state->packet_options; opt; opt = opt6_next(opt, state->end))</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">(gdb)</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">904 if
(address_assigned)</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">(gdb)</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">906 o1 =
new_opt6(OPTION6_STATUS_CODE);</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">(gdb)</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">907
put_opt6_short(DHCP6SUCCESS);</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">(gdb)</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">908
put_opt6_string(_("success"));</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">(gdb)</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">909
end_opt6(o1);</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">(gdb)</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">1056
tagif = add_options(state, 0);</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">(gdb)</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">1057
break;</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">(gdb)</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">1311
log_tags(tagif, state->xid);</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">(gdb)</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">1317
((unsigned char *)(daemon->outpacket.iov_base))[start_msg] = outmsgtype;</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">(gdb)</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">1319
log6_opts(0, state->xid, daemon->outpacket.iov_base + start_opts,
daemon->outpacket.iov_base + save_counter(-1));</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">(gdb)</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">1321
return 1;</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">(gdb)</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">dhcp6_reply
(context=0x564b4c6cbaf0, interface=interface@entry=132,
iface_name=iface_name@entry=0x7fff0ecc02e0 "veth0",
fallback=fallback@entry=0x7fff0ecc0320, ll_addr=ll_addr@entry=0x7fff0ecc0340,
ula_addr=ula_addr@entry=0x7fff0ecc0350, sz=102, client_addr=0x7fff0ecc0298,
now=1734576779) at rfc3315.c:102</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">102
return msg_type == DHCP6RELAYFORW ? DHCPV6_SERVER_PORT : DHCPV6_CLIENT_PORT;</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">(gdb)</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">dhcp6_packet
(now=1734576779) at dhcp6.c:270</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">270 if
(port != 0)</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">(gdb)</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">272
from.sin6_port = htons(port);</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">(gdb)</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">273 while
(retry_send(sendto(daemon->dhcp6fd, daemon->outpacket.iov_base,</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">(gdb)</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">280
lease_update_file(now);</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">(gdb)</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">281
lease_update_dns(0);</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">(gdb)</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;"> </span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">tcpdump:</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">[root@localhost.localdomain
/]$ip netns exec ns0 tcpdump -i veth0 -vvv port 546 or port 547</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">dropped
privs to tcpdump</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">tcpdump:
listening on veth0, link-type EN10MB (Ethernet), snapshot length 262144 bytes</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">15:55:18.192825
IP6 (flowlabel 0xffe1d, hlim 1, next-header UDP (17) payload length: 92)
fe80::f03a:70ff:feb0:6dfe.dhcpv6-client > ff02::1:2.dhcpv6-server: [bad udp
cksum 0xcbdd -> 0x890a!] dhcp6 solicit (xid=3e98e (client-ID type 4)
(option-request DNS-server DNS-search-list) (elapsed-time 0) (IA_NA
IAID:1890610686 T1:3600 T2:5400 (IA_ADDR 46:41::165a:c84d pltime:7200
vltime:10800)))</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">15:55:18.194264
IP6 (class 0xc0, flowlabel 0x91e38, hlim 64, next-header UDP (17) payload
length: 134) localhost.localdomain.dhcpv6-server >
fe80::f03a:70ff:feb0:6dfe.dhcpv6-client: [bad udp cksum 0x1a8f -> 0xb1bb!]
dhcp6 advertise (xid=3e98e (client-ID type 4) (server-ID hwaddr/time type 1
time 787889844 e6ad77d9f384) (IA_NA IAID:1890610686 T1:3600 T2:6300 (IA_ADDR
46:41::165a:c84d pltime:7200 vltime:10800)) (status-code Success) (preference
0) (DNS-server localhost.localdomain))</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">15:55:19.224489
IP6 (flowlabel 0xffe1d, hlim 1, next-header UDP (17) payload length: 110)
fe80::f03a:70ff:feb0:6dfe.dhcpv6-client > ff02::1:2.dhcpv6-server: [bad udp
cksum 0xcbef -> 0x6fae!] dhcp6 request (xid=584d8d (client-ID type 4)
(server-ID hwaddr/time type 1 time 787889844 e6ad77d9f384) (option-request
DNS-server DNS-search-list) (elapsed-time 0) (IA_NA IAID:1890610686 T1:3600
T2:5400 (IA_ADDR 46:41::165a:c84d pltime:7200 vltime:7500)))</span></p>
<p style="margin:0in;font-family:Calibri;font-size:11.0pt" lang="en-US"><span style="font-family: Arial; font-size: 14px;">15:55:19.224885
IP6 (class 0xc0, flowlabel 0x91e38, hlim 64, next-header UDP (17) payload
length: 129) localhost.localdomain.dhcpv6-server >
fe80::f03a:70ff:feb0:6dfe.dhcpv6-client: [bad udp cksum 0x1a8a -> 0x6350!]
dhcp6 reply (xid=584d8d (client-ID type 4) (server-ID hwaddr/time type 1 time
787889844 e6ad77d9f384) (IA_NA IAID:1890610686 T1:3600 T2:6300 (IA_ADDR
46:41::165a:c84d pltime:7200 vltime:7500)) (status-code Success) (DNS-server
localhost.localdomain))</span></p><br></div></div>