BACK
C.V.S
Emacs
Euro
Fontes
FreeADSL
Index
Logiciels
Portable

L'ADSL chez FREE sous Linux Penguin

J'ai eu tellement de problèmes à configurer mon ADSL sous linux avec le SAGEM FAST800 que j'ai décidé de faire une page d'aide pour qu'éventuellement mon expérience puisse servir à d'autres.

Première chose à connaître, l'adresse des forums sur le sujet ;-) dslvalley.com

L'ADSL est proposé par Free Telecom selon deux formules techniques.

FreeBox FreeBox

La FreeBox est proposée pour l'instant principalement en région parisienne. Il s'agit d'un équipement terminal de Free qui s'interface directement avec les équipements de Free Telecom. Pour fonctionner, votre ligne doit être dégroupée, c'est-à-dire que le matériel de télécommunications de FreeTelecom doit avoir été installé dans les locaux techniques de France Telecom qui desservent votre ligne téléphonique. C'est la raison pour laquelle, six mois après m'être inscrit à l'offre Free Box, je l'attends toujours. Il n'y a, à ma connaissance, pas de driver USB sous linux pour la FreeBox. Toutefois, l'intérêt de la FreeBox est de pouvoir atteindre des débits élevés du fait de la connexion directe qu'elle représente sur la plate-forme de Free Telecom, sans les limitations des matériels de France Telecom,(qui ont à gérer l'ensemble des modems ADSL des lignes non dégroupées, et ce quelle que soit le fournisseur d'accès. Or le bus USB n'est pas idéal pour du haut débit et il est largement préférable d'utiliser la connexion ethernet. Dans ce cas, une fois votre carte Ethernet configurée sous linux (ce qui ne devrait poser aucun problème, la plupart des cartes étant reconnues de façon native), la connexion est immédiate.

La suite bientôt j'espère ;-)


Sagem FAST@800 Sagem Fast@800

Le modem ADSL de SAGEM est proposé sur les lignes non dégroupées pour fournir un service ADSL comparable à tous les autres fournisseurs d'accès Internet. La connexion s'effectue alors sur les équipements de télécommunication de France Telecom. Toutefois, beaucoup d'utilisateurs s'étant inscrits à l'offre FreeBox ont reçu malgré tout un modem de ce type du fait des retards d'installation des équipements de dégroupage. Il y a donc deux configurations possibles pour cet équipement.

Drivers

Les drivers USB du modem sont disponibles sur la page de Sagem. On notera que les archives proposées avec le suffixe .tar sont en réalitées compressées (les renommer en .tgz). La configuration proposée ici a été réalisée avec la version F@st800 L.2.0.2. Les drivers fonctionnent de façon satisfaisante mais la procédure d'installation proposée me paraît beaucoup moins satisfaisante. Surtout, elle n'explique pas le fonctionnement et réalise des installations "en cachette". L'installation est à effectuer en tant qu'administrateur "root".

Extraction des sources

Le mieux est de créer un répertoire dédié, puis d'extraire le fichier d'archive dans ce répertoire.
mkdir /usr/src/SagemADSL
cp fast800.2.0.2.tgz /usr/src/SagemADSL
cd /usr/src/SagemADSL
tar zxvf  fast800.2.0.2.tgz
La dernière commande produit une erreur que l'on peut ignorer, mais qui démontre que l'archive a vraiment été fabriquée n'importe comment ! On continue alors par la séquence suivante pour finir l'extraction :
cd /usr/src/SagemADSL/ADI_DRIVER
mv EAGLE_USB_LINUX.tar EAGLE_USB_LINUX.tgz
tar zxvf EAGLE_USB_LINUX.tgz

Compilation du module

La compilation du module du noyau est la première étape de l'installation. Elle suppose que vous avez les sources du noyau installés sur votre système. Personellement c'est mon cas, mais les simples utilisateurs des distributions classiques pourraient éprouver quelques difficultés à cette étape. Si des utilisateurs des distributions classiques savent me faire parvenir un rpm d'installation, je le placerai dans cette page. Comme pour le moment ce n'est pas le cas, la suite suppose que l'arborescence des fichiers de votre noyau se trouve dans /usr/src/linux (faire un lien symbolique sur le répertoire réel si nécessaire).

Si votre noyau est d'une version plus récente que la 2.4.19, alors le code source proposé par SAGEM n'est plus compatible ! Il faut dans ce cas télécharger ce patch et l'appliquer de la façon suivante :

cp adi_linux-2.4.20.diff /usr/src/SagemADSL
cd /usr/src/SagemADSL/ADI_DRIVER
patch -p1 < ../adi_linux-2.4.20.diff 

La compilation s'effectue sans problème en tapant les commandes suivantes :

cd /usr/src/SagemADSL/ADI_DRIVER
make clean
make
cp adiusbadsl.o /lib/modules/`uname -r`/kernel/drivers/usb
depmod -a
Le driver de votre modem est désormais installé, reste à faire en sorte que votre modem soit reconnu.

Installation "hotplug"

Le système "hotplug" gère notamment l'insertion et le retrait des périphériques USB. L'objet de cette section est de lui "apprendre" à reconnaître le modem SAGEM. Attention, la méthode proposée par Sagem et qui utilise le fichier /etc/hotplug/usb.usermap est très foireuse car apparemment elle conduit à lancer le même script plusieurs fois et personnellement provoque des incompatibilités avec d'autres périphériques USB (j'ai l'impression que la conformité du SAGEM à l'USB est assez aléatoire). Ce qui est important pour l'initialisation du modem est de lancer le programme adictrl. Mais adictrl a besoin d'un répertoire de configuration /etc/analog. Nous allons donc le créer et configurer le modem dans les étapes suivantes.
cd /usr/src/SagemADSL/ADI_DRIVER
cp -R OTHER /etc/analog
cp USER/adictrl /usr/local/bin
Ce répertoire contient un fichier de configuration pré-renseigné et le firmware du modem, c'est-à-dire le programme qui est téléchargé dans le modem à chaque initialisation. Personnellement, je trouve la méthode de configuration de l'USB peu pratique. J'ai donc modifié le script /etc/hotplug/usb.agent de la façon suivante :
--- usb.agent~  2002-04-01 23:51:32.000000000 +0200
+++ usb.agent   2003-03-27 18:48:41.000000000 +0100
@@ -349,6 +349,16 @@
        exit 2
     fi
 
