summaryrefslogtreecommitdiff
path: root/common/ctrace.c
diff options
context:
space:
mode:
authorDavid Hankins <dhankins@isc.org>2006-02-27 23:56:13 +0000
committerDavid Hankins <dhankins@isc.org>2006-02-27 23:56:13 +0000
commit25b988c68faa02465ec5d92dd7bb01039839313d (patch)
treea0850459bf30fcc0024b1492834617e2e436ac3c /common/ctrace.c
parent00663f8159abffa4ce3dbf1e29cbce17fc92a48c (diff)
downloadisc-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.c18
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);