summaryrefslogtreecommitdiff
path: root/common/dlpi.c
diff options
context:
space:
mode:
authorTed Lemon <source@isc.org>2000-07-27 09:03:08 +0000
committerTed Lemon <source@isc.org>2000-07-27 09:03:08 +0000
commit6ceb9118e9b730eb4aebf3bfe9e5bb2c3daa091e (patch)
tree71a9b3f5b41acb52efb92836608b44ee2a963588 /common/dlpi.c
parenta8c190df765a1f47009dc384eec2534606722e9f (diff)
downloadisc-dhcp-6ceb9118e9b730eb4aebf3bfe9e5bb2c3daa091e.tar.gz
Reference count binding scopes. Align IP headers on output.
Diffstat (limited to 'common/dlpi.c')
-rw-r--r--common/dlpi.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/common/dlpi.c b/common/dlpi.c
index 3052ad87..90a62ebd 100644
--- a/common/dlpi.c
+++ b/common/dlpi.c
@@ -84,7 +84,7 @@
#ifndef lint
static char copyright[] =
-"$Id: dlpi.c,v 1.21 2000/06/08 21:14:13 mellon Exp $ Copyright (c) 1996-2000 The Internet Software Consortium. All rights reserved.\n";
+"$Id: dlpi.c,v 1.22 2000/07/27 09:02:31 mellon Exp $ Copyright (c) 1996-2000 The Internet Software Consortium. All rights reserved.\n";
#endif /* not lint */
#include "dhcpd.h"
@@ -508,13 +508,17 @@ ssize_t send_packet (interface, packet, raw, len, from, to, hto)
struct sockaddr_in *to;
struct hardware *hto;
{
+ unsigned hbufp = 0;
+ double hh [16];
+ double ih [1536 / sizeof (double)];
+ unsigned char *dbuf = (unsigned char *)ih;
unsigned dbuflen;
- unsigned char dbuf [1536];
unsigned char sap [2];
unsigned char dstaddr [DLPI_MAXDLADDR];
unsigned addrlen;
int saplen;
int result;
+ int fudge;
if (!strcmp (interface -> name, "fallback"))
return send_fallback (interface, packet, raw,
@@ -524,7 +528,11 @@ ssize_t send_packet (interface, packet, raw, len, from, to, hto)
/* Assemble the headers... */
#ifdef USE_DLPI_RAW
- assemble_hw_header (interface, dbuf, &dbuflen, hto);
+ assemble_hw_header (interface, (unsigned char *)hh, &dbuflen, hto);
+ fudge = dbuflen % 4; /* IP header must be word-aligned. */
+ memcpy (dbuf + fudge, (unsigned char *)hh, dbuflen);
+#else
+ fudge = 0;
#endif
assemble_udp_ip_header (interface, dbuf, &dbuflen, from.s_addr,
to -> sin_addr.s_addr, to -> sin_port,
@@ -535,7 +543,7 @@ ssize_t send_packet (interface, packet, raw, len, from, to, hto)
dbuflen += len;
#ifdef USE_DLPI_RAW
- result = write (interface -> wfdesc, dbuf, dbuflen);
+ result = write (interface -> wfdesc, dbuf + fudge, dbuflen - fudge);
#else
/* XXX: Assumes ethernet, with two byte SAP */
sap [0] = 0x08; /* ETHERTYPE_IP, high byte */