[network-manager-applet/fg/c-e-ethernet-link2: 2/3] c-e: allow duplex to get the NULL value, and set it as default
- From: Francesco Giudici <fgiudici src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [network-manager-applet/fg/c-e-ethernet-link2: 2/3] c-e: allow duplex to get the NULL value, and set it as default
- Date: Fri, 25 Nov 2016 18:20:25 +0000 (UTC)
commit 9c41bc1fb51787f87eb3cc730391ff5b2f4126f3
Author: Francesco Giudici <fgiudici redhat com>
Date: Fri Nov 25 10:30:35 2016 +0100
c-e: allow duplex to get the NULL value, and set it as default
NetworkManager 802-3 link properties have been implemented in:
https://cgit.freedesktop.org/NetworkManager/NetworkManager/commit/?id=e0c50a970378daf8f066c293c613276d322cc056
'auto-negotiate' default value has been also changed to "false", as
together with 'speed' = 0 and duplex unset (NULL) instructs
NetworkManager to skip link configuration.
Before the implementation, the 'auto-negotiate', 'speed' and 'duplex'
802-3 properties were ignored, without regards of the value they were
set. The duplex property in particular was silently set to "full" by c-e
for each connection modified. This triggered NetworkManager to force a
static link configuration with duplex mode and unspecified speed (thanks
to poma for reporting this).
Now, properties are checked and enforced in NetworkManager:
https://cgit.freedesktop.org/NetworkManager/NetworkManager/commit/?id=b029e9256963b3adfde35d1e5adad50b838fdb1d
Allowed combinations are:
auto-negotiate on, speed 0, duplex NULL
auto-negotiate off, speed 0, duplex NULL (default, ignore link config)
auto-negotiate off, speed != 0, duplex !=NULL
Align nm-connection-editor to deal with NULL 'duplex' and use it as
default.
src/connection-editor/ce-page-ethernet.ui | 48 +++++++++++++++++++++++++---
src/connection-editor/page-ethernet.c | 40 ++++++++++++++++++++----
2 files changed, 75 insertions(+), 13 deletions(-)
---
diff --git a/src/connection-editor/ce-page-ethernet.ui b/src/connection-editor/ce-page-ethernet.ui
index 6b20a07..d9a0dad 100644
--- a/src/connection-editor/ce-page-ethernet.ui
+++ b/src/connection-editor/ce-page-ethernet.ui
@@ -52,6 +52,23 @@
</row>
</data>
</object>
+ <object class="GtkListStore" id="model3">
+ <columns>
+ <!-- column-name gchararray -->
+ <column type="gchararray"/>
+ </columns>
+ <data>
+ <row>
+ <col id="0" translatable="yes">Automatic</col>
+ </row>
+ <row>
+ <col id="0" translatable="yes">Half</col>
+ </row>
+ <row>
+ <col id="0" translatable="yes">Full</col>
+ </row>
+ </data>
+ </object>
<object class="GtkTable" id="EthernetPage">
<property name="visible">True</property>
<property name="can_focus">False</property>
@@ -129,16 +146,15 @@
</packing>
</child>
<child>
- <object class="GtkCheckButton" id="ethernet_duplex">
- <property name="label" translatable="yes">Full duple_x</property>
+ <object class="GtkLabel" id="ethernet_duplex_label">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">_Duplex:</property>
<property name="use_underline">True</property>
- <property name="draw_indicator">True</property>
+ <property name="mnemonic_widget">ethernet_duplex</property>
</object>
<packing>
- <property name="right_attach">2</property>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="x_options">GTK_FILL</property>
@@ -146,6 +162,26 @@
</packing>
</child>
<child>
+ <object class="GtkComboBox" id="ethernet_duplex">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="model">model3</property>
+ <child>
+ <object class="GtkCellRendererText" id="renderer3"/>
+ <attributes>
+ <attribute name="text">0</attribute>
+ </attributes>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="y_options"/>
+ </packing>
+ </child>
+ <child>
<object class="GtkCheckButton" id="ethernet_autonegotiate">
<property name="label" translatable="yes">Aut_onegotiate</property>
<property name="visible">True</property>
diff --git a/src/connection-editor/page-ethernet.c b/src/connection-editor/page-ethernet.c
index af45585..f019247 100644
--- a/src/connection-editor/page-ethernet.c
+++ b/src/connection-editor/page-ethernet.c
@@ -38,7 +38,7 @@ typedef struct {
GtkEntry *cloned_mac; /* Cloned MAC - used for MAC spoofing */
GtkComboBox *port;
GtkComboBox *speed;
- GtkToggleButton *duplex;
+ GtkComboBox *duplex;
GtkToggleButton *autonegotiate;
GtkSpinButton *mtu;
GtkToggleButton *wol_default, *wol_ignore, *wol_phy, *wol_unicast, *wol_multicast,
@@ -59,6 +59,10 @@ typedef struct {
#define SPEED_1000 3
#define SPEED_10000 4
+#define DUPLEX_DEFAULT 0
+#define DUPLEX_HALF 1
+#define DUPLEX_FULL 2
+
static void
ethernet_private_init (CEPageEthernet *self)
{
@@ -88,7 +92,7 @@ ethernet_private_init (CEPageEthernet *self)
priv->cloned_mac = GTK_ENTRY (gtk_builder_get_object (builder, "ethernet_cloned_mac"));
priv->port = GTK_COMBO_BOX (gtk_builder_get_object (builder, "ethernet_port"));
priv->speed = GTK_COMBO_BOX (gtk_builder_get_object (builder, "ethernet_speed"));
- priv->duplex = GTK_TOGGLE_BUTTON (gtk_builder_get_object (builder, "ethernet_duplex"));
+ priv->duplex = GTK_COMBO_BOX (gtk_builder_get_object (builder, "ethernet_duplex"));
priv->autonegotiate = GTK_TOGGLE_BUTTON (gtk_builder_get_object (builder, "ethernet_autonegotiate"));
priv->mtu = GTK_SPIN_BUTTON (gtk_builder_get_object (builder, "ethernet_mtu"));
priv->wol_default = GTK_TOGGLE_BUTTON (gtk_builder_get_object (builder, "wol_default"));
@@ -162,6 +166,7 @@ populate_ui (CEPageEthernet *self)
const char *duplex;
int port_idx = PORT_DEFAULT;
int speed_idx;
+ int duplex_idx = DUPLEX_DEFAULT;
int mtu_def;
const char *s_mac, *s_ifname, *s_wol_passwd;
NMSettingWiredWakeOnLan wol;
@@ -202,10 +207,13 @@ populate_ui (CEPageEthernet *self)
/* Duplex */
duplex = nm_setting_wired_get_duplex (setting);
- if (duplex && !strcmp (duplex, "half"))
- gtk_toggle_button_set_active (priv->duplex, FALSE);
- else
- gtk_toggle_button_set_active (priv->duplex, TRUE);
+ if (duplex) {
+ if (!strcmp (duplex, "half"))
+ duplex_idx = DUPLEX_HALF;
+ else
+ duplex_idx = DUPLEX_FULL;
+ }
+ gtk_combo_box_set_active (priv->duplex, duplex_idx);
/* Autonegotiate */
gtk_toggle_button_set_active (priv->autonegotiate,
@@ -277,7 +285,7 @@ finish_setup (CEPageEthernet *self, gpointer unused, GError *error, gpointer use
g_signal_connect (priv->port, "changed", G_CALLBACK (stuff_changed), self);
g_signal_connect (priv->speed, "changed", G_CALLBACK (stuff_changed), self);
- g_signal_connect (priv->duplex, "toggled", G_CALLBACK (stuff_changed), self);
+ g_signal_connect (priv->duplex, "changed", G_CALLBACK (stuff_changed), self);
g_signal_connect (priv->autonegotiate, "toggled", G_CALLBACK (stuff_changed), self);
g_signal_connect (priv->mtu, "value-changed", G_CALLBACK (stuff_changed), self);
@@ -306,8 +314,11 @@ finish_setup (CEPageEthernet *self, gpointer unused, GError *error, gpointer use
widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "ethernet_speed"));
gtk_widget_hide (widget);
+ widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "ethernet_duplex_label"));
+ gtk_widget_hide (widget);
widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "ethernet_duplex"));
gtk_widget_hide (widget);
+
widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "ethernet_autonegotiate"));
gtk_widget_hide (widget);
}
@@ -364,6 +375,7 @@ ui_to_setting (CEPageEthernet *self)
NMSettingConnection *s_con;
const char *port;
guint32 speed;
+ const char *duplex;
char *ifname = NULL;
char *device_mac = NULL;
const char *cloned_mac;
@@ -412,6 +424,19 @@ ui_to_setting (CEPageEthernet *self)
break;
}
+ /* Duplex */
+ switch (gtk_combo_box_get_active (priv->duplex)) {
+ case DUPLEX_HALF:
+ duplex = "half";
+ break;
+ case DUPLEX_FULL:
+ duplex = "full";
+ break;
+ default:
+ duplex = NULL;
+ break;
+ }
+
entry = gtk_bin_get_child (GTK_BIN (priv->device_combo));
if (entry)
ce_page_device_entry_get (GTK_ENTRY (entry), ARPHRD_ETHER, TRUE, &ifname, &device_mac, NULL,
NULL);
@@ -448,6 +473,7 @@ ui_to_setting (CEPageEthernet *self)
NM_SETTING_WIRED_CLONED_MAC_ADDRESS, cloned_mac && *cloned_mac ? cloned_mac : NULL,
NM_SETTING_WIRED_PORT, port,
NM_SETTING_WIRED_SPEED, speed,
+ NM_SETTING_WIRED_DUPLEX, duplex ? : NULL,
NM_SETTING_WIRED_AUTO_NEGOTIATE, gtk_toggle_button_get_active (priv->autonegotiate),
NM_SETTING_WIRED_WAKE_ON_LAN, wol,
NM_SETTING_WIRED_WAKE_ON_LAN_PASSWORD, wol_passwd && *wol_passwd ? wol_passwd : NULL,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]