[dpdk-dev] [PATCH 14/14] net/mlx5: add source vport match to the ingress rules

Slava Ovsiienko viacheslavo at mellanox.com
Mon Mar 25 08:44:09 CET 2019


> -----Original Message-----
> From: Shahaf Shuler
> Sent: Sunday, March 24, 2019 11:14
> To: Slava Ovsiienko <viacheslavo at mellanox.com>; dev at dpdk.org
> Subject: RE: [PATCH 14/14] net/mlx5: add source vport match to the ingress
> rules
> 
> Thursday, March 21, 2019 4:12 PM, Slava Ovsiienko:
> > Subject: RE: [PATCH 14/14] net/mlx5: add source vport match to the
> > ingress rules
> > > >
> > > > Signed-off-by: Viacheslav Ovsiienko <viacheslavo at mellanox.com>
> 
> [...]
> 
> > > > +		flow_dv_translate_source_vport(matcher.mask.buf,
> > > > +					       dev_flow->dv.value.buf,
> > > > +					       priv->representor_id < 0 ?
> > > > +					       priv->representor_id :
> > > > +					       priv->representor_id + 1,
> > >
> > > The vport of representor_id 0 will be 1?
> > > Who owns vport 0?
> >
> > PF.
> > There is the foillowing vport mapping (for single E-Switch per PF):
> >
> > -1 - wire
> 
> Wire, i.e. the uplink representor. indeed it's index is defined by PRM to -1.
> 
> > 0 - PF (uplink + VF reps)
> 
> I don't understand this part. When you have uplink representor you don't
> have PF.
We do. There is PF anyway. In meaning we always have PCI function, which
Is some kind of "container" for representors and also serves as E-Switch manager.
It may contain only "uplink rep" if there is no VF enabled, or may contain the bunch 
of uplink and VF reps. This PF has vport zero assigned.

> Moreover, I would expect the first representor created to have vport_num=0
> (w/ name pf0vf0).
> Isn't it the case?
No. Representors do not have dedicated vports, they share the vport zero (PF) instead.
And VFs have dedicated vports.

> 
> > 1 - VF0
> > 2 - VF1
> > ...
> > n+1 - VFn
> >
> > This code is subject to change - (SF, multi E-Switch per function,
> > etc), this patch currently supports single E-Switch  per PF.
> >
> > >
> > > > +					       0xffff);
> > > > +	}
> > > >  	for (; items->type != RTE_FLOW_ITEM_TYPE_END; items++) {
> > > >  		int tunnel = !!(item_flags & MLX5_FLOW_LAYER_TUNNEL);
> > > >  		void *match_mask = matcher.mask.buf;
> > > > --
> > > > 1.8.3.1



More information about the dev mailing list