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;