[dpdk-dev] [PATCH v3 11/14] net/mlx5: support MPLS-in-GRE and MPLS-in-UDP

Nélio Laranjeiro nelio.laranjeiro at 6wind.com
Mon Apr 16 10:14:04 CEST 2018


On Fri, Apr 13, 2018 at 03:22:50PM +0000, Xueming(Steven) Li wrote:
>[...] 
> > @@
> > > > static
> > > > > const struct mlx5_flow_items mlx5_flow_items[] = {
> > > > >  		.convert = mlx5_flow_create_vxlan_gpe,
> > > > >  		.dst_sz = sizeof(struct ibv_flow_spec_tunnel),
> > > > >  	},
> > > > > +	[RTE_FLOW_ITEM_TYPE_MPLS] = {
> > > > > +		.items = ITEMS(RTE_FLOW_ITEM_TYPE_ETH,
> > > > > +			       RTE_FLOW_ITEM_TYPE_IPV4,
> > > > > +			       RTE_FLOW_ITEM_TYPE_IPV6),
> > > > > +		.actions = valid_actions,
> > > > > +		.mask = &(const struct rte_flow_item_mpls){
> > > > > +			.label_tc_s = "\xff\xff\xf0",
> > > > > +		},
> > > > > +		.default_mask = &rte_flow_item_mpls_mask,
> > > > > +		.mask_sz = sizeof(struct rte_flow_item_mpls),
> > > > > +		.convert = mlx5_flow_create_mpls, #ifdef
> > > > > +HAVE_IBV_DEVICE_MPLS_SUPPORT
> > > > > +		.dst_sz = sizeof(struct ibv_flow_spec_mpls), #endif
> > > > > +	},
> > > >
> > > > Why the whole item is not under ifdef?
> > >
> > > If apply macro to whole item, there will be a null pointer if create
> > mpls flow.
> > > There is a macro in function mlx5_flow_create_mpls() to avoid using this
> > invalid data.
> > 
> > I think there is some kind of confusion here, what I mean is moving the
> > #ifdef to embrace the whole stuff i.e.:
> > 
> >  #ifdef HAVE_IBV_DEVICE_MPLS_SUPPORT
> >  [RTE_FLOW_ITEM_TYPE_MPLS] = {
> >   .items = ITEMS(RTE_FLOW_ITEM_TYPE_ETH,
> >   	       RTE_FLOW_ITEM_TYPE_IPV4,
> >   	       RTE_FLOW_ITEM_TYPE_IPV6),
> >   .actions = valid_actions,
> >   .mask = &(const struct rte_flow_item_mpls){
> >   	.label_tc_s = "\xff\xff\xf0",
> >   },
> >   .default_mask = &rte_flow_item_mpls_mask,
> >   .mask_sz = sizeof(struct rte_flow_item_mpls),
> >   .convert = mlx5_flow_create_mpls,
> >   .dst_sz = sizeof(struct ibv_flow_spec_mpls)  #endif
> > 
> > Not having this item in this static array ends by not supporting it, this
> > is what I mean.
> 
> Yes, I know. There is a code using this array w/o NULL check:
> 		cur_item = &mlx5_flow_items[items->type];
> 		ret = cur_item->convert(items,
> 					(cur_item->default_mask ?
> 					 cur_item->default_mask :
> 					 cur_item->mask),
> 					 &data);
> 
> 

This code is after the mlx5_flow_convert_items_validate() which refuses
unknown items, if you you see an unknown item reaching this code above,
there is bug somewhere and it should be fixed.  Un-supported items
should not be in the static array.  

Regards,

-- 
Nélio Laranjeiro
6WIND


More information about the dev mailing list