On Wed, Oct 6, 2021 at 3:38 AM Ajit Khaparde <ajit.khapa...@broadcom.com> wrote:
>
> On Tue, Oct 5, 2021 at 10:31 AM Ferruh Yigit <ferruh.yi...@intel.com> wrote:
> >
> > There is a confusion on setting max Rx packet length, this patch aims to
> > clarify it.
> >
> > 'rte_eth_dev_configure()' API accepts max Rx packet size via
> > 'uint32_t max_rx_pkt_len' field of the config struct 'struct
> > rte_eth_conf'.
> >
> > Also 'rte_eth_dev_set_mtu()' API can be used to set the MTU, and result
> > stored into '(struct rte_eth_dev)->data->mtu'.
> >
> > These two APIs are related but they work in a disconnected way, they
> > store the set values in different variables which makes hard to figure
> > out which one to use, also having two different method for a related
> > functionality is confusing for the users.
> >
> > Other issues causing confusion is:
> > * maximum transmission unit (MTU) is payload of the Ethernet frame. And
> >   'max_rx_pkt_len' is the size of the Ethernet frame. Difference is
> >   Ethernet frame overhead, and this overhead may be different from
> >   device to device based on what device supports, like VLAN and QinQ.
> > * 'max_rx_pkt_len' is only valid when application requested jumbo frame,
> >   which adds additional confusion and some APIs and PMDs already
> >   discards this documented behavior.
> > * For the jumbo frame enabled case, 'max_rx_pkt_len' is an mandatory
> >   field, this adds configuration complexity for application.
> >
> > As solution, both APIs gets MTU as parameter, and both saves the result
> > in same variable '(struct rte_eth_dev)->data->mtu'. For this
> > 'max_rx_pkt_len' updated as 'mtu', and it is always valid independent
> > from jumbo frame.
> >
> > For 'rte_eth_dev_configure()', 'dev->data->dev_conf.rxmode.mtu' is user
> > request and it should be used only within configure function and result
> > should be stored to '(struct rte_eth_dev)->data->mtu'. After that point
> > both application and PMD uses MTU from this variable.
> >
> > When application doesn't provide an MTU during 'rte_eth_dev_configure()'
> > default 'RTE_ETHER_MTU' value is used.
> >
> > Additional clarification done on scattered Rx configuration, in
> > relation to MTU and Rx buffer size.
> > MTU is used to configure the device for physical Rx/Tx size limitation,
> > Rx buffer is where to store Rx packets, many PMDs use mbuf data buffer
> > size as Rx buffer size.
> > PMDs compare MTU against Rx buffer size to decide enabling scattered Rx
> > or not. If scattered Rx is not supported by device, MTU bigger than Rx
> > buffer size should fail.
> >
> > Signed-off-by: Ferruh Yigit <ferruh.yi...@intel.com>
> > ---
> > Cc: Min Hu (Connor) <humi...@huawei.com>
> >
> > v2:
> > * Converted to explicit checks for zero/non-zero
> > * fixed hns3 checks
> > * fixed some sample app rxmode.mtu value
> > * fixed some sample app max-pkt-len argument and updated doc for it
> >
> > v3:
> > * rebased
> >
> > v4:
> > * fix typos in commit logs
>
> That's a lot of detail in the log. Thanks
>
> Acked-by: Ajit Khaparde <ajit.khapa...@broadcom.com>

Acked-by: Somnath Kotur <somnath.ko...@broadcom.com>

Reply via email to