summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOlivier Blin <oblin@mandriva.org>2005-09-11 21:10:00 +0000
committerOlivier Blin <oblin@mandriva.org>2005-09-11 21:10:00 +0000
commite944abbb5ddac597aa98e466cdda21ab3d8e12cc (patch)
tree0e25ebeaf240f7170e498fa38491ff86b5a36bc9
parentdecfc42287d9bd364e555cbd68babe08aacb1881 (diff)
downloaddrakx-e944abbb5ddac597aa98e466cdda21ab3d8e12cc.tar
drakx-e944abbb5ddac597aa98e466cdda21ab3d8e12cc.tar.gz
drakx-e944abbb5ddac597aa98e466cdda21ab3d8e12cc.tar.bz2
drakx-e944abbb5ddac597aa98e466cdda21ab3d8e12cc.tar.xz
drakx-e944abbb5ddac597aa98e466cdda21ab3d8e12cc.zip
list and configure wireless interfaces for which the firmware isn't available (#18195)
-rw-r--r--perl-install/network/netconnect.pm30
1 files changed, 27 insertions, 3 deletions
diff --git a/perl-install/network/netconnect.pm b/perl-install/network/netconnect.pm
index e0039e4b9..a9c76b3fb 100644
--- a/perl-install/network/netconnect.pm
+++ b/perl-install/network/netconnect.pm
@@ -59,7 +59,7 @@ sub real_main {
my ($net, $in, $modules_conf) = @_;
#- network configuration should have been already read in $net at this point
my $mouse = $::o->{mouse} || {};
- my ($cnx_type, @all_cards, %eth_intf, %all_eth_intf);
+ my ($cnx_type, @all_cards, %eth_intf, %all_eth_intf, %unavailable_wireless_intf);
my (%connections, @connection_list);
my ($modem, $modem_name, $modem_dyn_dns, $modem_dyn_ip);
my $cable_no_auth;
@@ -97,6 +97,11 @@ sub real_main {
%all_eth_intf = network::ethernet::get_eth_cards_names(@all_cards); #- needed not to loose GATEWAYDEV
%eth_intf = map { $_->[0] => join(': ', $_->[0], $_->[2]) }
grep { to_bool($is_wireless) == detect_devices::is_wireless_interface($_->[0]) } @all_cards;
+ my %available;
+ $available{$_->[2]} = undef foreach grep { $_->[2] } @all_cards;
+ %unavailable_wireless_intf = map {
+ $_->{driver} => sprintf('%s (%s): %s', N("unknown"), $_->{driver}, $_->{description});
+ } grep { !exists($available{$_->{description}}) } modules::probe_category('network/wireless');
};
my $is_dvb_interface = sub { $_[0]{DEVICE} =~ /^dvb\d+_\d+/ };
@@ -798,8 +803,12 @@ If you do not know it, keep the preselected type."),
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]) } } ];
+ [ { label => N("Net Device"), type => "list", val => \$ntf_name, list => [
+ (sort keys %eth_intf, if_($is_wireless, keys %unavailable_wireless_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]} || $unavailable_wireless_intf{$_[0]} || $_[0]) } } ];
},
complete => sub {
if ($ntf_name eq "Use a Windows driver (with ndiswrapper)") {
@@ -812,6 +821,21 @@ If you do not know it, keep the preselected type."),
return !$ndiswrapper_do_driver_selection->();
}
}
+ if (exists $unavailable_wireless_intf{$ntf_name}) {
+ my $driver = $ntf_name;
+ network::thirdparty::setup_device($in, 'wireless', $driver) or return 1;
+ eval {
+ modules::unload($driver);
+ modules::load($driver);
+ };
+ $lan_detect->();
+ my $eth_card = find { $_->[1] eq $driver } @all_cards;
+ unless ($eth_card) {
+ $in->ask_warn(N("Error"), N("No device found"));
+ return 1;
+ }
+ $ntf_name = $eth_card->[0];
+ }
0;
},
post => sub {