Messages in this thread | | | Subject | Re: No proxy-arp with alias interfaces -- why? | From | Hannu Koivisto <> | Date | 13 Oct 1998 18:25:50 +0300 |
| |
Andi Kleen <ak@muc.de> writes:
| The fix is easy, just change pppd to not set the ATF_COM flag in the | SIOCSARP ioctl. If it is set the kernel thinks it contains a valid hardware | address, and if it can't find that address it will return ENODEV (as in | your case).
Hmmm. But it seems that pppd does not set the ATF_COM flag in SIOCSARP ioctl. This is the function in question:
""" int sifproxyarp (int unit, u_int32_t his_adr) { struct arpreq arpreq;
if (has_proxy_arp == 0) { memset (&arpreq, '\0', sizeof(arpreq)); SET_SA_FAMILY(arpreq.arp_pa, AF_INET); ((struct sockaddr_in *) &arpreq.arp_pa)->sin_addr.s_addr = his_adr; arpreq.arp_flags = ATF_PERM | ATF_PUBL; /* * Get the hardware address of an interface on the same subnet * as our local address. */ if (!get_ether_addr(his_adr, &arpreq.arp_ha, arpreq.arp_dev)) { syslog(LOG_ERR, "Cannot determine ethernet address for proxy ARP"); return 0; } if (ioctl(sock_fd, SIOCSARP, (caddr_t)&arpreq) < 0) { if ( ! ok_error ( errno )) { syslog(LOG_ERR, "ioctl(SIOCSARP): %m(%d)", errno); } return 0; } }
proxy_arp_addr = his_adr; has_proxy_arp = 1; return 1; } """
I tried to decipher arp_ioctl() in kernel sources to understand what else could be the reason but trying to understand networking code is really not what I'm best at :)
If you have other suggestions, I'd be pleased to hear about them.
Thanks, //Hannu
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/
| |