Subject: [v1,net-next 0/5] Introduce a flow gate control action and apply IEEE

From: Po Liu <[email-masked]>
Date: Tue, 24 Mar 2020 11:47:38 +0800

Changes from RFC:
0000: Reduce to 5 patches and remove the 4 max frame size offload and
flow metering in the policing offload action, Only keep gate action
offloading implementation.
0001: No changes.
0002: 
 - fix kfree lead ack by Jakub Kicinski and Cong Wang
 - License fix from Jakub Kicinski and Stephen Hemminger
 - Update example in commit acked by Vinicius Costa Gomes
 - Fix the rcu protect in tcf_gate_act() acked by Vinicius

0003: No changes
0004: No changes
0005:
 Acked by Vinicius Costa Gomes
 - Use refcount kernel lib
 - Update stream gate check code position
 - Update reduce ref names more clear

iprout2 command patches:
0000: Update license expression and add gate id
0001: Add tc action gate man page

This patch set is trying to intruduce a way to add tc flower offload
for the enetc IEEE 802.1Qci (PSFP) function. There are four main feature
parts in PSFP 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 by 802.1Qci), stream filtering, stream
gate and flow metering.

The stream gate function is the important part in the features. But
there is no compare actions in the qdisc filter part. The second patch
introduce a ingress frame gate control flow action. tc create a gate
action would provide a gate list to control class open/close state. when
the gate open state, the flow could pass but not when gate state is
close. The driver would repeat the gate list periodic. User also could
assign a time point to start the gate list by the basetime parameter. if
the basetime has passed current time, start time would calculate by the
cycletime of the gate list. And it is introduce a software simulator
gate control method.

The first patch is fix a flow offload can't provide dropped frame count
number issue. This would be used for getting the hardware offload dropped
frame.

The third patch is to adding the gate flow offloading.

The fourth patch is to add tc offload command in enetc. This is to
control the on/off for the tc flower offloading.

Now the enetc driver would got the gate control list and filter mac
address etc. So enetc would collected the parameters and create the
stream identify entry and stream gate control entry. Then driver would
create a stream filter entry by these inputs. Driver would maintain the
flow chain list. The fifth patch implement the stream gate and stream
filter and stream identify functions in driver by the tc flower actions
and tc filter parameters.

The iproute2 test patch need to upload to:

git://git.kernel.org/pub/scm/network/iproute2/iproute2-next.git

Po Liu (5):
  net: qos offload add flow status with dropped count
  net: qos: introduce a gate control flow action
  net: schedule: add action gate offloading
  net: enetc: add hw tc hw offload features for PSPF capability
  net: enetc: add tc flower psfp offload driver

 drivers/net/ethernet/broadcom/bnxt/bnxt_tc.c  |    2 +-
 .../ethernet/chelsio/cxgb4/cxgb4_tc_flower.c  |    2 +-
 .../chelsio/cxgb4/cxgb4_tc_matchall.c         |    2 +-
 drivers/net/ethernet/freescale/enetc/enetc.c  |   34 +-
 drivers/net/ethernet/freescale/enetc/enetc.h  |   86 ++
 .../net/ethernet/freescale/enetc/enetc_hw.h   |  159 +++
 .../net/ethernet/freescale/enetc/enetc_pf.c   |    6 +
 .../net/ethernet/freescale/enetc/enetc_qos.c  | 1074 +++++++++++++++++
 .../net/ethernet/mellanox/mlx5/core/en_tc.c   |    4 +-
 .../ethernet/mellanox/mlxsw/spectrum_flower.c |    2 +-
 drivers/net/ethernet/mscc/ocelot_flower.c     |    2 +-
 .../ethernet/netronome/nfp/flower/offload.c   |    2 +-
 .../ethernet/netronome/nfp/flower/qos_conf.c  |    2 +-
 include/net/act_api.h                         |   11 +-
 include/net/flow_offload.h                    |   15 +-
 include/net/pkt_cls.h                         |    5 +-
 include/net/tc_act/tc_gate.h                  |  169 +++
 include/uapi/linux/pkt_cls.h                  |    1 +
 include/uapi/linux/tc_act/tc_gate.h           |   47 +
 net/sched/Kconfig                             |   15 +
 net/sched/Makefile                            |    1 +
 net/sched/act_api.c                           |   12 +-
 net/sched/act_ct.c                            |    6 +-
 net/sched/act_gact.c                          |    7 +-
 net/sched/act_gate.c                          |  647 ++++++++++
 net/sched/act_mirred.c                        |    6 +-
 net/sched/act_police.c                        |    6 +-
 net/sched/act_vlan.c                          |    6 +-
 net/sched/cls_api.c                           |   33 +
 net/sched/cls_flower.c                        |    3 +-
 net/sched/cls_matchall.c                      |    3 +-
 31 files changed, 2329 insertions(+), 41 deletions(-)
 create mode 100644 include/net/tc_act/tc_gate.h
 create mode 100644 include/uapi/linux/tc_act/tc_gate.h
 create mode 100644 net/sched/act_gate.c

-- 
2.17.1