static void mode_widget_changed (GObject *object, GParamSpec *pspec, gpointer user_data) { NmtPageBond *bond = NMT_PAGE_BOND (user_data); NmtPageBondPrivate *priv = NMT_PAGE_BOND_GET_PRIVATE (bond); const char *mode; if (priv->updating) return; mode = nmt_newt_popup_get_active_id (priv->mode); priv->updating = TRUE; nm_setting_bond_add_option (priv->s_bond, NM_SETTING_BOND_OPTION_MODE, mode); priv->updating = FALSE; if (!strcmp (mode, "balance-tlb") || !strcmp (mode, "balance-alb")) { nmt_newt_popup_set_active (priv->monitoring, NMT_PAGE_BOND_MONITORING_MII); nmt_newt_component_set_sensitive (NMT_NEWT_COMPONENT (priv->monitoring), FALSE); } else nmt_newt_component_set_sensitive (NMT_NEWT_COMPONENT (priv->monitoring), TRUE); if (!strcmp (mode, "active-backup")) { nmt_newt_widget_set_visible (NMT_NEWT_WIDGET (priv->primary), TRUE); nm_setting_bond_add_option (priv->s_bond, NM_SETTING_BOND_OPTION_PRIMARY, nmt_newt_entry_get_text (priv->primary)); } else { nmt_newt_widget_set_visible (NMT_NEWT_WIDGET (priv->primary), FALSE); nm_setting_bond_remove_option (priv->s_bond, NM_SETTING_BOND_OPTION_PRIMARY); } }
static void update_connection (NMDevice *device, NMConnection *connection) { NMSettingBond *s_bond = nm_connection_get_setting_bond (connection); int ifindex = nm_device_get_ifindex (device); const char **options; if (!s_bond) { s_bond = (NMSettingBond *) nm_setting_bond_new (); nm_connection_add_setting (connection, (NMSetting *) s_bond); } /* Read bond options from sysfs and update the Bond setting to match */ options = nm_setting_bond_get_valid_options (s_bond); while (options && *options) { gs_free char *value = nm_platform_sysctl_master_get_option (nm_device_get_platform(device), ifindex, *options); const char *defvalue = nm_setting_bond_get_option_default (s_bond, *options); if (value && !ignore_if_zero (*options, value) && (g_strcmp0 (value, defvalue) != 0)) { /* Replace " " with "," for arp_ip_targets from the kernel */ if (strcmp (*options, "arp_ip_target") == 0) { char *p = value; while (p && *p) { if (*p == ' ') *p = ','; p++; } } nm_setting_bond_add_option (s_bond, *options, value); } options++; } }
static void read_hash_of_string (GKeyFile *file, NMSetting *setting, const char *key) { char **keys, **iter; char *value; const char *setting_name = nm_setting_get_name (setting); keys = nm_keyfile_plugin_kf_get_keys (file, setting_name, NULL, NULL); if (!keys || !*keys) return; for (iter = keys; *iter; iter++) { value = nm_keyfile_plugin_kf_get_string (file, setting_name, *iter, NULL); if (!value) continue; if (NM_IS_SETTING_VPN (setting)) { if (strcmp (*iter, NM_SETTING_VPN_SERVICE_TYPE)) nm_setting_vpn_add_data_item (NM_SETTING_VPN (setting), *iter, value); } if (NM_IS_SETTING_BOND (setting)) { if (strcmp (*iter, NM_SETTING_BOND_INTERFACE_NAME)) nm_setting_bond_add_option (NM_SETTING_BOND (setting), *iter, value); } g_free (value); } g_strfreev (keys); }
static void nm_setting_bond_init (NMSettingBond *setting) { NMSettingBondPrivate *priv = NM_SETTING_BOND_GET_PRIVATE (setting); priv->options = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free); /* Default values: */ nm_setting_bond_add_option (setting, NM_SETTING_BOND_OPTION_MODE, "balance-rr"); }
static void arp_ip_target_widget_changed (GObject *object, GParamSpec *pspec, gpointer user_data) { NmtPageBond *bond = NMT_PAGE_BOND (user_data); NmtPageBondPrivate *priv = NMT_PAGE_BOND_GET_PRIVATE (bond); char **ips, *target; if (priv->updating) return; g_object_get (G_OBJECT (priv->arp_ip_target), "strings", &ips, NULL); target = g_strjoinv (",", ips); priv->updating = TRUE; nm_setting_bond_add_option (priv->s_bond, NM_SETTING_BOND_OPTION_ARP_IP_TARGET, target); priv->updating = FALSE; g_free (target); g_strfreev (ips); }
static void ui_to_setting (CEPageBond *self) { CEPageBondPrivate *priv = CE_PAGE_BOND_GET_PRIVATE (self); NMConnection *connection = CE_PAGE (self)->connection; const char *mode; const char *frequency; const char *updelay; const char *downdelay; const char *primary = NULL; char *targets; guint32 mtu; /* Mode */ switch (gtk_combo_box_get_active (priv->mode)) { case MODE_BALANCE_RR: mode = "balance-rr"; break; case MODE_ACTIVE_BACKUP: mode = "active-backup"; primary = gtk_entry_get_text (priv->primary); break; case MODE_BALANCE_XOR: mode = "balance-xor"; break; case MODE_BROADCAST: mode = "broadcast"; break; case MODE_802_3AD: mode = "802.3ad"; break; case MODE_BALANCE_TLB: mode = "balance-tlb"; break; case MODE_BALANCE_ALB: mode = "balance-alb"; break; default: g_assert_not_reached (); break; } /* Set bond mode and primary */ nm_setting_bond_add_option (priv->setting, NM_SETTING_BOND_OPTION_MODE, mode); if (primary && *primary) nm_setting_bond_add_option (priv->setting, NM_SETTING_BOND_OPTION_PRIMARY, primary); else nm_setting_bond_remove_option (priv->setting, NM_SETTING_BOND_OPTION_PRIMARY); /* Monitoring mode/frequency */ frequency = gtk_entry_get_text (GTK_ENTRY (priv->frequency)); updelay = gtk_entry_get_text (GTK_ENTRY (priv->updelay)); downdelay = gtk_entry_get_text (GTK_ENTRY (priv->downdelay)); targets = uglify_targets (gtk_entry_get_text (priv->arp_targets)); switch (gtk_combo_box_get_active (priv->monitoring)) { case MONITORING_MII: nm_setting_bond_add_option (priv->setting, NM_SETTING_BOND_OPTION_MIIMON, frequency); nm_setting_bond_add_option (priv->setting, NM_SETTING_BOND_OPTION_UPDELAY, updelay); nm_setting_bond_add_option (priv->setting, NM_SETTING_BOND_OPTION_DOWNDELAY, downdelay); nm_setting_bond_remove_option (priv->setting, NM_SETTING_BOND_OPTION_ARP_INTERVAL); nm_setting_bond_remove_option (priv->setting, NM_SETTING_BOND_OPTION_ARP_IP_TARGET); break; case MONITORING_ARP: nm_setting_bond_add_option (priv->setting, NM_SETTING_BOND_OPTION_ARP_INTERVAL, frequency); if (targets) nm_setting_bond_add_option (priv->setting, NM_SETTING_BOND_OPTION_ARP_IP_TARGET, targets); else nm_setting_bond_remove_option (priv->setting, NM_SETTING_BOND_OPTION_ARP_IP_TARGET); nm_setting_bond_remove_option (priv->setting, NM_SETTING_BOND_OPTION_MIIMON); nm_setting_bond_remove_option (priv->setting, NM_SETTING_BOND_OPTION_UPDELAY); nm_setting_bond_remove_option (priv->setting, NM_SETTING_BOND_OPTION_DOWNDELAY); break; default: g_assert_not_reached (); break; } g_free (targets); 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 void ui_to_setting (CEPageBond *self) { CEPageBondPrivate *priv = CE_PAGE_BOND_GET_PRIVATE (self); const char *mode; const char *frequency; const char *updelay; const char *downdelay; char *targets; /* Mode */ switch (gtk_combo_box_get_active (priv->mode)) { case MODE_BALANCE_RR: mode = "balance-rr"; break; case MODE_ACTIVE_BACKUP: mode = "active-backup"; break; case MODE_BALANCE_XOR: mode = "balance-xor"; break; case MODE_BROADCAST: mode = "broadcast"; break; case MODE_802_3AD: mode = "802.3ad"; break; case MODE_BALANCE_TLB: mode = "balance-tlb"; break; case MODE_BALANCE_ALB: mode = "balance-alb"; break; default: g_assert_not_reached (); break; } /* Monitoring mode/frequency */ frequency = gtk_entry_get_text (GTK_ENTRY (priv->frequency)); updelay = gtk_entry_get_text (GTK_ENTRY (priv->updelay)); downdelay = gtk_entry_get_text (GTK_ENTRY (priv->downdelay)); targets = uglify_targets (gtk_entry_get_text (priv->arp_targets)); /* Set bond mode */ nm_setting_bond_add_option (priv->setting, NM_SETTING_BOND_OPTION_MODE, mode); switch (gtk_combo_box_get_active (priv->monitoring)) { case MONITORING_MII: nm_setting_bond_add_option (priv->setting, NM_SETTING_BOND_OPTION_MIIMON, frequency); nm_setting_bond_add_option (priv->setting, NM_SETTING_BOND_OPTION_UPDELAY, updelay); nm_setting_bond_add_option (priv->setting, NM_SETTING_BOND_OPTION_DOWNDELAY, downdelay); nm_setting_bond_remove_option (priv->setting, NM_SETTING_BOND_OPTION_ARP_INTERVAL); nm_setting_bond_remove_option (priv->setting, NM_SETTING_BOND_OPTION_ARP_IP_TARGET); break; case MONITORING_ARP: nm_setting_bond_add_option (priv->setting, NM_SETTING_BOND_OPTION_ARP_INTERVAL, frequency); if (targets) nm_setting_bond_add_option (priv->setting, NM_SETTING_BOND_OPTION_ARP_IP_TARGET, targets); else nm_setting_bond_remove_option (priv->setting, NM_SETTING_BOND_OPTION_ARP_IP_TARGET); nm_setting_bond_remove_option (priv->setting, NM_SETTING_BOND_OPTION_MIIMON); nm_setting_bond_remove_option (priv->setting, NM_SETTING_BOND_OPTION_UPDELAY); nm_setting_bond_remove_option (priv->setting, NM_SETTING_BOND_OPTION_DOWNDELAY); break; default: g_assert_not_reached (); break; } g_free (targets); }