# iPhone USB tethering, redux.

## Budoka

It seems like a lot of progress has been made recently getting Gentoo to tether via USB with an iPhone or Android phone. That's good but I am having some problems.

I am using the following wiki:

http://wiki.gentoo.org/wiki/Android_USB_Tethering and http://wiki.gentoo.org/wiki/Iphone_USB_Tethering

The problem is I can't find any of the required kernel options in kernel 3.10.7. The wiki is using 3.0.6. Can someone point me to an updated wiki? (Yes I have searched) or instruct me where those kernel config options have been moved to? Thanks.

----------

## NeddySeagoon

Budoka,

The search in menuconfig is a great help but only if you are part way there, as menu options that are hidden because their dependencies are not satisfied are oftn not show.

```

  │ Symbol: USB_NET_CDCETHER [=m]                                                             │  

  │ Type  : tristate                                                                          │  

  │ Prompt: CDC Ethernet support (smart devices such as cable modems)                         │  

  │   Location:                                                                               │  

  │     -> Device Drivers                                                                     │  

  │       -> Network device support (NETDEVICES [=y])                                         │  

  │         -> USB Network Adapters                                                           │  

  │ (1)       -> Multi-purpose USB Networking Framework (USB_USBNET [=m])                     │  

  │   Defined at drivers/net/usb/Kconfig:188                                                  │  

  │   Depends on: NETDEVICES [=y] && USB [=y] && NET [=y] && USB_USBNET [=m] 
```

You may not see CDC Ethernet support (smart devices such as cable modems) in the search results until the Depends on: NETDEVICES [=y] && USB [=y] && NET [=y] && USB_USBNET [=m] are all true.

----------

## Budoka

 *NeddySeagoon wrote:*   

> Budoka,
> 
> The search in menuconfig is a great help but only if you are part way there, as menu options that are hidden because their dependencies are not satisfied are oftn not show.
> 
> ```
> ...

 

OK. It appears that I have the kernel options configured correctly now. I generally do search in menuconfig first but now that you explained about the "depends" understand why I often can't find stuff.

So I recompiled my kernel and was able to install the ipheth driver but still can't tether via USB cable and connect. I am not sure how to troubleshoot this so maybe if I outline what I am seeing someone can help me out.

If I plug in a regular LAN cable, as best I can make out, it will always connect to interface eth0.

The wiki, http://wiki.gentoo.org/wiki/Iphone_USB_Tethering, had me do some configuration stuff that will have my USB tether on eth1.

If I am reading dmesg correctly when I first plugged in my device it wasn't detected. So as a goof I unplugged it and plugged it ito another usb port and it found it.

```
[  769.527282] usb 3-2: new high-speed USB device number 2 using xhci_hcd

[  769.551659] usb 3-2: New USB device found, idVendor=05ac, idProduct=12a0

[  769.551667] usb 3-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3

[  769.551672] usb 3-2: Product: iPhone

[  769.551676] usb 3-2: Manufacturer: Apple Inc.

[  769.551681] usb 3-2: SerialNumber: bfa30e8ddfd1a167b0183eb0569572a8332fddcf

[  769.552057] usb 3-2: ep 0x2 - rounding interval to 8 microframes, ep desc says 10 microframes

[  769.552077] usb 3-2: ep 0x81 - rounding interval to 8 microframes, ep desc says 10 microframes

[  769.610935] usb 3-2: ep 0x2 - rounding interval to 8 microframes, ep desc says 10 microframes

[  769.610957] usb 3-2: ep 0x81 - rounding interval to 8 microframes, ep desc says 10 microframes

[  770.108259] ipheth 3-2:4.2: ipheth_get_macaddr: usb_control_msg: -110

[  770.108288] ipheth: probe of 3-2:4.2 failed with error -110

[  876.889192] usb 3-2: USB disconnect, device number 2

[  881.934791] usb 3-1: new high-speed USB device number 3 using xhci_hcd

[  881.958530] usb 3-1: New USB device found, idVendor=05ac, idProduct=12a0

[  881.958539] usb 3-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3

[  881.958544] usb 3-1: Product: iPhone

[  881.958548] usb 3-1: Manufacturer: Apple Inc.

[  881.958553] usb 3-1: SerialNumber: bfa30e8ddfd1a167b0183eb0569572a8332fddcf

[  881.958883] usb 3-1: ep 0x2 - rounding interval to 8 microframes, ep desc says 10 microframes

[  881.958894] usb 3-1: ep 0x81 - rounding interval to 8 microframes, ep desc says 10 microframes

[  881.964189] usb 3-1: ep 0x2 - rounding interval to 8 microframes, ep desc says 10 microframes

[  881.964198] usb 3-1: ep 0x81 - rounding interval to 8 microframes, ep desc says 10 microframes

[  882.083295] ipheth 3-1:4.2: Apple iPhone USB Ethernet device attached

