iOS14 tethering issues

There has been a patch create, I found this patch mail via another thread:


Doesn't look to complicated.

How can I get this patch for 19.07.02 (or 19.07.04)?

I noticed that luochongjun, who posted above, has recently posted in the GitHub thread relating to this topic:


that he has built a set of GL.iNet snapshots with the patch, and gives a link to them. I just tried one of his snapshots on my GL.iNet B1300 router, and tethered perfectly with my iPhone SE 2016 iOS 14.2. Great stuff, good to know this has been solved!

I just wondered if anyone was now building any OpenWRT snapshots with the patch? I see Sebastian0816 says above it 'doesn't look too complicated', but I fear it may stretch my own expertise, unless someone can point to some very clear instructions for this kind of thing!

Also, does anyone know how long it might take for a patch of this kind to percolate through to a stable release version of OpenWRT? Thanks.

I tried a build myself and generated a patched kernel module. But his now causes an immediate reboot when starting usbmuxd. However I am not really familiar with git and how to build for exactly the image that is on my router:
TP-Link TL-WR1043ND v2
OpenWrt 19.07.4 r11208-ce6496d796 / LuCI openwrt-19.07 branch git-20.247.75781-0d0ab01.

The original package says:
Package: kmod-usb-net-ipheth
Version: 4.14.195-1
Depends: kernel (=4.14.195-1-b84a5a29b1d5ae1dc33ccf9ba292ca1d), kmod-usb-net

My homebrewn one provides:
Package: kmod-usb-net-ipheth
Version: 4.14.195-1
Depends: kernel (=4.14.195-1-86e3a5bc76ee824a6696965af03e7578), kmod-usb-net

Maybe someone can provide a step by step instruction for getting exactly the right version for the package. I just did a git clone , then a git checkout v19.07.4. then the make menuconfig and make, as described in the openWRT developers docs.

User wnienhaus on Gitub posted a fix at https://github.com/libimobiledevice/libimobiledevice/issues/1038#issuecomment-735213839 that worked for me on openwrt 19.07.4 running on a router EA6350.

This modifies the iphone binary to change all references from 1516 buffer size to 1514 buffer size. Here are the instructions:

opkg update
opkg install kmod-usb-net-ipheth usbmuxd libimobiledevice usbutils
opkg install xxd
cd /lib/modules/$(uname -r)
cp -ia ipheth.ko ipheth.ko.orig
xxd ipheth.ko.orig | sed 's/ec15/ea15/g;s/ecc5/eac5/g;s/ec75/ea75/g' | xxd -r > ipheth.ko
rmmod ipheth; modprobe ipheth
opkg remove xxd

After this change, I was able to tether and ping on an iPhone XR running iOS 14. The user notes that the changes to the binary representation may not be the same with your router, so it depends on the underlying architecture.

4 Likes

coming soon , to a master near you!

2 Likes

I can confirm that the wnienhaus/languagegame recipe above just worked for me (OpenWRT 19.07.04 on GL.iNet GL-B1300, iOS 14.2, iPhone SE 2016). Phew!

As an 'intermediate-level' user, I did not fancy my chances following some of the expert solutions posted, involving recompiling Linux kernel etc. - though I see why they are superior if one is able to execute. Whereas the wnienhaus/languagegame recipe is much easier to follow!

Hopefully the next OpenWRT supported build release will include a full fix (done the expert way, of course!), to complement the excellent work of luochongjun, who has compiled a full new set of patched GL.iNet snapshots (which are built on OpenWRT, of course).

I believe Apple broke this functionality deliberately for the Linux/OpenWRT community - their inadequate response since speaking for itself - so it is great the community has fixed it so quickly, thereby sticking two fingers up to the money men!

2 Likes

Is it in the 19.07.5 branch or not since it is just 1 commit behind???

I don't think so. I had to do the same workaround as posted previously for openwrt 19.07.4, and it worked again for 19.07.5.

Workaround worked for me but had to change sed line to

xxd ipheth.ko.orig | sed 's/05EC/05EA/g' | xxd -r > ipheth.ko

