#FREEBSD IPHONE NETWORK TETHER VIA USB
#EXAMPLE FROM ipheth(4)
#PRACTICAL UNIX SURREALISM
#https://man.freebsd.org/cgi/man.cgi?query=ipheth&sektion=4&manpath=FreeBSD+13.1-RELEASE+and+Ports

To load the driver as a module at boot time, place the following line in
loader.conf(5):

           if_ipheth_load="YES"

First, load the driver and find out the unit and the address of the USB
Apple device:

         # kldload ipheth
         # usbconfig | grep Apple
         ugen0.2: <Apple Inc. iPhone> at usbus0, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (500mA)

In this example, the unit and the address of the device is 0.2
("ugen0.2"), and its configuration index is 0 ("cfg=0").

Secondly, check what other configurations are available for the device:

         # usbconfig -d 0.2 dump_all_config_desc | grep -E '(^ Conf|iConf)'
          Configuration index 0
             iConfiguration = 0x0005  <PTP>
          Configuration index 1
             iConfiguration = 0x0006  <iPod USB Interface>
          Configuration index 2
             iConfiguration = 0x0007  <PTP + Apple Mobile Device>
          Configuration index 3
             iConfiguration = 0x0008  <PTP + Apple Mobile Device + Apple USB Ethernet>

In this example, there are 4 different configurations available.  The
configuration with index 3 seems to be related to Ethernet.  It is time
to configure the device:

         # usbconfig -d 0.2 set_config 3
         # usbconfig | grep 'Apple.*cfg=3'
         ugen0.2: <Apple Inc. iPhone> at usbus0, cfg=3 md=HOST spd=HIGH (480Mbps) pwr=ON (500mA)

At this point the Apple device should ask whether the FreeBSD machine
can be trusted ("Mobile Data" has to be on).

A new ue USB Ethernet interface should become available:

         # dmesg | grep 'ue[0-9]'
         ue0: <USB Ethernet> on ipheth0
         ue0: bpf attached
         ue0: Ethernet address: 4e:7c:5f:2c:5f:7a

At this point it might be necessary to run usbmuxd(1) (available in
ports(7) at comms/usbmuxd):

         # usbmuxd --enable-exit --foreground --user root --verbose

Now it is time to configure the network interface:

         # sysrc ifconfig_ue0="SYNCDHCP"
         ifconfig_ue0:  -> SYNCDHCP
         # service netif restart ue0

That is it.  The machine should now be connected to the network via USB
tethering.

The ipheth driver was written by Hans Petter Selasky
<[email protected]>.