GTP encapsulation with DOCA Flow and BF3: GTP header message length is 0

Hello,
I’m trying to test GTP encapsulation with DOCA Flow 2.7 on a Bluefield-3 DPU.
I’ve adapted the Flow VXLAN sample program as detailed below.
When injecting IPv4/UDP packets, outgoing packets are correctly GTP encapped (teid ok) but with one big problem: the message length of the GTP header is 0 !
Any explanation/help is welcome.

My configuration:
DOCA 2.7 (bf-bundle-2.7.0-33_24.04_ubuntu-22.04_prod)
Bluefield-3 B3220 (900-9D3B6-00CV-AA0)
driver: mlx5_core
version: 24.04-0.6.6
firmware-version: 32.40.1000 (MT_0000000884)
FLEX_PARSER_PROFILE_ENABLE : 3

Test program uses physical ports with hardware steering:
doca_flow_gtpu_encap -a 03:00.0,dv_flow_en=2 -a 03:00.1,dv_flow_en=2

Main changes to flex_vxlan_encap_sample.c:

/* build basic outer GTPU encap data*/
	actions.encap_type = DOCA_FLOW_RESOURCE_TYPE_NON_SHARED;
	actions.encap_cfg.is_l2 = false;
	SET_MAC_ADDR(actions.encap_cfg.encap.outer.eth.src_mac, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff);
	SET_MAC_ADDR(actions.encap_cfg.encap.outer.eth.dst_mac, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff);
	actions.encap_cfg.encap.outer.l3_type = DOCA_FLOW_L3_TYPE_IP4;
	actions.encap_cfg.encap.outer.ip4.src_ip = 0xffffffff;
	actions.encap_cfg.encap.outer.ip4.dst_ip = 0xffffffff;
	actions.encap_cfg.encap.outer.ip4.ttl = 0xff;
	actions.encap_cfg.encap.outer.ip4.flags_fragment_offset = 0xffff;
	actions.encap_cfg.encap.outer.l4_type_ext = DOCA_FLOW_L4_TYPE_EXT_UDP;
	actions.encap_cfg.encap.outer.udp.l4_port.dst_port = RTE_BE16(DOCA_FLOW_GTPU_DEFAULT_PORT);
	actions.encap_cfg.encap.tun.type = DOCA_FLOW_TUN_GTPU;
	actions.encap_cfg.encap.tun.gtp_teid = 0xffffffff;
	actions_arr[0] = &actions;
actions.encap_cfg.encap.outer.l3_type = DOCA_FLOW_L3_TYPE_IP4;
	actions.encap_cfg.encap.outer.ip4.src_ip = encap_src_ip_addr;
	actions.encap_cfg.encap.outer.ip4.dst_ip = encap_dst_ip_addr;
	actions.encap_cfg.encap.outer.ip4.flags_fragment_offset = encap_flags_fragment_offset;
	actions.encap_cfg.encap.outer.ip4.ttl = encap_ttl;
	actions.encap_cfg.encap.tun.type = DOCA_FLOW_TUN_GTPU;
	actions.encap_cfg.encap.tun.gtp_teid = encap_gtpu_tun_id;
	actions.action_idx = 0;

You can use dpdk-pdump & mirror rules dump package to debug.

FYI I solved the problem by upgrading the firmware of my Bluefield 3 :
firmware-version: 32.41.1000 (MT_0000000884)
No change to DOCA flow program. Now GTP headers added by encapsulation action contain a correct message length.

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.