summaryrefslogtreecommitdiff
path: root/common/inet.c
diff options
context:
space:
mode:
authorTed Lemon <source@isc.org>2001-06-27 00:31:20 +0000
committerTed Lemon <source@isc.org>2001-06-27 00:31:20 +0000
commitd758ad8cac9c00c70cfe4dd459bf7e87c268c579 (patch)
tree85d7e10e40b0e1061a40f45ef0e9f44073346482 /common/inet.c
parent07b958004f4e39f9b222115b1b050044a2434ea1 (diff)
downloadisc-dhcp-d758ad8cac9c00c70cfe4dd459bf7e87c268c579.tar.gz
Merge changes between 3.0rc7 and 3.0rc8pl2.
Diffstat (limited to 'common/inet.c')
-rw-r--r--common/inet.c61
1 files changed, 59 insertions, 2 deletions
diff --git a/common/inet.c b/common/inet.c
index c021a905..f03e1893 100644
--- a/common/inet.c
+++ b/common/inet.c
@@ -4,7 +4,7 @@
way... */
/*
- * Copyright (c) 1995-1999 Internet Software Consortium.
+ * Copyright (c) 1995-2001 Internet Software Consortium.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -44,7 +44,7 @@
#ifndef lint
static char copyright[] =
-"$Id: inet.c,v 1.8 2000/03/17 03:59:01 mellon Exp $ Copyright (c) 1995-1999 The Internet Software Consortium. All rights reserved.\n";
+"$Id: inet.c,v 1.9 2001/06/27 00:29:51 mellon Exp $ Copyright (c) 1995-2001 The Internet Software Consortium. All rights reserved.\n";
#endif /* not lint */
#include "dhcpd.h"
@@ -183,3 +183,60 @@ char *piaddr (addr)
}
return pbuf;
}
+
+char *piaddr1 (addr)
+ struct iaddr addr;
+{
+ static char pbuf [4 * 16];
+ char *s = pbuf;
+ int i;
+
+ if (addr.len == 0) {
+ strcpy (s, "<null address>");
+ }
+ for (i = 0; i < addr.len; i++) {
+ sprintf (s, "%s%d", i ? "." : "", addr.iabuf [i]);
+ s += strlen (s);
+ }
+ return pbuf;
+}
+
+char *piaddrmask (struct iaddr addr, struct iaddr mask,
+ const char *file, int line)
+{
+ char *s, *t;
+ int i, mw;
+ unsigned len;
+
+ for (i = 0; i < 32; i++) {
+ if (!mask.iabuf [3 - i / 8])
+ i += 7;
+ else if (mask.iabuf [3 - i / 8] & (1 << (i % 8)))
+ break;
+ }
+ mw = 32 - i;
+ len = mw > 9 ? 2 : 1;
+ len += 4; /* three dots and a slash. */
+ for (i = 0; i < (mw / 8) + 1; i++) {
+ if (addr.iabuf [i] > 99)
+ len += 3;
+ else if (addr.iabuf [i] > 9)
+ len += 2;
+ else
+ len++;
+ }
+ s = dmalloc (len + 1, file, line);
+ if (!s)
+ return s;
+ t = s;
+ sprintf (t, "%d", addr.iabuf [0]);
+ t += strlen (t);
+ for (i = 1; i < (mw / 8) + 1; i++) {
+ sprintf (t, ".%d", addr.iabuf [i]);
+ t += strlen (t);
+ }
+ *t++ = '/';
+ sprintf (t, "%d", mw);
+ return s;
+}
+