From owner-svn-src-user@FreeBSD.ORG Thu Jun 2 01:44:24 2011 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 938F2106564A; Thu, 2 Jun 2011 01:44:24 +0000 (UTC) (envelope-from hrs@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 7BE278FC08; Thu, 2 Jun 2011 01:44:24 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p521iOYC095436; Thu, 2 Jun 2011 01:44:24 GMT (envelope-from hrs@svn.freebsd.org) Received: (from hrs@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p521iOtR095433; Thu, 2 Jun 2011 01:44:24 GMT (envelope-from hrs@svn.freebsd.org) Message-Id: <201106020144.p521iOtR095433@svn.freebsd.org> From: Hiroki Sato Date: Thu, 2 Jun 2011 01:44:24 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r222591 - user/hrs/ipv6/sbin/ifconfig X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 02 Jun 2011 01:44:24 -0000 Author: hrs Date: Thu Jun 2 01:44:24 2011 New Revision: 222591 URL: http://svn.freebsd.org/changeset/base/222591 Log: Move a handler of "nd6 options" line to af_other_status() of AF_INET6. Discussed with: bz Modified: user/hrs/ipv6/sbin/ifconfig/af_inet6.c user/hrs/ipv6/sbin/ifconfig/af_nd6.c Modified: user/hrs/ipv6/sbin/ifconfig/af_inet6.c ============================================================================== --- user/hrs/ipv6/sbin/ifconfig/af_inet6.c Thu Jun 2 00:58:20 2011 (r222590) +++ user/hrs/ipv6/sbin/ifconfig/af_inet6.c Thu Jun 2 01:44:24 2011 (r222591) @@ -69,6 +69,7 @@ static int explicit_prefix = 0; extern void setnd6flags(const char *, int, int, const struct afswtch *); extern void setnd6defif(const char *, int, int, const struct afswtch *); +extern void nd6_status(int); static char addr_buf[MAXHOSTNAMELEN *2 + 1]; /*for getnameinfo()*/ @@ -521,6 +522,7 @@ static struct afswtch af_inet6 = { .af_status = in6_status, .af_getaddr = in6_getaddr, .af_getprefix = in6_getprefix, + .af_other_status = nd6_status, .af_postproc = in6_postproc, .af_status_tunnel = in6_status_tunnel, .af_settunnel = in6_set_tunnel, Modified: user/hrs/ipv6/sbin/ifconfig/af_nd6.c ============================================================================== --- user/hrs/ipv6/sbin/ifconfig/af_nd6.c Thu Jun 2 00:58:20 2011 (r222590) +++ user/hrs/ipv6/sbin/ifconfig/af_nd6.c Thu Jun 2 01:44:24 2011 (r222591) @@ -63,6 +63,7 @@ static const char rcsid[] = static int isnd6defif(int); void setnd6flags(const char *, int, int, const struct afswtch *); void setnd6defif(const char *, int, int, const struct afswtch *); +void nd6_status(int); void setnd6flags(const char *dummyaddr __unused, @@ -136,62 +137,13 @@ isnd6defif(int s) return (ndifreq.ifindex == ifindex); } -static void +void nd6_status(int s) { struct in6_ndireq nd; - struct rt_msghdr *rtm; - size_t needed; - char *buf, *next; - int mib[6], ntry; int s6; int error; - int isinet6, isdefif; - - /* Check if the interface has at least one IPv6 address. */ - mib[0] = CTL_NET; - mib[1] = PF_ROUTE; - mib[2] = 0; - mib[3] = AF_INET6; - mib[4] = NET_RT_IFLIST; - mib[5] = if_nametoindex(ifr.ifr_name); - - /* Try to prevent a race between two sysctls. */ - ntry = 0; - do { - error = sysctl(mib, 6, NULL, &needed, NULL, 0); - if (error) { - warn("sysctl(NET_RT_IFLIST)/estimate"); - return; - } - buf = malloc(needed); - if (buf == NULL) { - warn("malloc for sysctl(NET_RT_IFLIST) failed"); - return; - } - if ((error = sysctl(mib, 6, buf, &needed, NULL, 0)) < 0) { - if (errno != ENOMEM || ++ntry >= MAX_SYSCTL_TRY) { - warn("sysctl(NET_RT_IFLIST)/get"); - free(buf); - return; - } - free(buf); - buf = NULL; - } - } while (buf == NULL); - - isinet6 = 0; - for (next = buf; next < buf + needed; next += rtm->rtm_msglen) { - rtm = (struct rt_msghdr *)next; - - if (rtm->rtm_version != RTM_VERSION) - continue; - if (rtm->rtm_type == RTM_NEWADDR) { - isinet6 = 1; - break; - } - } - free(buf); + int isdefif; memset(&nd, 0, sizeof(nd)); strncpy(nd.ifname, ifr.ifr_name, sizeof(nd.ifname)); @@ -207,30 +159,10 @@ nd6_status(int s) } isdefif = isnd6defif(s6); close(s6); - /* - * Display an nd6 line only for cases of IPv6 address + non-zero flag - * or accept_rtadv flag. - */ - if (nd.ndi.flags == 0 && !isdefif) - return; - if (nd.ndi.flags & ND6_IFF_ACCEPT_RTADV) - isinet6 = 1; - if (!isinet6) + + if (nd.ndi.flags == 0) return; printb("\tnd6 options", (unsigned int)(nd.ndi.flags | (isdefif << 15)), ND6BITS); putchar('\n'); } - -static struct afswtch af_nd6 = { - .af_name = "nd6", - .af_af = AF_LOCAL, - .af_other_status= nd6_status, -}; - -static __constructor void -nd6_ctor(void) -{ - - af_register(&af_nd6); -}