Hi,

we've been trying to set up dibbler-client to grab our PD from ISP on
PfSense.
Client.conf is as following:
log-level 8
duid-type duid-ll
iface em0 {
pd
option dns-server
option domain
}

The problem is presented in the log: http://pastebin.com/uee1maWe
Especially, line 123 and line 130. The SLAAC is fe80::250:56ff:fe00:113a
but the socket is created for em0/1 fe80:1::250:56ff:fe00:113a (index of
interface 1).
Nailing down the problem, I've compiled the source with  LOWLEVEL_DEBUG in
dibbler-0.8.3/Port-bsd/lowlevel-bsd.c so that we can see low-level debug
info.
In the log we can clearly see that "aliases" are created for each
interface. I'm not FreeBSD specialist, but this seems strange for me.

Quick and dirty fix was to omit the full address checking.
Knowing that the index increment is done in bytes 2-4 I omit them by doing
modification in:

*source:./dibbler/IfaceMgr/IfaceMgr.cpp*
*Was:*
 char anycast[16] = {0};
    if (!iface->flagLoopback()
        && memcmp(sock->getAddr()->getAddr(), myAddrPacked, 16)
        && memcmp(sock->getAddr()->getAddr(), anycast, 16) ) {
            Log(Debug) << "Received data on address " << myPlainAddr << ",
expected "
                   << *sock->getAddr() << ", message ignored." << LogEnd;
            bufsize = 0;
            return 0;
    }

*Is:*
char anycast[16] = {0};
    if (!iface->flagLoopback()
        && memcmp(sock->getAddr()->getAddr(), myAddrPacked, 2)
        && memcmp(sock->getAddr()->getAddr()+4, myAddrPacked+4, 12)
        && memcmp(sock->getAddr()->getAddr(), anycast, 16) ) {
            Log(Debug) << "Received data on address " << myPlainAddr << ",
expected "
                   << *sock->getAddr() << ", message ignored." << LogEnd;
            bufsize = 0;
            return 0;
    }

Now, it's working, although "Prefix error encountered during prefix
addition operation: Prefix configuration on BSD systems not implemented
yet." - concerns putting /56 prefixes on the other interfaces (we're
getting /48 from ISP). We can live with that.
For the record: the source was compiled on FreeBSD 8.3 amd64. Binary run
under PfSense 2.1
Finally, it would be great if someone with deeper knowledge of FreeBSD
could explain/fix the index vs. IP address issue and make a patch on it.
As far as I get it, it's the inet_ntop6 function that gets the myPlainAddr
(line 466 of dibbler-0.8.3/Port-bsd/lowlevel-bsd.c) and for some reason
indicates the fe80:1::xxxxx instead of fe80::xxxxxx (SLAAC).

Hope that it helps for users that want to get dibbler client running under
PfSense (especially with online.net).

Regards
Slawomir Kosowski
_______________________________________________
List mailing list
[email protected]
http://lists.pfsense.org/mailman/listinfo/list

Reply via email to