diff options
Diffstat (limited to 'perl-install/standalone/drakconnect')
| -rwxr-xr-x | perl-install/standalone/drakconnect | 928 |
1 files changed, 0 insertions, 928 deletions
diff --git a/perl-install/standalone/drakconnect b/perl-install/standalone/drakconnect deleted file mode 100755 index 86d0fbe84..000000000 --- a/perl-install/standalone/drakconnect +++ /dev/null @@ -1,928 +0,0 @@ -#!/usr/bin/perl - -# DrakConnect $Id$ - -# Copyright (C) 1999-2004 MandrakeSoft -# Damien "Dam's" Krotkine -# Damien "poulpy" Chaumette -# Thierry Vignaud <tvignaud@mandrakesoft.com> -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# 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 lib qw(/usr/lib/libDrakX); - -use standalone; #- warning, standalone must be loaded very first, for 'explanations' - -use interactive; -use common; -use network::netconnect; -use network::ethernet; -use network::tools; -use network::modem; -use network::network; -use c; -use modules; -use network::isdn; -use network::adsl; -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'); - -my $in = 'interactive'->vnew('su'); -if ($in->isa('interactive::gtk')) { - require ugtk2; - ugtk2->import(qw(:create :dialogs :helpers :wrappers)); -} -reread_net_conf(); -$::Wizard_title = N("Network & Internet Configuration"); -$::Wizard_pix_up = "wiz_drakconnect.png"; - -MDK::Common::Globals::init(in => $in); - -local $_ = join '', @ARGV; -/--skip-wizard/ and manage($netc, $netcnx, $intf); -/--add/ and add_intf(); -/--del/ and del_intf(); -if (/--install/) { - $::isInstall = 1; - add_intf() -} -/--internet/ and configure_net($netcnx, $netc, $intf); - -# default is to run wizard -add_intf(); - -my @all_cards; - -my $window1 = ugtk2->new('drakconnect'); -$window1->{rwindow}->signal_connect(delete_event => sub { ugtk2->exit(0) }); -unless ($::isEmbedded) { - $window1->{rwindow}->set_position('center'); - $window1->{rwindow}->set_title(N("Network configuration (%d adapters)", scalar @all_cards)); - $window1->{rwindow}->set_size_request(-1, -1); -} -$window1->{rwindow}->set_border_width(10); - -my $warning_label1; - -my ($lan_button, $host_button, $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 $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(); - } - } else { - disconnect_backend(); - } -}); - -my $tree_model = Gtk2::TreeStore->new("Gtk2::Gdk::Pixbuf", map { "Glib::String" } 2..6); -my $list = Gtk2::TreeView->new_with_model($tree_model); -$list->append_column(Gtk2::TreeViewColumn->new_with_attributes(undef, Gtk2::CellRendererPixbuf->new, 'pixbuf' => 0)); -each_index { - $list->append_column(my $col = Gtk2::TreeViewColumn->new_with_attributes($_, Gtk2::CellRendererText->new, 'text' => $::i + 1)); - $col->set_sort_column_id($::i); -} (N("Interface"), N("IP address"), N("Protocol"), N("Driver"), N("State")); - -$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(); - -my ($label_host, $int_state); - - -$window1->{window}->add( - gtkpack_(Gtk2::VBox->new(0,10), - 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; - } - ), - ), - 1, gtkadd(Gtk2::Frame->new(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, gtkpack(Gtk2::HButtonBox->new, - 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), - gtksignal_connect(Gtk2::Button->new(N("Cancel")), clicked => \&quit_global), - gtksignal_connect(Gtk2::Button->new(N("Ok")), clicked => sub { - if ($button_apply->get('sensitive')) { - my $dialog = _create_dialog(N("Please wait")); - gtkpack($dialog->vbox, - Gtk2::Label->new(N("Please Wait... Applying the configuration"))); - $dialog->show_all; - gtkflush(); - apply(); - $dialog->destroy; - } - update(); - quit_global(); - }), - ), - ), - ); - - - -$window1->{rwindow}->show_all; -gtkflush(); -$window1->main; -ugtk2->exit(0); - -sub manage { - my ($netc, $netcnx, $intf) = @_; - - my $gui = {}; - my ($interface_menu, $selected); - my $window = ugtk2->new('Manage Connection'); - my $notebook = Gtk2::Notebook->new; - $notebook->set_property('show-tabs', 0); - $notebook->set_property('show-border', 0); - my $apply_button; - - my $config = { 'ethernet0' => { kind => 'eth0' }, - }; # testing - - #- duplicated from network::ethernet, to be factorized - @all_cards = network::ethernet::get_eth_cards(); - foreach my $card (@all_cards) { - modules::remove_alias($card->[1]); - modules::add_alias($card->[0], $card->[1]); - } - my %name = map { $_->[0] => join(': ', $_->[0], $_->[2]) } @all_cards; - - $window->{rwindow}->add(gtkpack_(Gtk2::VBox->new, - 0, $interface_menu = gtksignal_connect(Gtk2::OptionMenu->new, - changed => sub { - $selected = $interface_menu->get_text; - $notebook->set_current_page($gui->{$config->{$selected}{kind}}{index}); - }, - ), - 1, $notebook, - 0, create_okcancel(my $oc = - { - cancel_clicked => sub { $window->destroy; Gtk2->main_quit }, - ok_clicked => sub { - if ($apply_button->get_property('sensitive')) { - save($netc, $netcnx, $intf, $gui, $apply_button); - } - $window->destroy; - Gtk2->main_quit; - }, - }, - undef, undef, '', - [ N("Help"), sub { exec("drakhelp --id internet-connection") unless fork() } ], - [ N("Apply"), sub { save($netc, $netcnx, $intf, $gui, $apply_button) } ], - ), - ), - ); - $apply_button = $oc->{buttons}{N("Apply")}; - - each_index { - my ($name, $interface, $protocol) = ($_, $config->{$_}{kind}, $config->{$_}{protocol}); - $gui->{$interface}{index} = $::i; - $interface =~ /eth/ and $config->{$name{$interface}} = $interface && delete $config->{$name}; - build_tree($netc, $intf->{$interface} ||= {}, $name, $interface, $protocol); - build_notebook($netc, $intf->{$interface}, $gui->{$interface}, $apply_button, $name, $interface); - $notebook->append_page(gtkpack(Gtk2::VBox->new(0,0), $gui->{$interface}{notebook})); - } (sort keys %$config); - - $interface_menu->set_popdown_strings(sort keys %$config); - $apply_button->set_sensitive(0); - - $window->{rwindow}->show_all; - $window->main; - ugtk2->exit(0); -} - -sub build_tree { - my ($netc, $intf, $interface, $interface_kind, $protocol) = @_; - - if ($interface eq 'adsl') { - $intf->{pages} = { N("TCP/IP") => 1, N("Account") => 1, N("Options") => 1, N("Informations") => 1 }; - network::adsl::adsl_probe_info($intf, $netc, $protocol, $interface_kind); - $intf->{save} = sub { network::adsl::adsl_conf_backend($intf, $netc, $interface_kind, $protocol) }; - } - elsif ($interface eq 'modem') { - $intf->{pages} = { N("TCP/IP") => 1, N("Account") => 1, N("Options") => 1 }; - # FIXME: code duplication, should be in network::modem::read_config - $intf->{device} = $netc->{autodetect}{modem}; - my %l = getVarsFromSh("$::prefix/usr/share/config/kppprc"); - ($intf->{dns1}, $intf->{dns2}) = split(',', $l{DNS}); - $intf->{$_->[0]} = $l{$_->[1]} foreach [ 'connection' , 'Name' ], [ 'domain', 'Domain' ], [ 'login', 'Username' ]; - /.*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()}; - $intf->{save} = sub { network::modem::ppp_configure($in, $intf) }; - } - elsif ($interface eq 'isdn') { - $intf->{pages} = { N("TCP/IP") => 1, N("Account") => 1, N("Modem") => 1, N("Options") => 1 }; - network::isdn::isdn_read_config($intf); - $intf->{save} = sub { network::isdn::isdn_write_config($intf, $netc) }; - } - else { - #- ethernet is default - $intf->{pages} = { N("TCP/IP") => 1, if_($intf->{WIRELESS_MODE}, N("Wireless") => 1), N("Options") => 1, N("Informations") => 1 }; - } -} - -sub build_notebook { - my ($netc, $intf, $gui, $apply_button, $interface, $interface_kind) = @_; - - my $apply = sub { $apply_button->set_sensitive(1) }; - - if ($intf->{pages}{N("TCP/IP")}) { - gtkpack_($gui->{sheet}{N("TCP/IP")} = Gtk2::VBox->new(0,0), - if_($interface =~ /eth/, - 0, $gui->{intf}{BOOTPROTO} = gtksignal_connect(Gtk2::OptionMenu->new, - changed => sub { $_->set_sensitive($gui->{intf}{BOOTPROTO}->get_text eq "static" ? 1 : 0) foreach $gui->{intf}{IPADDR}, $gui->{intf}{NETMASK}, $gui->{netc}{GATEWAY}; $apply->() }, - ), - ), - 1, gtkpack(Gtk2::HBox->new(0,0), - gtkpack_(Gtk2::VBox->new(0,0), - 0, gtkpack_(Gtk2::VBox->new(0,0), - 1, Gtk2::Label->new(N("IP address")), - 0, gtksignal_connect($gui->{intf}{IPADDR} = Gtk2::Entry->new, - key_press_event => $apply), - ), - 0, gtkpack_(Gtk2::VBox->new(0,0), - 1, Gtk2::Label->new(N("Netmask")), - 0, gtksignal_connect($gui->{intf}{NETMASK} = Gtk2::Entry->new, - key_press_event => $apply), - ), - if_($interface =~ /eth/, - 0, gtkpack_(Gtk2::VBox->new(0,0), - 1, Gtk2::Label->new(N("Gateway")), - 0, gtksignal_connect($gui->{netc}{GATEWAY} = Gtk2::Entry->new, - key_press_event => $apply), - ), - ), - ), - Gtk2::VSeparator->new, - gtkpack_(Gtk2::VBox->new(0,0), - 1, gtkadd(Gtk2::Frame->new(N("DNS servers")), - gtkpack(Gtk2::VBox->new(0,0), - Gtk2::Label->new($intf->{dns1} || $netc->{dnsServer}), - Gtk2::Label->new($intf->{dns2} || $netc->{dnsServer2}), - Gtk2::Label->new($intf->{dns3} || $netc->{dnsServer3}), - ), - ), - 1, gtkadd(Gtk2::Frame->new(N("Search Domain")), - Gtk2::Label->new($intf->{domain} || $netc->{DOMAINNAME} || 'none'), - ), - ), - ), - ); - $gui->{intf}{BOOTPROTO} and $gui->{intf}{BOOTPROTO}->set_popdown_strings(N_("static"), N_("dhcp")); - $interface !~ /eth/ and $_->set_sensitive(0) foreach $gui->{intf}{IPADDR}, $gui->{intf}{NETMASK}; - !$intf->{IPADDR} and ($intf->{IPADDR}, $gui->{active}, $intf->{NETMASK}) = get_intf_ip($interface); - $gui->{netc}{$_}->set_text($netc->{$_}) foreach keys %{$gui->{netc}}; - } - - if ($intf->{pages}{N("Wireless")}) { - gtkpack($gui->{sheet}{N("Wireless")} = Gtk2::HBox->new(0,0), - gtkpack_(Gtk2::VBox->new(0,0), - map { (0, gtkpack_(Gtk2::VBox->new(0,0), - 1, Gtk2::Label->new($_->[0]), - 0, gtksignal_connect($gui->{intf}{$_->[1]} = Gtk2::Entry->new, - key_press_event => $apply), - )); - } ([ N("Operating Mode"), "WIRELESS_MODE" ], - [ N("Network name (ESSID)"), "WIRELESS_ESSID" ], - [ N("Network ID"), "WIRELESS_NWID" ], - [ N("Operating frequency"), "WIRELESS_FREQ" ], - [ N("Sensitivity threshold"), "WIRELESS_SENS" ], - [ N("Bitrate (in b/s)"), "WIRELESS_RATE" ] - ), - ), - Gtk2::VSeparator->new, - gtkpack_(Gtk2::VBox->new(0,0), - map { (0, gtkpack_(Gtk2::VBox->new(0,0), - 1, Gtk2::Label->new($_->[0]), - 0, gtksignal_connect($gui->{intf}{$_->[1]} = Gtk2::Entry->new, - key_press_event => $apply), - )); - } ([ N("Encryption key"), 'WIRELESS_ENC_KEY' ], - [ N("RTS/CTS"), 'WIRELESS_RTS' ], - [ N("Fragmentation"), 'WIRELESS_FRAG' ], - [ N("Iwconfig command extra arguments"), 'WIRELESS_IWCONFIG' ], - [ N("Iwspy command extra arguments"), 'WIRELESS_IWSPY' ], - [ N("Iwpriv command extra arguments"), 'WIRELESS_IWPRIV' ], - ), - ), - ); - } - - if ($intf->{pages}{N("Options")}) { - gtkpack($gui->{sheet}{N("Options")} = Gtk2::VBox->new(0,0), - gtkpack__(Gtk2::VBox->new(0,0), - $gui->{intf_bool}{ONBOOT} = gtksignal_connect(Gtk2::CheckButton->new(N("Start at boot")), - toggled => $apply), - if_($interface =~ /eth/, - map { ($gui->{intf_bool}{$_->[0]} = gtksignal_connect(Gtk2::CheckButton->new($_->[1]), - 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), - Gtk2::Label->new(N("Dialing mode")), - my @dialing_mode_radio = gtkradio(("auto") x 2, "manual"), - ), - Gtk2::VSeparator->new, - gtkpack__(new Gtk2::VBox(0,0), - Gtk2::Label->new(N("Connection speed")), - my @speed_radio = gtkradio(("64 Kb/s") x 2, "128 Kb/s"), - ), - ), - gtkpack_(Gtk2::HBox->new(0,0), - 0, Gtk2::Label->new(N("Connection timeout (in sec)")), - 1, gtksignal_connect($gui->{intf}{huptimeout} = Gtk2::Entry->new, - 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->() }); - $speed_radio[0]->signal_connect(toggled => sub { $gui->{intf_radio}{speed} = '64'; $apply->() }); - $speed_radio[1]->signal_connect(toggled => sub { $gui->{intf_radio}{speed} = '128'; $apply->() }); - $gui->{intf_bool}{ONBOOT}->set_active($intf->{ONBOOT} eq 'yes' ? 1 : 0); - $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}{N("Account")}) { - if ($interface_kind =~ /^speedtouch|sagem$/) { - $gui->{description} = $interface_kind eq 'speedtouch' ? 'Alcatel|USB ADSL Modem (Speed Touch)' : 'Analog Devices Inc.|USB ADSL modem'; - } - gtkpack_($gui->{sheet}{N("Account")} = Gtk2::VBox->new(0,0), - if_($interface eq 'modem', - 0, gtkpack_(Gtk2::VBox->new(0,0), - 1, Gtk2::Label->new(N("Authentication")), - 0, $gui->{intf}{auth} = gtksignal_connect(Gtk2::OptionMenu->new, - changed => $apply), - )), - map { (0, gtkpack_(Gtk2::VBox->new(0,0), - 1, Gtk2::Label->new($_->[0]), - 0, $gui->{intf}{$_->[1]} = gtksignal_connect(Gtk2::Entry->new, - key_press_event => $apply), - ), - ); - } ([ N("Account Login (user name)"), 'login' ], - [ N("Account Password"), 'passwd' ], - if_($interface =~ /^(isdn|modem)$/, [ N("Provider phone number"), $1 eq 'modem' ? 'phone' : 'phone_out' ]), - ), - ); - $gui->{intf}{auth}->set_popdown_strings(N("PAP"), N("Terminal-based"), N("Script-based"), N_("CHAP")); - $gui->{intf}{passwd}->set_visibility(0); - } - - if ($intf->{pages}{N("Modem")}) { - gtkpack($gui->{sheet}{N("Modem")} = Gtk2::HBox->new(0,0), - gtkpack_(Gtk2::VBox->new(0,0), - map { (0, gtkpack_(Gtk2::VBox->new(0,0), - 1, Gtk2::Label->new($_->[0]), - 0, $gui->{intf}{$_->[1]} = gtksignal_connect(Gtk2::Entry->new, - key_press_event => $apply), - ), - ); - } ([ N("Card IRQ"), 'irq' ], - [ N("Card mem (DMA)"), 'mem' ], - [ N("Card IO"), 'io' ], - [ N("Card IO_0"), 'io0' ], - ), - ), - Gtk2::VSeparator->new, - gtkpack__(new Gtk2::VBox(0,0), - Gtk2::Label->new(N("Protocol")), - my @protocol_radio = gtkradio(N("Protocol"), N("European protocol (EDSS1)"), - N("Protocol for the rest of the world\nNo D-Channel (leased lines)")), - ), - ); - $protocol_radio[0]->signal_connect(toggled => sub { $gui->{intf_radio}{protocol} = 2; $apply->() }); - $protocol_radio[1]->signal_connect(toggled => sub { $gui->{intf_radio}{protocol} = 3; $apply->() }); - } - - if ($intf->{pages}{N("Informations")}) { - my ($info) = $gui->{description} ? - find { $_->{description} eq $gui->{description} } detect_devices::probeall : network::ethernet::mapIntfToDevice($interface_kind); - - gtkpack($gui->{sheet}{N("Informations")} = Gtk2::VBox->new(0,0), - gtktext_insert(Gtk2::TextView->new, - join('', - map { $_->[0] . ": \x{200e}" . $_->[1] . "\n" } ( - [ 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("Bus"), $info->{bus} || '-' ], - [ N("Location on the bus"), $info->{pci_bus} || '-' ], - ) - ) - ), - ); - } - - $gui->{intf}{$_}->set_text($intf->{$_}) foreach keys %{$gui->{intf}}; - $gui->{notebook} = Gtk2::Notebook->new; - populate_notebook($gui->{notebook}, $gui); -} - -sub populate_notebook { - my ($notebook, $gui) = @_; - foreach (N("TCP/IP"), N("Account"), N("Wireless"), N("Modem"), N("Options"), N("Informations")) { - !$gui->{sheet}{$_} and next; - $notebook->append_page($gui->{sheet}{$_}, Gtk2::Label->new($_)); - } -} - -sub save { - my ($netc, $netcnx, $intf, $gui, $apply_button) = @_; - - foreach (keys %$intf) { - save_notebook($netc, $intf->{$_}, $gui->{$_}); - $intf->{$_}{save} and $intf->{$_}{save}->(); - } - apply($netc, $netcnx, $intf, $apply_button); -} - -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}}; - $intf->{$_} = bool2yesno($gui->{intf_bool}{$_}->get_active) foreach keys %{$gui->{intf_bool}}; - $gui->{intf_bool}{MII_NOT_SUPPORTED} and $intf->{MII_NOT_SUPPORTED} = bool2yesno(!$gui->{intf_bool}{MII_NOT_SUPPORTED}->get_active); - $gui->{intf_bool}{HWADDR} and (bool2yesno($gui->{intf_bool}{HWADDR}->get_active) eq 'yes' ? ($intf->{HWADDR} = 'yes') : delete $intf->{HWADDR}); -} - -sub add_intf() { - $::isWizard = 1; - network::netconnect::load_conf($netcnx, $netc, $intf); - # network::netconnect::add_interface($in, $netcnx); - eval { network::netconnect::main('', $netcnx, $in, $netc, undef, $intf) }; - my $err = $@; - if ($err && $in->isa('interactive::gtk')) { - err_dialog(N("Error"), N("An unexpected error has happened:\n%s", $err)); - } - $in->exit(0); -} - -sub del_intf() { - my ($intf2delete, $faillure); - my $wiz = - { - defaultimage => "wiz_drakconnect.png", - name => N("Remove a network interface"), - pages => { - welcome => { - no_back => 1, - name => N("Select the network interface to remove:"), - data => [ { label => N("Net Device"), val => \$intf2delete, list => [ uniq(detect_devices::getNet(), keys %$intf) ], allow_empty_list => 1 } ], - post => sub { - !$::testing and eval { - modules::mergein_conf('/etc/modules.conf'); - modules::remove_alias($intf2delete); - modules::write_conf(); - rm_rf("/etc/sysconfig/network-scripts/ifcfg-$intf2delete"); - }; - $faillure = $@; - }, - next => "end", - }, - end => { - name => sub { - ($faillure ? - N("An error occured while deleting the \"%s\" network interface:\n\n%s", - $intf2delete, $faillure) : - N("Congratulations, the \"%s\" network interface has been succesfully deleted", $intf2delete) - ) - }, - end => 1, - }, - }, - }; - require wizards; - wizards->new->safe_process($wiz, $in); - $in->exit(0); -} - -sub get_intf_ip { - my ($interface) = @_; - 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"); - $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 { - $ip = $intf->{$interface}{IPADDR}; - $state = "n/a"; - } - ($ip, $state, $mask); -} - -my %intf; - -sub update_list() { - @all_cards = network::ethernet::get_eth_cards(); - my %new_intf = map { @$_ } @all_cards; - my @new_intf = sort keys %new_intf; - foreach my $interface (difference2(\@new_intf, [ keys %intf ])) { - $intf{$interface} = $tree_model->append(undef); - } - foreach my $interface (@new_intf) { - my ($ip, $state) = get_intf_ip($interface); - $tree_model->set($intf{$interface}, map_index { $::i => $_ } (gtkcreate_pixbuf("eth_card_mini2.png"), $interface, $ip , $intf->{$interface}{BOOTPROTO}, $new_intf{$interface}, $state)); - } - foreach my $i (difference2([ keys %intf ], \@new_intf)) { - $tree_model->remove($intf{$i}); - delete $intf{$i}; - } -} - -sub apply { - my ($netc, $netcnx, $intf, $button_apply) = @_; - - network::network::sethostname($netc) if is_dynamic_ip($intf); - - network::network::configureNetwork2($in, '', $netc, $intf); - $netcnx->{type} =~ /adsl/ or system("/sbin/chkconfig --del adsl 2> /dev/null"); - $netcnx->{type} !~ /adsl_p/ and system("/etc/rc.d/init.d/network restart"); - - $button_apply->set_sensitive(0); -} - -sub ethisup { `LC_ALL=C LANGUAGE=C /sbin/ifconfig $_[0]` =~ /inet/ } - -sub update_intbutt() { - $int_state->set($isconnected ? N("Connected") : N("Not connected")); - $int_connect->child->set($isconnected ? N("Disconnect...") : N("Connect...")); - $int_connect->set_sensitive(1); -} - -my $to_update; -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(); - update_intbutt() if $isconnected != -1; - 1; -} - -sub in_ifconfig { - my ($intf) = @_; - -e '/sbin/ifconfig' or return 1; - $intf eq '' and return 1; - `/sbin/ifconfig` =~ /$intf/; -} - -sub update2() { - undef $to_update; - connected_bg(\$to_update); - if (defined $to_update) { - $isconnected = $to_update; - if ($isconnected != -1) { - if ($isconnected && !in_ifconfig($netcnx->{NET_INTERFACE})) { - $warning_label1->set(N("Warning, another Internet connection has been detected, maybe using your network")); - $isconnected = 0; - } else { $warning_label1->set("") } - update_intbutt(); - } - } - update(); - 1; -} - -sub quit_global() { - ugtk2->exit(0); -} - -sub get_intf_status { - my ($c) = @_; - ethisup($c) ? N("Deactivate now") : N("Activate now") -} - -sub configure_lan() { - my $window = _create_dialog(N("LAN configuration")); - my @card_tab; - - if (@all_cards < 1) { - $window->vbox->add(Gtk2::Label->new(N("You don't have any configured interface. -Configure them first by clicking on 'Configure'"))); - gtkpack(gtkset_layout($window->action_area, 'end'), - gtksignal_connect(Gtk2::Button->new(N("Ok")), - clicked => sub { Gtk2->main_quit }) - ); - $window->show_all; - $window->run; - $window->destroy; - return; - } - - $window->set_border_width(10); - gtkpack($window->vbox, - Gtk2::Label->new(N("LAN Configuration")), - my $notebook = Gtk2::Notebook->new, - ); - - foreach (0..$#all_cards) { - my @infos; - my @conf_data; - $card_tab[2*$_] = \@infos; - $card_tab[2*$_+1] = \@conf_data; - - my $vbox_local = Gtk2::VBox->new(0,0); - $vbox_local->set_border_width(10); - $vbox_local->pack_start(Gtk2::Label->new(N("Adapter %s: %s", $_+1 , $all_cards[$_][0])),1,1,0); - # Eth${_}Hostname = $netc->{HOSTNAME} - # Eth${_}HostAlias = " . do { $netc->{HOSTNAME} =~ /([^\.]*)\./; $1 } . " - # Eth${_}Driver = $all_cards[$_]->[1] - my $interface = $all_cards[$_][0]; - my ($ip, undef, $mask) = get_intf_ip($interface); - $mask ||= $intf->{$interface}{NETMASK}; - @conf_data = ([ N("IP address"), \$ip ], - [ N("Netmask"), \$mask ], - [ N("Boot Protocol"), \$intf->{$interface}{BOOTPROTO}, ["static", "dhcp", "bootp"] ], - [ N("Started on boot"), \$intf->{$interface}{ONBOOT} , ["yes", "no"] ], - [ N("DHCP client"), \$netcnx->{dhcp_client} ] - ); - my $i = 0; - my $size_group = Gtk2::SizeGroup->new('horizontal'); - - foreach my $j (@conf_data) { - my $l = Gtk2::Label->new($j->[0]); - $l->set_justify('left'); - $infos[2*$i] = gtkpack_(Gtk2::HBox->new, - 1, $l); - $vbox_local->pack_start($infos[2*$i], 1, 1, 0); - my $c; - if (defined $j->[2]) { - $c = Gtk2::OptionMenu->new; - $c->set_popdown_strings(@{$j->[2]}); - $infos[2*$i+1] = $c->entry; - $infos[2*$i]->pack_start($c,0,0,0); - } else { - $infos[2*$i+1] = ($c = Gtk2::Entry->new); - $infos[2*$i]->pack_start($infos[2*$i+1],0,0,0); - } - $size_group->add_widget($c); - $infos[2*$i+1]->set_text(${$j->[1]}); - $i++; - } - - my $widget_temp; - if (-e "$::prefix/etc/sysconfig/network-scripts/ifcfg-$interface") { - $widget_temp = gtksignal_connect(Gtk2::Button->new(get_intf_status($interface)), - clicked => sub { - system("/sbin/if" . (ethisup($interface) ? N("down") : N("up")) . " $interface"); - $_[0]->set_label(get_intf_status($interface)); - update(); - }); - } else { - $widget_temp = N("This interface has not been configured yet.\nRun the \"Add an interface\" assistant from the Mandrake Control Center"); - } - $vbox_local->pack_start(gtkpack__(Gtk2::HBox->new(0,0), - $widget_temp - ),0,0,0); - # $list->append($_+1, $interface, $intf->{$interface}{IPADDR}, $intf->{$interface}{BOOTPROTO}, $all_cards[$_]->[1]); - # $list->set_selectable($_, 0); - $notebook->append_page($vbox_local, Gtk2::Label->new($interface)); - } - - my $exit_dialogsub = sub { - $window->destroy; - Gtk2->main_quit; - }; - - gtkpack($window->action_area, - gtksignal_connect(Gtk2::Button->new(N("Cancel")), - clicked => $exit_dialogsub), - gtksignal_connect(Gtk2::Button->new(N("Ok")), clicked => sub { - foreach (0..$#all_cards) { - my @infos = @{$card_tab[2*$_]}; - each_index { ${$_->[1]} = $infos[2*$::i+1]->get_text } @{$card_tab[2*$_+1]}; - my $interface = $all_cards[$_][0]; - if ($intf->{$interface}{BOOTPROTO} ne "static") { - delete @{$intf->{$interface}}{qw(IPADDR NETWORK NETMASK BROADCAST)}; - } else { - if ($infos[1]->get_text ne "No ip") { - $intf->{$interface}{IPADDR} = $infos[1]->get_text; - $intf->{$interface}{NETMASK} = $infos[3]->get_text; - } - } - } - update(); - $button_apply->set_sensitive(1); - $exit_dialogsub->(); - }), - ); - - $window->show_all; - foreach (0..$#all_cards) { - my @infos = @{$card_tab[2*$_]}; - $intf->{$all_cards[$_][0]}{BOOTPROTO} eq "dhcp" or $infos[8]->hide; - } - $window->run; -} - - -sub configure_net { - my ($netcnx, $netc, $_intf) = @_; - my $dialog = ugtk2->new('drakconnect'); - 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("You don't have any configured Internet connection. -Please run \"Internet access\" in control center.")); - $in->exit; - } - my $cnx = {}; - $cnx = $netcnx->{$netcnx->{type}}; - unless ($::isEmbedded) { - $dialog->{rwindow}->set_position('center'); - $dialog->{rwindow}->set_title(N("Internet connection configuration")); - $dialog->{rwindow}->set_size_request(-1, -1); - } - $dialog->{rwindow}->signal_connect(delete_event => $exit_dialogsub); - - my $param_vbox = Gtk2::VBox->new(0,0); - my $i = 0; - my (@mask, $extra_netdevice); - if ($netcnx->{type} eq 'lan') { - @mask = (0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0); - } elsif ($netcnx->{type} eq 'isdn_internal') { - if (defined $cnx->{vendor} && defined $cnx->{id}) { - @mask = (0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1); - } else { - @mask = (1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1) - } - $extra_netdevice = "ppp0"; - } elsif ($netcnx->{type} eq 'modem' || $netcnx->{type} eq 'isdn_external') { - @mask = (0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0); - $extra_netdevice = "ppp0" if $netcnx->{type} eq 'modem'; - } elsif ($netcnx->{type} =~ /adsl/) { - @mask = (0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0); - $extra_netdevice = "ppp0"; - } elsif ($netcnx->{type} eq 'cable') { - @mask = (0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0); - } - $extra_netdevice = "ippp0" if $netcnx->{type} =~ /^isdn/; - - #- duplicated code (waiting for 9.1 to be out to merge everything correctly, avoid bug elsewhere). - if ($netcnx->{type} =~ /adsl/) { - require network::adsl; - network::adsl::adsl_probe_info($cnx, $netc, $intf); - } - my @conf_data = ([ N("Card IRQ"), \$cnx->{irq} ], - [ N("Card mem (DMA)"), \$cnx->{mem} ], - [ N("Card IO"), \$cnx->{io} ], - [ N("Card IO_0"), \$cnx->{io0} ], - [ N("Card IO_1"), \$cnx->{io1} ], - [ N("Your personal phone number"), \$cnx->{phone_in} ], - [ N("Provider name (ex provider.net)"), \$netc->{DOMAINNAME2} ], - [ N("Provider phone number"), \$cnx->{phone_out} ], - [ N("Provider dns 1 (optional)"), \$netc->{dnsServer2} ], - [ N("Provider dns 2 (optional)"), \$netc->{dnsServer3} ], - [ N("Account Login (user name)"), \$cnx->{login} ], - [ N("Account Password"), \$cnx->{passwd} ], - [ N("Dialing mode"), \$cnx->{dialing_mode}, [ "auto", "manual" ] ], - [ N("Gateway"), \$netc->{GATEWAY} ], - [ N("Connection name"), \$cnx->{connection} ], - [ N("Phone number"), \$cnx->{phone} ], - [ N("Login ID"), \$cnx->{login} ], - [ N("Password"), \$cnx->{passwd} ], - [ N("Authentication"), \$cnx->{auth}, [ N("PAP"), N("Terminal-based"), N("Script-based"), N_("CHAP") ] ], - [ N("Domain name"), \$cnx->{domain} ], - [ N("First DNS Server (optional)"), \$cnx->{dns1} ], - [ N("Second DNS Server (optional)"), \$cnx->{dns2} ], - [ N("Ethernet Card"), \$netc->{NET_DEVICE}, [ detect_devices::getNet(), $extra_netdevice ] ], - [ N("DHCP Client"), \$netcnx->{dhcp_client}, ["dhcp-client", "dhcpcd", "dhcpxd"] ], - [ N("Connection speed"), \$cnx->{speed}, ["64 Kb/s", "128 Kb/s"] ], - [ N("Connection timeout (in sec)"), \$cnx->{huptimeout} ] -); - my @infos; - foreach (@conf_data) { - if (!$mask[$i]) { - $i++; - next; - } - $infos[2*$i] = Gtk2::HBox->new(0,0); - gtkpack($infos[2*$i], gtkset_justify(Gtk2::Label->new($_->[0]), 'left')); - gtkpack($param_vbox, $infos[2*$i]); - if (defined $_->[2]) { - my $c = Gtk2::Combo->new; - $c->set_popdown_strings(@{$_->[2]}); - $infos[2*$i+1] = $c->entry; - gtkpack($infos[2*$i], $c); - } else { - $infos[2*$i+1] = Gtk2::Entry->new; - gtkpack($infos[2*$i], $infos[2*$i+1]); - #hide password if Entry Password - $infos[2*$i+1]->set_visibility(0) if $_->[0] eq N("Account Password") || $_->[0] eq N("Password"); - } - $infos[2*$i+1]->set_text(${$_->[1]}); - $i++; - } - - $dialog->{rwindow}->add(gtkpack_(Gtk2::VBox->new, - 0, Gtk2::Label->new(N("Internet Connection Configuration")), - 1, gtkadd(Gtk2::Frame->new(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(translate($netcnx->{type})) ], - [ $int_label, $interface_name ], - [ Gtk2::Label->new(N("Status:")), - $int_state = Gtk2::Label->new(N("Testing your connection...")) ] - ), - 5), - ), - 1, gtkadd(Gtk2::Frame->new(N("Parameters")), $param_vbox), - 0, gtkpack_(Gtk2::HBox->new, - 0, gtksignal_connect(Gtk2::Button->new(N("Ok")), clicked => sub { - each_index { - ${$conf_data[$::i][1]} = $infos[2*$::i+1]->get_text if $_; - } @mask; - update(); - $button_apply->set_sensitive(1); - $exit_dialogsub->(); - }), - 1, Gtk2::Label->new(""), - 0, gtksignal_connect(Gtk2::Button->new(N("Cancel")), clicked => $exit_dialogsub), - ), - ), - ); - - $dialog->{rwindow}->show_all; - $dialog->main; - ugtk2->exit(0); -} - -sub reread_net_conf() { - network::netconnect::read_net_conf('', $netcnx, $netc); - modules::load_category('net'); - @all_cards = network::ethernet::get_eth_cards(); - network::netconnect::load_conf($netcnx, $netc, $intf); - network::network::probe_netcnx_type('', $netc, $intf, $netcnx); -} |
