Hello all, Here is my attempt at adding support for tun-mtu and fragment to NetworkManager-openvpn. "it works for me" The diff is against SVN HOL this afternoon. I'm not subscribed to the list, so if there are any questions please CC me. -- James R. Leu jleu mindspring com
diff -uNr --exclude=.svn --exclude=po network-manager-openvpn/properties/auth-helpers.c NetworkManager-openvpn-0.7.0.99/properties/auth-helpers.c
--- network-manager-openvpn/properties/auth-helpers.c 2009-05-01 14:19:21.000000000 -0500
+++ NetworkManager-openvpn-0.7.0.99/properties/auth-helpers.c 2009-05-01 13:53:47.000000000 -0500
@@ -802,6 +765,26 @@
gtk_widget_set_sensitive (widget, gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (check)));
}
+static void
+mtu_toggled_cb (GtkWidget *check, gpointer user_data)
+{
+ GladeXML *xml = (GladeXML *) user_data;
+ GtkWidget *widget;
+
+ widget = glade_xml_get_widget (xml, "mtu_spinbutton");
+ gtk_widget_set_sensitive (widget, gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (check)));
+}
+
+static void
+frag_toggled_cb (GtkWidget *check, gpointer user_data)
+{
+ GladeXML *xml = (GladeXML *) user_data;
+ GtkWidget *widget;
+
+ widget = glade_xml_get_widget (xml, "frag_spinbutton");
+ gtk_widget_set_sensitive (widget, gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (check)));
+}
+
static const char *
nm_find_openvpn (void)
{
@@ -1036,6 +1019,56 @@
gtk_widget_set_sensitive (widget, FALSE);
}
+ widget = glade_xml_get_widget (xml, "mtu_checkbutton");
+ g_signal_connect (G_OBJECT (widget), "toggled", G_CALLBACK (mtu_toggled_cb), xml);
+
+ value = g_hash_table_lookup (hash, NM_OPENVPN_KEY_MTU);
+ if (value && strlen (value)) {
+ long int tmp;
+
+ errno = 0;
+ tmp = strtol (value, NULL, 10);
+ if (errno == 0 && tmp > 0 && tmp < 65536 && tmp != 1500) {
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), TRUE);
+
+ widget = glade_xml_get_widget (xml, "mtu_spinbutton");
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (widget),
+ (gdouble) tmp);
+ }
+ gtk_widget_set_sensitive (widget, TRUE);
+ } else {
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), FALSE);
+
+ widget = glade_xml_get_widget (xml, "mtu_spinbutton");
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (widget), 1500.0);
+ gtk_widget_set_sensitive (widget, FALSE);
+ }
+
+ widget = glade_xml_get_widget (xml, "frag_checkbutton");
+ g_signal_connect (G_OBJECT (widget), "toggled", G_CALLBACK (frag_toggled_cb), xml);
+
+ value = g_hash_table_lookup (hash, NM_OPENVPN_KEY_FRAG);
+ if (value && strlen (value)) {
+ long int tmp;
+
+ errno = 0;
+ tmp = strtol (value, NULL, 10);
+ if (errno == 0 && tmp > 0 && tmp < 65536 && tmp != 1430) {
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), TRUE);
+
+ widget = glade_xml_get_widget (xml, "frag_spinbutton");
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (widget),
+ (gdouble) tmp);
+ }
+ gtk_widget_set_sensitive (widget, TRUE);
+ } else {
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), FALSE);
+
+ widget = glade_xml_get_widget (xml, "frag_spinbutton");
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (widget), 1430.0);
+ gtk_widget_set_sensitive (widget, FALSE);
+ }
+
value = g_hash_table_lookup (hash, NM_OPENVPN_KEY_COMP_LZO);
if (value && !strcmp (value, "yes")) {
widget = glade_xml_get_widget (xml, "lzo_checkbutton");
@@ -1145,6 +1178,24 @@
g_hash_table_insert (hash, g_strdup (NM_OPENVPN_KEY_PORT), g_strdup_printf ("%d", port));
}
+ widget = glade_xml_get_widget (xml, "mtu_checkbutton");
+ if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))) {
+ int mtu;
+
+ widget = glade_xml_get_widget (xml, "mtu_spinbutton");
+ mtu = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (widget));
+ g_hash_table_insert (hash, g_strdup (NM_OPENVPN_KEY_MTU), g_strdup_printf ("%d", mtu));
+ }
+
+ widget = glade_xml_get_widget (xml, "frag_checkbutton");
+ if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))) {
+ int frag;
+
+ widget = glade_xml_get_widget (xml, "frag_spinbutton");
+ frag = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (widget));
+ g_hash_table_insert (hash, g_strdup (NM_OPENVPN_KEY_FRAG), g_strdup_printf ("%d", frag));
+ }
+
widget = glade_xml_get_widget (xml, "lzo_checkbutton");
if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)))
g_hash_table_insert (hash, g_strdup (NM_OPENVPN_KEY_COMP_LZO), g_strdup ("yes"));
diff -uNr --exclude=.svn --exclude=po network-manager-openvpn/properties/nm-openvpn-dialog.glade NetworkManager-openvpn-0.7.0.99/properties/nm-openvpn-dialog.glade
--- network-manager-openvpn/properties/nm-openvpn-dialog.glade 2009-05-01 14:19:21.000000000 -0500
+++ NetworkManager-openvpn-0.7.0.99/properties/nm-openvpn-dialog.glade 2009-05-01 13:27:33.000000000 -0500
@@ -928,6 +894,78 @@
</packing>
</child>
<child>
+ <widget class="GtkHBox" id="hbox98">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <widget class="GtkCheckButton" id="mtu_checkbutton">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Use custom M_TU:</property>
+ <property name="use_underline">True</property>
+ <property name="response_id">0</property>
+ <property name="draw_indicator">True</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkSpinButton" id="mtu_spinbutton">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="adjustment">1500 1 65535 1 10 10</property>
+ <property name="climb_rate">1</property>
+ <property name="numeric">True</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkHBox" id="hbox99">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <widget class="GtkCheckButton" id="frag_checkbutton">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Use custom f_ragment:</property>
+ <property name="use_underline">True</property>
+ <property name="response_id">0</property>
+ <property name="draw_indicator">True</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkSpinButton" id="frag_spinbutton">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="adjustment">1430 1 65535 1 10 10</property>
+ <property name="climb_rate">1</property>
+ <property name="numeric">True</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ </packing>
+ </child>
+ <child>
<widget class="GtkCheckButton" id="lzo_checkbutton">
<property name="visible">True</property>
<property name="can_focus">True</property>
diff -uNr --exclude=.svn --exclude=po network-manager-openvpn/src/nm-openvpn-service.c NetworkManager-openvpn-0.7.0.99/src/nm-openvpn-service.c
--- network-manager-openvpn/src/nm-openvpn-service.c 2009-05-01 14:19:20.000000000 -0500
+++ NetworkManager-openvpn-0.7.0.99/src/nm-openvpn-service.c 2009-05-01 14:05:41.000000000 -0500
@@ -94,6 +94,8 @@
{ NM_OPENVPN_KEY_LOCAL_IP, G_TYPE_STRING, 0, 0, TRUE },
{ NM_OPENVPN_KEY_PROTO_TCP, G_TYPE_BOOLEAN, 0, 0, FALSE },
{ NM_OPENVPN_KEY_PORT, G_TYPE_INT, 1, 65535, FALSE },
+ { NM_OPENVPN_KEY_MTU, G_TYPE_INT, 1, 65535, FALSE },
+ { NM_OPENVPN_KEY_FRAG, G_TYPE_INT, 1, 65535, FALSE },
{ NM_OPENVPN_KEY_REMOTE, G_TYPE_STRING, 0, 0, FALSE },
{ NM_OPENVPN_KEY_REMOTE_IP, G_TYPE_STRING, 0, 0, TRUE },
{ NM_OPENVPN_KEY_STATIC_KEY, G_TYPE_STRING, 0, 0, FALSE },
@@ -676,6 +678,36 @@
add_openvpn_arg (args, "1194");
}
+ /* MTU */
+ tmp = nm_setting_vpn_get_data_item (s_vpn, NM_OPENVPN_KEY_MTU);
+ if (tmp && strlen (tmp)) {
+ add_openvpn_arg (args, "--tun-mtu");
+ if (!add_openvpn_arg_int (args, tmp)) {
+ g_set_error (error,
+ NM_VPN_PLUGIN_ERROR,
+ NM_VPN_PLUGIN_ERROR_BAD_ARGUMENTS,
+ "Invalid MTU number '%s'.",
+ tmp);
+ free_openvpn_args (args);
+ return FALSE;
+ }
+ }
+
+ /* Frag size */
+ tmp = nm_setting_vpn_get_data_item (s_vpn, NM_OPENVPN_KEY_FRAG);
+ if (tmp && strlen (tmp)) {
+ add_openvpn_arg (args, "--fragment");
+ if (!add_openvpn_arg_int (args, tmp)) {
+ g_set_error (error,
+ NM_VPN_PLUGIN_ERROR,
+ NM_VPN_PLUGIN_ERROR_BAD_ARGUMENTS,
+ "Invalid fragment size '%s'.",
+ tmp);
+ free_openvpn_args (args);
+ return FALSE;
+ }
+ }
+
/* Cipher */
tmp = nm_setting_vpn_get_data_item (s_vpn, NM_OPENVPN_KEY_CIPHER);
if (tmp && strlen (tmp)) {
diff -uNr --exclude=.svn --exclude=po network-manager-openvpn/src/nm-openvpn-service.h NetworkManager-openvpn-0.7.0.99/src/nm-openvpn-service.h
--- network-manager-openvpn/src/nm-openvpn-service.h 2009-05-01 14:19:20.000000000 -0500
+++ NetworkManager-openvpn-0.7.0.99/src/nm-openvpn-service.h 2009-05-01 13:48:03.000000000 -0500
@@ -49,6 +49,8 @@
#define NM_OPENVPN_KEY_LOCAL_IP "local-ip"
#define NM_OPENVPN_KEY_PROTO_TCP "proto-tcp"
#define NM_OPENVPN_KEY_PORT "port"
+#define NM_OPENVPN_KEY_MTU "tun-mtu"
+#define NM_OPENVPN_KEY_FRAG "fragment"
#define NM_OPENVPN_KEY_REMOTE "remote"
#define NM_OPENVPN_KEY_REMOTE_IP "remote-ip"
#define NM_OPENVPN_KEY_STATIC_KEY "static-key"
Attachment:
pgpCN9zUTpcrz.pgp
Description: PGP signature