<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>