diff options
author | Ted Lemon <source@isc.org> | 2001-06-27 00:31:20 +0000 |
---|---|---|
committer | Ted Lemon <source@isc.org> | 2001-06-27 00:31:20 +0000 |
commit | d758ad8cac9c00c70cfe4dd459bf7e87c268c579 (patch) | |
tree | 85d7e10e40b0e1061a40f45ef0e9f44073346482 /common/inet.c | |
parent | 07b958004f4e39f9b222115b1b050044a2434ea1 (diff) | |
download | isc-dhcp-d758ad8cac9c00c70cfe4dd459bf7e87c268c579.tar.gz |
Merge changes between 3.0rc7 and 3.0rc8pl2.
Diffstat (limited to 'common/inet.c')
-rw-r--r-- | common/inet.c | 61 |
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; +} + |