+
+    if [ -f $HOTPLUG_DIR/usb/$MODULE ]; then
+       . $HOTPLUG_DIR/usb/$MODULE
+    fi
+
+
+    if [ -f $HOTPLUG_DIR/usb/$PRODUCT ]; then
+       . $HOTPLUG_DIR/usb/$PRODUCT
+    fi
+
     ;;
 
 remove)
En utilisant le fichier de patch vous pouvez faire
mv usb-agent.patch /etc/hotplug
cd /etc/hotplug
patch -p0 < usb-agent.patch
La variable $MODULE est le nom du module chargé. La variable $PRODUCT est l'identifiant du produit (1110/900f/400b pour le modem SAGEM). Si le fichier correspondant existe dans le répertoire /etc/hotplug/usb, alors il est exécuté. Ceci permet, contrairement à la configuration standard par le fichier /etc/hotplug/usb.usermap de distinguer l'initialisation du driver et du produit (pas forcément utile pour le SAGEM, mais beaucoup plus pour tous les périphériques de masse comme les appareils photos numériques, les disques externes, etc.). Bien sûr il faut dans ce cas désactiver la configuration standard du modem dans le fichier /etc/hotplug/usb.usermap.

Reste toutefois à créer ce script et c'est ce que nous faisons dans la suite.

Ci-dessous, l'ancienne méthode désormais abandonnée pour ma part.
echo "# SAGEM ADSL F@st800" >> /etc/hotplug/usb.usermap
cd /usr/src/SagemADSL/ADI_DRIVER
cat ADI_usb.usermap >> /etc/hotplug/usb.usermap
cp USER/adiadsl §etc/hotplug/usb
Lorsque le modem est connecté il informe le noyau linux par un certain nombre de codes hexadécimaux (fabricant, modèle, type de matériel). Le fichier /etc/hotplug/usb.usermap permet au système de savoir quel script gère le modem en question. En l'occurence il s'agit du script adiadsl qui lance lui-même le binaire adiusbadsl compilé à l'étape précédente.


Configuration sur ligne non dégroupée

Fichier /etc/analog/adiusbadsl.conf

Ce fichier contient notamment les codes de reconnaissance réseau VPI et VCI. Sur une ligne non dégroupée, c'est le codage France Telecom qui est à utiliser. Donc VPI vaut 8 et VCI vaut 35. Mais le fichier est en hexadécimal (base 16) donc on doit y indiquer :
VPI=00000008
VCI=00000023
Encapsulation=00000001
C'est normalement la configuration VPI/VCI par défaut. Par contre, le mode d'encapsulation de Free est le mode MPOA_MODE_BRIDGED_ETH_LLC. On changera donc la valeur d'encapsulation. Une fois cette étape effectuée, vous devriez pouvoir connecter (ou déconnecter et reconnecter) votre modem du port USB. Les deux diodes devraient s'allumer, puis s'éteindre. La diode PWR devrait se rallumer. Puis la diode ADSL devrait clignoter et finalement rester fixe. Votre liaison avec les équipements terminaux est alors établie. Reste à configurer le réseau au dessus de cette liaison physique.

Connexion PPP sur Ethernet

La connexion s'effectue en utilisant le protocole Point to Point over Ethernet PPPoE. Il faut donc commencer par installer l'interface Ethernet que procure le modem. La commande est simple car il suffit que l'interface en question soit activée.
ifconfig ADIModem up
Puis il faut lancer la commande pppd, mais il faut pour cela configurer correctement la connexion. Si vous ne comptez pas utiliser d'autres connexions ppp, alors vous pouvez utiliser le fichier /etc/ppp/options que je vous propose, mais en modifiant les données personnelles :
#################################
######### ADSL F@st800  #########
######### SAGEM Company #########
#################################

# Remplacer les X par votre identifiant,(généralement le numéro de
# votre ligne téléphonique.
user "XXXXXXXXXX@freeadsl"

# Cet identifiant correspond à l'entrée du fichier d'authentification
# chap.
remotename freeadsl

# Les paramètres maximum received unit (MRU) et maximum transmit
# unit (MTU) précisent la taille des paquets transmis.
mru 1492
mtu 1492

# L'adresse IP doit être fournie par le serveur lors de la connexion
# donc on ne se rabat pas sur une adresse par défaut.
noipdefault

# L'interface en question correspond à l'interface de sortie à utiliser
# par défaut.
defaultroute

# Demande au correspondant une ou deux adresses de  serveurs  DNS.
usepeerdns

# Ne  demande pas au correspondant de s'authentifier. C'est à vous client
# de le faire !
noauth

# Désactive les compressions 
nobsdcomp
nodeflate
nopcomp
novj
novjccomp
noaccomp -am

# Ne s'arrête pas à la fin d'une connexion ; essaie plutôt  de  la
# rouvrir.
persist

# Arrête les tentatives de connexion après 15 échecs successifs
maxfail 15

# Faire en sorte que pppd se détache de son terminal de contrôle
# dès que la connexion ppp est établie
updetach

# Utilise le protocole PPPoE sur l'interface ADIModem
pty "/usr/sbin/pppoe -I ADIModem -T 600 -m 1412"

Reste maintenant à configurer vos données d'authentification. Pour cela, rajouter dans le fichier /etc/ppp/chap-secrets la ligne suivante :

"XXXXXXXXXX@freeadsl"	"freeadsl"	"YYYYY"
où les X sont remplacés par votre identifiant et les Y par votre mot de passe.

Automatisation de la connexion

Il nous faut maintenant obtenir la connexion de façon automatique, c'est-à-dire sans avoir à taper :
adictrl
ifconfig ADIModem up
pppd
alors, il faut créer le script du système "hotplug", à savoir /etc/hotplug/usb/adiusbadsl. Par exemple :
#!/bin/bash
#
# This script is automatically invoked when the ADI USB ADSL Modem 
# is plugged into the bus, and when the system is booted.  It can
# optionally run ifconfig or do other tasks.  However, it must 
# invoke the adictrl application as shown below.  Do not remove 
# this line or the modem will not function.


cd /etc/hotplug
. hotplug.functions

NAME=adiusbadsl
mesg "(pid $$)"
if [ "$0" != "/etc/hotplug/usb/${NAME}" ]; then
    mesg "Stop $pid"
else

################### Obtention du fichier de lock
    lockfile=/var/lock/${NAME}

    if [ -f $lockfile ]; then
	pid=`cat $lockfile`
	cmd=`ps ax $pid | awk '($5 == "/bin/bash"){print $6}'`
	if [ "$cmd" != "/etc/hotplug/usb/${NAME}" ]; then
	    mesg "$lockfile : $pid : $cmd (OK)"
	    echo $$ > $lockfile
	else
	    mesg "$lockfile : $pid : $cmd"
	fi
    else
	echo $$ > $lockfile
    fi

    sleep 1

    pid=`cat $lockfile`
    if [ "$pid" != "$$" ]; then
	mesg "$0 (no lock)"
    else


#################### Initialisation du modem
	cont=1
	while [ $cont -gt 0 ]; do 
	    /usr/local/bin/adictrl
	    sleep 60
	    test=`tail -2 /proc/adimodem | head -1`
	    if [ "$test" = "Modem is operational" ]; then
		cont=0
	    else
		cont=$[ $cont + 1 ]
		if [ $cont -gt 15 ]; then
		    mesg "Modem: $test"
		    rm $lockfile
		fi
	    fi
	done


	if [ -f $lockfile ]; then
#################### Vérif des connexions ppp
	    pids=`ps ax | awk '($5 == "pppd"){print $1}'`
	    if [ -z "$pids" ]; then
#################### Initialisation de l'interface
		ifconfig ADIModem up
		sleep 2
		test=`ifconfig ADIModem | grep UP | wc -l`
		if [ $test != 1 ]; then
		    mesg "ADIModem: `ifconfig ADIModem`"
		    rm $lockfile		
		fi
	    else
		rm $lockfile
	    fi
	fi
	
	if [ -f $lockfile ]; then
#################### Lancement de la connexion
	    pppd
	    sleep 30
	    test=`ifconfig ppp0 | grep UP | wc -l`
	    mesg "ppp0: `ifconfig ppp0`"
	    if [ $test != 1 ]; then
		rm $lockfile
	    fi
	fi
#################### Lancement du firewall
	if [ -f $lockfile ]; then
	    if [ -x /etc/init.d/firewall ]; then
		mesg "firewall: `/etc/init.d/firewall start`"
	    fi
	    rm $lockfile
	fi
#################### Vos options personelles
# Ne pas mettre d'exit car ce fichier est sourcé et non exécuté

    fi

fi
Le problème est d'arriver à garantir qu'un seul script s'exécute à la fois (et d'ailleurs la solution ci-dessus n'est pas pleinement satisfaisante) du fait du comportement curieux du modem Sagem qui s'annonce plusieurs fois avec des identifiants différents.


Configuration sur ligne dégroupée

Fichier /etc/analog/adiusbadsl.conf

Pour une ligne dégroupée, c'est le codage ADSL Free Telecom qui est à utiliser. Donc VPI vaut 8 et VCI vaut 36. On doit donc indiquer dans le fichier /etc/analog/adiusbadsl.conf :
VPI=00000008
VCI=00000024
Encapsulation=00000004
Le mode d'encapsulation de Free est le mode MPOA_MODE_ROUTED_IP_VC.

Connexion Ethernet

