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
j...@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: pgpnQZcq9yvqQ.pgp
Description: PGP signature

_______________________________________________
NetworkManager-list mailing list
NetworkManager-list@gnome.org
http://mail.gnome.org/mailman/listinfo/networkmanager-list

Reply via email to