[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[md@Linux.IT: PPPoA support for pppoeconf]



Something I forgot to send you is Md's patch for PPPoA support.
See below.

Eduard.


----- Forwarded message from Marco d'Itri <md@Linux.IT> -----

Date: Sat, 26 Mar 2005 16:32:52 +0100
From: Marco d'Itri <md@Linux.IT>
Subject: PPPoA support for pppoeconf
To: Eduard Bloch <blade@debian.org>

This proof of concept patch implements the hard parts of PPPoA support.
The current code needs some refactoring before PPPoA support can be
properly added. I could do it, but I suppose you have your own idea
about how the code should be organized.

It does not support the eciadsl user space driver, but this should not
be a big deal considering that no new Globespan-based modems will be
produced.

-- 
ciao,
Marco

--- pppoeconf.orig	2005-03-26 13:30:23.000000000 +0100
+++ pppoeconf	2005-03-26 16:18:41.000000000 +0100
@@ -46,6 +46,97 @@
 
 # EOF SUID wrapper
 
+umask 177
+# make a secure directory
+TMP="`mktemp -d -p /etc/ppp`"
+export TMP
+sectempfile="`mktemp -p $TMP`"
+export sectempfile
+trap "rm -rf '$TMP'" 0 HUP INT TRAP TERM
+
+# check if a modem is present
+find_usb_modem() {
+  local drivers found
+
+  drivers="cxacru speedtch UNICORN"
+  for driver in $drivers; do
+    if test -f /proc/net/atm/$driver:0 ; then
+      found="/proc/net/atm/$driver:0"
+    fi
+  done
+  test "$found" || return 1
+
+  if egrep -q '(^Line up|modem state SHOWTIME)' $found; then
+    return 0 # modem found
+  fi
+
+  title=$(gettext 'LINE NOT UP')
+  text=$(gettext 'The modem driver reported that the DSL connection is not up. Please check your cabling and then run this program again.')
+  $DIALOG --title "$title" --clear --msgbox "$text" 10 60
+  exit 0
+}
+
+configure_br2684() {
+  local iface vpi_vci
+  iface=$1
+  vpi_vci=$2
+
+  if grep -q "^iface[[:space:]]$iface[[:space:]]" /etc/network/interfaces; then
+    return 0
+  fi
+  cat <<EOM >> /etc/network/interfaces
+
+auto $iface
+iface $iface inet manual
+	pre-up modprobe br2684
+	pre-up br2684ctl -b -c \${IFACE#nas} -a $vpi_vci
+	pre-up ip link set up \$IFACE
+	post-down kill \$(cat /var/run/\$IFACE.pid)
+EOM
+  ifup $iface
+}
+
+if find_usb_modem ; then
+  while : ; do
+    atmaddr="8.35"
+    title=$(gettext 'ENTER VPI/VCI')
+    text=$(gettext 'Please enter the VP and VC identifiers used by your ISP in the input box below, in the format VP.VCI. If you wish to see the help screen, delete the default and press OK.')
+    $DIALOG --nocancel --title "$title" --clear \
+      --inputbox "$text" 15 60 $atmaddr 2> "$sectempfile"
+    atmaddr=`cat "$sectempfile"`
+    if test $? != 0 ; then
+      rm -rf "$TMP"
+      exit 1
+    fi
+    if test -z "$atmaddr" ; then
+      # FIXME print a table of VP/VC used in different countries
+      $DIALOG --scrolltext --textbox "$TMP/atmaddrhelp.txt" 17 75
+    else
+      VPI_VCI=$atmaddr
+      break
+    fi
+  done
+
+  # Add the default ATM interface number
+  if echo "$VPI_VCI" | egrep -q '^[0-9]+\.[0-9]+$'; then
+    VPI_VCI="0.$VPI_VCI"
+  fi
+
+  # FIXME PPPoA assumes VCmux and PPPoE assumes LLC. But this usually works.
+  title=$(gettext 'USE PPPoE')
+  text=$(eval_gettext 'An USB modem has been detected. PPP over ATM is the best protocol to use with this kind of modems, but some ISPs only support PPP over Ethernet.
+
+Do you want to use PPP over Ethernet?')
+  $DIALOG --title "$title" --clear --defaultno --yesno "$text" 22 70
+  if test "$?" = "0" ; then
+    BR2684_INTERFACE="nas0"
+    configure_br2684 $BR2684_INTERFACE $VPI_VCI
+  else
+    kernel_pppoa=1
+  fi
+fi
+
+if test -z "$kernel_pppoa" ; then
 modprobe -q pppoe
 # recent ppp packages have a PPPoE discovery helper program
 if test -x /usr/sbin/pppoe-discovery && test -e /proc/net/pppoe ; then
@@ -54,7 +145,7 @@
 else
   DISCOVERY_PROGRAM=pppoe
 fi
-export DISCOVERY_PROGRAM
+fi
 
 # create a default peers file if there is none
 if ! test -r $OPTSFILE ; then
@@ -81,14 +172,6 @@
    printf '\niface dsl-provider inet ppp\n     provider dsl-provider\n' >> $INTFILE
 fi
    
-umask 177
-# make a secure directory
-TMP="`mktemp -d -p /etc/ppp`"
-export TMP
-sectempfile="`mktemp -p $TMP`"
-export sectempfile
-trap "rm -rf '$TMP'" 0 HUP INT TRAP TERM
-
 gettext '
 Most providers send the needed login information per mail. Some providers describe it in odd ways, assuming the user to input the data in their "user-friendly" setup programs. But in fact, these applications generate usuall PPP user names and passwords from the entered data. You can find the real names too and input the correct data in the dialog box.
 
@@ -138,7 +221,10 @@
   complete username: sdt/11111111111
 ' > $TMP/namehelp.txt
 
-if test "$*" ; then 
+if test "$BR2684_INTERFACE" ; then
+   list="$BR2684_INTERFACE"
+   force_manual=1
+elif test "$*" ; then 
    list="$*"
    force_manual=1
 else
@@ -146,6 +232,7 @@
 fi
 
 if test "$list" ; then
+  # FIXME PPPoA does not support probing
    test "$DIALOG" = "whiptail" && escmsg=$(gettext 'Or press ESC to abort here.')
   number=`echo $list | wc -w| tr -d " "`
   text=$(eval_ngettext \
@@ -223,7 +310,13 @@
    $DIALOG --title "$title" --clear --yesno "$text" 15 60
 
    if test "$?" = "0"; then
-      if [ "$kernel_pppoe" ]; then
+      if [ "$kernel_pppoa" ]; then
+	# install the default line
+	grep -q '^.*plugin.*pppoatm.so' $OPTSFILE || echo "plugin pppoatm.so" >> $OPTSFILE
+
+	# set the interface
+	sed -i -e "s,^plugin.\+pppoatm.so[[:space:]]\+[[:digit:]\.]*,plugin pppoatm.so $VPI_VCI," $OPTSFILE
+      elif [ "$kernel_pppoe" ]; then
         # sanity check first
        grep -q "^plugin.*rp-pppoe.so" $OPTSFILE || echo "plugin rp-pppoe.so $iface" >> $OPTSFILE
        # disable the pppoe tunnel command
@@ -335,6 +428,7 @@
      ;;
   esac
   
+  # FIXME: usually not needed when using PPPoA
   # ask about MSS limitation
   title=$(gettext 'LIMITED MSS PROBLEM')
   text=$(gettext "Many providers have routers that do not support TCP packets with a MSS higher than 1460. Usually, outgoing packets have this MSS when they go through one real Ethernet link with the default MTU size (1500). Unfortunately, if you are forwarding packets from other hosts (i.e. doing masquerading) the MSS may be increased depending on the packet size and the route to the client hosts, so your client machines won't be able to connect to some sites. There is a solution: the maximum MSS can be limited by pppoe. You can find more details about this issue in the pppoe documentation.


----- End forwarded message -----

-- 
<asuffield> we should have a button on every computer marked "?", and
  connected to twenty pounds of semtex, and then let evolution take its
  course                                    // quote from #debian-devel



Reply to: