From patchwork Fri Dec 5 14:36:32 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Cristian Morales Vega X-Patchwork-Id: 418122 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from arrakis.dune.hu (arrakis.dune.hu [78.24.191.176]) (using TLSv1.1 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 2B567140100 for ; Sat, 6 Dec 2014 01:38:12 +1100 (AEDT) Received: from arrakis.dune.hu (localhost [127.0.0.1]) by arrakis.dune.hu (Postfix) with ESMTP id 977DC28C019; Fri, 5 Dec 2014 15:36:20 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on arrakis.dune.hu X-Spam-Level: X-Spam-Status: No, score=-1.5 required=5.0 tests=BAYES_00 autolearn=unavailable version=3.3.2 Received: from arrakis.dune.hu (localhost [127.0.0.1]) by arrakis.dune.hu (Postfix) with ESMTP id 0535028C112 for ; Fri, 5 Dec 2014 15:36:14 +0100 (CET) X-policyd-weight: NOT_IN_SBL_XBL_SPAMHAUS=-1.5 NOT_IN_SPAMCOP=-1.5 NOT_IN_BL_NJABL=-1.5 CL_IP_EQ_HELO_IP=-2 (check from: .samknows. - helo: .mail-wi0-f171.google. - helo-domain: .google.) FROM/MX_MATCHES_HELO(DOMAIN)=-2; rate: -8.5 Received: from mail-wi0-f171.google.com (mail-wi0-f171.google.com [209.85.212.171]) by arrakis.dune.hu (Postfix) with ESMTPS for ; Fri, 5 Dec 2014 15:36:12 +0100 (CET) Received: by mail-wi0-f171.google.com with SMTP id bs8so1598587wib.16 for ; Fri, 05 Dec 2014 06:37:51 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=c8jx1nq0Gx0qeYVz9I4Y2+HInwZwfLS/iVSzKL1qan0=; b=IrolA+bTsKieIVpxIyEYN0su0EEVN/c9DUMWSWqc9KbYWBIPDbXICdIoe7B5Iz4gYq ZRzaLSpvcERYeAhmuDiYKoXXQgrJgBGlVyphSfWA+Fw3QXuOplPr86cEycfgNMUU9V57 /1Lwq8vV/LJ70971mJpx6ROt7LAg4kBQSvEvReeY7wHeChdggkSr5iYEaY+OKzcOaXhp 11sZ7aZs+X0GnCJeYHInn1xAStK4U5X5ddMOSeDKXUc0fkKC7zRDUk6t99Vi/gkkuRX+ H7imUyfGu5YY4gHg6Y7UyFCjlDZWnrpmkv+w1P/q/vhtejBsSRdOVr3TZnBLN0Zeou5Y HZhQ== X-Gm-Message-State: ALoCoQkt59NqfrO49wBPXbnDycebuawAfhcsDIaE9MdpREP+x29FDM3AyoZi6a3wWyFX+BUivGqR X-Received: by 10.195.11.38 with SMTP id ef6mr24675972wjd.68.1417790271312; Fri, 05 Dec 2014 06:37:51 -0800 (PST) Received: from localhost.localdomain (5751e334.skybroadband.com. [87.81.227.52]) by mx.google.com with ESMTPSA id wb9sm2507533wic.20.2014.12.05.06.37.50 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 05 Dec 2014 06:37:50 -0800 (PST) From: Cristian Morales Vega To: nbd@openwrt.org Date: Fri, 5 Dec 2014 14:36:32 +0000 Message-Id: <1417790192-3760-1-git-send-email-cristian@samknows.com> X-Mailer: git-send-email 1.9.3 Cc: openwrt-devel@lists.openwrt.org Subject: [OpenWrt-Devel] [PATCH] ar8216: Use IGMP Join and Fast Leave functions X-BeenThere: openwrt-devel@lists.openwrt.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: OpenWrt Development List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: openwrt-devel-bounces@lists.openwrt.org Sender: "openwrt-devel" Avoids flooding the network with multicast data. Signed-off-by: Cristian Morales Vega --- Since I guess not all the switches support this... Good idea? Is some OpenWRT package expecting to receive the multicast packages? At the very least you lose the capacity of using iptables to play with the packets. target/linux/generic/files/drivers/net/phy/ar8216.c | 13 ++++++++++++- target/linux/generic/files/drivers/net/phy/ar8216.h | 11 +++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/target/linux/generic/files/drivers/net/phy/ar8216.c b/target/linux/generic/files/drivers/net/phy/ar8216.c index 558b9f7..6583d8d 100644 --- a/target/linux/generic/files/drivers/net/phy/ar8216.c +++ b/target/linux/generic/files/drivers/net/phy/ar8216.c @@ -1690,7 +1690,6 @@ ar8327_init_globals(struct ar8xxx_priv *priv) /* forward multicast and broadcast frames to CPU */ t = (AR8327_PORTS_ALL << AR8327_FWD_CTRL1_UC_FLOOD_S) | - (AR8327_PORTS_ALL << AR8327_FWD_CTRL1_MC_FLOOD_S) | (AR8327_PORTS_ALL << AR8327_FWD_CTRL1_BC_FLOOD_S); priv->write(priv, AR8327_REG_FWD_CTRL1, t); @@ -1710,6 +1709,18 @@ ar8327_init_globals(struct ar8xxx_priv *priv) AR8327_EEE_CTRL_DISABLE_PHY(3) | AR8327_EEE_CTRL_DISABLE_PHY(4); priv->write(priv, AR8327_REG_EEE_CTRL, t); + + /* Enable IGMP Join/Leave */ + t = AR8327_IGMP_JOIN_LEAVE0 | + AR8327_IGMP_JOIN_LEAVE1 | + AR8327_IGMP_JOIN_LEAVE2 | + AR8327_IGMP_JOIN_LEAVE3; + priv->write(priv, AR8327_REG_FRAM_ACK_CTRL0, t); + t = AR8327_IGMP_JOIN_LEAVE4 | + AR8327_IGMP_JOIN_LEAVE5 | + AR8327_IGMP_JOIN_LEAVE6; + t |= AR8327_IGMP_V3; /* Look _also_ for IGMPv3 */ + priv->write(priv, AR8327_REG_FRAM_ACK_CTRL1, t); } static void diff --git a/target/linux/generic/files/drivers/net/phy/ar8216.h b/target/linux/generic/files/drivers/net/phy/ar8216.h index f6df7c8..871134d 100644 --- a/target/linux/generic/files/drivers/net/phy/ar8216.h +++ b/target/linux/generic/files/drivers/net/phy/ar8216.h @@ -364,6 +364,17 @@ #define AR8327_REG_EEE_CTRL 0x100 #define AR8327_EEE_CTRL_DISABLE_PHY(_i) BIT(4 + (_i) * 2) +#define AR8327_REG_FRAM_ACK_CTRL0 0x210 +#define AR8327_IGMP_JOIN_LEAVE0 BITS(1, 2) +#define AR8327_IGMP_JOIN_LEAVE1 BITS(9, 2) +#define AR8327_IGMP_JOIN_LEAVE2 BITS(17, 2) +#define AR8327_IGMP_JOIN_LEAVE3 BITS(25, 2) +#define AR8327_REG_FRAM_ACK_CTRL1 0x214 +#define AR8327_IGMP_JOIN_LEAVE4 BITS(1, 2) +#define AR8327_IGMP_JOIN_LEAVE5 BITS(9, 2) +#define AR8327_IGMP_JOIN_LEAVE6 BITS(17, 2) +#define AR8327_IGMP_V3 BIT(24) + #define AR8327_REG_PORT_VLAN0(_i) (0x420 + (_i) * 0x8) #define AR8327_PORT_VLAN0_DEF_SVID BITS(0, 12) #define AR8327_PORT_VLAN0_DEF_SVID_S 0