on Netgear WNDR3700

1 Like

I'm new around here and would consider myself a beginner user. Wondering if anyone can assist with the sed command that I should be using for my router architecture? I'm not sure how to interpret the hexdump from xxd so as to make the appropriate changes... I am using an ASUS RT-AC51U router and im running OpenWrt v19.07.5

I'm using an Archer C7 V5. I got it working with this modification to Walterav's post.

xxd ipheth.ko.orig | sed 's/5ec/5ea/g' | xxd -r > ipheth.ko
(noticed that this is just the same as crispypants fix so I can confirm it works)

I am no expert but I think it simply looks for 1516 (5ec) and replaces it with 1514 (5ea) as described in the Github fix. I don't really see why this wouldn't work for any version if it worked for me.

objdump is really handy to check if it has worked. If you still see 1516 references not 1514 it hasn't worked.

Anyway it worked for me tethering to an iphone (ios 14.4) on my Arched C7 V5.

Out of curiosity, are you guys trying to use iOS 14's tether feature or trying to use libimobiledevice tools to interact with it?

Upstream kernel fixed the issue and backported it everywhere AFAIK. libimobiledevice has been updated and fixed for master and 19.07.

My pea brain managed to figure out the issue thanks to your help, thanks very much. I was having difficulty viewing the modified file and as it turns out the order was reversed and lower case. So my command was:

xxd ipheth.ko.orig | sed 's/ec05/ea05/g' | xxd -r > ipheth.ko

This is for an Asus RT-AC51U and iPhone X running iOS 14. Everything seems to be working now.

I'm trying USB-tethering using iPhoneSE (iOS14.4), with OpenWRT 19.07.07 on NanoPi.
I followed the steps of:

I also edit /etc/config/network to set 'eth1' with proto of dhcp.

By connecting iPhone, IPv6 address is acquired, while IPv4 address is not, which results in failing to access IPv4 address destination.


By connecting Android phone, both IPv4 and IPv6 address are acquired.

Are anyone meets the similar problem?

Hi,
When creating tetering adapter (gui) under advanced settings selected Override MTU: 1514
Afterwards it worked as expected... :slight_smile:

I can also report this code fixes the issue on iOS 12.7,13.6 tethering as well. on latest 19.07.4

The following commit reduces both RX and TX buffers from 1516 to 1514 to fix the issue with iOS 14, where the Linux client has only local connectivity to the iPhone, but no Internet connection:
httpstorm/linux-kernel@f33d9e2#diff-d13f85b8acc1204f31e7abc538e9fdb1faa07b94cd928800b6b976561d32f6e3

I also experienced that issue during my research. It is important to note that only TX needs to be reduced to resolve the original issue. Further more the change fails to consider that the RX buffer is later reduced by IPHETH_IP_ALIGN (2 bytes) resulting in 1512 bytes effective. Hence packets of size 1513-1514 result in overflow in ipheth_rcvbulk_callback(), after which the driver malfunctions and all communication stops. My patch corrects that by increasing the RX buffer size by adding IPHETH_IP_ALIGN to compensate because that the same padding is subtracted later.

Anyone experiencing disconnects after the original patch, please help me find a reviewer for the updated patch below!

I am just getting myself into openWRT and related stuff so I am a bit lost as to how to follow these instrucitons.
I gather from the posts here that the TX buffer needs to be reduced from 1516 to 1514, but how do I go about doing so?
I see lines of code to be examined, but I am lost as to how to get to a page where I can be editing the codes.

I am using a GL-AR750S on 19.07.7
Any help would be appreciated.

Initial fixe(s) for the IOS platform were already merged and backported to the 19.07.x branch.

But as you further read on in this thread it was not 100% correctly fixed but I can asure you it is good enough for a newby to start and setup packages, edit scripts etc for this to work and test. Just want to say don't let this halt your progress.

Later on you may download a updated OpenWrt release with patches included or compile your own, but as you mentioned earlier your geting your self in to this start here: