[network-manager-applet/jk/team-bond-mtu-rh1255927: 1/3] editor: allow setting MTU for a team (rh #1255927)



commit a8093afdf42e3a76806bc7a9a74f4e6805e598b1
Author: Jiří Klimeš <jklimes redhat com>
Date:   Tue Jan 6 19:14:27 2015 +0100

    editor: allow setting MTU for a team (rh #1255927)
    
    MTU is the 802-3-ethernet.mtu key, make sure wired setting exists.
    
    The same change as for bond in commit b1c5b4096eded4e1c5ad2e6f12a9bc113fece6ec,
    but fixed saving MTU = 0.
    
    https://bugzilla.redhat.com/show_bug.cgi?id=1255927

 src/connection-editor/ce-page-team.ui |   72 ++++++++++++++++++++++++++++++---
 src/connection-editor/page-team.c     |   38 +++++++++++++++++
 2 files changed, 104 insertions(+), 6 deletions(-)
---
diff --git a/src/connection-editor/ce-page-team.ui b/src/connection-editor/ce-page-team.ui
index a751fdb..a0ae421 100644
--- a/src/connection-editor/ce-page-team.ui
+++ b/src/connection-editor/ce-page-team.ui
@@ -9,6 +9,11 @@
       <column type="gchararray"/>
     </columns>
   </object>
+  <object class="GtkAdjustment" id="team_mtu_adjustment">
+    <property name="upper">10000</property>
+    <property name="step_increment">1</property>
+    <property name="page_increment">10</property>
+  </object>
   <object class="GtkGrid" id="TeamPage">
     <property name="visible">True</property>
     <property name="can_focus">False</property>
@@ -26,7 +31,7 @@
       </object>
       <packing>
         <property name="left_attach">0</property>
-        <property name="top_attach">1</property>
+        <property name="top_attach">2</property>
         <property name="width">2</property>
         <property name="height">1</property>
       </packing>
@@ -42,7 +47,7 @@
       </object>
       <packing>
         <property name="left_attach">0</property>
-        <property name="top_attach">3</property>
+        <property name="top_attach">4</property>
         <property name="width">2</property>
         <property name="height">1</property>
       </packing>
@@ -63,14 +68,14 @@
       </object>
       <packing>
         <property name="left_attach">0</property>
-        <property name="top_attach">4</property>
+        <property name="top_attach">5</property>
         <property name="width">2</property>
         <property name="height">1</property>
       </packing>
     </child>
     <child>
       <object class="GtkButton" id="import_config_button">
-        <property name="label" translatable="yes">I_mport team configuration from a file...</property>
+        <property name="label" translatable="yes">Im_port team configuration from a file...</property>
         <property name="visible">True</property>
         <property name="can_focus">True</property>
         <property name="use_underline">True</property>
@@ -78,7 +83,7 @@
       </object>
       <packing>
         <property name="left_attach">0</property>
-        <property name="top_attach">5</property>
+        <property name="top_attach">6</property>
         <property name="width">2</property>
         <property name="height">1</property>
       </packing>
@@ -181,7 +186,7 @@
       </object>
       <packing>
         <property name="left_attach">0</property>
-        <property name="top_attach">2</property>
+        <property name="top_attach">3</property>
         <property name="width">2</property>
       </packing>
     </child>
@@ -211,5 +216,60 @@
         <property name="top_attach">0</property>
       </packing>
     </child>
+    <child>
+      <object class="GtkLabel" id="team_mtu_label">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="xalign">0</property>
+        <property name="label" translatable="yes">_MTU:</property>
+        <property name="use_underline">True</property>
+        <property name="mnemonic_widget">team_mtu</property>
+      </object>
+      <packing>
+        <property name="left_attach">0</property>
+        <property name="top_attach">1</property>
+        <property name="width">1</property>
+        <property name="height">1</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkHBox" id="team_mtu_box">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="spacing">4</property>
+        <child>
+          <object class="GtkSpinButton" id="team_mtu">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="adjustment">team_mtu_adjustment</property>
+            <property name="climb_rate">1</property>
+          </object>
+          <packing>
+            <property name="expand">True</property>
+            <property name="fill">True</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkLabel" id="label29">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="xalign">0</property>
+            <property name="label" translatable="yes">bytes</property>
+          </object>
+          <packing>
+            <property name="expand">True</property>
+            <property name="fill">True</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+      </object>
+      <packing>
+        <property name="left_attach">1</property>
+        <property name="top_attach">1</property>
+        <property name="width">1</property>
+        <property name="height">1</property>
+      </packing>
+    </child>
   </object>
 </interface>
diff --git a/src/connection-editor/page-team.c b/src/connection-editor/page-team.c
index 26e3432..9efa43d 100644
--- a/src/connection-editor/page-team.c
+++ b/src/connection-editor/page-team.c
@@ -38,6 +38,7 @@ G_DEFINE_TYPE (CEPageTeam, ce_page_team, CE_TYPE_PAGE_MASTER)
 
 typedef struct {
        NMSettingTeam *setting;
+       NMSettingWired *wired;
 
        int slave_arptype;
 
@@ -45,6 +46,7 @@ typedef struct {
 
        GtkTextView *json_config_widget;
        GtkWidget *import_config_button;
+       GtkSpinButton *mtu;
 } CEPageTeamPrivate;
 
 static void
@@ -68,12 +70,19 @@ team_private_init (CEPageTeam *self)
 
        priv->json_config_widget = GTK_TEXT_VIEW (gtk_builder_get_object (builder, "team_json_config"));
        priv->import_config_button = GTK_WIDGET (gtk_builder_get_object (builder, "import_config_button"));
+       priv->mtu = GTK_SPIN_BUTTON (gtk_builder_get_object (builder, "team_mtu"));
 
        /* Wait for widget to be realized to get toplevel window */
        g_signal_connect (priv->json_config_widget, "realize", G_CALLBACK (widget_realized_cb), self);
 }
 
 static void
+stuff_changed (GtkWidget *w, gpointer user_data)
+{
+       ce_page_changed (CE_PAGE (user_data));
+}
+
+static void
 json_config_changed (GObject *object, CEPageTeam *self)
 {
        ce_page_changed (CE_PAGE (self));
@@ -130,6 +139,7 @@ populate_ui (CEPageTeam *self)
        NMSettingTeam *s_team = priv->setting;
        GtkTextBuffer *buffer;
        const char *json_config;
+       guint32 mtu_def, mtu_val;
 
        buffer = gtk_text_view_get_buffer (priv->json_config_widget);
        json_config = nm_setting_team_get_config (s_team);
@@ -137,6 +147,18 @@ populate_ui (CEPageTeam *self)
 
        g_signal_connect (buffer, "changed", G_CALLBACK (json_config_changed), self);
        g_signal_connect (priv->import_config_button, "clicked", G_CALLBACK (import_button_clicked_cb), self);
+
+       /* MTU */
+       if (priv->wired) {
+               mtu_def = ce_get_property_default (NM_SETTING (priv->wired), NM_SETTING_WIRED_MTU);
+               mtu_val = nm_setting_wired_get_mtu (priv->wired);
+       } else {
+               mtu_def = mtu_val = 0;
+       }
+       g_signal_connect (priv->mtu, "output",
+                         G_CALLBACK (ce_spin_output_with_automatic),
+                         GINT_TO_POINTER (mtu_def));
+       gtk_spin_button_set_value (priv->mtu, (gdouble) mtu_val);
 }
 
 static void
@@ -217,10 +239,14 @@ add_slave (CEPageMaster *master, NewConnectionResultFunc result_func)
 static void
 finish_setup (CEPageTeam *self, gpointer unused, GError *error, gpointer user_data)
 {
+       CEPageTeamPrivate *priv = CE_PAGE_TEAM_GET_PRIVATE (self);
+
        if (error)
                return;
 
        populate_ui (self);
+
+       g_signal_connect (priv->mtu, "value-changed", G_CALLBACK (stuff_changed), self);
 }
 
 CEPage *
@@ -256,6 +282,7 @@ ce_page_team_new (NMConnection *connection,
                priv->setting = NM_SETTING_TEAM (nm_setting_team_new ());
                nm_connection_add_setting (connection, NM_SETTING (priv->setting));
        }
+       priv->wired = nm_connection_get_setting_wired (connection);
 
        g_signal_connect (self, "initialized", G_CALLBACK (finish_setup), NULL);
 
@@ -266,9 +293,11 @@ static void
 ui_to_setting (CEPageTeam *self)
 {
        CEPageTeamPrivate *priv = CE_PAGE_TEAM_GET_PRIVATE (self);
+       NMConnection *connection = CE_PAGE (self)->connection;
        GtkTextBuffer *buffer;
        GtkTextIter start, end;
        char *json_config;
+       guint32 mtu;
 
        buffer = gtk_text_view_get_buffer (priv->json_config_widget);
        gtk_text_buffer_get_iter_at_offset (buffer, &start, 0);
@@ -281,6 +310,15 @@ ui_to_setting (CEPageTeam *self)
                      NM_SETTING_TEAM_CONFIG, json_config,
                      NULL);
        g_free (json_config);
+
+       mtu = gtk_spin_button_get_value_as_int (priv->mtu);
+       if (mtu && !priv->wired) {
+               priv->wired = NM_SETTING_WIRED (nm_setting_wired_new ());
+               nm_connection_add_setting (connection, NM_SETTING (priv->wired));
+       }
+       if (priv->wired)
+               g_object_set (priv->wired, NM_SETTING_WIRED_MTU, mtu, NULL);
+
 }
 
 static gboolean


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]