Il y a quelques semaines, j'ai mis à jour l'Android de mon téléphone (qui est un CyanogenMod officieux parce que CyanogenMod considère que mon HTZ Desire Z d'il y a à peine deux ans est tellement insupportablement obsolète que ce n'est plus la peine de développer pour), pour un Android 4.2.1 (CyanogenMod 10.1). J'ai testé plein de choses qui marchaient très bien mais je n'ai pas pensé à tester ce qui est, finalement, presque le plus important pour moi dans l'utilisation du téléphone : le tethering (c'est-à-dire l'utilisation du téléphone comme une sorte de modem pour fournir un accès Internet à un ordinateur auquel il est connecté par exemple par USB). Et la loi de Murphy ayant frappé, évidemment, maintenant qu'il me serait très difficile de revenir en arrière à la version précédente[#], je m'aperçois que le tethering ne marche pas. Catastrophe.
Premier effet observé : au moment où j'active le tethering (par USB, ce qui semble le plus robuste), la connexion de données disparaît. Initialement j'ai cru que c'était simplemnt que la connectivité était mauvaise et que par hasard il perdait la connexion à ce moment-là, mais au bout de N répétitions du même motif, j'ai fini par me rendre à l'évidence : il y a vraiment un problème.
J'ai trouvé une première cause du problème : pour faire fonctionner
le tethering, il faut maintenant créer un APN de
type dun
.
Un APN,
c'est le mécanisme par lequel on fait passer une connexion de données
sur la couche de protocoles GSM ; mais je ne sais
pas exactement ce à quoi ça correspond : ce qui est sûr,
c'est que le téléphone a besoin qu'on lui en fournisse un, et même un
par type de connexion qu'on peut avoir besoin d'effectuer :
un pour les connexions Internet « normales »
(type default
ou peut-être internet
), un
pour l'envoi de MMS (type mms
: c'est
souvent tarifié différemment), un pour les upgrades du firmware
(type fota
), un pour la réception de
données GPS (type supl
ou
peut-être agps
— je ne sais pas la différence, et de
toute façon ça ne semble plus trop utilisé), peut-être encore d'autres
types
(admin
? hipri
? phone
?), et,
donc, maintenant, aussi un pour le tethering (dun
ou
peut-être tether
ou tethering
). Remarquez
que personne ne semble y comprendre quoi que ce soit : en googlant ces
différents mots-clés on trouve plein de gens qui s'échangent des
recettes de cuisine et des conseils contradictoires sur les types
d'APN à configurer — probablement dans beaucoup de cas ça
a peu d'importance, certains types sont sans doute synonymes, et de
toute façon l'opérateur ne fournit guère qu'un tout petit nombre
d'APN différents (chez Orange-FR il semble y
avoir simplement orange
qui sert pour tout accès
Internet, donc essentiellement pour tous les types
listés sauf mms
, et orange.acte
,
justement, pour les MMS). Tout ceci est extrêmement
confus (peut-être que je pourrai trouver un collègue à Télécom qui
peut m'expliquer exactement ce que tout ce merdier signifie), toujours
est-il que je n'avais pas d'APN de type dun
et que c'est sans doute la cause (cachée dans un message fort peu
convivial caché dans le log :
D/Tethering( 393): chooseUpstreamType(true), preferredApn =4, got type=-1
)
de la disparition de ma connexion de données au moment où j'active le
tethering : apparemment les Android récents exigent
un APN de type dun
, ils ne vont pas prendre
celui de
type default
. D'autres
gens semblent avoir rencontré un problème très semblable (mais
eux, au moins, avaient un message d'erreur un peu plus
compréhensible !).
Il y a une chose qui m'horripile, c'est quand on a un problème, qu'on trouve une cause qui explique tout, qu'on corrige en conséquence, et que le problème persiste. (Je me sens un peu comme Gregory House quand il découvre que son troisième diagnostic n'est encore pas le bon parce que le foie du patient se met maintenant à défaillir.)
Tout content d'avoir trouvé cette histoire d'APN de
type dun
manquant, j'en ajoute un, je vois avec joie que
le téléphone établit une connexion de données, je me dis que
maintenant ça va marcher… eh non ! aucun paquet ne passe. Même depuis
le téléphone lui-même.
Mon explication provisoire (provisoire comme les diagnostics de
House) est que cette nouvelle version d'Android, en exigeant
un APN de type dun
(whatever that means), communique à
l'opérateur (Orange, donc) ce qu'il veut faire de la connexion de
données qu'il demande (bonjour, je voudrais une connexion pour
faire du tethering
) et qu'Orange ne veut pas qu'on fasse du
tethering, au moins avec la formule de pauvre que j'ai (qui ne me
coûte que 8€ par mois pour Internet illimité, il faut admettre que
c'est assez compétitif), du coup ils ne laissent pas passer mes
paquets. Ou quelque chose de ce genre.
L'ennui, c'est que (1) ce diagnostic va être délicat à confirmer (il va falloir au moins fouiller dans les entrailles d'Android pour savoir ce qu'il fait au juste avec le type d'un APN), et (2) même en admettant qu'il soit bon, ça va être difficile à réparer (je ne veux pas que mon téléphone dise à mon opérateur qu'il va faire du tethering). Je risque de devoir soit arriver à recompiler un Android (ce qui semble vraiment difficile, d'autant que je veux recompiler précisément celui d'Andromadus parce qu'il doit marcher sur mon téléphone — ils fournissent les sources, mais ils ne fournissent pas les explications sur comment les compiler), soit lui faire un patch binaire (j'en ai déjà plusieurs, par exemple pour désactiver le choix aléatoire d'adresse IPv6 que je déteste, mais s'il s'agit de patcher un binaire Java converti en Dalvik, ce ne sera probablement pas facile).
Je sens que je vais passer un bon nombre de nuits blanches sur cette affaire.
Si par hasard parmi mes lecteurs infiniment cultivés il y en a qui savent comment fonctionne la gestion des APN dans le GSM en général ou dans Android en particulier, je suis preneur de toute information !
Suite : voir une entrée ultérieure.
[#] J'ai fait un backup avant de changer de version, mais le reprendre impliquerait de perdre tout ce que j'ai fait depuis. Comme la nouvelle version d'Android a changé la signature de la base des contacts, je ne peux pas simplement installer une plus ancienne. Par ailleurs, je me suis habitué aux nouveautés de la version que j'ai maintenant.