+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.
# Should work for both GNU make and BSD make
-VERSION = 3.0.7
+VERSION = 3.0.8_pre1
INSTALL ?= install
{
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;
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;
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;
}
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));
void free_dhcp (dhcp_t *dhcp)
{
- if (!dhcp)
+ if (! dhcp)
return;
if (dhcp->routes)
#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>