summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrancesco Giudici <fgiudici@redhat.com>2018-06-12 11:57:54 +0200
committerFrancesco Giudici <fgiudici@redhat.com>2018-06-15 14:19:50 +0200
commit064ea1c58e9051491a6401c70d98aa4f727c497d (patch)
tree0b69b78373e76e45ed5dd6d97d3ac38846ea27f0
parent356addb9e61a0a1f5929ba10cd4084b65cf9df1b (diff)
downloadNetworkManager-064ea1c58e9051491a6401c70d98aa4f727c497d.tar.gz
device: enforce specific speed/duplex modes in link auto-configuration
-rw-r--r--src/devices/nm-device-ethernet.c25
1 files changed, 12 insertions, 13 deletions
diff --git a/src/devices/nm-device-ethernet.c b/src/devices/nm-device-ethernet.c
index f542be1afc..87d16dbe37 100644
--- a/src/devices/nm-device-ethernet.c
+++ b/src/devices/nm-device-ethernet.c
@@ -780,13 +780,11 @@ link_negotiation_set (NMDevice *device)
s_wired = (NMSettingWired *) nm_device_get_applied_setting (device, NM_TYPE_SETTING_WIRED);
if (s_wired) {
autoneg = nm_setting_wired_get_auto_negotiate (s_wired);
- if (!autoneg) {
- speed = nm_setting_wired_get_speed (s_wired);
- duplex = link_duplex_to_platform (nm_setting_wired_get_duplex (s_wired));
- if (!speed && !duplex) {
- _LOGD (LOGD_DEVICE, "set-link: ignore link negotiation");
- return;
- }
+ speed = nm_setting_wired_get_speed (s_wired);
+ duplex = link_duplex_to_platform (nm_setting_wired_get_duplex (s_wired));
+ if (!autoneg && !speed && !duplex) {
+ _LOGD (LOGD_DEVICE, "set-link: ignore link negotiation");
+ return;
}
}
@@ -797,17 +795,18 @@ link_negotiation_set (NMDevice *device)
}
/* If link negotiation setting are already in place do nothing and return with success */
- if ( (!!autoneg == !!link_autoneg)
- && (!speed || (speed == link_speed))
- && (!duplex || (duplex == link_duplex))) {
+ if ( !!autoneg == !!link_autoneg
+ && speed == link_speed
+ && duplex == link_duplex) {
_LOGD (LOGD_DEVICE, "set-link: link negotiation is already configured");
return;
}
- if (autoneg)
- _LOGD (LOGD_DEVICE, "set-link: configure autonegotiation");
+ if (autoneg && !speed && !duplex)
+ _LOGD (LOGD_DEVICE, "set-link: configure auto-negotiation");
else {
- _LOGD (LOGD_DEVICE, "set-link: configure static negotiation (%u Mbit%s - %s duplex%s)",
+ _LOGD (LOGD_DEVICE, "set-link: configure %snegotiation (%u Mbit%s - %s duplex%s)",
+ autoneg ? "auto-" : "static ",
speed ?: link_speed,
speed ? "" : "*",
duplex