Re: Toby MPCI - L201 cellular modem http hang after random MAC address assignment
From: Bjørn Mork <bjorn@mork.no>
Date: 2020-03-27 21:47:13
Bobby Jones [off-list ref] writes:
quoted
--- a/drivers/net/usb/rndis_host.c +++ b/drivers/net/usb/rndis_host.c@@ -428,7 +428,11 @@ generic_rndis_bind(struct usbnet *dev, struct usb_interface *intf, int flags) dev_err(&intf->dev, "rndis get ethaddr, %d\n", retval); goto halt_fail_and_release; } - memcpy(net->dev_addr, bp, ETH_ALEN); + + if (bp[0] & 0x02) + eth_hw_addr_random(net); + else + ether_addr_copy(net->dev_addr, bp); /* set a nonzero filter to enable data transfers */ memset(u.set, 0, sizeof *u.set);I know that there is some internal routing done by the modem firmware, and I'm assuming that overwriting the MAC address breaks said routing. Can anyone suggest what a proper fix would be?
That change should not break anything that wasn't already broken, given that the driver allows userspace to set any valid ethernet address. But I'm sure you're right that the modem doesn't like it. Since the patch also fixed a real problem, then I guess we need to add a device specific workaround for this modem. I know exactly nothing about RNDIS and have no such device. But looking at this now I wonder if the driver should have informed the device about any adress changes? I note that we have an RNDIS_OID_802_3_CURRENT_ADDRESS, which is unused by the usb host driver. Looking at the rndis gadget driver, I also note that it would refuse setting RNDIS_OID_802_3_CURRENT_ADDRESS, Which probably means that any Linux based device would fail if we tried that. So it's probably not a good idea as a workaround even if it helped your case. Which is very unlikely after all. Don't even know if that's how it was supposed to be. Oh well. Just add a device specific exception. Look at the RNDIS_DRIVER_DATA_POLL_STATUS thing and do something similar for this case, avoiding the unwanted address update Bjørn