[Dibbler] dibbler server don't receive client solicit message

Radek Zajíc radek at zajic.v.pytli.cz
Thu Jun 19 23:06:10 CEST 2014


Dear all,

after finding that the kernel multicast (and not just multicast, even
link-local addresses) handling has indeed been broken as reported in
http://www.spinics.net/lists/netdev/msg286344.html, I have tried to
recompile latest kernel (3.15.1), however the problem still persisted.
However, after applying ipv6-fix-regression-caused-by-efe4208-in.patch to
3.15.1 and recompiling, the issue is gone and Dibbler (unmodified binary
distribution from Ubuntu 13.10 repositories) works as expected again.

The abovementioned patch has been added to a "stable" kernel tree as
reported in http://www.spinics.net/lists/stable/msg50442.html, so we may
expect it in 3.15.2. Until 3.15.2 is deployed on your machines, either
kernel downgrade to ~3.10 or code move suggested in previous message are
the only workarounds known to date.

Hope this helps to all who may be affected.

Best regards,
Radek


On Thu, Jun 19, 2014 at 6:54 PM, George Joseph <george.joseph at fairview5.com>
wrote:

> Thanks for tracking this down!    I'm going to give it a try this
> afternoon.
>
>
> On Thu, Jun 19, 2014 at 9:20 AM, Radek Zajíc <radek at zajic.v.pytli.cz>
> wrote:
>
>> So... Here's some further investigation:
>> 1. when the multicast socket is created first, then the link-local
>> address socket created next, Dibbler does not receive messages from DHCPv6
>> clients.
>> 2. when the link-local address socket is created first, then the
>> multicast socket next, everything seems to work smoothly.
>> This must have changed somewhere in kernel at about 3.11-3.12.
>>
>> How did I achieve this? I had to play with the source code. Final
>> solution is to move a block of code within SrvTransMgr/SrvTransMgr.cpp in
>> method TSrvTransMgr::openSocket.
>>
>> When I took the block of code that begins with "#if 1" and ends with
>> "#endif" just after the char srvAddr[16]; and recompile, it works.
>>
>> Don't ask me why as I'm not a kernel, neither app developer.
>>
>> Radek
>>
>>
>>
>> On Wed, Jun 18, 2014 at 9:10 PM, Radek Zajíc <radek at zajic.v.pytli.cz>
>> wrote:
>>
>>> Dear all,
>>>
>>> having the same issue, I did some further investigation. The firewall is
>>> not the problem (wide-dhcpv6 works), neither is an apparmor (uninstalled
>>> that piece of... and rebooted).
>>>
>>> The configuration is really simple, however does not work with dibbler.
>>> It does work with wide-dhcp6, though.
>>>
>>> First I was considered that dibbler may be affected by this issue:
>>> http://www.spinics.net/lists/netdev/msg286344.html
>>> So I installed the latest kernel 3.15.0-031500-generic (testing on
>>> Ubuntu 14.04) - the problem still exists.
>>>
>>> The latest thought I have is that dibbler is affected as mentioned here:
>>> http://serverfault.com/questions/590558/ubuntu-14-04-ipv6-multicast
>>> "This behavior was not present in kernel versions below 3.10, which
>>> apparently didn't handle node-local multicast properly. See the actual
>>> kernel patch that enforces this and the function definition of
>>> __ipv6_addr_needs_scope_id."
>>>
>>> So I did further tests. Installed Ubuntu 13.10 with default kernel and
>>> settings - and Dibbler (0.8.2-1) works.
>>> Installed Ubuntu 14.04 with default kernel and settings - and Dibbler
>>> (1.0.0~rc1-1) does not respond.
>>>
>>> So I upgraded kernel in Ubuntu 13.10 to 3.14.1-031401-generic and
>>> Dibbler (0.8.2-1) does not respond anymore.
>>>
>>> It seems there have really been kernel changes that broke/changed the
>>> multicast handling, breaking Dibbler completely.
>>>
>>> To all of you who have problem with Dibbler, what kernel version are you
>>> using?
>>>
>>> Thanks
>>> Radek
>>>
>>> === dumps & info ===
>>>
>>> # tcpdump -i br0.2 '(udp port 546)||(udp port 547)' -n
>>> tcpdump: verbose output suppressed, use -v or -vv for full protocol
>>> decode
>>> listening on br0.2, link-type EN10MB (Ethernet), capture size 65535 bytes
>>> # dibbler responses (missing)
>>> 16:22:26.251241 IP6 fe80::e48a:3505:cf50:bb27.546 > ff02::1:2.547: dhcp6
>>> solicit
>>> 16:22:26.397952 IP6 fe80::e48a:3505:cf50:bb27.546 > ff02::1:2.547: dhcp6
>>> solicit
>>> 16:22:26.573567 IP6 fe80::e48a:3505:cf50:bb27.546 > ff02::1:2.547: dhcp6
>>> solicit
>>> 16:22:27.615026 IP6 fe80::e48a:3505:cf50:bb27.546 > ff02::1:2.547: dhcp6
>>> solicit
>>> 16:22:29.601133 IP6 fe80::e48a:3505:cf50:bb27.546 > ff02::1:2.547: dhcp6
>>> solicit
>>>
>>> # wide-dhcpv6 responses (correct)
>>> 16:23:29.616639 IP6 fe80::e48a:3505:cf50:bb27.546 > ff02::1:2.547: dhcp6
>>> solicit
>>> 16:23:29.616871 IP6 fe80::922b:34ff:fed1:ed8.49872 >
>>> fe80::e48a:3505:cf50:bb27.546: dhcp6 advertise
>>> 16:23:29.617412 IP6 fe80::e48a:3505:cf50:bb27.546 > ff02::1:2.547: dhcp6
>>> request
>>> 16:23:29.617556 IP6 fe80::922b:34ff:fed1:ed8.49872 >
>>> fe80::e48a:3505:cf50:bb27.546: dhcp6 reply
>>> 16:23:57.083111 IP6 fe80::e48a:3505:cf50:bb27.546 > ff02::1:2.547: dhcp6
>>> confirm
>>> 16:23:57.083308 IP6 fe80::922b:34ff:fed1:ed8.49872 >
>>> fe80::e48a:3505:cf50:bb27.546: dhcp6 reply
>>> 16:23:58.104311 IP6 fe80::e48a:3505:cf50:bb27.546 > ff02::1:2.547: dhcp6
>>> confirm
>>> 16:23:58.104472 IP6 fe80::922b:34ff:fed1:ed8.49872 >
>>> fe80::e48a:3505:cf50:bb27.546: dhcp6 reply
>>> 16:23:59.116940 IP6 fe80::e48a:3505:cf50:bb27.546 > ff02::1:2.547: dhcp6
>>> confirm
>>> 16:23:59.117112 IP6 fe80::922b:34ff:fed1:ed8.49872 >
>>> fe80::e48a:3505:cf50:bb27.546: dhcp6 reply
>>>
>>> ==== Dibbler configuration ====
>>> # cat /etc/dibbler/server.conf
>>> log-level 8
>>> preference 0
>>> iface "br0.2" {
>>>  // also ranges can be defines, instead of exact values
>>>  t1 1800-2000
>>>  t2 2700-3000
>>>  prefered-lifetime 3600
>>>  valid-lifetime 7200
>>>  class {
>>>     pool 2a01:8c00:ff44::1000/96
>>>  }
>>>  ta-class {
>>>     pool 2a01:8c00:ff44::2000/96
>>>  }
>>>  option dns-server 2a01:8c00:ff44::127
>>> }
>>>
>>> # dpkg --list|grep dibbler
>>> ii  dibbler-doc
>>> 1.0.0~rc1-1                                         all
>>> documentation for Dibbler
>>> ii  dibbler-server
>>> 1.0.0~rc1-1                                         amd64        portable
>>> DHCPv6 server
>>>
>>> # ip -6 maddr show dev br0.2
>>> 6:      br0.2
>>>         inet6 ff02::1:2
>>>         inet6 ff02::1:ff00:2
>>>         inet6 ff02::fb
>>>         inet6 ff02::1:ff00:0 users 2
>>>         inet6 ff02::1:ffd1:ed8
>>>         inet6 ff02::1:ff00:1
>>>         inet6 ff02::2 users 2
>>>         inet6 ff02::1
>>>         inet6 ff01::1
>>>
>>> ==== wide-dhcpv6-server ====
>>> # cat /etc/wide-dhcpv6/dhcp6s.conf
>>> option domain-name-servers      2a01:8c00:ff44::127;
>>> option domain-name              "dira.lan";
>>>
>>> interface br0.2 {
>>>     address-pool br02 3600;
>>> };
>>>
>>> pool br02 {
>>>     range 2a01:8c00:ff44::1000 to 2a01:8c00:ff44::2000;
>>> };
>>>
>>> # dpkg --list|grep wide-dhcp
>>> ii  wide-dhcpv6-server
>>> 20080615-12                                         amd64        DHCPv6
>>> server for automatic IPv6 hosts configuration
>>>
>>> # ip -6 maddr show dev br0.2
>>> 6:      br0.2
>>>         inet6 ff05::1:3
>>>         inet6 ff02::1:2
>>>         inet6 ff02::1:ff00:2
>>>         inet6 ff02::fb
>>>         inet6 ff02::1:ff00:0 users 2
>>>         inet6 ff02::1:ffd1:ed8
>>>         inet6 ff02::1:ff00:1
>>>         inet6 ff02::2 users 2
>>>         inet6 ff02::1
>>>         inet6 ff01::1
>>>
>>> ============== Ubuntu 13.10 with linux-image-3.11.0-12-generic
>>> ======================
>>> 20:57:13.467201 IP6 fe80::e48a:3505:cf50:bb27.546 > ff02::1:2.547: dhcp6
>>> solicit
>>> 20:57:13.467685 IP6 fe80::5054:ff:fe05:c0d1.547 >
>>> fe80::e48a:3505:cf50:bb27.546: dhcp6 advertise
>>> 20:57:13.497322 IP6 fe80::e48a:3505:cf50:bb27.546 > ff02::1:2.547: dhcp6
>>> solicit
>>> 20:57:13.498217 IP6 fe80::5054:ff:fe05:c0d1.547 >
>>> fe80::e48a:3505:cf50:bb27.546: dhcp6 advertise
>>> 20:57:13.671613 IP6 fe80::e48a:3505:cf50:bb27.546 > ff02::1:2.547: dhcp6
>>> solicit
>>> 20:57:13.672369 IP6 fe80::5054:ff:fe05:c0d1.547 >
>>> fe80::e48a:3505:cf50:bb27.546: dhcp6 advertise
>>> 20:57:14.668986 IP6 fe80::e48a:3505:cf50:bb27.546 > ff02::1:2.547: dhcp6
>>> solicit
>>> 20:57:14.669696 IP6 fe80::5054:ff:fe05:c0d1.547 >
>>> fe80::e48a:3505:cf50:bb27.546: dhcp6 advertise
>>> 20:57:16.668977 IP6 fe80::e48a:3505:cf50:bb27.546 > ff02::1:2.547: dhcp6
>>> solicit
>>> 20:57:16.669683 IP6 fe80::5054:ff:fe05:c0d1.547 >
>>> fe80::e48a:3505:cf50:bb27.546: dhcp6 advertise
>>> 20:57:16.895300 IP6 fe80::5054:ff:fe05:c0d1.546 > ff02::1:2.547: dhcp6
>>> renew
>>> 20:57:20.684582 IP6 fe80::e48a:3505:cf50:bb27.546 > ff02::1:2.547: dhcp6
>>> solicit
>>> 20:57:20.685098 IP6 fe80::5054:ff:fe05:c0d1.547 >
>>> fe80::e48a:3505:cf50:bb27.546: dhcp6 advertise
>>>
>>> ============== Ubuntu 13.10 with 3.14.1-031401-generic
>>> ======================
>>> 21:04:06.376502 IP6 fe80::e48a:3505:cf50:bb27.546 > ff02::1:2.547: dhcp6
>>> solicit
>>> 21:04:06.414278 IP6 fe80::e48a:3505:cf50:bb27.546 > ff02::1:2.547: dhcp6
>>> solicit
>>> 21:04:06.440153 IP6 fe80::e48a:3505:cf50:bb27.546 > ff02::1:2.547: dhcp6
>>> solicit
>>> 21:04:07.454272 IP6 fe80::e48a:3505:cf50:bb27.546 > ff02::1:2.547: dhcp6
>>> solicit
>>> 21:04:09.455268 IP6 fe80::e48a:3505:cf50:bb27.546 > ff02::1:2.547: dhcp6
>>> solicit
>>> 21:04:13.457167 IP6 fe80::e48a:3505:cf50:bb27.546 > ff02::1:2.547: dhcp6
>>> solicit
>>> 21:04:21.461210 IP6 fe80::e48a:3505:cf50:bb27.546 > ff02::1:2.547: dhcp6
>>> solicit
>>>
>>>
>>>
>>>
>>>  On Fri, May 30, 2014 at 5:11 PM, George Joseph <
>>> george.joseph at fairview5.com> wrote:
>>>
>>>>  On Fri, May 30, 2014 at 3:52 AM, Tomasz Mrugalski <thomson at klub.com.pl
>>>> > wrote:
>>>>
>>>>> On 30.05.2014 10:42, amysue.z at gmail.com wrote:
>>>>> > I have installed dibbler 0.84 on centos 6.3 32bit. The pc has
>>>>> received
>>>>> > client solicit message, verified by wireshark. But dibbler server
>>>>> don't,
>>>>> > and no advertise message send.
>>>>> > I have no idea what to do now, could any one help me.
>>>>> Check your firewall. Wireshark is doing raw packet capture on wire, so
>>>>> it bypasses firewall. Dibbler opens regular UDP socket, so it is
>>>>> affected by a firewall.
>>>>>
>>>>> Two things to check: ip6tables and apparmor.
>>>>>
>>>>> Tomek
>>>>>
>>>>> Funny...I have the exact same problem on Fedora 20.  I had previously
>>>> run dibbler with no issues but switched back to "dhcpd -6" for a while.
>>>> When I tried dibbler again last week (same binary as the earlier working
>>>> install), it acted as though it wasn't receiving packets and I had to go
>>>> back to "dhcpd -6".    I did upgrade from Fedora 19 to 20 in the mean time
>>>> so I'm wondering if something in the environment is causing the problem.
>>>>  dhcpd IS working though.
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> http://klub.com.pl/cgi-bin/mailman/listinfo/dibbler
>>>>
>>>>
>>>
>>
>> _______________________________________________
>> http://klub.com.pl/cgi-bin/mailman/listinfo/dibbler
>>
>>
>
> _______________________________________________
> http://klub.com.pl/cgi-bin/mailman/listinfo/dibbler
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://klub.com.pl/pipermail/dibbler/attachments/20140619/fa222d7f/attachment-0001.html>


More information about the Dibbler mailing list