Bonjour a tous,

Une fois de plus, je me tourne vers vous chers participant de la communauté. Car je rencontre aujourd'hui des difficultés à paramétrer une redirection.
N'étant pas un expert en réseau mais un développeur à la base, n'hésitez pas à me corriger si je ne suis pas clair ou n'utilise pas le bon vocabulaire technique.

Pour commencer, ce travail se passe sous un environnement ubuntu 10.04 (version imposée par le matériel).
Je cherche à établir un réseau de type MESH en utilisant le protocole OLSR (pour le moment, je pense passer sur un protocole plus performant par la suite) sur plusieurs mini-pc (EBOX 3350 mx).
Le lien physique me permettant de les relier est une radio de type ISM 868Mhz de chez DIGI. Elle se présente sous la forme d'une carte branchée sur un port série. Elle se contente de prendre les données envoyées sur le port série et de les émettre en onde radio. Les receveur à portée feront ensuite la marche inverse.

Pour mettre en place ce réseau, je commence par créer des interface réseau virtuel de type TUN. Olsrd fonctionnera sur ces interfaces. Ensuite je cherche à rediriger le flux TCP/IP de ces interfaces vers le port série sur lequel est branché mon émetteur ISM. C'est la trame IP que je cherche à transférer, pas uniquement les données qu'elles contiennent.

Pour commencer et mettre en place ce système petit à petit, j'ai commencer par prendre deux machine et à les relier par un câble série croisé. Je passerais sur la radio quand je serais sur de ce que j'envois sur le port série.

Voici où j'en suis aujourd'hui :

J'ai réussi à générer des interfaces virtuelles TUN (utilisation de tunctl du paquet uml-utilities), et à utiliser un protocole OLSR dessus (pour tester).
Pour la redirection avec socat je rencontre plus de difficultés. J'ai réussi à mettre en place une redirection depuis mon interface TUN. Mais mes trames ne se transmettent pas comme je le souhaite.

Je m'explique avec un exemple.

J'ai deux machine A et B.
Chacune possède une interface TUN virtuelle nommée "digi0".
L'IP attribuée à A est 10.0.0.1.
L'IP attribuée à B est 10.0.0.2

Sur la machine A, je paramètre la redirection du flux entre l'interface "digi0" et le port série (ttyS0).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
socat -d -d -d -x -b256 /dev/ttyS0,crnl,raw,echo=0 INTERFACE:digi0
Sur la machine B, je paramètre la redirection du flux entre le port série (ttyUSB1 => j'ai utilisé un adaptateur serie-usb) et la sortie standard (stdio).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
socat -d -d -d -x -b256 /dev/ttyUSB1,crnl,raw,echo=0 -
Sur la machine A, je démarre olsr pour générer du trafic sur l'interface digi0 et étudier les redirection.
La console socat sur A m'affiche correction la récupération des trames depuis l'interface digi0 et leurs écriture sur le port serie ttyS0. Il m'affiche la trame au format "ff ff ff ff ff ff ac 23..."

Sur la machine B, je regarde simplement la console socat et voici ce qui m'est affiché :
ff
ff
ff
ff
ff
ff
ac
23
Et c'est la le problème, ma trame d'origine a été découpée. Et je ne sais pas si ce découpage se fait à l'envois ou à la réception.

Mon problème viens probablement de ma configuration socat qui n'est pas correcte. Après plusieurs essais je ne parvient pas à obtenir autre chose que cet affichage. Et le soucis est qu'a l'arrivé la trame étant découpée je ne peux pas la rebalancer sur l'interface réseau, auquel cas elle serait considéré comme plein de petit packet ethernet invalides.

Je fait donc appel à vous afin de savoir s'il existe des exemples pour ce genre de traitement.

Merci d'avance pour vôtre temps et vos réponses.

---------- EDIT -------------------

J'ai trouvé une piste de recherche qui est pas mal du tout : le mode canonique.

Socat utilise termios pour gérer le port série. Et termios propose un mode canonique (lien), cela signifie que les données sont lues ligne par lignes avec un caractère de fin de ligne comme délimiteur et non plus caractère par caractère.

Pour le moment je n'arrive pas régler la taille des lignes. Mais je planche dessus.

Je posterais mes avancées si je m'en sort.