From owner-svn-src-head@FreeBSD.ORG Sat Mar 1 17:06:11 2014 Return-Path: Delivered-To: svn-src-head@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 ESMTPS id 01047628; Sat, 1 Mar 2014 17:06:10 +0000 (UTC) Received: from mail-qa0-x22d.google.com (mail-qa0-x22d.google.com [IPv6:2607:f8b0:400d:c00::22d]) (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 8B5FD1AEF; Sat, 1 Mar 2014 17:06:10 +0000 (UTC) Received: by mail-qa0-f45.google.com with SMTP id hw13so1907196qab.4 for ; Sat, 01 Mar 2014 09:06:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:sender:in-reply-to:references:date:message-id:subject :from:to:content-type; bh=wznJxKKPA5MEVsJvNfIp+bqBjR80u8bP0n98A6qeBQE=; b=0zdTXnGBpKln83Oc74HyU8ie1Apz9s2ZiR67VaA1y5r3DUO989olMAKL0pPLEGxDrT EHCUc3IxCmMdxeFrFDYgVlgMveosDSEtTsXrRSuRoz/ASUulCOIhjXIQ95LERT3731l4 MPJnmp/bS0wRIN6oC5V1T7pd6DktRKD8KTiL5XATZBJO79K2PijmWiZVK9FWgJ1xvePi a82dB3z1Qoh096IB0Odav0mTdD7oQr5va83aaSfTLOHhU1N0dP1q0UmJi3ZdcNF0wa3L 1+GCqELHBsluqHFt9YJR57KbDv9TouFOU7ZfKTA/sobJLgtMglkOc1N8fdO09busAZuI GTJw== MIME-Version: 1.0 X-Received: by 10.224.11.136 with SMTP id t8mr12239715qat.26.1393693569687; Sat, 01 Mar 2014 09:06:09 -0800 (PST) Sender: adrian.chadd@gmail.com Received: by 10.224.16.10 with HTTP; Sat, 1 Mar 2014 09:06:09 -0800 (PST) In-Reply-To: <201403011004.s21A4VTM097197@svn.freebsd.org> References: <201403011004.s21A4VTM097197@svn.freebsd.org> Date: Sat, 1 Mar 2014 09:06:09 -0800 X-Google-Sender-Auth: 1cyq9Nwdhuq1igwy4WyIE8d5woQ Message-ID: Subject: Re: svn commit: r262653 - head/sys/dev/etherswitch/arswitch From: Adrian Chadd To: "src-committers@freebsd.org" , "svn-src-all@freebsd.org" , "svn-src-head@freebsd.org" Content-Type: text/plain; charset=ISO-8859-1 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.17 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 01 Mar 2014 17:06:11 -0000 ... still doesn't correctly switch traffic in all instances. I'm not sure why; I'll go do some more digging. -a On 1 March 2014 02:04, Adrian Chadd wrote: > Author: adrian > Date: Sat Mar 1 10:04:31 2014 > New Revision: 262653 > URL: http://svnweb.freebsd.org/changeset/base/262653 > > Log: > (I think!) make the AR8327 switch correctly handle traffic. > > This patch does four things: > > * it globally disables mirroring; > * it globally sets the mirroring on each port to be disabled; > * the initial port setup now programs a portmask for the port to allow > transmission (forwarding) to all other ports bar itself; > * the vlan setup path now programs the portmask for the port to > allow transmission (forwarding) to all other ports bar itself. > > Before this, I hard-coded the portmask to 0x3f which would mean all > ports (bar port 6, which currently isn't hooked up to anything.) > This means that traffic would be duplicated back out the port it > received it. I bet this wasn't .. optimal. > > In any case, this _seems_ to make DHCP from my macosx laptop > work through this access point. I'll do some further testing > to ensure it's actually working correctly on all my devices. > > Tested: > > * DB120, AR8327 switch > > Modified: > head/sys/dev/etherswitch/arswitch/arswitch_8327.c > > Modified: head/sys/dev/etherswitch/arswitch/arswitch_8327.c > ============================================================================== > --- head/sys/dev/etherswitch/arswitch/arswitch_8327.c Sat Mar 1 04:49:55 2014 (r262652) > +++ head/sys/dev/etherswitch/arswitch/arswitch_8327.c Sat Mar 1 10:04:31 2014 (r262653) > @@ -665,8 +665,19 @@ ar8327_port_init(struct arswitch_softc * > t = AR8327_PORT_VLAN1_OUT_MODE_UNTOUCH << AR8327_PORT_VLAN1_OUT_MODE_S; > arswitch_writereg(sc->sc_dev, AR8327_REG_PORT_VLAN1(port), t); > > + /* > + * This doesn't configure any ports which this port can "see". > + * bits 0-6 control which ports a frame coming into this port > + * can be sent out to. > + * > + * So by doing this, we're making it impossible to send frames out > + * to that port. > + */ > t = AR8327_PORT_LOOKUP_LEARN; > t |= AR8X16_PORT_CTRL_STATE_FORWARD << AR8327_PORT_LOOKUP_STATE_S; > + > + /* So this allows traffic to any port except ourselves */ > + t |= (0x3f & ~(1 << port)); > arswitch_writereg(sc->sc_dev, AR8327_REG_PORT_LOOKUP(port), t); > } > > @@ -695,6 +706,13 @@ ar8327_reset_vlans(struct arswitch_softc > uint32_t mode, t; > > /* > + * Disable mirroring. > + */ > + arswitch_modifyreg(sc->sc_dev, AR8327_REG_FWD_CTRL0, > + AR8327_FWD_CTRL0_MIRROR_PORT, > + (0xF << AR8327_FWD_CTRL0_MIRROR_PORT_S)); > + > + /* > * For now, let's default to one portgroup, just so traffic > * flows. All ports can see other ports. > */ > @@ -713,13 +731,25 @@ ar8327_reset_vlans(struct arswitch_softc > > /* Set ingress = out_keep; members = 0x3f for all ports */ > > - t = 0x3f; /* all ports */ > + t = (0x3f & ~(1 << i)); /* all ports besides us */ > t |= AR8327_PORT_LOOKUP_LEARN; > > /* in_port_only, forward */ > t |= AR8X16_PORT_VLAN_MODE_PORT_ONLY << AR8327_PORT_LOOKUP_IN_MODE_S; > t |= AR8X16_PORT_CTRL_STATE_FORWARD << AR8327_PORT_LOOKUP_STATE_S; > arswitch_writereg(sc->sc_dev, AR8327_REG_PORT_LOOKUP(i), t); > + > + /* > + * Disable port mirroring entirely. > + */ > + arswitch_modifyreg(sc->sc_dev, > + AR8327_REG_PORT_LOOKUP(i), > + AR8327_PORT_LOOKUP_ING_MIRROR_EN, > + 0); > + arswitch_modifyreg(sc->sc_dev, > + AR8327_REG_PORT_HOL_CTRL1(i), > + AR8327_PORT_HOL_CTRL1_EG_MIRROR_EN, > + 0); > } > } > >