Commits
Vignesh Raghavendra committed 52bbd505f31
net: ti: prueth_core: Add Broadcast, Multicast and Unicast storm prevention support Prueth firmware on AM57xx, AM43xx and AM33xx supports credit based broadcast, multicast and unicast storm prevention counter. There are separate counters provided for each of them. Driver writes number of packets allowed in a 100ms interval. When firmware encounters packet of a given type, it decrements the value by 1 and when the counter reaches 0, further packets are dropped. So, add a way to set limit on number of broadcast, multicast and unicast packets (L2 level) using the counters supported by firmware. This is done by implementing offloading of tc-flower policer in ndo_setup_tc() callback. tc filter sets rate limit in terms of bits per second but firmware supports limiting in terms of credits where each credit is equal to one ethernet packet. Therefore, driver converts bits per second limit to number of packets per second assuming minimum ethernet frame size for each packet (Using min frame size allows much granular packets per second setting) There is a periodic hrtimer task that runs every 100ms refreshing available credits. For simplicity credits are divided equally for each 100ms interval. Based on https://lore.kernel.org/patchwork/patch/1217254/ Example for adding different filters: Broadcast (dst mac is all 0xffs): tc qdisc add dev eth2 clsact tc filter add dev eth2 ingress flower skip_sw dst_mac ff:ff:ff:ff:ff:ff action police rate 10kbit burst 64k Multicast (dst mac addr has first bit set, below is just an example): tc qdisc add dev eth2 clsact tc filter add dev eth2 ingress flower skip_sw dst_mac 01:00:00:00:00:00 action police rate 10kbit burst 64k Unicast (dst mac addr where first bit is not set, below is just an example): tc qdisc add dev eth2 clsact tc filter add dev eth2 ingress flower skip_sw dst_mac 34:10:31:12:11:45 action police rate 10kbit burst 64k Note that the unicast filter applies to all ingress traffic irrespective of src mac. Also note that the dst_mac specified in above rule need not be same as port's mac address. Any non multicast, non broadcast mac address will end up setting the unicast filter. Signed-off-by: Vignesh Raghavendra <vigneshr@ti.com> Reviewed-by: Roger Quadros <rogerq@ti.com> Reviewed-by: Grygorii Strashko <grygorii.strashko@ti.com>