Date: Fri, 18 Jan 2013 10:19:50 +0000 (UTC) From: "Andrey V. Elsukov" <ae@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r245597 - user/ae/inet6/sys/netinet6 Message-ID: <201301181019.r0IAJoU6048597@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: ae Date: Fri Jan 18 10:19:50 2013 New Revision: 245597 URL: http://svnweb.freebsd.org/changeset/base/245597 Log: Clean up from use of embedded zone ids. Modified: user/ae/inet6/sys/netinet6/in6_mcast.c Modified: user/ae/inet6/sys/netinet6/in6_mcast.c ============================================================================== --- user/ae/inet6/sys/netinet6/in6_mcast.c Fri Jan 18 10:11:54 2013 (r245596) +++ user/ae/inet6/sys/netinet6/in6_mcast.c Fri Jan 18 10:19:50 2013 (r245597) @@ -1161,21 +1161,6 @@ in6_mc_join_locked(struct ifnet *ifp, co #ifdef KTR char ip6tbuf[INET6_ADDRSTRLEN]; #endif - -#ifdef INVARIANTS - /* - * Sanity: Check scope zone ID was set for ifp, if and - * only if group is scoped to an interface. - */ - KASSERT(IN6_IS_ADDR_MULTICAST(mcaddr), - ("%s: not a multicast address", __func__)); - if (IN6_IS_ADDR_MC_LINKLOCAL(mcaddr) || - IN6_IS_ADDR_MC_INTFACELOCAL(mcaddr)) { - KASSERT(mcaddr->s6_addr16[1] != 0, - ("%s: scope zone ID not set", __func__)); - } -#endif - IN6_MULTI_LOCK_ASSERT(); CTR4(KTR_MLD, "%s: join %s on %p(%s))", __func__, @@ -1376,8 +1361,6 @@ in6p_block_unblock_source(struct inpcb * if (!IN6_IS_ADDR_MULTICAST(&gsa->sin6.sin6_addr)) return (EINVAL); - (void)in6_setscope(&gsa->sin6.sin6_addr, ifp, NULL); - /* * Check if we are actually a member of this group. */ @@ -1595,7 +1578,6 @@ in6p_get_source_filters(struct inpcb *in ifp = ifnet_byindex(msfr.msfr_ifindex); if (ifp == NULL) return (EADDRNOTAVAIL); - (void)in6_setscope(&gsa->sin6.sin6_addr, ifp, NULL); INP_WLOCK(inp); @@ -1882,7 +1864,6 @@ in6p_join_group(struct inpcb *inp, struc * list entry against passed-in ifp, if and only * if source list filter entry is iface or node local. */ - in6_clearscope(&ssa->sin6.sin6_addr); ssa->sin6.sin6_port = 0; ssa->sin6.sin6_scope_id = 0; } @@ -1909,12 +1890,9 @@ in6p_join_group(struct inpcb *inp, struc gsa->sin6.sin6_scope_id = 0; /* - * Always set the scope zone ID on memberships created from userland. + * XXX Always set the scope zone ID on memberships created from userland. * Use the passed-in ifp to do this. - * XXX The in6_setscope() return value is meaningless. - * XXX SCOPE6_LOCK() is taken by in6_setscope(). */ - (void)in6_setscope(&gsa->sin6.sin6_addr, ifp, NULL); imo = in6p_findmoptions(inp); idx = im6o_match_group(imo, ifp, &gsa->sa); @@ -2166,7 +2144,6 @@ in6p_leave_group(struct inpcb *inp, stru * list entry against passed-in ifp, if and only * if source list filter entry is iface or node local. */ - in6_clearscope(&ssa->sin6.sin6_addr); } gsa->sin6.sin6_port = 0; gsa->sin6.sin6_scope_id = 0; @@ -2184,23 +2161,18 @@ in6p_leave_group(struct inpcb *inp, stru return (EINVAL); /* - * Validate interface index if provided. If no interface index + * XXX Validate interface index if provided. If no interface index * was provided separately, attempt to look the membership up * from the default scope as a last resort to disambiguate * the membership we are being asked to leave. - * XXX SCOPE6 lock potentially taken here. */ if (ifindex != 0) { - if (ifindex < 0 || V_if_index < ifindex) + if (V_if_index < ifindex) return (EADDRNOTAVAIL); ifp = ifnet_byindex(ifindex); if (ifp == NULL) return (EADDRNOTAVAIL); - (void)in6_setscope(&gsa->sin6.sin6_addr, ifp, NULL); } else { - error = sa6_embedscope(&gsa->sin6, V_ip6_use_defzone); - if (error) - return (EADDRNOTAVAIL); /* * Some badly behaved applications don't pass an ifindex * or a scope ID, which is an API violation. In this case, @@ -2211,15 +2183,10 @@ in6p_leave_group(struct inpcb *inp, stru * directly until such time as this implementation is * refactored, assuming the scope IDs are the way to go. */ - ifindex = ntohs(gsa->sin6.sin6_addr.s6_addr16[1]); - if (ifindex == 0) { - CTR2(KTR_MLD, "%s: warning: no ifindex, looking up " - "ifp for group %s.", __func__, - ip6_sprintf(ip6tbuf, &gsa->sin6.sin6_addr)); - ifp = in6p_lookup_mcast_ifp(inp, &gsa->sin6); - } else { - ifp = ifnet_byindex(ifindex); - } + CTR2(KTR_MLD, "%s: warning: no ifindex, looking up " + "ifp for group %s.", __func__, + ip6_sprintf(ip6tbuf, &gsa->sin6.sin6_addr)); + ifp = in6p_lookup_mcast_ifp(inp, &gsa->sin6); if (ifp == NULL) return (EADDRNOTAVAIL); } @@ -2349,7 +2316,7 @@ in6p_set_multicast_if(struct inpcb *inp, error = sooptcopyin(sopt, &ifindex, sizeof(u_int), sizeof(u_int)); if (error) return (error); - if (ifindex < 0 || V_if_index < ifindex) + if (V_if_index < ifindex) return (EINVAL); ifp = ifnet_byindex(ifindex); @@ -2407,8 +2374,6 @@ in6p_set_source_filters(struct inpcb *in ifp = ifnet_byindex(msfr.msfr_ifindex); if (ifp == NULL) return (EADDRNOTAVAIL); - (void)in6_setscope(&gsa->sin6.sin6_addr, ifp, NULL); - /* * Take the INP write lock. * Check if this socket is a member of this group. @@ -2494,7 +2459,6 @@ in6p_set_source_filters(struct inpcb *in * list entry against passed-in ifp, if and only * if source list filter entry is iface or node local. */ - in6_clearscope(&psin->sin6_addr); error = im6f_get_source(imf, psin, &lims); if (error) break; @@ -2707,7 +2671,6 @@ sysctl_ip6_mcast_filters(SYSCTL_HANDLER_ /* * Internal MLD lookups require that scope/zone ID is set. */ - (void)in6_setscope(&mcaddr, ifp, NULL); retval = sysctl_wire_old_buffer(req, sizeof(uint32_t) + (in6_mcast_maxgrpsrc * sizeof(struct in6_addr)));
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201301181019.r0IAJoU6048597>