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.pm1585
1 files changed, 0 insertions, 1585 deletions
diff --git a/perl-install/network/netconnect.pm b/perl-install/network/netconnect.pm
deleted file mode 100644
index b4246a0de..000000000
--- a/perl-install/network/netconnect.pm
+++ /dev/null
@@ -1,1585 +0,0 @@
-package network::netconnect; # $Id$
-
-use strict;
-use common;
-use log;
-use detect_devices;
-use run_program;
-use modules;
-use any;
-use fs;
-use mouse;
-use network::network;
-use network::tools;
-use MDK::Common::Globals "network", qw($in);
-
-sub detect {
- my ($modules_conf, $auto_detect, $o_class) = @_;
- my %l = (
- isdn => sub {
- require network::isdn;
- $auto_detect->{isdn} = network::isdn::detect_backend($modules_conf);
- },
- lan => sub { # ethernet
- require network::ethernet;
- modules::load_category($modules_conf, list_modules::ethernet_categories());
- $auto_detect->{lan} = { map { $_->[0] => $_->[1] } network::ethernet::get_eth_cards($modules_conf) };
- },
- adsl => sub {
- require network::adsl;
- $auto_detect->{adsl} = network::adsl::adsl_detect();
- },
- modem => sub {
- $auto_detect->{modem} = { map { $_->{description} || "$_->{MANUFACTURER}|$_->{DESCRIPTION} ($_->{device})" => $_ } detect_devices::getModem($modules_conf) };
- },
- );
- $l{$_}->() foreach $o_class || keys %l;
- return;
-}
-
-sub init_globals {
- my ($in) = @_;
- MDK::Common::Globals::init(in => $in);
-}
-
-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("$::prefix/etc/sysconfig/clock");
- my @country;
- foreach (keys %tmz2country) {
- if ($_ eq $tm_parse{ZONE}) {
- unshift @country, $tmz2country{$_};
- } else { push @country, $tmz2country{$_} }
- }
- \@country;
-}
-
-# load sub category's wizard pages into main wizard data structure
-sub get_subwizard {
- my ($wiz, $type) = @_;
- my %net_conf_callbacks = (adsl => sub { require network::adsl; &network::adsl::get_wizard },
- #cable => sub { require network::ethernet; &network::ethernet::get_wizard },
- #isdn => sub { require network::isdn; &network::isdn::get_wizard },
- #lan => sub { require network::ethernet; &network::ethernet::get_wizard },
- #modem => sub { require network::modem; &network::modem::get_wizard },
- );
- $net_conf_callbacks{$type}->($wiz);
-}
-
-# configuring all network devices
-sub real_main {
- my ($netcnx, $in, $modules_conf, $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, $cnx_type, $type, @all_cards, %eth_intf, %all_eth_intf);
- my (%connections, @connection_list, $is_wireless);
- my ($modem, $modem_name, $modem_conf_read, $modem_dyn_dns, $modem_dyn_ip);
- my $cable_no_auth;
- my ($adsl_type, @adsl_devices, $adsl_failed, $adsl_answer, %adsl_data, $adsl_data, $adsl_provider, $adsl_old_provider);
- my ($ntf_name, $gateway_ex, $up, $need_restart_network);
- my ($isdn, $isdn_name, $isdn_type, %isdn_cards, @isdn_dial_methods);
- my $my_isdn = join('', N("Manual choice"), " (", N("Internal ISDN card"), ")");
- my ($ndiswrapper_driver, $ndiswrapper_inf_file);
- my ($module, $auto_ip, $protocol, $onboot, $needhostname, $hotplug, $track_network_id, @fields); # lan config
- my $success = 1;
- my $ethntf = {};
- my $db_path = "/usr/share/apps/kppp/Provider";
- my (%countries, @isp, $country, $provider, $old_provider);
- my $config = {};
- eval(cat_("$::prefix/etc/sysconfig/drakconnect"));
-
- my %wireless_mode = (N("Ad-hoc") => "Ad-hoc",
- N("Managed") => "Managed",
- N("Master") => "Master",
- N("Repeater") => "Repeater",
- N("Secondary") => "Secondary",
- N("Auto") => "Auto",
- );
- my %l10n_lan_protocols = (
- static => N("Manual configuration"),
- dhcp => N("Automatic IP (BOOTP/DHCP)"),
- if_(0,
- dhcp_zeroconf => N("Automatic IP (BOOTP/DHCP/Zeroconf)"),
- )
- );
- my $_w = N("Protocol for the rest of the world");
- my %isdn_protocols = (
- 2 => N("European protocol (EDSS1)"),
- 3 => N("Protocol for the rest of the world\nNo D-Channel (leased lines)"),
- );
-
- network::tools::remove_initscript();
-
- init_globals($in);
-
- read_net_conf($netcnx, $netc, $intf);
-
- $netc->{autodetect} = {};
-
- my $lan_detect = sub {
- detect($modules_conf, $netc->{autodetect}, 'lan');
- require network::ethernet;
- modules::interactive::load_category($in, $modules_conf, list_modules::ethernet_categories(), !$::expert, 0);
- @all_cards = network::ethernet::get_eth_cards($modules_conf);
- %all_eth_intf = network::ethernet::get_eth_cards_names(@all_cards); #- needed not to loose GATEWAYDEV
- require list_modules; #- FIXME: check if useful
- %eth_intf = map { $_->[0] => join(': ', $_->[0], $_->[2]) }
- grep { to_bool($is_wireless) == c::isNetDeviceWirelessAware($_->[0]) } @all_cards;
- };
-
- my $find_lan_module = sub {
- if (my $dev = find { $_->{device} eq $ethntf->{DEVICE} } detect_devices::pcmcia_probe()) { # PCMCIA case
- $module = $dev->{driver};
- } elsif ($dev = find { $_->[0] eq $ethntf->{DEVICE} } @all_cards) {
- $module = $dev->[1];
- } else { $module = "" }
- };
-
- my $is_hotplug_blacklisted = sub {
- bool2yesno(member($module, qw(b44 forcedeth madwifi_pci)) ||
- find { $_->{device} eq $ntf_name } detect_devices::pcmcia_probe());
- };
-
- my %adsl_devices = (
- speedtouch => N("Alcatel speedtouch USB modem"),
- sagem => N("Sagem USB modem"),
- bewan => N("Bewan modem"),
- eci => N("ECI Hi-Focus modem"), # this one needs eci agreement
- );
-
- my %adsl_types = (
- dhcp => N("Dynamic Host Configuration Protocol (DHCP)"),
- manual => N("Manual TCP/IP configuration"),
- pptp => N("Point to Point Tunneling Protocol (PPTP)"),
- pppoe => N("PPP over Ethernet (PPPoE)"),
- pppoa => N("PPP over ATM (PPPoA)"),
- capi => N("DSL over CAPI"),
- );
-
- my %encapsulations = (
- 1 => N("Bridged Ethernet LLC"),
- 2 => N("Bridged Ethernet VC"),
- 3 => N("Routed IP LLC"),
- 4 => N("Routed IP VC"),
- 5 => N("PPPoA LLC"),
- 6 => N("PPPoA VC"),
- );
-
- my %ppp_auth_methods = (
- 0 => N("Script-based"),
- 1 => N("PAP"),
- 2 => N("Terminal-based"),
- 3 => N("CHAP"),
- 4 => N("PAP/CHAP"),
- );
-
- my $offer_to_connect = sub {
- return "ask_connect_now" if $netc->{internet_cnx_choice} eq 'adsl' && !member($adsl_type, qw(manual dhcp));
- return "ask_connect_now" if member($netc->{internet_cnx_choice}, qw(modem isdn isdn_external));
- return "end";
- };
-
- my $after_start_on_boot_step = sub {
- if ($netc->{internet_cnx_choice} && exists $netc->{internet_cnx}{$netc->{internet_cnx_choice}}) {
- $netcnx->{type} = $netc->{internet_cnx}{$netc->{internet_cnx_choice}}{type};
- } else {
- undef $netc->{NET_DEVICE};
- }
- if ($netcnx->{type} eq 'adsl' && member($adsl_type, qw(manual dhcp)) && member($ntf_name, qw(sagem))) {
- #- we need to write sagem specific parameters and load corresponding modules/programs
- network::adsl::adsl_conf_backend($in, $modules_conf, $netcnx, $netc, $intf, $ntf_name, $adsl_type, $netcnx);
- }
- network::network::configureNetwork2($in, $modules_conf, $::prefix, $netc, $intf);
- $network_configured = 1;
- return "restart" if $need_restart_network && !$::isInstall && !$::expert;
- return $offer_to_connect->();
- };
-
- my $goto_start_on_boot_ifneeded = sub {
- return $after_start_on_boot_step->() if $netcnx->{type} eq "lan";
- return "isdn_dial_on_boot" if $netcnx->{type} =~ /isdn/;
- return "network_on_boot";
- };
-
- my $save_cnx = sub {
- if (keys %$config) {
- require Data::Dumper;
- output("$::prefix/etc/sysconfig/drakconnect", Data::Dumper->Dump([ $config ], [ '$p' ]));
- }
- return $goto_start_on_boot_ifneeded->();
- };
-
- my $handle_multiple_cnx = sub {
- $need_restart_network = member($netcnx->{type}, qw(cable lan)) || $netcnx->{type} eq 'adsl' && member($adsl_type, qw(manual dhcp));
- my $nb = keys %{$netc->{internet_cnx}};
- if (1 < $nb) {
- return "multiple_internet_cnx";
- } else {
- $netc->{internet_cnx_choice} = $nb == 1 ? (keys %{$netc->{internet_cnx}})[0] : $netcnx->{type};
- return $save_cnx->();
- }
- };
-
-
- # main wizard:
- my $wiz;
- $wiz =
- {
- defaultimage => "drakconnect.png",
- name => N("Network & Internet Configuration"),
- pages => {
- welcome =>
- {
- pre => sub {
- # keep b/c of translations in case they can be reused somewhere else:
- my @_a = (N("(detected on port %s)", 'toto'),
- #-PO: here, "(detected)" string will be appended to eg "ADSL connection"
- N("(detected %s)", 'toto'), N("(detected)"));
- my @connections =
- ([ N("Modem connection"), "modem" ],
- [ N("ISDN connection"), "isdn" ],
- [ N("ADSL connection"), "adsl" ],
- [ N("Cable connection"), "cable" ],
- [ N("LAN connection"), "lan" ],
- [ N("Wireless connection"), "lan" ],
- );
-
- foreach (@connections) {
- my ($string, $type) = @$_;
- $connections{$string} = $type;
- }
- @connection_list = { val => \$cnx_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,
- post => sub {
- $is_wireless = $cnx_type eq N("Wireless connection");
- #- why read again the net_conf here?
- read_net_conf($netcnx, $netc, $intf) if $::isInstall; # :-(
- $type = $netcnx->{type} = $connections{$cnx_type};
- return $type;
- },
- },
-
- prepare_detection =>
- {
- name => N("We are now going to configure the %s connection.\n\n\nPress \"%s\" to continue.",
- translate($type), N("Next")),
- post => $handle_multiple_cnx,
- },
-
-
- hw_account =>
- {
- name => N("Connection Configuration") . "\n\n" .
- N("Please fill or check the field below"),
- data => sub {
- [
- (map {
- my ($dstruct, $field, $item) = @$_;
- $item->{val} = \$dstruct->{$field};
- if__(exists $dstruct->{$field}, $item);
- } ([ $netcnx, "irq", { label => N("Card IRQ") } ],
- [ $netcnx, "mem", { label => N("Card mem (DMA)") } ],
- [ $netcnx, "io", { label => N("Card IO") } ],
- [ $netcnx, "io0", { label => N("Card IO_0") } ],
- [ $netcnx, "io1", { label => N("Card IO_1") } ],
- [ $isdn, "phone_in", { label => N("Your personal phone number") } ],
- [ $netc, "DOMAINNAME2", { label => N("Provider name (ex provider.net)") } ],
- [ $isdn, "phone_out", { label => N("Provider phone number") } ],
- [ $netc, "dnsServer2", { label => N("Provider DNS 1 (optional)") } ],
- [ $netc, "dnsServer3", { label => N("Provider DNS 2 (optional)") } ],
- [ $isdn, "dialing_mode", { label => N("Dialing mode"), list => ["auto", "manual"] } ],
- [ $isdn, "speed", { label => N("Connection speed"), list => ["64 Kb/s", "128 Kb/s"] } ],
- [ $netcnx, "huptimeout", { label => N("Connection timeout (in sec)") } ], #unused?
- )
- ),
- ({ label => N("Account Login (user name)"), val => \$isdn->{login} },
- { label => N("Account Password"), val => \$isdn->{passwd}, hidden => 1 },
- )
- ];
- },
- post => sub {
- network::isdn::write_config($isdn);
- $netc->{$_} = 'ippp0' foreach 'NET_DEVICE', 'NET_INTERFACE';
- $handle_multiple_cnx->();
- },
- },
-
- cable =>
- {
- pre => sub {
- $cable_no_auth = sub { $netc->{bpalogin} eq N("None") };
- },
- name => N("Cable: account options"),
- data => sub {
- [
- { label => N("Authentication"), type => "list", val => \$netc->{bpalogin}, list => [ N("None"), N("Use BPALogin (needed for Telstra)") ] },
- { label => N("Account Login (user name)"), val => \$netcnx->{login}, disabled => $cable_no_auth },
- { label => N("Account Password"), val => \$netcnx->{passwd}, hidden => 1, disabled => $cable_no_auth },
- ];
- },
- post => sub {
- if ($cable_no_auth->()) {
- if (-f "$::prefix/etc/rc.d/init.d/bpalogin") {
- require services;
- services::stop("bpalogin");
- services::do_not_start_service_on_boot("bpalogin");
- }
- } else {
- if ($in->do_pkgs->install("bpalogin")) {
- substInFile {
- s/username\s+.*\n/username $netcnx->{login}\n/;
- s/password\s+.*\n/password $netcnx->{passwd}\n/;
- } "$::prefix/etc/bpalogin.conf";
- require services;
- services::start_service_on_boot("bpalogin");
- services::restart("bpalogin");
- }
- }
- $auto_ip = 1;
- return "lan";
- }
- },
-
- isdn =>
- {
- pre=> sub {
- detect($modules_conf, $netc->{autodetect}, 'isdn');
- %isdn_cards = map { $_->{description} => $_ } @{$netc->{autodetect}{isdn}};
- },
- name => N("Select the network interface to configure:"),
- data => sub {
- [ { label => N("Net Device"), type => "list", val => \$isdn_name, allow_empty_list => 1,
- list => [ $my_isdn, N("External ISDN modem"), keys %isdn_cards ] } ];
- },
- post => sub {
- # !intern_pci:
- # data => [ { val => \$isdn_type, type => "list", list => [ , ], } ],
- # post => sub {
- if ($isdn_name eq $my_isdn) {
- return "isdn_ask";
- } elsif ($isdn_name eq N("External ISDN modem")) {
- detect($modules_conf, $netc->{autodetect}, 'modem');
- $netcnx->{type} = $netc->{isdntype} = 'isdn_external';
- $netcnx->{isdn_external}{device} = network::modem::first_modem($netc);
- network::isdn::read_config($netcnx->{isdn_external});
- #- FIXME: seems to be specific to ZyXEL Adapter Omni.net/TA 128/Elite 2846i
- #- it does not even work with TA 128 modems
- #- http://bugs.mandrakelinux.com/query.php?bug=1033
- $netcnx->{isdn_external}{special_command} = 'AT&F&O2B40';
- require network::modem;
- $modem = $netcnx->{isdn_external};
- return "modem";
- }
-
- $netc->{isdntype} = 'isdn_internal';
- # FIXME: some of these should be taken from isdn db
- $netcnx->{isdn_internal} = $isdn = { map { $_ => $isdn_cards{$isdn_name}{$_} } qw(description vendor id card_type driver type mem io io0 io1 irq firmware) };
-
- if ($isdn->{id}) {
- log::explanations("found isdn card : $isdn->{description}; vendor : $isdn->{vendor}; id : $isdn->{id}; driver : $isdn->{driver}\n");
- $isdn->{description} =~ s/\|/ -- /;
- }
-
- network::isdn::read_config($isdn);
- $isdn->{driver} = $isdn_cards{$isdn_name}{driver}; #- do not let config overwrite default driver
-
- #- let the user choose hisax or capidrv if both are available
- $isdn->{driver} ne "capidrv" && network::isdn::get_capi_card($isdn) and return "isdn_driver";
- return "isdn_protocol";
- },
- },
-
-
- isdn_ask =>
- {
- pre => sub {
- %isdn_cards = network::isdn::get_cards();
- },
- name => N("Select a device!"),
- data => sub { [ { label => N("Net Device"), val => \$isdn_name, type => 'list', separator => '|', list => [ keys %isdn_cards ], allow_empty_list => 1 } ] },
- pre2 => sub {
- my ($label) = @_;
-
- #- ISDN card already detected
- goto isdn_ask_step_3;
-
- isdn_ask_step_1:
- my $e = $in->ask_from_list_(N("ISDN Configuration"),
- $label . "\n" . N("What kind of card do you have?"),
- [ N_("ISA / PCMCIA"), N_("PCI"), N_("USB"), N_("I do not know") ]
- ) or return;
- isdn_ask_step_1b:
- if ($e =~ /PCI/) {
- $isdn->{card_type} = 'pci';
- } elsif ($e =~ /USB/) {
- $isdn->{card_type} = 'usb';
- } else {
- $in->ask_from_list_(N("ISDN Configuration"),
- N("
-If you have an ISA card, the values on the next screen should be right.\n
-If you have a PCMCIA card, you have to know the \"irq\" and \"io\" of your card.
-"),
- [ N_("Continue"), N_("Abort") ]) eq 'Continue' or goto isdn_ask_step_1;
- $isdn->{card_type} = 'isa';
- }
-
- isdn_ask_step_2:
- $e = $in->ask_from_listf(N("ISDN Configuration"),
- N("Which of the following is your ISDN card?"),
- sub { $_[0]{description} },
- [ network::isdn::get_cards_by_type($isdn->{card_type}) ]) or goto($isdn->{card_type} =~ /usb|pci/ ? 'isdn_ask_step_1' : 'isdn_ask_step_1b');
- $e->{$_} and $isdn->{$_} = $e->{$_} foreach qw(driver type mem io io0 io1 irq firmware);
-
- },
- post => sub {
- $netcnx->{isdn_internal} = $isdn = $isdn_cards{$isdn_name};
- return "isdn_protocol";
- }
- },
-
-
- isdn_driver =>
- {
- pre => sub {
- $isdn_name = "capidrv";
- },
- name => N("A CAPI driver is available for this modem. This CAPI driver can offer more capabilities than the free driver (like sending faxes). Which driver do you want to use?"),
- data => sub { [
- { label => N("Driver"), type => "list", val => \$isdn_name,
- list => [ $isdn->{driver}, "capidrv" ] }
- ] },
- post => sub {
- $isdn->{driver} = $isdn_name;
- return "isdn_protocol";
- }
- },
-
-
- isdn_protocol =>
- {
- name => N("ISDN Configuration") . "\n\n" . N("Which protocol do you want to use?"),
- data => [
- { label => N("Protocol"), type => "list", val => \$isdn_type,
- list => [ keys %isdn_protocols ], format => sub { $isdn_protocols{$_[0]} } }
- ],
- post => sub {
- $isdn->{protocol} = $isdn_type;
- return "isdn_db";
- }
- },
-
-
- isdn_db =>
- {
- name => N("ISDN Configuration") . "\n\n" . N("Select your provider.\nIf it is not listed, choose Unlisted."),
- data => sub {
- [ { label => N("Provider:"), type => "list", val => \$provider, separator => '|',
- list => [ N("Unlisted - edit manually"), network::isdn::read_providers_backend() ] } ];
- },
- post => sub {
- network::isdn::get_info_providers_backend($isdn, $netc, $provider);
- $isdn->{huptimeout} = 180;
- $isdn->{$_} ||= '' foreach qw(phone_in phone_out dialing_mode login passwd passwd2 idl speed);
- add2hash($netc, { dnsServer2 => '', dnsServer3 => '', DOMAINNAME2 => '' });
- return "hw_account";
- },
- },
-
-
- no_supported_winmodem =>
- {
- name => N("Warning") . "\n\n" . N("Your modem is not supported by the system.
-Take a look at http://www.linmodems.org"),
- end => 1,
- },
-
-
- modem =>
- {
- pre => sub {
- require network::modem;
- detect($modules_conf, $netc->{autodetect}, 'modem');
- },
- name => N("Select the modem to configure:"),
- data => sub {
- [ { label => N("Modem"), type => "list", val => \$modem_name, allow_empty_list => 1,
- list => [ keys %{$netc->{autodetect}{modem}}, N("Manual choice") ], } ];
- },
- post => sub {
- $modem ||= $netcnx->{modem} ||= {};
- return 'choose_serial_port' if $modem_name eq N("Manual choice");
- $ntf_name = $netc->{autodetect}{modem}{$modem_name}{device} || $netc->{autodetect}{modem}{$modem_name}{description};
-
- return "ppp_provider" if $ntf_name =~ m!^/dev/!;
- return "choose_serial_port" if !$ntf_name;
-
- my $type;
-
- my %pkgs2path = (
- hcfpcimodem => "/usr/sbin/hcfpciconfig",
- hsflinmodem => "/usr/sbin/hsfconfig",
- ltmodem => "/etc/devfs/conf.d/ltmodem.conf",
- slmodem => "/usr/sbin/slmodemd",
- );
-
- my %devices = (ltmodem => '/dev/ttyS14',
- hsflinmodem => '/dev/ttySHSF0',
- slmodem => '/dev/ttySL0'
- );
-
-
- if (my $driver = $netc->{autodetect}{modem}{$modem_name}{driver}) {
- $driver =~ /^Hcf:/ and $type = "hcfmodem";
- $driver =~ /^Hsf:/ and $type = "hsfmodem";
- $driver =~ /^LT:/ and $type = "ltmodem";
- #- we need a better agreement to use list_modules::category2modules('network/slmodem')
- member($driver, qw(slamr slusb)) and $type = "slmodem";
- if ($type && (my $packages = $in->do_pkgs->check_kernel_module_packages("$type-kernel", if_(! -f $pkgs2path{$type}, $type)))) {
- if ($in->do_pkgs->install(@$packages)) {
- # start slmodemd when installing it (thus preventing the average user to have to restart
- # his machine in order to get a working connection):
- system("service slmodemd start") if $::isStandalone && $type eq 'slmodem';
- }
- $modem->{device} = $devices{$type} || '/dev/modem';
- return "ppp_provider";
- }
- }
-
- return "no_supported_winmodem";
- },
- },
-
-
- choose_serial_port =>
- {
- name => N("Please choose which serial port your modem is connected to."),
- interactive_help_id => 'selectSerialPort',
- data => sub {
- [ { val => \$modem->{device}, format => \&mouse::serial_port2text, type => "list",
- list => [ grep { $_ ne $o_mouse->{device} } (mouse::serial_ports(), grep { -e $_ } '/dev/modem', '/dev/ttySL0', '/dev/ttyS14',) ] } ];
- },
- post => sub {
- $ntf_name = $modem->{device};
- return 'ppp_provider';
- },
- },
-
-
- ppp_provider =>
- {
- pre => sub {
- network::modem::ppp_read_conf($netcnx, $netc) if !$modem_conf_read;
- $modem_conf_read = 1;
- $in->do_pkgs->ensure_is_installed('kdenetwork-kppp-provider', $db_path);
- my $p_db_path = "$::prefix$db_path";
- @isp = map {
- my $country = $_;
- map {
- s!$p_db_path/$country!!;
- s/%([0-9]{3})/chr(int($1))/eg;
- $countries{$country} ||= translate($country);
- join('', $countries{$country}, $_);
- } grep { !/.directory$/ } glob_("$p_db_path/$country/*");
- } map { s!$p_db_path/!!o; s!_! !g; $_ } glob_("$p_db_path/*");
- $old_provider = $provider;
- },
- name => N("Select your provider:"),
- data => sub {
- [ { label => N("Provider:"), type => "list", val => \$provider, separator => '/',
- list => [ N("Unlisted - edit manually"), @isp ] } ];
- },
- post => sub {
- if ($provider ne N("Unlisted - edit manually")) {
- ($country, $provider) = split('/', $provider);
- $country = { reverse %countries }->{$country};
- my %l = getVarsFromSh("$::prefix$db_path/$country/$provider");
- if (defined $old_provider && $old_provider ne $provider) {
- $modem->{connection} = $l{Name};
- $modem->{phone} = $l{Phonenumber};
- $modem->{$_} = $l{$_} foreach qw(Authentication AutoName Domain Gateway IPAddr SubnetMask);
- ($modem->{dns1}, $modem->{dns2}) = split(',', $l{DNS});
- }
- }
- return "ppp_account";
- },
- },
-
-
- ppp_account =>
- {
- pre => sub {
- $mouse ||= {};
- $mouse->{device} ||= readlink "$::prefix/dev/mouse";
- },
- name => N("Dialup: account options"),
- data => sub {
- [
- { 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->{Authentication},
- list => [ sort keys %ppp_auth_methods ], format => sub { $ppp_auth_methods{$_[0]} } },
- ];
- },
- next => "ppp_ip",
- },
-
-
- ppp_ip =>
- {
- pre => sub {
- $modem_dyn_ip = sub { $modem->{auto_ip} eq N("Automatic") };
- },
- name => N("Dialup: IP parameters"),
- data => sub {
- [
- { label => N("IP parameters"), type => "list", val => \$modem->{auto_ip}, list => [ N("Automatic"), N("Manual") ] },
- { label => N("IP address"), val => \$modem->{IPAddr}, disabled => $modem_dyn_ip },
- { label => N("Subnet mask"), val => \$modem->{SubnetMask}, disabled => $modem_dyn_ip },
- ];
- },
- next => "ppp_dns",
- },
-
-
- ppp_dns =>
- {
- pre => sub {
- $modem_dyn_dns = sub { $modem->{auto_dns} eq N("Automatic") };
- },
- name => N("Dialup: DNS parameters"),
- data => sub {
- [
- { label => N("DNS"), type => "list", val => \$modem->{auto_dns}, list => [ N("Automatic"), N("Manual") ] },
- { label => N("Domain name"), val => \$modem->{domain}, disabled => $modem_dyn_dns },
- { label => N("First DNS Server (optional)"), val => \$modem->{dns1}, disabled => $modem_dyn_dns },
- { label => N("Second DNS Server (optional)"), val => \$modem->{dns2}, disabled => $modem_dyn_dns },
- { text => N("Set hostname from IP"), val => \$modem->{AutoName}, type => 'bool', disabled => $modem_dyn_dns },
- ];
- },
- next => "ppp_gateway",
- },
-
-
- ppp_gateway =>
- {
- name => N("Dialup: IP parameters"),
- data => sub {
- [
- { label => N("Gateway"), type => "list", val => \$modem->{auto_gateway}, list => [ N("Automatic"), N("Manual") ] },
- { label => N("Gateway IP address"), val => \$modem->{Gateway},
- disabled => sub { $modem->{auto_gateway} eq N("Automatic") } },
- ];
- },
- post => sub {
- network::modem::ppp_configure($in, $modem);
- $netc->{$_} = 'ppp0' foreach 'NET_DEVICE', 'NET_INTERFACE';
- $handle_multiple_cnx->();
- },
- },
-
-
- adsl =>
- {
- pre => sub {
- get_subwizard($wiz, 'adsl');
- $lan_detect->();
- @adsl_devices = keys %eth_intf;
-
- detect($modules_conf, $netc->{autodetect}, 'adsl');
- foreach my $modem (keys %adsl_devices) {
- push @adsl_devices, $modem if $netc->{autodetect}{adsl}{$modem};
- }
-
- detect($modules_conf, $netc->{autodetect}, 'isdn');
- if (my @isdn_modems = @{$netc->{autodetect}{isdn}}) {
- require network::isdn;
- %isdn_cards = map { $_->{description} => $_ } grep { $_->{driver} =~ /dsl/i } map { network::isdn::get_capi_card($_) } @isdn_modems;
- push @adsl_devices, keys %isdn_cards;
- }
- },
- name => N("ADSL configuration") . "\n\n" . N("Select the network interface to configure:"),
- data => [ { label => N("Net Device"), type => "list", val => \$ntf_name, allow_empty_list => 1,
- list => \@adsl_devices, format => sub { $eth_intf{$_[0]} || $adsl_devices{$_[0]} || $_[0] } } ],
- post => sub {
- my %packages = (
- 'eci' => [ 'eciadsl', 'missing' ],
- 'sagem' => [ 'eagle-usb', "/usr/sbin/eaglectrl" ],
- 'speedtouch' => [ 'speedtouch', "/usr/sbin/modem_run" ],
- );
- return 'adsl_unsupported_eci' if $ntf_name eq 'eci';
- # FIXME: check that the package installation succeeds, else retry or abort
- $in->do_pkgs->ensure_is_installed(@{$packages{$ntf_name}}) if $packages{$ntf_name};
- if ($ntf_name eq 'speedtouch') {
- $in->do_pkgs->ensure_is_installed_if_available('speedtouch_mgmt', "/usr/share/speedtouch/mgmt.o");
- return 'adsl_speedtouch_firmware' if ! -e "$::prefix/usr/share/speedtouch/mgmt.o";
- }
- $netcnx->{bus} = $netc->{autodetect}{adsl}{bewan}{bus} if $ntf_name eq 'bewan';
- if ($ntf_name eq 'bewan' && !$::testing) {
- if (my @unicorn_packages = $in->do_pkgs->check_kernel_module_packages('unicorn-kernel', 'unicorn')) {
- $in->do_pkgs->install(@unicorn_packages);
- }
- }
- if (exists($isdn_cards{$ntf_name})) {
- require network::isdn;
- $netcnx->{capi} = $isdn_cards{$ntf_name};
- $adsl_type = "capi";
- return 'adsl_account';
- }
- return 'adsl_provider';
- },
- },
-
-
- adsl_provider =>
- {
- pre => sub {
- require network::adsl_consts;
- %adsl_data = %network::adsl_consts::adsl_data;
- $adsl_old_provider = $adsl_provider;
- },
- name => N("Please choose your ADSL provider"),
- data => sub {
- [ { label => N("Provider:"), type => "list", val => \$adsl_provider, separator => '|', list => [ keys %adsl_data ] } ];
- },
- post => sub {
- $adsl_data = $adsl_data{$adsl_provider};
- $adsl_type = 'pppoa' if member($ntf_name, qw(bewan speedtouch));
- if ($adsl_provider ne $adsl_old_provider) {
- $netc->{$_} = $adsl_data->{$_} foreach qw(DOMAINNAME2 Encapsulation vpi vci);
- $adsl_type = $adsl_data->{method};
- }
- return 'adsl_protocol';
- },
- },
-
-
- adsl_speedtouch_firmware =>
- {
- name => N("You need the Alcatel microcode.
-You can provide it now via a floppy or your windows partition,
-or skip and do it later."),
- data => [ { label => "", val => \$adsl_answer, type => "list",
- list => [ N("Use a floppy"), N("Use my Windows partition"), N("Do it later") ], }
- ],
- post => sub {
- my $destination = "$::prefix/usr/share/speedtouch/";
- my ($file, $source, $mounted);
- if ($adsl_answer eq N("Use a floppy")) {
- $mounted = 1;
- $file = 'mgmt.o';
- ($source, $adsl_failed) = network::tools::use_floppy($in, $file);
- } elsif ($adsl_answer eq N("Use my Windows partition")) {
- ($source, $adsl_failed) = network::tools::use_windows($file = 'alcaudsl.sys');
- }
- return "adsl_no_firmawre" if $adsl_answer eq N("Do it later");
-
- my $_b = $mounted && before_leaving { fs::umount('/mnt') };
- if (!$adsl_failed) {
- if (-e "$source/$file") {
- cp_af("$source/$file", $destination) if !$::testing;
- } else {
- $adsl_failed = N("Firmware copy failed, file %s not found", $file);
- }
- }
- log::explanations($adsl_failed || "Firmware copy $file in $destination succeeded");
- -e "$destination/alcaudsl.sys" and rename "$destination/alcaudsl.sys", "$destination/mgmt.o";
-
- # kept translations b/c we may want to reuse it later:
- my $_msg = N("Firmware copy succeeded");
- return $adsl_failed ? 'adsl_copy_firmware_failled' : 'adsl_provider';
- },
- },
-
-
- adsl_copy_firmware_failled =>
- {
- name => sub { $adsl_failed },
- next => 'adsl_provider',
- },
-
-
- "adsl_no_firmawre" =>
- {
- name => N("You need the Alcatel microcode.
-Download it at:
-%s
-and copy the mgmt.o in /usr/share/speedtouch", 'http://prdownloads.sourceforge.net/speedtouch/speedtouch-20011007.tar.bz2'),
- next => "adsl_provider",
- },
-
-
- adsl_protocol =>
- {
- pre => sub {
- # preselect right protocol for ethernet though connections:
- if (!exists $adsl_devices{$ntf_name}) {
- $ethntf = $intf->{$ntf_name} ||= { DEVICE => $ntf_name };
- $adsl_type ||= $ethntf->{BOOTPROTO} || "dhcp";
- #- FIXME: use static instead of manual as key in %adsl_devices
- $adsl_type = "manual" if $adsl_type eq "static";
- #- pppoa shouldn't be selected by default for ethernet devices, fallback on pppoe
- $adsl_type = "pppoe" if $adsl_type eq "pppoa";
- }
- },
- name => N("Connect to the Internet") . "\n\n" .
- N("The most common way to connect with adsl is pppoe.
-Some connections use PPTP, a few use DHCP.
-If you do not know, choose 'use PPPoE'"),
- data => [
- { text => N("ADSL connection type:"), val => \$adsl_type, type => "list",
- list => [ sort { $adsl_types{$a} cmp $adsl_types{$b} } keys %adsl_types ],
- format => sub { $adsl_types{$_[0]} },
- },
- ],
- post => sub {
- $netcnx->{type} = 'adsl';
- # blacklist bogus driver, enable ifplugd support else:
- $find_lan_module->();
- $ethntf->{MII_NOT_SUPPORTED} ||= $is_hotplug_blacklisted->();
- if ($ntf_name eq "sagem" && member($adsl_type, qw(manual dhcp))) {
- #- "fctStartAdsl -i" builds ifcfg-ethX from ifcfg-sagem and echoes ethX
- #- it auto-detects dhcp/static modes thanks to encapsulation setting
- $ethntf = $intf->{sagem} ||= {};
- $ethntf->{DEVICE} = "`/usr/sbin/fctStartAdsl -i`";
- $ethntf->{MII_NOT_SUPPORTED} = "yes";
- }
- # process static/dhcp ethernet devices:
- if (exists($intf->{$ntf_name}) && member($adsl_type, qw(manual dhcp))) {
- $ethntf->{TYPE} = "ADSL";
- $auto_ip = $adsl_type eq 'dhcp';
- return 'lan_intf';
- }
- return 'adsl_account';
- },
- },
-
-
- adsl_account =>
- {
- pre => sub {
- network::adsl::adsl_probe_info($netcnx, $netc, $adsl_type, $ntf_name);
- $netc->{NET_DEVICE} = member($adsl_type, 'pppoe', 'pptp') ? $ntf_name : 'ppp0';
- $netc->{NET_INTERFACE} = 'ppp0';
- },
- name => N("Connection Configuration") . "\n\n" .
- N("Please fill or check the field below"),
- data => sub {
- [
- if_(0, { label => N("Provider name (ex provider.net)"), val => \$netc->{DOMAINNAME2} }),
- { label => N("First DNS Server (optional)"), val => \$netc->{dnsServer2} },
- { label => N("Second DNS Server (optional)"), val => \$netc->{dnsServer3} },
- { label => N("Account Login (user name)"), val => \$netcnx->{login} },
- { label => N("Account Password"), val => \$netcnx->{passwd}, hidden => 1 },
- if_($adsl_type ne "capi",
- { label => N("Virtual Path ID (VPI):"), val => \$netc->{vpi}, advanced => 1 },
- { label => N("Virtual Circuit ID (VCI):"), val => \$netc->{vci}, advanced => 1 }
- ),
- if_($ntf_name eq "sagem",
- { label => N("Encapsulation:"), val => \$netc->{Encapsulation}, list => [ keys %encapsulations ],
- format => sub { $encapsulations{$_[0]} }, advanced => 1,
- },
- ),
- ];
- },
- post => sub {
- $netc->{internet_cnx_choice} = 'adsl';
- network::adsl::adsl_conf_backend($in, $modules_conf, $netcnx, $netc, $intf, $ntf_name, $adsl_type, $netcnx); #FIXME
- $config->{adsl} = { kind => $ntf_name, protocol => $adsl_type };
- $handle_multiple_cnx->();
- },
- },
-
-
- adsl_unsupported_eci =>
- {
- name => N("The ECI Hi-Focus modem cannot be supported due to binary driver distribution problem.
-
-You can find a driver on http://eciadsl.flashtux.org/"),
- end => 1,
- },
-
-
- lan =>
- {
- pre => $lan_detect,
- name => N("Select the network interface to configure:"),
- data => sub {
- [ { label => N("Net Device"), type => "list", val => \$ntf_name, list => [ (sort keys %eth_intf), N_("Manually load a driver"), if_($is_wireless, N_("Use a Windows driver (with ndiswrapper)")) ],
- allow_empty_list => 1, format => sub { translate($eth_intf{$_[0]} || $_[0]) } } ];
- },
- post => sub {
- if ($ntf_name eq "Manually load a driver") {
- require network::ethernet;
- modules::interactive::load_category__prompt($in, $modules_conf, list_modules::ethernet_categories());
- return 'lan';
- } elsif ($ntf_name eq "Use a Windows driver (with ndiswrapper)") {
- return 'ndiswrapper';
- }
- $ethntf = $intf->{$ntf_name} ||= { DEVICE => $ntf_name };
- $::isInstall && $netc->{NET_DEVICE} eq $ethntf->{DEVICE} ? 'lan_alrd_cfg' : 'lan_protocol';
- },
- },
-
- lan_alrd_cfg =>
- {
- name => N("WARNING: this device has been previously configured to connect to the Internet.
-Modifying the fields below will override this configuration.
-Do you really want to reconfigure this device?"),
- type => "yesorno",
- default => "no",
- post => sub {
- my ($res) = @_;
- return $res ? "lan_protocol" : "alrd_end";
- }
- },
-
-
- alrd_end =>
- {
- name => N("Congratulations, the network and Internet configuration is finished.
-
-"),
- end => 1,
- },
-
-
- lan_protocol =>
- {
- pre => sub {
- $find_lan_module->();
- my $intf_type = member($module, list_modules::category2modules('network/gigabit')) ? "ethernet_gigabit" : "ethernet";
- defined($ethntf->{METRIC}) or $ethntf->{METRIC} = network::tools::get_default_metric($intf_type);
-
- $protocol = $l10n_lan_protocols{defined $auto_ip ? ($auto_ip ? 'dhcp' : 'static') : $ethntf->{BOOTPROTO}} || 0;
- },
- name => sub {
- my $_msg = N("Zeroconf hostname resolution");
- N("Configuring network device %s (driver %s)", $ethntf->{DEVICE}, $module) . "\n\n" .
- N("The following protocols can be used to configure an ethernet connection. Please choose the one you want to use");
- },
- data => sub {
- [ { val => \$protocol, type => "list", list => [ sort values %l10n_lan_protocols ] } ];
- },
- post => sub {
- $auto_ip = $protocol ne $l10n_lan_protocols{static} || 0;
- return 'lan_intf';
- },
- },
-
-
- # 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_intf =>
- {
- pre => sub {
- $onboot = $ethntf->{ONBOOT} ? $ethntf->{ONBOOT} =~ /yes/ : bool2yesno(!member($ethntf->{DEVICE},
- map { $_->{device} } detect_devices::pcmcia_probe()));
- $needhostname = $ethntf->{NEEDHOSTNAME} !~ /no/;
- # blacklist bogus driver, enable ifplugd support else:
- $ethntf->{MII_NOT_SUPPORTED} ||= $is_hotplug_blacklisted->();
- $hotplug = !text2bool($ethntf->{MII_NOT_SUPPORTED});
- $track_network_id = $::isStandalone && $ethntf->{HWADDR} || detect_devices::isLaptop();
- delete $ethntf->{NETWORK};
- delete $ethntf->{BROADCAST};
- delete $ethntf->{TYPE} if $netcnx->{type} ne 'adsl' || !member($adsl_type, qw(manual dhcp));
- @fields = qw(IPADDR NETMASK);
- $netc->{dhcp_client} ||= (find { -x "$::prefix/sbin/$_" } qw(dhclient dhcpcd pump dhcpxd)) || "dhcp-client";
- $netc->{dhcp_client} = "dhcp-client" if $netc->{dhcp_client} eq "dhclient";
- },
- name => sub { join('',
- N("Configuring network device %s (driver %s)", $ethntf->{DEVICE}, $module),
- if_(!$auto_ip, "\n\n" . 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).")),
- ) },
- data => sub {
- [ $auto_ip ?
- (
- { text => N("Assign host name from DHCP address"), val => \$needhostname, type => "bool" },
- { label => N("DHCP host name"), val => \$ethntf->{DHCP_HOSTNAME} },
- )
- :
- (
- { label => N("IP address"), val => \$ethntf->{IPADDR}, disabled => sub { $auto_ip } },
- { label => N("Netmask"), val => \$ethntf->{NETMASK}, disabled => sub { $auto_ip } },
- ),
- { text => N("Track network card id (useful for laptops)"), val => \$track_network_id, type => "bool" },
- { text => N("Network Hotplugging"), val => \$hotplug, type => "bool" },
- if_($netcnx->{type} eq "lan",
- { text => N("Start at boot"), val => \$onboot, type => "bool" },
- ),
- if_($auto_ip,
- { label => N("DHCP client"), val => \$netc->{dhcp_client},
- list => [ qw(dhcp-client dhcpcd pump dhcpxd) ], advanced => 1 },
- ),
- ];
- },
- complete => sub {
- $ethntf->{BOOTPROTO} = $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("Error"), N("IP address should be in format 1.2.3.4"));
- return 1, $bad[0];
- }
- if (is_ip_forbidden($ethntf->{IPADDR})) {
- $in->ask_warn(N("Error"), N("Warning: IP address %s is usually reserved!", $ethntf->{IPADDR}));
- return 1;
- }
- #- test if IP address is already used (do not test for sagem DSL devices since it may use many ifcfg files)
- if ($ntf_name ne "sagem" && find { $_->{DEVICE} ne $ethntf->{DEVICE} && $_->{IPADDR} eq $ethntf->{IPADDR} } values %$intf) {
- $in->ask_warn(N("Error"), N("%s already in use\n", $ethntf->{IPADDR}));
- return 1;
- }
- },
- focus_out => sub {
- $ethntf->{NETMASK} ||= netmask($ethntf->{IPADDR}) unless $ethntf->{NETMASK};
- },
- 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};
- $netc->{$_} = $ethntf->{DEVICE} foreach qw(NET_DEVICE NET_INTERFACE);
- $in->do_pkgs->install($netc->{dhcp_client}) if $auto_ip;
- return $is_wireless ? "wireless" : "static_hostname";
- },
- },
-
- ndiswrapper =>
- {
- data => sub {
- [ { label => N("Choose a ndiswrapper driver"), type => "list", val => \$ndiswrapper_driver,
- list => [ N("Install a new driver"), N("Use already installed driver (%s)", join(", ", network::tools::ndiswrapper_installed_drivers())) ] } ];
- },
- complete => sub {
- if ($in->do_pkgs->ensure_is_installed_if_available('ndiswrapper', '/usr/sbin/ndiswrapper')) {
- $in->ask_warn(N("Error"), N("Could not install the %s package!"));
- return 1;
- };
- if ($ndiswrapper_driver eq N("Install a new driver")) {
- if ($ndiswrapper_inf_file = $in->ask_file(N("Please select the Windows driver (.inf file)"), "/mnt/cdrom")) {
- return system("ndiswrapper -i $ndiswrapper_inf_file");
- }
- return 1;
- }
- },
- next => 'ndiswrapper_intf',
- },
-
- ndiswrapper_intf =>
- {
- pre => sub {
- undef $ntf_name;
- },
- data => sub {
- [ { label => N("Net Device"), type => "list", val => \$ntf_name, list => [ sort keys %eth_intf ],
- format => sub { translate($eth_intf{$_[0]}) }, allow_empty_list => 1 } ];
- },
- post => sub {
- if ($ntf_name) {
- #- if another module is loaded for the wireless interface, unload it before using ndiswrapper
- my $eth = find { $_->[0] eq $ntf_name } @all_cards;
- $ntf_name and modules::unload($eth->[1]);
- }
- modules::load("ndiswrapper");
-
- #- FIXME: move this somewhere in get_eth_cards, so that configure_eth_aliases correctly writes ndiswrapper
- #- find the first interface matching a ndiswrapper driver, try ethtool then sysfs
- my @available_drivers = network::tools::ndiswrapper_available_drivers();
- $ntf_name = find {
- my $drv = c::getNetDriver($_) || readlink("/sys/class/net/$_/driver");
- $drv =~ s!.*/!!;
- member($drv, @available_drivers);
- } detect_devices::getNet();
- #- fallback on wlan0
- $ntf_name ||= "wlan0";
-
- $ethntf = $intf->{$ntf_name} ||= { DEVICE => $ntf_name };
- return 'lan_protocol';
- },
- },
-
- wireless =>
- {
- pre => sub {
- $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 => sub {
- [
- { label => N("Operating Mode"), val => \$ethntf->{WIRELESS_MODE},
- list => [ keys %wireless_mode ] },
- { label => N("Network name (ESSID)"), val => \$ethntf->{WIRELESS_ESSID} },
- { label => N("Network ID"), val => \$ethntf->{WIRELESS_NWID}, advanced => 1 },
- { label => N("Operating frequency"), val => \$ethntf->{WIRELESS_FREQ}, advanced => 1 },
- { label => N("Sensitivity threshold"), val => \$ethntf->{WIRELESS_SENS}, advanced => 1 },
- { label => N("Bitrate (in b/s)"), val => \$ethntf->{WIRELESS_RATE}, advanced => 1 },
- { label => N("Encryption key"), val => \$ethntf->{WIRELESS_ENC_KEY} },
- ];
- },
- complete => sub {
- if ($ethntf->{WIRELESS_FREQ} && $ethntf->{WIRELESS_FREQ} !~ /[0-9.]*[kGM]/) {
- $in->ask_warn(N("Error"), 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} && $ethntf->{WIRELESS_RATE} !~ /[0-9.]*[kGM]/) {
- $in->ask_warn(N("Error"), N("Rate should have the suffix k, M or G (for example, \"11M\" for 11M), or add enough '0' (zeroes)."));
- return 1, 8;
- }
- },
- next => "wireless2",
- },
-
-
- wireless2 =>
- {
- name => N("Please enter the wireless parameters for this card:"),
- data => sub {
- [
- { 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 parameter sets 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 iwconfig(8) man page for further information."),
- },
- { label =>
- #-PO: split the "xyz command extra argument" translated string into two lines if it's bigger than the english one
- 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.
-
-Iwpriv deals with parameters and setting specific to each driver (as opposed to
-iwconfig which deals with generic ones).
-
-In theory, the documentation of each device driver should indicate how to use
-those interface specific commands and their effect.
-
-See iwpriv(8) man page for further information."),
- }
- ];
- },
- post => sub {
- # untranslate parameters
- $ethntf->{WIRELESS_MODE} = $wireless_mode{$ethntf->{WIRELESS_MODE}};
- if ($module =~ /^prism2_/) {
- $in->do_pkgs->install('prism2-utils');
- if ($ethntf->{WIRELESS_ESSID}) {
- my $update_vars_in_wlan = sub { #- FIXME: to be improved (quotes, comments) and moved in common files
- my ($file, $vars) = @_;
- substInFile {
- while (my ($key, $value) = each(%$vars)) {
- s/^#?\Q$key\E=(?:"[^#]*"|[^#\s]*)(\s*#.*)?/$key=$value$1/ and delete $vars->{$key};
- }
- $_ .= join('', map { "$_=$vars->{$_}\n" } keys %$vars) if eof;
- } $file;
- };
- my $wlan_conf_file = "$::prefix/etc/wlan/wlan.conf";
- my @wlan_devices = split(/ /, (cat_($wlan_conf_file) =~ /^WLAN_DEVICES="(.*)"/m)[0]);
- push @wlan_devices, $ethntf->{DEVICE} unless member($ethntf->{DEVICE}, @wlan_devices);
- #- enable device and make it use the choosen ESSID
- $update_vars_in_wlan->($wlan_conf_file,
- {
- WLAN_DEVICES => qq("@wlan_devices"),
- "SSID_$ethntf->{DEVICE}" => qq("$ethntf->{WIRELESS_ESSID}"),
- "ENABLE_$ethntf->{DEVICE}" => "y"
- });
- my $wlan_ssid_file = "$::prefix/etc/wlan/wlancfg-$ethntf->{WIRELESS_ESSID}";
- #- copy default settings for this ESSID if config file does not exist
- -f $wlan_ssid_file or cp_f("$::prefix/etc/wlan/wlancfg-DEFAULT", $wlan_ssid_file);
- #- enable/disable encryption
- $update_vars_in_wlan->($wlan_ssid_file,
- {
- (map { $_ => $ethntf->{WIRELESS_ENC_KEY} ? "true" : "false" } qw(lnxreq_hostWEPEncrypt lnxreq_hostWEPDecrypt dot11PrivacyInvoked dot11ExcludeUnencrypted)),
- AuthType => $ethntf->{WIRELESS_ENC_KEY} ? qq("sharedkey") : qq("opensystem"),
- if_($ethntf->{WIRELESS_ENC_KEY},
- dot11WEPDefaultKeyID => 0,
- dot11WEPDefaultKey0 => qq("$ethntf->{WIRELESS_ENC_KEY}")
- )
- });
- #- apply settings on wlan interface
- require services;
- services::restart($module eq 'prism2_cs' ? 'pcmcia' : 'wlan');
- }
- }
- return "static_hostname";
- },
- },
-
- static_hostname =>
- {
- pre => sub {
- if ($ethntf->{IPADDR}) {
- $netc->{dnsServer} ||= dns($ethntf->{IPADDR});
- $gateway_ex = gateway($ethntf->{IPADDR});
- # $netc->{GATEWAY} ||= gateway($ethntf->{IPADDR});
- if ($ntf_name eq "sagem") {
- my @sagem_ip = split(/\./, $ethntf->{IPADDR});
- $sagem_ip[3] = 254;
- $netc->{GATEWAY} = join(".", @sagem_ip);
- }
- }
- },
- 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.") .
-N("Last but not least you can also type in your DNS server IP addresses."),
- data => sub {
- [ { label => $auto_ip ? N("Host name (optional)") : N("Host name"), val => \$netc->{HOSTNAME} },
- if_(!$auto_ip,
- { label => N("DNS server 1"), val => \$netc->{dnsServer} },
- { label => N("DNS server 2"), val => \$netc->{dnsServer2} },
- { label => N("DNS server 3"), val => \$netc->{dnsServer3} },
- { label => N("Search domain"), val => \$netc->{DOMAINNAME},
- help => N("By default search domain will be set from the fully-qualified host name") },
- { label => N("Gateway (e.g. %s)", $gateway_ex), val => \$netc->{GATEWAY} },
- if_(@all_cards > 1,
- { label => N("Gateway device"), val => \$netc->{GATEWAYDEV}, list => [ sort keys %all_eth_intf ],
- format => sub { $all_eth_intf{$_[0]} } },
- ),
- ),
- ];
- },
- complete => sub {
- foreach my $dns (qw(dnsServer dnsServer2 dnsServer3)) {
- if ($netc->{$dns} && !is_ip($netc->{$dns})) {
- $in->ask_warn(N("Error"), 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("Error"), N("Gateway address should be in format 1.2.3.4"));
- return 1;
- }
- },
- #post => $handle_multiple_cnx,
- next => "zeroconf",
- },
-
-
- zeroconf =>
- {
- name => N("If desired, enter a Zeroconf hostname.
-This is the name your machine will use to advertise any of
-its shared resources that are not managed by the network.
-It is not necessary on most networks."),
- data => [ { label => N("Zeroconf Host name"), val => \$netc->{ZEROCONF_HOSTNAME} } ],
- complete => sub {
- if ($netc->{ZEROCONF_HOSTNAME} =~ /\./) {
- $in->ask_warn(N("Error"), N("Zeroconf host name must not contain a ."));
- return 1;
- }
- },
- post => $handle_multiple_cnx,
- },
-
-
- multiple_internet_cnx =>
- {
- name => 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"),
- data => sub {
- [ { label => N("Internet connection"), val => \$netc->{internet_cnx_choice},
- list => [ keys %{$netc->{internet_cnx}} ] } ];
- },
- post => $save_cnx,
- },
-
- apply_settings =>
- {
- name => N("Configuration is complete, do you want to apply settings?"),
- type => "yesorno",
- },
-
- network_on_boot =>
- {
- pre => sub {
- # condition is :
- 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?"));
- },
- name => N("Do you want to start the connection at boot?"),
- type => "yesorno",
- default => sub { ($type eq 'modem' ? 'no' : 'yes') },
- post => sub {
- my ($res) = @_;
- $netc->{at_boot} = $res;
- $res = bool2yesno($res);
- $ethntf->{ONBOOT} = $res if $netcnx->{type} eq 'adsl' && member($adsl_type, qw(manual dhcp));
- my $ifcfg_file = "$::prefix/etc/sysconfig/network-scripts/ifcfg-$netc->{NET_INTERFACE}";
- -f $ifcfg_file and substInFile { s/^ONBOOT.*\n//; $_ .= qq(ONBOOT=$res\n) if eof } $ifcfg_file;
- return $after_start_on_boot_step->();
- },
- },
-
- isdn_dial_on_boot =>
- {
- pre => sub {
- $intf->{ippp0} ||= { DEVICE => "ippp0" }; # we want the ifcfg-ippp0 file to be written
- @isdn_dial_methods = ({ name => N("Automatically at boot"),
- ONBOOT => 1, DIAL_ON_IFUP => 1 },
- { name => N("By using Net Applet in the system tray"),
- ONBOOT => 0, DIAL_ON_IFUP => 1 },
- { name => N("Manually (the interface would still be activated at boot)"),
- ONBOOT => 1, DIAL_ON_IFUP => 0 });
- my $method = find {
- $_->{ONBOOT} eq text2bool($intf->{ippp0}{ONBOOT}) &&
- $_->{DIAL_ON_IFUP} eq text2bool($intf->{ippp0}{DIAL_ON_IFUP});
- } @isdn_dial_methods;
- #- use net_applet by default
- $isdn->{dial_method} = $method->{name} || $isdn_dial_methods[1]{name};
- },
- name => N("How do you want to dial this connection?"),
- data => sub {
- [ { type => "list", val => \$isdn->{dial_method}, list => [ map { $_->{name} } @isdn_dial_methods ] } ];
- },
- post => sub {
- my $method = find { $_->{name} eq $isdn->{dial_method} } @isdn_dial_methods;
- $intf->{ippp0}{$_} = bool2yesno($method->{$_}) foreach qw(ONBOOT DIAL_ON_IFUP);
- return $after_start_on_boot_step->();
- },
- },
-
- restart =>
- {
- name => N("The network needs to be restarted. Do you want to restart it?"),
- type => "yesorno",
- post => sub {
- my ($a) = @_;
- network::ethernet::write_ether_conf($in, $modules_conf, $netcnx, $netc, $intf) if $netcnx->{type} eq 'lan';
- if ($a && !$::testing && !run_program::rooted($::prefix, "/etc/rc.d/init.d/network restart")) {
- $success = 0;
- $in->ask_okcancel(N("Network Configuration"),
- N("A problem occurred while restarting the network: \n\n%s", `/etc/rc.d/init.d/network restart`), 0);
- }
- return $offer_to_connect->();
- },
- },
-
- ask_connect_now =>
- {
- name => N("Do you want to try to connect to the Internet now?"),
- type => "yesorno",
- post => sub {
- my ($a) = @_;
- my $type = $netc->{internet_cnx_choice};
- $up = 1;
- if ($a) {
- # local $::isWizard = 0;
- my $_w = $in->wait_message('', N("Testing your connection..."), 1);
- connect_backend($netc);
- 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 does not seem to be connected to the Internet.
-Try to reconfigure your connection.");
- },
- no_back => 1,
- end => 1,
- post => sub {
- $::isInstall and disconnect_backend($netc);
- return "end";
- },
- },
-
- end =>
- {
- name => sub {
- return $success ? join('', N("Congratulations, the network and Internet configuration is finished.
-
-"), 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 occurred during configuration.
-Test your connection via net_monitor or mcc. If your connection does not work, you might want to relaunch the configuration.");
- },
- end => 1,
- },
- },
- };
-
- my $use_wizard = 1;
- if ($::isInstall) {
- if ($first_time && $in->{method} =~ /^(ftp|http|nfs)$/) {
- local $::isWizard;
- !$::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';
- $netc->{$_} = 'eth0' foreach qw(NET_DEVICE NET_INTERFACE);
- $use_wizard = 0;
- };
- }
- }
-
- if ($use_wizard) {
- require wizards;
- $wiz->{var} = {
- netc => $netc,
- mouse => $mouse,
- intf => $intf,
- };
- wizards->new->process($wiz, $in);
- }
-
- # install needed packages:
- $network_configured or network::network::configureNetwork2($in, $modules_conf, $::prefix, $netc, $intf);
-
- $netcnx->{$_} = $netc->{$_} foreach qw(NET_DEVICE NET_INTERFACE);
- $netcnx->{type} =~ /adsl/ or run_program::rooted($::prefix, "/chkconfig --del adsl 2> /dev/null");
-}
-
-sub main {
- my ($netcnx, $in, $modules_conf, $o_netc, $o_mouse, $o_intf, $o_first_time, $o_noauto) = @_;
- eval { real_main($netcnx, $in, $modules_conf, $o_netc, $o_mouse, $o_intf, $o_first_time, $o_noauto) };
- my $err = $@;
- if ($err) { # && $in->isa('interactive::gtk')
- $err =~ /wizcancel/ and $in->exit(0);
-
- local $::isEmbedded = 0; # to prevent sub window embedding
- local $::isWizard = 0 if !$::isInstall; # to prevent sub window embedding
- #err_dialog(N("Error"), N("An unexpected error has happened:\n%s", $err));
- $in->ask_warn(N("Error"), N("An unexpected error has happened:\n%s", $err));
- }
-}
-
-sub set_profile {
- my ($netcnx) = @_;
- system('/sbin/set-netprofile', $netcnx->{PROFILE});
- log::explanations(qq(Switching to "$netcnx->{PROFILE}" profile));
-}
-
-sub save_profile {
- my ($netcnx) = @_;
- system('/sbin/save-netprofile', $netcnx->{PROFILE});
- log::explanations(qq(Saving "$netcnx->{PROFILE}" profile));
-}
-
-sub del_profile {
- my ($profile) = @_;
- return if !$profile || $profile eq "default";
- rm_rf("$::prefix/etc/netprofile/profiles/$profile");
- log::explanations(qq(Deleting "$profile" profile));
-}
-
-sub add_profile {
- my ($netcnx, $profile) = @_;
- return if !$profile || $profile eq "default" || member($profile, get_profiles());
- system('/sbin/clone-netprofile', $netcnx->{PROFILE}, $profile);
- log::explanations(qq("Creating "$profile" profile));
-}
-
-sub get_profiles() {
- map { if_(m!([^/]*)/$!, $1) } glob("$::prefix/etc/netprofile/profiles/*/");
-}
-
-sub get_net_device() {
- my $connect_file = $network::tools::connect_file;
- my $network_file = "$::prefix/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+";
- }
-}
-
-sub read_net_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, $netcnx);
-
- foreach ('NET_DEVICE', 'NET_INTERFACE') {
- $netc->{$_} = $netcnx->{$_} if $netcnx->{$_};
- }
- $netcnx->{$netcnx->{type}} ||= {} if $netcnx->{type};
-}
-
-sub start_internet {
- my ($o) = @_;
- init_globals($o);
- #- give a chance for module to be loaded using kernel-BOOT modules...
- $::isStandalone or modules::load_category($o->{modules_conf}, 'network/*');
- connect_backend($o->{netc});
-}
-
-sub stop_internet {
- my ($o) = @_;
- init_globals($o);
- disconnect_backend($o->{netc});
-}
-
-1;
-
-=head1 network::netconnect::detect()
-
-=head2 example of usage
-
-use lib qw(/usr/lib/libDrakX);
-use network::netconnect;
-use Data::Dumper;
-
-use class_discard;
-
-local $in = class_discard->new;
-
-network::netconnect::init_globals($in);
-my %i;
-network::netconnect::detect($modules_conf, \%i);
-print Dumper(\%i),"\n";
-
-=cut