summaryrefslogtreecommitdiff
path: root/common/dispatch.c
diff options
context:
space:
mode:
authorTed Lemon <source@isc.org>1998-06-25 02:55:16 +0000
committerTed Lemon <source@isc.org>1998-06-25 02:55:16 +0000
commitca0e3669b8fd7b48dea02f15131de2899cd47563 (patch)
tree730780870e58cdcba549be9d88d02eb27977d660 /common/dispatch.c
parent52cdb300e7cb9fb7b99c6abf7991077b27028ffa (diff)
downloadisc-dhcp-ca0e3669b8fd7b48dea02f15131de2899cd47563.tar.gz
Read DHCP packet into aligned buffer and pass it as a struct pointer instead of a character buffer.
Diffstat (limited to 'common/dispatch.c')
-rw-r--r--common/dispatch.c19
1 files changed, 11 insertions, 8 deletions
diff --git a/common/dispatch.c b/common/dispatch.c
index c92cbf36..cea517ee 100644
--- a/common/dispatch.c
+++ b/common/dispatch.c
@@ -42,7 +42,7 @@
#ifndef lint
static char copyright[] =
-"$Id: dispatch.c,v 1.49 1998/04/09 04:30:00 mellon Exp $ Copyright (c) 1995, 1996 The Internet Software Consortium. All rights reserved.\n";
+"$Id: dispatch.c,v 1.50 1998/06/25 02:55:16 mellon Exp $ Copyright (c) 1995, 1996 The Internet Software Consortium. All rights reserved.\n";
#endif /* not lint */
#include "dhcpd.h"
@@ -54,7 +54,7 @@ struct timeout *timeouts;
static struct timeout *free_timeouts;
static int interfaces_invalidated;
void (*bootp_packet_handler) PROTO ((struct interface_info *,
- unsigned char *, int, unsigned int,
+ struct dhcp_packet *, int, unsigned int,
struct iaddr, struct hardware *));
static void got_one PROTO ((struct protocol *));
@@ -577,13 +577,16 @@ static void got_one (l)
struct hardware hfrom;
struct iaddr ifrom;
int result;
- static unsigned char packbuf [4095]; /* Packet input buffer.
- Must be as large as largest
- possible MTU. */
+ union {
+ unsigned char packbuf [4095]; /* Packet input buffer.
+ Must be as large as largest
+ possible MTU. */
+ struct dhcp_packet packet;
+ } u;
struct interface_info *ip = l -> local;
- if ((result = receive_packet (ip, packbuf, sizeof packbuf,
- &from, &hfrom)) < 0) {
+ if ((result =
+ receive_packet (ip, u.packbuf, sizeof u, &from, &hfrom)) < 0) {
warn ("receive_packet failed on %s: %m", ip -> name);
return;
}
@@ -594,7 +597,7 @@ static void got_one (l)
ifrom.len = 4;
memcpy (ifrom.iabuf, &from.sin_addr, ifrom.len);
- (*bootp_packet_handler) (ip, packbuf, result,
+ (*bootp_packet_handler) (ip, &u.packet, result,
from.sin_port, ifrom, &hfrom);
}
}