En configuration dégroupée, il n'y a plus besoin de configurer ppp. La connexion Ethernet est directe, mais il faut cette fois-ci configurer l'interface du modem. Pour cela, on utilise le fichier de configuration /etc/sysconfig/network-scripts/ifcfg-ADIModem. Ce fichier est utilisé par la commande :
ifup ADIModem
Le fichier à utiliser est fonction de vos paramètres de connexion que vous pouvez obtenir sur la page de suivi de Free.
DEVICE=ADIModem
IPADDR=X.X.A.B
NETMASK=255.255.0.0
NETWORK=X.X.0.0
GATEWAY=X.X.Y.Y
ONBOOT=no
L'option ONBOOT est à mettre à no car sinon, comme les connnexions réseaux sont lancées avant le port USB, cela peut poser problème.

Il faut noter qu'il n'y a pas d'adressage dynamique, donc vous avez là une adresse IP fixe : si vous le souhaitez vous pouvez monter votre propre serveur !

Automatisation de la connexion

Il nous faut maintenant obtenir la connexion de façon automatique, c'est-à-dire sans avoir à taper :
adictrl
ifup ADIModem
alors, il faut créer le script du système "hotplug", à savoir /etc/hotplug/usb/adiusbadsl. Par exemple :
#!/bin/bash
#
# This script is automatically invoked when the ADI USB ADSL Modem 
# is plugged into the bus, and when the system is booted.  It can
# optionally run ifconfig or do other tasks.  However, it must 
# invoke the adictrl application as shown below.  Do not remove 
# this line or the modem will not function.


cd /etc/hotplug
. hotplug.functions

NAME=adiusbadsl
mesg "(pid $$)"
if [ "$0" != "/etc/hotplug/usb/${NAME}" ]; then
    mesg "Stop $pid"
else

################### Obtention du fichier de lock
    lockfile=/var/lock/${NAME}

    if [ -f $lockfile ]; then
	pid=`cat $lockfile`
	cmd=`ps ax $pid | awk '($5 == "/bin/bash"){print $6}'`
	if [ "$cmd" != "/etc/hotplug/usb/${NAME}" ]; then
	    mesg "$lockfile : $pid : $cmd (OK)"
	    echo $$ > $lockfile
	else
	    mesg "$lockfile : $pid : $cmd"
	fi
    else
	echo $$ > $lockfile
    fi

    sleep 1

    pid=`cat $lockfile`
    if [ "$pid" != "$$" ]; then
	mesg "$0 (no lock)"
    else


#################### Initialisation du modem
	cont=1
	while [ $cont -gt 0 ]; do 
	    /usr/local/bin/adictrl
	    sleep 60
	    test=`tail -2 /proc/adimodem | head -1`
	    if [ "$test" = "Modem is operational" ]; then
		cont=0
	    else
		cont=$[ $cont + 1 ]
		if [ $cont -gt 15 ]; then
		    mesg "Modem: $test"
		    rm $lockfile
		fi
	    fi
	done


	if [ -f $lockfile ]; then
#################### Initialisation de l'interface
	    ifup ADIModem
	    sleep 2
	    test=`ifconfig ADIModem | grep UP | wc -l`
	    if [ $test != 1 ]; then
		mesg "ADIModem: `ifconfig ADIModem`"
		rm $lockfile		
	    fi
	fi
	
#################### Lancement du firewall
	if [ -f $lockfile ]; then
	    if [ -x /etc/init.d/firewall ]; then
		mesg "firewall: `/etc/init.d/firewall start`"
	    fi
	    rm $lockfile
	fi
#################### Vos options personelles
# Ne pas mettre d'exit car ce fichier est sourcé

    fi

fi
Le problème reste, comme dans le cas d'une ligne non dégroupée, à arriver à garantir qu'un seul script s'exécute à la fois.


Sécurité

Dans tous les cas, la connexion sur l'internet par ADSL nécessite de configurer sur la machine un filtrage au moins au niveau IP. Une petite visite à Net Filter le firewall intégré de linux s'impose donc.

Attention à reconfigurer votre firewall lors du dégroupage de votre ligne car le nom de l'interface Internet va changer de ppp0 à ADIModem.

BACK
C.V.S
Emacs
Euro
Fontes
FreeADSL
Index
Logiciels
Portable

Florent Chabaud
E-mail : florent.chabaud@m4x.org
Clé GPG : CLÉ