Carte Orange™ Fusion+ GPRS [FR] / EDGE [FR] / UMTS [FR] / HDSPA [FR] / WIFI sous Debian



Charles-Antoine Guillat-Guignard
xarli@xarli.net
http://www.xarli.net [FR]

2006 Charles-Antoine Guillat-Guignard

La dernière version de ce document est disponible sur ce site : http://contrib.xarli.net/optionfusionsousdebian/ [FR].

Valid XHTML 1.0 Transitional Ce document est conforme aux recommandations du consortium W3C [EN], ce qui devrait lui permettre d'être consultable sans problème avec un navigateur respectant ces recommandations.



Creative Commons License
Ce document est fournit sous licence Creative Commons Attribution-ShareAlike 2.0. Merci de vous référez au lien précédant pour connaître vos droits et devoirs.

Introduction

Orange™ nous a fournit, au boulot, une carte Option Fusion +, dans le cadre d'un essai. Cette carte correspond à priori à l'offre suivante : http://www.mobilite.fr.orange-business.com/public/oev4/html/fr/pme/echanger/be/be.php (forfait illimité, avec utilisation d'un VPN).



carte Option Fusion +, par Orange

D'après Orange™, et d'après notre contact chez cet opérateur mobile, cette carte n'est pas garantie de marcher sous GNU/Linux. Qu'à cela ne tienne, j'ai réussi à la faire fonctionner, plus facilement que prévu en fin de compte, après avoir quand même pas mal bataillé. Ce document a pour but de vous guider dans l'installation et la configuration de cette carte.


