diff options
author | Ted Lemon <source@isc.org> | 2000-07-27 09:03:08 +0000 |
---|---|---|
committer | Ted Lemon <source@isc.org> | 2000-07-27 09:03:08 +0000 |
commit | 6ceb9118e9b730eb4aebf3bfe9e5bb2c3daa091e (patch) | |
tree | 71a9b3f5b41acb52efb92836608b44ee2a963588 /common/dlpi.c | |
parent | a8c190df765a1f47009dc384eec2534606722e9f (diff) | |
download | isc-dhcp-6ceb9118e9b730eb4aebf3bfe9e5bb2c3daa091e.tar.gz |
Reference count binding scopes. Align IP headers on output.
Diffstat (limited to 'common/dlpi.c')
-rw-r--r-- | common/dlpi.c | 16 |
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 */ |