#-*- Mode: perl; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
# Network Interfaces Configuration handling
#
# Copyright (C) 2000-2001 Ximian, Inc.
#
# Authors: Hans Petter Jansson <hpj@ximian.com>
# Arturo Espinosa <arturo@ximian.com>
# Michael Vogt <mvo@debian.org> - Debian 2.[2|3] support.
# David Lee Ludwig <davidl@wpi.edu> - Debian 2.[2|3] support.
# Grzegorz Golawski <grzegol@pld-linux.org> - PLD support
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU Library General Public License as published
# by the Free Software Foundation; either version 2 of the License, 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 Library General Public License for more details.
#
# You should have received a copy of the GNU Library 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.
package Network::Ifaces;
use Utils::Util;
use Utils::Parse;
use Init::Services;
# FIXME: this function isn't IPv6-aware
# it checks if a IP address is in the same network than another
sub is_ip_in_same_network
{
my ($address1, $address2, $netmask) = @_;
my (@add1, @add2, @mask);
my ($i);
return 0 if (!$address1 || !$address2 || !$netmask);
@add1 = split (/\./, $address1);
@add2 = split (/\./, $address2);
@mask = split (/\./, $netmask);
for ($i = 0; $i < 4; $i++)
{
$add1[$i] += 0;
$add2[$i] += 0;
$mask[$i] += 0;
return 0 if (($add1[$i] & $mask[$i]) != ($add2[$i] & $mask[$i]));
}
return 1;
}
sub ensure_iface_broadcast_and_network
{
my ($iface) = @_;
if (exists $$iface{"netmask"} &&
exists $$iface{"address"})
{
if (! exists $$iface{"broadcast"})
{
$$iface{"broadcast"} = &Utils::Util::ip_calc_broadcast ($$iface{"address"}, $$iface{"netmask"});
}
if (! exists $$iface{"network"})
{
$$iface{"network"} = &Utils::Util::ip_calc_network ($$iface{"address"}, $$iface{"netmask"});
}
}
}
sub check_pppd_plugin
{
my ($plugin) = @_;
my ($version, $output);
$version = &Utils::File::run_backtick ("pppd --version", 1);
$version =~ s/.*version[ \t]+//;
chomp $version;
return 0 if !version;
return &Utils::File::exists ("/usr/lib/pppd/$version/$plugin.so");
}
sub check_capi
{
my ($line, $i);
if ($Utils::Backend::tool{"system"} ne "Linux")
{
return &check_pppd_plugin("capiplugin");
}
$i=0;
$fd = &Utils::File::open_read_from_names ("proc/capi/controller");
return 0 if !$fd;
while (($line = &Utils::Parse::chomp_line_hash_comment ($fd)) != -1)
{
$i++;
}
return ($i > 0) ? &check_pppd_plugin("capiplugin") : 0;
}
sub get_linux_wireless_ifaces
{
my ($fd, $line);
my (@ifaces, $command);
$command = &Utils::File::get_cmd_path ("iwconfig");
open $fd, "$command |";
return @ifaces if $fd eq undef;
while (<$fd>)
{
if (/^([a-zA-Z0-9]+)[\t ].*$/)
{
push @ifaces, $1;
}
}
&Utils::File::close_file ($fd);
&Utils::Report::leave ();
return \@ifaces;
}
sub get_freebsd_wireless_ifaces
{
my ($fd, $line, $iface);
my (@ifaces, $command);
$command = &Utils::File::get_cmd_path ("ifconfig");
open $fd, "$command |";
return @ifaces if $fd eq undef;
while (<$fd>)
{
if (/^([a-zA-Z]+[0-9]+):/)
{
$iface = $1;
}
if (/media:.*wireless.*/i)
{
push @ifaces, $iface;
}
}
&Utils::File::close_file ($fd);
&Utils::Report::leave ();
return \@ifaces;
}
# Returns an array with the wireless devices found
sub get_wireless_ifaces
{
my ($plat) = $Utils::Backend::tool{"system"};
return &get_linux_wireless_ifaces if ($plat eq "Linux");
return &get_freebsd_wireless_ifaces if ($plat eq "FreeBSD");
}
# returns interface type depending on it's interface name
# types_cache is a global var for caching interface types
sub get_interface_type
{
my ($dev) = @_;
my (@wireless_ifaces, $wi, $type);
return $types_cache{$dev} if (exists $types_cache{$dev});
#check whether interface is wireless
$wireless_ifaces = &get_wireless_ifaces ();
foreach $wi (@$wireless_ifaces)
{
if ($dev eq $wi)
{
$types_cache{$dev} = "wireless";
return $types_cache{$dev};
}
}
if ($dev =~ /^(ppp|tun)/)
{
# check whether the proper plugin exists
if (&check_capi ())
{
$types_cache{$dev} = "isdn";
}
else
{
$types_cache{$dev} = "modem";
}
}
elsif ($dev =~ /(eth|dc|ed|bfe|em|fxp|bge|de|xl|ixgb|txp|vx|lge|nge|pcn|re|rl|sf|sis|sk|ste|ti|tl|tx|vge|vr|wb|cs|ex|ep|fe|ie|lnc|sn|xe|le|an|awi|wi|ndis|wl|aue|axe|cue|kue|rue|fwe|nve|hme|ath|iwi|ipw|ral|ural|my)[0-9]/)
{
$types_cache{$dev} = "ethernet";
}
elsif ($dev =~ /irlan[0-9]/)
{
$types_cache{$dev} = "irlan";
}
elsif ($dev =~ /plip[0-9]/)
{
$types_cache{$dev} = "plip";
}
elsif ($dev =~ /lo[0-9]?/)
{
$types_cache{$dev} = "loopback";
}
return $types_cache{$dev};
}
sub get_sunos_freebsd_interfaces_info
{
my ($command) = @_;
my ($dev, %ifaces, $fd);
&Utils::Report::enter ();
&Utils::Report::do_report ("network_iface_active_get");
$fd = &Utils::File::run_pipe_read ($command);
return {} if $fd eq undef;
while (<$fd>)
{
chomp;
if (/^([^ \t:]+):.*(<.*>)/)
{
$dev = $1;
$ifaces{$dev}{"dev"} = $dev;
$ifaces{$dev}{"enabled"} = 1 if ($2 =~ /[<,]UP[,>]/);
}
s/^[ \t]+//;
if ($dev)
{
$ifaces{$dev}{"hwaddr"} = $1 if /ether[ \t]+([^ \t]+)/i;
$ifaces{$dev}{"addr"} = $1 if /inet[ \t]+([^ \t]+)/i;
$ifaces{$dev}{"mask"} = $1 if /netmask[ \t]+([^ \t]+)/i;
$ifaces{$dev}{"bcast"} = $1 if /broadcast[ \t]+([^ \t]+)/i;
}
}
&Utils::File::close_file ($fd);
&Utils::Report::leave ();
return %ifaces;
}
sub get_freebsd_interfaces_info
{
return &get_sunos_freebsd_interfaces_info ("ifconfig");
}
sub get_sunos_interfaces_info
{
return &get_sunos_freebsd_interfaces_info ("ifconfig -a");
}
sub get_linux_interfaces_info
{
my ($dev, %ifaces, $fd);
&Utils::Report::enter ();
&Utils::Report::do_report ("network_iface_active_get");
$fd = &Utils::File::run_pipe_read ("ifconfig -a");
return {} if $fd eq undef;
while (<$fd>)
{
chomp;
if (/^([^ \t:]+)/)
{
$dev = $1;
$ifaces{$dev}{"enabled"} = 0;
$ifaces{$dev}{"dev"} = $dev;
}
s/^[ \t]+//;
if ($dev)
{
$ifaces{$dev}{"hwaddr"} = $1 if /HWaddr[ \t]+([^ \t]+)/i;
$ifaces{$dev}{"addr"} = $1 if /addr:([^ \t]+)/i;
$ifaces{$dev}{"mask"} = $1 if /mask:([^ \t]+)/i;
$ifaces{$dev}{"bcast"} = $1 if /bcast:([^ \t]+)/i;
$ifaces{$dev}{"enabled"} = 1 if /^UP[ \t]/i;
}
}
&Utils::File::close_file ($fd);
&Utils::Report::leave ();
return %ifaces;
}
sub get_interfaces_info
{
my (%ifaces, $type);
return &get_linux_interfaces_info if ($Utils::Backend::tool{"system"} eq "Linux");
return &get_freebsd_interfaces_info if ($Utils::Backend::tool{"system"} eq "FreeBSD");
return &get_sunos_interfaces_info if ($Utils::Backend::tool{"system"} eq "SunOS");
return undef;
}
# boot method parsing/replacing
sub get_rh_bootproto
{
my ($file, $key) = @_;
my %rh_to_proto_name =
(
"bootp" => "bootp",
"dhcp" => "dhcp",
"pump" => "pump",
"none" => "static",
"static" => "static"
);
my $ret;
$ret = &Utils::Parse::get_sh ($file, $key);
if (!exists $rh_to_proto_name{$ret})
{
&Utils::Report::do_report ("network_bootproto_unsup", $file, $ret);
$ret = "none";
}
return $rh_to_proto_name{$ret};
}
sub set_rh_bootproto
{
my ($file, $key, $value) = @_;
my %proto_name_to_rh =
(
"bootp" => "bootp",
"dhcp" => "dhcp",
"pump" => "pump",
"none" => "none",
"static" => "static"
);
return &Utils::Replace::set_sh ($file, $key, $proto_name_to_rh{$value});
}
sub get_debian_bootproto
{
my ($file, $iface) = @_;
my (@stanzas, $stanza, $method, $bootproto);
my %debian_to_proto_name =
(
"bootp" => "bootp",
"dhcp" => "dhcp",
"loopback" => "none",
"ppp" => "none",
"static" => "static",
"ipv4ll" => "ipv4ll",
);
&Utils::Report::enter ();
@stanzas = &Utils::Parse::get_interfaces_stanzas ($file, "iface");
foreach $stanza (@stanzas)
{
if (($$stanza[0] eq $iface) && ($$stanza[1] eq "inet"))
{
$method = $$stanza[2];
last;
}
}
if (exists $debian_to_proto_name {$method})
{
$bootproto = $debian_to_proto_name {$method};
}
else
{
$bootproto = "none";
&Utils::Report::do_report ("network_bootproto_unsup", $method, $iface);
}
&Utils::Report::leave ();
return $bootproto;
}
sub set_debian_bootproto
{
my ($file, $iface, $value) = @_;
my (@stanzas, $stanza, $method, $bootproto);
my %proto_name_to_debian =
(
"bootp" => "bootp",
"dhcp" => "dhcp",
"loopback" => "loopback",
"ppp" => "ppp",
"none" => "static",
"ipv4ll" => "ipv4ll",
"static" => "static",
);
my %dev_to_method =
(
"lo" => "loopback",
"ppp" => "ppp",
"ippp" => "ppp"
);
foreach $i (keys %dev_to_method)
{
$value = $dev_to_method{$i} if $iface =~ /^$i/;
}
return &Utils::Replace::set_interfaces_stanza_value ($file, $iface, 2, $proto_name_to_debian{$value});
}
sub get_slackware_bootproto
{
my ($file, $iface) = @_;
if (&Utils::Parse::get_rcinet1conf_bool ($file, $iface, USE_DHCP))
{
return "dhcp"
}
else
{
return "static";
}
}
sub set_slackware_bootproto
{
my ($file, $iface, $value) = @_;
if ($value eq "dhcp")
{
&Utils::Replace::set_rcinet1conf ($file, $iface, USE_DHCP, "yes");
}
else
{
&Utils::Replace::set_rcinet1conf ($file, $iface, USE_DHCP);
}
}
sub get_bootproto
{
my ($file, $key) = @_;
my ($str);
$str = &Utils::Parse::get_sh ($file, $key);
return "dhcp" if ($key =~ /dhcp/i);
return "bootp" if ($key =~ /bootp/i);
return "static";
}
sub set_suse_bootproto
{
my ($file, $key, $value) = @_;
my %proto_name_to_suse90 =
(
"dhcp" => "dhcp",
"bootp" => "bootp",
"static" => "static",
);
return &Utils::Replace::set_sh ($file, $key, $proto_name_to_suse90{$value});
}
sub get_gentoo_bootproto
{
my ($file, $dev) = @_;
return "dhcp" if (&Utils::Parse::get_confd_net ($file, "config_$dev") =~ /dhcp/i);
return "static";
}
sub set_gentoo_bootproto
{
my ($file, $dev, $value) = @_;
return if ($dev =~ /^ppp/);
return &Utils::Replace::set_confd_net ($file, "config_$dev", "dhcp") if ($value eq "dhcp");
# replace with a fake IP address, it will be replaced
# later with the correct one, I know it's a hack
return &Utils::Replace::set_confd_net ($file, "config_$dev", "0.0.0.0");
}
sub set_freebsd_bootproto
{
my ($file, $dev, $value) = @_;
return &Utils::Replace::set_sh ($file, "ifconfig_$dev", "dhcp") if ($value eq "dhcp");
return &Utils::Replace::set_sh ($file, "ifconfig_$dev", "");
}
sub get_sunos_bootproto
{
my ($dhcp_file, $dev) = @_;
return (&Utils::File::exists ($dhcp_file)) ? "dhcp" : "static";
}
sub set_sunos_bootproto
{
my ($dhcp_file, $file, $iface, $value) = @_;
if ($value eq "dhcp")
{
&Utils::File::save_buffer ("", $file);
&Utils::File::run ("touch $dhcp_file");
}
else
{
&Utils::File::remove ($dhcp_file);
}
}
# Functions to get the system interfaces, these are distro dependent
sub sysconfig_dir_get_existing_ifaces
{
my ($dir) = @_;
my (@ret, $i, $name);
local *IFACE_DIR;
if (opendir IFACE_DIR, "$gst_prefix/$dir")
{
foreach $i (readdir (IFACE_DIR))
{
push @ret, $1 if ($i =~ /^ifcfg-(.+)$/);
}
closedir (IFACE_DIR);
}
return \@ret;
}
sub get_existing_rh62_ifaces
{
return @{&sysconfig_dir_get_existing_ifaces ("/etc/sysconfig/network-scripts")};
}
sub get_existing_rh72_ifaces
{
my ($ret, $arr);
# This syncs /etc/sysconfig/network-scripts and /etc/sysconfig/networking
&Utils::File::run ("redhat-config-network-cmd");
$ret = &sysconfig_dir_get_existing_ifaces
("/etc/sysconfig/networking/profiles/default");
$arr = &sysconfig_dir_get_existing_ifaces
("/etc/sysconfig/networking/devices");
&Utils::Util::arr_merge ($ret, $arr);
return @$ret;
}
sub get_existing_suse_ifaces
{
return @{&sysconfig_dir_get_existing_ifaces ("/etc/sysconfig/network")};
}
sub get_existing_pld_ifaces
{
return @{&sysconfig_dir_get_existing_ifaces ("/etc/sysconfig/interfaces")};
}
sub get_pap_passwd
{
my ($file, $login) = @_;
my (@arr, $passwd);
$login = '"?' . $login . '"?';
&Utils::Report::enter ();
&Utils::Report::do_report ("network_get_pap_passwd", $login, $file);
$arr = &Utils::Parse::split_first_array ($file, $login, "[ \t]+", "[ \t]+");
$passwd = $$arr[1];
&Utils::Report::leave ();
$passwd =~ s/^\"([^\"]*)\"$/$1/;
return $passwd;
}
sub set_pap_passwd
{
my ($file, $login, $passwd) = @_;
my ($line);
$login = '"' . $login . '"';
$passwd = '"'. $passwd . '"';
$line = "* $passwd";
return &Utils::Replace::split ($file, $login, "[ \t]+", $line);
}
sub get_wep_key_type
{
my ($func) = shift @_;
my ($val);
$val = &$func (@_);
return "wep-ascii" if ($val =~ /^s\:/);
return "wep-hex";
}
sub get_debian_key_type
{
my ($file, $iface) = @_;
my ($val);
$val = &Utils::Parse::get_interfaces_option_str ($file, $iface, "wireless[_-]key1?");
if ($val)
{
return "wep-ascii" if ($val =~ /^s\:/);
return "wep-hex";
}
$val = &Utils::Parse::get_interfaces_option_str ($file, $iface, "wpa-psk");
return "wpa-psk";
}
sub get_wep_key
{
my ($func) = shift @_;
my ($val);
$val = &$func (@_);
$val =~ s/^s\://;
return $val;
}
sub set_wep_key_full
{
my ($key, $key_type, $func);
# seems kind of hackish, but we want to use distro
# specific saving functions, so we need to leave
# the args as variable as possible
$func = shift @_;
$key_type = pop @_;
$key = pop @_;
if ($key_type eq "wep-ascii")
{
$key = "s:" . $key;
}
push @_, $key;
&$func (@_);
}
sub get_encrypted_wpa_psk
{
my ($key, $essid) = @_;
my ($output);
# FIXME: not good to pass directly keys to processes,
# probably the network one won't be so important
# to keep secret to other users.
$output = &Utils::File::run_backtick ("wpa_passphrase $essid $key");
if ($output =~ /\tpsk=(.*)\n/)
{
return $1;
}
return undef;
}
sub set_debian_key
{
my ($file, $iface, $key, $essid, $key_type) = @_;
my ($psk);
#remove undesired options, due to syntax duality
&Utils::Replace::set_interfaces_option_str ($file, $iface, "wireless-key", "");
&Utils::Replace::set_interfaces_option_str ($file, $iface, "wireless-key1", "");
&Utils::Replace::set_interfaces_option_str ($file, $iface, "wireless_key", "");
&Utils::Replace::set_interfaces_option_str ($file, $iface, "wireless_key1", "");
#remove all wpa related keys
&Utils::Replace::set_interfaces_option_str ($file, $iface, "wpa-psk", "");
&Utils::Replace::set_interfaces_option_str ($file, $iface, "wpa-driver", "");
&Utils::Replace::set_interfaces_option_str ($file, $iface, "wpa-key-mgmt", "");
&Utils::Replace::set_interfaces_option_str ($file, $iface, "wpa-proto", "");
if ($key_type =~ /^wep/)
{
&Utils::Replace::set_interfaces_option_str ($file, $iface, "wireless-key",
($key && $key_type eq "wep-ascii") ? "s:" . $key : $key);
}
elsif ($key_type =~ /^wpa/)
{
if ($key)
{
$psk = &get_encrypted_wpa_psk ($key, $essid);
&Utils::Replace::set_interfaces_option_str ($file, $iface, "wpa-psk", $psk);
&Utils::Replace::set_interfaces_option_str ($file, $iface, "wpa-driver", "wext");
&Utils::Replace::set_interfaces_option_str ($file, $iface, "wpa-key-mgmt", "WPA-PSK");
if ($key_type =~ /^wpa2/)
{
&Utils::Replace::set_interfaces_option_str ($file, $iface, "wpa-proto", "WPA2");
}
else
{
&Utils::Replace::set_interfaces_option_str ($file, $iface, "wpa-proto", "WPA");
}
}
}
}
sub set_debian_essid
{
my ($file, $iface, $key_type, $key, $essid) = @_;
Utils::Replace::set_interfaces_option_str ($file, $iface, "wireless-essid", "");
Utils::Replace::set_interfaces_option_str ($file, $iface, "wpa-ssid", "");
if (!$key || $key_type =~ /^wep/)
{
Utils::Replace::set_interfaces_option_str ($file, $iface, "wireless-essid", $essid);
}
elsif ($key_type =~ /^wpa/)
{
Utils::Replace::set_interfaces_option_str ($file, $iface, "wpa-ssid", $essid);
}
}
sub get_modem_volume
{
my ($file) = @_;
my ($volume);
$volume = &Utils::Parse::get_from_chatfile ($file, "AT.*(M0|L[1-3])");
return 0 if ($volume eq undef);
$volume =~ s/^[ml]//i;
return $volume;
}
sub check_type
{
my ($type) = shift @_;
my ($expected_type) = shift @_;
my ($func) = shift @_;
if ($type =~ "^$expected_type")
{
&$func (@_);
}
}
# Distro specific helper functions
sub get_debian_auto_by_stanza
{
my ($file, $iface) = @_;
my (@stanzas, $stanza, $i);
@stanzas = &Utils::Parse::get_interfaces_stanzas ($file, "auto");
foreach $stanza (@stanzas)
{
foreach $i (@$stanza)
{
return $stanza if $i eq $iface;
}
}
return undef;
}
sub get_debian_auto
{
my ($file, $iface) = @_;
return (&get_debian_auto_by_stanza ($file, $iface) ne undef)? 1 : 0;
}
sub set_debian_auto
{
my ($file, $iface, $value) = @_;
my ($buff, $line_no, $found);
$buff = &Utils::File::load_buffer ($file);
&Utils::File::join_buffer_lines ($buff);
$line_no = 0;
while (($found = &Utils::Replace::interfaces_get_next_stanza ($buff, \$line_no, "auto")) >= 0)
{
if ($value)
{
if ($$buff[$line_no] =~ /[ \t]$iface([\# \t\n])/)
{
return &Utils::File::save_buffer ($buff, $file);
}
}
else
{
# I'm including the hash here, although the man page says it's not supported.
last if $$buff[$line_no] =~ s/[ \t]$iface([\# \t\n])/$1/;
}
$line_no ++;
}
if ($found < 0 && $value)
{
&Utils::Replace::interfaces_auto_stanza_create ($buff, $iface);
}
else
{
if ($value)
{
chomp $$buff[$line_no];
$$buff[$line_no] .= " $iface\n";
}
$$buff[$line_no] =~ s/auto[ \t]*$//;
}
return &Utils::File::save_buffer ($buff, $file);
}
sub get_debian_remote_address
{
my ($file, $iface) = @_;
my ($str, @tuples, $tuple, @res);
&Utils::Report::enter ();
&Utils::Report::do_report ("network_get_remote", $iface);
@tuples = &Utils::Parse::get_interfaces_option_tuple ($file, $iface, "up", 1);
&Utils::Report::leave ();
foreach $tuple (@tuples)
{
@res = $$tuple[1] =~ /[ \t]+pointopoint[ \t]+([^ \t]+)/;
return $res[0] if $res[0];
}
return undef;
}
sub set_debian_remote_address
{
my ($file, $iface, $value) = @_;
my ($ifconfig, $ret);
&Utils::Report::enter ();
&Utils::Report::do_report ("network_set_remote", $iface);
$ifconfig = &Utils::File::locate_tool ("ifconfig");
$ret = &Utils::Replace::set_interfaces_option_str ($file, $iface, "up",
"$ifconfig $iface pointopoint $value");
&Utils::Report::leave ();
return $ret;
}
sub get_suse_dev_name
{
my ($iface) = @_;
my ($ifaces, $dev, $hwaddr);
my ($dev);
$dev = &Utils::Parse::get_sh ("/var/run/sysconfig/if-$iface", "interface");
if ($dev eq undef)
{
$dev = &Utils::File::run_backtick ("getcfg-interface $iface");
}
# FIXME: is all this necessary? getcfg-interface should give us what we want
if ($dev eq undef)
{
# Those are the last cases, we make rough guesses
if ($iface =~ /-pcmcia-/)
{
# it's something like wlan-pcmcia-0
$dev =~ s/-pcmcia-//;
}
elsif ($iface =~ /-id-([a-fA-F0-9\:]*)/)
{
# it's something like eth-id-xx:xx:xx:xx:xx:xx, which is the NIC MAC
$hwaddr = $1;
$ifaces = &get_interfaces_info ();
foreach $d (keys %$ifaces)
{
if ($hwaddr eq $$ifaces{$d}{"hwaddr"})
{
$dev = $d;
last;
}
}
}
}
if ($dev eq undef)
{
# We give up, take $iface as $dev
$dev = $iface;
}
return $dev;
}
sub get_suse_auto
{
my ($file, $key) = @_;
my ($ret);
$ret = &Utils::Parse::get_sh ($file, $key);
return 1 if ($ret =~ /^onboot$/i);
return 0;
}
sub set_suse_auto
{
my ($file, $key, $enabled) = @_;
my ($ret);
return &Utils::Replace::set_sh($file, $key,
($enabled) ? "onboot" : "manual");
}
sub get_suse_gateway
{
my ($file, $address, $netmask) = @_;
my ($gateway) = &Utils::Parse::split_first_array_pos ($file, "default", 0, "[ \t]+", "[ \t]+");
return $gateway if &is_ip_in_same_network ($address, $gateway, $netmask);
return undef;
}
# Return IP address or netmask, depending on $what
# FIXME: This function could be used in other places than PLD,
# calculates netmask given format 1.1.1.1/128
sub get_pld_ipaddr
{
my ($file, $key, $what) = @_;
my ($ipaddr, $netmask, $ret, $i);
my @netmask_prefixes = (0, 128, 192, 224, 240, 248, 252, 254, 255);
$ipaddr = &Utils::Parse::get_sh($file, $key);
return undef if $ipaddr eq "";
if($ipaddr =~ /([^\/]*)\/([[:digit:]]*)/)
{
$netmask = $2;
return undef if $netmask eq "";
if($what eq "address")
{
return $1;
}
for($i = 0; $i < int($netmask/8); $i++)
{
$ret .= "255.";
}
$ret .= "$netmask_prefixes[$b%8]." if $netmask < 32;
for($i = int($netmask/8) + 1; $i < 4; $i++)
{
$ret .= "0.";
}
chop($ret);
return $ret;
}
return undef;
}
sub set_pld_ipaddr
{
my ($file, $key, $what, $value) = @_;
my %prefixes =
(
"0" => 0,
"128" => 1,
"192" => 2,
"224" => 3,
"240" => 4,
"248" => 5,
"252" => 6,
"254" => 7,
"255" => 8
);
my ($ipaddr, $netmask);
$ipaddr = &Utils::Parse::get_sh($file, $key);
return undef if $ipaddr eq "";
if($what eq "address")
{
$ipaddr =~ s/.*\//$value\//;
}
else
{
if($value =~ /([[:digit:]]*).([[:digit:]]*).([[:digit:]]*).([[:digit:]]*)/)
{
$netmask = $prefixes{$1} + $prefixes{$2} + $prefixes{$3} + $prefixes{$4};
$ipaddr =~ s/\/[[:digit:]]*/\/$netmask/;
}
}
return &Utils::Replace::set_sh($file, $key, $ipaddr);
}
sub get_gateway
{
my ($file, $key, $address, $netmask) = @_;
my ($gateway);
return undef if ($address eq undef);
$gateway = &Utils::Parse::get_sh ($file, $key);
return $gateway if &is_ip_in_same_network ($address, $gateway, $netmask);
return undef;
}
# looks for eth_up $eth_iface_number
sub get_slackware_auto
{
my ($file, $rclocal, $iface) = @_;
my ($search) = 0;
my ($buff);
if ($iface =~ /^eth/)
{
$buff = &Utils::File::load_buffer ($file);
&Utils::File::join_buffer_lines ($buff);
$iface =~ s/eth//;
foreach $i (@$buff)
{
if ($i =~ /^[ \t]*'start'\)/)
{
$search = 1;
}
elsif (($i =~ /^[ \t]*;;/) && ($search == 1))
{
return 0;
}
elsif (($i =~ /^[ \t]*eth_up (\S+)/) && ($search == 1))
{
return 1 if ($1 == $iface);
}
}
return 0;
}
elsif ($iface =~ /^ppp/)
{
return &Utils::Parse::get_kw ($rclocal, "ppp-go");
}
}
# adds or deletes eth_up $eth_iface_number
sub set_slackware_auto
{
my ($file, $rclocal, $iface, $active) = @_;
my ($search) = 0;
my ($nline) = 0;
my ($buff, $sline);
if ($iface =~ /^eth/)
{
$buff = &Utils::File::load_buffer ($file);
&Utils::File::join_buffer_lines ($buff);
$iface =~ s/eth//;
foreach $i (@$buff)
{
if ($i =~ /^[ \t]*('start'\)|\*\))/)
{
# if the line is 'start') or *), begin the search
$search = 1;
}
elsif (($i =~ /^[ \t]*gateway_up/) && ($search == 1))
{
# save the line in which we're going to save the eth_up stuff
$sline = $nline;
}
elsif (($i =~ /^[ \t]*(;;|esac)/) && ($search == 1))
{
# we've arrived to the end of the case, if we wanted to
# add the iface, now it's the moment
$$buff[$sline] = "\teth_up $iface\n" . $$buff[$sline] if ($active == 1);
$search = 0;
}
elsif (($i =~ /^[ \t]*eth_up (\S+)/) && ($search == 1))
{
if ($1 == $iface)
{
delete $$buff[$nline] if ($active == 0);
$search = 0;
}
}
$nline++;
}
return &Utils::File::save_buffer ($buff, $file);
}
elsif ($iface =~ /^ppp/)
{
return &Utils::Replace::set_kw ($rclocal, "ppp-go", $active);
}
}
sub get_sunos_auto
{
my ($file, $iface) = @_;
return &Utils::File::exists ($file);
}
sub lookup_host
{
my ($file) = @_;
my ($arr, $h);
$arr = &Network::Hosts::get_hosts ();
foreach $h (@$arr)
{
my ($ip, $aliases) = @$h;
my ($alias);
foreach $alias (@$aliases)
{
return $ip if ($alias eq $host)
}
}
}
sub lookup_ip
{
my ($ip) = @_;
my ($hosts);
$hosts = &Utils::Parse::split_hash ("/etc/hosts", "[ \t]+", "[ \t]+");
return @{$$hosts{$ip}}[0] if (exists $$hosts{$ip});
if ($Utils::Backend::tool {"system"} eq "SunOS")
{
$hosts = &Utils::Parse::split_hash ("/etc/inet/ipnodes", "[ \t]+", "[ \t]+");
return @{$$hosts{$ip}}[0] if (exists $$hosts{$ip});
}
}
sub get_sunos_hostname_iface_value
{
my ($file, $re) = @_;
my (@buff, $i);
$buff = &Utils::File::load_buffer ($file);
&Utils::File::join_buffer_lines ($buff);
$i = 0;
while ($$buff[$i])
{
return $1 if ($$buff[$i] =~ "$re");
$i++;
}
}
sub get_sunos_address
{
my ($file, $dev) = @_;
my ($address);
$address = &get_sunos_hostname_iface_value ($file, "^\s*([0-9.]+)\s*");
return $address if ($address);
$address = &get_sunos_hostname_iface_value ($file, "^\s*([0-9a-zA-Z-_]+)\s*");
return &lookup_host ($address);
}
sub set_sunos_address
{
my ($file, $dev, $addr) = @_;
my ($buf, $host);
if (&Utils::File::exists ($file))
{
$buf = &Utils::File::read_joined_lines ($file);
$host = &lookup_ip ($addr);
if ($buf =~ /^(\s*[0-9\.]+)\s+/ ||
$buf =~ /^(\s*[0-9a-zA-Z\-_]+)\s/)
{
$buf =~ s/$1/$addr/;
&Utils::File::save_buffer ($buf, $file);
return;
}
}
# save address from scratch
&Utils::File::save_buffer ($addr, $file);
}
sub get_sunos_netmask
{
my ($file, $dev, $use_dhcp) = @_;
my ($buf);
$buf = &Utils::File::read_joined_lines ($file);
if ($buf =~ /\s+netmask\s+([0-9.]+)\s*/)
{
return $1;
}
return "255.0.0.0" if ($use_dhcp ne "dhcp");
}
sub set_sunos_netmask
{
my ($file, $masks_file, $dev, $addr, $mask) = @_;
my ($buff, $i, $network, $found);
# modify /etc/netmasks
$network = &Utils::Util::ip_calc_network ($addr, $mask);
$buff = &Utils::File::load_buffer ($masks_file);
$found = 0;
$i = 0;
while ($$buff[$i])
{
if ($$buff[$i] =~ /\s*$network\s+.+/)
{
$$buff[$i] = "$network\t$mask";
$found = 1;
}
$i++;
}
push @$buff, "$network\t$mask" if (!$found);
&Utils::File::save_buffer ($buff, $masks_file);
# modify hostname.$dev
$buff = &Utils::File::read_joined_lines ($file);
if ($buff =~ /\s*(netmask [0-9\.]+)/)
{
$buff =~ s/$1/netmask $mask/;
}
else
{
$buff .= " netmask $mask";
}
&Utils::File::save_buffer ($buff, $file);
}
sub get_sunos_gateway
{
my ($file, $dev) = @_;
my ($line);
my $line = &Utils::Parse::get_first_line ($file);
if ($line =~ /^\s*([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)\s*/)
{
return $1;
}
elsif ($buf =~ /^\s*([0-9a-zA-Z-_]+)\s*/)
{
return &lookup_host ($1);
}
}
sub set_sunos_gateway
{
my ($file, $dev, $gateway) = @_;
&Utils::File::save_buffer ("$gateway\n", $file);
}
sub get_sunos_wireless
{
my ($dev, $opt) = @_;
my ($fd, $essid, $key_type);
$fd = &Utils::File::run_pipe_read ("wificonfig -i $dev");
return if (!$fd);
while (<$fd>)
{
if (/$opt:\s+(.*)/)
{
return $1;
}
}
&Utils::File::close_file ($fd);
return;
}
sub set_sunos_wireless
{
my ($dev, $opt, $essid, $value) = @_;
my ($profile);
my $profile = &get_sunos_profile_from_essid ($essid);
if ($opt eq "essid")
{
&Utils::File::run ("wificonfig setprofileparam $profile essid='$value'");
}
elsif ($opt eq "key_type")
{
$value = "wep" if ($value ne "none");
&Utils::File::run ("wificonfig setprofileparam $profile encryption=$value");
}
elsif ($opt eq "key")
{
&Utils::File::run ("wificonfig setprofileparam $profile wepkey1=$value");
&Utils::File::run ("wificonfig setprofileparam $profile wepkeyindex=1");
}
}
sub get_sunos_real_wep_key
{
my ($secret, $profile, $index) = @_;
$index--;
$index = 0 if ($index < 0);
my @wificonfig_profiles = &Utils::Parse::get_ini_sections ($secret);
return undef unless (grep (/^$profile$/, @wificonfig_profiles));
return &Utils::Parse::get_ini ($secret, $profile, "wepkey$index");
}
sub get_sunos_profile_from_essid
{
my ($essid) = @_;
my ($profilename);
$profilename = $essid;
$profilename =~ s/\W/_/g;
$profilename = "gst-default" unless ( $profilename );
return $profilename
}
sub get_sunos_wireless_key
{
my ($secret, $dev) = @_;
my ($essid, $index, $profile);
$essid = &get_sunos_wireless ($dev, "essid");
$index = &get_sunos_wireless ($dev, "wepkeyindex");
$profile = &get_sunos_profile_from_essid ($essid);
return &get_sunos_real_wep_key ($secret, $profile, $index);
}
sub get_freebsd_auto
{
my ($file, $defaults_file, $iface) = @_;
my ($val);
$val = &Utils::Parse::get_sh ($file, "network_interfaces");
$val = &Utils::Parse::get_sh ($defaults_file, "network_interfaces") if ($val eq undef);
return 1 if ($val eq "auto");
return 1 if ($val =~ /$iface/);
return 0;
}
sub set_freebsd_auto
{
my ($file, $iface, $active) = @_;
my ($val);
$val = &Utils::Parse::get_sh ($file, "network_interfaces");
$val = &Utils::File::run_backtick ("ifconfig -l") if ($val =~ /auto/);
$val .= " ";
if ($active && ($val !~ /$iface /))
{
$val .= $iface;
}
elsif (!$active && ($val =~ /$iface /))
{
$val =~ s/$iface //;
}
# Trim the string
$val =~ s/^[ \t]*//;
$val =~ s/[ \t]*$//;
&Utils::Replace::set_sh ($file, "network_interfaces", $val);
}
sub get_freebsd_ppp_persist
{
my ($startif, $iface) = @_;
my ($val);
if ($iface =~ /^tun[0-9]+/)
{
$val = &Utils::Parse::get_startif ($startif, "ppp[ \t]+\-(auto|ddial)[ \t]+");
return 1 if ($val eq "ddial");
return 0;
}
return undef;
}
# we need this function because essid can be
# multiword, and thus it can't be in rc.conf
sub set_freebsd_essid
{
my ($file, $startif, $iface, $essid) = @_;
if ($essid =~ /[ \t]/)
{
# It's multiword
&Utils::File::save_buffer ("ifconfig $iface ssid \"$essid\"", $startif);
&Utils::Replace::set_sh_re ($file, "ifconfig_$iface", "ssid[ \t]+([^ \t]*)", "");
}
else
{
&Utils::Replace::set_sh_re ($file, "ifconfig_$iface", "ssid[ \t]+([^ \t]*)", " ssid $essid");
}
}
sub interface_changed
{
my ($iface, $old_iface) = @_;
my ($key);
foreach $key (keys %$iface)
{
next if ($key eq "enabled");
return 1 if ($$iface{$key} ne $$old_iface{$key});
}
return 0;
}
sub activate_interface_by_dev
{
my ($dev, $enabled) = @_;
&Utils::Report::enter ();
if ($enabled)
{
&Utils::Report::do_report ("network_iface_activate", $dev);
return -1 if &Utils::File::run ("ifup $dev");
}
else
{
&Utils::Report::do_report ("network_iface_deactivate", $dev);
return -1 if &Utils::File::run ("ifdown $dev");
}
&Utils::Report::leave ();
return 0;
}
# This works for all systems that have ifup/ifdown scripts.
sub activate_interface
{
my ($hash, $old_hash, $enabled, $force) = @_;
my ($dev);
if ($force || &interface_changed ($hash, $old_hash))
{
$dev = ($$hash{"file"}) ? $$hash{"file"} : $$hash{"dev"};
&activate_interface_by_dev ($dev, $enabled);
}
}
# FIXME: can this function be mixed with the above?
sub activate_suse_interface
{
my ($hash, $old_hash, $enabled, $force) = @_;
my ($iface, $dev);
if ($force || &interface_changed ($hash, $old_hash))
{
$dev = ($$hash{"file"}) ? &get_suse_dev_name ($$hash{"file"}) : $$hash{"dev"};
&activate_interface_by_dev ($dev, $enabled);
}
}
sub activate_slackware_interface_by_dev
{
my ($dev, $enabled) = @_;
my ($address, $netmask, $gateway);
my ($file) = "/etc/rc.d/rc.inet1.conf";
my ($ret) = 0;
&Utils::Report::enter ();
if ($enabled)
{
&Utils::Report::do_report ("network_iface_activate", $dev);
if ($dev =~ /^ppp/)
{
$ret = &Utils::File::run ("ppp-go");
}
else
{
if (&Utils::Parse::get_rcinet1conf_bool ($file, $dev, USE_DHCP))
{
# Use DHCP
$ret = &Utils::File::run ("dhclient $dev");
}
else
{
$address = &Utils::Parse::get_rcinet1conf ($file, $dev, "IPADDR");
$netmask = &Utils::Parse::get_rcinet1conf ($file, $dev, "NETMASK");
$gateway = &get_gateway ($file, "GATEWAY", $address, $netmask);
$ret = &Utils::File::run ("ifconfig $dev $address netmask $netmask up");
# Add the gateway if necessary
if ($gateway ne undef)
{
&Utils::File::run ("route add default gw $gateway");
}
}
}
}
else
{
&Utils::Report::do_report ("network_iface_deactivate", $dev);
$ret = &Utils::File::run ("ifconfig $dev down") if ($dev =~ /^eth/);
$ret = &Utils::File::run ("ppp-off") if ($dev =~ /^ppp/);
}
&Utils::Report::leave ();
return -1 if ($ret != 0);
return 0;
}
sub activate_slackware_interface
{
my ($hash, $old_hash, $enabled, $force) = @_;
my $dev = $$hash{"file"};
if ($force || &interface_changed ($hash, $old_hash))
{
&activate_slackware_interface_by_dev ($dev, $enabled);
}
}
sub activate_gentoo_interface_by_dev
{
my ($dev, $enabled) = @_;
my $file = "/etc/init.d/net.$dev";
my $action = ($enabled == 1)? "start" : "stop";
return &Utils::File::run ("$file $action");
}
sub activate_gentoo_interface
{
my ($hash, $old_hash, $enabled, $force) = @_;
my $dev = $$hash{"file"};
if ($force || &interface_changed ($hash, $old_hash))
{
&activate_gentoo_interface_by_dev ($dev, $enabled);
}
}
sub activate_freebsd_interface_by_dev
{
my ($hash, $enabled) = @_;
my ($dev) = $$hash{"file"};
my ($startif) = "/etc/start_if.$dev";
my ($file) = "/etc/rc.conf";
my ($command, $dhcp_flags, $defaultroute, $fd);
if ($enabled)
{
# Run the /etc/start_if.$dev commands
$fd = &Utils::File::open_read_from_names ($startif);
while (<$fd>)
{
`$_`;
}
&Utils::File::close_file ($fd);
$command = &Utils::Parse::get_sh ($file, "ifconfig_$dev");
# Bring up the interface
if ($command =~ /DHCP/i)
{
$dhcp_flags = &Utils::Parse::get_sh ($file, "dhcp_flags");
&Utils::File::run ("dhclient $dhcp_flags $dev");
}
else
{
&Utils::File::run ("ifconfig $dev $command");
}
# Add the default route
$default_route = &Utils::Parse::get_sh ($file, "defaultrouter");
&Utils::File::run ("route add default $default_route") if ($default_route !~ /^no$/i);
}
else
{
&Utils::File::run ("ifconfig $dev down");
}
}
sub activate_freebsd_interface
{
my ($hash, $old_hash, $enabled, $force) =@_;
if ($force || &interface_changed ($hash, $old_hash))
{
&activate_freebsd_interface_by_dev ($hash, $enabled);
}
}
sub activate_sunos_interface
{
my ($hash, $old_hash, $enabled, $force) =@_;
my ($dev) = $$hash{"dev"};
if ($force || &interface_changed ($hash, $old_hash))
{
if ($enabled)
{
&Utils::File::run ("svcadm restart svc:/network/physical"); # Restart physical network interfaces
&Utils::File::run ("svcadm restart svc:/network/service"); # Restart name services
}
else
{
#&Utils::File::run ("ifconfig $dev unplumb");
&Utils::File::run ("svcadm restart svc:/network/physical"); # Restart physical network interfaces
&Utils::File::run ("svcadm restart svc:/network/service"); # Restart name services
}
}
}
sub remove_pap_entry
{
my ($file, $login) = @_;
my ($i, $buff);
&Utils::Report::enter ();
&Utils::Report::do_report ("network_remove_pap", $file, $login);
$buff = &Utils::File::load_buffer ($file);
foreach $i (@$buff)
{
$i = "" if ($i =~ /^[ \t]*$login[ \t]/);
}
&Utils::File::clean_buffer ($buff);
&Utils::Report::leave ();
return &Utils::File::save_buffer ($buff, $file);
}
sub delete_rh62_interface
{
my ($old_hash) = @_;
my ($dev, $login);
$dev = $$old_hash{"file"};
$login = $old_hash{"login"};
&activate_interface_by_dev ($dev, 0);
if ($login)
{
&remove_pap_entry ("/etc/ppp/pap-secrets", $login);
&remove_pap_entry ("/etc/ppp/chap-secrets", $login);
}
&Utils::File::remove ("/etc/sysconfig/network-scripts/ifcfg-$dev");
}
sub delete_rh72_interface
{
my ($old_hash) = @_;
my ($filedev, $dev, $login);
$filedev = $$old_hash{"file"};
$dev = $$old_hash{"dev"};
$login = $$old_hash{"login"};
&activate_interface_by_dev ($filedev, 0);
if ($login)
{
&remove_pap_entry ("/etc/ppp/pap-secrets", $login);
&remove_pap_entry ("/etc/ppp/chap-secrets", $login);
}
&Utils::File::remove ("/etc/sysconfig/networking/devices/ifcfg-$filedev");
&Utils::File::remove ("/etc/sysconfig/networking/profiles/default/ifcfg-$filedev");
&Utils::File::remove ("/etc/sysconfig/network-scripts/ifcfg-$dev");
&Utils::File::run ("redhat-config-network-cmd");
}
sub delete_debian_interface
{
my ($old_hash) = @_;
my ($dev, $login);
$dev = $$old_hash{"dev"};
$login = $old_hash{"login"};
&activate_interface_by_dev ($dev, 0);
&Utils::Replace::interfaces_iface_stanza_delete ("/etc/network/interfaces", $dev);
if ($login)
{
&remove_pap_entry ("/etc/ppp/pap-secrets", $login);
&remove_pap_entry ("/etc/ppp/chap-secrets", $login);
}
}
sub delete_suse_interface
{
my ($old_hash) = @_;
my ($file, $provider, $dev);
$file = $$old_hash{"file"};
$dev = &get_suse_dev_name ($file);
$provider = &Utils::Parse::get_sh ("/etc/sysconfig/network/ifcfg-$file", PROVIDER);
activate_interface_by_dev ($dev, 0);
&Utils::File::remove ("/etc/sysconfig/network/ifroute-$file");
&Utils::File::remove ("/etc/sysconfig/network/ifcfg-$file");
&Utils::File::remove ("/etc/sysconfig/network/providers/$provider");
}
sub delete_pld_interface
{
my ($old_hash) = @_;
my ($dev, $login);
my $dev = $$old_hash{"file"};
my $login = $$old_hash{"login"};
&activate_interface_by_dev ($dev, 0);
if ($login)
{
&remove_pap_entry ("/etc/ppp/pap-secrets", $login);
&remove_pap_entry ("/etc/ppp/chap-secrets", $login);
}
&Utils::File::remove ("/etc/sysconfig/interfaces/ifcfg-$dev");
}
sub delete_slackware_interface
{
my ($old_hash) = @_;
my ($rcinetconf, $rcinet, $rclocal, $pppscript, $dev);
$rcinetconf = "/etc/rc.d/rc.inet1.conf";
$rcinet = "/etc/rc.d/rc.inet1";
$rclocal = "/etc/rc.d/rc.local";
$pppscript = "/etc/ppp/pppscript";
$dev = $$old_hash {"dev"};
# remove ifup/ppp-go at startup if existing
&set_slackware_auto ($rcinet, $rclocal, $dev, 0);
if ($dev =~ /^ppp/)
{
&Utils::File::remove ($pppscript);
}
else
{
# empty the values
&Utils::Replace::set_rcinet1conf ($rcinetconf, $dev, "IPADDR", "");
&Utils::Replace::set_rcinet1conf ($rcinetconf, $dev, "NETMASK", "");
&Utils::Replace::set_rcinet1conf ($rcinetconf, $dev, "USE_DHCP", "");
&Utils::Replace::set_rcinet1conf ($rcinetconf, $dev, "DHCP_HOSTNAME", "");
}
}
sub delete_gentoo_interface
{
my ($old_hash) = @_;
my ($dev, $gateway);
$dev = $$old_hash {"dev"};
$gateway = $$old_hash {"gateway"};
# bring down the interface and remove from init
&Init::Services::set_gentoo_service_status ("/etc/init.d/net.$dev", "default", "stop");
if ($dev =~ /^ppp/)
{
&Utils::File::remove ("/etc/conf.d/net.$dev");
}
else
{
&Utils::Replace::set_sh ("/etc/conf.d/net", "config_$dev", "");
}
}
sub delete_freebsd_interface
{
my ($old_hash) = @_;
my ($dev, $startif, $pppconf);
my ($buff, $line_no, $end_line_no, $i);
$dev = $$old_hash{"dev"};
$startif = "/etc/start_if.$dev";
$pppconf = "/etc/ppp/ppp.conf";
&Utils::File::run ("ifconfig $dev down");
if ($dev =~ /^tun[0-9]+/)
{
# Delete the ppp.conf section
$section = &Utils::Parse::get_startif ($startif, "ppp[ \t]+\-[^ \t]+[ \t]+([^ \t]+)");
$buff = &Utils::File::load_buffer ($pppconf);
$line_no = &Utils::Parse::pppconf_find_stanza ($buff, $section);
$end_line_no = &Utils::Parse::pppconf_find_next_stanza ($buff, $line_no + 1);
$end_line_no = scalar @$buff + 1 if ($end_line_no == -1);
$end_line_no--;
for ($i = $line_no; $i <= $end_line_no; $i++)
{
delete $$buff[$i];
}
&Utils::File::clean_buffer ($buff);
&Utils::File::save_buffer ($buff, $pppconf);
}
&Utils::Replace::set_sh ("/etc/rc.conf", "ifconfig_$dev", "");
&Utils::File::remove ($startif);
}
sub delete_sunos_interface
{
my ($old_hash) = @_;
my ($dev);
$dev = $$old_hash{"dev"};
&Utils::File::remove ("/etc/hostname.$dev");
&Utils::File::remove ("/etc/dhcp.$dev");
}
# FIXME: should move to external file!!!
sub create_pppscript
{
my ($pppscript) = @_;
my ($contents);
if (!&Utils::File::exists ($pppscript))
{
# create a template file from scratch
$contents = 'TIMEOUT 60' . "\n";
$contents .= 'ABORT ERROR' . "\n";
$contents .= 'ABORT BUSY' . "\n";
$contents .= 'ABORT VOICE' . "\n";
$contents .= 'ABORT "NO CARRIER"' . "\n";
$contents .= 'ABORT "NO DIALTONE"' . "\n";
$contents .= 'ABORT "NO DIAL TONE"' . "\n";
$contents .= 'ABORT "NO ANSWER"' . "\n";
$contents .= '"" "ATZ"' . "\n";
$contents .= '"" "AT&FH0"' . "\n";
$contents .= 'OK-AT-OK "ATDT000000000"' . "\n";
$contents .= 'TIMEOUT 75' . "\n";
$contents .= 'CONNECT' . "\n";
&Utils::File::save_buffer ($contents, $pppscript);
}
}
#FIXME: should move to external file!!!
sub create_pppgo
{
my ($pppgo) = "/usr/sbin/ppp-go";
my ($contents, $pppd, $chat);
local *FILE;
if (!&Utils::File::exists ($pppgo))
{
$pppd = &Utils::File::locate_tool ("pppd");
$chat = &Utils::File::locate_tool ("chat");
# create a simple ppp-go from scratch
# this script is based on the one that's created by pppsetup
$contents = "killall -INT pppd 2>/dev/null \n";
$contents .= "rm -f /var/lock/LCK* /var/run/ppp*.pid \n";
$contents .= "( $pppd connect \"$chat -v -f /etc/ppp/pppscript\") || exit 1 \n";
$contents .= "exit 0 \n";
&Utils::File::save_buffer ($contents, $pppgo);
chmod 0777, "$gst_prefix/$pppgo";
}
}
# FIXME: should move to external file!!!
sub create_gentoo_files
{
my ($dev) = @_;
my ($init) = "/etc/init.d/net.$dev";
my ($conf) = "/etc/conf.d/net.$dev";
my ($backup) = "/etc/conf.d/net.ppp0.gstbackup";
if ($dev =~ /ppp/)
{
&Utils::File::copy_file ("/etc/init.d/net.ppp0", $init) if (!&Utils::File::exists ($init));
# backup the ppp config file
&Utils::File::copy_file ("/etc/conf.d/net.ppp0", $backup) if (!&Utils::File::exists ($backup));
&Utils::File::copy_file ($backup, $conf) if (!&Utils::File::exists ($conf));
}
else
{
&Utils::File::copy_file ("/etc/init.d/net.eth0", $init) if (!&Utils::File::exists ($init));
}
chmod 0755, "$gst_prefix/$init";
}
# FIXME: should move to external file!!!
sub create_ppp_startif
{
my ($startif, $iface, $dev, $persist) = @_;
my ($section);
if ($dev =~ /^tun[0-9]+/)
{
$section = &Utils::Parse::get_startif ($startif, "ppp[ \t]+\-[^ \t]+[ \t]+([^ \t]+)");
$section = $dev if ($section eq undef);
return &Utils::File::save_buffer ("ppp -ddial $section", $startif) if ($persist eq 1);
return &Utils::File::save_buffer ("ppp -auto $section", $startif);
}
}
sub create_isdn_options
{
my ($file) = @_;
if (!&Utils::File::exists ($file))
{
&Utils::File::copy_file_from_stock ("general_isdn_ppp_options", $file);
}
}
sub set_modem_volume_sh
{
my ($file, $key, $volume) = @_;
my ($vol);
if ($volume == 0) { $vol = "ATM0" }
elsif ($volume == 1) { $vol = "ATL1" }
elsif ($volume == 2) { $vol = "ATL2" }
else { $vol = "ATL3" }
return &Utils::Replace::set_sh ($file, $key, $vol);
}
sub set_modem_volume
{
my ($file, $volume) = @_;
my $line;
$line = &Utils::Parse::get_from_chatfile ($file, "AT([^DZ][a-z0-9&]+)");
$line =~ s/(M0|L[1-3])//g;
if ($volume == 0) { $line .= "M0"; }
elsif ($volume == 1) { $line .= "L1"; }
elsif ($volume == 2) { $line .= "L2"; }
else { $line .= "L3"; }
return &Utils::Replace::set_chat ($file, "AT([^DZ][a-z0-9&]+)", $line);
}
sub set_pppconf_route
{
my ($pppconf, $startif, $iface, $key, $val) = @_;
my ($section);
if ($iface =~ /^tun[0-9]+/)
{
$section = &Utils::Parse::get_startif ($startif, "ppp[ \t]+\-[^ \t]+[ \t]+([^ \t]+)");
&Utils::Replace::set_pppconf_common ($pppconf, $section, $key,
($val == 1)? "add default HISADDR" : undef);
}
}
sub set_pppconf_dial_command
{
my ($pppconf, $startif, $iface, $val) = @_;
my ($section, $dial);
if ($iface =~ /^tun[0-9]+/)
{
$section = &Utils::Parse::get_startif ($startif, "ppp[ \t]+\-[^ \t]+[ \t]+([^ \t]+)");
$dial = &Utils::Parse::get_pppconf ($pppconf, $section, "dial");
$dial =~ s/ATD[TP]/$val/;
&Utils::Replace::set_pppconf ($pppconf, $section, "dial", $dial);
}
}
sub set_pppconf_volume
{
my ($pppconf, $startif, $iface, $val) = @_;
my ($section, $dial, $vol, $pre, $post);
if ($iface =~ /^tun[0-9]+/)
{
$section = &Utils::Parse::get_startif ($startif, "ppp[ \t]+\-[^ \t]+[ \t]+([^ \t]+)");
$dial = &Utils::Parse::get_pppconf ($pppconf, $section, "dial");
if ($dial =~ /(.*AT[^ \t]*)([ML][0-3])(.* OK .*)/i)
{
$pre = $1;
$post = $3;
}
elsif ($dial =~ /(.*AT[^ \t]*)( OK .*)/i)
{
$pre = $1;
$post = $2;
}
if ($val == 0)
{
$vol = "M0";
}
else
{
$vol = "L$val";
}
$dial = $pre . $vol . $post;
&Utils::Replace::set_pppconf ($pppconf, $section, "dial", $dial);
}
}
sub get_interface_dist
{
my %dist_map =
(
"redhat-6.2" => "redhat-6.2",
"redhat-7.0" => "redhat-6.2",
"redhat-7.1" => "redhat-6.2",
"redhat-7.2" => "redhat-7.2",
"redhat-8.0" => "redhat-8.0",
"mandrake-9.0" => "mandrake-9.0",
"yoper-2.2" => "redhat-6.2",
"conectiva-9" => "conectiva-9",
"debian-3.0" => "debian-3.0",
"ubuntu-7.04" => "debian-3.0",
"suse-9.0" => "suse-9.0",
"pld-1.0" => "pld-1.0",
"vine-3.0" => "vine-3.0",
"ark" => "vine-3.0",
"slackware-9.1.0" => "slackware-9.1.0",
"gentoo" => "gentoo",
"freebsd-5" => "freebsd-5",
"solaris-2.11" => "solaris-2.11",
);
return $dist_map{$Utils::Backend::tool{"platform"}};
}
sub get_interface_parse_table
{
my %dist_tables =
(
"redhat-6.2" =>
{
ifaces_get => \&get_existing_rh62_ifaces,
fn =>
{
IFCFG => "/etc/sysconfig/network-scripts/ifcfg-#iface#",
CHAT => "/etc/sysconfig/network-scripts/chat-#iface#",
IFACE => "#iface#",
TYPE => "#type#",
PAP => "/etc/ppp/pap-secrets",
CHAP => "/etc/ppp/chap-secrets",
PUMP => "/etc/pump.conf",
WVDIAL => "/etc/wvdial.conf"
},
table =>
[
[ "bootproto", \&get_rh_bootproto, IFCFG, BOOTPROTO ],
[ "auto", \&Utils::Parse::get_sh_bool, IFCFG, ONBOOT ],
[ "dev", \&Utils::Parse::get_sh, IFCFG, DEVICE ],
[ "address", \&Utils::Parse::get_sh, IFCFG, IPADDR ],
[ "netmask", \&Utils::Parse::get_sh, IFCFG, NETMASK ],
[ "broadcast", \&Utils::Parse::get_sh, IFCFG, BROADCAST ],
[ "network", \&Utils::Parse::get_sh, IFCFG, NETWORK ],
[ "gateway", \&Utils::Parse::get_sh, IFCFG, GATEWAY ],
[ "remote_address", \&Utils::Parse::get_sh, IFCFG, REMIP ],
[ "section", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh, IFCFG, WVDIALSECT ]],
[ "update_dns", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh_bool, IFCFG, PEERDNS ]],
[ "mtu", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh, IFCFG, MTU ]],
[ "mru", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh, IFCFG, MRU ]],
[ "login", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh, IFCFG, PAPNAME ]],
[ "password", \&check_type, [TYPE, "modem", \&get_pap_passwd, PAP, "%login%" ]],
[ "password", \&check_type, [TYPE, "modem", \&get_pap_passwd, CHAP, "%login%" ]],
[ "serial_port", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh, IFCFG, MODEMPORT ]],
[ "serial_speed", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh, IFCFG, LINESPEED ]],
[ "set_default_gw", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh_bool, IFCFG, DEFROUTE ]],
[ "persist", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh_bool, IFCFG, PERSIST ]],
[ "serial_escapechars", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh_bool, IFCFG, ESCAPECHARS ]],
[ "serial_hwctl", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh_bool, IFCFG, HARDFLOWCTL ]],
[ "phone_number", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_chatfile, CHAT, "^atd[^0-9]*([#\*0-9, \-]+)" ]],
[ "phone_number", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_ini, WVDIAL, "Dialer %section%", "Phone" ]],
[ "update_dns", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_ini, WVDIAL, "Dialer %section%", "Auto DNS" ]],
[ "login", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_ini, WVDIAL, "Dialer %section%", "Username" ]],
[ "password", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_ini, WVDIAL, "Dialer %section%", "Password" ]],
[ "serial_port", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_ini, WVDIAL, "Dialer %section%", "Modem" ]],
[ "serial_speed", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_ini, WVDIAL, "Dialer %section%", "Baud" ]],
[ "set_default_gw", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_ini, WVDIAL, "Dialer %section%", "Check Def Route" ]],
[ "persist", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_ini, WVDIAL, "Dialer %section%", "Auto Reconnect" ]],
[ "dial_command", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_ini, WVDIAL, "Dialer %section%", "Dial Command" ]],
[ "external_line", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_ini, WVDIAL, "Dialer %section%", "Dial Prefix" ]],
# [ "update_dns", \&gst_network_pump_get_nodns, PUMP, "%dev%", "%bootproto%" ],
# [ "dns1", \&Utils::Parse::get_sh, IFCFG, DNS1 ],
# [ "dns2", \&Utils::Parse::get_sh, IFCFG, DNS2 ],
# [ "ppp_options", \&Utils::Parse::get_sh, IFCFG, PPPOPTIONS ],
]
},
"redhat-7.2" =>
{
fn =>
{
IFCFG => ["/etc/sysconfig/networking/profiles/default/ifcfg-#iface#",
"/etc/sysconfig/networking/devices/ifcfg-#iface#",
"/etc/sysconfig/network-scripts/ifcfg-#iface#"],
CHAT => "/etc/sysconfig/network-scripts/chat-#iface#",
IFACE => "#iface#",
TYPE => "#type#",
PAP => "/etc/ppp/pap-secrets",
CHAP => "/etc/ppp/chap-secrets",
PUMP => "/etc/pump.conf",
WVDIAL => "/etc/wvdial.conf"
},
table =>
[
[ "bootproto", \&get_rh_bootproto, IFCFG, BOOTPROTO ],
[ "auto", \&Utils::Parse::get_sh_bool, IFCFG, ONBOOT ],
[ "dev", \&Utils::Parse::get_sh, IFCFG, DEVICE ],
[ "address", \&Utils::Parse::get_sh, IFCFG, IPADDR ],
[ "netmask", \&Utils::Parse::get_sh, IFCFG, NETMASK ],
[ "broadcast", \&Utils::Parse::get_sh, IFCFG, BROADCAST ],
[ "network", \&Utils::Parse::get_sh, IFCFG, NETWORK ],
[ "gateway", \&Utils::Parse::get_sh, IFCFG, GATEWAY ],
[ "essid", \&Utils::Parse::get_sh, IFCFG, ESSID ],
[ "key_type", \&get_wep_key_type, [ \&Utils::Parse::get_sh, IFCFG, KEY ]],
[ "key", \&get_wep_key, [ \&Utils::Parse::get_sh, IFCFG, KEY ]],
[ "remote_address", \&Utils::Parse::get_sh, IFCFG, REMIP ],
[ "section", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh, IFCFG, WVDIALSECT ]],
[ "update_dns", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh_bool, IFCFG, PEERDNS ]],
[ "mtu", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh, IFCFG, MTU ]],
[ "mru", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh, IFCFG, MRU ]],
[ "login", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh, IFCFG, PAPNAME ]],
[ "password", \&check_type, [TYPE, "modem", \&get_pap_passwd, PAP, "%login%" ]],
[ "password", \&check_type, [TYPE, "modem", \&get_pap_passwd, CHAP, "%login%" ]],
[ "serial_port", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh, IFCFG, MODEMPORT ]],
[ "serial_speed", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh, IFCFG, LINESPEED ]],
[ "set_default_gw", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh_bool, IFCFG, DEFROUTE ]],
[ "persist", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh_bool, IFCFG, PERSIST ]],
[ "serial_escapechars", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh_bool, IFCFG, ESCAPECHARS ]],
[ "serial_hwctl", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh_bool, IFCFG, HARDFLOWCTL ]],
[ "phone_number", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_chatfile, CHAT, "^atd[^0-9]*([#\*0-9, \-]+)" ]],
# [ "name", \&Utils::Parse::get_sh, IFCFG, NAME ],
# [ "name", \&Utils::Parse::get_trivial, IFACE ],
# [ "update_dns", \&gst_network_pump_get_nodns, PUMP, "%dev%", "%bootproto%" ],
# [ "dns1", \&Utils::Parse::get_sh, IFCFG, DNS1 ],
# [ "dns2", \&Utils::Parse::get_sh, IFCFG, DNS2 ],
# [ "ppp_options", \&Utils::Parse::get_sh, IFCFG, PPPOPTIONS ],
# [ "debug", \&Utils::Parse::get_sh_bool, IFCFG, DEBUG ],
# wvdial settings
[ "phone_number", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_ini, WVDIAL, "Dialer %section%", "Phone" ]],
[ "update_dns", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_ini, WVDIAL, "Dialer %section%", "Auto DNS" ]],
[ "login", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_ini, WVDIAL, "Dialer %section%", "Username" ]],
[ "password", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_ini, WVDIAL, "Dialer %section%", "Password" ]],
[ "serial_port", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_ini, WVDIAL, "Dialer %section%", "Modem" ]],
[ "serial_speed", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_ini, WVDIAL, "Dialer %section%", "Baud" ]],
[ "set_default_gw", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_ini, WVDIAL, "Dialer %section%", "Check Def Route" ]],
[ "persist", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_ini, WVDIAL, "Dialer %section%", "Auto Reconnect" ]],
[ "dial_command", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_ini, WVDIAL, "Dialer %section%", "Dial Command" ]],
[ "external_line", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_ini, WVDIAL, "Dialer %section%", "Dial Prefix" ]],
]
},
"redhat-8.0" =>
{
ifaces_get => \&get_existing_rh72_ifaces,
fn =>
{
IFCFG => ["/etc/sysconfig/networking/profiles/default/ifcfg-#iface#",
"/etc/sysconfig/networking/devices/ifcfg-#iface#",
"/etc/sysconfig/network-scripts/ifcfg-#iface#"],
CHAT => "/etc/sysconfig/network-scripts/chat-#iface#",
TYPE => "#type#",
IFACE => "#iface#",
PAP => "/etc/ppp/pap-secrets",
CHAP => "/etc/ppp/chap-secrets",
PUMP => "/etc/pump.conf",
WVDIAL => "/etc/wvdial.conf"
},
table =>
[
[ "bootproto", \&get_rh_bootproto, IFCFG, BOOTPROTO ],
[ "auto", \&Utils::Parse::get_sh_bool, IFCFG, ONBOOT ],
[ "dev", \&Utils::Parse::get_sh, IFCFG, DEVICE ],
[ "address", \&Utils::Parse::get_sh, IFCFG, IPADDR ],
[ "netmask", \&Utils::Parse::get_sh, IFCFG, NETMASK ],
[ "broadcast", \&Utils::Parse::get_sh, IFCFG, BROADCAST ],
[ "network", \&Utils::Parse::get_sh, IFCFG, NETWORK ],
[ "gateway", \&Utils::Parse::get_sh, IFCFG, GATEWAY ],
[ "essid", \&Utils::Parse::get_sh, IFCFG, WIRELESS_ESSID ],
[ "key_type", \&get_wep_key_type, [ \&Utils::Parse::get_sh, IFCFG, WIRELESS_KEY ]],
[ "key", \&get_wep_key, [ \&Utils::Parse::get_sh, IFCFG, WIRELESS_KEY ]],
[ "remote_address", \&Utils::Parse::get_sh, IFCFG, REMIP ],
[ "section", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh, IFCFG, WVDIALSECT ]],
[ "update_dns", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh_bool, IFCFG, PEERDNS ]],
[ "mtu", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh, IFCFG, MTU ]],
[ "mru", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh, IFCFG, MRU ]],
[ "login", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh, IFCFG, PAPNAME ]],
[ "password", \&check_type, [TYPE, "modem", \&get_pap_passwd, PAP, "%login%" ]],
[ "password", \&check_type, [TYPE, "modem", \&get_pap_passwd, CHAP, "%login%" ]],
[ "serial_port", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh, IFCFG, MODEMPORT ]],
[ "serial_speed", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh, IFCFG, LINESPEED ]],
[ "set_default_gw", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh_bool, IFCFG, DEFROUTE ]],
[ "persist", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh_bool, IFCFG, PERSIST ]],
[ "serial_escapechars", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh_bool, IFCFG, ESCAPECHARS ]],
[ "serial_hwctl", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh_bool, IFCFG, HARDFLOWCTL ]],
[ "phone_number", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_chatfile, CHAT, "^atd[^0-9]*([#\*0-9, \-]+)" ]],
# [ "name", \&Utils::Parse::get_sh, IFCFG, NAME ],
# [ "name", \&Utils::Parse::get_trivial, IFACE ],
# [ "update_dns", \&gst_network_pump_get_nodns, PUMP, "%dev%", "%bootproto%" ],
# [ "dns1", \&Utils::Parse::get_sh, IFCFG, DNS1 ],
# [ "dns2", \&Utils::Parse::get_sh, IFCFG, DNS2 ],
# [ "ppp_options", \&Utils::Parse::get_sh, IFCFG, PPPOPTIONS ],
# [ "debug", \&Utils::Parse::get_sh_bool, IFCFG, DEBUG ],
# wvdial settings
[ "phone_number", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_ini, WVDIAL, "Dialer %section%", "Phone" ]],
[ "update_dns", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_ini, WVDIAL, "Dialer %section%", "Auto DNS" ]],
[ "login", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_ini, WVDIAL, "Dialer %section%", "Username" ]],
[ "password", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_ini, WVDIAL, "Dialer %section%", "Password" ]],
[ "serial_port", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_ini, WVDIAL, "Dialer %section%", "Modem" ]],
[ "serial_speed", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_ini, WVDIAL, "Dialer %section%", "Baud" ]],
[ "set_default_gw", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_ini, WVDIAL, "Dialer %section%", "Check Def Route" ]],
[ "persist", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_ini, WVDIAL, "Dialer %section%", "Auto Reconnect" ]],
[ "dial_command", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_ini, WVDIAL, "Dialer %section%", "Dial Command" ]],
[ "external_line", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_ini, WVDIAL, "Dialer %section%", "Dial Prefix" ]],
]
},
"vine-3.0" =>
{
ifaces_get => \&get_existing_rh62_ifaces,
fn =>
{
IFCFG => "/etc/sysconfig/network-scripts/ifcfg-#iface#",
CHAT => "/etc/sysconfig/network-scripts/chat-#iface#",
TYPE => "#type#",
IFACE => "#iface#",
PAP => "/etc/ppp/pap-secrets",
CHAP => "/etc/ppp/chap-secrets",
PUMP => "/etc/pump.conf",
WVDIAL => "/etc/wvdial.conf"
},
table =>
[
[ "bootproto", \&get_rh_bootproto, IFCFG, BOOTPROTO ],
[ "auto", \&Utils::Parse::get_sh_bool, IFCFG, ONBOOT ],
[ "dev", \&Utils::Parse::get_sh, IFCFG, DEVICE ],
[ "address", \&Utils::Parse::get_sh, IFCFG, IPADDR ],
[ "netmask", \&Utils::Parse::get_sh, IFCFG, NETMASK ],
[ "broadcast", \&Utils::Parse::get_sh, IFCFG, BROADCAST ],
[ "network", \&Utils::Parse::get_sh, IFCFG, NETWORK ],
[ "gateway", \&Utils::Parse::get_sh, IFCFG, GATEWAY ],
[ "essid", \&Utils::Parse::get_sh, IFCFG, ESSID ],
[ "key_type", \&get_wep_key_type, [ \&Utils::Parse::get_sh, IFCFG, KEY ]],
[ "key", \&get_wep_key, [ \&Utils::Parse::get_sh, IFCFG, KEY ]],
[ "remote_address", \&Utils::Parse::get_sh, IFCFG, REMIP ],
[ "section", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh, IFCFG, WVDIALSECT ]],
[ "update_dns", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh_bool, IFCFG, PEERDNS ]],
[ "mtu", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh, IFCFG, MTU ]],
[ "mru", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh, IFCFG, MRU ]],
[ "login", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh, IFCFG, PAPNAME ]],
[ "password", \&check_type, [TYPE, "modem", \&get_pap_passwd, PAP, "%login%" ]],
[ "password", \&check_type, [TYPE, "modem", \&get_pap_passwd, CHAP, "%login%" ]],
[ "serial_port", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh, IFCFG, MODEMPORT ]],
[ "serial_speed", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh, IFCFG, LINESPEED ]],
[ "set_default_gw", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh_bool, IFCFG, DEFROUTE ]],
[ "persist", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh_bool, IFCFG, PERSIST ]],
[ "serial_escapechars", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh_bool, IFCFG, ESCAPECHARS ]],
[ "serial_hwctl", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh_bool, IFCFG, HARDFLOWCTL ]],
[ "phone_number", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_chatfile, CHAT, "^atd[^0-9]*([#\*0-9, \-]+)" ]],
# [ "name", \&Utils::Parse::get_sh, IFCFG, NAME ],
# [ "update_dns", \&gst_network_pump_get_nodns, PUMP, "%dev%", "%bootproto%" ],
# [ "dns1", \&Utils::Parse::get_sh, IFCFG, DNS1 ],
# [ "dns2", \&Utils::Parse::get_sh, IFCFG, DNS2 ],
# [ "ppp_options", \&Utils::Parse::get_sh, IFCFG, PPPOPTIONS ],
# [ "debug", \&Utils::Parse::get_sh_bool, IFCFG, DEBUG ],
# wvdial settings
[ "phone_number", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_ini, WVDIAL, "Dialer %section%", "Phone" ]],
[ "update_dns", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_ini, WVDIAL, "Dialer %section%", "Auto DNS" ]],
[ "login", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_ini, WVDIAL, "Dialer %section%", "Username" ]],
[ "password", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_ini, WVDIAL, "Dialer %section%", "Password" ]],
[ "serial_port", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_ini, WVDIAL, "Dialer %section%", "Modem" ]],
[ "serial_speed", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_ini, WVDIAL, "Dialer %section%", "Baud" ]],
[ "set_default_gw", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_ini, WVDIAL, "Dialer %section%", "Check Def Route" ]],
[ "persist", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_ini, WVDIAL, "Dialer %section%", "Auto Reconnect" ]],
[ "dial_command", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_ini, WVDIAL, "Dialer %section%", "Dial Command" ]],
[ "external_line", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_ini, WVDIAL, "Dialer %section%", "Dial Prefix" ]],
]
},
"mandrake-9.0" =>
{
ifaces_get => \&get_existing_rh62_ifaces,
fn =>
{
IFCFG => "/etc/sysconfig/network-scripts/ifcfg-#iface#",
CHAT => "/etc/sysconfig/network-scripts/chat-#iface#",
TYPE => "#type#",
IFACE => "#iface#",
PAP => "/etc/ppp/pap-secrets",
CHAP => "/etc/ppp/chap-secrets",
PUMP => "/etc/pump.conf",
WVDIAL => "/etc/wvdial.conf"
},
table =>
[
[ "bootproto", \&get_rh_bootproto, IFCFG, BOOTPROTO ],
[ "auto", \&Utils::Parse::get_sh_bool, IFCFG, ONBOOT ],
[ "dev", \&Utils::Parse::get_sh, IFCFG, DEVICE ],
[ "address", \&Utils::Parse::get_sh, IFCFG, IPADDR ],
[ "netmask", \&Utils::Parse::get_sh, IFCFG, NETMASK ],
[ "broadcast", \&Utils::Parse::get_sh, IFCFG, BROADCAST ],
[ "network", \&Utils::Parse::get_sh, IFCFG, NETWORK ],
[ "gateway", \&Utils::Parse::get_sh, IFCFG, GATEWAY ],
[ "essid", \&Utils::Parse::get_sh, IFCFG, WIRELESS_ESSID ],
[ "key_type", \&get_wep_key_type, [ \&Utils::Parse::get_sh, IFCFG, WIRELESS_KEY ]],
[ "key", \&get_wep_key, [ \&Utils::Parse::get_sh, IFCFG, WIRELESS_KEY ]],
[ "remote_address", \&Utils::Parse::get_sh, IFCFG, REMIP ],
[ "section", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh, IFCFG, WVDIALSECT ]],
[ "update_dns", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh_bool, IFCFG, PEERDNS ]],
[ "mtu", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh, IFCFG, MTU ]],
[ "mru", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh, IFCFG, MRU ]],
[ "login", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh, IFCFG, PAPNAME ]],
[ "password", \&check_type, [TYPE, "modem", \&get_pap_passwd, PAP, "%login%" ]],
[ "password", \&check_type, [TYPE, "modem", \&get_pap_passwd, CHAP, "%login%" ]],
[ "serial_port", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh, IFCFG, MODEMPORT ]],
[ "serial_speed", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh, IFCFG, LINESPEED ]],
[ "set_default_gw", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh_bool, IFCFG, DEFROUTE ]],
[ "persist", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh_bool, IFCFG, PERSIST ]],
[ "serial_escapechars", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh_bool, IFCFG, ESCAPECHARS ]],
[ "serial_hwctl", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh_bool, IFCFG, HARDFLOWCTL ]],
[ "phone_number", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_chatfile, CHAT, "^atd[^0-9]*([#\*0-9, \-]+)" ]],
# [ "name", \&Utils::Parse::get_sh, IFCFG, NAME ],
# [ "update_dns", \&gst_network_pump_get_nodns, PUMP, "%dev%", "%bootproto%" ],
# [ "dns1", \&Utils::Parse::get_sh, IFCFG, DNS1 ],
# [ "dns2", \&Utils::Parse::get_sh, IFCFG, DNS2 ],
# [ "ppp_options", \&Utils::Parse::get_sh, IFCFG, PPPOPTIONS ],
# [ "debug", \&Utils::Parse::get_sh_bool, IFCFG, DEBUG ],
# wvdial settings
[ "phone_number", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_ini, WVDIAL, "Dialer %section%", "Phone" ]],
[ "update_dns", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_ini, WVDIAL, "Dialer %section%", "Auto DNS" ]],
[ "login", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_ini, WVDIAL, "Dialer %section%", "Username" ]],
[ "password", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_ini, WVDIAL, "Dialer %section%", "Password" ]],
[ "serial_port", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_ini, WVDIAL, "Dialer %section%", "Modem" ]],
[ "serial_speed", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_ini, WVDIAL, "Dialer %section%", "Baud" ]],
[ "set_default_gw", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_ini, WVDIAL, "Dialer %section%", "Check Def Route" ]],
[ "persist", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_ini, WVDIAL, "Dialer %section%", "Auto Reconnect" ]],
[ "dial_command", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_ini, WVDIAL, "Dialer %section%", "Dial Command" ]],
[ "external_line", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_ini, WVDIAL, "Dialer %section%", "Dial Prefix" ]],
]
},
"conectiva-9" =>
{
ifaces_get => \&get_existing_rh62_ifaces,
fn =>
{
IFCFG => "/etc/sysconfig/network-scripts/ifcfg-#iface#",
CHAT => "/etc/sysconfig/network-scripts/chat-#iface#",
TYPE => "#type#",
IFACE => "#iface#",
PAP => "/etc/ppp/pap-secrets",
CHAP => "/etc/ppp/chap-secrets",
PUMP => "/etc/pump.conf",
WVDIAL => "/etc/wvdial.conf"
},
table =>
[
[ "bootproto", \&get_rh_bootproto, IFCFG, BOOTPROTO ],
[ "auto", \&Utils::Parse::get_sh_bool, IFCFG, ONBOOT ],
[ "dev", \&Utils::Parse::get_sh, IFCFG, DEVICE ],
[ "address", \&Utils::Parse::get_sh, IFCFG, IPADDR ],
[ "netmask", \&Utils::Parse::get_sh, IFCFG, NETMASK ],
[ "broadcast", \&Utils::Parse::get_sh, IFCFG, BROADCAST ],
[ "network", \&Utils::Parse::get_sh, IFCFG, NETWORK ],
[ "gateway", \&Utils::Parse::get_sh, IFCFG, GATEWAY ],
[ "essid", \&Utils::Parse::get_sh, IFCFG, WIRELESS_ESSID ],
[ "key_type", \&get_wep_key_type, [ \&Utils::Parse::get_sh, IFCFG, WIRELESS_KEY ]],
[ "key", \&get_wep_key, [ \&Utils::Parse::get_sh, IFCFG, WIRELESS_KEY ]],
[ "remote_address", \&Utils::Parse::get_sh, IFCFG, REMIP ],
[ "section", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh, IFCFG, WVDIALSECT ]],
[ "update_dns", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh_bool, IFCFG, PEERDNS ]],
[ "mtu", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh, IFCFG, MTU ]],
[ "mru", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh, IFCFG, MRU ]],
[ "login", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh, IFCFG, PAPNAME ]],
[ "password", \&check_type, [TYPE, "modem", \&get_pap_passwd, PAP, "%login%" ]],
[ "password", \&check_type, [TYPE, "modem", \&get_pap_passwd, CHAP, "%login%" ]],
[ "serial_port", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh, IFCFG, MODEMPORT ]],
[ "serial_speed", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh, IFCFG, LINESPEED ]],
[ "ppp_options", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh, IFCFG, PPPOPTIONS ]],
[ "set_default_gw", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh_bool, IFCFG, DEFROUTE ]],
[ "persist", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh_bool, IFCFG, PERSIST ]],
[ "serial_escapechars", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh_bool, IFCFG, ESCAPECHARS ]],
[ "serial_hwctl", \&check_type, [TYPE, "modem", \&Utils::Parse::get_sh_bool, IFCFG, HARDFLOWCTL ]],
[ "phone_number", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_chatfile, CHAT, "^atd[^0-9]*([#\*0-9, \-]+)" ]],
# [ "name", \&Utils::Parse::get_sh, IFCFG, NAME ],
# [ "update_dns", \&gst_network_pump_get_nodns, PUMP, "%dev%", "%bootproto%" ],
# [ "dns1", \&Utils::Parse::get_sh, IFCFG, DNS1 ],
# [ "dns2", \&Utils::Parse::get_sh, IFCFG, DNS2 ],
# [ "debug", \&Utils::Parse::get_sh_bool, IFCFG, DEBUG ],
# wvdial settings
[ "phone_number", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_ini, WVDIAL, "Dialer %section%", "Phone" ]],
[ "update_dns", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_ini, WVDIAL, "Dialer %section%", "Auto DNS" ]],
[ "login", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_ini, WVDIAL, "Dialer %section%", "Username" ]],
[ "password", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_ini, WVDIAL, "Dialer %section%", "Password" ]],
[ "serial_port", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_ini, WVDIAL, "Dialer %section%", "Modem" ]],
[ "serial_speed", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_ini, WVDIAL, "Dialer %section%", "Baud" ]],
[ "set_default_gw", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_ini, WVDIAL, "Dialer %section%", "Check Def Route" ]],
[ "persist", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_ini, WVDIAL, "Dialer %section%", "Auto Reconnect" ]],
[ "dial_command", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_ini, WVDIAL, "Dialer %section%", "Dial Command" ]],
[ "external_line", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_ini, WVDIAL, "Dialer %section%", "Dial Prefix" ]],
]
},
"debian-3.0" =>
{
fn =>
{
INTERFACES => "/etc/network/interfaces",
IFACE => "#iface#",
TYPE => "#type#",
CHAT => "/etc/chatscripts/%section%",
PPP_OPTIONS => "/etc/ppp/peers/%section%",
PAP => "/etc/ppp/pap-secrets",
CHAP => "/etc/ppp/chap-secrets",
},
table =>
[
[ "dev", \&Utils::Parse::get_trivial, IFACE ],
[ "bootproto", \&get_debian_bootproto, [INTERFACES, IFACE]],
[ "auto", \&get_debian_auto, [INTERFACES, IFACE]],
[ "address", \&Utils::Parse::get_interfaces_option_str, [INTERFACES, IFACE], "address" ],
[ "netmask", \&Utils::Parse::get_interfaces_option_str, [INTERFACES, IFACE], "netmask" ],
[ "broadcast", \&Utils::Parse::get_interfaces_option_str, [INTERFACES, IFACE], "broadcast" ],
[ "network", \&Utils::Parse::get_interfaces_option_str, [INTERFACES, IFACE], "network" ],
[ "gateway", \&Utils::Parse::get_interfaces_option_str, [INTERFACES, IFACE], "gateway" ],
[ "essid", \&Utils::Parse::get_interfaces_option_str, [INTERFACES, IFACE], "wireless[_-]essid" ],
[ "essid", \&Utils::Parse::get_interfaces_option_str, [INTERFACES, IFACE], "wpa-ssid" ],
[ "key_type", \&get_debian_key_type, [ INTERFACES, IFACE ]],
[ "key", \&get_wep_key, [ \&Utils::Parse::get_interfaces_option_str, INTERFACES, IFACE, "wireless[_-]key1?" ]],
[ "key", \&get_wep_key, [ \&Utils::Parse::get_interfaces_option_str, INTERFACES, IFACE, "wpa-psk" ]],
[ "remote_address", \&get_debian_remote_address, [INTERFACES, IFACE]],
[ "section", \&Utils::Parse::get_interfaces_option_str, [INTERFACES, IFACE], "provider" ],
[ "update_dns", \&check_type, [TYPE, "(modem|isdn)", \&Utils::Parse::get_kw, PPP_OPTIONS, "usepeerdns" ]],
[ "noauth", \&check_type, [TYPE, "(modem|isdn)", \&Utils::Parse::get_kw, PPP_OPTIONS, "noauth" ]],
[ "mtu", \&check_type, [TYPE, "(modem|isdn)", \&Utils::Parse::split_first_str, PPP_OPTIONS, "mtu", "[ \t]+" ]],
[ "mru", \&check_type, [TYPE, "(modem|isdn)", \&Utils::Parse::split_first_str, PPP_OPTIONS, "mru", "[ \t]+" ]],
[ "serial_port", \&check_type, [TYPE, "modem", \&Utils::Parse::get_ppp_options_re, PPP_OPTIONS, "^(/dev/[^ \t]+)" ]],
[ "serial_speed", \&check_type, [TYPE, "modem", \&Utils::Parse::get_ppp_options_re, PPP_OPTIONS, "^([0-9]+)" ]],
[ "login", \&check_type, [TYPE, "(modem|isdn)", \&Utils::Parse::get_ppp_options_re, PPP_OPTIONS, "^user \"?([^\"]*)\"?" ]],
[ "password", \&check_type, [TYPE, "(modem|isdn)", \&get_pap_passwd, PAP, "%login%" ]],
[ "password", \&check_type, [TYPE, "(modem|isdn)", \&get_pap_passwd, CHAP, "%login%" ]],
[ "set_default_gw", \&check_type, [TYPE, "(modem|isdn)", \&Utils::Parse::get_kw, PPP_OPTIONS, "defaultroute" ]],
[ "debug", \&check_type, [TYPE, "(modem|isdn)", \&Utils::Parse::get_kw, PPP_OPTIONS, "debug" ]],
[ "persist", \&check_type, [TYPE, "(modem|isdn)", \&Utils::Parse::get_kw, PPP_OPTIONS, "persist" ]],
[ "serial_escapechars", \&check_type, [TYPE, "modem", \&Utils::Parse::split_first_str, PPP_OPTIONS, "escape", "[ \t]+" ]],
[ "serial_hwctl", \&check_type, [TYPE, "modem", \&Utils::Parse::get_kw, PPP_OPTIONS, "crtscts" ]],
[ "external_line", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_chatfile, CHAT, "atd[^0-9]([0-9*#]*)[wW]" ]],
[ "external_line", \&check_type, [TYPE, "isdn", \&Utils::Parse::get_ppp_options_re, PPP_OPTIONS, "^number[ \t]+(.+)[wW]" ]],
[ "phone_number", \&check_type, [TYPE, "isdn", \&Utils::Parse::get_ppp_options_re, PPP_OPTIONS, "^number.*[wW \t](.*)" ]],
[ "phone_number", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_chatfile, CHAT, "atd.*[ptwW]([#\*0-9, \-]+)" ]],
[ "dial_command", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_chatfile, CHAT, "(atd[tp])[0-9, \-w]+" ]],
[ "volume", \&check_type, [TYPE, "modem", \&get_modem_volume, CHAT ]],
# [ "ppp_options", \&check_type, [TYPE, "modem", \&gst_network_get_ppp_options_unsup, PPP_OPTIONS ]],
]
},
"suse-9.0" =>
{
ifaces_get => \&get_existing_suse_ifaces,
fn =>
{
IFCFG => "/etc/sysconfig/network/ifcfg-#iface#",
ROUTES_CONF => "/etc/sysconfig/network/routes",
PROVIDERS => "/etc/sysconfig/network/providers/%section%",
IFACE => "#iface#",
TYPE => "#type#",
},
table =>
[
[ "dev", \&get_suse_dev_name, IFACE ],
[ "auto", \&get_suse_auto, IFCFG, STARTMODE ],
[ "bootproto", \&get_bootproto, IFCFG, BOOTPROTO ],
[ "address", \&Utils::Parse::get_sh, IFCFG, IPADDR ],
[ "netmask", \&Utils::Parse::get_sh, IFCFG, NETMASK ],
[ "remote_address", \&Utils::Parse::get_sh, IFCFG, REMOTE_IPADDR ],
[ "essid", \&Utils::Parse::get_sh, IFCFG, WIRELESS_ESSID ],
[ "key_type", \&get_wep_key_type, [ \&Utils::Parse::get_sh, IFCFG, WIRELESS_KEY ]],
[ "key", \&get_wep_key, [ \&Utils::Parse::get_sh, IFCFG, WIRELESS_KEY ]],
[ "gateway", \&get_suse_gateway, ROUTES_CONF, "%address%", "%netmask%" ],
[ "gateway", \&get_suse_gateway, ROUTES_CONF, "%remote_address%", "255.255.255.255" ],
# Modem stuff goes here
[ "serial_port", \&Utils::Parse::get_sh, IFCFG, MODEM_DEVICE ],
[ "serial_speed", \&Utils::Parse::get_sh, IFCFG, SPEED ],
[ "mtu", \&Utils::Parse::get_sh, IFCFG, MTU ],
[ "mru", \&Utils::Parse::get_sh, IFCFG, MRU ],
[ "dial_command", \&Utils::Parse::get_sh, IFCFG, DIALCOMMAND ],
[ "external_line", \&Utils::Parse::get_sh, IFCFG, DIALPREFIX ],
[ "section", \&Utils::Parse::get_sh, IFCFG, PROVIDER ],
[ "volume", \&Utils::Parse::get_sh_re, IFCFG, INIT8, "AT.*[ml]([0-3])" ],
[ "login", \&Utils::Parse::get_sh, PROVIDERS, USERNAME ],
[ "password", \&Utils::Parse::get_sh, PROVIDERS, PASSWORD ],
[ "phone_number", \&Utils::Parse::get_sh, PROVIDERS, PHONE ],
[ "dns1", \&Utils::Parse::get_sh, PROVIDERS, DNS1 ],
[ "dns2", \&Utils::Parse::get_sh, PROVIDERS, DNS2 ],
[ "update_dns", \&Utils::Parse::get_sh_bool, PROVIDERS, MODIFYDNS ],
[ "persist", \&Utils::Parse::get_sh_bool, PROVIDERS, PERSIST ],
[ "stupid", \&Utils::Parse::get_sh_bool, PROVIDERS, STUPIDMODE ],
[ "set_default_gw", \&Utils::Parse::get_sh_bool, PROVIDERS, DEFAULTROUTE ],
# [ "ppp_options", \&Utils::Parse::get_sh, IFCFG, PPPD_OPTIONS ],
]
},
"pld-1.0" =>
{
ifaces_get => \&get_existing_pld_ifaces,
fn =>
{
IFCFG => "/etc/sysconfig/interfaces/ifcfg-#iface#",
CHAT => "/etc/sysconfig/interfaces/data/chat-#iface#",
TYPE => "#type#",
IFACE => "#iface#",
PAP => "/etc/ppp/pap-secrets",
CHAP => "/etc/ppp/chap-secrets",
PUMP => "/etc/pump.conf"
},
table =>
[
[ "bootproto", \&get_rh_bootproto, IFCFG, BOOTPROTO ],
[ "auto", \&Utils::Parse::get_sh_bool, IFCFG, ONBOOT ],
[ "dev", \&Utils::Parse::get_sh, IFCFG, DEVICE ],
[ "address", \&get_pld_ipaddr, IFCFG, IPADDR, "address" ],
[ "netmask", \&get_pld_ipaddr, IFCFG, IPADDR, "netmask" ],
[ "gateway", \&Utils::Parse::get_sh, IFCFG, GATEWAY ],
[ "remote_address", \&Utils::Parse::get_sh, IFCFG, REMIP ],
[ "update_dns", \&Utils::Parse::get_sh_bool, IFCFG, PEERDNS ],
[ "mtu", \&Utils::Parse::get_sh, IFCFG, MTU ],
[ "mru", \&Utils::Parse::get_sh, IFCFG, MRU ],
[ "login", \&Utils::Parse::get_sh, IFCFG, PAPNAME ],
[ "password", \&get_pap_passwd, PAP, "%login%" ],
[ "password", \&get_pap_passwd, CHAP, "%login%" ],
[ "serial_port", \&Utils::Parse::get_sh, IFCFG, MODEMPORT ],
[ "serial_speed", \&Utils::Parse::get_sh, IFCFG, LINESPEED ],
[ "set_default_gw", \&Utils::Parse::get_sh_bool, IFCFG, DEFROUTE ],
[ "persist", \&Utils::Parse::get_sh_bool, IFCFG, PERSIST ],
[ "serial_escapechars", \&Utils::Parse::get_sh_bool, IFCFG, ESCAPECHARS ],
[ "serial_hwctl", \&Utils::Parse::get_sh_bool, IFCFG, HARDFLOWCTL ],
[ "phone_number", \&Utils::Parse::get_from_chatfile, CHAT, "^atd[^0-9]*([#\*0-9, \-]+)" ],
# [ "name", \&Utils::Parse::get_sh, IFCFG, DEVICE ],
# [ "broadcast", \&Utils::Parse::get_sh, IFCFG, BROADCAST ],
# [ "network", \&Utils::Parse::get_sh, IFCFG, NETWORK ],
# [ "update_dns", \&gst_network_pump_get_nodns, PUMP, "%dev%", "%bootproto%" ],
# [ "dns1", \&Utils::Parse::get_sh, IFCFG, DNS1 ],
# [ "dns2", \&Utils::Parse::get_sh, IFCFG, DNS2 ],
# [ "ppp_options", \&Utils::Parse::get_sh, IFCFG, PPPOPTIONS ],
# [ "section", \&Utils::Parse::get_sh, IFCFG, WVDIALSECT ],
# [ "debug", \&Utils::Parse::get_sh_bool, IFCFG, DEBUG ],
]
},
"slackware-9.1.0" =>
{
fn =>
{
RC_INET_CONF => "/etc/rc.d/rc.inet1.conf",
RC_INET => "/etc/rc.d/rc.inet1",
RC_LOCAL => "/etc/rc.d/rc.local",
TYPE => "#type#",
IFACE => "#iface#",
WIRELESS => "/etc/pcmcia/wireless.opts",
PPP_OPTIONS => "/etc/ppp/options",
PAP => "/etc/ppp/pap-secrets",
CHAP => "/etc/ppp/chap-secrets",
CHAT => "/etc/ppp/pppscript",
},
table =>
[
[ "dev", \&Utils::Parse::get_trivial, IFACE ],
[ "address", \&Utils::Parse::get_rcinet1conf, [RC_INET_CONF, IFACE], IPADDR ],
[ "netmask", \&Utils::Parse::get_rcinet1conf, [RC_INET_CONF, IFACE], NETMASK ],
[ "gateway", \&get_gateway, RC_INET_CONF, GATEWAY, "%address%", "%netmask%" ],
[ "auto", \&get_slackware_auto, [RC_INET, RC_LOCAL, IFACE]],
[ "bootproto", \&get_slackware_bootproto, [RC_INET_CONF, IFACE]],
[ "essid", \&Utils::Parse::get_wireless_opts, [ WIRELESS, IFACE], \&get_wireless_ifaces, ESSID ],
[ "key_type", \&get_wep_key_type, [ \&Utils::Parse::get_wireless_opts, WIRELESS, IFACE, \&get_wireless_ifaces, KEY ]],
[ "key", \&get_wep_key, [ \&Utils::Parse::get_wireless_opts, WIRELESS, IFACE, \&get_wireless_ifaces, KEY ]],
# Modem stuff
[ "update_dns", \&check_type, [TYPE, "modem", \&Utils::Parse::get_kw, PPP_OPTIONS, "usepeerdns" ]],
[ "noauth", \&check_type, [TYPE, "modem", \&Utils::Parse::get_kw, PPP_OPTIONS, "noauth" ]],
[ "mtu", \&check_type, [TYPE, "modem", \&Utils::Parse::split_first_str, PPP_OPTIONS, "mtu", "[ \t]+" ]],
[ "mru", \&check_type, [TYPE, "modem", \&Utils::Parse::split_first_str, PPP_OPTIONS, "mru", "[ \t]+" ]],
[ "serial_port", \&check_type, [TYPE, "modem", \&Utils::Parse::get_ppp_options_re, PPP_OPTIONS, "^(/dev/[^ \t]+)" ]],
[ "serial_speed", \&check_type, [TYPE, "modem", \&Utils::Parse::get_ppp_options_re, PPP_OPTIONS, "^([0-9]+)" ]],
[ "login", \&check_type, [TYPE, "modem", \&Utils::Parse::get_ppp_options_re, PPP_OPTIONS, "^name \"?([^\"]*)\"?" ]],
[ "password", \&check_type, [TYPE, "modem", \&get_pap_passwd, PAP, "%login%" ]],
[ "password", \&check_type, [TYPE, "modem", \&get_pap_passwd, CHAP, "%login%" ]],
[ "set_default_gw", \&check_type, [TYPE, "modem", \&Utils::Parse::get_kw, PPP_OPTIONS, "defaultroute" ]],
[ "debug", \&check_type, [TYPE, "modem", \&Utils::Parse::get_kw, PPP_OPTIONS, "debug" ]],
[ "persist", \&check_type, [TYPE, "modem", \&Utils::Parse::get_kw, PPP_OPTIONS, "persist" ]],
[ "serial_escapechars", \&check_type, [TYPE, "modem", \&Utils::Parse::split_first_str, PPP_OPTIONS, "escape", "[ \t]+" ]],
[ "serial_hwctl", \&check_type, [TYPE, "modem", \&Utils::Parse::get_kw, PPP_OPTIONS, "crtscts" ]],
[ "external_line", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_chatfile, CHAT, "atd[^0-9]*([0-9*#]*)[wW]" ]],
[ "phone_number", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_chatfile, CHAT, "atd.*[ptw]([#\*0-9, \-]+)" ]],
[ "dial_command", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_chatfile, CHAT, "(atd[tp])[0-9, \-w]+" ]],
[ "volume", \&check_type, [TYPE, "modem", \&get_modem_volume, CHAT ]],
# [ "ppp_options", \&check_type, [TYPE, "modem", \&gst_network_get_ppp_options_unsup, PPP_OPTIONS ]],
]
},
"gentoo" =>
{
fn =>
{
NET => "/etc/conf.d/net",
PPPNET => "/etc/conf.d/net.#iface#",
INIT => "net.#iface#",
TYPE => "#type#",
IFACE => "#iface#",
WIRELESS => "/etc/conf.d/wireless",
},
table =>
[
[ "auto", \&Init::Services::get_gentoo_service_status, INIT, "default" ],
[ "dev", \&Utils::Parse::get_trivial, IFACE ],
[ "address", \&Utils::Parse::get_confd_net_re, NET, "config_%dev%", "^[ \t]*([0-9\.]+)" ],
[ "netmask", \&Utils::Parse::get_confd_net_re, NET, "config_%dev%", "netmask[ \t]+([0-9\.]*)" ],
[ "remote_address", \&Utils::Parse::get_confd_net_re, NET, "config_%dev%", "dest_address[ \t]+([0-9\.]*)" ],
# [ "gateway", \&gst_network_gentoo_parse_gateway, [ NET, IFACE ]],
[ "bootproto", \&get_gentoo_bootproto, [ NET, IFACE ]],
[ "essid", \&Utils::Parse::get_sh, WIRELESS, "essid_%dev%" ],
[ "key_type", \&get_wep_key_type, [ \&Utils::Parse::get_sh, WIRELESS, "key_%essid%" ]],
[ "key", \&get_wep_key, [ \&Utils::Parse::get_sh, WIRELESS, "key_%essid%" ]],
# modem stuff
[ "update_dns", \&Utils::Parse::get_sh_bool, PPPNET, PEERDNS ],
[ "mtu", \&Utils::Parse::get_sh, PPPNET, MTU ],
[ "mru", \&Utils::Parse::get_sh, PPPNET, MRU ],
[ "serial_port", \&Utils::Parse::get_sh, PPPNET, MODEMPORT ],
[ "serial_speed", \&Utils::Parse::get_sh, PPPNET, LINESPEED ],
[ "login", \&Utils::Parse::get_sh, PPPNET, USERNAME ],
[ "password", \&Utils::Parse::get_sh, PPPNET, PASSWORD ],
[ "ppp_options", \&Utils::Parse::get_sh, PPPNET, PPPOPTIONS ],
[ "set_default_gw", \&Utils::Parse::get_sh_bool, PPPNET, DEFROUTE ],
[ "debug", \&Utils::Parse::get_sh_bool, PPPNET, DEBUG ],
[ "persist", \&Utils::Parse::get_sh_bool, PPPNET, PERSIST ],
[ "serial_escapechars", \&Utils::Parse::get_sh_bool, PPPNET, ESCAPECHARS ],
[ "serial_hwctl", \&Utils::Parse::get_sh_bool, PPPNET, HARDFLOWCTL ],
[ "external_line", \&Utils::Parse::get_sh_re, PPPNET, NUMBER, "^([0-9*#]*)wW" ],
[ "phone_number", \&Utils::Parse::get_sh_re, PPPNET, NUMBER, "w?([#\*0-9]*)\$" ],
[ "volume", \&Utils::Parse::get_sh_re, PPPNET, INITSTRING, "^at.*[ml]([0-3])" ],
]
},
"freebsd-5" =>
{
fn =>
{
RC_CONF => "/etc/rc.conf",
RC_CONF_DEFAULT => "/etc/defaults/rc.conf",
STARTIF => "/etc/start_if.#iface#",
PPPCONF => "/etc/ppp/ppp.conf",
TYPE => "#type#",
IFACE => "#iface#",
},
table =>
[
[ "auto", \&get_freebsd_auto, [RC_CONF, RC_CONF_DEFAULT, IFACE ]],
[ "dev", \&Utils::Parse::get_trivial, IFACE ],
# we need to double check these values both in the start_if and in the rc.conf files, in this order
[ "address", \&Utils::Parse::get_startif, STARTIF, "inet[ \t]+([0-9\.]+)" ],
[ "address", \&Utils::Parse::get_sh_re, RC_CONF, "ifconfig_%dev%", "inet[ \t]+([0-9\.]+)" ],
[ "netmask", \&Utils::Parse::get_startif, STARTIF, "netmask[ \t]+([0-9\.]+)" ],
[ "netmask", \&Utils::Parse::get_sh_re, RC_CONF, "ifconfig_%dev%", "netmask[ \t]+([0-9\.]+)" ],
[ "remote_address", \&Utils::Parse::get_startif, STARTIF, "dest_address[ \t]+([0-9\.]+)" ],
[ "remote_address", \&Utils::Parse::get_sh_re, RC_CONF, "ifconfig_%dev%", "dest_address[ \t]+([0-9\.]+)" ],
[ "essid", \&Utils::Parse::get_startif, STARTIF, "ssid[ \t]+(\".*\"|[^\"][^ ]+)" ],
[ "essid", \&Utils::Parse::get_sh_re, RC_CONF, "ifconfig_%dev%", "ssid[ \t]+([^ ]*)" ],
# this is for plip interfaces
[ "gateway", \&get_gateway, RC_CONF, "defaultrouter", "%remote_address%", "255.255.255.255" ],
[ "gateway", \&get_gateway, RC_CONF, "defaultrouter", "%address%", "%netmask%" ],
[ "bootproto", \&get_bootproto, RC_CONF, "ifconfig_%dev%" ],
# Modem stuff
[ "serial_port", \&Utils::Parse::get_pppconf, [ PPPCONF, STARTIF, IFACE ], "device" ],
[ "serial_speed", \&Utils::Parse::get_pppconf, [ PPPCONF, STARTIF, IFACE ], "speed" ],
[ "mtu", \&Utils::Parse::get_pppconf, [ PPPCONF, STARTIF, IFACE ], "mtu" ],
[ "mru", \&Utils::Parse::get_pppconf, [ PPPCONF, STARTIF, IFACE ], "mru" ],
[ "login", \&Utils::Parse::get_pppconf, [ PPPCONF, STARTIF, IFACE ], "authname" ],
[ "password", \&Utils::Parse::get_pppconf, [ PPPCONF, STARTIF, IFACE ], "authkey" ],
[ "update_dns", \&Utils::Parse::get_pppconf_bool, [ PPPCONF, STARTIF, IFACE ], "dns" ],
[ "set_default_gw", \&Utils::Parse::get_pppconf_bool, [ PPPCONF, STARTIF, IFACE ], "default HISADDR" ],
[ "external_line", \&Utils::Parse::get_pppconf_re, [ PPPCONF, STARTIF, IFACE ], "phone", "[ \t]+([#*0-9]+)[wW]" ],
[ "phone_number", \&Utils::Parse::get_pppconf_re, [ PPPCONF, STARTIF, IFACE ], "phone", "[wW]?([#\*0-9]+)[ \t]*\$" ],
[ "dial_command", \&Utils::Parse::get_pppconf_re, [ PPPCONF, STARTIF, IFACE ], "dial", "(ATD[TP])" ],
[ "volume", \&Utils::Parse::get_pppconf_re, [ PPPCONF, STARTIF, IFACE ], "dial", "AT.*[ml]([0-3]) OK " ],
[ "persist", \&get_freebsd_ppp_persist, [ STARTIF, IFACE ]],
]
},
"solaris-2.11" =>
{
fn =>
{
INTERFACE => "/etc/hostname.#iface#",
DHCP_FILE => "/etc/dhcp.#iface#",
SECRET => "/etc/inet/secret/wifiwepkey",
DEFAULTROUTER => "/etc/defaultrouter",
IFACE => "#iface#",
TYPE => "#type#",
CHAT => "/etc/chatscripts/%section%",
PPP_OPTIONS => "/etc/ppp/peers/%section%",
PAP => "/etc/ppp/pap-secrets",
CHAP => "/etc/ppp/chap-secrets",
},
table =>
[
[ "dev", \&Utils::Parse::get_trivial, IFACE ],
[ "bootproto", \&get_sunos_bootproto, [ DHCP_FILE, IFACE ]],
[ "auto", \&get_sunos_auto, [INTERFACE, IFACE]],
[ "address", \&get_sunos_address, [INTERFACE, IFACE]],
[ "netmask", \&get_sunos_netmask, [INTERFACE, IFACE], "%bootproto%" ],
[ "gateway", \&get_sunos_gateway, DEFAULTROUTER, IFACE ],
# FIXME: no broadcast nor network
[ "essid", \&get_sunos_wireless, [IFACE, "essid" ]],
[ "key_type", \&get_sunos_wireless, [IFACE, "encryption" ]],
[ "key", \&get_sunos_wireless_key, [SECRET, IFACE ]],
[ "update_dns", \&check_type, [TYPE, "(modem|isdn)", \&Utils::Parse::get_kw, PPP_OPTIONS, "usepeerdns" ]],
[ "noauth", \&check_type, [TYPE, "(modem|isdn)", \&Utils::Parse::get_kw, PPP_OPTIONS, "noauth" ]],
[ "mtu", \&check_type, [TYPE, "(modem|isdn)", \&Utils::Parse::split_first_str, PPP_OPTIONS, "mtu", "[ \t]+" ]],
[ "mru", \&check_type, [TYPE, "(modem|isdn)", \&Utils::Parse::split_first_str, PPP_OPTIONS, "mru", "[ \t]+" ]],
[ "serial_port", \&check_type, [TYPE, "modem", \&Utils::Parse::get_ppp_options_re, PPP_OPTIONS, "^(/dev/[^ \t]+)" ]],
[ "serial_speed", \&check_type, [TYPE, "modem", \&Utils::Parse::get_ppp_options_re, PPP_OPTIONS, "^([0-9]+)" ]],
[ "login", \&check_type, [TYPE, "(modem|isdn)", \&Utils::Parse::get_ppp_options_re, PPP_OPTIONS, "^user \"?([^\"]*)\"?" ]],
[ "password", \&check_type, [TYPE, "(modem|isdn)", \&get_pap_passwd, PAP, "%login%" ]],
[ "password", \&check_type, [TYPE, "(modem|isdn)", \&get_pap_passwd, CHAP, "%login%" ]],
[ "set_default_gw", \&check_type, [TYPE, "(modem|isdn)", \&Utils::Parse::get_kw, PPP_OPTIONS, "defaultroute" ]],
[ "debug", \&check_type, [TYPE, "(modem|isdn)", \&Utils::Parse::get_kw, PPP_OPTIONS, "debug" ]],
[ "persist", \&check_type, [TYPE, "(modem|isdn)", \&Utils::Parse::get_kw, PPP_OPTIONS, "persist" ]],
[ "serial_escapechars", \&check_type, [TYPE, "modem", \&Utils::Parse::split_first_str, PPP_OPTIONS, "escape", "[ \t]+" ]],
[ "serial_hwctl", \&check_type, [TYPE, "modem", \&Utils::Parse::get_kw, PPP_OPTIONS, "crtscts" ]],
[ "external_line", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_chatfile, CHAT, "atd[^0-9]([0-9*#]*)[wW]" ]],
[ "external_line", \&check_type, [TYPE, "isdn", \&Utils::Parse::get_ppp_options_re, PPP_OPTIONS, "^number[ \t]+(.+)[wW]" ]],
[ "phone_number", \&check_type, [TYPE, "isdn", \&Utils::Parse::get_ppp_options_re, PPP_OPTIONS, "^number.*[wW \t](.*)" ]],
[ "phone_number", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_chatfile, CHAT, "atd.*[ptwW]([#\*0-9, \-]+)" ]],
[ "dial_command", \&check_type, [TYPE, "modem", \&Utils::Parse::get_from_chatfile, CHAT, "(atd[tp])[0-9, -w]+" ]],
[ "volume", \&check_type, [TYPE, "modem", \&get_modem_volume, CHAT ]],
]
},
);
my $dist = &get_interface_dist ();
return %{$dist_tables{$dist}} if $dist;
&Utils::Report::do_report ("platform_no_table", $Utils::Backend::tool{"platform"});
return undef;
}
sub get_interface_replace_table
{
my %dist_tables =
(
"redhat-6.2" =>
{
iface_set => \&activate_interface,
iface_delete => \&delete_rh62_interface,
fn =>
{
IFCFG => "/etc/sysconfig/network-scripts/ifcfg-#iface#",
CHAT => "/etc/sysconfig/network-scripts/chat-#iface#",
IFACE => "#iface#",
TYPE => "#type#",
WVDIAL => "/etc/wvdial.conf",
PUMP => "/etc/pump.conf"
},
table =>
[
[ "bootproto", \&set_rh_bootproto, IFCFG, BOOTPROTO ],
[ "auto", \&Utils::Replace::set_sh_bool, IFCFG, ONBOOT ],
[ "dev", \&Utils::Replace::set_sh, IFCFG, NAME ],
[ "dev", \&Utils::Replace::set_sh, IFCFG, DEVICE ],
[ "address", \&Utils::Replace::set_sh, IFCFG, IPADDR ],
[ "netmask", \&Utils::Replace::set_sh, IFCFG, NETMASK ],
[ "broadcast", \&Utils::Replace::set_sh, IFCFG, BROADCAST ],
[ "network", \&Utils::Replace::set_sh, IFCFG, NETWORK ],
[ "gateway", \&Utils::Replace::set_sh, IFCFG, GATEWAY ],
[ "update_dns", \&Utils::Replace::set_sh_bool, IFCFG, PEERDNS ],
[ "remote_address", \&Utils::Replace::set_sh, IFCFG, REMIP ],
[ "login", \&Utils::Replace::set_sh, IFCFG, PAPNAME ],
[ "serial_port", \&Utils::Replace::set_sh, IFCFG, MODEMPORT ],
[ "serial_speed", \&Utils::Replace::set_sh, IFCFG, LINESPEED ],
[ "ppp_options", \&Utils::Replace::set_sh, IFCFG, PPPOPTIONS ],
[ "section", \&Utils::Replace::set_sh, IFCFG, WVDIALSECT ],
[ "set_default_gw", \&Utils::Replace::set_sh_bool, IFCFG, DEFROUTE ],
[ "persist", \&Utils::Replace::set_sh_bool, IFCFG, PERSIST ],
[ "phone_number", \&Utils::Replace::set_chat, CHAT, "^atd[^0-9]*([#\*0-9, \-]+)" ],
# [ "update_dns", \&gst_network_pump_set_nodns, PUMP, "%dev%", "%bootproto%" ],
# [ "dns1", \&Utils::Replace::set_sh, IFCFG, DNS1 ],
# [ "dns2", \&Utils::Replace::set_sh, IFCFG, DNS2 ],
# [ "mtu", \&Utils::Replace::set_sh, IFCFG, MTU ],
# [ "mru", \&Utils::Replace::set_sh, IFCFG, MRU ],
# [ "debug", \&Utils::Replace::set_sh_bool, IFCFG, DEBUG ],
# [ "serial_escapechars", \&Utils::Replace::set_sh_bool, IFCFG, ESCAPECHARS ],
# [ "serial_hwctl", \&Utils::Replace::set_sh_bool, IFCFG, HARDFLOWCTL ],
# wvdial settings
[ "phone_number", \&check_type, [ TYPE, "modem", \&Utils::Replace::set_ini, WVDIAL, "Dialer %section%", "Phone" ]],
[ "update_dns", \&check_type, [ TYPE, "modem", \&Utils::Replace::set_ini, WVDIAL, "Dialer %section%", "Auto DNS" ]],
[ "login", \&check_type, [ TYPE, "modem", \&Utils::Replace::set_ini, WVDIAL, "Dialer %section%", "Username" ]],
[ "password", \&check_type, [ TYPE, "modem", \&Utils::Replace::set_ini, WVDIAL, "Dialer %section%", "Password" ]],
[ "serial_port", \&check_type, [ TYPE, "modem", \&Utils::Replace::set_ini, WVDIAL, "Dialer %section%", "Modem" ]],
[ "serial_speed", \&check_type, [ TYPE, "modem", \&Utils::Replace::set_ini, WVDIAL, "Dialer %section%", "Baud" ]],
[ "set_default_gw", \&check_type, [ TYPE, "modem", \&Utils::Replace::set_ini, WVDIAL, "Dialer %section%", "Check Def Route" ]],
[ "persist", \&check_type, [ TYPE, "modem", \&Utils::Replace::set_ini, WVDIAL, "Dialer %section%", "Auto Reconnect" ]],
[ "dial_command", \&check_type, [ TYPE, "modem", \&Utils::Replace::set_ini, WVDIAL, "Dialer %section%", "Dial Command" ]],
[ "external_line", \&check_type, [ TYPE, "modem", \&Utils::Replace::set_ini, WVDIAL, "Dialer %section%", "Dial Prefix" ]],
]
},
"redhat-7.2" =>
{
iface_set => \&activate_interface,
iface_delete => \&delete_rh72_interface,
fn =>
{
IFCFG => ["/etc/sysconfig/network-scripts/ifcfg-#iface#",
"/etc/sysconfig/networking/profiles/default/ifcfg-#iface#",
"/etc/sysconfig/networking/devices/ifcfg-#iface#"],
CHAT => "/etc/sysconfig/network-scripts/chat-#iface#",
IFACE => "#iface#",
TYPE => "#type#",
WVDIAL => "/etc/wvdial.conf",
PUMP => "/etc/pump.conf"
},
table =>
[
[ "bootproto", \&set_rh_bootproto, IFCFG, BOOTPROTO ],
[ "auto", \&Utils::Replace::set_sh_bool, IFCFG, ONBOOT ],
[ "dev", \&Utils::Replace::set_sh, IFCFG, NAME ],
[ "dev", \&Utils::Replace::set_sh, IFCFG, DEVICE ],
[ "address", \&Utils::Replace::set_sh, IFCFG, IPADDR ],
[ "netmask", \&Utils::Replace::set_sh, IFCFG, NETMASK ],
[ "broadcast", \&Utils::Replace::set_sh, IFCFG, BROADCAST ],
[ "network", \&Utils::Replace::set_sh, IFCFG, NETWORK ],
[ "gateway", \&Utils::Replace::set_sh, IFCFG, GATEWAY ],
[ "essid", \&Utils::Replace::set_sh, IFCFG, ESSID ],
[ "key", \&Utils::Replace::set_sh, IFCFG, KEY ],
[ "key_type", \&set_wep_key_full, [ \&Utils::Replace::set_sh, IFCFG, KEY, "%key%" ]],
[ "update_dns", \&Utils::Replace::set_sh_bool, IFCFG, PEERDNS ],
[ "remote_address", \&Utils::Replace::set_sh, IFCFG, REMIP ],
[ "login", \&Utils::Replace::set_sh, IFCFG, PAPNAME ],
[ "serial_port", \&Utils::Replace::set_sh, IFCFG, MODEMPORT ],
[ "serial_speed", \&Utils::Replace::set_sh, IFCFG, LINESPEED ],
[ "section", \&Utils::Replace::set_sh, IFCFG, WVDIALSECT ],
[ "set_default_gw", \&Utils::Replace::set_sh_bool, IFCFG, DEFROUTE ],
[ "persist", \&Utils::Replace::set_sh_bool, IFCFG, PERSIST ],
[ "phone_number", \&Utils::Replace::set_chat, CHAT, "^atd[^0-9]*([#\*0-9, \-]+)" ],
# [ "update_dns", \&gst_network_pump_set_nodns, PUMP, "%dev%", "%bootproto%" ],
# [ "dns1", \&Utils::Replace::set_sh, IFCFG, DNS1 ],
# [ "dns2", \&Utils::Replace::set_sh, IFCFG, DNS2 ],
# [ "mtu", \&Utils::Replace::set_sh, IFCFG, MTU ],
# [ "mru", \&Utils::Replace::set_sh, IFCFG, MRU ],
# [ "ppp_options", \&Utils::Replace::set_sh, IFCFG, PPPOPTIONS ],
# [ "debug", \&Utils::Replace::set_sh_bool, IFCFG, DEBUG ],
# [ "serial_escapechars", \&Utils::Replace::set_sh_bool, IFCFG, ESCAPECHARS ],
# [ "serial_hwctl", \&Utils::Replace::set_sh_bool, IFCFG, HARDFLOWCTL ],
# wvdial settings
[ "phone_number", \&check_type, [ TYPE, "modem", \&Utils::Replace::set_ini, WVDIAL, "Dialer %section%", "Phone" ]],
[ "update_dns", \&check_type, [ TYPE, "modem", \&Utils::Replace::set_ini, WVDIAL, "Dialer %section%", "Auto DNS" ]],
[ "login", \&check_type, [ TYPE, "modem", \&Utils::Replace::set_ini, WVDIAL, "Dialer %section%", "Username" ]],
[ "password", \&check_type, [ TYPE, "modem", \&Utils::Replace::set_ini, WVDIAL, "Dialer %section%", "Password" ]],
[ "serial_port", \&check_type, [ TYPE, "modem", \&Utils::Replace::set_ini, WVDIAL, "Dialer %section%", "Modem" ]],
[ "serial_speed", \&check_type, [ TYPE, "modem", \&Utils::Replace::set_ini, WVDIAL, "Dialer %section%", "Baud" ]],
[ "set_default_gw", \&check_type, [ TYPE, "modem", \&Utils::Replace::set_ini, WVDIAL, "Dialer %section%", "Check Def Route" ]],
[ "persist", \&check_type, [ TYPE, "modem", \&Utils::Replace::set_ini, WVDIAL, "Dialer %section%", "Auto Reconnect" ]],
[ "dial_command", \&check_type, [ TYPE, "modem", \&Utils::Replace::set_ini, WVDIAL, "Dialer %section%", "Dial Command" ]],
[ "external_line", \&check_type, [ TYPE, "modem", \&Utils::Replace::set_ini, WVDIAL, "Dialer %section%", "Dial Prefix" ]],
]
},
"redhat-8.0" =>
{
iface_set => \&activate_interface,
iface_delete => \&delete_rh72_interface,
fn =>
{
IFCFG => ["/etc/sysconfig/network-scripts/ifcfg-#iface#",
"/etc/sysconfig/networking/profiles/default/ifcfg-#iface#",
"/etc/sysconfig/networking/devices/ifcfg-#iface#"],
CHAT => "/etc/sysconfig/network-scripts/chat-#iface#",
IFACE => "#iface#",
TYPE => "#type#",
WVDIAL => "/etc/wvdial.conf",
PUMP => "/etc/pump.conf"
},
table =>
[
[ "bootproto", \&set_rh_bootproto, IFCFG, BOOTPROTO ],
[ "auto", \&Utils::Replace::set_sh_bool, IFCFG, ONBOOT ],
[ "dev" , \&Utils::Replace::set_sh, IFCFG, NAME ],
[ "dev", \&Utils::Replace::set_sh, IFCFG, DEVICE ],
[ "address", \&Utils::Replace::set_sh, IFCFG, IPADDR ],
[ "netmask", \&Utils::Replace::set_sh, IFCFG, NETMASK ],
[ "broadcast", \&Utils::Replace::set_sh, IFCFG, BROADCAST ],
[ "network", \&Utils::Replace::set_sh, IFCFG, NETWORK ],
[ "gateway", \&Utils::Replace::set_sh, IFCFG, GATEWAY ],
[ "essid", \&Utils::Replace::set_sh, IFCFG, WIRELESS_ESSID ],
[ "key", \&Utils::Replace::set_sh, IFCFG, WIRELESS_KEY ],
[ "key_type", \&set_wep_key_full, [ \&Utils::Replace::set_sh, IFCFG, WIRELESS_KEY, "%key%" ]],
[ "update_dns", \&Utils::Replace::set_sh_bool, IFCFG, PEERDNS ],
[ "remote_address", \&Utils::Replace::set_sh, IFCFG, REMIP ],
[ "login", \&Utils::Replace::set_sh, IFCFG, PAPNAME ],
[ "serial_port", \&Utils::Replace::set_sh, IFCFG, MODEMPORT ],
[ "section", \&Utils::Replace::set_sh, IFCFG, WVDIALSECT ],
[ "set_default_gw", \&Utils::Replace::set_sh_bool, IFCFG, DEFROUTE ],
[ "persist", \&Utils::Replace::set_sh_bool, IFCFG, PERSIST ],
[ "phone_number", \&Utils::Replace::set_chat, CHAT, "^atd[^0-9]*([#\*0-9, \-]+)" ],
# [ "update_dns", \&gst_network_pump_set_nodns, PUMP, "%dev%", "%bootproto%" ],
# [ "dns1", \&Utils::Replace::set_sh, IFCFG, DNS1 ],
# [ "dns2", \&Utils::Replace::set_sh, IFCFG, DNS2 ],
# [ "mtu", \&Utils::Replace::set_sh, IFCFG, MTU ],
# [ "mru", \&Utils::Replace::set_sh, IFCFG, MRU ],
# [ "serial_speed", \&Utils::Replace::set_sh, IFCFG, LINESPEED ],
# [ "ppp_options", \&Utils::Replace::set_sh, IFCFG, PPPOPTIONS ],
# [ "debug", \&Utils::Replace::set_sh_bool, IFCFG, DEBUG ],
# [ "serial_escapechars", \&Utils::Replace::set_sh_bool, IFCFG, ESCAPECHARS ],
# [ "serial_hwctl", \&Utils::Replace::set_sh_bool, IFCFG, HARDFLOWCTL ],
# wvdial settings
[ "phone_number", \&check_type, [ TYPE, "modem", \&Utils::Replace::set_ini, WVDIAL, "Dialer %section%", "Phone" ]],
[ "update_dns", \&check_type, [ TYPE, "modem", \&Utils::Replace::set_ini, WVDIAL, "Dialer %section%", "Auto DNS" ]],
[ "login", \&check_type, [ TYPE, "modem", \&Utils::Replace::set_ini, WVDIAL, "Dialer %section%", "Username" ]],
[ "password", \&check_type, [ TYPE, "modem", \&Utils::Replace::set_ini, WVDIAL, "Dialer %section%", "Password" ]],
[ "serial_port", \&check_type, [ TYPE, "modem", \&Utils::Replace::set_ini, WVDIAL, "Dialer %section%", "Modem" ]],
[ "serial_speed", \&check_type, [ TYPE, "modem", \&Utils::Replace::set_ini, WVDIAL, "Dialer %section%", "Baud" ]],
[ "set_default_gw", \&check_type, [ TYPE, "modem", \&Utils::Replace::set_ini, WVDIAL, "Dialer %section%", "Check Def Route" ]],
[ "persist", \&check_type, [ TYPE, "modem", \&Utils::Replace::set_ini, WVDIAL, "Dialer %section%", "Auto Reconnect" ]],
[ "dial_command", \&check_type, [ TYPE, "modem", \&Utils::Replace::set_ini, WVDIAL, "Dialer %section%", "Dial Command" ]],
[ "external_line", \&check_type, [ TYPE, "modem", \&Utils::Replace::set_ini, WVDIAL, "Dialer %section%", "Dial Prefix" ]],
]
},
"vine-3.0" =>
{
iface_set => \&activate_interface,
iface_delete => \&delete_rh62_interface,
fn =>
{
IFCFG => "/etc/sysconfig/network-scripts/ifcfg-#iface#",
CHAT => "/etc/sysconfig/network-scripts/chat-#iface#",
IFACE => "#iface#",
TYPE => "#type#",
WVDIAL => "/etc/wvdial.conf",
PUMP => "/etc/pump.conf"
},
table =>
[
[ "bootproto", \&set_rh_bootproto, IFCFG, BOOTPROTO ],
[ "auto", \&Utils::Replace::set_sh_bool, IFCFG, ONBOOT ],
[ "dev", \&Utils::Replace::set_sh, IFCFG, NAME ],
[ "dev", \&Utils::Replace::set_sh, IFCFG, DEVICE ],
[ "address", \&Utils::Replace::set_sh, IFCFG, IPADDR ],
[ "netmask", \&Utils::Replace::set_sh, IFCFG, NETMASK ],
[ "broadcast", \&Utils::Replace::set_sh, IFCFG, BROADCAST ],
[ "network", \&Utils::Replace::set_sh, IFCFG, NETWORK ],
[ "gateway", \&Utils::Replace::set_sh, IFCFG, GATEWAY ],
[ "essid", \&Utils::Replace::set_sh, IFCFG, ESSID ],
[ "key", \&Utils::Replace::set_sh, IFCFG, KEY ],
[ "key_type", \&set_wep_key_full, [ \&Utils::Replace::set_sh, IFCFG, KEY, "%key%" ]],
[ "update_dns", \&Utils::Replace::set_sh_bool, IFCFG, PEERDNS ],
[ "remote_address", \&Utils::Replace::set_sh, IFCFG, REMIP ],
[ "login", \&Utils::Replace::set_sh, IFCFG, PAPNAME ],
[ "serial_port", \&Utils::Replace::set_sh, IFCFG, MODEMPORT ],
[ "serial_speed", \&Utils::Replace::set_sh, IFCFG, LINESPEED ],
[ "section", \&Utils::Replace::set_sh, IFCFG, WVDIALSECT ],
[ "set_default_gw", \&Utils::Replace::set_sh_bool, IFCFG, DEFROUTE ],
[ "persist", \&Utils::Replace::set_sh_bool, IFCFG, PERSIST ],
[ "phone_number", \&Utils::Replace::set_chat, CHAT, "^atd[^0-9]*([#\*0-9, \-]+)" ],
# [ "update_dns", \&gst_network_pump_set_nodns, PUMP, "%dev%", "%bootproto%" ],
# [ "dns1", \&Utils::Replace::set_sh, IFCFG, DNS1 ],
# [ "dns2", \&Utils::Replace::set_sh, IFCFG, DNS2 ],
# [ "mtu", \&Utils::Replace::set_sh, IFCFG, MTU ],
# [ "mru", \&Utils::Replace::set_sh, IFCFG, MRU ],
# [ "ppp_options", \&Utils::Replace::set_sh, IFCFG, PPPOPTIONS ],
# [ "debug", \&Utils::Replace::set_sh_bool, IFCFG, DEBUG ],
# [ "serial_escapechars", \&Utils::Replace::set_sh_bool, IFCFG, ESCAPECHARS ],
# [ "serial_hwctl", \&Utils::Replace::set_sh_bool, IFCFG, HARDFLOWCTL ],
# wvdial settings
[ "phone_number", \&check_type, [ TYPE, "modem", \&Utils::Replace::set_ini, WVDIAL, "Dialer %section%", "Phone" ]],
[ "update_dns", \&check_type, [ TYPE, "modem", \&Utils::Replace::set_ini, WVDIAL, "Dialer %section%", "Auto DNS" ]],
[ "login", \&check_type, [ TYPE, "modem", \&Utils::Replace::set_ini, WVDIAL, "Dialer %section%", "Username" ]],
[ "password", \&check_type, [ TYPE, "modem", \&Utils::Replace::set_ini, WVDIAL, "Dialer %section%", "Password" ]],
[ "serial_port", \&check_type, [ TYPE, "modem", \&Utils::Replace::set_ini, WVDIAL, "Dialer %section%", "Modem" ]],
[ "serial_speed", \&check_type, [ TYPE, "modem", \&Utils::Replace::set_ini, WVDIAL, "Dialer %section%", "Baud" ]],
[ "set_default_gw", \&check_type, [ TYPE, "modem", \&Utils::Replace::set_ini, WVDIAL, "Dialer %section%", "Check Def Route" ]],
[ "persist", \&check_type, [ TYPE, "modem", \&Utils::Replace::set_ini, WVDIAL, "Dialer %section%", "Auto Reconnect" ]],
[ "dial_command", \&check_type, [ TYPE, "modem", \&Utils::Replace::set_ini, WVDIAL, "Dialer %section%", "Dial Command" ]],
[ "external_line", \&check_type, [ TYPE, "modem", \&Utils::Replace::set_ini, WVDIAL, "Dialer %section%", "Dial Prefix" ]],
]
},
"mandrake-9.0" =>
{
iface_set => \&activate_interface,
iface_delete => \&delete_rh62_interface,
fn =>
{
IFCFG => "/etc/sysconfig/network-scripts/ifcfg-#iface#",
CHAT => "/etc/sysconfig/network-scripts/chat-#iface#",
IFACE => "#iface#",
TYPE => "#type#",
WVDIAL => "/etc/wvdial.conf",
PUMP => "/etc/pump.conf"
},
table =>
[
[ "bootproto", \&set_rh_bootproto, IFCFG, BOOTPROTO ],
[ "auto", \&Utils::Replace::set_sh_bool, IFCFG, ONBOOT ],
[ "dev", \&Utils::Replace::set_sh, IFCFG, NAME ],
[ "dev", \&Utils::Replace::set_sh, IFCFG, DEVICE ],
[ "address", \&Utils::Replace::set_sh, IFCFG, IPADDR ],
[ "netmask", \&Utils::Replace::set_sh, IFCFG, NETMASK ],
[ "broadcast", \&Utils::Replace::set_sh, IFCFG, BROADCAST ],
[ "network", \&Utils::Replace::set_sh, IFCFG, NETWORK ],
[ "gateway", \&Utils::Replace::set_sh, IFCFG, GATEWAY ],
[ "essid", \&Utils::Replace::set_sh, IFCFG, WIRELESS_ESSID ],
[ "key", \&Utils::Replace::set_sh, IFCFG, WIRELESS_KEY ],
[ "key_type", \&set_wep_key_full, [ \&Utils::Replace::set_sh, IFCFG, WIRELESS_KEY, "%key%" ]],
[ "update_dns", \&Utils::Replace::set_sh_bool, IFCFG, PEERDNS ],
[ "remote_address", \&Utils::Replace::set_sh, IFCFG, REMIP ],
[ "login", \&Utils::Replace::set_sh, IFCFG, PAPNAME ],
[ "serial_port", \&Utils::Replace::set_sh, IFCFG, MODEMPORT ],
[ "section", \&Utils::Replace::set_sh, IFCFG, WVDIALSECT ],
[ "set_default_gw", \&Utils::Replace::set_sh_bool, IFCFG, DEFROUTE ],
[ "persist", \&Utils::Replace::set_sh_bool, IFCFG, PERSIST ],
[ "phone_number", \&Utils::Replace::set_chat, CHAT, "^atd[^0-9]*([#\*0-9, \-]+)" ],
# [ "update_dns", \&gst_network_pump_set_nodns, PUMP, "%dev%", "%bootproto%" ],
# [ "dns1", \&Utils::Replace::set_sh, IFCFG, DNS1 ],
# [ "dns2", \&Utils::Replace::set_sh, IFCFG, DNS2 ],
# [ "mtu", \&Utils::Replace::set_sh, IFCFG, MTU ],
# [ "mru", \&Utils::Replace::set_sh, IFCFG, MRU ],
# [ "serial_speed", \&Utils::Replace::set_sh, IFCFG, LINESPEED ],
# [ "ppp_options", \&Utils::Replace::set_sh, IFCFG, PPPOPTIONS ],
# [ "debug", \&Utils::Replace::set_sh_bool, IFCFG, DEBUG ],
# [ "serial_escapechars", \&Utils::Replace::set_sh_bool, IFCFG, ESCAPECHARS ],
# [ "serial_hwctl", \&Utils::Replace::set_sh_bool, IFCFG, HARDFLOWCTL ],
# wvdial settings
[ "phone_number", \&check_type, [ TYPE, "modem", \&Utils::Replace::set_ini, WVDIAL, "Dialer %section%", "Phone" ]],
[ "update_dns", \&check_type, [ TYPE, "modem", \&Utils::Replace::set_ini, WVDIAL, "Dialer %section%", "Auto DNS" ]],
[ "login", \&check_type, [ TYPE, "modem", \&Utils::Replace::set_ini, WVDIAL, "Dialer %section%", "Username" ]],
[ "password", \&check_type, [ TYPE, "modem", \&Utils::Replace::set_ini, WVDIAL, "Dialer %section%", "Password" ]],
[ "serial_port", \&check_type, [ TYPE, "modem", \&Utils::Replace::set_ini, WVDIAL, "Dialer %section%", "Modem" ]],
[ "serial_speed", \&check_type, [ TYPE, "modem", \&Utils::Replace::set_ini, WVDIAL, "Dialer %section%", "Baud" ]],
[ "set_default_gw", \&check_type, [ TYPE, "modem", \&Utils::Replace::set_ini, WVDIAL, "Dialer %section%", "Check Def Route" ]],
[ "persist", \&check_type, [ TYPE, "modem", \&Utils::Replace::set_ini, WVDIAL, "Dialer %section%", "Auto Reconnect" ]],
[ "dial_command", \&check_type, [ TYPE, "modem", \&Utils::Replace::set_ini, WVDIAL, "Dialer %section%", "Dial Command" ]],
[ "external_line", \&check_type, [ TYPE, "modem", \&Utils::Replace::set_ini, WVDIAL, "Dialer %section%", "Dial Prefix" ]],
]
},
"conectiva-9" =>
{
iface_set => \&activate_interface,
iface_delete => \&delete_rh62_interface,
fn =>
{
IFCFG => "/etc/sysconfig/network-scripts/ifcfg-#iface#",
CHAT => "/etc/sysconfig/network-scripts/chat-#iface#",
IFACE => "#iface#",
TYPE => "#type#",
WVDIAL => "/etc/wvdial.conf",
PUMP => "/etc/pump.conf"
},
table =>
[
[ "bootproto", \&set_rh_bootproto, IFCFG, BOOTPROTO ],
[ "auto", \&Utils::Replace::set_sh_bool, IFCFG, ONBOOT ],
[ "dev" , \&Utils::Replace::set_sh, IFCFG, NAME ],
[ "dev", \&Utils::Replace::set_sh, IFCFG, DEVICE ],
[ "address", \&Utils::Replace::set_sh, IFCFG, IPADDR ],
[ "netmask", \&Utils::Replace::set_sh, IFCFG, NETMASK ],
[ "broadcast", \&Utils::Replace::set_sh, IFCFG, BROADCAST ],
[ "network", \&Utils::Replace::set_sh, IFCFG, NETWORK ],
[ "gateway", \&Utils::Replace::set_sh, IFCFG, GATEWAY ],
[ "essid", \&Utils::Replace::set_sh, IFCFG, WIRELESS_ESSID ],
[ "key", \&Utils::Replace::set_sh, IFCFG, WIRELESS_KEY ],
[ "key_type", \&set_wep_key_full, [ \&Utils::Replace::set_sh, IFCFG, WIRELESS_KEY, "%key%" ]],
[ "update_dns", \&Utils::Replace::set_sh_bool, IFCFG, PEERDNS ],
[ "remote_address", \&Utils::Replace::set_sh, IFCFG, REMIP ],
[ "login", \&Utils::Replace::set_sh, IFCFG, PAPNAME ],
[ "serial_port", \&Utils::Replace::set_sh, IFCFG, MODEMPORT ],
[ "section", \&Utils::Replace::set_sh, IFCFG, WVDIALSECT ],
[ "set_default_gw", \&Utils::Replace::set_sh_bool, IFCFG, DEFROUTE ],
[ "persist", \&Utils::Replace::set_sh_bool, IFCFG, PERSIST ],
[ "phone_number", \&Utils::Replace::set_chat, CHAT, "^atd[^0-9]*([#\*0-9, \-]+)" ],
# [ "update_dns", \&gst_network_pump_set_nodns, PUMP, "%dev%", "%bootproto%" ],
# [ "dns1", \&Utils::Replace::set_sh, IFCFG, DNS1 ],
# [ "dns2", \&Utils::Replace::set_sh, IFCFG, DNS2 ],
# [ "mtu", \&Utils::Replace::set_sh, IFCFG, MTU ],
# [ "mru", \&Utils::Replace::set_sh, IFCFG, MRU ],
# [ "serial_speed", \&Utils::Replace::set_sh, IFCFG, LINESPEED ],
# [ "ppp_options", \&Utils::Replace::set_sh, IFCFG, PPPOPTIONS ],
# [ "debug", \&Utils::Replace::set_sh_bool, IFCFG, DEBUG ],
# [ "serial_escapechars", \&Utils::Replace::set_sh_bool, IFCFG, ESCAPECHARS ],
# [ "serial_hwctl", \&Utils::Replace::set_sh_bool, IFCFG, HARDFLOWCTL ],
# wvdial settings
[ "phone_number", \&check_type, [ TYPE, "modem", \&Utils::Replace::set_ini, WVDIAL, "Dialer %section%", "Phone" ]],
[ "update_dns", \&check_type, [ TYPE, "modem", \&Utils::Replace::set_ini, WVDIAL, "Dialer %section%", "Auto DNS" ]],
[ "login", \&check_type, [ TYPE, "modem", \&Utils::Replace::set_ini, WVDIAL, "Dialer %section%", "Username" ]],
[ "password", \&check_type, [ TYPE, "modem", \&Utils::Replace::set_ini, WVDIAL, "Dialer %section%", "Password" ]],
[ "serial_port", \&check_type, [ TYPE, "modem", \&Utils::Replace::set_ini, WVDIAL, "Dialer %section%", "Modem" ]],
[ "serial_speed", \&check_type, [ TYPE, "modem", \&Utils::Replace::set_ini, WVDIAL, "Dialer %section%", "Baud" ]],
[ "set_default_gw", \&check_type, [ TYPE, "modem", \&Utils::Replace::set_ini, WVDIAL, "Dialer %section%", "Check Def Route" ]],
[ "persist", \&check_type, [ TYPE, "modem", \&Utils::Replace::set_ini, WVDIAL, "Dialer %section%", "Auto Reconnect" ]],
[ "dial_command", \&check_type, [ TYPE, "modem", \&Utils::Replace::set_ini, WVDIAL, "Dialer %section%", "Dial Command" ]],
[ "external_line", \&check_type, [ TYPE, "modem", \&Utils::Replace::set_ini, WVDIAL, "Dialer %section%", "Dial Prefix" ]],
]
},
"debian-3.0" =>
{
iface_set => \&activate_interface,
iface_delete => \&delete_debian_interface,
fn =>
{
INTERFACES => "/etc/network/interfaces",
IFACE => "#iface#",
TYPE => "#type#",
CHAT => "/etc/chatscripts/%section%",
PPP_OPTIONS => "/etc/ppp/peers/%section%",
PAP => "/etc/ppp/pap-secrets",
CHAP => "/etc/ppp/chap-secrets",
},
table =>
[
[ "_always_", \&set_debian_bootproto, [INTERFACES, IFACE]],
[ "bootproto", \&set_debian_bootproto, [INTERFACES, IFACE]],
[ "auto", \&set_debian_auto, [INTERFACES, IFACE]],
[ "address", \&Utils::Replace::set_interfaces_option_str, [INTERFACES, IFACE], "address" ],
[ "netmask", \&Utils::Replace::set_interfaces_option_str, [INTERFACES, IFACE], "netmask" ],
[ "gateway", \&Utils::Replace::set_interfaces_option_str, [INTERFACES, IFACE], "gateway" ],
[ "key_type", \&set_debian_key, [ INTERFACES, IFACE, "%key%", "%essid%" ]],
[ "essid", \&set_debian_essid, [ INTERFACES, IFACE, "%key_type%", "%key%" ]],
# ugly hack for deleting undesired options (due to syntax duality)
[ "essid", \&Utils::Replace::set_interfaces_option_str, [INTERFACES, IFACE], "wireless_essid", "" ],
# End of hack
[ "section", \&Utils::Replace::set_interfaces_option_str, [INTERFACES, IFACE], "provider" ],
[ "remote_address", \&set_debian_remote_address, [INTERFACES, IFACE]],
# Modem stuff
[ "section", \&check_type, [TYPE, "modem", \&Utils::Replace::set_ppp_options_connect, PPP_OPTIONS ]],
[ "phone_number", \&check_type, [TYPE, "modem", \&create_pppscript, CHAT ]],
[ "phone_number", \&check_type, [TYPE, "isdn", \&create_isdn_options, PPP_OPTIONS ]],
[ "update_dns", \&check_type, [TYPE, "(modem|isdn)", \&Utils::Replace::set_kw, PPP_OPTIONS, "usepeerdns" ]],
[ "noauth", \&check_type, [TYPE, "(modem|isdn)", \&Utils::Replace::set_kw, PPP_OPTIONS, "noauth" ]],
[ "set_default_gw", \&check_type, [TYPE, "(modem|isdn)", \&Utils::Replace::set_kw, PPP_OPTIONS, "defaultroute" ]],
[ "persist", \&check_type, [TYPE, "(modem|isdn)", \&Utils::Replace::set_kw, PPP_OPTIONS, "persist" ]],
[ "serial_port", \&check_type, [TYPE, "modem", \&Utils::Replace::set_ppp_options_re, PPP_OPTIONS, "^(/dev/[^ \t]+)" ]],
[ "serial_speed", \&check_type, [TYPE, "modem", \&Utils::Replace::set_ppp_options_re, PPP_OPTIONS, "^([0-9]+)" ]],
[ "login", \&check_type, [TYPE, "(modem|isdn)", \&Utils::Replace::set_ppp_options_re, PPP_OPTIONS, "^user (.*)", "user \"%login%\"" ]],
[ "password", \&check_type, [TYPE, "(modem|isdn)", \&set_pap_passwd, PAP, "%login%" ]],
[ "password", \&check_type, [TYPE, "(modem|isdn)", \&set_pap_passwd, CHAP, "%login%" ]],
[ "dial_command", \&check_type, [TYPE, "modem", \&Utils::Replace::set_chat, CHAT, "(atd[tp])[w#\*0-9, \-]+" ]],
[ "phone_number", \&check_type, [TYPE, "modem", \&Utils::Replace::set_chat, CHAT, "atd[tp]([w#\*0-9, \-]+)" ]],
[ "external_line", \&check_type, [TYPE, "modem", \&Utils::Replace::set_chat, CHAT, "atd[tp]([w#\*0-9, \-]+)", "%external_line%W%phone_number%" ]],
[ "phone_number", \&check_type, [TYPE, "isdn", \&Utils::Replace::set_ppp_options_re, PPP_OPTIONS, "^number (.*)", "number %phone_number%" ]],
[ "external_line", \&check_type, [TYPE, "isdn", \&Utils::Replace::set_ppp_options_re, PPP_OPTIONS, "^number (.*)", "number %external_line%W%phone_number%" ]],
[ "volume", \&check_type, [TYPE, "modem", \&set_modem_volume, CHAT ]],
# [ "serial_escapechars", \&check_type, [TYPE, "modem", \&Utils::Replace::join_first_str, PPP_OPTIONS, "escape", "[ \t]+" ]],
# [ "debug", \&check_type, [TYPE, "(modem|isdn)", \&Utils::Replace::set_kw, PPP_OPTIONS, "debug" ]],
# [ "serial_hwctl", \&check_type, [TYPE, "modem", \&Utils::Replace::set_kw, PPP_OPTIONS, "crtscts" ]],
# [ "mtu", \&check_type, [TYPE, "(modem|isdn)", \&Utils::Replace::join_first_str, PPP_OPTIONS, "mtu", "[ \t]+" ]],
# [ "mru", \&check_type, [TYPE, "(modem|isdn)", \&Utils::Replace::join_first_str, PPP_OPTIONS, "mru", "[ \t]+" ]],
]
},
"suse-9.0" =>
{
iface_set => \&activate_suse_interface,
iface_delete => \&delete_suse_interface,
fn =>
{
IFCFG => "/etc/sysconfig/network/ifcfg-#iface#",
PROVIDERS => "/etc/sysconfig/network/providers/%section%",
ROUTE_CONF => "/etc/sysconfig/network/routes",
IFACE => "#iface#",
TYPE => "#type#",
PPP_OPTIONS => "/etc/ppp/options"
},
table =>
[
[ "auto", \&set_suse_auto, IFCFG, STARTMODE ],
[ "bootproto", \&set_suse_bootproto, IFCFG, BOOTPROTO ],
[ "address", \&Utils::Replace::set_sh, IFCFG, IPADDR ],
[ "netmask", \&Utils::Replace::set_sh, IFCFG, NETMASK ],
[ "remote_address", \&Utils::Replace::set_sh, IFCFG, REMOTE_IPADDR ],
[ "essid", \&Utils::Replace::set_sh, IFCFG, WIRELESS_ESSID ],
[ "key", \&Utils::Replace::set_sh, IFCFG, WIRELESS_KEY ],
[ "key_type", \&set_wep_key_full, [ \&Utils::Replace::set_sh, IFCFG, WIRELESS_KEY, "%key%" ]],
# Modem stuff goes here
[ "serial_port", \&Utils::Replace::set_sh, IFCFG, MODEM_DEVICE ],
[ "ppp_options", \&Utils::Replace::set_sh, IFCFG, PPPD_OPTIONS ],
[ "dial_command", \&Utils::Replace::set_sh, IFCFG, DIALCOMMAND],
[ "external_line", \&Utils::Replace::set_sh, IFCFG, DIALPREFIX],
[ "provider", \&Utils::Replace::set_sh, IFCFG, PROVIDER ],
[ "volume", \&check_type, [ IFACE, "modem", \&set_modem_volume_sh, IFCFG, INIT8 ]],
[ "login", \&Utils::Replace::set_sh, PROVIDERS, USERNAME ],
[ "password", \&Utils::Replace::set_sh, PROVIDERS, PASSWORD ],
[ "phone_number", \&Utils::Replace::set_sh, PROVIDERS, PHONE ],
[ "update_dns", \&Utils::Replace::set_sh_bool, PROVIDERS, MODIFYDNS ],
[ "persist", \&Utils::Replace::set_sh_bool, PROVIDERS, PERSIST ],
[ "set_default_gw", \&Utils::Replace::set_sh_bool, PROVIDERS, DEFAULTROUTE ],
# [ "serial_speed", \&Utils::Replace::set_sh, IFCFG, SPEED ],
# [ "mtu", \&Utils::Replace::set_sh, IFCFG, MTU ],
# [ "mru", \&Utils::Replace::set_sh, IFCFG, MRU ],
# [ "dns1", \&Utils::Replace::set_sh, PROVIDER, DNS1 ],
# [ "dns2", \&Utils::Replace::set_sh, PROVIDER, DNS2 ],
# [ "stupid", \&Utils::Replace::set_sh_bool, PROVIDER, STUPIDMODE ],
]
},
"pld-1.0" =>
{
iface_set => \&activate_interface,
iface_delete => \&delete_pld_interface,
fn =>
{
IFCFG => "/etc/sysconfig/interfaces/ifcfg-#iface#",
CHAT => "/etc/sysconfig/interfaces/data/chat-#iface#",
IFACE => "#iface#",
TYPE => "#type#",
WVDIAL => "/etc/wvdial.conf",
PUMP => "/etc/pump.conf"
},
table =>
[
[ "bootproto", \&set_rh_bootproto, IFCFG, BOOTPROTO ],
[ "auto", \&Utils::Replace::set_sh_bool, IFCFG, ONBOOT ],
[ "dev", \&Utils::Replace::set_sh, IFCFG, DEVICE ],
[ "address", \&set_pld_ipaddr, IFCFG, IPADDR, "address" ],
[ "netmask", \&set_pld_ipaddr, IFCFG, IPADDR, "netmask" ],
[ "gateway", \&Utils::Replace::set_sh, IFCFG, GATEWAY ],
[ "update_dns", \&Utils::Replace::set_sh_bool, IFCFG, PEERDNS ],
[ "remote_address", \&Utils::Replace::set_sh, IFCFG, REMIP ],
[ "login", \&Utils::Replace::set_sh, IFCFG, PAPNAME ],
[ "serial_port", \&Utils::Replace::set_sh, IFCFG, MODEMPORT ],
[ "ppp_options", \&Utils::Replace::set_sh, IFCFG, PPPOPTIONS ],
[ "set_default_gw", \&Utils::Replace::set_sh_bool, IFCFG, DEFROUTE ],
[ "persist", \&Utils::Replace::set_sh_bool, IFCFG, PERSIST ],
[ "phone_number", \&Utils::Replace::set_chat, CHAT, "^atd[^0-9]*([#\*0-9, \-]+)" ]
# [ "name", \&Utils::Replace::set_sh, IFCFG, NAME ],
# [ "broadcast", \&Utils::Replace::set_sh, IFCFG, BROADCAST ],
# [ "network", \&Utils::Replace::set_sh, IFCFG, NETWORK ],
# [ "update_dns", \&gst_network_pump_set_nodns, PUMP, "%dev%", "%bootproto%" ],
# [ "dns1", \&Utils::Replace::set_sh, IFCFG, DNS1 ],
# [ "dns2", \&Utils::Replace::set_sh, IFCFG, DNS2 ],
# [ "mtu", \&Utils::Replace::set_sh, IFCFG, MTU ],
# [ "mru", \&Utils::Replace::set_sh, IFCFG, MRU ],
# [ "serial_speed", \&Utils::Replace::set_sh, IFCFG, LINESPEED ],
# [ "section", \&Utils::Replace::set_sh, IFCFG, WVDIALSECT ],
# [ "debug", \&Utils::Replace::set_sh_bool, IFCFG, DEBUG ],
# [ "serial_escapechars", \&Utils::Replace::set_sh_bool, IFCFG, ESCAPECHARS ],
# [ "serial_hwctl", \&Utils::Replace::set_sh_bool, IFCFG, HARDFLOWCTL ],
]
},
"slackware-9.1.0" =>
{
iface_set => \&activate_slackware_interface,
iface_delete => \&delete_slackware_interface,
fn =>
{
RC_INET_CONF => "/etc/rc.d/rc.inet1.conf",
RC_INET => "/etc/rc.d/rc.inet1",
RC_LOCAL => "/etc/rc.d/rc.local",
IFACE => "#iface#",
TYPE => "#type#",
WIRELESS => "/etc/pcmcia/wireless.opts",
PPP_OPTIONS => "/etc/ppp/options",
PAP => "/etc/ppp/pap-secrets",
CHAP => "/etc/ppp/chap-secrets",
CHAT => "/etc/ppp/pppscript",
},
table =>
[
[ "address", \&Utils::Replace::set_rcinet1conf, [ RC_INET_CONF, IFACE ], IPADDR ],
[ "netmask", \&Utils::Replace::set_rcinet1conf, [ RC_INET_CONF, IFACE ], NETMASK ],
[ "bootproto", \&set_slackware_bootproto, [ RC_INET_CONF, IFACE ] ],
[ "auto", \&set_slackware_auto, [ RC_INET, RC_LOCAL, IFACE ] ],
[ "essid", \&Utils::Replace::set_wireless_opts, [ WIRELESS, IFACE ], \&get_wireless_ifaces, ESSID ],
[ "key", \&Utils::Replace::set_wireless_opts, [ WIRELESS, IFACE ], \&get_wireless_ifaces, KEY ],
[ "key_type", \&set_wep_key_full, [ \&Utils::Replace::set_wireless_opts, WIRELESS, IFACE, \&get_wireless_ifaces, KEY, "%key%" ]],
# Modem stuff
[ "phone_number", \&check_type, [TYPE, "modem", \&create_pppscript, CHAT ]],
[ "phone_number", \&check_type, [TYPE, "modem", \&create_pppgo ]],
[ "update_dns", \&check_type, [TYPE, "modem", \&Utils::Replace::set_kw, PPP_OPTIONS, "usepeerdns" ]],
[ "noauth", \&check_type, [TYPE, "modem", \&Utils::Replace::set_kw, PPP_OPTIONS, "noauth" ]],
[ "set_default_gw", \&check_type, [TYPE, "modem", \&Utils::Replace::set_kw, PPP_OPTIONS, "defaultroute" ]],
[ "debug", \&check_type, [TYPE, "modem", \&Utils::Replace::set_kw, PPP_OPTIONS, "debug" ]],
[ "persist", \&check_type, [TYPE, "modem", \&Utils::Replace::set_kw, PPP_OPTIONS, "persist" ]],
[ "serial_hwctl", \&check_type, [TYPE, "modem", \&Utils::Replace::set_kw, PPP_OPTIONS, "crtscts" ]],
[ "mtu", \&check_type, [TYPE, "modem", \&Utils::Replace::join_first_str, PPP_OPTIONS, "mtu", "[ \t]+" ]],
[ "mru", \&check_type, [TYPE, "modem", \&Utils::Replace::join_first_str, PPP_OPTIONS, "mru", "[ \t]+" ]],
[ "serial_port", \&check_type, [TYPE, "modem", \&Utils::Replace::set_ppp_options_re, PPP_OPTIONS, "^(/dev/[^ \t]+)" ]],
[ "serial_speed", \&check_type, [TYPE, "modem", \&Utils::Replace::set_ppp_options_re, PPP_OPTIONS, "^([0-9]+)" ]],
[ "login", \&check_type, [TYPE, "modem", \&Utils::Replace::set_ppp_options_re, PPP_OPTIONS, "^name \"(.*)\"", "name \"%login%\"" ]],
[ "serial_escapechars", \&check_type, [TYPE, "modem", \&Utils::Replace::join_first_str, PPP_OPTIONS, "escape", "[ \t]+" ]],
[ "password", \&check_type, [TYPE, "modem", \&set_pap_passwd, PAP, "%login%" ]],
[ "password", \&check_type, [TYPE, "modem", \&set_pap_passwd, CHAP, "%login%" ]],
[ "dial_command", \&check_type, [TYPE, "modem", \&Utils::Replace::set_chat, CHAT, "(atd[tp])[w#\*0-9, \-]+" ]],
[ "phone_number", \&check_type, [TYPE, "modem", \&Utils::Replace::set_chat, CHAT, "atd[tp]([w#\*0-9, \-]+)" ]],
[ "external_line", \&check_type, [TYPE, "modem", \&Utils::Replace::set_chat, CHAT, "atd[tp]([w#\*0-9, \-]+)", "%external_line%W%phone_number%" ]],
[ "volume", \&check_type, [TYPE, "modem", \&set_modem_volume, CHAT ]],
#[ "ppp_options", \&check_type, [TYPE, "modem", \&gst_network_set_ppp_options_unsup, PPP_OPTIONS ]],
]
},
"gentoo" =>
{
iface_set => \&activate_gentoo_interface,
iface_delete => \&delete_gentoo_interface,
fn =>
{
NET => "/etc/conf.d/net",
PPPNET => "/etc/conf.d/net.#iface#",
INIT => "net.#iface#",
IFACE => "#iface#",
TYPE => "#type#",
WIRELESS => "/etc/conf.d/wireless",
},
table =>
[
[ "dev", \&create_gentoo_files ],
[ "auto", \&set_gentoo_service_status, INIT, "default" ],
[ "bootproto", \&set_gentoo_bootproto, [ NET, IFACE ]],
[ "address", \&Utils::Replace::set_confd_net_re, NET, "config_%dev%", "^[ \t]*([0-9\.]+)" ],
[ "netmask", \&Utils::Replace::set_confd_net_re, NET, "config_%dev%", "[ \t]+netmask[ \t]+[0-9\.]*", " netmask %netmask%"],
[ "broadcast", \&Utils::Replace::set_confd_net_re, NET, "config_%dev%", "[ \t]+broadcast[ \t]+[0-9\.]*", " broadcast %broadcast%" ],
[ "remote_address", \&Utils::Replace::set_confd_net_re, NET, "config_%dev%", "[ \t]+dest_address[ \t]+[0-9\.]*", " dest_address %remote_address%" ],
# [ "gateway", \&Utils::Replace::set_confd_net_re, NET, "routes_%dev%", "[ \t]*default[ \t]+(via|gw)[ \t]+[0-9\.\:]*", "default via %gateway%" ],
[ "essid", \&Utils::Replace::set_sh, WIRELESS, "essid_%dev%" ],
[ "key", \&Utils::Replace::set_sh, WIRELESS, "key_%essid%" ],
[ "key_type", \&set_wep_key_type, [ \&Utils::Replace::set_sh, WIRELESS, "key_%essid%", "%key%" ]],
# modem stuff
[ "dev", \&check_type, [ TYPE, "modem", \&Utils::Replace::set_sh, PPPNET, PEER ]],
[ "update_dns", \&check_type, [ TYPE, "modem", \&Utils::Replace::set_sh_bool, PPPNET, PEERDNS ]],
[ "mtu", \&Utils::Replace::set_sh, PPPNET, MTU ],
[ "mru", \&Utils::Replace::set_sh, PPPNET, MRU ],
[ "serial_port", \&Utils::Replace::set_sh, PPPNET, MODEMPORT ],
[ "serial_speed", \&Utils::Replace::set_sh, PPPNET, LINESPEED ],
[ "login", \&Utils::Replace::set_sh, PPPNET, USERNAME ],
[ "password", \&Utils::Replace::set_sh, PPPNET, PASSWORD ],
[ "ppp_options", \&Utils::Replace::set_sh, PPPNET, PPPOPTIONS ],
[ "set_default_gw", \&Utils::Replace::set_sh_bool, PPPNET, DEFROUTE ],
[ "debug", \&Utils::Replace::set_sh_bool, PPPNET, DEBUG ],
[ "persist", \&Utils::Replace::set_sh_bool, PPPNET, PERSIST ],
[ "serial_escapechars", \&Utils::Replace::set_sh_bool, PPPNET, ESCAPECHARS ],
[ "serial_hwctl", \&Utils::Replace::set_sh_bool, PPPNET, HARDFLOWCTL ],
[ "phone_number", \&Utils::Replace::set_sh, PPPNET, NUMBER ],
[ "external_line", \&Utils::Replace::set_sh, PPPNET, NUMBER, "%external_line%W%phone_number%" ],
[ "volume", \&set_modem_volume_sh, PPPNET, INITSTRING ],
]
},
"freebsd-5" =>
{
iface_set => \&activate_freebsd_interface,
iface_delete => \&delete_freebsd_interface,
fn =>
{
RC_CONF => "/etc/rc.conf",
STARTIF => "/etc/start_if.#iface#",
PPPCONF => "/etc/ppp/ppp.conf",
IFACE => "#iface#",
TYPE => "#type#",
},
table =>
[
[ "auto", \&set_freebsd_auto, [ RC_CONF, IFACE ]],
[ "bootproto", \&set_freebsd_bootproto, [ RC_CONF, IFACE ]],
[ "address", \&Utils::Replace::set_sh_re, RC_CONF, "ifconfig_%dev%", "inet[ \t]+([0-9\.]+)", "inet %address%" ],
[ "netmask", \&Utils::Replace::set_sh_re, RC_CONF, "ifconfig_%dev%", "netmask[ \t]+([0-9\.]+)", " netmask %netmask%" ],
[ "remote_address", \&Utils::Replace::set_sh_re, RC_CONF, "ifconfig_%dev%", "dest_address[ \t]+([0-9\.]+)", " dest_address %remote_address%" ],
[ "essid", \&set_freebsd_essid, [ RC_CONF, STARTIF, IFACE ]],
# Modem stuff
# we need this for putting an empty ifconfig_tunX command in rc.conf
[ "phone_number", \&Utils::Replace::set_sh, RC_CONF, "ifconfig_%dev%", " " ],
[ "file", \&create_ppp_startif, [ STARTIF, IFACE ]],
[ "persist", \&create_ppp_startif, [ STARTIF, IFACE ], "%file%" ],
[ "serial_port", \&Utils::Replace::set_pppconf, [ PPPCONF, STARTIF, IFACE ], "device" ],
[ "serial_speed", \&Utils::Replace::set_pppconf, [ PPPCONF, STARTIF, IFACE ], "speed" ],
[ "mtu", \&Utils::Replace::set_pppconf, [ PPPCONF, STARTIF, IFACE ], "mtu" ],
[ "mru", \&Utils::Replace::set_pppconf, [ PPPCONF, STARTIF, IFACE ], "mru" ],
[ "login", \&Utils::Replace::set_pppconf, [ PPPCONF, STARTIF, IFACE ], "authname" ],
[ "password", \&Utils::Replace::set_pppconf, [ PPPCONF, STARTIF, IFACE ], "authkey" ],
[ "update_dns", \&Utils::Replace::set_pppconf_bool, [ PPPCONF, STARTIF, IFACE ], "dns" ],
[ "set_default_gw", \&set_pppconf_route, [ PPPCONF, STARTIF, IFACE ], "default HISADDR" ],
[ "phone_number", \&Utils::Replace::set_pppconf, [ PPPCONF, STARTIF, IFACE ], "phone" ],
[ "external_line", \&Utils::Replace::set_pppconf, [ PPPCONF, STARTIF, IFACE ], "phone", "%external_line%W%phone_number%" ],
[ "dial_command", \&set_pppconf_dial_command, [ PPPCONF, STARTIF, IFACE ]],
[ "volume", \&set_pppconf_volume, [ PPPCONF, STARTIF, IFACE ]],
]
},
"solaris-2.11" =>
{
iface_set => \&activate_sunos_interface,
iface_delete => \&delete_sunos_interface,
fn =>
{
INTERFACE => "/etc/hostname.#iface#",
DHCP_FILE => "/etc/dhcp.#iface#",
MASKS_FILE => "/etc/netmasks",
IFACE => "#iface#",
TYPE => "#type#",
DEFAULTROUTER => "/etc/defaultrouter",
CHAT => "/etc/chatscripts/%section%",
PPP_OPTIONS => "/etc/ppp/peers/%section%",
PAP => "/etc/ppp/pap-secrets",
CHAP => "/etc/ppp/chap-secrets",
},
table =>
[
[ "address", \&set_sunos_address, [ INTERFACE, IFACE ]],
[ "netmask", \&set_sunos_netmask, [ INTERFACE, MASKS_FILE, IFACE ], "%address%" ],
[ "gateway", \&set_sunos_gateway, [DEFAULTROUTER, IFACE]],
[ "bootproto", \&set_sunos_bootproto, [ DHCP_FILE, INTERFACE, IFACE ]],
#FIXME: there seems to be no way of setting an interface as noauto without removing the config file
#[ "auto", \&set_sunos_auto, [IFACE]],
[ "essid", \&set_sunos_wireless, [IFACE], "essid" ],
[ "key", \&set_sunos_wireless, [IFACE], "key" ],
[ "key_type", \&set_sunos_wireless, [IFACE], "key_type" ],
# Modem stuff
[ "section", \&check_type, [TYPE, "modem", \&Utils::Replace::set_ppp_options_connect, PPP_OPTIONS ]],
[ "phone_number", \&check_type, [TYPE, "modem", \&create_pppscript, CHAT ]],
[ "phone_number", \&check_type, [TYPE, "isdn", \&create_isdn_options, PPP_OPTIONS ]],
[ "update_dns", \&check_type, [TYPE, "(modem|isdn)", \&Utils::Replace::set_kw, PPP_OPTIONS, "usepeerdns" ]],
[ "noauth", \&check_type, [TYPE, "(modem|isdn)", \&Utils::Replace::set_kw, PPP_OPTIONS, "noauth" ]],
[ "set_default_gw", \&check_type, [TYPE, "(modem|isdn)", \&Utils::Replace::set_kw, PPP_OPTIONS, "defaultroute" ]],
[ "debug", \&check_type, [TYPE, "(modem|isdn)", \&Utils::Replace::set_kw, PPP_OPTIONS, "debug" ]],
[ "persist", \&check_type, [TYPE, "(modem|isdn)", \&Utils::Replace::set_kw, PPP_OPTIONS, "persist" ]],
[ "serial_port", \&check_type, [TYPE, "modem", \&Utils::Replace::set_ppp_options_re, PPP_OPTIONS, "^(/dev/[^ \t]+)" ]],
[ "serial_speed", \&check_type, [TYPE, "modem", \&Utils::Replace::set_ppp_options_re, PPP_OPTIONS, "^([0-9]+)" ]],
[ "login", \&check_type, [TYPE, "(modem|isdn)", \&Utils::Replace::set_ppp_options_re, PPP_OPTIONS, "^user (.*)", "user \"%login%\"" ]],
[ "password", \&check_type, [TYPE, "(modem|isdn)", \&set_pap_passwd, PAP, "%login%" ]],
[ "password", \&check_type, [TYPE, "(modem|isdn)", \&set_pap_passwd, CHAP, "%login%" ]],
[ "dial_command", \&check_type, [TYPE, "modem", \&Utils::Replace::set_chat, CHAT, "(atd[tp])[w#\*0-9, \-]+" ]],
[ "phone_number", \&check_type, [TYPE, "modem", \&Utils::Replace::set_chat, CHAT, "atd[tp]([w#\*0-9, \-]+)" ]],
[ "external_line", \&check_type, [TYPE, "modem", \&Utils::Replace::set_chat, CHAT, "atd[tp]([w#\*0-9, \-]+)", "%external_line%W%phone_number%" ]],
[ "phone_number", \&check_type, [TYPE, "isdn", \&Utils::Replace::set_ppp_options_re, PPP_OPTIONS, "^number (.*)", "number %phone_number%" ]],
[ "external_line", \&check_type, [TYPE, "isdn", \&Utils::Replace::set_ppp_options_re, PPP_OPTIONS, "^number (.*)", "number %external_line%W%phone_number%" ]],
[ "volume", \&check_type, [TYPE, "modem", \&set_modem_volume, CHAT ]],
]
},
);
my $dist = &get_interface_dist ();
return %{$dist_tables{$dist}} if $dist;
&Utils::Report::do_report ("platform_no_table", $Utils::Backend::tool{"platform"});
return undef;
}
sub add_dialup_iface
{
my ($ifaces) = @_;
my ($dev, $i);
$dev = "ppp0" if ($Utils::Backend::tool{"system"} eq "Linux");
$dev = "tun0" if ($Utils::Backend::tool{"system"} eq "FreeBSD");
foreach $i (@$ifaces)
{
return if ($i eq $dev);
}
push @$ifaces, $dev if (&Utils::File::locate_tool ("pppd"));
}
sub get_interfaces_config
{
my (%dist_attrib, %config_hash, %hash, %fn);
my (@config_ifaces, @ifaces, $iface, $dev);
my ($dist, $value, $file, $proc);
my ($i, $j);
my ($modem_settings);
%hash = &get_interfaces_info ();
%dist_attrib = &get_interface_parse_table ();
%fn = %{$dist_attrib{"fn"}};
$proc = $dist_attrib{"ifaces_get"};
# FIXME: is proc necessary? why not using hash keys?
if ($proc)
{
@ifaces = &$proc ();
}
else
{
@ifaces = keys %hash;
}
&add_dialup_iface (\@ifaces);
# clear unneeded hash elements
foreach $i (@ifaces)
{
foreach $j (keys (%fn))
{
${$dist_attrib{"fn"}}{$j} = &Utils::Parse::expand ($fn{$j},
"iface", $i,
"type", &get_interface_type ($i));
}
$iface = &Utils::Parse::get_from_table ($dist_attrib{"fn"},
$dist_attrib{"table"});
&ensure_iface_broadcast_and_network ($iface);
$$iface{"file"} = $i if ($$iface{"file"} eq undef);
if (exists $hash{$i})
{
foreach $k (keys %$iface)
{
$hash{$i}{$k} = $$iface{$k};
}
}
elsif (($i eq "ppp0") || ($dev eq "tun0"))
{
$hash{$i}{"dev"} = $i;
$hash{$i}{"enabled"} = 0;
foreach $k (keys %$iface)
{
$hash{$i}{$k} = $$iface{$k};
}
}
}
return \%hash;
}
sub interface_configured
{
my ($iface) = @_;
my ($type);
# FIXME: checking for "configuration" key is much better
$type = &get_interface_type ($$iface{"dev"});
if ($type eq "ethernet" || $type eq "irlan")
{
return 1 if (($$iface{"bootproto"} eq "static" && $$iface{"address"} && $$iface{"netmask"}) || $$iface{"bootproto"} ne "static");
}
elsif ($type eq "wireless")
{
return 1 if ((($$iface{"bootproto"} eq "static" && $$iface{"address"} && $$iface{"netmask"}) || $$iface{"bootproto"} ne "static") && $$iface{"essid"});
}
elsif ($type eq "plip")
{
return 1 if ($$iface{"address"} && $$iface{"remote_address"});
}
elsif ($type eq "modem" || $type eq "isdn")
{
return 1 if ($$iface{"phone_number"} && $$iface{"login"});
}
return 0;
}
sub set_interface_config
{
my ($dev, $values_hash, $old_hash) = @_;
my (%dist_attrib, %fn);
my ($i, $res);
&Utils::Report::enter ();
&Utils::Report::do_report ("network_iface_set", $dev);
%dist_attrib = &get_interface_replace_table ();
%fn = %{$dist_attrib{"fn"}};
foreach $i (keys (%fn))
{
$ {$dist_attrib{"fn"}}{$i} = &Utils::Parse::expand ($fn{$i},
"iface", $dev,
"type", &get_interface_type ($dev));
}
$res = &Utils::Replace::set_from_table ($dist_attrib{"fn"}, $dist_attrib{"table"},
$values_hash, $old_hash);
&Utils::Report::leave ();
return $res;
}
sub set_interfaces_config
{
my ($values_hash) = @_;
my ($old_hash);
my (%dist_attrib);
my ($i);
my ($delete_proc, $set_proc);
my ($do_active);
&Utils::Report::enter ();
&Utils::Report::do_report ("network_ifaces_set");
%dist_attrib = &get_interface_replace_table ();
$old_hash = &get_interfaces_config ();
$delete_proc = $dist_attrib{"iface_delete"};
$set_proc = $dist_attrib{"iface_set"};
foreach $i (keys %$values_hash)
{
$do_active = $$values_hash{$i}{"enabled"};
# delete it if it's no longer configured
if (&interface_configured ($$old_hash{$i}) &&
!&interface_configured ($$values_hash{$i}))
{
&$set_proc ($$values_hash{$i}, $$old_hash{$i}, 0, 1);
&$delete_proc ($$old_hash{$i});
}
elsif (&interface_configured ($$values_hash{$i}) &&
&interface_changed ($$values_hash{$i}, $$old_hash{$i}))
{
$$values_hash{$i}{"file"} = $$old_hash{$i}{"file"};
&$set_proc ($$values_hash{$i}, $$old_hash{$i}, 0, 1);
&set_interface_config ($i, $$values_hash{$i}, $$old_hash{$i});
&$set_proc ($$values_hash{$i}, $$old_hash{$i}, 1, 1) if ($do_active);
}
elsif ($$values_hash{$i}{"enabled"} != $$old_hash{$i}{"enabled"})
{
# only state has changed
&$set_proc ($$values_hash{$i}, $$old_hash{$i}, $do_active, 1);
}
}
&Utils::Report::leave ();
}
sub bootproto_to_code
{
my ($iface) = @_;
return 0 if (!&interface_configured ($iface));
return ($$iface{"bootproto"} eq "dhcp") ? 2 : 1;
}
sub get_available_configuration_methods
{
my $dist = $Utils::Backend::tool{"platform"};
my $default = [ "static", "dhcp" ];
my %dist_map = (
"ubuntu-7.04" => [ "ipv4ll" ],
);
push @$default, @{$dist_map{$dist}};
return $default;
}
sub get_available_encryptions
{
my $dist = $Utils::Backend::tool{"platform"};
my $default = [ "wep-hex", "wep-ascii" ];
my %dist_map = (
"debian-3.0" => [ "wpa-psk", "wpa2-psk" ],
"ubuntu-7.04" => [ "wpa-psk", "wpa2-psk" ],
);
push @$default, @{$dist_map{$dist}};
return $default;
}
sub get
{
my ($config, $iface, $type);
my ($ethernet, $wireless, $irlan);
my ($plip, $modem, $isdn);
my ($config_methods, $encryptions);
$config = &get_interfaces_config ();
$config_methods = &get_available_configuration_methods ();
$encryptions = &get_available_encryptions ();
foreach $i (keys %$config)
{
$iface = $$config{$i};
$type = &get_interface_type ($i);
if ($type eq "ethernet")
{
push @$ethernet, [ $$iface{"dev"}, $$iface{"enabled"}, $$iface{"auto"},
&bootproto_to_code ($iface),
$$iface{"address"}, $$iface{"netmask"},
$$iface{"network"}, $$iface{"broadcast"}, $$iface{"gateway"},
$$iface{"bootproto"} ];
}
elsif ($type eq "wireless")
{
push @$wireless, [ $$iface{"dev"}, $$iface{"enabled"}, $$iface{"auto"},
&bootproto_to_code ($iface),
$$iface{"address"}, $$iface{"netmask"},
$$iface{"network"}, $$iface{"broadcast"}, $$iface{"gateway"},
$$iface{"essid"},
($$iface{"key_type"} eq "wep-ascii") ? 0 : 1,
$$iface{"key"},
$$iface{"key_type"}, $$iface{"bootproto"} ];
}
elsif ($type eq "irlan")
{
push @$irlan, [ $$iface{"dev"}, $$iface{"enabled"}, $$iface{"auto"},
&bootproto_to_code ($iface),
$$iface{"address"}, $$iface{"netmask"},
$$iface{"network"}, $$iface{"broadcast"}, $$iface{"gateway"},
$$iface{"bootproto"} ];
}
elsif ($type eq "plip")
{
push @$plip, [ $$iface{"dev"}, $$iface{"enabled"}, $$iface{"auto"},
$$iface{"address"}, $$iface{"remote_address"} ];
}
elsif ($type eq "modem")
{
push @$modem, [ $$iface{"dev"}, $$iface{"enabled"}, $$iface{"auto"},
$$iface{"phone_number"}, $$iface{"external_line"},
$$iface{"serial_port"}, $$iface{"volume"},
($$iface{"dial_command"} eq "atdp") ? 1 : 0,
$$iface{"login"}, $$iface{"password"},
$$iface{"set_default_gw"}, $$iface{"update_dns"},
$$iface{"persist"}, $$iface{"noauth"} ];
}
elsif ($type eq "isdn")
{
push @$isdn, [ $$iface{"dev"}, $$iface{"enabled"}, $$iface{"auto"},
$$iface{"phone_number"}, $$iface{"external_line"},
$$iface{"login"}, $$iface{"password"},
$$iface{"set_default_gw"}, $$iface{"update_dns"},
$$iface{"persist"}, $$iface{"noauth"} ];
}
}
return ($ethernet, $wireless, $irlan,
$plip, $modem, $isdn,
$config_methods, $encryptions);
}
sub set
{
my ($ethernet, $wireless, $irlan, $plip, $modem, $isdn) = @_;
my (%hash, $iface, $bootproto, $key_type, $dial_command);
foreach $iface (@$ethernet)
{
if (!$$iface[9])
{
$$iface[9] = ($$iface[3] == 2) ? "dhcp" : "static";
}
$hash{$$iface[0]} = { "dev" => $$iface[0], "enabled" => $$iface[1], "auto" => $$iface[2],
"bootproto" => $$iface[9],
"address" => $$iface[4], "netmask" => $$iface[5], "gateway" => $$iface[8] };
}
foreach $iface (@$wireless)
{
if (!$$iface[13])
{
$$iface[13] = ($$iface[3] == 2) ? "dhcp" : "static";
}
if (!$$iface[12])
{
$$iface[12] = ($$iface[10] == 1) ? "wep-hex" : "wep-ascii";
}
$hash{$$iface[0]} = { "dev" => $$iface[0], "enabled" => $$iface[1], "auto" => $$iface[2],
"bootproto" => $$iface[13],
"address" => $$iface[4], "netmask" => $$iface[5], "gateway" => $$iface[8],
"essid" => $$iface[9], "key_type" => $$iface[12], "key" => $$iface[11] };
}
foreach $iface (@$irlan)
{
if (!$$iface[9])
{
$$iface[9] = ($$iface[3] == 2) ? "dhcp" : "static";
}
$hash{$$iface[0]} = { "dev" => $$iface[0], "enabled" => $$iface[1], "auto" => $$iface[2],
"bootproto" => $$iface[9],
"address" => $$iface[4], "netmask" => $$iface[5], "gateway" => $$iface[8] };
}
foreach $iface (@$plip)
{
$hash{$$iface[0]} = { "dev" => $$iface[0], "enabled" => $$iface[1], "auto" => $$iface[2],
"address" => $$iface[3], "remote_address" => $$iface[4] };
}
foreach $iface (@$modem)
{
$dial_command = ($$iface[7] == 0) ? "ATDT" : "ATDP";
$hash{$$iface[0]} = { "dev" => $$iface[0], "section" => $$iface[0], "enabled" => $$iface[1], "auto" => $$iface[2],
"phone_number" => $$iface[3], "external_line" => $$iface[4],
"serial_port" => $$iface[5], "volume" => $$iface[6],
"dial_command" => $dial_command,
"login" => $$iface[8], "password" => $$iface[9],
"set_default_gw" => $$iface[10], "update_dns"=> $$iface[11],
"persist" => $$iface[12], "noauth" => $$iface[13],
# FIXME: hardcoded serial speed ATM
"serial_speed" => "115200"};
}
foreach $iface (@$isdn)
{
$hash{$$iface[0]} = { "dev" => $$iface[0], "section" => $$iface[0], "enabled" => $$iface[1], "auto" => $$iface[2],
"phone_number" => $$iface[3], "external_line" => $$iface[4],
"login" => $$iface[5], "password" => $$iface[6],
"set_default_gw" => $$iface[7], "update_dns"=> $$iface[8],
"persist" => $$iface[9], "noauth" => $$iface[10] };
}
&set_interfaces_config (\%hash);
}
1;
syntax highlighted by Code2HTML, v. 0.9.1