flow: add generic flow pattern for 5G flow enhancement 02/34802/11
authorTing Xu <ting.xu@intel.com>
Thu, 16 Sep 2021 08:37:25 +0000 (08:37 +0000)
committerDamjan Marion <dmarion@me.com>
Tue, 15 Mar 2022 16:15:19 +0000 (16:15 +0000)
commit3a3668201734fddb614cba025fafc4578ddf5482
treec8dddf2ac1a050825eb8a00804a9fa4170e2a0e0
parent218e4ec5302a88d4400cc3b0897310f4d59675be
flow: add generic flow pattern for 5G flow enhancement

In order to support the requirement of RSS and packet steering of new
protocols, such as GTPU PDU-type and QFI, for 5G UPF, a generic pattern
is introduced in vnet flow. The generic flow pattern is based on DDP
(Dynamic Device Personalization) function and Parser Library module in
DPDK. Using generic flow pattern, we do not need to create new packet
and field type and offset in API parser for every new protocols. We can
create flows for any protocol immediately as long as supported by DDP.
The generic flow can be used to support 5G related protocols in
different scenarios.

The input of this generic pattern are two binary strings for spec and
mask. Spec is the binary presentation of the target packet type, and
mask is used to mark the target fields.

In this patch DPDK plugins is enabled for POC. Next step we will enable
generic flow in native IAVF, which is the main target.

Here is an example. If we want to create a flow for GTPU QFI,
spec is:
00000000000100000000000208004500003C00000000001100000101010102020202000
008680028000034FF001C00000000000000850100010045000014000000000000000001
01010102020202
mask is:
00000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000007F0000000000000000000000000000
00000000000000

A naming API POC is created via VAPI to help create the rule with
the target packet format similar to Scapy. It is based on a function
module called PacketForge. In this way, the user no need to create
binary string spec and mask by themselves.

Type: feature

Signed-off-by: Ting Xu <ting.xu@intel.com>
Change-Id: Id3444f95c158bdcdfeeee19d795cd9ecbeeec07c
src/plugins/dpdk/device/flow.c
src/vnet/flow/flow.h
src/vnet/flow/flow_cli.c