Skip to content

QMAP data aggregation support in QMI modems

Aleksander Morgado requested to merge aleksm/ModemManager:aleksander/qmap into master

This merge request introduces support for QMAP data aggregation in QMI modems, what allows us to e.g. connect to multiple APNs at the same time using one single network interface exposed by the module.

The support is implemented for both the generic qmi_wwan add_mux/del_mux logic and for the newest qmi_wwan+rmnet integration with the pass_through sysfs setting. NOTE: for qmi_wwan+rmnet use with libqmi!215 (closed)

This branch makes it the multiplexed support the default one if available in the system, so that it can be easily tested e.g. with NetworkManager as it would not require any additional API change. The multiplex support can be fully disabled with "multiplex=none" in the bearer settings and fully required with "multiplex=required". By default, if the setting is not given, it will default to "multiplex=requested" (use it if found, otherwise don't use it).

Primarily tested with one single APN for now, just working and reworking the single-connection usecase first, before going on to add and test the multiple-APN connections over multiple multiplexed links.

The merge request is organized as follows:

These initial commits define several API additions and changes, and rework the codebase to support them:

  • api,simple: new 'multiplex' setting in bearer properties
  • api,modem: deprecate the 'MaxBearers' property
  • api,modem: new 'MaxActiveMultiplexedBearers' property
  • api,bearer: new 'Multiplexed' property
  • docs: add api indices for 1.18

These commits rework the way the link layer protocol is configured in the QMI device, and add support for the QMAP data aggregation selection logic.

  • port-qmi: keep track of the endpoint info
  • port-qmi: rework WDA-based logic and avoid setup during port open
  • port-net: new 'MMPortNet' object with netlink capabilities
  • port-qmi: implement port reset logic
  • broadband-modem-qmi: reset all QMI/NET ports on initialization
  • port-qmi: add support for QMAP data aggregation

These commits add support for handling virtual network interface links created/deleted during runtime, so that they are associated to the correct modem object automatically:

  • kernel-device: new 'lower device' property for physdev info
  • kernel-device: new helper to load lower device link names
  • kernel-device-udev: setup 'lower device' for virtual ports
  • kernel-device-generic: setup 'lower device' for virtual ports
  • base-modem: allow grabbing link ports after modem is created
  • base-modem: new method to wait for an explicit link port

These commits extend the codebase to allow creating new virtual network interface links, both with qmi_wwan add_mux/del_mux or with rmnet (depending on the support found in the kernel):

  • port-qmi: new methods to setup/cleanup net links
  • port-qmi: don't allow switching to non-multiplexed mode if links exist

These commits add both the QMAP setup and the network interface link setup to the QMI bearer connection logic:

  • bearer-qmi: create data port link if multiplex is requested/required
  • bearer-qmi: bring master interface up on connection attempt
  • port-qmi: setup master MTU link to max aggregation data size
  • port-qmi: compute max amount of multiplexed links supported

These commits define the default behavior in different setups:

  • port-qmi: flag multiplexing as unsupported in RPMSG/BAM-DMUX
  • bearer-qmi: if no explicit 'multiplex' setting, default to 'requested'

Merge request reports