First of all thank you for you reply ! On 09/22/2013 10:07 AM, Francis Dupont via RT wrote: > On Thu Sep 12 15:56:23 2013, jpopelka@redhat.com wrote: > > => a simple question: is the problem for multicast or > unicast packets (it should work for multicast packets > but for unicast packets it has no chance to work with > a single global socket bound to *.port)? Unicast I think - I've seen it with Reply in response to Renew/Rebind and on other machine (kernel) with Advertise. > => local_address* is for agents (i.e., relays and servers). > In fact this part of the code is essentially for agents. > >> I don't know the internals, so the patch can be completely wrong >> but up to now it's seemed to fix the problem and not cause any others. >> I'll update it if I find something better. > > => I am afraid it will break agents via the multicast receive. We already dropped it and have been using the following, i.e. binding to interface even for AF_INET6: +++ dhcp-4.2.5/common/socket.c @@ -245,7 +245,7 @@ if_register_socket(struct interface_info #if defined(SO_BINDTODEVICE) /* Bind this socket to this interface. */ - if ((local_family != AF_INET6) && (info->ifp != NULL) && + if (((do_multicast == 0)||(*do_multicast == 0)) && (info->ifp != NULL) && setsockopt(sock, SOL_SOCKET, SO_BINDTODEVICE, (char *)(info -> ifp), sizeof(*(info -> ifp))) < 0) { log_fatal("setsockopt: SO_BINDTODEVICE: %m"); regards, Jiri