ISC DHCP on arm not working, error misleading

Mukund Deshpande sai.mukund.sagar at
Fri Dec 2 06:37:47 UTC 2011

Hi All,

Earlier i was getting this error on running dhcp on arm box (Cross Compiled
linux code for arm.., Cross Compiled dhcp)

(Socket Filtering) are enabled in your kernel

This error is totally misleading as i have kernel 2.6.31 on my box and
CONFIG_FILTER is enabled by default and Config_packet is also enabled.

So, In "net/packet/af_packet.c" , I have put some debug message in that we get what the error is.

static int packet_bind(struct socket *sock, struct sockaddr *uaddr, int

        struct sockaddr_ll *sll = (struct sockaddr_ll*)uaddr;
        struct sock *sk=sock->sk;
        struct net_device *dev = NULL;
        int err;

         *      Check legality

       if (addr_len < sizeof(struct sockaddr_ll))
                printk("packet_bind: invalid len %d %d\n", addr_len,
sizeof(struct sockaddr_ll));    >>>>>>>> ADDED one print here
                return -EINVAL;

        if (sll->sll_family != AF_PACKET)
                printk("packet_bind: invalid socket family %d %d\n",
sll->sll_family,  AF_PACKET);  >>>>>>>> ADDED one print here
                 return -EINVAL;
        if (sll->sll_ifindex) {
                err = -ENODEV;

                dev = dev_get_by_index(sock_net(sk), sll->sll_ifindex);
                if (dev == NULL)
                        goto out;


Also Added extra print in the dhcp code in common/lpf.c

if (bind (sock, &sa, sizeof sa)) {
 if (errno == ENOPROTOOPT || errno == EPROTONOSUPPORT ||
                    errno == ESOCKTNOSUPPORT || errno == EPFNOSUPPORT ||
                    errno == EAFNOSUPPORT || errno == EINVAL) {
                        log_error ("socket: Error_2 (Bind to the interface
name) %m , %d %d %s- make sure", errno, sizeof ll, (char *)info -> ifp);
 log_error ("CONFIG_PACKET (Packet socket) %s",
                                   "and CONFIG_FILTER");
                        log_error ("(Socket Filtering) are enabled %s",
                                   "in your kernel");
                        log_fatal ("configuration!");

Got the output as

Internet Systems Consortium DHCP Server 4.2.2
Copyright 2004-2011 Internet Systems Consortium.
All rights reserved.
For info, please visit
Wrote 0 leases to leases file.
packet_bind: invalid len 16
>>>>>>>> The lengths are different..
socket: Error_2 (Bind to the interface name) Invalid argument , 22 16-
make             >>>>>>> 22 is Invalid Argument code (EINVAL)   >>> 16 is
packet size.
(Socket Filtering) are enabled in your kernel

You can find this """packet_bind: invalid len 16 20 """

addr_len is 16 and size of sockaddr_ll is 20 hence its failing!!!!

Any pointers as to why its different? sizeof sa passed in bind is 16
whereas it has to be 20...

One way i see is if i use sockaddr_ll in dhcp code (in common/lpf.c)instead
of sockaddr it may work.
Can any one tell me if this would be a good way to get it work??

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the dhcp-users mailing list