summaryrefslogtreecommitdiffstats
path: root/lib/network/adsl.pm
diff options
context:
space:
mode:
authorOlivier Blin <oblin@mandriva.com>2007-05-25 15:39:46 +0000
committerOlivier Blin <oblin@mandriva.com>2007-05-25 15:39:46 +0000
commit1d37bfdbbe874abd6dcb5563eea19f531de09e1c (patch)
tree74845e43ed8fa59c7aaafd1a87efaa6b0c83c228 /lib/network/adsl.pm
parentc6ba983db7d5a82ee63599e775be0f8211447c72 (diff)
downloaddrakx-net-1d37bfdbbe874abd6dcb5563eea19f531de09e1c.tar
drakx-net-1d37bfdbbe874abd6dcb5563eea19f531de09e1c.tar.gz
drakx-net-1d37bfdbbe874abd6dcb5563eea19f531de09e1c.tar.bz2
drakx-net-1d37bfdbbe874abd6dcb5563eea19f531de09e1c.tar.xz
drakx-net-1d37bfdbbe874abd6dcb5563eea19f531de09e1c.zip
sync with 2007.1 (because of SVN loss)2007.1
Diffstat (limited to 'lib/network/adsl.pm')
-rw-r--r--lib/network/adsl.pm334
1 files changed, 25 insertions, 309 deletions
diff --git a/lib/network/adsl.pm b/lib/network/adsl.pm
index 3768c17..c012219 100644
--- a/lib/network/adsl.pm
+++ b/lib/network/adsl.pm
@@ -4,10 +4,6 @@ use common;
use run_program;
use network::tools;
use modules;
-use vars qw(@ISA @EXPORT);
-
-@ISA = qw(Exporter);
-@EXPORT = qw(adsl_conf_backend);
sub adsl_probe_info {
my ($net) = @_;
@@ -16,12 +12,16 @@ sub adsl_probe_info {
foreach (qw(/etc/ppp/peers/ppp0 /etc/ppp/options /etc/ppp/options.adsl)) {
($login) = map { if_(/^user\s+"([^"]+)"/, $1) } cat_("$::prefix/$_") if !$login && -r "$::prefix/$_";
}
- my %pppoe_conf; %pppoe_conf = getVarsFromSh($pppoe_file) if (!exists $net->{adsl}{method} || $net->{adsl}{method} eq 'pppoe') && -f $pppoe_file;
- $login ||= $pppoe_conf{USER};
+ my %pppoe_conf = -f $pppoe_file && getVarsFromSh($pppoe_file);
+ $login = $pppoe_conf{USER} if !$login || $net->{adsl}{method} eq 'pppoe';
my $passwd = network::tools::passwd_by_login($login);
if (!$net->{adsl}{vpi} && !$net->{adsl}{vci}) {
- ($net->{adsl}{vpi}, $net->{adsl}{vci}) =
- (map { if_(/^.*-vpi\s+(\d+)\s+-vci\s+(\d+)/, map { sprintf("%x", $_) } $1, $2) } cat_("$::prefix/etc/ppp/peers/ppp0"));
+ foreach (cat_("$::prefix/etc/ppp/peers/ppp0")) {
+ if (/^.*-vpi\s+(\d+)\s+-vci\s+(\d+)/ || /^plugin pppoatm.so (\d+)\.(\d+)$/) {
+ ($net->{adsl}{vpi}, $net->{adsl}{vci}) = ($1, $2);
+ last;
+ }
+ }
}
$pppoe_conf{DNS1} ||= '';
$pppoe_conf{DNS2} ||= '';
@@ -29,308 +29,24 @@ sub adsl_probe_info {
add2hash($net->{adsl}, { login => $login, passwd => $passwd });
}
-sub adsl_detect() {
- require list_modules;
- require detect_devices;
- my @modules = list_modules::category2modules('network/usb_dsl');
- # return an hash compatible with what drakconnect expect us to return:
- my %compat = (
- 'speedtch' => 'speedtouch',
- 'eagle-usb' => 'sagem',
- );
-
- return {
- bewan => [ detect_devices::getBewan() ],
- eci => [ detect_devices::getECI() ],
- map { $compat{$_} || $_ => [ detect_devices::matching_driver($_) ] } @modules,
- };
-}
-
-sub sagem_set_parameters {
- my ($net) = @_;
- my %l = map { $_ => sprintf("%08s", $net->{adsl}{$_}) } qw(vci vpi Encapsulation);
-
- my $static_ip = $net->{adsl}{method} eq 'static' && $net->{ifcfg}{sagem}{IPADDR};
- foreach my $cfg_file (qw(/etc/analog/adiusbadsl.conf /etc/eagle-usb/eagle-usb.conf)) {
- substInFile {
- s/Linetype=.*\n/Linetype=0000000A\n/; #- use CMVs
- s/VCI=.*\n/VCI=$l{vci}\n/;
- s/VPI=.*\n/VPI=$l{vpi}\n/;
- s/Encapsulation=.*\n/Encapsulation=$l{Encapsulation}\n/;
- s/ISP=.*\n/ISP=$net->{adsl}{provider_id}\n/;
- s/STATIC_IP=.*\n//;
- s!</eaglectrl>!STATIC_IP=$static_ip\n</eaglectrl>! if $static_ip;
- } "$::prefix$cfg_file";
- }
- #- create CMV symlinks for both POTS and ISDN lines
- foreach my $type (qw(p i)) {
- my $cmv;
- my ($country) = $net->{adsl}{provider_id} =~ /^([a-zA-Z]+)\d+$/;
- #- try to find a CMV for this specific ISP
- $cmv = "$::prefix/etc/eagle-usb/CMVe${type}$net->{adsl}{provider_id}.txt" if $net->{adsl}{provider_id};
- #- if not found, try to found a CMV for the country
- -f $cmv or $cmv = "$::prefix/etc/eagle-usb/CMVe${type}${country}.txt";
- #- fallback on the generic CMV if no other matched
- -f $cmv or $cmv = "$::prefix/etc/eagle-usb/CMVe${type}WO.txt";
- symlinkf($cmv, "$::prefix/etc/eagle-usb/CMVe${type}.txt");
- }
- #- remove this otherwise eaglectrl won't start
- unlink("$::prefix/etc/eagle-usb/eagle-usb_must_be_configured");
-}
-
sub adsl_conf_backend {
- my ($in, $modules_conf, $net) = @_;
-
- my $bewan_module;
- $bewan_module = $net->{adsl}{bus} eq 'PCI' ? 'unicorn_pci_atm' : 'unicorn_usb_atm' if $net->{adsl}{device} eq "bewan";
-
- my $adsl_type = $net->{adsl}{method};
- my $adsl_device = $net->{adsl}{device};
-
- # all supported modems came with their own pppoa module, so no need for "plugin pppoatm.so"
- my %modems =
- (
- bewan =>
- {
- start => qq(
-# ActivationMode=1
-modprobe $bewan_module
-# wait for the modem to be set up:
-sleep 10
-),
- stop => qq(modprobe -r $bewan_module),
- plugin => {
- pppoa => "pppoatm.so " . join('.', hex($net->{adsl}{vpi}), hex($net->{adsl}{vci}))
- },
- ppp_options => qq(
-default-asyncmap
-hide-password
-noaccomp
-nobsdcomp
-nodeflate
-novj novjccomp
-lcp-echo-interval 20
-lcp-echo-failure 3
-sync
-),
- },
-
- speedtouch =>
- {
- modules => [ qw(speedtch) ],
- start => '/usr/bin/speedtouch-start --nocall',
- overide_script => 1,
- server => {
- pppoa => qq("/usr/sbin/pppoa3 -c")
- },
- plugin => {
- pppoa => "pppoatm.so " . join('.', hex($net->{adsl}{vpi}), hex($net->{adsl}{vci})),
- },
- ppp_options => qq(
-sync
-noaccomp),
- aliases => [
- ['char-major-108', 'ppp_generic'],
- ['tty-ldisc-3', 'ppp_async'],
- ['tty-ldisc-13', 'n_hdlc'],
- ['tty-ldisc-14', 'ppp_synctty'],
- ['ppp-compress-21', 'bsd_comp'],
- ['ppp-compress-24', 'ppp_deflate'],
- ['ppp-compress-26', 'ppp_deflate']
- ],
- },
-
- sagem =>
- {
- modules => [ qw(eagle-usb) ],
- start => '/sbin/eaglectrl -i >/dev/null 2>/dev/null || /sbin/eaglectrl -d',
- stop => "/usr/bin/killall pppoa",
- get_intf => '/sbin/eaglectrl -i',
- server => {
- pppoa => q("/sbin/fctStartAdsl -t 1 -i"),
- },
- ppp_options => qq(
-mru 1492
-mtu 1492
-nobsdcomp
-nodeflate
-noaccomp -am
-novjccomp),
- aliases => [
- ['char-major-108', 'ppp_generic'],
- ['tty-ldisc-3', 'ppp_async'],
- ['tty-ldisc-13', 'n_hdlc'],
- ['tty-ldisc-14', 'ppp_synctty']
- ],
- },
-
- eci =>
- {
- start => '/usr/bin/startmodem',
- server => {
- pppoe => qq("/usr/bin/pppoeci -v 1 -vpi $net->{adsl}{vpi} -vci $net->{adsl}{vci}"),
- },
- ppp_options => qq(
-noipdefault
-sync
-noaccomp
-linkname eciadsl
-lcp-echo-interval 0)
- },
-
- pptp_modem =>
- {
- server => {
- pptp => qq("/usr/sbin/pptp 10.0.0.138 --nolaunchpppd"),
- },
- },
-
- capi_modem =>
- {
- ppp_options => qq(
-connect /bin/true
-ipcp-accept-remote
-ipcp-accept-local
-
-sync
-noauth
-lcp-echo-interval 5
-lcp-echo-failure 3
-lcp-max-configure 50
-lcp-max-terminate 2
-
-noccp
-noipx
-mru 1492
-mtu 1492),
- plugin => {
- capi => qq(capiplugin.so
-avmadsl)
- },
- },
- );
-
- my %generic =
- (
- pppoe =>
- {
- server => '"pppoe -I ' . (exists $modems{$adsl_device}{get_intf} ? "`$modems{$adsl_device}{get_intf}`" : $net->{adsl}{ethernet_device}) . '"',
- ppp_options => qq(default-asyncmap
-mru 1492
-mtu 1492
-noaccomp
-noccp
-nobsdcomp
-novjccomp
-nodeflate
-lcp-echo-interval 20
-lcp-echo-failure 3
-),
- }
- );
-
- if ($adsl_type =~ /^pp|^capi$/) {
- mkdir_p("$::prefix/etc/ppp");
- $in->do_pkgs->install('ppp');
- my %packages = (
- pppoa => [ qw(ppp-pppoatm) ],
- pppoe => [ qw(ppp-pppoe rp-pppoe) ],
- pptp => [ qw(pptp-linux) ],
- capi => [ qw(isdn4k-utils) ], #- capi4linux service
- );
- $in->do_pkgs->install(@{$packages{$adsl_type}});
-
- my $pty_option =
- exists $modems{$adsl_device}{server}{$adsl_type} ? "pty $modems{$adsl_device}{server}{$adsl_type}" :
- exists $generic{$adsl_type}{server} ? "pty $generic{$adsl_type}{server}" :
- "";
- my $plugin = exists $modems{$adsl_device}{plugin}{$adsl_type} && "plugin $modems{$adsl_device}{plugin}{$adsl_type}";
- my $noipdefault = $adsl_type eq 'pptp' ? '' : 'noipdefault';
- my $ppp_options =
- exists $modems{$adsl_device}{ppp_options} ? $modems{$adsl_device}{ppp_options} :
- exists $generic{$adsl_type}{ppp_options} ? $generic{$adsl_type}{ppp_options} :
- "";
- output("$::prefix/etc/ppp/peers/ppp0",
-qq(lock
-persist
-noauth
-usepeerdns
-defaultroute
-$noipdefault
-$ppp_options
-kdebug 1
-nopcomp
-noccp
-novj
-holdoff 4
-maxfail 25
-$pty_option
-$plugin
-user "$net->{adsl}{login}"
-));
-
- network::tools::write_secret_backend($net->{adsl}{login}, $net->{adsl}{passwd});
-
- my $ethernet_device = $net->{adsl}{ethernet_device};
- if ($ethernet_device =~ /^eth/) {
- $net->{ifcfg}{$ethernet_device} = {
- DEVICE => $ethernet_device,
- BOOTPROTO => 'none',
- NETMASK => '255.255.255.0',
- NETWORK => '10.0.0.0',
- BROADCAST => '10.0.0.255',
- MII_NOT_SUPPORTED => 'yes',
- ONBOOT => 'yes',
- };
- }
- }
-
- #- FIXME: ppp0 and ippp0 are hardcoded
- my $metric = network::tools::get_default_metric("adsl"); #- FIXME, do not override if already set
- put_in_hash($net->{ifcfg}{ppp0} ||= {}, {
- DEVICE => 'ppp0',
- TYPE => 'ADSL',
- METRIC => $metric,
- }) unless member($adsl_type, qw(static dhcp));
- #- don't overwrite ONBOOT setting, it may have been handled earlier in netconnect
- $net->{ifcfg}{ppp0}{ONBOOT} ||= 'yes';
-
- #- remove file used with sagem for dhcp/static connections
- unlink("$::prefix/etc/sysconfig/network-scripts/ifcfg-sagem");
-
- #- set vpi, vci and encapsulation parameters for sagem
- $adsl_device eq 'sagem' and sagem_set_parameters($net);
-
- #- set aliases
- if (exists $modems{$adsl_device}{aliases}) {
- $modules_conf->set_alias($_->[0], $_->[1]) foreach @{$modems{$adsl_device}{aliases}};
- $::isStandalone and $modules_conf->write;
- }
- #- remove the "speedtch off" alias that was written by Mandrakelinux 10.0
- $adsl_device eq 'speedtouch' and $modules_conf->remove_alias('speedtch');
-
- if ($adsl_type eq "capi") {
- require network::isdn;
- network::isdn::setup_capi_conf($in, $net->{adsl}{capi_card});
- services::disable('isdn4linux');
- services::enable('capi4linux');
-
- #- install and run drdsl for dsl connections, once capi driver is loaded
- $in->do_pkgs->ensure_is_installed_if_available("drdsl", "/usr/sbin/drdsl");
- run_program::rooted($::prefix, "/usr/sbin/drdsl");
- }
-
- #- load modules and run modem-specific start programs
- #- useful during install, or in case the packages have been installed after the device has been plugged
- my @modules = (@{$modems{$adsl_device}{modules}}, map { $_->[1] } @{$modems{$adsl_device}{aliases}});
- @modules or @modules = qw(ppp_synctty ppp_async ppp_generic n_hdlc); #- required for pppoe/pptp connections
- #- pppoa connections need the pppoatm module
- #- pppd should run "modprobe pppoatm", but it will fail during install
- push @modules, 'pppoatm' if $adsl_type eq 'pppoa';
- foreach (@modules) {
- eval { modules::load($_) } or log::l("failed to load $_ module: $@");
- }
- $modems{$adsl_device}{start} and run_program::rooted($::prefix, $modems{$adsl_device}{start});
+ my ($in, $net) = @_;
+
+ require network::connection::xdsl;
+ my $xdsl = network::connection::xdsl->new(
+ $net->{adsl}{method} eq "capi" ?
+ $net->{adsl}{capi_card} :
+ { driver => $net->{adsl}{driver}, ethernet_device => $net->{adsl}{ethernet_device} });
+ $xdsl->{protocol} = $net->{adsl}{method};
+ $xdsl->{access}{login} = $net->{adsl}{login};
+ $xdsl->{access}{password} = $net->{adsl}{passwd};
+ $xdsl->{access}{vpi} = $net->{adsl}{vpi};
+ $xdsl->{access}{vci} = $net->{adsl}{vci};
+
+ $xdsl->install_packages($in);
+ $xdsl->unload_connection;
+ $xdsl->write_settings($net);
+ $xdsl->prepare_connection;
}
1;