RE: [PATCH v3 net-next 5/8] net: dsa: felix: support psfp filter on vsc9959

Xiaoliang Yang
2021-08-31T08:41:41Z

Hi Vladimir,

On Tue, Aug 31, 2021 at 15:55:26AM +0800, Vladimir Oltean wrote:
> > +static int vsc9959_mact_stream_set(struct ocelot *ocelot,
> > + struct felix_stream *stream,
> > + struct netlink_ext_ack *extack) {
> > + struct ocelot_mact_entry entry;
> > + u32 row, col, reg, dst_idx;
> > + int ret;
> > +
> > + /* Stream identification desn't support to add a stream with non
> > + * existent MAC (The MAC entry has not been learned in MAC table).
> > + */
>
> Who will add the MAC entry to the MAC table in this design? The user?

Yes, The MAC entry is always learned by hardware, user also can add it by using "bridge fdb add".

>
> > + ret = ocelot_mact_lookup(ocelot, stream->dmac, stream->vid, &row,
> &col);
> > + if (ret) {
> > + if (extack)
> > + NL_SET_ERR_MSG_MOD(extack, "Stream is not learned in MAC
> table");
> > + return -EOPNOTSUPP;
> > + }
> > +
> > + ocelot_rmw(ocelot,
> > + (stream->sfid_valid ? ANA_TABLES_STREAMDATA_SFID_VALID : 0)
> |
> > + ANA_TABLES_STREAMDATA_SFID(stream->sfid),
> > + ANA_TABLES_STREAMDATA_SFID_VALID |
> > + ANA_TABLES_STREAMDATA_SFID_M,
> > + ANA_TABLES_STREAMDATA);
> > +
> > + reg = ocelot_read(ocelot, ANA_TABLES_STREAMDATA);
> > + reg &= (ANA_TABLES_STREAMDATA_SFID_VALID |
> ANA_TABLES_STREAMDATA_SSID_VALID);
> > + entry.type = (reg ? ENTRYTYPE_LOCKED : ENTRYTYPE_NORMAL);
>
> So if the STREAMDATA entry for this SFID was valid, you mark the MAC table
> entry as static, otherwise you mark it as ageable? Why?

If the MAC entry is learned by hardware, it's marked as ageable. When setting the PSFP filter on this stream, it needs to be set to static. For example, if the MAC table entry is not set to static, when link is down for a period of time, the MAC entry will be forgotten, and SFID information will be lost.
After disable PSFP filter on the stream, there is no need to keep the MAC entry static, setting the type back to ageable can cope with network topology changes.