summaryrefslogtreecommitdiffstats
path: root/perl-install/network/netconnect.pm
diff options
context:
space:
mode:
Diffstat (limited to 'perl-install/network/netconnect.pm')
-rw-r--r--perl-install/network/netconnect.pm1407
1 files changed, 486 insertions, 921 deletions
diff --git a/perl-install/network/netconnect.pm b/perl-install/network/netconnect.pm
index f944dd762..32a3c17c3 100644
--- a/perl-install/network/netconnect.pm
+++ b/perl-install/network/netconnect.pm
@@ -1,6 +1,5 @@
-package network::netconnect; # $Id$
+package network::netconnect;
-use strict;
use common;
use log;
use detect_devices;
@@ -8,36 +7,101 @@ use run_program;
use modules;
use any;
use mouse;
-use network::network;
+use network;
+use Data::Dumper;
use network::tools;
use MDK::Common::Globals "network", qw($in $prefix $connect_file $disconnect_file $connect_prog);
-my %conf;
+my %conf;
+#- intro is called only in standalone.
+sub intro {
+ my ($prefix, $netcnx, $in) = @_;
+ my ($netc, $mouse, $intf) = ({}, {}, {});
+ my $text;
+ my $connected;
+ my $connect_file = "/etc/sysconfig/network-scripts/net_cnx_up";
+ my $disconnect_file = "/etc/sysconfig/network-scripts/net_cnx_down";
+ my $connect_prog = "/etc/sysconfig/network-scripts/net_cnx_pg";
+ read_net_conf($prefix, $netcnx, $netc);
+ if (!$::isWizard) {
+ if (connected()) {
+ $text = N("You are currently connected to internet.") . (-e $disconnect_file ? N("\nYou can disconnect or reconfigure your connection.") : N("\nYou can reconfigure your connection."));
+ $connected = 1;
+ } else {
+ $text = N("You are not currently connected to Internet.") . (-e $connect_file ? N("\nYou can connect to Internet or reconfigure your connection.") : N("\nYou can reconfigure your connection."));
+ $connected = 0;
+ }
+ my @l = (
+ if_(!$connected && -e $connect_file, { description => N("Connect"), c => 1 }),
+ if_($connected && -e $disconnect_file, { description => N("Disconnect"), c => 2 }),
+ { description => N("Configure the connection"), c => 3 },
+ { description => N("Cancel"), c => 4 },
+ );
+ my $e = $in->ask_from_listf(N("Internet connection & configuration"),
+ translate($text),
+ sub { $_[0]{description} },
+ \@l);
+ run_program::rooted($prefix, $connect_prog) if $e->{c} == 1;
+ run_program::rooted($prefix, $disconnect_file) if $e->{c} == 2;
+ main($prefix, $netcnx, $netc, $mouse, $in, $intf, 0, 0) if $e->{c} == 3;
+ $in->exit(0) if $e->{c} == 4;
+ } else {
+ main($prefix, $netcnx, $netc, $mouse, $in, $intf, 0, 0);
+ }
+}
sub detect {
- my ($auto_detect, $o_class) = @_;
- my %l = (
- isdn => sub {
- require network::isdn;
- $auto_detect->{isdn} = network::isdn::isdn_detect_backend();
- },
- lan => sub { # ethernet
- modules::load_category('network/main|gigabit|usb');
- require network::ethernet;
- $auto_detect->{lan} = { map { $_->[0] => $_->[1] } network::ethernet::conf_network_card_backend() };
- },
- adsl => sub {
- require network::adsl;
- $auto_detect->{adsl} = network::adsl::adsl_detect();
- },
- modem => sub {
- my ($modem, @pci_modems) = detect_devices::getModem();
- $modem->{device} and $auto_detect->{modem} = $modem->{device};
- @pci_modems and $auto_detect->{winmodem}{$_->{driver}} = $_->{description} foreach @pci_modems;
- },
- );
- $l{$_}->() foreach ($o_class || (keys %l));
- return;
+ my ($auto_detect, $net_install) = @_;
+ my $isdn = {};
+ require network::isdn;
+ network::isdn->import;
+ isdn_detect_backend($isdn);
+ $auto_detect->{isdn}{$_} = $isdn->{$_} foreach qw(description vendor id driver card_type type);
+ $auto_detect->{isdn}{description} =~ s/.*\|//;
+
+ modules::load_category('network/main|usb');
+ require network::ethernet;
+ network::ethernet->import;
+ my @all_cards = conf_network_card_backend(undef, undef, undef, undef, undef, undef);
+ map { $auto_detect->{lan}{$_->[0]} = $_->[1] } @all_cards if !$net_install;
+
+ my $adsl = {};
+ require network::adsl;
+ network::adsl->import;
+ $auto_detect->{adsl} = adsl_detect($adsl);
+
+ require network::modem;
+ network::modem->import;
+ my ($modem, @pci_modems) = detect_devices::getModem();
+ $modem->{device} and $auto_detect->{modem} = $modem->{device};
+ @pci_modems and $auto_detect->{winmodem}{$_->{driver}} = $_->{description} foreach @pci_modems;
+}
+
+sub pre_func {
+ my ($text) = @_;
+ $in->isa('interactive_gtk') or return;
+ $::Wizard_no_previous = 1;
+ if ($::isStandalone) {
+ $::Wizard_splash = 1;
+ require ugtk2;
+ ugtk2->import(qw(:wrappers));
+ my $W = ugtk2->new(N("Network Configuration Wizard"));
+ gtkadd($W->{window},
+ gtkpack_(new Gtk2::VBox(0, 0),
+ 1, write_on_pixmap(gtkcreate_img("drakconnect_step"),
+ 20,200,
+ N("We are now going to configure the %s connection.", translate($text)),
+ ),
+ 0, $W->create_okcancel(N("OK"))
+ )
+ );
+ $W->main;
+ $::Wizard_splash = 0;
+ } else {
+ #- for i18n : %s is the type of connection of the list: (modem, isdn, adsl, cable, local network);
+ $in->ask_okcancel(N("Network Configuration Wizard"), N("\n\n\nWe are now going to configure the %s connection.\n\n\nPress OK to continue.", translate($_[0])), 1);
+ }
+ undef $::Wizard_no_previous;
}
sub init_globals {
@@ -50,891 +114,180 @@ sub init_globals {
connect_prog => "/etc/sysconfig/network-scripts/net_cnx_pg");
}
-sub detect_timezone() {
- my %tmz2country = (
- 'Europe/Paris' => N("France"),
- 'Europe/Amsterdam' => N("Netherlands"),
- 'Europe/Rome' => N("Italy"),
- 'Europe/Brussels' => N("Belgium"),
- 'America/New_York' => N("United States"),
- 'Europe/London' => N("United Kingdom")
- );
- my %tm_parse = MDK::Common::System::getVarsFromSh('/etc/sysconfig/clock');
- my @country;
- foreach (keys %tmz2country) {
- if ($_ eq $tm_parse{ZONE}) {
- unshift @country, $tmz2country{$_};
- } else { push @country, $tmz2country{$_} };
+sub main {
+ my ($prefix, $netcnx, $netc, $mouse, $in, $intf, $first_time, $_direct_fr, $noauto) = @_;
+ init_globals($in, $prefix);
+ $netc->{minus_one} = 0; #When one configure an eth in dhcp without gateway
+ $::isInstall and $in->set_help('configureNetwork');
+ $::isStandalone and read_net_conf($prefix, $netcnx, $netc); # REDONDANCE with intro. FIXME
+ $netc->{NET_DEVICE} = $netcnx->{NET_DEVICE} if $netcnx->{NET_DEVICE}; # REDONDANCE with read_conf. FIXME
+ $netc->{NET_INTERFACE} = $netcnx->{NET_INTERFACE} if $netcnx->{NET_INTERFACE}; # REDONDANCE with read_conf. FIXME
+ network::network::read_all_conf($prefix, $netc ||= {}, $intf ||= {});
+
+ modules::mergein_conf("$prefix/etc/modules.conf");
+
+ my $direct_net_install;
+ if ($first_time && $::isInstall && ($in->{method} eq "ftp" || $in->{method} eq "http" || $in->{method} eq "nfs")) {
+ (!($::expert || $noauto) or $in->ask_okcancel(N("Network Configuration"),
+ N("Because you are doing a network installation, your network is already configured.
+Click on Ok to keep your configuration, or cancel to reconfigure your Internet & Network connection.
+"), 1)) and do {
+ $netcnx->{type} = 'lan';
+ output_with_perm("$prefix$connect_file", 0755,
+ qq(
+ifup eth0
+));
+ output("$prefix$disconnect_file", 0755,
+ qq(
+ifdown eth0
+));
+ $direct_net_install = 1;
+ goto step_5;
+};
}
- \@country;
-}
-
-
-# configuring all network devices
- sub main {
- my ($_prefix, $netcnx, $in, $o_netc, $o_mouse, $o_intf, $o_first_time, $o_noauto) = @_;
- my $netc = $o_netc || {};
- my $mouse = $o_mouse || {};
- my $intf = $o_intf || {};
- my $first_time = $o_first_time || 0;
- my ($network_configured, $direct_net_install, $cnx_type, $type, $interface, @cards, @all_cards, @devices);
- my (%connection_steps, %connections, %rconnections, @connection_list);
- my ($ntf_name, $ipadr, $netadr, $gateway_ex, $up, $modem, $isdn, $isdn_type, $adsl_type, $need_restart_network);
- my ($module, $text, $auto_ip, $net_device, $onboot, $needhostname, $hotplug, $track_network_id, @fields); # lan config
- my $success = 1;
- my $ethntf = {};
- use Data::Dumper;
-
- my %yesno = (yes => N("Yes"), no => N("No"));
-
- my %wireless_mode = (N("Ad-hoc") => "Ad-hoc",
- N("Managed") => "Managed",
- N("Master") => "Master",
- N("Repeater") => "Repeater",
- N("Secondary") => "Secondary",
- N("Auto") => "Auto",
- );
+ $netc->{autodetection} = 1;
+ $netc->{autodetect} = {};
- init_globals($in, $::prefix);
- $netc->{NET_DEVICE} = $netcnx->{NET_DEVICE} if $netcnx->{NET_DEVICE}; # REDONDANCE with read_conf. FIXME
- $netc->{NET_INTERFACE} = $netcnx->{NET_INTERFACE} if $netcnx->{NET_INTERFACE}; # REDONDANCE with read_conf. FIXME
- network::network::read_all_conf($::prefix, $netc, $intf);
-
- modules::mergein_conf("$::prefix/etc/modules.conf");
-
- $netc->{autodetection} = 0;
- $netc->{autodetect} = {};
-
- my $next_cnx_step = sub {
- my $next = connection_steps{$cnx_type};
- # FIXME: we want this in standalone mode too:
- $need_restart_network = 1 if $next =~ /lan|cable/;
- if ($next eq "multiple_internet_cnx") {
- return 1 < scalar(keys %{$netc->{internet_cnx}}) ? "multiple_internet_cnx" : $connection_steps{multiple_internet_cnx};
- }
- return $next;
- };
-
- my $ppp_first_step = sub {
- $mouse ||= {};
- $mouse->{device} ||= readlink "$::prefix/dev/mouse";
- write_cnx_script($netc, "modem", join("\n", if_($::testing, "/sbin/route del default"), "ifup ppp0"),
- q(ifdown ppp0
-killall pppd
-), $netcnx->{type});
- my $need_to_ask = $modem->{device} || !$netc->{autodetect}{winmodem};
- return $need_to_ask ? "ppp_choose" : "ppp_choose2";
- };
-
- # main wizard:
- my $wiz;
- $wiz =
- {
- defaultimage => "wiz_drakconnect.png",
- name => N("Network & Internet Configuration"),
- pages => {
- install =>
- {
- if_($::isInstall, no_back => 1),
- name => N("Welcome to The Network Configuration Wizard.
+ step_1:
+ $::Wizard_no_previous = 1;
+ my @profiles = get_profiles();
+ $in->ask_from(N("Network Configuration Wizard"),
+ N("Welcome to The Network Configuration Wizard.
We are about to configure your internet/network connection.
If you don't want to use the auto detection, deselect the checkbox.
"),
- interactive_help_id => 'configureNetwork',
- data => [
- { text => N("Use auto detection"), val => \$netc->{autodetection}, type => 'bool' },
- { text => N("Expert Mode"), val => \$::expert, type => 'bool' },
- ],
- post => sub {
- if ($netc->{autodetection}) {
- my $_w = $in->wait_message(N("Network Configuration Wizard"), N("Detecting devices..."));
- detect($netc->{autodetect});
- }
-
- $conf{$_} = values %{$netc->{autodetect}{$_}} ? 1 : 0 foreach 'lan';
- $conf{$_} = $netc->{autodetect}{$_} ? 1 : 0 foreach qw(adsl cable modem winmodem);
- $conf{isdn} = any { $_->{driver} } values %{$netc->{autodetect}{isdn}};
- return "connection";
- },
- },
-
- connection =>
- {
- pre => sub {
- if (!$::isInstall) {
- $conf{$_} = 0 foreach qw(adsl cable isdn lan modem winmodem);
- }
- my @connections =
- (
- [ #-PO: here, "(detected)" string will be appended to eg "ADSL connection"
- N("Normal modem connection"), N("(detected on port %s)", $netc->{autodetect}{modem}), "modem" ],
- [ N("Winmodem connection"), N("(detected)"), "winmodem" ],
- [ N("ISDN connection"), N("(detected %s)", join(', ', map { $_->{description} } values %{$netc->{autodetect}{isdn}})), "isdn" ],
- [ N("ADSL connection"), N("(detected)"), "adsl" ],
- [ N("Cable connection"), N("(detected)"), "cable" ],
- [ N("LAN connection"), N("(detected)"), "lan" ],
- # if we ever want to split out wireless connection, we'd to split out modules between network/main and network/wlan:
- if_(0, [ N("Wireless connection"), N("(detected)"), "lan" ]),
- );
-
- foreach (@connections) {
- my ($str, $extra_str, $type) = @$_;
- my $string = join('', $str, if_($conf{$type}, " - ", $extra_str));
- $connections{$string} = $type;
- }
- %rconnections = reverse %connections;
- if ($::isInstall) {
- @connection_list = map {
- my (undef, undef, $type) = @$_;
- +{ text => $rconnections{$type}, val => \$conf{$type}, type => 'bool' }
- } @connections;
- } else {
- @connection_list = ({ val => \$type, type => 'list', list => [ map { $_->[0] } @connections ], });
- }
- },
- if_(!$::isInstall, no_back => 1),
- name => N("Choose the connection you want to configure"),
- interactive_help_id => 'configureNetwork',
- data => \@connection_list,
- changed => sub {
- return if !$netc->{autodetection};
- my $c = 0;
- #- $conf{adsl} and $c++;
- $conf{cable} and $c++;
- my $a = keys(%{$netc->{autodetect}{lan}});
- 0 < $a && $a <= $c and $conf{lan} = undef;
- },
- complete => sub {
- # at least one connection type must be choosen
- return 0 if !$::isInstall;
- return !any { $conf{$_} } keys %conf;
- },
- post => sub {
- load_conf($netcnx, $netc, $intf) if $::isInstall; # :-(
- # while in installer, we need to link connections steps depending of which connections the user selected
- my @l;
- if ($::isInstall) {
- @l = grep { $conf{$_} } keys %conf;
- } else {
- $type = $connections{$type};
- @l = ($type);
- }
- my $first = shift @l;
- my @steps = (@l,
- "multiple_internet_cnx",
- ($::isInstall ? "miscellaneous_choose" : "apply_settings"));
- foreach my $cnx ($first, @l) {
- $connection_steps{$cnx} = shift @steps;
- }
- # FIXME: s/$type/"${type}_standalone"/ (because of newer steps for standalone mode just break all but lan paths:
- return $::isInstall ? "prepare_detection" : "${type}_standalone";
- },
- },
-
- prepare_detection =>
- {
- name => N("We are now going to configure the %s connection.\n\n\nPress \"%s\" to continue.",
- translate($type), N("Next")),
- post => $next_cnx_step,
- },
-
-
- hw_account =>
- { # ask_info2
- #my ($cnx, $netc) = @_;
-
- name => N("Connection Configuration") . "\n\n" .
- N("Please fill or check the field below"),
- data => [],
- pre => sub {
- push @{$wiz->{pages}{hw_account}{data}}, map {
- my ($dstruct, $field, $item) = @$_;
- $item->{val} = \$wiz->{var}{$dstruct}{$field};
- if__($wiz->{var}{$dstruct}{$field}, $item);
- } ([ "cnx", "irq", { label => N("Card IRQ") } ],
- [ "cnx", "mem", { label => N("Card mem (DMA)") } ],
- [ "cnx", "io", { label => N("Card IO") } ],
- [ "cnx", "io0", { label => N("Card IO_0") } ],
- [ "cnx", "io1", { label => N("Card IO_1") } ],
- [ "cnx", "phone_in", { label => N("Your personal phone number") } ],
- [ "netc", "DOMAINNAME2", { label => N("Provider name (ex provider.net)") } ],
- [ "cnx", "phone_out", { label => N("Provider phone number") } ],
- [ "netc", "dnsServer2", { label => N("Provider dns 1 (optional)") } ],
- [ "netc", "dnsServer3", { label => N("Provider dns 2 (optional)") } ],
- [ "cnx", "vpivci", { label => N("Choose your country"), list => detect_timezone() } ],
- [ "cnx", "dialing_mode", { label => N("Dialing mode"), list => ["auto", "manual"] } ],
- [ "cnx", "speed", { label => N("Connection speed"), list => ["64 Kb/s", "128 Kb/s"] } ],
- [ "cnx", "huptimeout", { label => N("Connection timeout (in sec)") } ],
- );
- push @{$wiz->{pages}{hw_account}{data}},
- ({ label => N("Account Login (user name)"), val => \$wiz->{var}{cnx}{login} },
- {
- label => N("Account Password"), val => \$wiz->{var}{cnx}{passwd}, hidden => 1 },
- );
- }
- },
- post => sub {
- my $netc = $wiz->{var}{netc};
- if ($netc->{vpivci}) {
- my %h = (N("Belgium") => '8_35' ,
- N("France") => '8_35' ,
- N("Italy") => '8_35' ,
- N("Netherlands") => '8_48' ,
- N("United Kingdom") => '0_38' ,
- N("United States") => '8_35',
- );
- $netc->{vpivci} = $h{$netc->{vpivci}};
- }
- },
-
- cable =>
- {
- name => N("Connect to the Internet") . "\n\n" .
- N("Which dhcp client do you want to use ? (default is dhcp-client)"),
- data =>
- [ { val => \$netcnx->{dhcp_client}, list => ["dhcp-client", "dhcpcd", "dhcpxd"] } ],
-
- post => sub {
- $netcnx->{type} = $type = 'cable';
- $in->do_pkgs->install($netcnx->{dhcp_client});
- write_cnx_script($netc, "cable", qq(
-/sbin/ifup $netc->{NET_DEVICE}
-),
- qq(
-/sbin/ifdown $netc->{NET_DEVICE}
-), $netcnx->{type});
- return "go_ethernet";
- },
- },
-
- go_ethernet =>
- {
- pre => sub {
- # my ($netc, $intf, $type, $ipadr, $netadr, $first_time) = @_;
- conf_network_card($netc, $intf, $type, $ipadr, $netadr) or return;
- $netc->{NET_INTERFACE} = $netc->{NET_DEVICE};
- configureNetwork($netc, $intf, $first_time) or return;
- },
- },
-
- isdn =>
- {
- pre=> sub {
- detect($netc->{autodetect}, 'isdn') if !$::isInstall && !$netc->{autodetection};
- # FIXME: offer to pick any card from values %{$netc->{autodetect}{isdn}}
- $isdn = top(values %{$netc->{autodetect}{isdn}});
- isdn_step_1:
- defined $isdn->{id} and goto intern_pci;
- },
- # !intern_pci:
- name => N("What kind is your ISDN connection?"),
- data => [ { val => \$isdn_type, type => "list", list => [ N_("Internal ISDN card"), N_("External ISDN modem") ], } ],
- post => sub {
- if ($isdn_type =~ /card/) {
- intern_pci:
- $netc->{isdntype} = 'isdn_internal';
- $netcnx->{isdn_internal} = $isdn;
- $netcnx->{isdn_internal} = isdn_read_config($netcnx->{isdn_internal});
- isdn_detect($netcnx->{isdn_internal}, $netc) or goto isdn_step_1;
- } else {
- $netc->{isdntype} = 'isdn_external';
- $netcnx->{isdn_external}{device} = $netc->{autodetect}{modem};
- $netcnx->{isdn_external} = isdn_read_config($netcnx->{isdn_external});
- $netcnx->{isdn_external}{special_command} = 'AT&F&O2B40';
- require network::modem;
- $modem = $netcnx->{isdn_external};
- return &$ppp_first_step->();
- };
-
- },
- },
-
- isdn_detect =>
- {
- pre => sub {
- my ($isdn, $netc) = @_;
- if ($isdn->{id}) {
- log::explanations("found isdn card : $isdn->{description}; vendor : $isdn->{vendor}; id : $isdn->{id}; driver : $isdn->{driver}\n");
- $isdn->{description} =~ s/\|/ -- /;
-
- isdn_detect_step_0:
- defined $isdn->{type} and my $new = $in->ask_yesorno(N("ISDN Configuration"), N("Do you want to start a new configuration ?"), 1);
-
- if ($isdn->{type} eq '' || $new) {
- isdn_ask($isdn, $netc, N("I have detected an ISDN PCI card, but I don't know its type. Please select a PCI card on the next screen.")) or goto isdn_detect_step_0;
- } else {
- isdn_detect_step_1:
- $isdn->{protocol} = isdn_ask_protocol() or goto isdn_detect_step_0;
- isdn_detect_step_2:
- isdn_ask_info($isdn, $netc) or goto isdn_detect_step_1;
- isdn_write_config($isdn, $netc) or goto isdn_detect_step_2;
- }
- } else {
- isdn_ask($isdn, $netc, N("No ISDN PCI card found. Please select one on the next screen.")) or return;
- }
- $netc->{$_} = 'ippp0' foreach 'NET_DEVICE', 'NET_INTERFACE';
- 1;
- }
- },
-
- winmodem =>
- {
- pre => sub {
- my ($in, $netcnx, $mouse, $netc) = @_;
- my %relocations = (ltmodem => $in->do_pkgs->check_kernel_module_packages('ltmodem'));
- my $type;
-
- detect($netc->{autodetect}, 'lan') if !$::isInstall && !$netc->{autodetection};
- $netc->{autodetect}{winmodem} or ($in->ask_warn(N("Warning"), N("You don't have any winmodem")) ? return 1 : $in->exit(0));
-
- foreach (keys %{$netc->{autodetect}{winmodem}}) {
- /Hcf/ and $type = "hcfpcimodem";
- /Hsf/ and $type = "hsflinmodem";
- /LT/ and $type = "ltmodem";
- $relocations{$type} || $type && $in->do_pkgs->what_provides($type) or $type = undef;
- }
-
- $type or ($in->ask_warn(N("Warning"), N("Your modem isn't supported by the system.
-Take a look at http://www.linmodems.org")) ? return 1 : $in->exit(0));
- my $e = $in->ask_from_list(N("Title"), N("\"%s\" based winmodem detected, do you want to install needed software ?", $type), [N("Install rpm"), N("Do nothing")]) or return 0;
- if ($e =~ /rpm/) {
- if ($in->do_pkgs->install($relocations{$type} ? @{$relocations{$type}} : $type)) {
- unless ($::isInstall) {
- #- fallback to modem configuration (beware to never allow test it).
- $netcnx->{type} = 'modem';
- #$type eq 'ltmodem' and $netc->{autodetect}{modem} = '/dev/ttyS14';
- return configure($in, $netcnx, $mouse, $netc);
- }
- } else {
- return 0;
- }
- }
- return 1;
- },
- },
-
- no_winmodem =>
- {
- name => N("Warning") . "\n\n" . N("You don't have any winmodem"),
- },
-
- no_supported_winmodem =>
- {
- name => N("Warning") . "\n\n" . N("Your modem isn't supported by the system.
-Take a look at http://www.linmodems.org")
- },
-
-
-
-
- modem =>
- {
- pre => sub {
- my ($in, $netcnx, $mouse, $netc) = @_;
- $netcnx->{type} = 'modem';
- my $modem = $netcnx->{$netcnx->{type}};
- $modem->{device} = $netc->{autodetect}{modem};
- my %l = getVarsFromSh("$::prefix/usr/share/config/kppprc");
- $modem->{connection} = $l{Name};
- $modem->{domain} = $l{Domain};
- ($modem->{dns1}, $modem->{dns2}) = split(',', $l{DNS});
-
- foreach (cat_("/etc/sysconfig/network-scripts/chat-ppp0")) {
- /.*ATDT(\d*)/ and $modem->{phone} = $1;
- }
- foreach (cat_("/etc/sysconfig/network-scripts/ifcfg-ppp0")) {
- /NAME=(['"]?)(.*)\1/ and $modem->{login} = $2;
- }
- my $secret = network::tools::read_secret_backend();
- foreach (@$secret) {
- $modem->{passwd} = $_->{passwd} if $_->{login} eq $modem->{login};
- }
-
- return &$ppp_first_step->();
- },
- },
-
- # FIXME: only if $need_to_ask
- ppp_choose =>
- {
- pre => sub {
- $mouse ||= {};
- $mouse->{device} ||= readlink "$::prefix/dev/mouse";
- write_cnx_script($netc, "modem", join("\n", if_($::testing, "/sbin/route del default"), "ifup ppp0"),
- q(ifdown ppp0
-killall pppd
-), $netcnx->{type});
- my $need_to_ask = $modem->{device} || !$netc->{autodetect}{winmodem};
- },
-
- name => N("Please choose which serial port your modem is connected to."),
- interactive_help_id => 'selectSerialPort',
- data => [ { var => \$modem->{device}, format => \&mouse::serial_port2text, type => "list",
- list => [ grep { $_ ne $o_mouse->{device} } (if_(-e '/dev/modem', '/dev/modem'), mouse::serial_ports()) ] } ],
-
- next => "ppp_choose2",
- },
-
- ppp_choose2 =>
- {
- pre => sub {
- #my $secret = network::tools::read_secret_backend();
- #my @cnx_list = map { $_->{server} } @$secret;
- },
- name => N("Dialup options"),
- data => [
- { label => N("Connection name"), val => \$modem->{connection} },
- { label => N("Phone number"), val => \$modem->{phone} },
- { label => N("Login ID"), val => \$modem->{login} },
- { label => N("Password"), val => \$modem->{passwd}, hidden => 1 },
- { label => N("Authentication"), val => \$modem->{auth}, list => [ N_("PAP"), N_("Terminal-based"), N_("Script-based"), N_("CHAP") ] },
- { label => N("Domain name"), val => \$modem->{domain} },
- { label => N("First DNS Server (optional)"), val => \$modem->{dns1} },
- { label => N("Second DNS Server (optional)"), val => \$modem->{dns2} },
- ],
- post => sub {
- network::modem::ppp_configure($in, $netc, $modem);
- $netc->{$_} = 'ppp0' foreach 'NET_DEVICE', 'NET_INTERFACE';
- &$next_cnx_step->();
- },
- },
-
-
- lan_standalone =>
- {
- pre => sub {
- detect($netc->{autodetect}, 'lan') if !$::isInstall;
- modules::interactive::load_category($in, 'network/main|gigabit|usb|pcmcia', !$::expert, 1);
- @all_cards = network::ethernet::conf_network_card_backend($netc, $intf);
- @cards = map { $_->[0] } @all_cards;
- foreach my $card (@all_cards) {
- modules::remove_alias($card->[1]);
- modules::add_alias($card->[0], $card->[1]);
- }
- },
- name => N("Select the network interface to configure:"),
- data => [ { label => N("Net Device"), val => \$ntf_name, list => [ detect_devices::getNet() ], allow_empty_list => 1 } ],
- post => sub {
- delete $ethntf->{$_} foreach keys %$ethntf;
- add2hash($ethntf, $intf->{$ntf_name});
- return 'lan';
- },
- },
-
-
- # FIXME: is_install: no return for each card "last step" because of manual popping
- # better construct an hash of { current_netintf => next_step } which next_step = last_card ? next_eth_step : next_card ?
- lan =>
- {
- pre => sub {
- # FIXME: set $module
- $net_device = $netc->{NET_DEVICE};
- if ($net_device eq $ethntf->{DEVICE}) {
- $text = N("WARNING: this device has been previously configured to connect to the Internet.
-Simply accept to keep this device configured.
-Modifying the fields below will override this configuration.");
- } else {
- $text = N("Please enter the IP configuration for this machine.
-Each item should be entered as an IP address in dotted-decimal
-notation (for example, 1.2.3.4).");
- }
- $auto_ip = $ethntf->{BOOTPROTO} !~ /static/;
- $onboot = $ethntf->{ONBOOT} ? $ethntf->{ONBOOT} =~ /yes/ : bool2yesno(!member($ethntf->{DEVICE},
- map { $_->{device} } detect_devices::pcmcia_probe()));
- $needhostname = $ethntf->{NEEDHOSTNAME} !~ /no/;
- $hotplug = $::isStandalone && !$ethntf->{MII_NOT_SUPPORTED} || 1;
- $track_network_id = $::isStandalone && $ethntf->{HWADDR} || detect_devices::isLaptop();
- delete $ethntf->{NETWORK};
- delete $ethntf->{BROADCAST};
- @fields = qw(IPADDR NETMASK);
- },
- name => sub { N("Configuring network device %s", $ethntf->{DEVICE}) . ($module ? N(" (driver %s)", $module) : '') . "\n\n" . $text },
- data => sub {
- [ { label => N("Automatic IP"), val => \$auto_ip, type => "bool", text => N("(bootp/dhcp/zeroconf)") },
- { label => N("IP address"), val => \$ethntf->{IPADDR}, disabled => sub { $auto_ip } },
- { label => N("Netmask"), val => \$ethntf->{NETMASK}, disabled => sub { $auto_ip } },
- { label => N("DHCP host name"), val => \$ethntf->{DHCP_HOSTNAME}, disabled => sub { ! ($auto_ip && $needhostname) }, advanced => 1 },
- { text => N("Track network card id (useful for laptops)"), val => \$track_network_id, type => "bool", advanced => 1 },
- { text => N("Network Hotplugging"), val => \$hotplug, type => "bool", advanced => 1 },
- { text => N("Assign host name from DHCP address"), val => \$needhostname, type => "bool", disabled => sub { ! $auto_ip }, advanced => 1 },
- { text => N("Start at boot"), val => \$onboot, type => "bool", advanced => 1 },
- ],
- },
- complete => sub {
- $ethntf->{BOOTPROTO} = $auto_ip ? join('', if_($auto_ip, "dhcp")) : "static";
- $netc->{DHCP} = $auto_ip;
- return 0 if $auto_ip;
- if (my @bad = map_index { if_(!is_ip($ethntf->{$_}), $::i) } @fields) {
- $in->ask_warn('', N("IP address should be in format 1.2.3.4"));
- return 1, $bad[0];
- }
- $in->ask_warn('', N("Warning : IP address %s is usually reserved !", $ethntf->{IPADDR})) if is_ip_forbidden($ethntf->{IPADDR});
- },
- focus_out => sub {
- $ethntf->{NETMASK} ||= netmask($ethntf->{IPADDR}) unless $_[0]
- },
- post => sub {
- $ethntf->{ONBOOT} = bool2yesno($onboot);
- $ethntf->{NEEDHOSTNAME} = bool2yesno($needhostname);
- $ethntf->{MII_NOT_SUPPORTED} = bool2yesno(!$hotplug);
- $ethntf->{HWADDR} = $track_network_id or delete $ethntf->{HWADDR};
-
- #FIXME "wireless" if $ethntf->{wireless_eth};
- # FIXME: only ask for zeroconf if no dynamic host *AND* no adsl/isdn/modem (aka type being lan|wireless)
- return is_dynamic_ip($intf) ?
- (is_dynamic_host($ethntf) ? "dhcp_hostname" : "zeroconf")
- : "static_hostname";
- },
- },
-
- wireless =>
- {
- pre => sub {
- if (is_wireless_intf($module)) {
- $ethntf->{wireless_eth} = 1;
- $netc->{wireless_eth} = 1;
- $ethntf->{WIRELESS_MODE} = "Managed";
- $ethntf->{WIRELESS_ESSID} = "any";
- }
- },
- name => N("Please enter the wireless parameters for this card:"),
- data => [
- { label => N("Operating Mode"), val => \$ethntf->{WIRELESS_MODE},
- list => [ keys %wireless_mode ] },
- { label => N("Netwok name (ESSID)"), val => \$ethntf->{WIRELESS_ESSID} },
- { label => N("Network ID"), val => \$ethntf->{WIRELESS_NWID} },
- { label => N("Operating frequency"), val => \$ethntf->{WIRELESS_FREQ} },
- { label => N("Sensitivity threshold"), val => \$ethntf->{WIRELESS_SENS} },
- { label => N("Bitrate (in b/s)"), val => \$ethntf->{WIRELESS_RATE} },
- { label => N("Encryption key"), val => \$ethntf->{WIRELESS_ENC_KEY} },
- { label => N("RTS/CTS"), val => \$ethntf->{WIRELESS_RTS},
- help => N("RTS/CTS adds a handshake before each packet transmission to make sure that the
-channel is clear. This adds overhead, but increase performance in case of hidden
-nodes or large number of active nodes. This parameters set the size of the
-smallest packet for which the node sends RTS, a value equal to the maximum
-packet size disable the scheme. You may also set this parameter to auto, fixed
-or off.")
- },
- { label => N("Fragmentation"), val => \$ethntf->{WIRELESS_FRAG} },
- { label => N("Iwconfig command extra arguments"), val => \$ethntf->{WIRELESS_IWCONFIG}, advanced => 1,
- help => N("Here, one can configure some extra wireless parameters such as:
-ap, channel, commit, enc, power, retry, sens, txpower (nick is already set as the hostname).
-
-See iwpconfig(8) man page for further information."),
- },
- { label => N("Iwspy command extra arguments"), val => \$ethntf->{WIRELESS_IWSPY}, advanced => 1,
- help => N("Iwspy is used to set a list of addresses in a wireless network
-interface and to read back quality of link information for each of those.
-
-This information is the same as the one available in /proc/net/wireless :
-quality of the link, signal strength and noise level.
-
-See iwpspy(8) man page for further information."),
- },
- { label => N("Iwpriv command extra arguments"), val => \$ethntf->{WIRELESS_IWPRIV}, advanced => 1,
- help => N("Iwpriv enable to set up optionals (private) parameters of a wireless network
-interface.
+ [
+ if_(@profiles > 1, { label => N("Choose the profile to configure"), val => \$netcnx->{PROFILE}, list => \@profiles }),
+ { label => N("Use auto detection"), val => \$netc->{autodetection}, type => 'bool' },
+ if_($::isStandalone, { label => N("Expert Mode"), val => \$::expert, type => 'bool' }),
+ ]
+ ) or goto step_5;
+ undef $::Wizard_no_previous;
+ set_profile($netcnx);
+ if ($netc->{autodetection}) {
+ my $_w = $in->wait_message(N("Network Configuration Wizard"), N("Detecting devices..."));
+ detect($netc->{autodetect}, $::isInstall && ($in->{method} eq "ftp" || $in->{method} eq "http" || $in->{method} eq "nfs"));
+ }
-Iwpriv deals with parameters and setting specific to each driver (as opposed to
-iwconfig which deals with generic ones).
+ step_2:
+
+# my $set_default;
+ $conf{$_} = $netc->{autodetect}{$_} ? 1 : 0 foreach 'modem', 'winmodem', 'adsl', 'cable', 'lan';
+ $conf{isdn} = $netc->{autodetect}{isdn}{description} ? 1 : 0;
+
+ $::isInstall and $in->set_help('configureNetwork');
+ my @l = (
+ [N("Normal modem connection") . if_($netc->{autodetect}{modem}, " - " . N("detected on port %s", $netc->{autodetect}{modem})), \$conf{modem}],
+ [N("Winmodem connection") . if_($netc->{autodetect}{winmodem}, " - " . N("detected")), \$conf{winmodem}],
+ [N("ISDN connection") . if_($netc->{autodetect}{isdn}{description}, " - " . N("detected %s", $netc->{autodetect}{isdn}{description})), \$conf{isdn}],
+ [N("ADSL connection") . if_($netc->{autodetect}{adsl}, " - " . N("detected")), \$conf{adsl}],
+ [N("Cable connection") . if_($netc->{autodetect}{cable}, " - " . N("cable connection detected")), \$conf{cable}],
+ [N("LAN connection") . if_($netc->{autodetect}{lan}, " - " . N("ethernet card(s) detected")), \$conf{lan}]
+ );
+ $::isInstall and $in->set_help('configureNetwork');
+ $in->ask_from(N("Network Configuration Wizard"), N("Choose the connection you want to configure"),
+ [ map { { label => $_->[0], val => $_->[1], type => 'bool' } } @l ],
+ changed => sub {
+ return if !$netc->{autodetection};
+ my $c = 0;
+ #- $conf{adsl} and $c++;
+ $conf{cable} and $c++;
+ my $a = keys(%{$netc->{autodetect}{lan}});
+ 0 < $a && $a <= $c and $conf{lan} = undef;
+ }
+ ) or goto step_1;
+ load_conf($netcnx, $netc, $intf);
+ $conf{modem} and do { pre_func("modem"); require network::modem; network::modem::configure($netcnx, $mouse, $netc, $intf) or goto step_2 };
+ $conf{winmodem} and do { pre_func("winmodem"); require network::modem; network::modem::winmodemConfigure($netc) or goto step_2 };
+ $conf{isdn} and do { pre_func("isdn"); require network::isdn; network::isdn::configure($netcnx, $netc, $isdn) or goto step_2 };
+ $conf{adsl} and do { pre_func("adsl"); require network::adsl; network::adsl::configure($netcnx, $netc, $intf, $first_time) or goto step_2 };
+ $conf{cable} and do { pre_func("cable"); require network::ethernet; network::ethernet::configure_cable($netcnx, $netc, $intf, $first_time) or goto step_2; $netconnect::need_restart_network = 1 };
+ $conf{lan} and do { pre_func("local network"); require network::ethernet; network::ethernet::configure_lan($netcnx, $netc, $intf, $first_time) or goto step_2; $netconnect::need_restart_network = 1 };
+
+ step_2_1:
+ my $nb = keys %{$netc->{internet_cnx}};
+ if ($nb < 1) {
+ } elsif ($nb > 1) {
+ $in->ask_from(N("Network Configuration Wizard"),
+ N("You have configured multiple ways to connect to the Internet.\nChoose the one you want to use.\n\n") . if_(!$::isStandalone, "You may want to configure some profiles after the installation, in the Mandrake Control Center"),
+ [ { label => N("Internet connection"), val => \$netc->{internet_cnx_choice}, list => [ keys %{$netc->{internet_cnx}} ] } ]
+ ) or goto step_2;
+ } elsif ($nb == 1) {
+ $netc->{internet_cnx_choice} = (keys %{$netc->{internet_cnx}})[0];
+ }
+ member($netc->{internet_cnx_choice}, ('adsl', 'isdn')) and
+ $netc->{at_boot} = $in->ask_yesorno(N("Network Configuration Wizard"), N("Do you want to start the connection at boot?"));
+ if ($netc->{internet_cnx_choice}) {
+ write_cnx_script($netc);
+ $netcnx->{type} = $netc->{internet_cnx}{$netc->{internet_cnx_choice}}{type};
+ } else {
+ unlink "$prefix/etc/sysconfig/network-scripts/net_cnx_up";
+ unlink "$prefix/etc/sysconfig/network-scripts/net_cnx_down";
+ undef $netc->{NET_DEVICE};
+ }
-In theory, the documentation of each device driver should indicate how to use
-those interface specific commands and their effect.
+ my $success = 1;
+ network::configureNetwork2($in, $prefix, $netc, $intf);
+ my $network_configured = 1;
+
+ if ($netconnect::need_restart_network && $::isStandalone and ($::expert or $in->ask_yesorno(N("Network configuration"),
+ N("The network needs to be restarted"), 1))) {
+#- run_program::rooted($prefix, "/etc/rc.d/init.d/network stop");
+ if (!run_program::rooted($prefix, "/etc/rc.d/init.d/network restart")) {
+ $success = 0;
+ $in->ask_okcancel(N("Network Configuration"), N("A problem occured while restarting the network: \n\n%s", `/etc/rc.d/init.d/network restart`), 0);
+ }
+ }
-See iwpriv(8) man page for further information."),
- }
- ],
- complete => sub {
- if ($ethntf->{WIRELESS_FREQ} !~ /[0-9.]*[kGM]/) {
- $in->ask_warn('', N("Freq should have the suffix k, M or G (for example, \"2.46G\" for 2.46 GHz frequency), or add enough '0' (zeroes)."));
- return 1, 6;
- }
- if ($ethntf->{WIRELESS_RATE} !~ /[0-9.]*[kGM]/) {
- $in->ask_warn('', N("Rate should have the suffix k, M or G (for example, \"11M\" for 11M), or add enough '0' (zeroes)."));
- return 1, 8;
- }
- },
- post => sub {
- # untranslate parameters
- $ethntf->{WIRELESS_MODE} = $wireless_mode{$ethntf->{WIRELESS_MODE}};
- },
- },
-
- conf_network_card =>
- {
- pre => sub {
- # my ($netc, $intf, $type, $ipadr, $o_netadr) = @_;
- #-type =static or dhcp
- modules::interactive::load_category($in, 'network/main|gigabit|usb', !$::expert, 1);
- @all_cards = conf_network_card_backend($netc, $intf, $type, undef, $ipadr, $netadr) or
- # FIXME: fix this
- $in->ask_warn('', N("No ethernet network adapter has been detected on your system.
-I cannot set up this connection type.")), return;
-
- },
- name => N("Choose the network interface") . "\n\n" .
- N("Please choose which network adapter you want to use to connect to Internet."),
- data => [ { var => \$interface, type => "list", list => \@all_cards, } ],
- format => sub { my ($e) = @_; $e->[0] . ($e->[1] ? " (using module $e->[1])" : "") },
-
- post => sub {
- modules::write_conf() if $::isStandalone;
- my $_device = conf_network_card_backend($netc, $intf, $type, $interface->[0], $ipadr, $netadr);
- return "lan";
- },
- },
-
- static_hostname =>
- {
- pre => sub {
- my ($in, $netc, $intf, @devices) = @_;
-
- $netc->{dnsServer} ||= dns($intf->{IPADDR});
- $gateway_ex = gateway($intf->{IPADDR});
- #- $netc->{GATEWAY} ||= gateway($intf->{IPADDR});
- },
- name => N("Please enter your host name.
-Your host name should be a fully-qualified host name,
-such as ``mybox.mylab.myco.com''.
-You may also enter the IP address of the gateway if you have one."),
- data =>
- [ { label => N("Host name"), val => \$netc->{HOSTNAME} },
- { label => N("DNS server"), val => \$netc->{dnsServer} },
- { label => N("Gateway (e.g. %s)", $gateway_ex), val => \$netc->{GATEWAY} },
- if_(@devices > 1,
- { label => N("Gateway device"), val => \$netc->{GATEWAYDEV}, list => \@devices },
- ),
- ],
- complete => sub {
- if ($netc->{dnsServer} && !is_ip($netc->{dnsServer})) {
- $in->ask_warn('', N("DNS server address should be in format 1.2.3.4"));
- return 1;
- }
- if ($netc->{GATEWAY} && !is_ip($netc->{GATEWAY})) {
- $in->ask_warn('', N("Gateway address should be in format 1.2.3.4"));
- return 1;
- }
- },
- next => "miscellaneous_choose",
- },
-
- dhcp_hostname =>
- {
- },
-
- zeroconf =>
- {
- name => N("Enter a Zeroconf host name which will be the one that your machine will get back to other machines on the network:"),
- data => [ { label => N("Zeroconf Host name"), val => \$netc->{ZEROCONF_HOSTNAME} } ],
- complete => sub {
- if ($netc->{ZEROCONF_HOSTNAME} =~ /\./) {
- $in->ask_warn('', N("Zeroconf host name must not contain a ."));
- return 1;
- }
- },
- next => "miscellaneous_choose",
- },
-
- multiple_internet_cnx =>
- {
- pre => sub {
- my $nb = keys %{$netc->{internet_cnx}};
- if ($nb > 1) {
- # BUG: remember to remove reference to profiles in mcc if we do not restore this feature
- $in->ask_from("",
- N("You have configured multiple ways to connect to the Internet.\nChoose the one you want to use.\n\n") . if_(!$::isStandalone, "You may want to configure some profiles after the installation, in the Mandrake Control Center"),
- [ { label => N("Internet connection"), val => \$netc->{internet_cnx_choice}, list => [ keys %{$netc->{internet_cnx}} ] } ]
- ) or goto step_2;
- } elsif ($nb == 1) {
- $netc->{internet_cnx_choice} = (keys %{$netc->{internet_cnx}})[0];
- }
- },
- post => sub { $::isInstall ? "miscellaneous_choose" : "apply_settings" },
- },
-
- miscellaneous_choose =>
- {
- name => N("Proxies configuration"),
- data => [
- { label => N("HTTP proxy"), val => \$::o->{miscellaneous}->{http_proxy} },
- { label => N("FTP proxy"), val => \$::o->{miscellaneous}->{ftp_proxy} },
- ],
- complete => sub {
- if ($::o->{miscellaneous}->{http_proxy} !~ m,^($|http://),) {
- $in->ask_warn('', N("Proxy should be http://..."));
- return 1, 0;
- }
- if ($::o->{miscellaneous}->{ftp_proxy} !~ m,^($|ftp://|http://),) {
- $in->ask_warn('', N("URL should begin with 'ftp:' or 'http:'"));
- return 1, 1;
- }
- 0;
- },
- # FIXME: call ether_conf();
- post => sub { return !$::isInstall ? "apply_settings" : "network_on_boot" },
- },
-
- apply_settings =>
- {
- name => N("Configuration is complete, do you want to apply settings ?"),
- data => [], # FIXME: yesorno
- next => "network_on_boot",
- },
-
- network_on_boot =>
- {
- pre => sub {
- member($netc->{internet_cnx_choice}, ('adsl', 'isdn')) and $netc->{at_boot} = $in->ask_yesorno(N("Network Configuration Wizard"), N("Do you want to start the connection at boot?"));
-
- if ($netc->{internet_cnx_choice}) {
- write_cnx_script($netc);
- $netcnx->{type} = $netc->{internet_cnx}{$netc->{internet_cnx_choice}}{type};
- } else {
- unlink "$::prefix/etc/sysconfig/network-scripts/net_cnx_up";
- unlink "$::prefix/etc/sysconfig/network-scripts/net_cnx_down";
- undef $netc->{NET_DEVICE};
- }
-
- network::network::configureNetwork2($in, $::prefix, $netc, $intf);
- $network_configured = 1;
- },
- name => N("Do you want to start the connection at boot?"),
- data => [], # FIXME yes/no
- },
+ write_initscript();
+ $::isStandalone && member($netc->{internet_cnx_choice}, ('modem', 'adsl', 'isdn')) and
+ $success = ask_connect_now($netc->{internet_cnx_choice});
- restart =>
- {
- # FIXME: condition is "if ($netconnect::need_restart_network && $::isStandalone && (!$::expert || $in->ask_yesorno(..."
- name => N("The network needs to be restarted. Do you want to restart it ?"),
- # data => [ { label => N("Connection:"), val => \$type, type => 'list', list => [ sort values %l ] }, ],
- post => sub {
- if (!$::testing && !run_program::rooted($::prefix, "/etc/rc.d/init.d/network restart")) {
- $success = 0;
- $in->ask_okcancel(N("Network Configuration"),
- N("A problem occured while restarting the network: \n\n%s", `/etc/rc.d/init.d/network restart`), 0);
- }
- write_initscript();
- return $::isStandalone && member($netc->{internet_cnx_choice}, qw(modem adsl isdn)) ? "ask_connect_now" : "end";
- },
- },
-
- ask_connect_now =>
- {
- no_back => 1,
- name => N("Do you want to try to connect to the Internet now?"),
- data => [], # FIXME: yes/no
- post => sub {
- my ($a) = @_;
- my ($type) = $netc->{internet_cnx_choice};
- $up = 1;
- #- FIXME : code the exception to be generated by ask_yesorno, to be able to remove the $::Wizard_no_previous=1;
- if ($a) {
- # local $::isWizard = 0;
- my $_w = $in->wait_message('', N("Testing your connection..."), 1);
- connect_backend();
- my $s = 30;
- $type =~ /modem/ and $s = 50;
- $type =~ /adsl/ and $s = 35;
- $type =~ /isdn/ and $s = 20;
- sleep $s;
- $up = connected();
- }
- $success = $up;
- return $a ? "disconnect" : "end";
- }
- },
- disconnect =>
- {
- name => sub {
- $up ? N("The system is now connected to the Internet.") .
- if_($::isInstall, N("For security reasons, it will be disconnected now.")) :
- N("The system doesn't seem to be connected to the Internet.
-Try to reconfigure your connection.");
- },
- no_back => 1,
- end => 1,
- post => sub {
- $::isInstall and disconnect_backend();
- return "end";
- },
- },
+ step_3:
- end =>
- {
- name => sub {
- return $success ? join('', N("Congratulations, the network and Internet configuration is finished.
+ my $m = $success ? N("Congratulations, the network and Internet configuration is finished.
+The configuration will now be applied to your system.
-"), if_($::isStandalone && $in->isa('interactive::gtk'),
- N("After this is done, we recommend that you restart your X environment to avoid any hostname-related problems."))) :
- N("Problems occured during configuration.
+") . if_($::isStandalone && $in->isa('interactive_gtk'),
+N("After this is done, we recommend that you restart your X environment to avoid any hostname-related problems.")) :
+ N("Problems occured during configuration.
Test your connection via net_monitor or mcc. If your connection doesn't work, you might want to relaunch the configuration.");
- },
- end => 1,
- },
- },
- };
-
- my $use_wizard = 1;
- if ($::isInstall) {
- if ($first_time && $in->{method} =~ /^(ftp|http|nfs)$/) {
- !$::expert && !$o_noauto || $in->ask_okcancel(N("Network Configuration"),
- N("Because you are doing a network installation, your network is already configured.
-Click on Ok to keep your configuration, or cancel to reconfigure your Internet & Network connection.
-"), 1)
- and do {
- $netcnx->{type} = 'lan';
- output_with_perm("$::prefix$connect_file", 0755, qq(ifup eth0
-));
- output("$::prefix$disconnect_file", 0755, qq(
-ifdown eth0
-));
- $direct_net_install = 1;
- $use_wizard = 0;
- };
- } else {
- $wiz->{pages}{welcome} = $wiz->{pages}{install};
- }
- } else {
- $wiz->{pages}{welcome} = $wiz->{pages}{connection};
- };
-
- if ($use_wizard) {
- require wizards;
- $wiz->{var} = {
- netc => $o_netc || {},
- mouse => $o_mouse || {},
- intf => $o_intf || {},
- };
- wizards->new->safe_process($wiz, $in);
- }
+ if ($::isWizard) {
+ $::Wizard_no_previous = 1;
+ $::Wizard_finished = 1;
+ $in->ask_okcancel(N("Network Configuration"), $m, 1);
+ undef $::Wizard_no_previous;
+ undef $::Wizard_finished;
+ } else { $::isStandalone and $in->ask_warn('', $m) }
- # install needed packages:
- $network_configured or network::network::configureNetwork2($in, $::prefix, $netc, $intf);
+ step_5:
+
+ $network_configured or network::configureNetwork2($in, $prefix, $netc, $intf);
my $connect_cmd;
if ($netcnx->{type} =~ /modem/ || $netcnx->{type} =~ /isdn_external/) {
$connect_cmd = qq(
#!/bin/bash
if [ -n "\$DISPLAY" ]; then
- if [ -e /usr/bin/kppp ]; then
- /sbin/route del default
- /usr/bin/kppp &
- else
- /usr/sbin/net_monitor --connect
- fi
- else
- $connect_file
+if [ -e /usr/bin/kppp ]; then
+/sbin/route del default
+/usr/bin/kppp &
+else
+/usr/sbin/net_monitor --connect
+fi
+else
+$connect_file
fi
);
} elsif ($netcnx->{type}) {
$connect_cmd = qq(
#!/bin/bash
if [ -n "\$DISPLAY" ]; then
- /usr/sbin/net_monitor --connect
+/usr/sbin/net_monitor --connect
else
- $connect_file
+$connect_file
fi
);
} else {
@@ -947,15 +300,18 @@ fi
$connect_cmd = qq(
#!/bin/bash
if [ -n "\$DISPLAY" ]; then
- /usr/sbin/net_monitor --connect
+/usr/sbin/net_monitor --connect
else
- $connect_file
+$connect_file
fi
);
}
output_with_perm("$prefix$connect_prog", 0755, $connect_cmd) if $connect_cmd;
$netcnx->{$_} = $netc->{$_} foreach qw(NET_DEVICE NET_INTERFACE);
+
+ $netcnx->{NET_INTERFACE} and set_net_conf($netcnx, $netc);
$netcnx->{type} =~ /adsl/ or system("/sbin/chkconfig --del adsl 2> /dev/null");
+ save_conf($netcnx, $netc, $intf);
if ($::isInstall && $::o->{security} >= 3) {
require network::drakfirewall;
@@ -963,69 +319,275 @@ fi
}
}
-sub set_profile {
- my ($netcnx) = @_;
- system(qq(/sbin/set-netprofile "$netcnx->{PROFILE}"));
- log::explanations(qq(Switching to "$netcnx->{PROFILE}" profile));
+sub save_conf {
+ my ($netcnx, $netc, $intf) = @_;
+ my $adsl;
+ my $modem;
+ my $isdn;
+ $netcnx->{type} =~ /adsl/ and $adsl = $netcnx->{$netcnx->{type}};
+ $netcnx->{type} eq 'isdn_external' || $netcnx->{type} eq 'modem' and $modem = $netcnx->{$netcnx->{type}};
+ $netcnx->{type} eq 'isdn_internal' and $isdn = $netcnx->{$netcnx->{type}};
+ modules::load_category('network/main|usb');
+ require network::ethernet;
+ network::ethernet->import;
+ my @_all_cards = conf_network_card_backend($netc, $intf, undef, undef, undef, undef);
+
+ $intf = { %$intf };
+# "SystemName=" . do { $netc->{HOSTNAME} =~ /([^\.]*)\./; $1 } . "
+#DomainName=" . do { $netc->{HOSTNAME} =~ /\.(.*)/; $1 } . "
+#InternetAccessType=" . do { if ($netcnx->{type}) { $netcnx->{type} } else { $netc->{GATEWAY} ? "lan" : "" } } . "
+#InternetInterface=" . ($netc->{GATEWAY} && (!$netcnx->{type} || $netcnx->{type} eq 'lan') ? $netc->{GATEWAYDEV} : $netcnx->{NET_INTERFACE}) . "
+# InternetGateway=$netc->{GATEWAY}
+# DNSPrimaryIP=$netc->{dnsServer}
+# DNSSecondaryIP=$netc->{dnsServer2}
+# DNSThirdIP=$netc->{dnsServer3}
+# AdminInterface=
+
+# " . join ('', map {
+# "Eth${_}Known=" . ($intf->{"eth$_"}{DEVICE} eq "eth$_" ? 'true' : 'false') . "
+# Eth${_}IP=" . $intf->{"eth$_"}{IPADDR} . "
+# Eth${_}Mask=" . $intf->{"eth$_"}{NETMASK} . "
+# Eth${_}Mac=
+# Eth${_}BootProto=" . $intf->{"eth$_"}{BOOTPROTO} . "
+# Eth${_}OnBoot=" . $intf->{"eth$_"}{ONBOOT} . "
+# Eth${_}Hostname=$netc->{HOSTNAME}
+# Eth${_}HostAlias=" . do { $netc->{HOSTNAME} =~ /([^\.]*)\./; $1 } . "
+# Eth${_}Driver=$all_cards[$_][1]
+# Eth${_}Irq=
+# Eth${_}Port=
+# Eth${_}DHCPClient=" . ($intf->{"eth$_"}{BOOTPROTO} eq 'dhcp' ? $netcnx->{dhcp_client} : '') . "
+# Eth${_}DHCPServerName=" . ($intf->{"eth$_"}{BOOTPROTO} eq 'dhcp' ? $netc->{HOSTNAME} : '') . "\n"
+# } (0..9)) .
+# ISDNDriver=$isdn->{driver}
+# ISDNDeviceType=$isdn->{type}
+# ISDNIrq=$isdn->{irq}
+# ISDNMem=$isdn->{mem}
+# ISDNIo=$isdn->{io}
+# ISDNIo0=$isdn->{io0}
+# ISDNIo1=$isdn->{io1}
+# ISDNProtocol=$isdn->{protocol}
+# ISDNCardDescription=$isdn->{description}
+# ISDNCardVendor=$isdn->{vendor}
+# ISDNId=$isdn->{id}
+# ISDNProvider=$netc->{DOMAINNAME2}
+# ISDNProviderPhone=$isdn->{phone_out}
+# ISDNProviderDomain=" . do { $netc->{DOMAINNAME2} =~ /\.(.*)/; $1 } . "
+# ISDNProviderDNS1=$netc->{dnsServer2}
+# ISDNProviderDNS2=$netc->{dnsServer3}
+# ISDNDialing=$isdn->{dialing_mode}
+# ISDNSpeed=$isdn->{speed}
+# ISDNTimeout=$isdn->{huptimeout}
+# ISDNHomePhone=$isdn->{phone_in}
+# ISDNLogin=$isdn->{login}
+# ISDNPassword=$isdn->{passwd}
+# ISDNConfirmPassword=$isdn->{passwd2}
+# PPPProviderPhone=$modem->{phone}
+# PPPProviderDNS1=$modem->{dns1}
+# PPPProviderDNS2=$modem->{dns2}
+# PPPPassword=$modem->{passwd}
+# PPPConfirmPassword=$modem->{passwd}
+# ADSLProviderDNS1=$netc->{dnsServer2}
+# ADSLProviderDNS2=$netc->{dnsServer3}
+
+ my $str;
+ $str .= "
+PPPDevice=$modem->{device}
+PPPDeviceSpeed=
+PPPConnectionName=$modem->{connection}
+PPPProviderDomain=$modem->{domain}
+PPPLogin=$modem->{login}
+PPPAuthentication=$modem->{auth}
+PPPSpecialCommand=" . ($netcnx->{type} eq 'isdn_external' ? $netcnx->{isdn_external}{special_command} : '') if $conf{modem};
+
+ $str .= "
+ADSLInterfacesList=
+ADSLModem=" . q( # Obsolete information. Please don't use it.) . "
+ADSLType=" . ($netcnx->{type} =~ /adsl/ ? $netcnx->{type} : '') . "
+ADSLProviderDomain=$netc->{DOMAINNAME2}
+ADSLLogin=$adsl->{login}
+" . #ADSLPassword=$adsl->{passwd}
+"DOMAINNAME2=$netc->{DOMAINNAME2}" if $conf{adsl};
+
+ output_with_perm("$prefix/etc/sysconfig/network-scripts/drakconnect_conf", 0600, $str);
+ my $a = $netcnx->{PROFILE} ? $netcnx->{PROFILE} : "default";
+ cp_af("$prefix/etc/sysconfig/network-scripts/drakconnect_conf", "$prefix/etc/sysconfig/network-scripts/drakconnect_conf." . $a);
+ chmod 0600, "$prefix/etc/sysconfig/network-scripts/drakconnect_conf";
+ chmod 0600, "$prefix/etc/sysconfig/network-scripts/drakconnect_conf." . $a;
+ foreach (["$prefix$connect_file", "up"],
+ ["$prefix$disconnect_file", "down"],
+ ["$prefix$connect_prog", "prog"],
+ ["$prefix/etc/ppp/ioptions1B", "iop1B"],
+ ["$prefix/etc/ppp/ioptions2B", "iop2B"],
+ ["$prefix/etc/isdn/isdn1B.conf", "isdn1B"],
+ ["$prefix/etc/isdn/isdn2B.conf", "isdn2B"],
+ ["$prefix/etc/resolv.conf", "resolv"],
+ ["$prefix/etc/ppp/peers/adsl", "speedtouch"],
+ ["$prefix/etc/ppp/peers/adsl", "eci"],
+ ) {
+ my $file = "$prefix/etc/sysconfig/network-scripts/net_" . $_->[1] . "." . $a;
+ -e ($_->[0]) and cp_af($_->[0], $file) and chmod 0755, $file;
+ }
}
-sub save_profile {
- my ($netcnx) = @_;
- system(qq(/sbin/save-netprofile "$netcnx->{PROFILE}"));
- log::explanations(qq(Saving "$netcnx->{PROFILE}" profile));
+sub set_profile {
+ my ($netcnx, $profile) = @_;
+ $profile ||= $netcnx->{PROFILE};
+ $profile or return;
+ my $f = "$prefix/etc/sysconfig/network-scripts/drakconnect_conf";
+ -e ($f . "." . $profile) or return;
+ $netcnx->{PROFILE} = $profile;
+ cp_af($f . "." . $profile, $f);
+ foreach (["$prefix$connect_file", "up"],
+ ["$prefix$disconnect_file", "down"],
+ ["$prefix$connect_prog", "prog"],
+ ["$prefix/etc/ppp/ioptions1B", "iop1B"],
+ ["$prefix/etc/ppp/ioptions2B", "iop2B"],
+ ["$prefix/etc/isdn/isdn1B.conf", "isdn1B"],
+ ["$prefix/etc/isdn/isdn2B.conf", "isdn2B"],
+ ["$prefix/etc/resolv.conf", "resolv"],
+ ["$prefix/etc/ppp/peers/adsl", "speedtouch"],
+ ["$prefix/etc/ppp/peers/adsl", "eci"],
+ ) {
+ my $c = "$prefix/etc/sysconfig/network-scripts/net_" . $_->[1] . "." . $profile;
+ -e ($c) and cp_af($c, $_->[0]);
+ }
}
sub del_profile {
- my ($profile) = @_;
- return if !$profile || $profile eq "default";
- rm_rf("$::prefix/etc/netprofile/profiles/$profile");
- log::explanations(qq(Deleting "$profile" profile));
+ my ($_netcnx, $profile) = @_;
+ $profile or return;
+ $profile eq "default" and return;
+ rm_rf("$prefix/etc/sysconfig/network-scripts/drakconnect_conf." . $profile);
+ rm_rf(glob_("$prefix/etc/sysconfig/network-scripts/net_{up,down,prog,iop1B,iop2B,isdn1B,isdn2B,resolv,speedtouch}." . $profile));
}
sub add_profile {
my ($netcnx, $profile) = @_;
- return if !$profile || $profile eq "default" || member($profile, get_profiles());
- system(qq(/sbin/clone-netprofile "$netcnx->{PROFILE}" "$profile"));
- log::explanations(qq("Creating "$profile" profile));
+ $profile or return;
+ $profile eq "default" and return;
+ my $cmd1 = "$prefix/etc/sysconfig/network-scripts/drakconnect_conf." . ($netcnx->{PROFILE} ? $netcnx->{PROFILE} : "default");
+ my $cmd2 = "$prefix/etc/sysconfig/network-scripts/drakconnect_conf." . $profile;
+ cp_af($cmd1, $cmd2);
}
-sub get_profiles() {
- map { if_(m!([^/]*)/$!, $1) } glob("$::prefix/etc/netprofile/profiles/*/");
+sub get_profiles {
+ map { if_(/drakconnect_conf\.(.*)/, $1) } all("$::prefix/etc/sysconfig/network-scripts");
}
+
sub load_conf {
my ($netcnx, $netc, $intf) = @_;
- my $current = { getVarsFromSh("$prefix/etc/netprofile/current") };
-
- $netcnx->{PROFILE} = $current->{PROFILE} || 'default';
- network::network::read_all_conf($prefix, $netc, $intf);
+ my $adsl_pptp = {};
+ my $adsl_pppoe = {};
+ my $modem = {};
+ my $isdn_external = {};
+ my $isdn = {};
+
+ if (-e "$prefix/etc/sysconfig/network-scripts/drakconnect_conf") {
+ foreach (cat_("$prefix/etc/sysconfig/network-scripts/drakconnect_conf")) {
+# /^DNSPrimaryIP=(.*)$/ and $netc->{dnsServer} = $1;
+# /^DNSSecondaryIP=(.*)$/ and $netc->{dnsServer2} = $1;
+# /^DNSThirdIP=(.*)$/ and $netc->{dnsServer3} = $1;
+# /^InternetAccessType=(.*)$/ and $netcnx->{type} = $1;
+# /^InternetInterface=(.*)$/ and $netcnx->{NET_INTERFACE} = $1;
+# /^InternetGateway=(.*)$/ and $netc->{GATEWAY} = $1;
+# /^SystemName=(.*)$/ and $system_name = $1;
+# /^DomainName=(.*)$/ and $domain_name = $1;
+# /^Eth([0-9])Known=true$/ and $intf->{"eth$1"}{DEVICE} = "eth$1";
+# /^Eth([0-9])IP=(.*)$/ && $intf->{"eth$1"}{DEVICE} and $intf->{"eth$1"}{IPADDR} = $2;
+# /^Eth([0-9])Mask=(.*)\n/ && $intf->{"eth$1"}{DEVICE} and $intf->{"eth$1"}{NETMASK} = $2;
+# /^Eth([0-9])BootProto=(.*)\n/ && $intf->{"eth$1"}{DEVICE} and $intf->{"eth$1"}{BOOTPROTO} = $2;
+# /^Eth([0-9])OnBoot=(.*)\n/ && $intf->{"eth$1"}{DEVICE} and $intf->{"eth$1"}{ONBOOT} = $2;
+# /^Eth([0-9])Hostname=(.*)\n/ && $intf->{"eth$1"}{DEVICE} and $netc->{HOSTNAME} = $2;
+# /^Eth([0-9])Driver=(.*)\n/ && $intf->{"eth$1"}{DEVICE} and $intf->{"eth$1"}{driver} = $2;
+# /^ISDNDriver=(.*)$/ and $isdn->{driver} = $1;
+# /^ISDNDeviceType=(.*)$/ and $isdn->{type} = $1;
+# /^ISDNIrq=(.*)/ and $isdn->{irq} = $1;
+# /^ISDNMem=(.*)$/ and $isdn->{mem} = $1;
+# /^ISDNIo=(.*)$/ and $isdn->{io} = $1;
+# /^ISDNIo0=(.*)$/ and $isdn->{io0} = $1;
+# /^ISDNIo1=(.*)$/ and $isdn->{io1} = $1;
+# /^ISDNProtocol=(.*)$/ and $isdn->{protocol} = $1;
+# /^ISDNCardDescription=(.*)$/ and $isdn->{description} = $1;
+# /^ISDNCardVendor=(.*)$/ and $isdn->{vendor} = $1;
+# /^ISDNId=(.*)$/ and $isdn->{id} = $1;
+# /^ISDNProviderPhone=(.*)$/ and $isdn->{phone_out} = $1;
+# /^ISDNDialing=(.*)$/ and $isdn->{dialing_mode} = $1;
+# /^ISDNISDNSpeed=(.*)$/ and $isdn->{speed} = $1;
+# /^ISDNTimeout=(.*)$/ and $isdn->{huptimeout} = $1;
+# /^ISDNHomePhone=(.*)$/ and $isdn->{phone_in} = $1;
+# /^ISDNLogin=(.*)$/ and $isdn->{login} = $1;
+# /^ISDNPassword=(.*)$/ and $isdn->{passwd} = $1;
+# /^ISDNConfirmPassword=(.*)$/ and $isdn->{passwd2} = $1;
+
+ #/^PPPDevice=(.*)$/ and $modem->{device} = $1;
+ /^PPPConnectionName=(.*)$/ and $modem->{connection} = $1; # Keep this for futur multiple cnx support
+ #/^PPPProviderPhone=(.*)$/ and $modem->{phone} = $1;
+ /^PPPProviderDomain=(.*)$/ and $modem->{domain} = $1; # used only for kppp
+ #/^PPPProviderDNS1=(.*)$/ and $modem->{dns1} = $1; # be aware that this value is now extracted from kppprc file ONLY
+ #/^PPPProviderDNS2=(.*)$/ and $modem->{dns2} = $1;
+ /^PPPLogin=(.*)$/ and $modem->{login} = $1;
+ #/^PPPPassword=(.*)$/ and $modem->{passwd} = $1;
+ /^PPPAuthentication=(.*)$/ and $modem->{auth} = $1; # We keep this because system is configured the same for both PAP and CHAP.
+ if (/^PPPSpecialCommand=(.*)$/) {
+ $netcnx->{type} eq 'isdn_external' and $netcnx->{$netcnx->{type}}{special_command} = $1;
+ }
+# /^ADSLLogin=(.*)$/ and $adsl_pppoe->{login} = $1;
+# /^ADSLPassword=(.*)$/ and $adsl_pppoe->{passwd} = $1;
+ /^DOMAINNAME2=(.*)$/ and $netc->{DOMAINNAME2} = $1;
+ }
+ }
+# $system_name && $domain_name and $netc->{HOSTNAME} = join ('.', $system_name, $domain_name);
+ $adsl_pptp->{$_} = $adsl_pppoe->{$_} foreach 'login', 'passwd', 'passwd2';
+ $isdn_external->{$_} = $modem->{$_} foreach 'device', 'connection', 'phone', 'domain', 'dns1', 'dns2', 'login', 'passwd', 'auth';
+ $netcnx->{adsl_pptp} = $adsl_pptp;
+ $netcnx->{adsl_pppoe} = $adsl_pppoe;
+ $netcnx->{modem} = $modem;
+ $netcnx->{modem} = $isdn_external;
+ $netcnx->{isdn_internal} = $isdn;
+# -e "$prefix/etc/sysconfig/network" and put_in_hash($netc, network::read_conf("$prefix/etc/sysconfig/network"));
+# foreach (glob_("$prefix/etc/sysconfig/ifcfg-*")) {
+# my $l = network::read_interface_conf($_);
+# $intf->{$l->{DEVICE}} = $l;
+# }
+# my $file = "$prefix/etc/resolv.conf";
+# if (-e $file) {
+# put_in_hash($netc, network::read_resolv_conf($file));
+# }
+ network::read_all_conf($prefix, $netc, $intf);
}
-sub get_net_device() {
- my $connect_file = "/etc/sysconfig/network-scripts/net_cnx_up";
- my $network_file = "/etc/sysconfig/network";
- if (cat_("$prefix$connect_file") =~ /ifup/) {
- if_(cat_($connect_file) =~ /^\s*ifup\s+(.*)/m, split(' ', $1))
- } elsif (cat_("$prefix$connect_file") =~ /network/) {
- ${{ getVarsFromSh("$prefix$network_file") }}{GATEWAYDEV};
- } elsif (cat_("$prefix$connect_file") =~ /isdn/) {
- "ippp+";
- } else {
- "ppp+";
- };
+#- ensures the migration from old config files
+sub read_raw_net_conf {
+ my ($suffix) = @_;
+ my $dir = "$::prefix/etc/sysconfig/network-scripts";
+# $suffix = $suffix ? ".$suffix" : '';
+ rename "$dir/draknet$suffix", "$dir/drakconnect$suffix";
+ getVarsFromSh("$dir/drakconnect_conf");
+}
+
+sub get_net_device {
+ ${{ read_raw_net_conf() }}{InternetInterface};
}
sub read_net_conf {
my ($_prefix, $netcnx, $netc) = @_;
+ add2hash($netcnx, { read_raw_net_conf('_conf') });
$netc->{$_} = $netcnx->{$_} foreach 'NET_DEVICE', 'NET_INTERFACE';
$netcnx->{$netcnx->{type}} ||= {};
+ add2hash($netcnx->{$netcnx->{type}}, { read_raw_net_conf($netcnx->{type}) });
+}
+
+sub set_net_conf {
+ my ($netcnx, $netc) = @_;
+ setVarsInShMode("$prefix/etc/sysconfig/drakconnect", 0600, $netcnx, "NET_DEVICE", "NET_INTERFACE", "type", "PROFILE");
+ setVarsInShMode("$prefix/etc/sysconfig/drakconnect." . $netcnx->{type}, 0600, $netcnx->{$netcnx->{type}}); #- doesn't work, don't know why
+ setVarsInShMode("$prefix/etc/sysconfig/drakconnect.netc", 0600, $netc); #- doesn't work, don't know why
}
sub start_internet {
my ($o) = @_;
init_globals($o, $o->{prefix});
- #- give a chance for module to be loaded using kernel-BOOT modules...
- $::isStandalone or modules::load_category('network/main|gigabit|usb');
run_program::rooted($prefix, $connect_file);
}
@@ -1035,6 +597,9 @@ sub stop_internet {
run_program::rooted($prefix, $disconnect_file);
}
+#---------------------------------------------
+# WONDERFULL pad
+#---------------------------------------------
1;
=head1 network::netconnect::detect()