From c782fd3475126127875ef4390f53a91108eee840 Mon Sep 17 00:00:00 2001 From: Olivier Blin Date: Wed, 26 Nov 2008 16:44:29 +0000 Subject: add support for ATM bridging (for pppoe over USB modems, #35797) --- lib/network/connection/xdsl.pm | 36 ++++++++++++++++++++++++++++-------- lib/network/network.pm | 2 +- 2 files changed, 29 insertions(+), 9 deletions(-) (limited to 'lib') diff --git a/lib/network/connection/xdsl.pm b/lib/network/connection/xdsl.pm index cf7e74e..56cd294 100644 --- a/lib/network/connection/xdsl.pm +++ b/lib/network/connection/xdsl.pm @@ -30,6 +30,18 @@ sub uses_ppp { !member($self->{protocol}, @non_ppp_protocols); } +sub uses_atm_arp { + my ($self) = @_; + $self->{device}{xdsl_type} eq 'usb' && !$self->uses_ppp; +} +sub get_atm_arp_interface { "atm0" } + +sub uses_atm_bridging { + my ($self) = @_; + $self->{device}{xdsl_type} eq 'usb' && member($self->{protocol}, qw(pppoe)); +} +sub get_atm_bridging_interface { "nas0" } + my %protocol_settings = ( pppoa => { plugin => sub { @@ -303,13 +315,19 @@ sub build_ifcfg_settings { my $settings = { if_($self->uses_ppp, TYPE => 'ADSL'), }; - if ($self->{device}{xdsl_type} eq 'usb' && !$self->uses_ppp) { + if ($self->uses_atm_arp) { #- use ATMARP with the atm0 interface - put_in_hash({ - DEVICE => "atm0", + put_in_hash($settings, { + DEVICE => $self->get_atm_arp_interface, ATM_ADDR => join('.', @{$self->{access}{peer}}{qw(vpi vci)}), MII_NOT_SUPPORTED => "yes", - }, $settings); + }); + } + if ($self->uses_atm_bridging) { + put_in_hash($settings, { + ATM_DEVICE => $self->get_atm_bridging_interface, + ATM_ADDR => join('.', @{$self->{access}{peer}}{qw(vpi vci)}), + }); } $self->network::connection::build_ifcfg_settings($settings); } @@ -322,14 +340,16 @@ sub unload_connection { sub install_packages { my ($self, $in) = @_; - my $packages = { + my $per_type_packages = { pppoa => [ qw(ppp-pppoatm) ], pppoe => [ qw(rp-pppoe) ], pptp => [ qw(pptp-linux) ], capi => [ qw(ppp) ], - }->{$self->{protocol}}; - if ($packages && !$in->do_pkgs->install(@$packages)) { - $in->ask_warn(N("Error"), N("Could not install the packages (%s)!", @$packages)); + }; + my @packages = @{$per_type_packages->{$self->{protocol}} || []}; + push @packages, 'linux-atm' if $self->uses_atm_arp || $self->uses_atm_bridging; + if (@packages && !$in->do_pkgs->install(@packages)) { + $in->ask_warn(N("Error"), N("Could not install the packages (%s)!", @packages)); return; } if ($self->{protocol} eq 'capi') { diff --git a/lib/network/network.pm b/lib/network/network.pm index 5f6df53..587efeb 100644 --- a/lib/network/network.pm +++ b/lib/network/network.pm @@ -181,7 +181,7 @@ sub update_broadcast_and_network { sub write_interface_settings { my ($intf, $file) = @_; - setVarsInSh($file, $intf, qw(DEVICE BOOTPROTO IPADDR NETMASK NETWORK BROADCAST GATEWAY ONBOOT HWADDR METRIC MII_NOT_SUPPORTED TYPE USERCTL ATM_ADDR ETHTOOL_OPTS VLAN MTU DNS1 DNS2 DOMAIN RESOLV_MODS LINK_DETECTION_DELAY), + setVarsInSh($file, $intf, qw(DEVICE BOOTPROTO IPADDR NETMASK NETWORK BROADCAST GATEWAY ONBOOT HWADDR METRIC MII_NOT_SUPPORTED TYPE USERCTL ATM_ADDR ATM_DEVICE ETHTOOL_OPTS VLAN MTU DNS1 DNS2 DOMAIN RESOLV_MODS LINK_DETECTION_DELAY), qw(WIRELESS_MODE WIRELESS_ESSID WIRELESS_NWID WIRELESS_FREQ WIRELESS_SENS WIRELESS_RATE WIRELESS_ENC_KEY WIRELESS_ENC_MODE WIRELESS_RTS WIRELESS_FRAG WIRELESS_IWCONFIG WIRELESS_IWSPY WIRELESS_IWPRIV WIRELESS_WPA_DRIVER WIRELESS_WPA_REASSOCIATE), qw(DVB_ADAPTER_ID DVB_NETWORK_DEMUX DVB_NETWORK_PID), qw(IPV6INIT IPV6TO4INIT), -- cgit v1.2.1