diff options
Diffstat (limited to 'perl-install/standalone/drakconnect')
| -rwxr-xr-x | perl-install/standalone/drakconnect | 345 |
1 files changed, 199 insertions, 146 deletions
diff --git a/perl-install/standalone/drakconnect b/perl-install/standalone/drakconnect index 5922ca50e..90ef8419d 100755 --- a/perl-install/standalone/drakconnect +++ b/perl-install/standalone/drakconnect @@ -21,7 +21,7 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -use strict; +use strict; use lib qw(/usr/lib/libDrakX); @@ -39,19 +39,23 @@ use modules; use network::isdn; use network::adsl; use network::tools; +use network::test; use MDK::Common::Globals "network", qw($in); use POSIX ":sys_wait_h"; -my ($netcnx, $netc, $intf) = ({}, {}, {}); -#my @conx_type = ('modem', 'isdn_internal', 'isdn_external', 'adsl', 'cable', 'lan'); - $ugtk2::wm_icon = "drakconnect"; my $in = 'interactive'->vnew('su'); if ($in->isa('interactive::gtk')) { require ugtk2; ugtk2->import(qw(:create :dialogs :helpers :wrappers)); } -network::tools::reread_net_conf($netcnx, $netc, $intf); + +my ($netcnx, $netc, $intf) = ({}, {}, {}); +network::netconnect::read_net_conf($netcnx, $netc, $intf); + +my $modules_conf = modules::any_conf->read; +modules::load_category($modules_conf, 'net'); + $::Wizard_title = N("Network & Internet Configuration"); $::Wizard_pix_up = "drakconnect.png"; @@ -85,25 +89,21 @@ $window1->{rwindow}->set_border_width(10); my $warning_label1; -my ($lan_button, $host_button, $button_apply); +my $button_apply; my $hostname = chomp_(`hostname`); my $int_label = Gtk2::Label->new($netcnx->{type} eq 'lan' ? N("Gateway:") : N("Interface:")); -my $interface_name = Gtk2::Label->new($netcnx->{type} eq 'lan' ? $netc->{GATEWAY} : $netcnx->{NET_INTERFACE}); +my $int_name = Gtk2::Label->new($netcnx->{type} eq 'lan' ? $netc->{GATEWAY} : $netcnx->{NET_INTERFACE}); my $isconnected = -1; my $int_connect = Gtk2::Button->new(N("Wait please")); $int_connect->set_sensitive(0); $int_connect->signal_connect(clicked => sub { if (!$isconnected) { - if (cat_($network::tools::connect_prog) =~ m|/usr/bin/kppp| && -e '/usr/bin/kppp') { - run_program::run("/usr/bin/kppp &"); - } else { - connect_backend(); - } + connect_backend($netc); } else { - disconnect_backend(); + disconnect_backend($netc); } }); @@ -115,14 +115,14 @@ each_index { $col->set_sort_column_id($::i); } (N("Interface"), N("IP address"), N("Protocol"), N("Driver"), N("State")); -$list->signal_connect(button_press_event => sub { +$list->signal_connect(button_press_event => sub { my (undef, $event) = @_; my (undef, $iter) = $list->get_selection->get_selected; return unless $iter; configure_lan() if $event->type eq '2button-press'; }); -update_list(); +update_list($modules_conf); my ($label_host, $int_state); @@ -132,32 +132,32 @@ $window1->{window}->add( 0, gtkpack(Gtk2::HBox->new, Gtk2::Label->new(N("Hostname: ")), $label_host = Gtk2::Label->new($hostname), - $host_button = gtksignal_connect(Gtk2::Button->new(N("Configure hostname...")), - clicked => sub { - local ($::isWizard, $::Wizard_finished) = (1, 1); - eval { # For wizcancel - configureNetworkNet($in, $netc, $intf, map { $_->[0] } @all_cards); - $button_apply->set_sensitive(1); - update(); - }; - if ($@ =~ /wizcancel/) {} - $::WizardWindow->destroy; - undef $::WizardWindow; - } - ), + gtksignal_connect(Gtk2::Button->new(N("Configure hostname...")), + clicked => sub { + local ($::isWizard, $::Wizard_finished) = (1, 1); + eval { # For wizcancel + network::netconnect::main('', $netcnx, $in, $modules_conf, $netc, undef, $intf); + $button_apply->set_sensitive(1); + update(); + }; + if ($@ =~ /wizcancel/) {} + $::WizardWindow->destroy; + undef $::WizardWindow; + } + ), ), 1, gtkadd(gtkcreate_frame(N("LAN configuration")), gtkpack_(gtkset_border_width(Gtk2::VBox->new(0,0), 5), 0, $list, 0, Gtk2::HBox->new(0,0), 0, gtkpack_(Gtk2::HBox->new(0, 0), - 0, $lan_button = gtksignal_connect(Gtk2::Button->new(N("Configure Local Area Network...")), - clicked => \&configure_lan), + 0, gtksignal_connect(Gtk2::Button->new(N("Configure Local Area Network...")), + clicked => \&configure_lan), ), ) ), 0, gtkpack(Gtk2::HButtonBox->new, - gtksignal_connect(Gtk2::Button->new(N("Help")), clicked => sub { + gtksignal_connect(Gtk2::Button->new(N("Help")), clicked => sub { exec("drakhelp --id internet-connection") unless fork() }), $button_apply = gtksignal_connect(gtkset_sensitive(Gtk2::Button->new(N("Apply")), 0), clicked => \&apply), @@ -169,7 +169,7 @@ $window1->{window}->add( Gtk2::Label->new(N("Please Wait... Applying the configuration"))); $dialog->show_all; gtkflush(); - apply(); + apply($netc, $intf); $dialog->destroy; } update(); @@ -200,17 +200,23 @@ sub manage { my $notebook = Gtk2::Notebook->new; $notebook->set_property('show-tabs', 0); $notebook->set_property('show-border', 0); - - eval(cat_('/etc/sysconfig/drakconnect')); - @all_cards = network::ethernet::get_eth_cards(); + @all_cards = network::ethernet::get_eth_cards($modules_conf); my %name = network::ethernet::get_eth_cards_names(@all_cards); foreach (keys %name) { - $p->{/eth|ath|wlan/ ? $name{$_} : $_} = { kind => $_ }; + my $dev = /eth|ath|wlan/ ? $name{$_} : $_; + $p->{$dev} = { + name => $_ , + intf => $intf->{$_} + }; } - foreach (keys %$intf) { - /^ippp/ and $p->{isdn} = { kind => $_ }; - /^ppp0/ and $p->{modem} = { kind => $_ }; + while (my ($device, $interface) = each %$intf) { + exists $name{$device} and next; + my $type = network::tools::get_interface_type($interface); + $p->{"$type ($device)"} = { + name => $device, + intf => $interface + }; } $window->{rwindow}->add(gtkpack_(Gtk2::VBox->new, @@ -244,9 +250,9 @@ sub manage { $apply_button = $oc->{buttons}{N("Apply")}; each_index { - my ($name, $interface, $protocol) = ($_, $p->{$_}{kind}, $p->{$_}{protocol}); + my ($name, $interface, $protocol) = ($_, $p->{$_}{name}, $p->{$_}{protocol}); $p->{$name}{gui}{index} = $::i; - build_tree($netc, $p->{$name}{intf} = $intf->{$name =~ /eth|ath|wlan/ ? $interface : $name} || {}, $name, $interface, $protocol); + build_tree($netc, $p->{$name}{intf}, $name, $interface, $protocol); build_notebook($netc, $p->{$name}{intf}, $p->{$name}{gui}, $apply_button, $name, $interface); $notebook->append_page(gtkpack(Gtk2::VBox->new(0,0), $p->{$name}{gui}{notebook})); } (sort keys %$p); @@ -254,49 +260,34 @@ sub manage { $interface_menu->set_popdown_strings(sort keys %$p); $interface_menu->set_active(0); $apply_button->set_sensitive(0); - + $window->{rwindow}->show_all; $window->main; ugtk2->exit(0); } sub build_tree { - my ($netc, $intf, $interface, $interface_kind, $protocol) = @_; - + my ($netc, $intf, $interface, $interface_name, $protocol) = @_; + if ($interface eq 'adsl') { $intf->{pages} = { 'TCP/IP' => 1, 'Account' => 1, 'Options' => 1, 'Information' => 1 }; - network::adsl::adsl_probe_info($intf, $netc, $protocol, $interface_kind); - $intf->{save} = sub { + network::adsl::adsl_probe_info($intf, $netc, $protocol, $interface_name); + $intf->{save} = sub { $netc->{internet_cnx_choice} = 'adsl'; $netc->{at_boot} = $intf->{ONBOOT} eq 'yes' ? 1 : 0; - network::adsl::adsl_conf_backend($in, $intf, $netc, $interface_kind, $protocol) + network::adsl::adsl_conf_backend($in, $modules_conf, $netcnx, $netc, $intf, $interface_name, $protocol) }; - } + } elsif ($interface eq 'modem') { $intf->{pages} = { 'TCP/IP' => 1, 'Account' => 1, 'Modem' => 1, 'Options' => 1 }; - # FIXME: code duplication, should be in network::modem::read_config - $intf->{device} = $netc->{autodetect}{modem}; - my %l = getVarsFromSh("/usr/share/config/kppprc"); - - $intf->{kppprc} = "/root/.kde/share/config/kppprc"; - my %m = getVarsFromSh($intf->{kppprc}); - $l{$_} = $m{$_} foreach keys %m; - - ($intf->{dns1}, $intf->{dns2}) = split(',', $l{DNS}); - $intf->{$_->[0]} = $l{$_->[1]} foreach [ 'connection' , 'Name' ], [ 'domain', 'Domain' ], [ 'login', 'Username' ], - [ 'Timeout', 'Timeout' ], [ 'UseLockFile', 'UseLockFile' ], [ 'Enter', 'Enter' ], - [ 'BusyWait', 'BusyWait' ], [ 'FlowControl', 'FlowControl' ], [ 'Speed', 'Speed' ], - [ 'DialTone', 'DialTone' ], [ 'Volume', 'Volume' ]; - /.*ATDT(\d*)/ and $intf->{phone} = $1 foreach cat_("/etc/sysconfig/network-scripts/chat-ppp0"); - /NAME=(['"]?)(.*)\1/ and $intf->{login} ||= $2 foreach cat_("/etc/sysconfig/network-scripts/ifcfg-ppp0"); - $_->{login} eq $intf->{login} and $intf->{passwd} = $_->{passwd} foreach @{network::tools::read_secret_backend()}; + put_in_hash($intf, network::modem::ppp_read_conf({}, $netc)); $intf->{save} = sub { network::modem::ppp_configure($in, $intf) }; - } + } elsif ($interface eq 'isdn') { $intf->{pages} = { 'TCP/IP' => 1, 'Account' => 1, 'Modem' => 1, 'Options' => 1 }; network::isdn::read_config($intf); - $intf->{save} = sub { network::isdn::write_config($intf, $netc) }; - } + $intf->{save} = sub { network::isdn::write_config($intf) }; + } else { #- ethernet is default $intf->{pages} = { 'TCP/IP' => 1, if_($intf->{WIRELESS_MODE}, 'Wireless' => 1), 'Options' => 1, 'Information' => 1 }; @@ -304,24 +295,24 @@ sub build_tree { } sub build_notebook { - my ($netc, $intf, $gui, $apply_button, $interface, $interface_kind) = @_; - + my ($netc, $intf, $gui, $apply_button, $interface, $interface_name) = @_; + my $apply = sub { $apply_button->set_sensitive(1) }; my $is_ethernet = $interface =~ /eth|ath|wlan/; if ($intf->{pages}{'TCP/IP'}) { gtkpack($gui->{sheet}{'TCP/IP'} = Gtk2::HBox->new, - gtkadd(gtkcreate_frame(N("IP configuration")), + gtkadd(gtkcreate_frame(N("IP configuration")), gtkpack_(gtkset_border_width(Gtk2::VBox->new(0,10), 5), - if_($is_ethernet, + if_($is_ethernet, 0, gtkpack__(Gtk2::HBox->new, Gtk2::Label->new(N("Protocol")), $gui->{intf}{BOOTPROTO} = gtksignal_connect(Gtk2::ComboBox->new_text, - changed => sub { + changed => sub { return if !$_[0]->realized; my $proto = $gui->{intf}{BOOTPROTO}; my $protocol = $intf->{BOOTPROTO} = { reverse %{$proto->{protocols}} }->{$proto->get_text}; - + foreach ($gui->{intf}{IPADDR}, $gui->{intf}{NETMASK}, $gui->{netc}{GATEWAY}) { $_->set_sensitive($protocol eq "static" ? 1 : 0) }; $apply->() }, @@ -330,7 +321,7 @@ sub build_notebook { ), 0, gtkpack(Gtk2::VBox->new(1,0), gtkpack__(Gtk2::HBox->new, Gtk2::Label->new(N("IP address"))), - gtkpack__(Gtk2::HBox->new, gtksignal_connect($gui->{intf}{IPADDR} = Gtk2::Entry->new, + gtkpack__(Gtk2::HBox->new, gtksignal_connect($gui->{intf}{IPADDR} = Gtk2::Entry->new, key_press_event => $apply)), ), 0, gtkpack(Gtk2::VBox->new(1,0), @@ -348,7 +339,7 @@ sub build_notebook { ), ), gtkpack_(Gtk2::VBox->new, - 1, gtkadd(gtkcreate_frame(N("DNS servers")), + 1, gtkadd(gtkcreate_frame(N("DNS servers")), gtkpack(Gtk2::VBox->new(0,0), Gtk2::Label->new($intf->{dns1} || $netc->{dnsServer}), if_($intf->{dns2} || $netc->{dnsServer2}, @@ -356,7 +347,7 @@ sub build_notebook { if_($intf->{dns3} || $netc->{dnsServer3}, Gtk2::Label->new($intf->{dns3} || $netc->{dnsServer3}))), ), - 1, gtkadd(gtkcreate_frame(N("Search Domain")), + 1, gtkadd(gtkcreate_frame(N("Search Domain")), Gtk2::Label->new($intf->{domain} || $netc->{DOMAINNAME} || 'none'), ), ), @@ -364,9 +355,9 @@ sub build_notebook { if ($is_ethernet) { my $proto = $gui->{intf}{BOOTPROTO}; - $proto->{protocols} = { static => N("static"), dhcp => N("DHCP") }; + $proto->{protocols} = { none => N("none"), static => N("static"), dhcp => N("DHCP") }; $proto->set_popdown_strings(values %{$proto->{protocols}}); - $proto->set_text($proto->{protocols}{$intf->{BOOTPROTO}}); + $proto->set_text($proto->{protocols}{$intf->{BOOTPROTO} || 'none'}); foreach ($gui->{intf}{IPADDR}, $gui->{intf}{NETMASK}, $gui->{netc}{GATEWAY}) { $_->set_sensitive($intf->{BOOTPROTO} eq 'static' ? 1 : 0) }; @@ -374,10 +365,10 @@ sub build_notebook { $_->set_sensitive(0) foreach $gui->{intf}{IPADDR}, $gui->{intf}{NETMASK}; delete $gui->{intf}{BOOTPROTO}; } - !$intf->{IPADDR} and ($intf->{IPADDR}, $gui->{active}, $intf->{NETMASK}) = get_intf_ip($interface_kind); + !$intf->{IPADDR} and ($intf->{IPADDR}, $gui->{active}, $intf->{NETMASK}) = get_intf_ip($interface_name); $gui->{netc}{$_}->set_text($netc->{$_}) foreach keys %{$gui->{netc}}; } - + if ($intf->{pages}{Wireless}) { gtkpack(gtkset_border_width($gui->{sheet}{Wireless} = Gtk2::HBox->new(0,10), 5), gtkpack_(Gtk2::VBox->new(0,0), @@ -411,9 +402,9 @@ sub build_notebook { ), ); } - + if ($intf->{pages}{Options}) { - gtkpack__(gtkset_border_width($gui->{sheet}{Options} = Gtk2::VBox->new(0,10), 5), + gtkpack__(gtkset_border_width($gui->{sheet}{Options} = Gtk2::VBox->new(0,10), 5), $gui->{intf_bool}{ONBOOT} = gtksignal_connect(Gtk2::CheckButton->new(N("Start at boot")), toggled => $apply), if_($is_ethernet, @@ -421,16 +412,16 @@ sub build_notebook { toggled => $apply)) } ([ "HWADDR", N("Track network card id (useful for laptops)") ], [ "MII_NOT_SUPPORTED", N("Network Hotplugging") ], - ), + ), ), if_($interface eq 'isdn', gtkpack(Gtk2::HBox->new(0,0), - gtkpack__(new Gtk2::VBox(0,0), + gtkpack__(Gtk2::VBox->new(0,0), Gtk2::Label->new(N("Dialing mode")), my @dialing_mode_radio = gtkradio(("auto") x 2, "manual"), ), Gtk2::VSeparator->new, - gtkpack__(new Gtk2::VBox(0,0), + gtkpack__(Gtk2::VBox->new(0,0), Gtk2::Label->new(N("Connection speed")), my @speed_radio = gtkradio(("64 Kb/s") x 2, "128 Kb/s"), ), @@ -441,6 +432,11 @@ sub build_notebook { key_press_event => $apply), ), ), + gtkpack__(Gtk2::HBox->new(0,5), + Gtk2::Label->new(N("Metric")), + gtksignal_connect(gtkset_text($gui->{intf}{METRIC} = Gtk2::Entry->new, $intf->{METRIC}), + key_press_event => $apply)), + ); $dialing_mode_radio[0]->signal_connect(toggled => sub { $gui->{intf_radio}{dialing_mode} = 'auto'; $apply->() }); $dialing_mode_radio[1]->signal_connect(toggled => sub { $gui->{intf_radio}{dialing_mode} = 'static'; $apply->() }); @@ -450,10 +446,10 @@ sub build_notebook { $gui->{intf_bool}{MII_NOT_SUPPORTED}->set_active($intf->{MII_NOT_SUPPORTED} eq 'no' ? 1 : 0); $gui->{intf_bool}{HWADDR}->set_active($intf->{HWADDR}); } - + if ($intf->{pages}{Account}) { - if ($interface_kind =~ /^speedtouch|sagem$/) { - $gui->{description} = $interface_kind eq 'speedtouch' ? 'Alcatel|USB ADSL Modem (Speed Touch)' : 'Analog Devices Inc.|USB ADSL modem'; + if ($interface_name =~ /^speedtouch|sagem$/) { + $gui->{description} = $interface_name eq 'speedtouch' ? 'Alcatel|USB ADSL Modem (Speed Touch)' : 'Analog Devices Inc.|USB ADSL modem'; } gtkpack_(gtkset_border_width($gui->{sheet}{Account} = Gtk2::VBox->new(0,10), 5), if_($interface eq 'modem', @@ -474,12 +470,14 @@ sub build_notebook { ), ); - my %auth_methods = map_index { $::i => $_ } N("PAP"), N("Terminal-based"), N("Script-based"), N("CHAP"), N("PAP/CHAP"); - $gui->{intf}{auth}->set_popdown_strings(sort values %auth_methods); - $gui->{intf}{auth}->set_text($auth_methods{$intf->{Authentication}}); + if ($interface eq 'modem') { + my %auth_methods = map_index { $::i => $_ } N("PAP"), N("Terminal-based"), N("Script-based"), N("CHAP"), N("PAP/CHAP"); + $gui->{intf}{auth}->set_popdown_strings(sort values %auth_methods); + $gui->{intf}{auth}->set_text($auth_methods{$intf->{Authentication}}); + } $gui->{intf}{passwd}->set_visibility(0); } - + if ($intf->{pages}{Modem}) { gtkpack(gtkset_border_width($gui->{sheet}{Modem} = Gtk2::HBox->new(0,10), 5), if_($interface eq 'modem', @@ -500,7 +498,7 @@ sub build_notebook { # ), ), Gtk2::VSeparator->new, - gtkpack__(new Gtk2::VBox(0,10), + gtkpack__(Gtk2::VBox->new(0,10), gtkpack__(Gtk2::HBox->new(0,5), Gtk2::Label->new(N("Modem timeout")), $gui->{intf}{Timeout} = gtksignal_connect(Gtk2::SpinButton->new(Gtk2::Adjustment->new($intf->{Timeout}, 0, 120, 1, 5, 0), 0, 0), @@ -536,9 +534,9 @@ sub build_notebook { ), ), Gtk2::VSeparator->new, - gtkpack__(new Gtk2::VBox(0,0), + gtkpack__(Gtk2::VBox->new(0,0), Gtk2::Label->new(N("Protocol")), - my @protocol_radio = gtkradio('', N("European protocol (EDSS1)"), + my @protocol_radio = gtkradio('', N("European protocol (EDSS1)"), N("Protocol for the rest of the world\nNo D-Channel (leased lines)")), ), ), @@ -551,17 +549,17 @@ sub build_notebook { $gui->{intf}{Enter}->set_popdown_strings('CR', 'CF', 'CR/LF'); $gui->{intf}{Speed}->set_popdown_strings('2400', '9600', '19200', '38400', '57600', '115200'); } - + if ($intf->{pages}{Information}) { - my ($info) = $gui->{description} ? - find { $_->{description} eq $gui->{description} } detect_devices::probeall : network::ethernet::mapIntfToDevice($interface_kind); - if (is_empty_hash_ref($info) and my @intfs = grep { $interface_kind eq $_->[0] } @all_cards) { - my $driver; - if ($#intfs == 0 and $driver = $intfs[0][1] and my @cards = grep { $_->{driver} eq $driver } detect_devices::probeall()) { - $info = $cards[0] if $#cards == 0; - } + my ($info) = $gui->{description} ? + find { $_->{description} eq $gui->{description} } detect_devices::probeall : network::ethernet::mapIntfToDevice($interface_name); + my @intfs = grep { $interface_name eq $_->[0] } @all_cards; + if (is_empty_hash_ref($info) && @intfs == 1) { + my $driver = $intfs[0][1]; + my @cards = grep { $_->{driver} eq $driver } detect_devices::probeall(); + @cards == 1 and $info = $cards[0]; } - + gtkpack(gtkset_border_width($gui->{sheet}{Information} = Gtk2::VBox->new(0,10), 5), gtktext_insert(Gtk2::TextView->new, join('', @@ -569,8 +567,8 @@ sub build_notebook { [ N("Vendor"), split('\|', $info->{description}) ], [ N("Description"), reverse split('\|', $info->{description}) ], [ N("Media class"), $info->{media_type} || '-' ], - [ N("Module name"), $info->{driver} || '-' ], - [ N("Mac Address"), c::get_hw_address($interface_kind) || '-' ], + [ N("Module name"), $info->{driver} || '-' ], + [ N("Mac Address"), c::get_hw_address($interface_name) || '-' ], [ N("Bus"), $info->{bus} || '-' ], [ N("Location on the bus"), $info->{pci_bus} || '-' ], ) @@ -579,7 +577,22 @@ sub build_notebook { ); } - $gui->{intf}{$_}->set_text($intf->{$_}) foreach keys %{$gui->{intf}}; + foreach (keys %{$gui->{intf}}) { + next if ref($gui->{intf}{$_}) !~ /Gtk2::(ComboBox|Entry)/; + # skip unset fields: + next if !$intf->{$_}; + # special case b/c of translation: + next if member($_, qw(BOOTPROTO )); + if ($_ eq "FlowControl") { + # kppp is writing translated strings :-( (eg: s/Software/Logiciel/): + # (let's hope that all translations use 'CRTSCTS' and 'XON/OFF' as substring) + $gui->{intf}{$_}->set_text('Hardware [CRTSCTS]') if $intf->{$_} =~ /CRTSCTS/; + $gui->{intf}{$_}->set_text('Software [XON/XOFF]') if $intf->{$_} =~ m!XON/XOFF!; + } else { + $gui->{intf}{$_}->set_text($intf->{$_}); + } + } + $gui->{notebook} = Gtk2::Notebook->new; populate_notebook($gui->{notebook}, $gui); } @@ -595,18 +608,32 @@ sub populate_notebook { sub save { my ($netc, $p, $apply_button) = @_; - foreach (keys %$p) { - save_notebook($netc, $p->{$_}{intf}, $p->{$_}{gui}) or return; - $p->{$_}{intf}{save} ? $p->{$_}{intf}{save}->() : apply($netc, $p->{$_}{intf}); - } + my $dialog = _create_dialog(N("Please wait")); + gtkpack($dialog->vbox, + gtkshow(Gtk2::Label->new(N("Please Wait... Applying the configuration")))); + $dialog->show_all; + gtkset_mousecursor_wait(); + + Glib::Timeout->add(200, sub { + gtkflush(); + foreach (keys %$p) { + save_notebook($netc, $p->{$_}{intf}, $p->{$_}{gui}) or return; + $p->{$_}{intf}{save} ? $p->{$_}{intf}{save}->() : apply($netc, $p->{$_}{intf}); + } + + system("/etc/rc.d/init.d/network restart"); + $dialog->response(0); + }); + $dialog->run; - system("/etc/rc.d/init.d/network restart"); $apply_button->set_sensitive(0); + gtkset_mousecursor_normal(); + $dialog->destroy; } sub save_notebook { my ($netc, $intf, $gui) = @_; - + $netc->{$_} = $gui->{netc}{$_}->get_text foreach keys %{$gui->{netc}}; $gui->{intf}{$_} and $intf->{$_} = $gui->{intf}{$_}->get_text foreach keys %{$gui->{intf}}; $gui->{intf_radio}{$_} and $intf->{$_} = $gui->{intf_radio}{$_} foreach keys %{$gui->{intf_radio}}; @@ -617,7 +644,7 @@ sub save_notebook { if (my $proto = $gui->{intf}{BOOTPROTO}) { $intf->{BOOTPROTO} = { reverse %{$proto->{protocols}} }->{$proto->get_text}; } - if ($intf->{BOOTPROTO} eq 'static') { + if ($intf->{BOOTPROTO} eq 'static') { check_field($intf, 'IPADDR', 'NETMASK') or $in->ask_warn(N("Error"), N("IP address should be in format 1.2.3.4")) and return 0; } if ($netc->{GATEWAY}) { @@ -633,9 +660,7 @@ sub check_field { sub add_intf() { $::isWizard = 1; - network::netconnect::load_conf($netcnx, $netc, $intf); - # network::netconnect::add_interface($in, $netcnx); - network::netconnect::main('', $netcnx, $in, $netc, undef, $intf); + network::netconnect::main('', $netcnx, $in, $modules_conf, $netc, undef, $intf); $in->exit(0); } @@ -645,6 +670,8 @@ sub del_intf() { $in->ask_warn(N("Error"), N("No ethernet network adapter has been detected on your system. Please run the hardware configuration tool.")); $in->exit(0); } + @all_cards = network::ethernet::get_eth_cards($modules_conf); + my %ethernet_names = network::ethernet::get_eth_cards_names(@all_cards); my $wiz = { defaultimage => "drakconnect.png", @@ -654,19 +681,27 @@ sub del_intf() { no_back => 1, name => N("Select the network interface to remove:"), data => [ { label => N("Net Device"), val => \$intf2delete, allow_empty_list => 1, - list => [ keys %$intf, grep { -f "/etc/ppp/peers/$_" } qw(adsl isdn) ], } ], + list => [ keys %$intf ], + format => sub { + my $type = network::tools::get_interface_type($intf->{$_[0]}); + $ethernet_names{$_[0]} || ($type ? "$type ($_[0])" : $_[0]) + } + } + ], post => sub { !$::testing and eval { - if (member($intf2delete, qw(adsl isdn))) { - system("service internet stop"); - # system("ifdown " . $intf2delete eq "isdn" : "ippp0" : "ppp0"); - rm_rf("/etc/ppp/peers/$intf2delete"); - if (any { /$intf2delete/ } cat_("/etc/sysconfig/network-scripts/net_cnx_up")) { - unlink "/etc/sysconfig/network-scripts/net_cnx_$_" foreach qw(up down); - } + if (member($intf2delete, qw(adsl modem))) { + eval { rm_rf("/etc/ppp/peers/ppp0") }; + eval { rm_rf("/etc/sysconfig/network-scripts/ifcfg-ppp0") }; + } + if ($intf2delete eq 'adsl') { + eval { rm_rf("/etc/sysconfig/network-scripts/ifcfg-sagem") }; + } elsif ($intf2delete eq 'isdn') { + eval { rm_rf("/etc/sysconfig/network-scripts/ifcfg-ippp0") }; } else { system("ifdown $intf2delete"); - rm_rf("/etc/sysconfig/network-scripts/ifcfg-$intf2delete"); + eval { rm_rf("/etc/sysconfig/network-scripts/$intf2delete") }; + eval { rm_rf("/etc/sysconfig/network-scripts/ifcfg-$intf2delete") }; } }; $faillure = $@; @@ -675,10 +710,10 @@ sub del_intf() { }, end => { name => sub { - ($faillure ? - N("An error occured while deleting the \"%s\" network interface:\n\n%s", + ($faillure ? + N("An error occurred while deleting the \"%s\" network interface:\n\n%s", $intf2delete, $faillure) : - N("Congratulations, the \"%s\" network interface has been succesfully deleted", $intf2delete) + N("Congratulations, the \"%s\" network interface has been successfully deleted", $intf2delete) ) }, end => 1, @@ -695,7 +730,7 @@ sub get_intf_ip { my ($ip, $state, $mask); if (-x "/sbin/ifconfig") { local $_ = `LC_ALL=C LANGUAGE=C /sbin/ifconfig $interface`; - $ip = /inet addr:(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/mso ? $1 : N("No Ip"); + $ip = /inet addr:(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/mso ? $1 : N("No IP"); $mask = /Mask:(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/mso ? $1 : N("No Mask"); $state = /inet/ ? N("up") : N("down"); } else { @@ -707,8 +742,9 @@ sub get_intf_ip { my %intf; -sub update_list() { - @all_cards = network::ethernet::get_eth_cards(); +sub update_list { + my ($modules_conf) = @_; + @all_cards = network::ethernet::get_eth_cards($modules_conf); my %new_intf = map { @$_ } @all_cards; my @new_intf = sort keys %new_intf; foreach my $interface (difference2(\@new_intf, [ keys %intf ])) { @@ -728,9 +764,10 @@ sub apply { my ($netc, $intf) = @_; my $dyn = $intf->{BOOTPROTO} ne 'static'; my $lintf = $intf; - $dyn and $lintf->{$_} = undef foreach qw(NETMASK NETWORK IPADDR); + #- always delete NETWORK and BROADCAST fields so that they get automatically recomputed by write_interface_conf + delete $lintf->{$_} foreach qw(NETWORK BROADCAST), if_($dyn, qw(IPADDR NETMASK)); network::network::sethostname($netc) if $dyn; - network::network::configureNetwork2($in, '', $netc, { $lintf->{DEVICE} => $lintf }); + network::network::configureNetwork2($in, $modules_conf, '', $netc, { $lintf->{DEVICE} => $lintf }); } sub ethisup { `LC_ALL=C LANGUAGE=C /sbin/ifconfig $_[0]` =~ /inet/ } @@ -749,8 +786,8 @@ sub update() { my $h = chomp_(`hostname`); $label_host->set_label($h); $int_label->set($netcnx->{type} eq 'lan' ? N("Gateway:") : N("Interface:")); - $interface_name->set($netcnx->{type} eq 'lan' ? $netc->{GATEWAY} : $netcnx->{NET_INTERFACE}); - update_list(); + $int_name->set($netcnx->{type} eq 'lan' ? $netc->{GATEWAY} : $netcnx->{NET_INTERFACE}); + update_list($modules_conf); update_intbutt() if $isconnected != -1; 1; } @@ -779,6 +816,21 @@ sub update2() { 1; } + +my $net_test; +sub update_network_status() { + unless ($net_test) { + $net_test = network::test->new; + $net_test->start; + } + if ($net_test->is_done) { + $isconnected = $net_test->is_connected; + update_intbutt(); + $net_test->start; + } + 1; +} + sub quit_global() { ugtk2->exit(0); } @@ -865,7 +917,7 @@ Configure them first by clicking on 'Configure'"))); update(); }); } else { - $widget_temp = N("This interface has not been configured yet.\nRun the \"Add an interface\" assistant from the Mandrake Control Center"); + $widget_temp = N("This interface has not been configured yet.\nRun the \"Add an interface\" assistant from the Mandrakelinux Control Center"); } $vbox_local->pack_start(gtkpack__(Gtk2::HBox->new(0,0), $widget_temp @@ -902,7 +954,7 @@ Configure them first by clicking on 'Configure'"))); $exit_dialogsub->(); }), ); - + $window->show_all; foreach (0..$#all_cards) { my @infos = @{$card_tab[2*$_]}; @@ -918,10 +970,10 @@ sub configure_net { my $exit_dialogsub = sub { Gtk2->main_quit }; if (!$netcnx->{type}) { $in->ask_warn( - N("Warning"), - #-PO: here "Internet access" should be translated the same was as in control-center + N("Warning"), + #-PO: here "Add Connection" should be translated the same was as in control-center N("You don't have any configured Internet connection. -Please run \"Internet access\" in control center.")); +Run the \"Add Connection\" assistant from the Mandrakelinux Control Center")); $in->exit; } my $cnx = {}; @@ -971,10 +1023,10 @@ Please run \"Internet access\" in control center.")); 0, Gtk2::Label->new(N("Internet Connection Configuration")), 1, gtkadd(gtkcreate_frame(N("Internet access")), gtkset_border_width(create_packtable({ col_spacings => 5, row_spacings => 5, homogenous => 1 }, - [ Gtk2::Label->new(N("Connection type: ")), + [ Gtk2::Label->new(N("Connection type: ")), Gtk2::Label->new(translate($netcnx->{type})) ], - [ $int_label, $interface_name ], - [ Gtk2::Label->new(N("Status:")), + [ $int_label, $int_name ], + [ Gtk2::Label->new(N("Status:")), $int_state = Gtk2::Label->new(N("Testing your connection...")) ] ), 5), @@ -991,7 +1043,7 @@ Please run \"Internet access\" in control center.")); update(); $button_apply->set_sensitive(1); } else { - configureNetwork2($in, '', $netc, $intf); + configureNetwork2($in, $modules_conf, '', $netc, $intf); write_resolv_conf("/etc/resolv.conf", $netc); } $exit_dialogsub->(); @@ -1001,7 +1053,8 @@ Please run \"Internet access\" in control center.")); ); $dialog->{rwindow}->show_all; - Glib::Timeout->add(200, \&update_intbutt); + update_network_status(); + Glib::Timeout->add(2000, \&update_network_status); $dialog->main; ugtk2->exit(0); } |
