diff options
author | David Hankins <dhankins@isc.org> | 2006-02-27 23:56:13 +0000 |
---|---|---|
committer | David Hankins <dhankins@isc.org> | 2006-02-27 23:56:13 +0000 |
commit | 25b988c68faa02465ec5d92dd7bb01039839313d (patch) | |
tree | a0850459bf30fcc0024b1492834617e2e436ac3c /common/ctrace.c | |
parent | 00663f8159abffa4ce3dbf1e29cbce17fc92a48c (diff) | |
download | isc-dhcp-25b988c68faa02465ec5d92dd7bb01039839313d.tar.gz |
- The IO system now tracks all local IP addresses, so that the DHCP
applications (particularly the dhcrelay) can discern between what frames
were tranmsitted to it, and what frames are being carried through it which
it should not intercept. [ISC-Bugs #15573]
Diffstat (limited to 'common/ctrace.c')
-rw-r--r-- | common/ctrace.c | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/common/ctrace.c b/common/ctrace.c index e5042ec6..5e8bcc09 100644 --- a/common/ctrace.c +++ b/common/ctrace.c @@ -32,7 +32,7 @@ #ifndef lint static char copyright[] = -"$Id: ctrace.c,v 1.4 2005/03/17 20:14:57 dhankins Exp $ Copyright (c) 2004 Internet Systems Consortium. All rights reserved.\n"; +"$Id: ctrace.c,v 1.5 2006/02/27 23:56:13 dhankins Exp $ Copyright (c) 2004 Internet Systems Consortium. All rights reserved.\n"; #endif /* not lint */ #include "dhcpd.h" @@ -46,8 +46,10 @@ void trace_interface_register (trace_type_t *ttype, struct interface_info *ip) memset (&tipkt, 0, sizeof tipkt); memcpy (&tipkt.hw_address, &ip -> hw_address, sizeof ip -> hw_address); - memcpy (&tipkt.primary_address, - &ip -> primary_address, sizeof ip -> primary_address); + if (ip -> address_count > 0) + memcpy (&tipkt.primary_address, + &ip -> addresses [0], + sizeof ip -> addresses [0]); memcpy (tipkt.name, ip -> name, sizeof ip -> name); tipkt.index = htonl (ip -> index); @@ -87,8 +89,12 @@ void trace_interface_input (trace_type_t *ttype, unsigned len, char *buf) memcpy (&ip -> hw_address, &tipkt -> hw_address, sizeof ip -> hw_address); - memcpy (&ip -> primary_address, &tipkt -> primary_address, - sizeof ip -> primary_address); + ip -> address_count = ip -> address_max = 1; + ip -> addresses = dmalloc (sizeof (struct in_addr), MDL); + if (!ip -> addresses) + log_fatal ("Can't allocate address buffer for trace interface"); + memcpy (&ip -> addresses [0], &tipkt -> primary_address, + sizeof ip -> addresses [0]); memcpy (ip -> name, tipkt -> name, sizeof ip -> name); ip -> index = ntohl (tipkt -> index); @@ -102,7 +108,7 @@ void trace_interface_input (trace_type_t *ttype, unsigned len, char *buf) ip -> ifp -> ifr_addr.sa_len = sizeof (struct sockaddr_in); #endif sin = (struct sockaddr_in *)&ip -> ifp -> ifr_addr; - sin -> sin_addr = ip -> primary_address; + sin -> sin_addr = ip -> addresses [0]; addr.len = 4; memcpy (addr.iabuf, &sin -> sin_addr.s_addr, addr.len); |