Re: Stack sends oversize UDP packet to the driver
From: Mahesh Bandewar (महेश बंडेवार) <hidden>
Date: 2019-02-07 04:51:52
On Tue, Feb 5, 2019 at 11:36 AM Michael Chan [off-list ref] wrote:
On Wed, Jan 30, 2019 at 5:00 PM Mahesh Bandewar (महेश बंडेवार) [off-list ref] wrote:quoted
On Wed, Jan 30, 2019 at 1:07 AM Michael Chan [off-list ref] wrote:quoted
On Tue, Jan 22, 2019 at 10:29 AM Mahesh Bandewar (महेश बंडेवार) [off-list ref] wrote:quoted
The idea behind the fix is very simple and it is to create a dst-only (unregistered) device with a very low MTU and use it instead of 'lo' while invalidating the dst. This would make it *not* forward packets to driver which might need fragmentation.We tested the 2 patches many times and including an overnight test. I can confirm that the oversize UDP packets are no longer seen with the patches applied. However, I don't see the blackhole xmit function getting called to free the SKBs though.Thanks for the confirmation Michael. The blackhole device mtu is really small, so I would assume the fragmentation code dropped those packets before calling the xmit function (in ip_fragment), you could verify that with icmp counters.I've looked at this a little more. The blackhole_dev is not IFF_UP | IFF_RUNNING, right? May be that's why the packets are never getting to the xmit function?
Yes, so I added those two flags and ended up writing a test-module for the device (which I will include while posting the patch-series). However, adding those flags is also not sufficient since the qdisc is initialized to noop_qdisc so qdisc enqueue will drop packets before hitting the ndo_start_xmit().