#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

Reply via email to