From owner-svn-src-all@FreeBSD.ORG Sun Jul 28 19:49:40 2013 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 5B32D568; Sun, 28 Jul 2013 19:49:40 +0000 (UTC) (envelope-from hrs@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 2EE0227C9; Sun, 28 Jul 2013 19:49:40 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r6SJneLH075992; Sun, 28 Jul 2013 19:49:40 GMT (envelope-from hrs@svn.freebsd.org) Received: (from hrs@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r6SJnexZ075991; Sun, 28 Jul 2013 19:49:40 GMT (envelope-from hrs@svn.freebsd.org) Message-Id: <201307281949.r6SJnexZ075991@svn.freebsd.org> From: Hiroki Sato Date: Sun, 28 Jul 2013 19:49:40 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r253751 - head/sys/net X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 28 Jul 2013 19:49:40 -0000 Author: hrs Date: Sun Jul 28 19:49:39 2013 New Revision: 253751 URL: http://svnweb.freebsd.org/changeset/base/253751 Log: - Relax the restriction on the member interfaces with LLAs. Two or more LLAs on the member interfaces are actually harmless when the parent interface does not have a LLA. - Add net.link.bridge.allow_llz_overlap. This is a knob to allow LLAs on a bridge and the member interfaces at the same time. The default is 0. Pointed out by: ume MFC after: 3 days Modified: head/sys/net/if_bridge.c Modified: head/sys/net/if_bridge.c ============================================================================== --- head/sys/net/if_bridge.c Sun Jul 28 18:44:17 2013 (r253750) +++ head/sys/net/if_bridge.c Sun Jul 28 19:49:39 2013 (r253751) @@ -382,6 +382,12 @@ SYSCTL_INT(_net_link_bridge, OID_AUTO, i &bridge_inherit_mac, 0, "Inherit MAC address from the first bridge member"); +static VNET_DEFINE(int, allow_llz_overlap) = 0; +#define V_allow_llz_overlap VNET(allow_llz_overlap) +SYSCTL_VNET_INT(_net_link_bridge, OID_AUTO, allow_llz_overlap, CTLFLAG_RW, + &VNET_NAME(allow_llz_overlap), 0, "Allow overlap of link-local scope " + "zones of a bridge interface and the member interfaces"); + struct bridge_control { int (*bc_func)(struct bridge_softc *, void *); int bc_argsize; @@ -1064,7 +1070,8 @@ bridge_ioctl_add(struct bridge_softc *sc */ /* Check if the parent interface has a link-local scope addr. */ - if (in6ifa_llaonifp(sc->sc_ifp) != NULL) { + if (V_allow_llz_overlap == 0 && + in6ifa_llaonifp(sc->sc_ifp) != NULL) { /* * If any, remove all inet6 addresses from the member * interfaces. @@ -1093,32 +1100,6 @@ bridge_ioctl_add(struct bridge_softc *sc "IPv6 address scope violation.\n", ifs->if_xname); } - } else { - struct in6_ifaddr *ia6_m, *ia6_s; - /* - * If not, check whether one of the existing member - * interfaces have inet6 address. If any, remove - * inet6 addresses on the interface to be added. - */ - ia6_m = NULL; - BRIDGE_XLOCK(sc); - LIST_FOREACH(bif, &sc->sc_iflist, bif_next) { - ia6_m = in6ifa_llaonifp(bif->bif_ifp); - if (ia6_m != NULL) - break; - } - BRIDGE_XDROP(sc); - ia6_s = in6ifa_llaonifp(ifs); - - if (ia6_m != NULL && ia6_s != NULL) { - BRIDGE_UNLOCK(sc); - in6_ifdetach(ifs); - BRIDGE_LOCK(sc); - if_printf(sc->sc_ifp, "IPv6 addresses on %s have " - "been removed before adding it as a member " - "to prevent IPv6 address scope violation.\n", - ifs->if_xname); - } } #endif /* Allow the first Ethernet member to define the MTU */