Date: Sat, 1 Mar 2014 02:09:01 -0800 From: Adrian Chadd <adrian@freebsd.org> To: "src-committers@freebsd.org" <src-committers@freebsd.org>, "svn-src-all@freebsd.org" <svn-src-all@freebsd.org>, "svn-src-head@freebsd.org" <svn-src-head@freebsd.org> Subject: Re: svn commit: r262653 - head/sys/dev/etherswitch/arswitch Message-ID: <CAJ-VmomAw1sv3ffBeK29pToymxekMyzCc%2BenXEpxe=yZXZhovw@mail.gmail.com> In-Reply-To: <201403011004.s21A4VTM097197@svn.freebsd.org> References: <201403011004.s21A4VTM097197@svn.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
Source: OpenWRT; much reading of the AR8327 datasheet. -a On 1 March 2014 02:04, Adrian Chadd <adrian@freebsd.org> 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); > } > } > >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAJ-VmomAw1sv3ffBeK29pToymxekMyzCc%2BenXEpxe=yZXZhovw>