On Mon, Apr 02, 2018 at 12:17:19PM -0400, Murali Karicheri wrote: > +static int gbe_set_rx_mode(void *intf_priv, bool promisc) > +{ > + struct gbe_intf *gbe_intf = intf_priv; > + struct gbe_priv *gbe_dev = gbe_intf->gbe_dev; > + struct cpsw_ale *ale = gbe_dev->ale; > + unsigned long timeout; > + int i, ret = -ETIMEDOUT; > + > + /* Disable(1)/Enable(0) Learn for all ports (host is port 0 and > + * slaves are port 1 and up > + */ > + for (i = 0; i <= gbe_dev->num_slaves; i++) { > + cpsw_ale_control_set(ale, i, > + ALE_PORT_NOLEARN, !!promisc); > + cpsw_ale_control_set(ale, i, > + ALE_PORT_NO_SA_UPDATE, !!promisc); > + }
Hi Murali Does this mean that in promisc mode, switching of frames between ports in hardware is disabled? You are relying on the software bridge to perform such bridging between ports? You might want to look at skb->offload_fwd_mark. By setting this, you can tell the software bridge the hardware has already bridged the frame. You might then be able to have promisc enabled, and the hardware still doing the forwarding. Andrew