From 86393f41bc45f4e1f87771ad5bd4d510a0d30863 Mon Sep 17 00:00:00 2001 From: Eugeni Dodonov Date: Mon, 19 Jan 2009 23:50:42 +0000 Subject: - Added draknetadvanced to control advanced network parameters such as IPv6 and TCP Window Scaling (#27070, #28829, #33623, #38662). --- bin/draknetadvanced | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100755 bin/draknetadvanced (limited to 'bin') 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); -- cgit v1.2.1