mirror of
https://github.com/rsmarples/dhcpcd.git
synced 2024-12-03 23:14:25 +08:00
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 :)
This commit is contained in:
parent
12e81a3f6c
commit
cace389870
@ -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
|
dhcpcd-3.0.7
|
||||||
Allow Linux to use Token Ring again as Linux does not have any more hardware
|
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.
|
specific code. BPF needs a patch for Token Ring support.
|
||||||
|
2
Makefile
2
Makefile
@ -1,6 +1,6 @@
|
|||||||
# Should work for both GNU make and BSD make
|
# Should work for both GNU make and BSD make
|
||||||
|
|
||||||
VERSION = 3.0.7
|
VERSION = 3.0.8_pre1
|
||||||
|
|
||||||
INSTALL ?= install
|
INSTALL ?= install
|
||||||
|
|
||||||
|
20
arp.c
20
arp.c
@ -121,16 +121,20 @@ int arp_check (interface_t *iface, struct in_addr address)
|
|||||||
{
|
{
|
||||||
union
|
union
|
||||||
{
|
{
|
||||||
unsigned char buffer[sizeof (struct arphdr)];
|
unsigned char buffer[buflen];
|
||||||
struct arphdr hdr;
|
struct arphdr hdr;
|
||||||
} reply;
|
} reply;
|
||||||
union
|
union
|
||||||
{
|
{
|
||||||
unsigned char *c;
|
unsigned char *c;
|
||||||
struct in_addr a;
|
struct in_addr *a;
|
||||||
} ra;
|
} rp;
|
||||||
|
union
|
||||||
memset (reply.buffer, 0, sizeof (struct arphdr));
|
{
|
||||||
|
unsigned char *c;
|
||||||
|
struct ether_addr *a;
|
||||||
|
} rh;
|
||||||
|
memset (reply.buffer, 0, sizeof (reply.buffer));
|
||||||
if ((bytes = get_packet (iface, reply.buffer, arp.buffer,
|
if ((bytes = get_packet (iface, reply.buffer, arp.buffer,
|
||||||
&buflen, &bufpos)) < 0)
|
&buflen, &bufpos)) < 0)
|
||||||
break;
|
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))
|
if ((unsigned) bytes < sizeof (reply.hdr) + 2 * (4 + reply.hdr.ar_hln))
|
||||||
continue;
|
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)",
|
logger (LOG_ERR, "ARPOP_REPLY received from %s (%s)",
|
||||||
inet_ntoa (ra.a),
|
inet_ntoa (*rp.a), ether_ntoa (rh.a));
|
||||||
ether_ntoa ((struct ether_addr *) ar_sha (&reply.hdr)));
|
|
||||||
close (iface->fd);
|
close (iface->fd);
|
||||||
iface->fd = -1;
|
iface->fd = -1;
|
||||||
return 1;
|
return 1;
|
||||||
|
6
client.c
6
client.c
@ -464,15 +464,19 @@ int dhcp_run (const options_t *options)
|
|||||||
SOCKET_MODE (SOCKET_OPEN);
|
SOCKET_MODE (SOCKET_OPEN);
|
||||||
SEND_MESSAGE (DHCP_DECLINE);
|
SEND_MESSAGE (DHCP_DECLINE);
|
||||||
SOCKET_MODE (SOCKET_CLOSED);
|
SOCKET_MODE (SOCKET_CLOSED);
|
||||||
|
|
||||||
free_dhcp (dhcp);
|
free_dhcp (dhcp);
|
||||||
memset (dhcp, 0, sizeof (dhcp));
|
memset (dhcp, 0, sizeof (dhcp_t));
|
||||||
|
|
||||||
if (daemonised)
|
if (daemonised)
|
||||||
configure (options, iface, dhcp);
|
configure (options, iface, dhcp);
|
||||||
|
|
||||||
xid = 0;
|
xid = 0;
|
||||||
|
timeout = 0;
|
||||||
state = STATE_INIT;
|
state = STATE_INIT;
|
||||||
/* RFC 2131 says that we should wait for 10 seconds
|
/* RFC 2131 says that we should wait for 10 seconds
|
||||||
before doing anything else */
|
before doing anything else */
|
||||||
|
logger (LOG_INFO, "sleeping for 10 seconds");
|
||||||
sleep (10);
|
sleep (10);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
4
dhcp.c
4
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,
|
make_dhcp_packet (&packet, (unsigned char *) &message, message_length,
|
||||||
from, to);
|
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,
|
return send_packet (iface, ETHERTYPE_IP, (unsigned char *) &packet,
|
||||||
message_length + sizeof (struct ip) +
|
message_length + sizeof (struct ip) +
|
||||||
sizeof (struct udphdr));
|
sizeof (struct udphdr));
|
||||||
@ -409,7 +409,7 @@ static route_t *decodeCSR(unsigned char *p, int len)
|
|||||||
|
|
||||||
void free_dhcp (dhcp_t *dhcp)
|
void free_dhcp (dhcp_t *dhcp)
|
||||||
{
|
{
|
||||||
if (!dhcp)
|
if (! dhcp)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (dhcp->routes)
|
if (dhcp->routes)
|
||||||
|
12
interface.c
12
interface.c
@ -26,14 +26,18 @@
|
|||||||
|
|
||||||
#include <arpa/inet.h>
|
#include <arpa/inet.h>
|
||||||
|
|
||||||
/* Netlink suff */
|
/* Check linux version before including headers which break us */
|
||||||
#ifdef __linux__
|
#ifdef __linux__
|
||||||
#include <asm/types.h> /* Needed for 2.4 kernels */
|
|
||||||
#include <features.h>
|
#include <features.h>
|
||||||
#include <linux/version.h>
|
#include <linux/version.h>
|
||||||
#if LINUX_VERSION_CODE >= KERNEL_VERSION (2,6,19)
|
#if LINUX_VERSION_CODE == KERNEL_VERSION (2,6,19)
|
||||||
#include <linux/if_addr.h>
|
#error "linux 2.6.19 headers are so badly broken, use something else"
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Netlink suff */
|
||||||
|
#ifdef __linux__
|
||||||
|
#include <asm/types.h> /* Needed for 2.4 kernels */
|
||||||
#include <linux/netlink.h>
|
#include <linux/netlink.h>
|
||||||
#include <linux/rtnetlink.h>
|
#include <linux/rtnetlink.h>
|
||||||
#include <netinet/ether.h>
|
#include <netinet/ether.h>
|
||||||
|
Loading…
Reference in New Issue
Block a user