filter: let the user tag modems explicitly
The user can tag modems (either full devices or ports independently) to be explicitly probed by ModemManager, using the new "ID_MM_DEVICE_PROCESS" udev tag, e.g.: $ sudo vim /lib/udev/rules.d/78-mm-whitelist-internal-modem.rules ACTION!="add|change|move", GOTO="mm_whitelist_internal_modem_end" ATTRS{idVendor}=="1199", ATTRS{idProduct}=="a001", ENV{ID_MM_DEVICE_PROCESS}="1" LABEL="mm_whitelist_internal_modem_end" $ sudo udevadm control --reload $ sudo udevadm trigger This rule runs before any other filter rule. This tag may be used e.g. by manufacturers building systems with built-in modems that will always be available. Distributions targeting support for multiple modem devices shouldn't use this udev tag.
This commit is contained in:
@@ -45,6 +45,16 @@ mm_filter_port (MMFilter *self,
|
||||
subsystem = mm_kernel_device_get_subsystem (port);
|
||||
name = mm_kernel_device_get_name (port);
|
||||
|
||||
/* If the device is explicitly whitelisted, we process every port. Also
|
||||
* allow specifying this flag per-port instead of for the full device, e.g.
|
||||
* for platform tty ports where there's only one port anyway. */
|
||||
if ((self->priv->enabled_rules & MM_FILTER_RULE_EXPLICIT_WHITELIST) &&
|
||||
(mm_kernel_device_get_global_property_as_boolean (port, "ID_MM_DEVICE_PROCESS") ||
|
||||
mm_kernel_device_get_property_as_boolean (port, "ID_MM_DEVICE_PROCESS"))) {
|
||||
mm_dbg ("[filter] (%s/%s) port allowed: device is whitelisted", subsystem, name);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* If this is a virtual device, don't allow it */
|
||||
if ((self->priv->enabled_rules & MM_FILTER_RULE_VIRTUAL) &&
|
||||
(!mm_kernel_device_get_physdev_sysfs_path (port))) {
|
||||
@@ -156,6 +166,7 @@ mm_filter_new (MMFilterRule enabled_rules)
|
||||
#define RULE_ENABLED_STR(flag) ((self->priv->enabled_rules & flag) ? "yes" : "no")
|
||||
|
||||
mm_dbg ("[filter] created");
|
||||
mm_dbg ("[filter] explicit whitelist: %s", RULE_ENABLED_STR (MM_FILTER_RULE_EXPLICIT_WHITELIST));
|
||||
mm_dbg ("[filter] virtual devices forbidden: %s", RULE_ENABLED_STR (MM_FILTER_RULE_VIRTUAL));
|
||||
mm_dbg ("[filter] net devices allowed: %s", RULE_ENABLED_STR (MM_FILTER_RULE_NET));
|
||||
mm_dbg ("[filter] cdc-wdm devices allowed: %s", RULE_ENABLED_STR (MM_FILTER_RULE_CDC_WDM));
|
||||
|
@@ -45,17 +45,19 @@ GType mm_filter_get_type (void);
|
||||
|
||||
typedef enum { /*< underscore_name=mm_filter_rule >*/
|
||||
MM_FILTER_RULE_NONE = 0,
|
||||
MM_FILTER_RULE_VIRTUAL = 1 << 0,
|
||||
MM_FILTER_RULE_NET = 1 << 1,
|
||||
MM_FILTER_RULE_CDC_WDM = 1 << 2,
|
||||
MM_FILTER_RULE_TTY = 1 << 3,
|
||||
MM_FILTER_RULE_TTY_BLACKLIST = 1 << 4,
|
||||
MM_FILTER_RULE_TTY_MANUAL_SCAN_ONLY = 1 << 5,
|
||||
MM_FILTER_RULE_TTY_PLATFORM_DRIVER = 1 << 6,
|
||||
MM_FILTER_RULE_EXPLICIT_WHITELIST = 1 << 0,
|
||||
MM_FILTER_RULE_VIRTUAL = 1 << 1,
|
||||
MM_FILTER_RULE_NET = 1 << 2,
|
||||
MM_FILTER_RULE_CDC_WDM = 1 << 3,
|
||||
MM_FILTER_RULE_TTY = 1 << 4,
|
||||
MM_FILTER_RULE_TTY_BLACKLIST = 1 << 5,
|
||||
MM_FILTER_RULE_TTY_MANUAL_SCAN_ONLY = 1 << 6,
|
||||
MM_FILTER_RULE_TTY_PLATFORM_DRIVER = 1 << 7,
|
||||
} MMFilterRule;
|
||||
|
||||
#define MM_FILTER_RULE_ALL \
|
||||
(MM_FILTER_RULE_VIRTUAL | \
|
||||
(MM_FILTER_RULE_EXPLICIT_WHITELIST | \
|
||||
MM_FILTER_RULE_VIRTUAL | \
|
||||
MM_FILTER_RULE_NET | \
|
||||
MM_FILTER_RULE_CDC_WDM | \
|
||||
MM_FILTER_RULE_TTY | \
|
||||
|
Reference in New Issue
Block a user