18/01/2021 05:01, Zhang, Qi Z:
> From: Thomas Monjalon <tho...@monjalon.net>
> > 12/01/2021 12:47, Qi Zhang:
> > > + * This API is for the first case and typically it will only be
> > > + implemented
> > > + * on a PF driver or a VF driver which have privilege right to
> > > + configure for
> > 
> > What is a privileged VF exactly?
> 
> Yes, looks like "a privileged VF" is not generic enough here, actually it 
> should be a driver that implement DPDK ethdev API and able to perform 
> device/port level configure, 
> for example use rte_flow to steer traffic to specific VF, configure UDP 
> tunnel port .... it is something like a "host driver"
> It could be a pure user pace DPDK PF driver, or a vdev / SR-IOV driver back 
> ended by a kernel driver but be granted to have privilege to access more 
> device resource through some sw/hw channel.

How such device is granted privilege?


> > > + * other VFs. For the second case, a tunnel configure could be
> > > + embedded in a
> > > + * rte_flow rule.
> > 
> > I suggest we make the explanation more API-oriented.
> > 
> > First thing to explain: this API will have effect on rte_flow rules only, 
> > am I right?
> 
> I think it should not only impact the rte_flow, but also may impact the 
> packet type that extract from Rx Descriptor to mbuf on some devices
> Because without this configure, the parser is not able to recognize the 
> specific tunnel type

Oh right.
This impact on mbuf classification should be part of the doxygen explanation.


> > What does it mean for a flow rule matching on a specific tunnel?
> > Let's take an example config:
> >     rte_eth_dev_udp_tunnel_port_add [UDP X] [tunnel T]
> >     rte_flow_create [tunnel T] [action A]
> >     rte_flow_create [UDP Y] [tunnel T] [action B] Then action for these
> 
> Some driver may not allow to specific a tunnel port in rte_flow as 
> rte_eth_dev_udp_tunnel_port_add is prefer API to handle this.

Every rte_flow items and actions have limitations in drivers, that's OK.

> > packets:
> >     1/ [UDP X] - no tunnel header
> > -> A (rte_eth_udp_tunnel skips the tunnel header check) or none, tunnel
> > -> header is checked according to rte_flow?
> 
> If a packet only have udp tunnel port but don't have tunnel header, so the 
> packet will still not be recognized as a an tunnel packet by the parser, the 
> pattern is not matched and action A should not be executed.

OK I like it. Please make this behaviour clear in the doxygen.


> >     2/ [UDP Y] - no tunnel header
> > -> none (flow rule requires a tunnel header)
> 
> Yes, expected result
> 
> >     3/ [UDP X] [tunnel T]
> > -> A
> 
> Yes, expected result
> 
> >     4/ [UDP Y] [tunnel T]
> > -> B
> 
> Yes, expected result, if the rule #2 is allowed to create

Yes of course, if the rule cannot be created, the driver will reject it
with an appropriate error code and a log mentioning the limitation.

> >     5/ [UDP X] [tunnel U]
> > -> A (rte_eth_udp_tunnel skips the tunnel header check) or none, tunnel
> > -> header is checked according to rte_flow?
> 
> Should be none.

OK makes sense.

> >     6/ [UDP Y] [tunnel U]
> > -> none
> 
> Yes expected result.
> > 
> > Last question, how it plays with rte_flow_tunnel_match?
> > Should we replace rte_eth_udp_tunnel with rte_flow_tunnel_match?
> 
> My understanding is rte_flow_tunnel_match is just a help function, it help to 
> generate a set of rte_flow_items to feed a new rule creation, so looks like 
> it is not expected to have any interaction with hardware? So I didn't figure 
> out how can we use it to replace,  But maybe we can introduce something new 
> like rte_flow_tunnel_create as we already have a rte_flow_tunnel structure 
> which looks more generic than the existing API that only take udp port for 
> tunnel configure.

Yes we need to think about it for future more generic API.
Ori, any thoughts?


Reply via email to