What can I help you with?
NVIDIA DPDK Documentation MLNX_DPDK_22.11_2310.5.1 LTS

Matching GRE Checksum/Key/Sequence

GRE optional fields (checksum, key and sequence) can be matched now using the new gre_option item. The new item requires a GRE item such as gre_key, and its pattern must correspond with the c_bit/k_bit/s_bit in the GRE pattern.

To match on checksum field with value 0x11 to queue 1:

Copy
Copied!
            

testpmd> flow create 0 ingress pattern eth / ipv4 / gre c_bit is 1 / gre_option checksum is 0x11 / end actions queue index 1 / end

To encap packets with GRE header:

Copy
Copied!
            

testpmd> set raw_decap 1 eth / end_set testpmd> set raw_encap 1 eth src is FA:16:3E:01:02:43 dst is FA:16:3E:01:01:42 / ipv4 src is 10.10.10.10 dst is 20.20.20.20 / gre c_bit is 1 / gre_option checksum is 300 / end_set testpmd> flow create 1 group 0 ingress transfer pattern eth / ipv4 src is 1.1.1.1 / port_id id is 1 / end actions raw_decap index 1 / raw_encap index 1 / port_id id 0 / end

To decap GRE header:

Copy
Copied!
            

testpmd> set raw_decap 0 eth / ipv4 / gre / gre_option / end_set testpmd> set raw_encap 0 eth src is 10:22:33:44:55:60 dst is a0:bb:cc:dd:ee:f2 testpmd> type is 0x0800 / end_set testpmd> flow create 0 ingress group 0 transfer pattern eth / ipv4 / gre c_bit is 1 / gre_option checksum is 300 / ipv4 src is 1.1.1.1 / end actions raw_decap index 0 / raw_encap index 0 / port_id id 1 / end

Copy
Copied!
            

struct rte_flow_attr attr; struct rte_flow_error error; struct rte_flow_item pattern[MAX_PATTERN_NUM]; struct rte_flow_action action[MAX_ACTION_NUM]; struct rte_flow_action_queue queue = { .index = 1 };   memset(&attr, 0, sizeof(struct rte_flow_attr));   attr.ingress = 1; attr.group = 1; attr.priority = 1;   struct rte_flow_item_gre gre_spec = {        .c_rsvd0_ver = RTE_BE16(0x8000), };   struct rte_flow_item_gre_opt gre_opt_spec = {        . checksum_rsvd = {                .checksum = RTE_BE16(0x11),        } };   pattern[0].type = RTE_FLOW_ITEM_TYPE_ETH; pattern[1].type = RTE_FLOW_ITEM_TYPE_IPV4; pattern[2].type = RTE_FLOW_ITEM_TYPE_GRE; pattern[2].spec = &gre_spec; pattern[3].type = RTE_FLOW_ITEM_TYPE_GRE_OPTION; pattern[3].spec = &gre_opt_spec; pattern[4].type = RTE_FLOW_ITEM_TYPE_END;   action[0].type = RTE_FLOW_ACTION_TYPE_QUEUE; action[0].conf = &queue; action[1].type = RTE_FLOW_ACTION_TYPE_END;   res = rte_flow_validate(port_id, &attr, pattern, action, &error); if (!res)      flow = rte_flow_create(port_id, &attr, pattern, action, &error); return flow;

© Copyright 2024, NVIDIA. Last updated on Jan 9, 2025.