summaryrefslogtreecommitdiffstats
path: root/bin
diff options
context:
space:
mode:
authorEugeni Dodonov <eugeni@mandriva.org>2009-01-19 23:50:42 +0000
committerEugeni Dodonov <eugeni@mandriva.org>2009-01-19 23:50:42 +0000
commit86393f41bc45f4e1f87771ad5bd4d510a0d30863 (patch)
tree41b2e1ffcbaaaa9c26e326ffd2d7dbe0b8cb2ab0 /bin
parent2962ff3054e268200e8750f8b82dcd3a09926d0e (diff)
downloaddrakx-net-86393f41bc45f4e1f87771ad5bd4d510a0d30863.tar
drakx-net-86393f41bc45f4e1f87771ad5bd4d510a0d30863.tar.gz
drakx-net-86393f41bc45f4e1f87771ad5bd4d510a0d30863.tar.bz2
drakx-net-86393f41bc45f4e1f87771ad5bd4d510a0d30863.tar.xz
drakx-net-86393f41bc45f4e1f87771ad5bd4d510a0d30863.zip
- Added draknetadvanced to control advanced network parameters
such as IPv6 and TCP Window Scaling (#27070, #28829, #33623, #38662).
Diffstat (limited to 'bin')
-rwxr-xr-xbin/draknetadvanced77
1 files changed, 77 insertions, 0 deletions
diff --git a/bin/draknetadvanced b/bin/draknetadvanced
new file mode 100755
index 0000000..9c88040
--- /dev/null
+++ b/bin/draknetadvanced
@@ -0,0 +1,77 @@
+#!/usr/bin/perl
+
+# DrakNetAdvanced
+
+# Copyright (C) 2009 Mandriva (eugeni@mandriva.com)
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+use lib qw(/usr/lib/libDrakX);
+
+# i18n: IMPORTANT: to get correct namespace (drakx-net instead of libDrakX)
+BEGIN { unshift @::textdomains, 'drakx-net' }
+use standalone; #- warning, standalone must be loaded very first, for 'explanations'
+use interactive;
+use network::network;
+use any;
+use common;
+
+sub replace_in_file {
+ my ($f, $old, $new) = @_;
+ my @lines;
+ foreach (cat_($f)) {
+ # remove
+ /$old/ or push(@lines, $_);
+ }
+ open(my $F, ">$f") or die "output in file $f failed: $!\n";
+ foreach (@lines) {
+ print $F $_;
+ }
+ # saving new line
+ $new and print $F $new."\n";
+ close($F);
+}
+
+$ugtk2::wm_icon = "/usr/share/mcc/themes/default/drakproxy-mdk.png";
+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);
+
+my $u = { ipv6_disabled => $ipv6_disabled, window_scaling => $window_scaling };
+my $in = 'interactive'->vnew('su');
+if (network::network::advanced_choose($in, $u)) {
+ if ($u->{ipv6_disabled}) {
+ replace_in_file("$::prefix/etc/modprobe.conf", "^install ipv6", "install ipv6 \/bin\/true");
+ } else {
+ replace_in_file("$::prefix/etc/modprobe.conf", "^install ipv6 \/bin\/true");
+ }
+ if ($u->{window_scaling}) {
+ replace_in_file("$::prefix/etc/sysctl.conf", "^net.ipv4.tcp_window_scaling", "net.ipv4.tcp_window_scaling=0");
+ } else {
+ replace_in_file("$::prefix/etc/sysctl.conf", "net\.ipv4\.tcp_window_scaling", "net.ipv4.tcp_window_scaling=1");
+ }
+}
+$in->exit(0);