Hi Wei,
> -----Original Message----- > From: Zhao1, Wei > Sent: Tuesday, June 5, 2018 5:12 PM > To: dev@dpdk.org > Cc: Lu, Wenzhuo <wenzhuo...@intel.com>; sta...@dpdk.org; Zhao1, Wei > <wei.zh...@intel.com> > Subject: [PATCH] net/ixgbe: fix tunnel id format error for FDIR > > In cloud mode for FDIR, tunnel id should be set as protocol request, the > lower 8 bits should be set as reserved. To my opinion, the original implementation and this patch have different understanding of the 'tunnel_id' in ' struct rte_eth_tunnel_flow'. Originally it only means the tunnel id but not including the reserved 8 bits. This patch means it should include the reserved bits. Maybe it makes things easier because the whole 4 bytes are big endian. So, may I suggest to add some comments in ' struct rte_eth_tunnel_flow' to let the users know what the 'tunnel_id' really means? > > Fixes: 82fb702077f6 ("ixgbe: support new flow director modes for X550") > Fixes: 11777435c727 ("net/ixgbe: parse flow director filter") > > Signed-off-by: Wei Zhao <wei.zh...@intel.com> > --- > drivers/net/ixgbe/ixgbe_fdir.c | 2 +- > drivers/net/ixgbe/ixgbe_flow.c | 5 ++--- > 2 files changed, 3 insertions(+), 4 deletions(-) > > diff --git a/drivers/net/ixgbe/ixgbe_fdir.c b/drivers/net/ixgbe/ixgbe_fdir.c > index d5e5179..67ab627 100644 > --- a/drivers/net/ixgbe/ixgbe_fdir.c > +++ b/drivers/net/ixgbe/ixgbe_fdir.c > @@ -774,7 +774,7 @@ ixgbe_fdir_filter_to_atr_input(const struct > rte_eth_fdir_filter *fdir_filter, > input->formatted.tunnel_type = > fdir_filter->input.flow.tunnel_flow.tunnel_type; > input->formatted.tni_vni = > - fdir_filter->input.flow.tunnel_flow.tunnel_id; > + fdir_filter->input.flow.tunnel_flow.tunnel_id >> 8; > } > > return 0; > diff --git a/drivers/net/ixgbe/ixgbe_flow.c b/drivers/net/ixgbe/ixgbe_flow.c > index eb0644c..64af777 100644 > --- a/drivers/net/ixgbe/ixgbe_flow.c > +++ b/drivers/net/ixgbe/ixgbe_flow.c > @@ -2489,8 +2489,7 @@ ixgbe_parse_fdir_filter_tunnel(const struct > rte_flow_attr *attr, > rte_memcpy(((uint8_t *) > &rule->ixgbe_fdir.formatted.tni_vni + 1), > vxlan_spec->vni, RTE_DIM(vxlan_spec->vni)); > - rule->ixgbe_fdir.formatted.tni_vni = > rte_be_to_cpu_32( > - rule->ixgbe_fdir.formatted.tni_vni); > + rule->ixgbe_fdir.formatted.tni_vni >>= 8; > } > } > > @@ -2587,7 +2586,7 @@ ixgbe_parse_fdir_filter_tunnel(const struct > rte_flow_attr *attr, > /* tni is a 24-bits bit field */ > rte_memcpy(&rule->ixgbe_fdir.formatted.tni_vni, > nvgre_spec->tni, RTE_DIM(nvgre_spec->tni)); > - rule->ixgbe_fdir.formatted.tni_vni <<= 8; > + rule->ixgbe_fdir.formatted.tni_vni >>= 8; > } > } > > -- > 2.7.5