<br clear="all">Hi All,<br><br>Earlier i was getting this error on running dhcp on arm box (Cross Compiled linux code for arm.., Cross Compiled dhcp)<br><br>make<br>sure<br>CONFIG_PACKET (Packet socket) and CONFIG_FILTER<br>

(Socket Filtering) are enabled in your kernel<br>
configuration!<br><br>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.<br><br>So, In "net/packet/af_packet.c" , I have put some debug message in kernel...so that we get what the error is.<br>


<br>
<div class="im">static int packet_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)<br></div>{<div class="im"><br>        struct sockaddr_ll *sll = (struct sockaddr_ll*)uaddr;<br></div>        struct sock *sk=sock->sk;<div class="im">


        struct net_device *dev = NULL;<br></div>        int err;<br><br>        /*<br>         *      Check legality<br>         */<div class="im"><br>       if (addr_len < sizeof(struct sockaddr_ll))<br>        {<br>

                printk("packet_bind: invalid len %d %d\n", addr_len, sizeof(struct sockaddr_ll));    >>>>>>>> ADDED one print here</div>
                return -EINVAL;<div class="im"><br>        }<br>        if (sll->sll_family != AF_PACKET)<br>        {<br>                printk("packet_bind: invalid socket family %d %d\n", sll->sll_family,  AF_PACKET);  >>>>>>>> ADDED one print here<br>

</div>
                return -EINVAL;<br>        }<br>        if (sll->sll_ifindex) {<br>                err = -ENODEV;<div class="im"><br>                dev = dev_get_by_index(sock_net(sk), sll->sll_ifindex);<br></div>

                if (dev == NULL)<br>
                        goto out;<div class="im"><br>        }<br><br><br>Also Added extra print in the dhcp code in common/lpf.c<br><br>if (bind (sock, &sa, sizeof sa)) {<br>
 if (errno == ENOPROTOOPT || errno == EPROTONOSUPPORT ||<br>
                    errno == ESOCKTNOSUPPORT || errno == EPFNOSUPPORT ||<br>
                    errno == EAFNOSUPPORT || errno == EINVAL) {<br>
                        log_error ("socket: Error_2 (Bind to the 
interface name) %m , %d %d %s- make sure", errno, sizeof ll, (char 
*)info -> ifp);<br>
 log_error ("CONFIG_PACKET (Packet socket) %s",<br>
                                   "and CONFIG_FILTER");<br>
                        log_error ("(Socket Filtering) are enabled %s",<br>
                                   "in your kernel");<br>
                        log_fatal ("configuration!");<br><br><br><br>Got the output as<br><br>Internet Systems Consortium DHCP Server 4.2.2<br>Copyright 2004-2011 Internet Systems Consortium.<br>All rights reserved.<br>

For info, please visit <a href="https://www.isc.org/software/dhcp/" target="_blank">https://www.isc.org/software/dhcp/</a><br>
Wrote 0 leases to leases file.<br>packet_bind: invalid len 16 20                                                                               >>>>>>>> The lengths are different..<br>socket: Error_2 (Bind to the interface name) Invalid argument , 22 16- make             >>>>>>> 22 is Invalid Argument code (EINVAL)   >>> 16 is packet size.<br>

sure<br>CONFIG_PACKET (Packet socket) and CONFIG_FILTER<br>(Socket Filtering) are enabled in your kernel<br>
configuration!<br><br></div><br><br><br>You can find this """packet_bind: invalid len 16 20 """<br><br>addr_len is 16 and size of sockaddr_ll is 20 hence its failing!!!!<br>
<br>Any pointers as to why its different? sizeof sa passed in bind is 16<br>whereas it has to be 20...<br> <br>One way i see is if i use sockaddr_ll in dhcp code (in common/lpf.c)instead of sockaddr it may work.<br>
Can any one tell me if this would be a good way to get it work??<br>
<br>
<br><br><br>-- <br>Regards,<div>Mukund</div><br>