diff options
Diffstat (limited to 'lib')
-rwxr-xr-x | lib/network/netcenter.pm | 10 | ||||
-rw-r--r-- | lib/network/network.pm | 34 |
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) = @_; |