From 0406ceaaee37395222cc0d87df03b940c8946a5c Mon Sep 17 00:00:00 2001 From: meem Date: Thu, 12 Jan 2006 20:36:01 -0800 Subject: 4659930 ip_anon_rcm`ifaddrlist() misbehaves when no interfaces are found 4803054 ip_anon_rcm`ifaddrlist() contains unsafe string strncpy() usage 6370980 ifaddrlist() needs to be fixed up and put in libinetutil 6372093 purge ip_anon_register()'s pathetic attempts to paper over 4659930 --HG-- rename : usr/src/cmd/cmd-inet/common/Makefile => deleted_files/usr/src/cmd/cmd-inet/common/Makefile rename : usr/src/cmd/cmd-inet/common/ifaddrlist.h => deleted_files/usr/src/cmd/cmd-inet/common/ifaddrlist.h rename : usr/src/cmd/cmd-inet/usr.sbin/ping/req.flg => deleted_files/usr/src/cmd/cmd-inet/usr.sbin/ping/req.flg rename : usr/src/cmd/cmd-inet/usr.sbin/traceroute/req.flg => deleted_files/usr/src/cmd/cmd-inet/usr.sbin/traceroute/req.flg rename : usr/src/cmd/cmd-inet/common/ifaddrlist.c => usr/src/lib/libinetutil/common/ifaddrlist.c --- usr/src/lib/libinetutil/common/libinetutil.h | 38 ++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) (limited to 'usr/src/lib/libinetutil/common/libinetutil.h') diff --git a/usr/src/lib/libinetutil/common/libinetutil.h b/usr/src/lib/libinetutil/common/libinetutil.h index 0213a23aa2..b21d54f56c 100644 --- a/usr/src/lib/libinetutil/common/libinetutil.h +++ b/usr/src/lib/libinetutil/common/libinetutil.h @@ -19,8 +19,9 @@ * * CDDL HEADER END */ + /* - * Copyright 2004 Sun Microsystems, Inc. All rights reserved. + * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -30,7 +31,7 @@ #pragma ident "%Z%%M% %I% %E% SMI" /* - * Contains SMI-private API for general internet functionality + * Contains SMI-private API for general Internet functionality */ #ifdef __cplusplus @@ -59,6 +60,39 @@ typedef struct { extern boolean_t ifparse_ifspec(const char *, ifspec_t *); extern void get_netmask4(const struct in_addr *, struct in_addr *); +/* + * Extended version of the classic BSD ifaddrlist() interface: + * + * int ifaddrlist(struct ifaddrlist **addrlistp, int af, char *errbuf); + * + * * addrlistp: Upon success, ifaddrlist() sets *addrlistp to a + * dynamically-allocated array of addresses. + * + * * af: Either AF_INET to obtain IPv4 addresses, or AF_INET6 to + * obtain IPv6 addresses. + * + * * errbuf: A caller-supplied buffer of ERRBUFSIZE. Upon failure, + * provides the reason for the failure. + * + * Upon success, ifaddrlist() returns the number of addresses in the array + * pointed to by `addrlistp'. If the count is 0, then `addrlistp' is NULL. + */ +union any_in_addr { + struct in6_addr addr6; + struct in_addr addr; +}; + +struct ifaddrlist { + int index; /* interface index */ + union any_in_addr addr; /* interface address */ + char device[LIFNAMSIZ + 1]; /* interface name */ + uint64_t flags; /* interface flags */ +}; + +#define ERRBUFSIZE 128 /* expected size of third argument */ + +extern int ifaddrlist(struct ifaddrlist **, int, char *); + /* * Timer queues * -- cgit v1.2.3