summaryrefslogtreecommitdiffstats
path: root/perl-install
diff options
context:
space:
mode:
Diffstat (limited to 'perl-install')
-rw-r--r--perl-install/network/netconnect.pm175
1 files changed, 101 insertions, 74 deletions
diff --git a/perl-install/network/netconnect.pm b/perl-install/network/netconnect.pm
index d25a79c0f..765466065 100644
--- a/perl-install/network/netconnect.pm
+++ b/perl-install/network/netconnect.pm
@@ -77,7 +77,7 @@ sub detect_timezone() {
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 ($modem, $ntf_name, $ipadr, $netadr, $gateway_ex, $up, $modem, $isdn, $isdn_type, $adsl_type, $need_restart_network);
+ 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 = {};
@@ -108,8 +108,6 @@ sub detect_timezone() {
$netc->{autodetection} = 0;
$netc->{autodetect} = {};
- my $first_modem = sub { first(grep { $_->{device} =~ m!^/dev! } values %{$netc->{autodetect}{modem}}) };
-
my $next_cnx_step = sub {
my $next = $connection_steps{$cnx_type};
# FIXME: we want this in standalone mode too:
@@ -120,6 +118,16 @@ sub detect_timezone() {
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 ? "choose_serial_port" : "ppp_choose";
+ };
my $handle_multiple_cnx = sub {
my $nb = keys %{$netc->{internet_cnx}};
@@ -172,8 +180,7 @@ If you don't want to use the auto detection, deselect the checkbox.
my @connections =
(
[ #-PO: here, "(detected)" string will be appended to eg "ADSL connection"
- N("Modem connection"), N("(detected on port %s)", join('', map { if_($_->{device}, $_->{device}) }
- values %{$netc->{autodetect}{modem}})), "modem" ],
+ N("Modem connection"), N("(detected on port %s)", $netc->{autodetect}{modem}), "modem" ],
[ 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" ],
@@ -343,11 +350,12 @@ If you don't want to use the auto detection, deselect the checkbox.
} else {
detect($netc->{autodetect}, 'modem') if !$::isInstall && !$netc->{autodetection};
$netc->{isdntype} = 'isdn_external';
- $netcnx->{isdn_external}{device} = $first_modem->();
+ $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->();
};
},
@@ -381,6 +389,47 @@ If you don't want to use the auto detection, deselect the checkbox.
}
},
+ 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.
@@ -396,53 +445,42 @@ Take a look at http://www.linmodems.org"),
pre => sub {
detect($netc->{autodetect}, 'modem') if !$::isInstall;
$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};
+ }
},
name => N("Select the modem to configure:"),
data => sub {
- [ { label => N("Modem"), type => "list", val => \$modem, list => [ keys %{$netc->{autodetect}{modem}} ], allow_empty_list => 1 } ],
- },
- post => 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});
- $ntf_name = $netc->{autodetect}{modem}{$modem}{device} || $netc->{autodetect}{modem}{$modem}{description};
- print "Interface is $ntf_name\n";
-
- return "ppp_choose" if $ntf_name =~ m!^/dev/!;
- return "choose_serial_port" if !$ntf_name;
-
- my %relocations = (ltmodem => $in->do_pkgs->check_kernel_module_packages('ltmodem'));
- my $type;
-
- detect($netc->{autodetect}, 'lan') if !$::isInstall && !$netc->{autodetection};
-
- foreach (map { $_->{description} } values %{$netc->{autodetect}{modem}}) {
- /Hcf/ and $type = "hcfpcimodem";
- /Hsf/ and $type = "hsflinmodem";
- /LT/ and $type = "ltmodem";
- $relocations{$type} || $type && $in->do_pkgs->what_provides($type) or $type = undef;
- }
-
- return "no_supported_winmodem" if !$type;
-
- $in->do_pkgs->install($relocations{$type} ? @{$relocations{$type}} : $type);
-
- #$type eq 'ltmodem' and $netc->{autodetect}{modem} = '/dev/ttyS14';
-
- #- fallback to modem configuration (beware to never allow test it).
- return "ppp_choose";
+ [ { label => N("Modem"), type => "list", val => \$ntf_name, list => [ grep { $_ } $netc->{autodetect}{modem}, values %{$netc->{autodetect}{winmodem}} ], allow_empty_list => 1 } ],
},
+ post => $ppp_first_step,
},
-
+ # FIXME: only if $need_to_ask
choose_serial_port =>
{
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."),
@@ -456,28 +494,6 @@ killall pppd
ppp_choose =>
{
pre => sub {
- write_cnx_script($netc, "modem", join("\n", if_($::testing, "/sbin/route del default"), "ifup ppp0"),
- q(ifdown ppp0
-killall pppd
-), $netcnx->{type});
- $modem = $netcnx->{$netcnx->{type}};
- $modem->{device} = $first_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};
- }
-
#my $secret = network::tools::read_secret_backend();
#my @cnx_list = map { $_->{server} } @$secret;
},
@@ -724,23 +740,21 @@ I cannot set up this connection type.")), return;
static_hostname =>
{
pre => sub {
+
$netc->{dnsServer} ||= dns($intf->{IPADDR});
$gateway_ex = gateway($intf->{IPADDR});
#- $netc->{GATEWAY} ||= gateway($intf->{IPADDR});
},
- name => N("Enter a Zeroconf host name which will be the one that your machine will get back to other machines on the network:"),
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 => sub {
[ if_(!$auto_ip, { label => N("Host name"), val => \$netc->{HOSTNAME} }),
- if_(!network::tools::is_dynamic_host($intf),
- { label => N("Zeroconf Host name"), val => \$netc->{ZEROCONF_HOSTNAME} }),
{ label => N("DNS server 1"), val => \$netc->{dnsServer} },
- { label => N("DNS server 2"), val => \$netc->{dnsServer2}, advanced => 1 },
- { label => N("DNS server 3"), val => \$netc->{dnsServer3}, advanced => 1 },
- { label => N("Search domain"), val => \$netc->{DOMAINNAME}, advanced => 1,
+ { 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") },
if_(!$auto_ip, { label => N("Gateway (e.g. %s)", $gateway_ex), val => \$netc->{GATEWAY} },
if_(@devices > 1,
@@ -760,6 +774,20 @@ You may also enter the IP address of the gateway if you have one."),
$in->ask_warn(N("Error"), N("Gateway address should be in format 1.2.3.4"));
return 1;
}
+ },
+ #post => $handle_multiple_cnx,
+ next => "zeroconf",
+ },
+
+ 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("Error"), N("Zeroconf host name must not contain a ."));
return 1;
@@ -768,7 +796,6 @@ You may also enter the IP address of the gateway if you have one."),
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"),
@@ -890,10 +917,10 @@ Click on Ok to keep your configuration, or cancel to reconfigure your Internet &
and do {
$netcnx->{type} = 'lan';
output_with_perm("$::prefix$connect_file", 0755, qq(ifup eth0
-)) if $::testing;
- output("$::prefix$disconnect_file", 0755, qq(
+));
+ output("$::prefix$disconnect_file", 0755, qq(
ifdown eth0
-)) if $::testing;
+));
$direct_net_install = 1;
$use_wizard = 0;
};