[  882.142434] IPv6: ADDRCONF(NETDEV_UP): eth1: link is not ready

```

However it says  *Quote:*   

> eth1: link is not ready

 

ifconfig shows:

```
# ifconfig

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        inet 192.168.10.8  netmask 255.255.255.0  broadcast 192.168.10.255

        inet6 fe80::ea03:9aff:fe1d:ffd3  prefixlen 64  scopeid 0x20<link>

        ether e8:03:9a:1d:ff:d3  txqueuelen 1000  (Ethernet)

        RX packets 390913  bytes 568903816 (542.5 MiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 197574  bytes 13887796 (13.2 MiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth1: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500

        ether f2:cb:a1:3d:fe:5b  txqueuelen 1000  (Ethernet)

        RX packets 0  bytes 0 (0.0 B)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 0  bytes 0 (0.0 B)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536

        inet 127.0.0.1  netmask 255.0.0.0

        inet6 ::1  prefixlen 128  scopeid 0x10<host>

        loop  txqueuelen 0  (Local Loopback)

        RX packets 248  bytes 15368 (15.0 KiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 248  bytes 15368 (15.0 KiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

```

My /lib/udev/net.sh

```
#!/bin/sh

#

# net.sh: udev external RUN script

#

# Copyright 2007 Roy Marples <uberlord@gentoo.org>

# Distributed under the terms of the GNU General Public License v2

IFACE=$1

ACTION=$2

SCRIPT=/etc/init.d/net.$IFACE

# ignore interfaces that are registered after being "up" (?)

case ${IFACE} in

        ppp*|ippp*|isdn*|plip*|lo*|irda*|dummy*|ipsec*|tun*|tap*|br*)

                exit 0 ;;

esac

# stop here if coldplug is disabled, Bug #206518

if [ "${do_not_run_plug_service}" = 1 ]; then

        exit 0

fi

if [ ! -x "${SCRIPT}" ] ; then

        #do not flood log with messages, bug #205687

        #logger -t udev-net.sh "${SCRIPT}: does not exist or is not executable"

        exit 1

fi

# If we're stopping then sleep for a bit in-case a daemon is monitoring

# the interface. This to try and ensure we stop after they do.

[ "${ACTION}" == "stop" ] && sleep 2

IN_HOTPLUG=1 "${SCRIPT}" --quiet "${ACTION}"

```

I didn't have a /lib/udev/rules.d/90-iphone-tether.rules so created it and populated it with:

```
# udev rules for setting correct configuration and pairing on tethered iPhones

ATTR{idVendor}!="05ac", GOTO="ipheth_rules_end"

# Execute pairing program when appropriate

ACTION=="add", SUBSYSTEM=="net", ENV{ID_USB_DRIVER}=="ipheth", SYMLINK+="iphone", RUN+="ipheth-pair", RUN+="net.sh eth1 start"

SUBSYSTEM=="net", ACTION=="remove", ENV{ID_USB_DRIVER}=="ipheth", SYMLINK+="iphone", RUN+="net.sh %k stop"

LABEL="ipheth_rules_end"
```

I changed rc_hotplug in /etc/rc.conf:

```
# rc_hotplug is a list of services that we allow to be hotplugged.

# By default we do not allow hotplugging.

# A hotplugged service is one started by a dynamic dev manager when a matching

# hardware device is found.

# This service is intrinsically included in the boot runlevel.

# To disable services, prefix with a !

# Example - rc_hotplug="net.wlan !net.*"

# This allows net.wlan and any service not matching net.* to be plugged.

# Example - rc_hotplug="*"

# This allows all services to be hotplugged

#rc_hotplug="*"

# Added per http://wiki.gentoo.org/wiki/Iphone_USB_Tethering

rc_hotplug="net.eth1"
```

Then added this as instructed:

ln -s /etc/init.d/net.{lo,eth1}

http://bpaste.net/show/135193/

But it never appears in rc-status:

 *Quote:*   

> # rc-status
> 
> Runlevel: default
> 
>  sysklogd                                                                                                                                                                                                           [  started  ]
> ...

 

OK. So this where it gets wacky and confusing to me.

1-If I plug in my device it won't automatically see the network connection "iphone" on any adapter. But if I add it in the Manage Connections dialogue it seems to pick it up.

2-If I try to connect on adapter eth1, as best I can tell, it will assign a ip address and says "connected" but there isn't one. Anything requiring a connection doesn't have one.

3-***But, if I have both my LAN cable and USB connected and I connect to iphone on adapter eth0. It does and I can browse etc.

Of course if a LAN cable is not available I can't connect anything on eth0 because there isn't a cable present. 

I am stumped. Any ideas?

----------

## Budoka

Still trying to sort this out. I've noticed some things since my last post.

1) If I plug my device into the usb port sometimes it detects the device, sometimes it doesn't. When it doesn't detect it is a simple matter of unplugging and re-plugging it to resolve the problem. But it is consistent and reproducible behavior.

2) In the wiki it indicates that the device should be assigned "usb" something. The example they use is "usb0". However my 

```
ifconfig -a
```

 always indicates that it is being assigned eth1. I assume this is correct because all of the other config stuff in the wiki references eth1 but am a bit confused.

3) I am not great at reading the dmesg but it seems that however I am set up that it doesn't like eth1 but prefers eth0 (which is my lan cable). It also seems to be looking for an ipv6 connection???

 *Quote:*   

> [ 2403.413139] usb 3-1: new high-speed USB device number 2 using xhci_hcd
> 
> [ 2403.438409] usb 3-1: New USB device found, idVendor=05ac, idProduct=12a0
> 
> [ 2403.438418] usb 3-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
> ...

 

I haven't any problem tethering via wifi but prefer to not do that so really would like to sort out where I am going wrong with the usb cable connection. Also my machine is dual boot and as a goof I tried it on Win7.  It connected via USB tether no problem so it isn't a hardware issue.

----------

## NeddySeagoon

Budoka

In the snippets of dmesg that you post

```
[ 2455.276911] IPv6: ADDRCONF(NETDEV_UP): eth1: link is not ready 
```

is as close as you get.

```
[  770.108259] ipheth 3-2:4.2: ipheth_get_macaddr: usb_control_msg: -110

[  770.108288] ipheth: probe of 3-2:4.2 failed with error -110 
```

means something went wrong.

Don't get too hung up over the eth1 or usb0 interface name, I've seen these change over the years for other devices.

Try the following:-  

Shut down

Unplug your wired ethernet

Connect your phone

Boot up.

I don't expect it to work - this is just diagnostics.

Log in and do 

```
dmesg > dmesg.txt

ifconfig -a > ifconfig.txt

lsusb -vvv > lsusb.txt
```

The lsusb command will need you to be root.

Reboot with your ethernet cable connected, 

```
emerge wgetpaste
```

 if you don't have it.

Post the three files you saved above. ifconfig.txt will fit in a forums post, the other files will be too big. use wgetpaste to put them on a pastebin site.

----------

## Budoka

 *NeddySeagoon wrote:*   

> Budoka
> 
> In the snippets of dmesg that you post
> 
> ```
> ...

 

Thanks Neddy. I did notice that failure but after I unplugged and re-plugged it in I thought the dmesg said it succeeded. Anyway, most of those messages are Greek to me but I am learning slowly but surely. I followed your instructions and attached the wgetpaste links. There are 2 sets. I figured it couldn't hurt to run it on both usb ports. I also have a 3.0 port but use that almost exclusively for the mouse just because of where it is situated. I didn't run it on that but if you think I should do so let me know. Once again Thank You.

```
cat dmesg.txt | wgetpaste
```

 http://bpaste.net/show/136636/

```
cat ifconfig.txt | wgetpaste
```

 http://bpaste.net/show/136639/

```
cat lsusb.txt | wgetpaste
```

 http://bpaste.net/show/136641/

```
cat dmesg2ndUSB.txt | wgetpaste
```

 http://bpaste.net/show/136642/

```
cat ifconfig2ndUSB.txt | wgetpaste
```

 http://bpaste.net/show/136643/

```
cat lsusb2.txt | wgetpaste
```

 http://bpaste.net/show/136644/

----------

## NeddySeagoon

Budoka,

From your first dmesg

```
[   34.092368] usb 3-2: ep 0x2 - rounding interval to 8 microframes, ep desc says 10 microframes

[   34.092385] usb 3-2: ep 0x81 - rounding interval to 8 microframes, ep desc says 10 microframes

[   34.097172] ipheth 3-2:4.2: Apple iPhone USB Ethernet device attached
```

is good but there is nothing about the driver being loaded or eth1 being created.

I think its safe to assume the kernel spotted eth1 as it appears in 

```
ifconfig -a
```

, but without an IP address.

lsusb shows 

```
  Configuration Descriptor:

    bLength                 9

    bDescriptorType         2

    wTotalLength           94

    bNumInterfaces          3

    bConfigurationValue     4

    iConfiguration          8 PTP + Apple Mobile Device + Apple USB Ethernet

    bmAttributes         0xc0

      Self Powered

    MaxPower              500mA
```

which tells that the i-Phone will draw 500mA from your PC.  In your case, thats ok as its the only device on a USB3 root hub.

What happens if you run 

```
dhcpcd eth1
```

This should ask the iphone to set up eth1, so it should get you an IP address, some routes and so on.

If eth0 is up when you do this, it probably still won't work but  if you have an IP address on eth1, thats success.

----------

## UberLord

One of the many reasons to run dhcpcd in master mode instead of per interface.

Automatic hotplugging of interfaces (ok, relies on kernel to load driver and create the interface, dhcpcd will do the rest) regardless of OS.

See here: https://forums.gentoo.org/viewtopic-t-965190.html

----------

