[network-manager-applet] editor: bridge: add support for group-forward-mask property



commit 4f5a4d3a8b75f0d60f8124f59dcdcfe8e2888c05
Author: Beniamino Galvani <bgalvani redhat com>
Date:   Sat Jul 22 09:39:42 2017 +0200

    editor: bridge: add support for group-forward-mask property
    
    Since the property is available from libnm 1.10 but we only require
    1.8 at the moment, detect support at runtime.
    
    https://bugzilla.redhat.com/show_bug.cgi?id=1358615

 src/connection-editor/ce-page-bridge.ui |   35 ++++++++++++++++++++++++++
 src/connection-editor/page-bridge.c     |   41 ++++++++++++++++++++++++++++--
 2 files changed, 73 insertions(+), 3 deletions(-)
---
diff --git a/src/connection-editor/ce-page-bridge.ui b/src/connection-editor/ce-page-bridge.ui
index 639b133..5f5935a 100644
--- a/src/connection-editor/ce-page-bridge.ui
+++ b/src/connection-editor/ce-page-bridge.ui
@@ -13,6 +13,11 @@
     <property name="step_increment">1</property>
     <property name="page_increment">100</property>
   </object>
+  <object class="GtkAdjustment" id="bridge_group_fwd_mask_adjustment">
+    <property name="upper">65528</property>
+    <property name="step_increment">8</property>
+    <property name="page_increment">256</property>
+  </object>
   <object class="GtkAdjustment" id="bridge_hello_time_adjustment">
     <property name="lower">1</property>
     <property name="upper">10</property>
@@ -463,5 +468,35 @@
         <property name="top_attach">3</property>
       </packing>
     </child>
+    <child>
+      <object class="GtkLabel" id="bridge_group_fwd_mask_label">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="label" translatable="yes">Group _forward mask:</property>
+        <property name="use_underline">True</property>
+        <property name="mnemonic_widget">bridge_group_fwd_mask</property>
+        <property name="xalign">0</property>
+      </object>
+      <packing>
+        <property name="left_attach">0</property>
+        <property name="top_attach">10</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkSpinButton" id="bridge_group_fwd_mask">
+        <property name="visible">True</property>
+        <property name="can_focus">True</property>
+        <property name="hexpand">True</property>
+        <property name="invisible_char">●</property>
+        <property name="text" translatable="yes">0</property>
+        <property name="adjustment">bridge_group_fwd_mask_adjustment</property>
+        <property name="climb_rate">1</property>
+        <property name="numeric">True</property>
+      </object>
+      <packing>
+        <property name="left_attach">1</property>
+        <property name="top_attach">10</property>
+      </packing>
+    </child>
   </object>
 </interface>
diff --git a/src/connection-editor/page-bridge.c b/src/connection-editor/page-bridge.c
index 62881bf..2213114 100644
--- a/src/connection-editor/page-bridge.c
+++ b/src/connection-editor/page-bridge.c
@@ -42,9 +42,16 @@ typedef struct {
        GtkSpinButton *forward_delay;
        GtkSpinButton *hello_time;
        GtkSpinButton *max_age;
+       GtkSpinButton *group_fwd_mask;
+       GtkLabel *group_fwd_mask_label;
 
 } CEPageBridgePrivate;
 
