[v7] net/tap: Allow jumbo frames

Message ID b5d75b0a-6421-75a5-b7dc-b40597c91eef@tutus.se (mailing list archive)
State Accepted, archived
Delegated to: Ferruh Yigit
Headers
Series [v7] net/tap: Allow jumbo frames |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK
ci/github-robot: build success github build: passed
ci/intel-Testing success Testing PASS
ci/iol-mellanox-Performance success Performance Testing PASS
ci/iol-aarch64-unit-testing success Testing PASS
ci/iol-aarch64-compile-testing success Testing PASS
ci/iol-x86_64-unit-testing success Testing PASS
ci/iol-x86_64-compile-testing success Testing PASS
ci/iol-intel-Functional success Functional Testing PASS
ci/iol-intel-Performance success Performance Testing PASS

Commit Message

Francesco Mancino Aug. 8, 2022, 2:49 p.m. UTC
  eth_dev_validate_mtu, introduced in 990912e676e, validates configured
MTU plus overhead against max_rx_pktlen.
Since TAP is a virtual device, it should support as big MTU as possible.

Signed-off-by: Francesco Mancino <francesco.mancino@tutus.se>
---
 drivers/net/tap/rte_eth_tap.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
  

Comments

Stephen Hemminger Aug. 8, 2022, 3:03 p.m. UTC | #1
On Mon, 8 Aug 2022 16:49:44 +0200
Francesco Mancino <francesco.mancino@tutus.se> wrote:

> eth_dev_validate_mtu, introduced in 990912e676e, validates configured
> MTU plus overhead against max_rx_pktlen.
> Since TAP is a virtual device, it should support as big MTU as possible.
> 
> Signed-off-by: Francesco Mancino <francesco.mancino@tutus.se>
	dev_info->min_rx_bufsize = 0;


Thanks for your patience.

Since tap is built on top of an existing kernel network device a more
complete solution would be to query the kernel device to find out what
its MTU is. 

Acked-by: Stephen Hemminger <stephen@networkplumber.org>
  
Francesco Mancino Aug. 8, 2022, 3:38 p.m. UTC | #2
Thank you for the feedback. 

I am sorry for the email spam, it was a learning process.

I am not sure what results we would get by querying the MTU
before configuring it, since we can (and do) set the MTU using
SIOCSIFMTU.

On 2022-08-08 17:03, Stephen Hemminger wrote:
> On Mon, 8 Aug 2022 16:49:44 +0200
> Francesco Mancino <francesco.mancino@tutus.se> wrote:
> 
>> eth_dev_validate_mtu, introduced in 990912e676e, validates configured
>> MTU plus overhead against max_rx_pktlen.
>> Since TAP is a virtual device, it should support as big MTU as possible.
>>
>> Signed-off-by: Francesco Mancino <francesco.mancino@tutus.se>
> 	dev_info->min_rx_bufsize = 0;
> 
> 
> Thanks for your patience.
> 
> Since tap is built on top of an existing kernel network device a more
> complete solution would be to query the kernel device to find out what
> its MTU is. 
> 
> Acked-by: Stephen Hemminger <stephen@networkplumber.org>
>
  
Stephen Hemminger Aug. 8, 2022, 4:42 p.m. UTC | #3
On Mon, 8 Aug 2022 17:38:21 +0200
Francesco Mancino <francesco.mancino@tutus.se> wrote:

> Thank you for the feedback. 
> 
> I am sorry for the email spam, it was a learning process.
> 
> I am not sure what results we would get by querying the MTU
> before configuring it, since we can (and do) set the MTU using
> SIOCSIFMTU.
> 
> On 2022-08-08 17:03, Stephen Hemminger wrote:
> > On Mon, 8 Aug 2022 16:49:44 +0200
> > Francesco Mancino <francesco.mancino@tutus.se> wrote:
> >   
> >> eth_dev_validate_mtu, introduced in 990912e676e, validates configured
> >> MTU plus overhead against max_rx_pktlen.
> >> Since TAP is a virtual device, it should support as big MTU as possible.
> >>
> >> Signed-off-by: Francesco Mancino <francesco.mancino@tutus.se>  
> > 	dev_info->min_rx_bufsize = 0;
> > 
> > 
> > Thanks for your patience.
> > 
> > Since tap is built on top of an existing kernel network device a more
> > complete solution would be to query the kernel device to find out what
> > its MTU is. 
> > 
> > Acked-by: Stephen Hemminger <stephen@networkplumber.org>
> >   
> 

There is an attribute IFLA_MAX_MTU reported by devices over netlink.

$ ip -d li show dev enp2s0
2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq state UP mode DEFAULT group default qlen 1000
    link/ether d8:5e:d3:06:5d:13 brd ff:ff:ff:ff:ff:ff promiscuity 0 minmtu 68 maxmtu 9194 addrgenmode none numtxqueues 1 numrxqueues 1 gso_max_size 64000 gso_max_segs 64 gro_max_size 65536 parentbus pci parentdev 0000:02:00.0

