On 4/16/2019 11:02 AM, Ferruh Yigit wrote: > On 4/16/2019 10:59 AM, Ferruh Yigit wrote: >> On 3/25/2019 1:30 PM, Ferruh Yigit wrote: >>> On 3/25/2019 1:01 PM, Saleh Alsouqi wrote: >>>> According to ietf rfc791 (see [1]) >>>> >>>> "The Version field indicates the format of the >>>> internet header." >>>> >>>> "Internet Header Length (ihl) is the length of the >>>> internet header in 32 bit words, and thus points >>>> to the beginning of the data. Note that >>>> the minimum value for a correct header is 5." >>>> >>>> Having version and ihl set to 0 would result in a >>>> corrupted/incorrect encapsulating packet for MPLS, >>>> this commit sets these fields to 4 and 5 respectively >>>> as a default value. >>>> >>>> [1] https://tools.ietf.org/html/rfc791 >>>> >>>> Fixes: 3e77031be855 ("app/testpmd: add MPLSoGRE encapsulation") >>>> Fixes: a1191d39cb57 ("app/testpmd: add MPLSoUDP encapsulation") >>>> Cc: sta...@dpdk.org >>>> >>>> Signed-off-by: Saleh Alsouqi <saleh...@mellanox.com> >>>> --- >>>> v2: >>>> - Include netinet/ip.h in librte_net/rte_ip.h >>>> to use existing definitions instead of defining >>>> our own. >>>> >>>> - Move definitions from testpmd.h to librte_net/rte_ip.h >>>> --- >>>> app/test-pmd/cmdline_flow.c | 6 ++++++ >>>> lib/librte_net/rte_ip.h | 5 +++++ >>>> 2 files changed, 11 insertions(+) >>>> >>>> diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c >>>> index 36659a64a..f536307c9 100644 >>>> --- a/app/test-pmd/cmdline_flow.c >>>> +++ b/app/test-pmd/cmdline_flow.c >>>> @@ -3767,11 +3767,14 @@ parse_vc_action_mplsogre_encap(struct context >>>> *ctx, const struct token *token, >>>> .src_addr = mplsogre_encap_conf.ipv4_src, >>>> .dst_addr = mplsogre_encap_conf.ipv4_dst, >>>> .next_proto_id = IPPROTO_GRE, >>>> + .version_ihl = IPV4_VHL_DEF, >>>> + .time_to_live = IPDEFTTL, >>>> }, >>>> }; >>>> struct rte_flow_item_ipv6 ipv6 = { >>>> .hdr = { >>>> .proto = IPPROTO_GRE, >>>> + .hop_limits = IPDEFTTL, >>>> }, >>>> }; >>>> struct rte_flow_item_gre gre = { >>>> @@ -3955,11 +3958,14 @@ parse_vc_action_mplsoudp_encap(struct context >>>> *ctx, const struct token *token, >>>> .src_addr = mplsoudp_encap_conf.ipv4_src, >>>> .dst_addr = mplsoudp_encap_conf.ipv4_dst, >>>> .next_proto_id = IPPROTO_UDP, >>>> + .version_ihl = IPV4_VHL_DEF, >>>> + .time_to_live = IPDEFTTL, >>>> }, >>>> }; >>>> struct rte_flow_item_ipv6 ipv6 = { >>>> .hdr = { >>>> .proto = IPPROTO_UDP, >>>> + .hop_limits = IPDEFTTL, >>>> }, >>>> }; >>>> struct rte_flow_item_udp udp = { >>>> diff --git a/lib/librte_net/rte_ip.h b/lib/librte_net/rte_ip.h >>>> index f9b909090..499a2f79c 100644 >>>> --- a/lib/librte_net/rte_ip.h >>>> +++ b/lib/librte_net/rte_ip.h >>>> @@ -17,6 +17,7 @@ >>>> >>>> #include <stdint.h> >>>> #include <netinet/in.h> >>>> +#include <netinet/ip.h> >>>> >>>> #include <rte_byteorder.h> >>>> #include <rte_mbuf.h> >>>> @@ -89,6 +90,10 @@ struct ipv4_hdr { >>>> #define IS_IPV4_MCAST(x) \ >>>> ((x) >= IPV4_MIN_MCAST && (x) <= IPV4_MAX_MCAST) /**< check if IPv4 >>>> address is multicast */ >>>> >>>> +/* IPv4 default fields values */ >>>> +#define IPV4_MIN_IHL (0x5) >>>> +#define IPV4_VHL_DEF (IPVERSION | IPV4_MIN_IHL) >>> >>> There are existing defines for this [1], since we have one in public >>> header, can >>> you please replace them too, >>> perhaps in two patches, first one introduces this define and replaces old >>> ones, >>> second one fixes the mpls issue? >>> >>> [1] >>> $ git grep VHL | grep define >>> app/test-pmd/csumonly.c:#define IP_VHL_DEF (IP_VERSION | IP_HDRLEN) >>> app/test-pmd/flowgen.c:#define IP_VHL_DEF (IP_VERSION | IP_HDRLEN) >>> app/test-pmd/txonly.c:#define IP_VHL_DEF (IP_VERSION | IP_HDRLEN) >>> app/test/packet_burst_generator.c:#define IP_VHL_DEF (IP_VERSION | >>> IP_HDRLEN) >>> examples/tep_termination/vxlan_setup.c:#define IP_VHL_DEF (IP_VERSION | >>> IP_HDRLEN) >> >> Let me get this as it is, and I will send another patch to update existing >> defines. >> >> Reviewed-by: Ferruh Yigit <ferruh.yi...@intel.com> >> > > Ahh, this seems causing build errors in FreeBSD: > http://mails.dpdk.org/archives/test-report/2019-March/077811.html > It seems it is easy to fix the BSD with following change: +#include <sys/types.h>
And now with the recent changes DPDK define should have RTE_ prefix, so new defines "IPV4_MIN_IHL" && "IPV4_VHL_DEF" should have RTE_ prefix. Can you able to send a new version with these changes, please let us know if you can't, perhaps we take care of this since changes looks trivial.