From owner-svn-src-user@FreeBSD.ORG Tue Jan 22 11:17:51 2013 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.FreeBSD.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id 771DBA82; Tue, 22 Jan 2013 11:17:51 +0000 (UTC) (envelope-from ae@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id 4CA929FF; Tue, 22 Jan 2013 11:17:51 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.5/8.14.5) with ESMTP id r0MBHpvW027526; Tue, 22 Jan 2013 11:17:51 GMT (envelope-from ae@svn.freebsd.org) Received: (from ae@localhost) by svn.freebsd.org (8.14.5/8.14.5/Submit) id r0MBHpGP027525; Tue, 22 Jan 2013 11:17:51 GMT (envelope-from ae@svn.freebsd.org) Message-Id: <201301221117.r0MBHpGP027525@svn.freebsd.org> From: "Andrey V. Elsukov" Date: Tue, 22 Jan 2013 11:17:51 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r245785 - user/ae/inet6/sys/netinet6 X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.14 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: Tue, 22 Jan 2013 11:17:51 -0000 Author: ae Date: Tue Jan 22 11:17:50 2013 New Revision: 245785 URL: http://svnweb.freebsd.org/changeset/base/245785 Log: Simplify in6_addrscope function. Modified: user/ae/inet6/sys/netinet6/scope6.c Modified: user/ae/inet6/sys/netinet6/scope6.c ============================================================================== --- user/ae/inet6/sys/netinet6/scope6.c Tue Jan 22 10:22:12 2013 (r245784) +++ user/ae/inet6/sys/netinet6/scope6.c Tue Jan 22 11:17:50 2013 (r245785) @@ -202,60 +202,20 @@ scope6_get(struct ifnet *ifp, struct sco int in6_addrscope(struct in6_addr *addr) { - int scope; - - if (addr->s6_addr[0] == 0xfe) { - scope = addr->s6_addr[1] & 0xc0; - - switch (scope) { - case 0x80: - return IPV6_ADDR_SCOPE_LINKLOCAL; - break; - case 0xc0: - return IPV6_ADDR_SCOPE_SITELOCAL; - break; - default: - return IPV6_ADDR_SCOPE_GLOBAL; /* just in case */ - break; - } - } - - if (addr->s6_addr[0] == 0xff) { - scope = addr->s6_addr[1] & 0x0f; - - /* - * due to other scope such as reserved, - * return scope doesn't work. - */ - switch (scope) { - case IPV6_ADDR_SCOPE_INTFACELOCAL: - return IPV6_ADDR_SCOPE_INTFACELOCAL; - break; - case IPV6_ADDR_SCOPE_LINKLOCAL: - return IPV6_ADDR_SCOPE_LINKLOCAL; - break; - case IPV6_ADDR_SCOPE_SITELOCAL: - return IPV6_ADDR_SCOPE_SITELOCAL; - break; - default: - return IPV6_ADDR_SCOPE_GLOBAL; - break; - } - } - - /* - * Regard loopback and unspecified addresses as global, since - * they have no ambiguity. - */ + if (IN6_IS_ADDR_MULTICAST(addr)) + return (IPV6_ADDR_MC_SCOPE(addr)); + if (IN6_IS_ADDR_LINKLOCAL(addr)) + return (IPV6_ADDR_SCOPE_LINKLOCAL); if (bcmp(&in6addr_loopback, addr, sizeof(*addr) - 1) == 0) { if (addr->s6_addr[15] == 1) /* loopback */ - return IPV6_ADDR_SCOPE_LINKLOCAL; - if (addr->s6_addr[15] == 0) /* unspecified */ - return IPV6_ADDR_SCOPE_GLOBAL; /* XXX: correct? */ + return (IPV6_ADDR_SCOPE_LINKLOCAL); + /* + * Regard unspecified address as global, since + * it has no ambiguity. + */ } - - return IPV6_ADDR_SCOPE_GLOBAL; + return (IPV6_ADDR_SCOPE_GLOBAL); } /*