From: Roy Marples Date: Thu, 21 Dec 2006 16:51:16 +0000 (+0000) Subject: Fix arp checking X-Git-Tag: v3.2.3~334 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cace38987052ef41b6dea64979e328166260b6de;p=thirdparty%2Fdhcpcd.git 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 :) --- diff --git a/ChangeLog b/ChangeLog index 395be866..12ddbe43 100644 --- a/ChangeLog +++ b/ChangeLog @@ -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. diff --git a/Makefile b/Makefile index 761fd93e..18a3578e 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ # Should work for both GNU make and BSD make -VERSION = 3.0.7 +VERSION = 3.0.8_pre1 INSTALL ?= install diff --git a/arp.c b/arp.c index c895fa54..33463052 100644 --- a/arp.c +++ b/arp.c @@ -121,16 +121,20 @@ int arp_check (interface_t *iface, struct in_addr address) { 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 @@ int arp_check (interface_t *iface, struct in_addr address) 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; diff --git a/client.c b/client.c index 3d1e8763..0116f84d 100644 --- a/client.c +++ b/client.c @@ -464,15 +464,19 @@ int dhcp_run (const options_t *options) 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; } diff --git a/dhcp.c b/dhcp.c index 7f5cd0ee..85427ac7 100644 --- a/dhcp.c +++ b/dhcp.c @@ -253,7 +253,7 @@ size_t send_message (const interface_t *iface, const dhcp_t *dhcp, 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 @@ static route_t *decodeCSR(unsigned char *p, int len) void free_dhcp (dhcp_t *dhcp) { - if (!dhcp) + if (! dhcp) return; if (dhcp->routes) diff --git a/interface.c b/interface.c index 0bc6e56e..d69a857b 100644 --- a/interface.c +++ b/interface.c @@ -26,14 +26,18 @@ #include -/* Netlink suff */ +/* Check linux version before including headers which break us */ #ifdef __linux__ -#include /* Needed for 2.4 kernels */ #include #include -#if LINUX_VERSION_CODE >= KERNEL_VERSION (2,6,19) -#include +#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 /* Needed for 2.4 kernels */ #include #include #include