Date: Tue, 22 Jan 2013 11:17:51 +0000 (UTC) From: "Andrey V. Elsukov" <ae@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r245785 - user/ae/inet6/sys/netinet6 Message-ID: <201301221117.r0MBHpGP027525@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
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); } /*
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201301221117.r0MBHpGP027525>