From: Gregory Etelson Date: Thu, 8 Apr 2021 06:48:22 +0000 (+0300) Subject: ethdev: fix VXLAN mask initialization X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=f8e7132572ac49968e5ecf72c70402e4aad63564;p=dpdk.git ethdev: fix VXLAN mask initialization In GCC compiler, __builtin_constant_p(exp) is a function. The function returns the integer 1 if the argument is known to be a compile-time constant. Therefore, __builtin_constant_p(0xffffff << 8) returned 1. As the result, rte_flow_item_vxlan_mask was initiated to {{ {flags = 0x0, rsvd0 = {0x0, 0x0, 0x0}, vni = {0x0, 0x0, 0x0}, rsvd1 = 0x1}, hdr = {vx_flags = 0x0, vx_vni = 0x1000000}}} }} GCC fails initialization rte_flow_item_vxlan_mask.hdr.vni = (0xffffff << 8) with "initializer element is not a constant expression" error. Use immediate 0xffffff00 value instead. Fixes: 43af98e687cf ("ethdev: reuse VXLAN header definition in flow item") Signed-off-by: Gregory Etelson Acked-by: Viacheslav Ovsiienko Reviewed-by: Ferruh Yigit Reviewed-by: Ivan Malov --- diff --git a/lib/librte_ethdev/rte_flow.h b/lib/librte_ethdev/rte_flow.h index 6cc57136ac..c476a0f59d 100644 --- a/lib/librte_ethdev/rte_flow.h +++ b/lib/librte_ethdev/rte_flow.h @@ -976,7 +976,7 @@ struct rte_flow_item_vxlan { /** Default mask for RTE_FLOW_ITEM_TYPE_VXLAN. */ #ifndef __cplusplus static const struct rte_flow_item_vxlan rte_flow_item_vxlan_mask = { - .hdr.vx_vni = RTE_BE32(__builtin_constant_p(0xffffff << 8)), + .hdr.vx_vni = RTE_BE32(0xffffff00), /* (0xffffff << 8) */ }; #endif