Je ne garantie pas le bon (ou le mauvais) fonctionnement de cette méthode, et me dégage de tout problème (carte PCMCIA [FR] qui grille, départ de votre conjoint, défaite de l'équipe de France en finale de coupe du monde de football en allemagne) qui pourrait découler de l'utilisation bonne ou erronnée de ce document. Vous prenez vos propres responsabilités en le suivant. Je n'ai strictement aucun rapport avec Orange™, cette documentation est fournie par moi-même, et n'est en aucun cas supportée par Orange™.


La source de la plupart de ces informations est le site http://www.pharscape.org/ [EN], très complet sur le sujet, et surtout actif (l'avant dernier pilote au moment de la rédaction de ce document nécessitait un patchage sauvage des sources du pilote pour pouvoir être compilé).


A noter que le forfait Orange™ allant avec cette carte est normalement bridé par Orange™, à savoir presque tous les ports sont bloqués, la version avec laquelle j'ai pu rédiger cette documentation était débridée, les principaux protocoles étaient complètement ouverts. D'après Orange™, avec la version publique de cette carte et du forfait qui va avec, il faut obligatoirement utiliser IPSEC [FR].


Préparation du noyau

La partie la plus compliquée se situe au niveau de la configuration du noyau et des modules qui vont avec.

Le noyau que vous allez utiliser doit :


Vous pouvez garder le noyau par défaut de votre distribution, ou bien choisir de compiler votre propre noyau. J'ai choisi la seconde option, car j'apprécie de patcher mon noyau avec les excellentes rustines de Con Kolivas [EN], qui apportent du mieux en terme de réactivité générale aux bureaux. Bref, je m'égare, il vous faudra compiler en module le pilote Nozomi, donc vous aurez besoin des en-têtes et des sources de votre noyau.


Pour mon cas, je personnalise complètement mon noyau, voilà les options à activer pour un noyau 2.6, pour être précis un 2.6.17.1 patché ConKolivas 2.6.17-ck1 (chaque indentation supplémentaire correspond à un sous-menu du noyau) :

root@iguzki:/usr/src/linux-2.6.17# sudo make menuconfig

D'abord, le PCMCIA [FR] :

Bus options (PCI, PCMCIA, EISA, MCA, ISA)  --->
    PCCARD (PCMCIA/CardBus) support  --->
        <*> PCCard (PCMCIA/CardBus) support
        <*>   CardBus yenta-compatible bridge support

Je préfère inclure en dur ces fonctionnalités, mais vous pouvez parfaitement les inclure sous forme de module, ce qui est généralement conseillé par ailleurs.

Device Drivers  --->
    USB support  --->
        USB Serial Converter support  --->
            <M> USB Serial Converter support

Aucune autre option n'est nécessaire dans ce menu pour faire fonctionner cette carte. Aucun pilote ne peut faire marcher la carte, y compris le pilote générique, en tout cas au moment d'écrire ce document.


Puis on compile le noyau :

root@iguzki:/usr/src/linux-2.6.17# make clean && make && make modules_install

On l'installe, on relance son ordinateur en choisissant de démarrer avec ce nouveau noyau.


Compilation du pilote

Une fois que vous avez votre machine qui démarre bien avec ce noyau, que le PCMCIA [FR] est reconnu, on va pouvoir continuer avec la compilation du module.


Je l'ai récupéré à cet emplacement :

http://www.pharscape.org/3G/

La version actuelle est la 2.1, à savoir le fichier nozomi_2.1_060703.tar.gz


J'installe mes paquets sources dans /usr/local/src :

root@iguzki:/usr/src/linux-2.6.17# cd /usr/local/src
root@iguzki:/usr/local/src# mkdir nozomi_2.1
root@iguzki:/usr/local/src# cd nozomi_2.1
root@iguzki:/usr/local/src/nozomi_2.1# wget http://www.pharscape.org/3G/nozomi_2.1_060703.tar.gz
root@iguzki:/usr/local/src/nozomi_2.1# tar xvfz nozomi_2.1_060703.tar.gz

Compilation :

root@iguzki:/usr/local/src/nozomi_2.1# make

Installation :

root@iguzki:/usr/local/src/nozomi_2.1# make install

Attention, pour moi le mécanisme d'installation ne fonctionne pas. J'ai donc installé manuellement le pilote :

root@iguzki:/usr/local/src/nozomi_2.1# mkdir -p /lib/modules/2.6.17-ck1/kernel/drivers/pci/hotplug
root@iguzki:/usr/local/src/nozomi_2.1# cp -f nozomi.ko /lib/modules/2.6.17-ck1/kernel/drivers/pci/hotplug
root@iguzki:/usr/local/src/nozomi_2.1# update-modules

Normalement, vous disposez maintenant d'un noyau supportant votre carte, il ne reste plus qu'à charger le module. Pour ne pas avoir à m'embêter avec la gestion des modules, j'utilise modconf (apt-get install modconf), petit utilitaire utilisant ncurses, chargeant ou déchargeant les modules et surtout gérant pour vous la même chose au démarrage.


Si vous préférez gérer vous même ce module, libre à vous. Pour le charger :

root@iguzki:/usr/local/src/nozomi_2.1# modprobe nozomi

Normalement, si tout se passe bien, alors vous obtiendrez la même sortie avec la commande suivante :

root@iguzki:/usr/local/src/nozomi_2.1# lsmod | grep nozomi
nozomi                 18192  0
root@iguzki:/usr/local/src/nozomi_2.1#

Le chiffre peut bien sûr varier selon les versions, en tout cas on voit le module qui est bien et bien chargé.


L'affichage des messages du noyau doit également montrer le pilote :

root@iguzki:/usr/local/src/nozomi_2.1# dmesg | grep nozomi
Initializing Nozomi driver 2.1 (build date: Jul  9 2006 19:18:32)

L'insertion de la carte dans son slot PCMCIA [FR] doit à ce moment là provoquer l'affichage du message suivant, à peu de choses près :

pccard: CardBus card inserted into slot 0
[1504] nozomi_card_init(): Init, cards_found: 1
[1390] nozomi_get_card_type(): Card type is: 2048
PCI: Enabling device 0000:03:00.2 (0000 -> 0002)
ACPI: PCI Interrupt 0000:03:00.2[A] -> Link [LNKA] -> GSI 5 (level, low) -> IRQ 5
Nozomi driver nozomi_tty<6>[836] nozomi_read_config_table(): Version of card: 3
[828] nozomi_read_config_table(): Initialization OK!

Normalement, udev a du créer 4 pseudos-fichiers :

root@iguzki:/usr/local/src/nozomi_2.1# ls -l /dev/noz*
crw-rw---- 1 root dialout 241, 0 2006-07-09 19:21 /dev/noz0
crw-rw---- 1 root dialout 241, 1 2006-07-09 19:21 /dev/noz1
crw-rw---- 1 root dialout 241, 2 2006-07-09 19:21 /dev/noz2
crw-rw---- 1 root dialout 241, 3 2006-07-09 19:21 /dev/noz3

Tout va bien jusque là, la carte est bien reconnue.


Installation de l'utilitaire de gestion de la carte/du pilote

Ensuite, il faut installer l'utilitaire de contrôle pour votre carte :

root@iguzki:/usr/local/src/nozomi_2.1# apt-get install gcom

La version actuellement diponible sous Debian GNU/Linux Unstable est la 0.3.

L'autre solution est de le compiler l'utilitaire après l'avoir récupéré sur le site qui maintient déjà le pilote Nozomi : http://www.pharscape.org/3G/comgt/


Utilisation de GCOM - Enregistrement sur le réseau Orange™

Une fois cet utilitaire installé, vous pouvez vous enregistrer sur le réseau :

root@iguzki:~# gcom -d /dev/noz0

Enter PIN number: 1234
Waiting for Registration..(120 sec max)...........
Registered on Home network: "Orange F",0
Signal Quality: 22,0
root@iguzki:/usr/src/linux-2.6.17#

Remplacez bien sûr 1234 par votre code d'identification personnel (code PIN).

Vous pouvez obtenir avec ce même outil différentes informations.


Informations générales :

root@iguzki:~# gcom -d /dev/noz0 info
##### GlobeTrotter Configuration #####
Manufacturer Text:      Option
IMEI and Serial Number: 359838029193275,NF2C63P143
Manufacturer's Revision: (Date: Mar 06 2006, Time: 09:00:31)
Hardware Revision:      2.1
Network Locked:         1
Customisation:          Not defined
Band settings:          Europe 900/1800MHz (4)
Auto Attach:

##### END #####
root@iguzki:~#

Qualité du signal :

root@iguzki:~# gcom -d /dev/noz0 sig
Signal Quality: 19,0
root@iguzki:/usr/src/linux-2.6.17#

Enregistrement sur le réseau :

root@iguzki:~# gcom -d /dev/noz0 reg
Waiting for Registration
Registered on Home network: "Orange F",0

Vous êtes enregistrés sur le réseau Orange™, dès lors il suffit de se connecter, plusieurs logiciels permettent de le faire, comme vwdial, kppp, ou pppd, j'ai choisi ce dernier, bien que vwdial me paraisse plus moderne.


Choisir son APN


Le point d'accès au réseau est à bien déterminer, 3 sont diponibles chez Orange™. Demandez au support ou bien à votre fournisseur celui à utiliser, la carte de test que j'ai eu entre mes mains avait accès aux trois, si c'est le cas pour les cartes publiques, attention à ne pas aller utiliser un autre réseau que le vôtre, la facture pourrait en être douloureuse. En voici la liste, à priori complète à ce jour :



Merci à Fabien de m'avoir trouvé cette liste.


Configuration de chat et de pppd


pppd est une méthode éprouvée, et surtout très documentée sur Internet.

chat est un binaire venant avec le paquet ppp sous Debian GNU/Linux, il sert à dialoguer avec le serveur distant, et donc à établir la connexion proprement dîte.

Cette méthode est plus compliquée que wvdial, et surtout beaucoup plus lente à la connexion. Je vous conseille donc de passer directement à la section suivante, consacrée à wvdial.


Voilà une configuration "verbeuse" d'un tiers pour pppd (vous pouvez le reprendre tel quel) :

root@iguzki:~# cat /etc/ppp/peers/orange
# This optionfile was generated by pppconfig 2.3.2.
#
#
noauth
connect "/usr/sbin/chat -v -f /etc/chatscripts/orange"
#debug
nodetach
/dev/noz0
115200
#mtu 1452
defaultroute
noipdefault
# ipcp-accept-local
# ipcp-accept-remote
user any
password any
# remotename orange
# ipparam orange
usepeerdns
# novj
# xonxoff
# noccp

# asyncmap 0
# proxyarp

root@iguzki:~#

On voit que la connexion se fait via un script que voilà (vous pouvez le reprendre tel quel) :

root@iguzki:~# cat /etc/chatscripts/orange
# This chatfile was generated by pppconfig 2.3.2.
# Please do not delete any of the comments.  Pppconfig needs them.
#
# ispauth chat
# abortstring
ABORT BUSY ABORT 'NO CARRIER' ABORT VOICE ABORT 'NO DIALTONE' ABORT 'NO DIALTONE' ABORT 'NO ANSWER' ABORT DELAYED
# modeminit
'' ATZ
# Check SIM pin should return ready
OK-AT-OK "AT+CPIN?"
# Check the whether 3G or GPRS
OK-AT-OK "AT$NWRAT?"
# Set +CGEE to 2
OK-AT-OK "AT+CMEE=2"
# Setup PDP? in +CGDCONT
OK-AT-OK 'AT+CGDCONT=1,"IP","orange.fr"'
# Setup +CGEQREG
OK-AT-OK 'AT+CGEQREQ=3,3,64,384,0,0,2,0,"0E0","0E0",3,0,0'
# Attached to Orange network, will return 1
OK-AT-OK 'AT+CGATT?'
# ispnumber
#OK-AT-OK 'ATD*99***1#'
OK-AT-OK 'ATD*99#'
# ispconnect
#CONNECT \c
# prelogin

# ispname
# ogin: "dummy"
# isppassword
# ssword: \q"dummy"
# postlogin
#'' \c
# end of pppconfig stuff
root@iguzki:~#

L'APN est orange.fr, ce qui est important, je n'ai pas trouvé en essayant de configurer la carte de documentation sur Internet référençant correctement ce paramètre, évidemment différent d'un pays à l'autre. J'ai trouvé une liste recençant les APNs principaux [EN], qui semble assez correcte, au moins pour la France, mais les trois APNs Orange™ n'y sont pas, voir la liste plus haut, testée et valide à ce jour..


Vous pouvez alors vous connecter à l'Internet avec la simple commande pon orange, qui donne le résultat suivant, en mode verbeux :

root@iguzki:~# pon orange
Serial connection established.
using channel 2
Using interface ppp0
Connect: ppp0 <--> /dev/noz0
sent [LCP ConfReq id=0x1 <asyncmap 0xa0000> <magic 0x13452876> <pcomp> <accomp>]
rcvd [LCP ConfReq id=0x2 <asyncmap 0x0> <auth chap MD5> <magic 0x121ad4b0> <pcomp> <accomp>]
sent [LCP ConfAck id=0x2 <asyncmap 0x0> <auth chap MD5> <magic 0x121ad4b0> <pcomp> <accomp>]
rcvd [LCP ConfAck id=0x1 <asyncmap 0xa0000> <magic 0x13452876> <pcomp> <accomp>]
sent [LCP EchoReq id=0x0 magic=0x13452876]
rcvd [LCP DiscReq id=0x3 magic=0x161ad4b0]
rcvd [CHAP Challenge id=0x1 <6e7f9a34b628243d16e4ec1008687231>, name = "UMTS_CHAP_SRVR"]
sent [CHAP Response id=0x1 <511cde068bbca2317096b42258ad828c>, name = "any"]
rcvd [LCP EchoRep id=0x0 magic=0x161ad4b1 13 45 23 76]
rcvd [CHAP Success id=0x1 ""]
CHAP authentication succeeded
CHAP authentication succeeded
sent [IPCP ConfReq id=0x1 <compress VJ 0f 01> <addr 0.0.0.0> <ms-dns1 0.0.0.0> <ms-dns3 0.0.0.0>]
rcvd [IPCP ConfNak id=0x1 <ms-dns1 10.11.12.13> <ms-dns3 10.11.12.14> <ms-wins 10.11.12.13> <ms-wins 10.11.12.14>]
sent [IPCP ConfReq id=0x2 <compress VJ 0f 01> <addr 0.0.0.0> <ms-dns1 10.11.12.13> <ms-dns3 10.11.12.14>]
rcvd [IPCP ConfReq id=0x0 <addr 212.234.96.90>]
sent [IPCP ConfAck id=0x0 <addr 212.234.96.90>]
rcvd [IPCP ConfRej id=0x2 <compress VJ 0f 01>]
sent [IPCP ConfReq id=0x3 <addr 0.0.0.0> <ms-dns1 10.11.12.13> <ms-dns3 10.11.12.14>]
rcvd [IPCP ConfNak id=0x3 <addr 10.16.133.104> <ms-dns1 194.51.3.56> <ms-dns3 194.51.3.76>]
sent [IPCP ConfReq id=0x4 <addr 10.16.133.104> <ms-dns1 194.51.3.56> <ms-dns3 194.51.3.76>]
rcvd [IPCP ConfAck id=0x4 <addr 10.16.133.104> <ms-dns1 194.51.3.56> <ms-dns3 194.51.3.76>]
Cannot determine ethernet address for proxy ARP
local  IP address 10.16.133.104
remote IP address 212.234.96.90
primary   DNS address 194.51.3.56
secondary DNS address 194.51.3.76
Script /etc/ppp/ip-up started (pid 4705)
Script /etc/ppp/ip-up finished (pid 4705), status = 0x0
Terminating on signal 15
Connect time 12.0 minutes.
Sent 9680 bytes, received 89068 bytes.
Script /etc/ppp/ip-down started (pid 5422)
sent [LCP TermReq id=0x2 "User request"]
rcvd [LCP TermAck id=0x2]
Connection terminated.
Waiting for 1 child processes...
  script /etc/ppp/ip-down, pid 5422
Script /etc/ppp/ip-down finished (pid 5422), status = 0x0
zsh: exit 5     pon orange
root@iguzki ~#

La ligne Terminating on signal 15 correspond à un control-c, pour mettre fin à la connexion, pour la suite de ce document, je considère que vous ny avez pas mis fin.


Configuration et utilisation de wvdial et de pppd

Une autre alternative est l'utilisation de wvdial, plus simple à mon goût, et surtout beaucoup plus rapide à la connexion. Il fait appel à ppp par la suite, son fichier de configuration permet d'appeler différents services, et donc avec différents modem, là où ppp utilise plusieurs fichiers pour chacun des tiers.


Dans notre cas précis, voilà le fichier de configuration à utiliser, les 3 APNs Orange™ sont déclarés ici, en pratique vous n'aurez accès qu'à celui concerné par votre forfait, celui de l'accès illimité entreprise d'Orange™ est l'accès entreprise illimité en volume de données et en temps de connexion, appelé ici orange-vpn :

root@iguzki ~# cat /etc/wvdial.conf
[Dialer Defaults]
Modem = /dev/noz0
Baud = 460800
SetVolume = 0
Dial Command = ATDT
FlowControl = NOFLOW
Init1 = ATZ
Init2 = ATM0

[Dialer orange-public]
Username = any
Password = any
Phone = *99***1#
Stupid Mode = 1
Init3 = AT+CGDCONT=1,"IP","orange.fr"
Dial Attempts = 3

[Dialer orange-entreprise]
Username = any
Password = any
Phone = *99***1#
Stupid Mode = 1
Init3 = AT+CGDCONT=1,"IP","internet-entreprise"
Dial Attempts = 3

[Dialer orange-vpn]
Username = any
Password = any
Phone = *99***1#
Stupid Mode = 1
Init3 = AT+CGDCONT=1,"IP","orange.vpn"
Dial Attempts = 3
root@iguzki ~#

Il faut aussi déclarer une configuration pour ppp, que wvdial appellera ensuite :

root@iguzki ~# cat /etc/ppp/peers/wvdial
plugin passwordfd.so
noauth
name wvdial
replacedefaultroute
noipdefault
nomagic
usepeerdns
ipcp-accept-local
ipcp-accept-remote
nomp
noccp
nopredictor1
novj
novjccomp
nobsdcomp
root@iguzki ~#

Une fois ces deux fichiers de configuration renseignés, il suffit ensuite d'appeler l'utilitaire wvdial, avec en paramètre la section contenant la configuration désirée :

root@iguzki ~# wvdial orange-vpn
--> WvDial: Internet dialer version 1.56
--> Cannot get information for serial port.
--> Initializing modem.
--> Sending: ATZ
ATZ
OK
--> Sending: ATM0
ATM0
OK
--> Sending: AT+CGDCONT=1,"IP","orange.fr"
AT+CGDCONT=1,"IP","orange.fr"
OK
--> Modem initialized.
--> Sending: ATDT*99***1#
--> Waiting for carrier.
ATDT*99***1#
CONNECT 393600
--> Carrier detected.  Starting PPP immediately.
--> Starting pppd at Tue Jul 11 01:21:15 2006
--> Pid of pppd: 4794
--> Using interface ppp0
--> Authentication (CHAP) started
--> Authentication (CHAP) successful
--> local  IP address 10.16.131.243
--> remote IP address 212.234.96.91
--> primary   DNS address 194.51.3.56
--> secondary DNS address 194.51.3.76


--> Script /etc/ppp/ip-up run successful
--> Default route Ok.
--> Nameserver (DNS) Ok.
--> Connected... Press Ctrl-C to disconnect

Une fois connecté, comme indiqué ci-dessus, la combinaison de touches controle et c vous permette de vous déconnecter.


Paramètrage réseau une fois la connexion établie

Dès lors, vous avez accès à Internet, avec un paramétrage réseau un peu bizarre à mon goût (adressage IP RFC 1918 [FR], ...) :

root@iguzki:~# ifconfig ppp0
ppp0      Lien encap:Protocole Point-à-Point
          inet adr:10.15.145.208  P-t-P:212.234.96.27  Masque:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:9 errors:1 dropped:0 overruns:0 frame:0
          TX packets:9 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:3
          RX bytes:180 (180.0 b)  TX bytes:186 (186.0 b)

root@iguzki:~# cat /etc/resolv.conf
nameserver 194.51.3.56
nameserver 194.51.3.76
root@iguzki:/usr/local/src/nozomi_2.1# route -n
Table de routage IP du noyau
Destination     Passerelle      Genmask         Indic Metric Ref    Use Iface
212.234.96.91   0.0.0.0         255.255.255.255 UH    0      0        0 ppp0
0.0.0.0         0.0.0.0         0.0.0.0         U     0      0        0 ppp0
root@iguzki:~# wget http://www.linuxfr.org
--01:01:39--  http://www.linuxfr.org/
           => `index.html'
Résolution de www.linuxfr.org... 212.27.33.225
Connecting to www.linuxfr.org|212.27.33.225|:80... connecté.
requête HTTP transmise, en attente de la réponse...302 Found
Emplacement: http://linuxfr.org/pub/ [suivant]
--01:01:40--  http://linuxfr.org/pub/
           => `index.html'
Résolution de linuxfr.org... 212.27.33.225
Connecting to linuxfr.org|212.27.33.225|:80... connecté.
requête HTTP transmise, en attente de la réponse...200 OK
Longueur: 71,759 (70K) [text/html]

100%[========================================================>] 71,759        13.55K/s    ETA 00:00

01:01:47 (13.52 KB/s) - `index.html' saved [71759/71759]

root@iguzki:~#

En fonction du type de réseau que vous attraperez, votre débit sera évidemment différent. La connexion ci-dessus a été effectuée chez moi, dans un coin perdu (Mennecy), mais à mon boulot la même connexion me donne un débit de 45 kilos-octets par seconde, et je n'ai pas encore attrapé de HSDPA qui donne un débit allant jusqu'à 3 à 4 Mbit/s.


Même s'ils n'étaient pas utilisables tels quels, certains éléments ont été modifiés de manière à ne pas être utilisables tels quels (numéros de série, ...).