+/* The group_fwd_mask property is available in libnm 1.10, but since we only
+ * require 1.8 at the moment, enable it only when detected at runtime.
+ */
+static gboolean group_fwd_mask_supported;
+
 static void
 bridge_private_init (CEPageBridge *self)
 {
@@ -60,6 +67,8 @@ bridge_private_init (CEPageBridge *self)
        priv->forward_delay = GTK_SPIN_BUTTON (gtk_builder_get_object (builder, "bridge_forward_delay"));
        priv->hello_time = GTK_SPIN_BUTTON (gtk_builder_get_object (builder, "bridge_hello_time"));
        priv->max_age = GTK_SPIN_BUTTON (gtk_builder_get_object (builder, "bridge_max_age"));
+       priv->group_fwd_mask = GTK_SPIN_BUTTON (gtk_builder_get_object (builder, "bridge_group_fwd_mask"));
+       priv->group_fwd_mask_label = GTK_LABEL (gtk_builder_get_object (builder, 
"bridge_group_fwd_mask_label"));
 
        priv->toplevel = GTK_WINDOW (gtk_widget_get_ancestor (GTK_WIDGET (priv->stp),
                                                              GTK_TYPE_WINDOW));
@@ -97,8 +106,11 @@ populate_ui (CEPageBridge *self)
        CEPageBridgePrivate *priv = CE_PAGE_BRIDGE_GET_PRIVATE (self);
        NMSettingBridge *s_bridge = priv->setting;
        gboolean stp, mcast_snoop;
-       int priority, forward_delay, hello_time, max_age;
-       int ageing_time;
+       int priority, forward_delay, hello_time, max_age, ageing_time;
+       guint32 group_fwd_mask;
+
+       gtk_widget_set_visible (GTK_WIDGET (priv->group_fwd_mask), group_fwd_mask_supported);
+       gtk_widget_set_visible (GTK_WIDGET (priv->group_fwd_mask_label), group_fwd_mask_supported);
 
        /* Ageing time */
        ageing_time = nm_setting_bridge_get_ageing_time (s_bridge);
@@ -147,6 +159,15 @@ populate_ui (CEPageBridge *self)
        g_signal_connect (priv->max_age, "value-changed",
                          G_CALLBACK (stuff_changed),
                          self);
+
+       /* Group forward mask */
+       if (group_fwd_mask_supported) {
+               g_object_get (s_bridge, "group-forward-mask", &group_fwd_mask, NULL);
+               gtk_spin_button_set_value (priv->group_fwd_mask, (gdouble) group_fwd_mask);
+               g_signal_connect (priv->group_fwd_mask, "value-changed",
+                                 G_CALLBACK (stuff_changed),
+                                 self);
+       }
 }
 
 static void
@@ -234,7 +255,7 @@ static void
 ui_to_setting (CEPageBridge *self)
 {
        CEPageBridgePrivate *priv = CE_PAGE_BRIDGE_GET_PRIVATE (self);
-       int ageing_time, priority, forward_delay, hello_time, max_age;
+       int ageing_time, priority, forward_delay, hello_time, max_age, group_fwd_mask;
        gboolean stp, mcast_snoop;
 
        ageing_time = gtk_spin_button_get_value_as_int (priv->ageing_time);
@@ -246,6 +267,13 @@ ui_to_setting (CEPageBridge *self)
                      NM_SETTING_BRIDGE_STP, stp,
                      NULL);
 
+       if (group_fwd_mask_supported) {
+               group_fwd_mask = gtk_spin_button_get_value_as_int (priv->group_fwd_mask);
+               g_object_set (G_OBJECT (priv->setting),
+                             "group-forward-mask", (guint32) group_fwd_mask,
+                             NULL);
+       }
+
        if (stp) {
                priority = gtk_spin_button_get_value_as_int (priv->priority);
                forward_delay = gtk_spin_button_get_value_as_int (priv->forward_delay);
@@ -285,6 +313,7 @@ ce_page_bridge_class_init (CEPageBridgeClass *bridge_class)
        GObjectClass *object_class = G_OBJECT_CLASS (bridge_class);
        CEPageClass *parent_class = CE_PAGE_CLASS (bridge_class);
        CEPageMasterClass *master_class = CE_PAGE_MASTER_CLASS (bridge_class);
+       GObjectClass *setting_class;
 
        g_type_class_add_private (object_class, sizeof (CEPageBridgePrivate));
 
@@ -292,6 +321,12 @@ ce_page_bridge_class_init (CEPageBridgeClass *bridge_class)
        parent_class->ce_page_validate_v = ce_page_validate_v;
        master_class->create_connection = create_connection;
        master_class->add_slave = add_slave;
+
+       /* check whether libnm supports the bridge.group-forward-mask property */
+       setting_class = g_type_class_ref (NM_TYPE_SETTING_BRIDGE);
+       group_fwd_mask_supported = !!g_object_class_find_property (setting_class,
+                                                                  "group-forward-mask");
+       g_type_class_unref (setting_class);
 }
 
 void


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