Discussion:
$attr substitution for parent devices
Cedric Jehasse
2012-08-27 08:16:41 UTC
Permalink
Hi,

I have the following rules file:
#######################################################################################
ACTION!="add", GOTO="modeswitch_rules_end"
SUBSYSTEM!="usb", GOTO="modeswitch_rules_end"

ATTRS{bDeviceClass}=="08", GOTO="modeswitch_rules_begin"
ATTRS{bInterfaceClass}=="08", GOTO="modeswitch_rules_begin"
GOTO="modeswitch_rules_end"

LABEL="modeswitch_rules_begin"

ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1003",
RUN+="/usr/sbin/usb_modeswitch -c
/etc/usb_modeswitch.d/$attr{idVendor}:$attr{idProduct}"
ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1414",
RUN+="/usr/sbin/usb_modeswitch -c
/etc/usb_modeswitch.d/$attr{idVendor}:$attr{idProduct}"
ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1446",
RUN+="/usr/sbin/usb_modeswitch -c
/etc/usb_modeswitch.d/$attr{idVendor}:$attr{idProduct}"

LABEL="modeswitch_rules_end"
########################################################################################

When the matching rule is not the last rule in the file, $attr is
substituted by an empty string.
I've found out that by the time the RUN format gets applied
event->dev_parent is NULL, so it doesn't find the attributes for
substitution.
In udev_rules_apply_to_event event->dev_parent is used to loop over
the parent devices. If there are multiple rules trying to match parent
properties, event->dev_parent will be reset to NULL when there's a
non-matching rule following a matching rule.

Is this the expected behavior or not?
In this case the logical thing to do would be to substitute the format
while processing the rules. But the man-page says there are reasons to
apply the RUN format after all rules have been processed.

thanks,
Cedric
--
To unsubscribe from this list: send the line "unsubscribe linux-hotplug" in
the body of a message to ***@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Loading...