svn commit: r245785 - user/ae/inet6/sys/netinet6
Andrey V. Elsukov
ae at FreeBSD.org
Tue Jan 22 11:17:51 UTC 2013
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);
}
/*
More information about the svn-src-user
mailing list