Mercurial > hg > dhcpcd
changeset 40:1f5ee194cacf draft
Fix arp checking
linux-2.6.19 headers NOW don't work with c99 which is just wrong, so
dhcpcd no longer builds against these kernel headers. You get a nice
error though :)
| author | Roy Marples <roy@marples.name> |
|---|---|
| date | Thu, 21 Dec 2006 16:51:16 +0000 |
| parents | 646f65220304 |
| children | b3ed04340ded |
| files | ChangeLog Makefile arp.c client.c dhcp.c interface.c |
| diffstat | 6 files changed, 33 insertions(+), 16 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog Tue Dec 19 10:06:45 2006 +0000 +++ b/ChangeLog Thu Dec 21 16:51:16 2006 +0000 @@ -1,3 +1,8 @@ +Fix arp checking +linux-2.6.19 headers NOW don't work with c99 which is just wrong, so +dhcpcd no longer builds against these kernel headers. You get a nice +error though :) + dhcpcd-3.0.7 Allow Linux to use Token Ring again as Linux does not have any more hardware specific code. BPF needs a patch for Token Ring support.
--- a/Makefile Tue Dec 19 10:06:45 2006 +0000 +++ b/Makefile Thu Dec 21 16:51:16 2006 +0000 @@ -1,6 +1,6 @@ # Should work for both GNU make and BSD make -VERSION = 3.0.7 +VERSION = 3.0.8_pre1 INSTALL ?= install
--- a/arp.c Tue Dec 19 10:06:45 2006 +0000 +++ b/arp.c Thu Dec 21 16:51:16 2006 +0000 @@ -121,16 +121,20 @@ { union { - unsigned char buffer[sizeof (struct arphdr)]; + unsigned char buffer[buflen]; struct arphdr hdr; } reply; union { unsigned char *c; - struct in_addr a; - } ra; - - memset (reply.buffer, 0, sizeof (struct arphdr)); + struct in_addr *a; + } rp; + union + { + unsigned char *c; + struct ether_addr *a; + } rh; + memset (reply.buffer, 0, sizeof (reply.buffer)); if ((bytes = get_packet (iface, reply.buffer, arp.buffer, &buflen, &bufpos)) < 0) break; @@ -151,10 +155,10 @@ if ((unsigned) bytes < sizeof (reply.hdr) + 2 * (4 + reply.hdr.ar_hln)) continue; - ra.c = (unsigned char *) ar_spa (&reply.hdr); + rp.c = (unsigned char *) ar_spa (&reply.hdr); + rh.c = (unsigned char *) ar_sha (&reply.hdr); logger (LOG_ERR, "ARPOP_REPLY received from %s (%s)", - inet_ntoa (ra.a), - ether_ntoa ((struct ether_addr *) ar_sha (&reply.hdr))); + inet_ntoa (*rp.a), ether_ntoa (rh.a)); close (iface->fd); iface->fd = -1; return 1;
--- a/client.c Tue Dec 19 10:06:45 2006 +0000 +++ b/client.c Thu Dec 21 16:51:16 2006 +0000 @@ -464,15 +464,19 @@ SOCKET_MODE (SOCKET_OPEN); SEND_MESSAGE (DHCP_DECLINE); SOCKET_MODE (SOCKET_CLOSED); + free_dhcp (dhcp); - memset (dhcp, 0, sizeof (dhcp)); + memset (dhcp, 0, sizeof (dhcp_t)); + if (daemonised) configure (options, iface, dhcp); xid = 0; + timeout = 0; state = STATE_INIT; /* RFC 2131 says that we should wait for 10 seconds before doing anything else */ + logger (LOG_INFO, "sleeping for 10 seconds"); sleep (10); continue; }
--- a/dhcp.c Tue Dec 19 10:06:45 2006 +0000 +++ b/dhcp.c Thu Dec 21 16:51:16 2006 +0000 @@ -253,7 +253,7 @@ make_dhcp_packet (&packet, (unsigned char *) &message, message_length, from, to); - logger (LOG_DEBUG, "Sending %s with xid %d", dhcp_message[(int) type], xid); + logger (LOG_DEBUG, "sending %s with xid %d", dhcp_message[(int) type], xid); return send_packet (iface, ETHERTYPE_IP, (unsigned char *) &packet, message_length + sizeof (struct ip) + sizeof (struct udphdr)); @@ -409,7 +409,7 @@ void free_dhcp (dhcp_t *dhcp) { - if (!dhcp) + if (! dhcp) return; if (dhcp->routes)
--- a/interface.c Tue Dec 19 10:06:45 2006 +0000 +++ b/interface.c Thu Dec 21 16:51:16 2006 +0000 @@ -26,14 +26,18 @@ #include <arpa/inet.h> -/* Netlink suff */ +/* Check linux version before including headers which break us */ #ifdef __linux__ -#include <asm/types.h> /* Needed for 2.4 kernels */ #include <features.h> #include <linux/version.h> -#if LINUX_VERSION_CODE >= KERNEL_VERSION (2,6,19) -#include <linux/if_addr.h> +#if LINUX_VERSION_CODE == KERNEL_VERSION (2,6,19) +#error "linux 2.6.19 headers are so badly broken, use something else" +#endif #endif + +/* Netlink suff */ +#ifdef __linux__ +#include <asm/types.h> /* Needed for 2.4 kernels */ #include <linux/netlink.h> #include <linux/rtnetlink.h> #include <netinet/ether.h>
