[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <7df5bb7f-ea69-7673-642b-f174e45a1e64@digitalocean.com>
Date: Tue, 25 Feb 2020 20:32:14 -0700
From: David Ahern <dahern@...italocean.com>
To: Jason Wang <jasowang@...hat.com>,
"Michael S. Tsirkin" <mst@...hat.com>,
"netdev@...r.kernel.org" <netdev@...r.kernel.org>
Subject: virtio_net: can change MTU after installing program
Another issue is that virtio_net checks the MTU when a program is
installed, but does not restrict an MTU change after:
# ip li sh dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 xdp qdisc fq_codel
state UP mode DEFAULT group default qlen 1000
link/ether 5a:39:e6:01:a5:36 brd ff:ff:ff:ff:ff:ff
prog/xdp id 13 tag c5595e4590d58063 jited
# ip li set dev eth0 mtu 8192
# ip li sh dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 8192 xdp qdisc fq_codel
state UP mode DEFAULT group default qlen 1000
The simple solution is:
@@ -2489,6 +2495,8 @@ static int virtnet_xdp_set(struct net_device *dev,
struct bpf_prog *prog,
}
}
+ dev->max_mtu = prog ? max_sz : MAX_MTU;
+
return 0;
err:
The complicated solution is to implement ndo_change_mtu.
The simple solution causes a user visible change with 'ip -d li sh' by
showing a changing max mtu, but the ndo has a poor user experience in
that it just fails EINVAL (their is no extack) which is confusing since,
for example, 8192 is a totally legit MTU. Changing the max does return a
nice extack message.
Powered by blists - more mailing lists