net-util: match on the driver as exposed by ethtool if DRIVER not set

Also fix a copy-paste error that broke matching on interface name.
This commit is contained in:
Tom Gundersen 2014-02-21 22:29:25 +01:00
parent 95f41b7298
commit bf175aafd2
7 changed files with 18 additions and 7 deletions

View file

@ -216,8 +216,9 @@
<listitem>
<para>The driver currently bound to the device, as
exposed by the udev property <literal>DRIVER</literal>
of its parent device.
</para>
of its parent device, or if that is not set the driver
as exposed by <literal>ethtool -i</literal> of the
device itself.</para>
</listitem>
</varlistentry>
<varlistentry>

View file

@ -807,7 +807,9 @@
<term><varname>Driver=</varname></term>
<listitem>
<para>The driver currently bound to the device, as exposed by the
udev property <literal>DRIVER</literal> of its parent device.</para>
udev property <literal>DRIVER</literal> of its parent device, or if
that is not set the driver as exposed by <literal>ethtool -i</literal>
of the device itself.</para>
</listitem>
</varlistentry>
<varlistentry>

View file

@ -366,7 +366,7 @@ static int netdev_load_one(Manager *manager, const char *filename) {
if (net_match_config(NULL, NULL, NULL, NULL, NULL,
netdev->match_host, netdev->match_virt,
netdev->match_kernel, netdev->match_arch,
NULL, NULL, NULL, NULL, NULL) <= 0)
NULL, NULL, NULL, NULL, NULL, NULL) <= 0)
return 0;
r = hashmap_put(netdev->manager->netdevs, netdev->name, netdev);

View file

@ -181,6 +181,7 @@ int network_get(Manager *manager, struct udev_device *device, Network **ret) {
udev_device_get_sysattr_value(device, "address"),
udev_device_get_property_value(device, "ID_PATH"),
udev_device_get_driver(udev_device_get_parent(device)),
udev_device_get_property_value(device, "ID_NET_DRIVER"),
udev_device_get_devtype(device),
udev_device_get_sysname(device))) {
log_debug("%s: found matching network '%s'",

View file

@ -42,6 +42,7 @@ bool net_match_config(const struct ether_addr *match_mac,
Condition *match_arch,
const char *dev_mac,
const char *dev_path,
const char *dev_parent_driver,
const char *dev_driver,
const char *dev_type,
const char *dev_name) {
@ -64,13 +65,17 @@ bool net_match_config(const struct ether_addr *match_mac,
if (match_path && (!dev_path || fnmatch(match_path, dev_path, 0)))
return 0;
if (match_driver && !streq_ptr(match_driver, dev_driver))
return 0;
if (match_driver) {
if (dev_parent_driver && !streq(match_driver, dev_parent_driver))
return 0;
else if (!streq_ptr(match_driver, dev_driver))
return 0;
}
if (match_type && !streq_ptr(match_type, dev_type))
return 0;
if (match_name && (!dev_path || fnmatch(match_name, dev_name, 0)))
if (match_name && (!dev_name || fnmatch(match_name, dev_name, 0)))
return 0;
return 1;

View file

@ -38,6 +38,7 @@ bool net_match_config(const struct ether_addr *match_mac,
Condition *match_arch,
const char *dev_mac,
const char *dev_path,
const char *dev_parent_driver,
const char *dev_driver,
const char *dev_type,
const char *dev_name);

View file

@ -247,6 +247,7 @@ int link_config_get(link_config_ctx *ctx, struct udev_device *device, link_confi
udev_device_get_sysattr_value(device, "address"),
udev_device_get_property_value(device, "ID_PATH"),
udev_device_get_driver(udev_device_get_parent(device)),
udev_device_get_property_value(device, "ID_NET_DRIVER"),
udev_device_get_devtype(device),
NULL)) {
log_debug("Config file %s applies to device %s",