• Po Liu's avatar
    net: enetc: add tc flower psfp offload driver · 888ae5a3
    Po Liu authored
    This patch is to add tc flower offload for the enetc IEEE 802.1Qci(PSFP)
    function. There are four main feature parts to implement the flow
    policing and filtering for ingress flow with IEEE 802.1Qci features.
    They are stream identify(this is defined in the P802.1cb exactly but
    needed for 802.1Qci), stream filtering, stream gate and flow metering.
    Each function block includes many entries by index to assign parameters.
    So for one frame would be filtered by stream identify first, then
    flow into stream filter block by the same handle between stream identify
    and stream filtering. Then flow into stream gate control which assigned
    by the stream filtering entry. And then policing by the gate and limited
    by the max sdu in the filter block(optional). At last, policing by the
    flow metering block, index choosing at the fitering block.
    So you can see that each entry of block may link to many upper entries
    since they can be assigned same index means more streams want to share
    the same feature in the stream filtering or stream gate or flow
    metering.
    To implement such features, each stream filtered by source/destination
    mac address, some stream maybe also plus the vlan id value would be
    treated as one flow chain. This would be identified by the chain_index
    which already in the tc filter concept. Driver would maintain this chain
    and also with gate modules. The stream filter entry create by the gate
    index and flow meter(optional) entry id and also one priority value.
    Offloading only transfer the gate action and flow filtering parameters.
    Driver would create (or search same gate id and flow meter id and
     priority) one stream filter entry to set to the hardware. So stream
    filtering do not need transfer by the action offloading.
    This architecture is same with tc filter and actions relationship. tc
    filter maintain the list for each flow feature by keys. And actions
    maintain by the action list.
    
    Below showing a example commands by tc:
    > tc qdisc add dev eth0 ingress
    > ip link set eth0 address 10:00:80:00:00:00
    > tc filter add dev eth0 parent ffff: protocol ip chain 11 \
    	flower skip_sw dst_mac 10:00:80:00:00:00 \
    	action gate index 10 \
    	sched-entry open 200000000 1 8000000 \
    	sched-entry close 100000000 -1 -1
    
    Command means to set the dst_mac 10:00:80:00:00:00 to index 11 of stream
    identify module. Then setting the gate index 10 of stream gate module.
    Keep the gate open for 200ms and limit the traffic volume to 8MB in this
    sched-entry. Then direct the frames to the ingress queue 1.
    Signed-off-by: default avatarPo Liu <Po.Liu@nxp.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    888ae5a3
enetc.c 42.6 KB