Notice maxmtu of 9194 reported.

Tap device already has a netlink infrastructure
  
Francesco Mancino Aug. 9, 2022, 7:57 a.m. UTC | #4
Interesting, did not know about that attribute.

Tested some tap devices on my machine and get a maxmtu value close to
max uint16, way bigger than RTE_ETHER_MAX_JUMBO_FRAME_LEN.

I do not know if will have time to code and test using netlink to set this limit,
for the time being i think RTE_ETHER_MAX_JUMBO_FRAME_LEN is better than the previous limit.

On 2022-08-08 18:42, Stephen Hemminger wrote:
> On Mon, 8 Aug 2022 17:38:21 +0200
> Francesco Mancino <francesco.mancino@tutus.se> wrote:
> 
>> Thank you for the feedback. 
>>
>> I am sorry for the email spam, it was a learning process.
>>
>> I am not sure what results we would get by querying the MTU
>> before configuring it, since we can (and do) set the MTU using
>> SIOCSIFMTU.
>>
>> On 2022-08-08 17:03, Stephen Hemminger wrote:
>>> On Mon, 8 Aug 2022 16:49:44 +0200
>>> Francesco Mancino <francesco.mancino@tutus.se> wrote:
>>>   
>>>> eth_dev_validate_mtu, introduced in 990912e676e, validates configured
>>>> MTU plus overhead against max_rx_pktlen.
>>>> Since TAP is a virtual device, it should support as big MTU as possible.
>>>>
>>>> Signed-off-by: Francesco Mancino <francesco.mancino@tutus.se>  
>>> 	dev_info->min_rx_bufsize = 0;
>>>
>>>
>>> Thanks for your patience.
>>>
>>> Since tap is built on top of an existing kernel network device a more
>>> complete solution would be to query the kernel device to find out what
>>> its MTU is. 
>>>
>>> Acked-by: Stephen Hemminger <stephen@networkplumber.org>
>>>   
>>
> 
> There is an attribute IFLA_MAX_MTU reported by devices over netlink.
> 
> $ ip -d li show dev enp2s0
> 2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq state UP mode DEFAULT group default qlen 1000
>     link/ether d8:5e:d3:06:5d:13 brd ff:ff:ff:ff:ff:ff promiscuity 0 minmtu 68 maxmtu 9194 addrgenmode none numtxqueues 1 numrxqueues 1 gso_max_size 64000 gso_max_segs 64 gro_max_size 65536 parentbus pci parentdev 0000:02:00.0
> 
> Notice maxmtu of 9194 reported.
> 
> Tap device already has a netlink infrastructure
>
  
Ferruh Yigit Jan. 19, 2023, 2:50 p.m. UTC | #5
On 8/8/2022 4:03 PM, Stephen Hemminger wrote:
> On Mon, 8 Aug 2022 16:49:44 +0200
> Francesco Mancino <francesco.mancino@tutus.se> wrote:
> 
>> eth_dev_validate_mtu, introduced in 990912e676e, validates configured
>> MTU plus overhead against max_rx_pktlen.
>> Since TAP is a virtual device, it should support as big MTU as possible.
>>
>> Signed-off-by: Francesco Mancino <francesco.mancino@tutus.se>
> 	dev_info->min_rx_bufsize = 0;
> 
> 
> Thanks for your patience.
> 
> Since tap is built on top of an existing kernel network device a more
> complete solution would be to query the kernel device to find out what
> its MTU is. 
> 
> Acked-by: Stephen Hemminger <stephen@networkplumber.org>


+1 to get as it is for now, but if you have a chance, please send
'IFLA_MAX_MTU' implementation to replace current one, thanks.

Applied to dpdk-next-net/main, thanks.
  

Patch

diff --git a/drivers/net/tap/rte_eth_tap.c b/drivers/net/tap/rte_eth_tap.c
index 9e1032fe72..df7f948972 100644
--- a/drivers/net/tap/rte_eth_tap.c
+++ b/drivers/net/tap/rte_eth_tap.c
@@ -1066,7 +1066,7 @@  tap_dev_info(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)
 
 	dev_info->if_index = internals->if_index;
 	dev_info->max_mac_addrs = 1;
-	dev_info->max_rx_pktlen = (uint32_t)RTE_ETHER_MAX_VLAN_FRAME_LEN;
+	dev_info->max_rx_pktlen = RTE_ETHER_MAX_JUMBO_FRAME_LEN;
 	dev_info->max_rx_queues = RTE_PMD_TAP_MAX_QUEUES;
 	dev_info->max_tx_queues = RTE_PMD_TAP_MAX_QUEUES;
 	dev_info->min_rx_bufsize = 0;