summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rwxr-xr-xlib/network/netcenter.pm10
-rw-r--r--lib/network/network.pm34
2 files changed, 44 insertions, 0 deletions
diff --git a/lib/network/netcenter.pm b/lib/network/netcenter.pm
index a43c52a..27a56c6 100755
--- a/lib/network/netcenter.pm
+++ b/lib/network/netcenter.pm
@@ -11,6 +11,7 @@ use ugtk2 qw(:create :helpers :wrappers);
use network::connection;
use network::connection_manager;
use network::tools;
+use network::network;
sub build_cmanager {
my ($in, $net, $w, $pixbufs, $connection) = @_;
@@ -128,6 +129,14 @@ sub get_connections() {
);
}
+sub advanced_settings {
+ my ($in) = @_;
+ my $u = network::network::advanced_settings_read();
+ if (network::network::advanced_choose($in, $u)) {
+ network::network::advanced_settings_write($u);
+ }
+}
+
sub main {
my ($in, $net, $dbus) = @_;
@@ -157,6 +166,7 @@ sub main {
map_index { build_cmanager_box($_, $::i == 0) } @cmanagers,
])),
0, gtknew('HButtonBox', spacing => 6, layout => 'end', children_loose => [
+ gtknew('Button', text => N("Advanced settings"), clicked => sub { advanced_settings($in) }),
gtknew('Button', text => N("Quit"), clicked => sub { Gtk2->main_quit }),
]),
]),
diff --git a/lib/network/network.pm b/lib/network/network.pm
index 8bb291d..e2bdb54 100644
--- a/lib/network/network.pm
+++ b/lib/network/network.pm
@@ -434,6 +434,40 @@ sub netprofile_read {
$net->{PROFILE} = $config->{PROFILE} || 'default';
}
+sub advanced_settings_read {
+ my $modprobe = "$::prefix/etc/modprobe.conf";
+ my $sysctl = "$::prefix/etc/sysctl.conf";
+
+ # ipv6
+ my $ipv6_disabled=0;
+ foreach (cat_($modprobe)) {
+ /^install ipv6 \/bin\/true$/ and $ipv6_disabled=1;
+ } cat_($modprobe);
+
+ # sysctl
+ my $window_scaling=0;
+ foreach (cat_($sysctl)) {
+ /^net\.ipv4\.tcp_window_scaling\s*=\s*0/ and $window_scaling=1;
+ } cat_($modprobe);
+ { ipv6_disabled => $ipv6_disabled, window_scaling => $window_scaling };
+}
+
+sub advanced_settings_write {
+ my ($u) = @_;
+ if ($u->{ipv6_disabled}) {
+ my $line = "install ipv6 /bin/true\n";
+ substInFile { s/^install ipv6 .*//; $_ = $line if eof } "$::prefix/etc/modprobe.conf";
+ } else {
+ substInFile { s/^install ipv6 \/bin\/true// } "$::prefix/etc/modprobe.conf";
+ }
+ if ($u->{window_scaling}) {
+ my $line = "net.ipv4.tcp_window_scaling=0\n";
+ substInFile { s/^net\.ipv4\.tcp_window_scaling=.*//; $_ = $line if eof } "$::prefix/etc/sysctl.conf";
+ } else {
+ my $line = "net.ipv4.tcp_window_scaling=1\n";
+ substInFile { s/^net\.ipv4\.tcp_window_scaling=.*//; $_ = $line if eof } "$::prefix/etc/sysctl.conf";
+ }
+}
sub advanced_choose {
my ($in, $u) = @_;