#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
<hselasky@FreeBSD.org>.