IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau C Discussion :

Rediriger les données d'un port série à un port Ethernet


Sujet :

Réseau C

  1. #1
    Membre régulier

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 51
    Points : 93
    Points
    93
    Par défaut Rediriger les données d'un port série à un port Ethernet
    Bonjour à tous,

    Aujorud'hui j'aimerais rediriger des données provenant d'un port (série ou Ethernet) vers un autre port (série ou Ethernet).

    Comme peut le faire des outils comme SOCAT ou NETCAT.

    Les données redirigées ne doivent pas être traitées et sont de différentes tailles et brutes (comprendre qu'elles n'ont pas de caractère de début de trame ou de fin de trame).

    D'un port Ethernet à un autre port Ethernet pas de soucis.
    D'un port Ethernet à un une liaison Série : c'est relativement simple, grâce au header Ethernet, on sait quand une trame entière est arrivée et on peut ensuite la découper pour transmettre les octets via le port série.


    Mais le problème se pose quand il s'agit de rediriger des données d'une liaison série vers un port Ethernet.

    En effet, afin d'encapsuler les données dans une trame Ethernet on a besoin d'avoir à disposition l'ensemble des données.
    Or, comment pourrais je savoir que j'ai reçu toute ma trame via le port série (les data ne sont qu'une suite d'octet dans un port série...) si je n'ai pas de caractère de fin dans mes octets reçues ?

    J'avais pensé à définir un délai inter-trame => Si le temps entre les octets reçus via le port série sont inférieur à ce délai alors c'est qu'il s'agit encore de la même trame et on attend d'avoir enfin un temps supérieur au délai avant d'être sur d'avoir toute la trame et donc d'encapsuler les données avant de les envoyer en Ethernet.

    Avez vous déjà rencontré ce genre de problème ?
    Avez vous des idées ou des pistes ?

    Merci beaucoup !

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 360
    Points : 23 599
    Points
    23 599
    Par défaut
    Bonjour,

    C'est avec quel système d'exploitation ?

    De plus, une connexion série est par nature une liaison point-à-point, mais Ethernet est fait pour gérer du réseau, avec plusieurs nœuds sur la même ligne. Est-ce que cherches à simuler une liaison de type stream entre deux machines ou est-ce que tu veux réellement utiliser tes cartes Ethernet en point-à-point comme de super-cartes séries au dessus de la couche Réseau ?

  3. #3
    Membre régulier

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 51
    Points : 93
    Points
    93
    Par défaut
    Merci de ta réponse !


    Dans un premier temps, c'est sous Linux.

    Voir le schéma attaché pour comprendre mon besoin.


    Je souhaite communiquer à partir de A avec B en passant par C (mais la liaison A->C est en série et la liaison C-> B est en Ethernet)

    Je souhaite donc récupérer sur une entrée série des données brut et les renvoyer en sortie (après les avoir encapsuler par l'en tête IP) sur un port UDP par exemple.

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 360
    Points : 23 599
    Points
    23 599
    Par défaut
    Citation Envoyé par Snipy Voir le message
    Je souhaite communiquer à partir de A avec B en passant par C (mais la liaison A->C est en série et la liaison C-> B est en Ethernet)

    Je souhaite donc récupérer sur une entrée série des données brut et les renvoyer en sortie (après les avoir encapsuler par l'en tête IP) sur un port UDP par exemple.
    D'accord : tes données doivent bien transiter au-dessus de l'IP. Tu exploites donc ton réseau de façon tout-à-fait normale. De deux choses l'une, donc :

    — Soit tu gères directement le port série et, dans ce cas, tu écris un programme qui ouvre d'un côté le port série via /dev/tty0 ou assimilé et, de l'autre, crée un socket stream AF_INET, donc une connexion TCP, et se connecte à la machine B et tu gères les deux descripteurs avec select() ;

    — Soit tu veux faire les choses de manière un peu plus transparente comme s'il s'agissait d'un seul grand réseau et confier ça au système, ce qui te permet entre autre d'utiliser les tables de routage et là, il faut utiliser PPP comme avec les modems analogiques en l'absence d'ADSL, pour établir une liaison point-à-point à travers ton port série, matérialisée par une pseudo-interface réseau à chaque extrémité et valide tant que le dæmon PPP est en fonctionnement. Une fois en place, en gérant correctement les adresses de chacune de tes machines, A sera en mesure de contacter directement B et de façon tout-à-fait transparente, même si la liaison est lente.

  5. #5
    Membre régulier

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 51
    Points : 93
    Points
    93
    Par défaut
    Citation Envoyé par Obsidian Voir le message
    — Soit tu veux faire les choses de manière un peu plus transparente comme s'il s'agissait d'un seul grand réseau et confier ça au système, ce qui te permet entre autre d'utiliser les tables de routage et là, il faut utiliser PPP comme avec les modems analogiques en l'absence d'ADSL, pour établir une liaison point-à-point à travers ton port série, matérialisée par une pseudo-interface réseau à chaque extrémité et valide tant que le dæmon PPP est en fonctionnement. Une fois en place, en gérant correctement les adresses de chacune de tes machines, A sera en mesure de contacter directement B et de façon tout-à-fait transparente, même si la liaison est lente.
    J'ai un peu de mal à voir comment gérer la partie série en PPP et la mise en place de ce protocole ? Tu aurais un peu plus d’information ou un article qui parle de ce sujet ?

    En tout cas, merci beaucoup pour ton aide

  6. #6
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 360
    Points : 23 599
    Points
    23 599
    Par défaut
    Citation Envoyé par Snipy Voir le message
    J'ai un peu de mal à voir comment gérer la partie série en PPP et la mise en place de ce protocole ? Tu aurais un peu plus d’information ou un article qui parle de ce sujet ?

    En tout cas, merci beaucoup pour ton aide
    Oui, il existe « pppd », c'est-à-dire le dæmon PPP, utilisé par tes distributions Linux lorsque tu te connectes en analogique à ton fournisseur d'accès.

    La gestion de la ligne série proprement dite se fait via un périphérique spécial en mode caractères : /dev/ttySxx où « xx » est le numéro du port. Il suffit d'écrire dedans pour que le caractère soit immédiatement transmis sur la ligne sans autre forme de procès. C'est à cela qu'elle sert. Enfin, en principe ! Le port série RS-232 est doté de lignes de contrôles et d'une vitesse variable que tu gères depuis le shell avec stty et depuis le C avec les ioctl() et termios.

    Pour configurer pppd, tu peux regarder ceci :

    http://man.developpez.com/man8/pppd/
    http://en.wikipedia.org/wiki/Pppd
    http://www.tldp.org/HOWTO/PPP-HOWTO/

    … mais sache que ces pages commencent à être vieille (dernière mise à jour de 2000 pour PPP-Howto). Sache aussi que le port série commence lui aussi à être très vieux et qu'il est donc lent ! Cela reste ce que l'on a utilisé pendant des années pour se connecter à Internet et ce qui est toujours utilisé lorsque le haut débit n'est pas disponible.

    L'idée est de faire une configuration qui lance automatiquement le dæemon et surtout le relance en cas de crash mais sinon, tu peux jeter un œil à tout ce qui concerne le dialup de ta distribution.

Discussions similaires

  1. Port usb vers port série
    Par LeDièse dans le forum WinDev
    Réponses: 3
    Dernier message: 13/08/2013, 10h14
  2. Lire les données du port série RS232
    Par Sytchev3 dans le forum Langage
    Réponses: 2
    Dernier message: 16/06/2008, 09h47
  3. Comment capturer les données sur une liaison série RS232
    Par jef Orome dans le forum Windows Serveur
    Réponses: 3
    Dernier message: 02/04/2007, 19h14
  4. Réponses: 4
    Dernier message: 09/01/2007, 16h20
  5. Réponses: 5
    Dernier message: 18/02/2005, 17h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo