#18946: DHCPOFFER from dnsmasq-dhcp get lost
-----------------------+-----------------------------------
Reporter: corny | Owner: developers
Type: defect | Status: new
Priority: normal | Milestone: Barrier Breaker 14.07
Component: packages | Version: Barrier Breaker 14.07
Resolution: | Keywords:
-----------------------+-----------------------------------
Comment (by _dmke):
I've captured this strace for dnsmasq, when a DHCP DISCOVER message comes
in and an OFFER is written out ({{{opkg install strace}}}, and {{{strace
-p <pidof dnsmasq>}}}):
{{{
_newselect(11, [4 5 6 7 8 9 10], [], [], NULL) = 1 (in [4])
time(NULL) = 1424705700
stat64("/tmp/resolv.conf.auto", {st_mode=S_IFREG|0644, st_size=41, ...}) =
0
recvmsg(4, {msg_name(16)={sa_family=AF_INET, sin_port=htons(68),
sin_addr=inet_addr("0.0.0.0")},
msg_iov(1)=[{"\1\1\6\0M\367\223\27\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\276\5j"...,
1472}], msg_controllen=24, {cmsg_len=24, cmsg_level=SOL_IP, cmsg_type=,
...}, msg_flags=0}, MSG_PEEK|MSG_TRUNC) = 300
recvmsg(4, {msg_name(16)={sa_family=AF_INET, sin_port=htons(68),
sin_addr=inet_addr("0.0.0.0")},
msg_iov(1)=[{"\1\1\6\0M\367\223\27\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\276\5j"...,
1472}], msg_controllen=24, {cmsg_len=24, cmsg_level=SOL_IP, cmsg_type=,
...}, msg_flags=0}, 0) = 300
ioctl(4, SIOCGIFNAME, {ifr_index=5, ifr_name="br-guest"}) = 0
ioctl(4, SIOCGIFADDR, {ifr_name="br-guest", ifr_addr={AF_INET,
inet_addr("192.168.8.1")}}) = 0
sendto(5, "\0\0\0\24\0\26\3\5\0\0JK\0\0\0\0\2\0\0\0", 20, 0,
{sa_family=AF_NETLINK, pid=0, groups=00000000}, 12) = 20
recvmsg(5, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000},
msg_iov(1)=[{"\0\0\0D\0\24\0\2\0\0JK\0\0\5s\2\10\200\376\0\0\0\1\0\10\0\1\177\0\0\1"...,
512}], msg_controllen=0, msg_flags=0}, MSG_PEEK|MSG_TRUNC) = 392
recvmsg(5, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000},
msg_iov(1)=[{"\0\0\0D\0\24\0\2\0\0JK\0\0\5s\2\10\200\376\0\0\0\1\0\10\0\1\177\0\0\1"...,
512}], msg_controllen=0, msg_flags=0}, 0) = 392
recvmsg(5, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000},
msg_iov(1)=[{"\0\0\0\24\0\3\0\2\0\0JK\0\0\5s\0\0\0\0", 512}],
msg_controllen=0, msg_flags=0}, MSG_PEEK|MSG_TRUNC) = 20
recvmsg(5, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000},
msg_iov(1)=[{"\0\0\0\24\0\3\0\2\0\0JK\0\0\5s\0\0\0\0", 512}],
msg_controllen=0, msg_flags=0}, 0) = 20
time([1424705700]) = 1424705700
open("/etc/TZ", O_RDONLY) = 13
read(13, "UTC\n", 68) = 4
close(13) = 0
write(12, "<30>Feb 23 15:35:00 dnsmasq-dhcp"..., 81) = 81
time([1424705700]) = 1424705700
open("/etc/TZ", O_RDONLY) = 13
read(13, "UTC\n", 68) = 4
close(13) = 0
write(12, "<30>Feb 23 15:35:00 dnsmasq-dhcp"..., 92) = 92
alarm(2244) = 2248
ioctl(4, SIOCSARP, 0x7fa77618) = 0
sendmsg(4, {msg_name(16)={sa_family=AF_INET, sin_port=htons(68),
sin_addr=inet_addr("192.168.10.76")},
msg_iov(1)=[{"\2\1\6\0M\367\223\27\0\2\0\0\0\0\0\0\300\250\nL\300\250\10\1\0\0\0\0\200\276\5j"...,
300}], msg_controllen=0, msg_flags=0}, 0) = 300
}}}
Near the end, you can see the {{{write}}}'s to syslog ({{{write(12,
"<30>Feb 23 15:35:00 dnsmasq-dhcp"}}}):
{{{
Mon Feb 23 15:35:00 2015 daemon.info dnsmasq-dhcp[1395]: DHCPDISCOVER(br-
guest) 80:be:05:6a:69:ed
Mon Feb 23 15:35:00 2015 daemon.info dnsmasq-dhcp[1395]: DHCPOFFER(br-
guest) 192.168.10.76 80:be:05:6a:69:ed
}}}
and at the very bottom, you'll see 300 bytes is written to fd 4:
{{{
sendmsg(4, {msg_name(16)={sa_family=AF_INET, sin_port=htons(68),
sin_addr=inet_addr("192.168.10.76")},
msg_iov(1)=[{"\2\1\6\0M\367\223\27\0\2\0\0\0\0\0\0\300\250\nL\300\250\10\1\0\0\0\0\200\276\5j"...,
300}], msg_controllen=0, msg_flags=0}, 0) = 300
}}}
I've traced that {{{sendmsg}}} syscall to {{{void
dhcp_packet(time_t,int)}}} ({{{src/dhcp.c:445}}},
http://www.thekelleys.org.uk/dnsmasq/dnsmasq-2.71.tar.gz) to confirm that
dnsmasq tries really, really hard the send the message (cf. {{{int
retry_send()}}} in {{{src/util.c:546}}} for reference).
Capturing those 300 bytes with tcpdump was not possible, though—as if the
kernel never received that package.
I'm now a little puzzled. Do you have any further ideas?
—Dominik
--
Ticket URL: <https://dev.openwrt.org/ticket/18946#comment:8>
OpenWrt <http://openwrt.org>
Opensource Wireless Router Technology
_______________________________________________
openwrt-tickets mailing list
[email protected]
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-tickets