summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBeniamino Galvani <bgalvani@redhat.com>2017-07-22 09:39:42 +0200
committerBeniamino Galvani <bgalvani@redhat.com>2017-08-30 11:42:19 +0200
commit4f5a4d3a8b75f0d60f8124f59dcdcfe8e2888c05 (patch)
treeb8a8fffcb31ce7d885a0ac9dba007b03dee0cf76
parent6a5ac98a1469eb7d703f7719e3af0cf7444250b4 (diff)
downloadnetwork-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.ui35
-rw-r--r--src/connection-editor/page-bridge.c41
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