- LIST_FOREACH(links, link, ctx->links) {
- if (!match_config(link, device)) {
- log_info("Config file %s does not apply to device %s", link->filename, udev_device_get_sysname(device));
- } else {
- log_info("Config file %s applies to device %s", link->filename, udev_device_get_sysname(device));
- *ret = link;
- return 0;
+ old_name = udev_device_get_sysname(device);
+ if (!old_name)
+ return -EINVAL;
+
+ r = ethtool_set_speed(ctx->ethtool_fd, old_name, config->speed / 1024,
+ config->duplex);
+ if (r < 0)
+ log_warning("Could not set speed or duplex of %s to %u Mbps (%s): %s",
+ old_name, config->speed / 1024,
+ duplex_to_string(config->duplex), strerror(-r));
+
+ r = ethtool_set_wol(ctx->ethtool_fd, old_name, config->wol);
+ if (r < 0)
+ log_warning("Could not set WakeOnLan of %s to %s: %s",
+ old_name, wol_to_string(config->wol), strerror(-r));
+
+ ifindex = udev_device_get_ifindex(device);
+ if (ifindex <= 0) {
+ log_warning("Could not find ifindex");
+ return -ENODEV;
+ }
+
+ if (ctx->enable_name_policy && config->name_policy) {
+ NamePolicy *policy;
+
+ for (policy = config->name_policy;
+ !new_name && *policy != _NAMEPOLICY_INVALID; policy++) {
+ switch (*policy) {
+ case NAMEPOLICY_KERNEL:
+ respect_predictable = true;
+ break;
+ case NAMEPOLICY_DATABASE:
+ new_name = udev_device_get_property_value(device, "ID_NET_NAME_FROM_DATABASE");
+ break;
+ case NAMEPOLICY_ONBOARD:
+ new_name = udev_device_get_property_value(device, "ID_NET_NAME_ONBOARD");
+ break;
+ case NAMEPOLICY_SLOT:
+ new_name = udev_device_get_property_value(device, "ID_NET_NAME_SLOT");
+ break;
+ case NAMEPOLICY_PATH:
+ new_name = udev_device_get_property_value(device, "ID_NET_NAME_PATH");
+ break;
+ case NAMEPOLICY_MAC:
+ new_name = udev_device_get_property_value(device, "ID_NET_NAME_MAC");
+ break;
+ default:
+ break;
+ }