diff options
-rw-r--r-- | perl-install/network/netconnect.pm | 157 |
1 files changed, 110 insertions, 47 deletions
diff --git a/perl-install/network/netconnect.pm b/perl-install/network/netconnect.pm index 8b2a26dec..221a1352c 100644 --- a/perl-install/network/netconnect.pm +++ b/perl-install/network/netconnect.pm @@ -83,7 +83,9 @@ sub real_main { my (%connections, @connection_list, $is_wireless); my ($modem, $modem_name, $modem_conf_read, $modem_dyn_dns, $modem_dyn_ip); my ($adsl_type, @adsl_devices, $adsl_failed, $adsl_answer, %adsl_data, $adsl_data, $adsl_provider, $adsl_old_provider); - my ($ntf_name, $ipadr, $netadr, $gateway_ex, $up, $isdn, $isdn_type, $need_restart_network); + my ($ntf_name, $ipadr, $netadr, $gateway_ex, $up, $need_restart_network); + my ($isdn, $isdn_name, $isdn_type, %isdn_cards); + my $my_isdn = join('', N("Manual choice"), " (", N("Internal ISDN card"), ")"); my ($module, $auto_ip, $onboot, $needhostname, $hotplug, $track_network_id, @fields); # lan config my $success = 1; my $ethntf = {}; @@ -106,6 +108,11 @@ sub real_main { 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)"), + ); init_globals($in); @@ -271,6 +278,9 @@ sub real_main { ) ], post => sub { + isdn_write_config($isdn, $netc); # or return 'isdn_protocol'; + $netc->{$_} = 'ippp0' foreach 'NET_DEVICE', 'NET_INTERFACE'; + # return "static_hostname"; $handle_multiple_cnx->(); }, }, @@ -285,33 +295,26 @@ sub real_main { }, }, - isdn => - { - name => N("ISDN configuration has not yet be ported to new wizard layer"), - end => 1, - }, - - isdn_real => + isdn => { pre=> sub { + network::isdn->import; detect($netc->{autodetect}, 'isdn'); - # 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") ], } ], + %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 { - 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 { + # !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($netc->{autodetect}, 'modem'); $netc->{isdntype} = 'isdn_external'; $netcnx->{isdn_external}{device} = network::modem::first_modem($netc); @@ -319,40 +322,100 @@ sub real_main { $netcnx->{isdn_external}{special_command} = 'AT&F&O2B40'; require network::modem; $modem = $netcnx->{isdn_external}; - return "ppp_account"; - }; + return "modem"; + } + + $netc->{isdntype} = 'isdn_internal'; + # FIXME: some of these should be taken from isdn db + $netcnx->{isdn_internal} = $isdn = { map { $_ => $isdn_cards{$my_isdn}{$_} } qw(description vendor id card_type driver type mem io io0 io1 irq firmware) }; - }, - }, - - 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; - } + } + $netcnx->{isdn_internal} = isdn_read_config($netcnx->{isdn_internal}); + return "isdn_protocol"; + }, + }, + + + isdn_ask => + { + pre => sub { + %isdn_cards = 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 don't know") ] + ) or return; + isdn_ask_step_1b: + if ($e =~ /PCI/) { + $isdn->{card_type} = 'pci'; + } elsif ($e =~ /USB/) { + $isdn->{card_type} = 'usb'; } else { - isdn_ask($isdn, $netc, N("No ISDN PCI card found. Please select one on the next screen.")) or return; + $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'; } - $netc->{$_} = 'ippp0' foreach 'NET_DEVICE', 'NET_INTERFACE'; - 1; + + isdn_ask_step_2: + $e = $in->ask_from_listf(N("ISDN Configuration"), + N("Which of the following is your ISDN card?"), + sub { $_[0]{description} }, + [ 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_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]} } } + ], + next => "isdn_db", + }, + + + isdn_db => + { + name => N("ISDN Configuration") . "\n\n" . N("Select your provider.\nIf it isn't listed, choose Unlisted."), + data => sub { + [ { label => N("Provider:"), type => "list", val => \$provider, separator => '|', + list => [ N("Unlisted - edit manually"), read_providers_backend() ] } ]; + }, + post => sub { + 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 isn't supported by the system. |