Documentación para usar el Driver Speedtouch con PPPoE de NetBSD

Versión 0.9.1

Intro

Esta documentación está dedicada al proyecto SpeedTouch y en especial a su implementación en NetBSD 2.0 . Se asume que SpeedTouch 1.3.1 está instalado y funcionando.

El problema

La implementación userppp usada por el proyecto SpeedTouch como complemento para el driver USB, tiene los siguientes problemas en el sistema:

Por tal razón usaremos el PPP nativo de NetBSD.

Lo que se necesita

Dispositivo tap(4)

Recientemente, un dispositivo tap(4) está disponible en pkgsrc (rama HEAD), y puede ser construído como un LKM para ser cargado en NetBSD 2.0 y superior. Este dispositivo está disponible también en NetBSD current.

Construyendo el dispositivo:

$ cd /usr/pkgsrc/net/netbsd-tap
# make install

Seguir las instrucciones de la instalación.

Poblando /dev:

# /usr/pkg/sbin/tap_postinstall

Cargando el módulo:

# modload /usr/pkg/lkm/tap.o

Y necesita ser activado en el arranque. También, el programa modem_run puede ser iniciado desde aquí (opcionalmente).

(/etc/ifconfig.tap0)
create
up
! /usr/pkg/sbin/modem_run -f /usr/pkg/libdata/alcaudsl.sys -v 2

Parchando pppoa2

El programa pppoa2 debe ser parchado, porque bridging estaba sólo disponible desde hace algunos días. Este es el parche. Necesita ser añadido al archivo pkgsrc/net/speedtouch/patches/patch-af (inexistente en la versión de pkgsrc speedtouch-1.3.1nb3).

--recorte-->
--- src/pppoa2.c.orig   2004-09-29 16:56:31.000000000 -0400
+++ src/pppoa2.c        2005-02-15 22:01:19.000000000 -0300
@@ -27,7 +27,8 @@
 #ifndef _PPPOA2_C_
 #define _PPPOA2_C_
 
-#if defined (__FreeBSD__) || defined (__linux__) || defined (__OpenBSD__) || defined (__DragonFly__)
+#if defined (__FreeBSD__) || defined (__linux__) || defined (__OpenBSD__) || defined (__DragonFly__) \
+       || defined (__NetBSD__)
 #define BRIDGING_ENABLED
 #endif
 
@@ -575,7 +576,7 @@
        /* In Linux, pppd kill us with a term signal ! */
 #if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__)
        /* ppp is supposed to send SIGHUP to its pty slave so trap SIGHUP */
-       signal(SIGHUP , sighandler);
+       /* signal(SIGHUP , sighandler); */
 #elif defined(__linux__)
        /* on linux it's supposed to be SIGTERM */
        signal(SIGTERM, sighandler);
@@ -1405,7 +1406,7 @@
 {
        int fd;
 
-#if defined (__FreeBSD__) || defined (__DragonFly__)
+#if defined (__FreeBSD__) || defined (__DragonFly__) || defined (__NetBSD__)
   int i;
   char devname[] = "/dev/tapXX";

<--recorte--

En resumen las funciones del parche son:

Según los comentarios en el código fuente, el proceso hijo necesita ser muerto con el fin de liberar el puerto usb. El parche necesita ser revisado.

Entonces se realiza el checksum para el parche:

$ pwd
/usr/pkgsrc/net/speedtouch
$ make makepatchsum

Luego, se construye speedtouch:

$ pwd
/usr/pkgsrc/net/speedtouch
# make deinstall
# make install

Preparando PPPoE

La última cosa para hacer es configurar el dispositivo PPPoE para ser activado en el arranque:

(/etc/ifconfig.pppoe0)
create
#Comment Reemplaza vpi y vci según se requiera.
! /usr/pkg/sbin/pppoa2 -vpi 8 -vci 32 -v 1 -b
#Comment Dejar a pppoe0 usar tap0 como su interfaz Ethernet
! /sbin/pppoectl -e tap0 pppoe0
#Comment Configurar la autentificación
! /sbin/pppoectl pppoe0 myauthproto=pap 'myauthname=XXX' 'myauthsecret=YYY' hisauthproto=none
#Comment Configurar la misma interfaz PPPoE. Esas direcciones son mágicas
#Comment lo que significa que no nos importan las direcciones y dejamos que el PPP
#Comment remoto las escoja.
0.0.0.0 0.0.0.1 up
(/etc/ppp/ip-up)
#!/bin/sh
/sbin/route add default $5
/etc/rc.d/ipfilter reload
# cualquier cosa que se quiera habilitar cuando el enlace suba
(/etc/ppp/ip-down)
#!/bin/sh
/sbin/route delete default $5
(/etc/rc.conf)
net_interfaces="tap0 pppoe0" 	## añadir otras interfaces según se necesite
adsl=NO				# no se necesita
ifwatchd=YES			# mira la interfaz y ejecuta ip-up o ip-down

TODO

CONTACTO

César Catrián C.
http://mioficina.cjc.cl/