diff options
author | Beniamino Galvani <bgalvani@redhat.com> | 2017-07-22 09:39:42 +0200 |
---|---|---|
committer | Beniamino Galvani <bgalvani@redhat.com> | 2017-08-30 11:42:19 +0200 |
commit | 4f5a4d3a8b75f0d60f8124f59dcdcfe8e2888c05 (patch) | |
tree | b8a8fffcb31ce7d885a0ac9dba007b03dee0cf76 | |
parent | 6a5ac98a1469eb7d703f7719e3af0cf7444250b4 (diff) | |
download | network-manager-applet-4f5a4d3a8b75f0d60f8124f59dcdcfe8e2888c05.tar.gz |
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
-rw-r--r-- | src/connection-editor/ce-page-bridge.ui | 35 | ||||
-rw-r--r-- | 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 639b133b..5f5935a5 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 62881bfa..2213114e 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 |