diff options
author | Ted Lemon <source@isc.org> | 1998-06-25 02:55:16 +0000 |
---|---|---|
committer | Ted Lemon <source@isc.org> | 1998-06-25 02:55:16 +0000 |
commit | ca0e3669b8fd7b48dea02f15131de2899cd47563 (patch) | |
tree | 730780870e58cdcba549be9d88d02eb27977d660 /common/dispatch.c | |
parent | 52cdb300e7cb9fb7b99c6abf7991077b27028ffa (diff) | |
download | isc-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.c | 19 |
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); } } |