=== umb(4) driver for MBIM USB 4G/5G modems

Links: +
link:https://man.openbsd.org/umb[UMB(4) - OpenBSD Device Drivers Manual] URL: link:https://man.openbsd.org/umb[] +
link:https://man.netbsd.org/umb.4[UMB(4) - NetBSD Kernel Interfaces Manual] URL: link:https://man.netbsd.org/umb.4[] +
link:https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=263783[Bug 263783 - USB MBIM: Support for LTE/4G USB modems] URL: link:https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=263783[] +
link:https://reviews.freebsd.org/D48167[Introduce the USB umb(4) network driver] URL: link:https://reviews.freebsd.org/D48167[]

Contact: Pierre Pronchery <pierre@freebsdfoundation.org>

The Mobile Broadband Interface Model (MBIM) is a protocol for communication with network USB devices, transmitting packet data over mobile broadband networks.
Implementing this protocol adds support for a whole range of USB devices providing connectivity to mobile networks, such as 4G, 5G, and their subsequent technological evolutions.

A first implementation for this protocol was performed for OpenBSD in 2016, under the name umb(4).
I have ported it myself to NetBSD under the same name, back in 2019.
I was then contracted to make it work with OPNSense, and authorized to publish it as Open Source in 2022.
Unfortunately, by this time, some changes in FreeBSD effectively broke the driver, and it could not be merged until fixed.

This quarter I have managed to offer an updated version and confirmed it working (thanks Mike and Zhenlei!).
This version is now under review in Phabricator as D48167.
The submission is still based on code from 2020, and behind progress made by OpenBSD since that time.
As such, it is currently restricted to IPv4.
However, I believe it makes sense to keep the review simple and focus on the design decisions and integration, before progressively importing the improvements made upstream since then in OpenBSD (notably IPv6 support).

In its current form, the driver was modified from being out of tree and available as a plug-in for OPNSense, into a kernel module and its companion binary, umbconfig(8).
This management binary effectively allows the umb(4) driver to be configured beyond the capabilities of ifconfig(8): the PIN or PUK code, APN, username/password, or roaming parameters can be setup, and the connectivity tracked as well (network provider, speed...).

Should you want to give it a spin yourself and get hardware supported by this driver, the single most important feature to look for is support for the MBIM specification.
The manual page for OpenBSD provides a list of devices that should be compliant; note that some of them require preliminary configuration in order to effectively expose the MBIM interface.
The exact procedure is vendor-specific, and can also depend on the model and current configuration of the device.
You should refer to the documentation offered for your device for any steps necessary.

Sponsored by: The FreeBSD Foundation
