Raspberry als Protokollumsetzer/Gateway

  • Schönen guten Tag,

    ich habe hier im Forum bereits einen Post dazu gefunden, dieser hat aber leider ein anderes Ziel gehabt, bzw. eine weniger ausführliche Beschreibung.

    Also, ich habe mir vor einer Weile ein paar nrf24l01 gekauft.
    Um diese wiederverwertbar zu machen, habe ich mir dazu noch eine c++ Bibliothek adaptiert und ein Routing-Fähiges Protokoll ähnlich dem IP-Protokoll geschrieben. (funktioniert prinzipiell gut. Ich habe eine 8-bit Soft-Addresse welche sogar dynamisch zugewiesen werden kann, ein Protokoll ähnlich dem ARP usw.)

    Das Ziel der ganzen Angelegenheit ist es nämlich, später den Raspberry als Gateway zu nutzen, um all meine µC in mein Heimnetz einzubinden, bzw es möglich zu machen sich per Socket auf sie zu verbinden.

    Ich weiß, dass diese Ziele recht hoch gesteckt sind, aber es macht mir spaß so etwas zu implementieren.

    Nun meine Frage:
    Wie kann ich den Raspberry so umbauen, dass er als Protokollumsetzer funktioniert.
    Es müssten die Protokolle IP und MAC umgesetzt werden.

    Mein Ansatz wäre ein Linux Network Device zu implementieren, jedoch ist das Problem dort, dass ich kein IP-Protokoll nutze. Hat jemand dazu eine Idee oder Lektüre?

    Lg cocojack

  • Vermutlich gibt's keine Antworten weil niemand die Frage versteht ...

    > Wie kann ich den Raspberry so umbauen, dass er als Protokollumsetzer funktioniert.
    Auf der einen Seite soll anscheinend IP sein, und auf der anderen ?

    > Es müssten die Protokolle IP und MAC umgesetzt werden.
    Bei Raspbian ist das schon drin, da muss gar nichts gemacht werden.

    Was man machen muss ist das Protokoll auf dem IP, und das geht mit einem Socket.

    Also ab zu Google: <Lieblingssprache> Linux Socket

  • Ich möchte, dass man einfach nur eine ip-route in ein Subnetz bei meinem Windows Rechner einträgt, und dann z.b. mit Java oder C++ ein Socket zu meinem µC aufbaut.

    Würde ich auf dem rpi ein Socket öffnen und die Daten weiterleiten, so würde ich doch nur auf eine IP-Addresse hören.

    Ich möchte jedoch jedem µC nach außen eine eigene IP-Adresse geben.

    Was ich gedacht hatte ist, dass ich einen Network Driver implementiere, welcher dann als bridge fungiert. Jedoch hatte ich dabei den Gedanken, dass hier nur das Layer2 Protokoll umgesetzt wird. (Ich also Linux vorgaukele, dass es ein normales MAC-System(CSMA/CD) wäre)

    *edit

    ginge das möglicherweise mit einem Multicast-Socket?

    Einmal editiert, zuletzt von cocojack42 (9. Juli 2014 um 00:52)

  • Wenn ich dem Raspberry z.b. die IP 192.168.1.0 geben würde (also als gateway) und auf ihm dann ein Socket auf mache,
    könnte er dann Sockets annehmen, die an 192.168.1.1 adressiert sind?

  • 192.168.1.0 ist die Netzwerk-Adresse des Netzes 192.168.1.x/24 und in diesem Falle keine gültige IP-Adresse.
    Die erste gültige wäre die 192.168.1.1

  • Raspi spricht IPv4.
    Die Arduinos sind über 2.4 GHz (nRF24L01) angebunden => kein IPv4

    Raspi soll zwischen IPv4 und der 2.4 GHz-ID der Arduinos vermitteln, wenn ich es recht versteh.

  • Ja hey dbv, alter Kämpfer ...


    ...
    Ich verstehs immer noch nicht. ...
    ...

    ich "interpretiere" das auch eher, und zwar so, dass er wohl eine Art IP-Stack gebastelt hat und am originalen IP-Stack vorbei irgendwelche Daten versenden/empfangen will.
    Grundsätzlich geht das ... ich hab' so was in der Art vor Jahren mal für einen ADSL-Router von Siemens gebastelt ... war aber imho eine elende Fummelei und relativ kompliziert, weil ich nun sooo tief auch nicht im Kernel (war ne SuSe Distro) und in den unteren Netzwerk-Schichten daheim war/bin.

    Ich hoffe, ich hab's richtig verstanden und Dir jetzt keinen Quatsch erzählt :angel:

    cu,
    -ds-

  • Ohje, tut mir leid, ich weiß echt nicht wie ich es genauer erläutern kann.. ok ich versuchs nochmal:

    Heimnetz -> Raspberry -> Eigene Protokollfummelei auf nrf24l01 basis

    c++ Socket -> Gateway -> µC (z.b. Arduino)


    ein Socket aus meinem Heimnetz soll ein Socket zu meinem µC aufbauen.
    Die Sache ist nur, wie realisiere ich dieses Gateway.

    Ansätze hier wären:

    Socket:
    + Einfach zu implementieren
    - Nur eine IP ansteuerbar
    (Oder kann ein Socket auch ein kompletten IP-Bereich akzeptieren, wenn er als Gateway in der Route eingetragen ist).

    Custom Linux Network Device
    + Konfigurerien des Raspbi-Ethernet und Network Device als Bridge, somit auf jeden Fall als Bridge einsetzbar
    - Anspruchsvolle Implementierung
    ( nur die Implementierung von Osi-Layer 2, nicht die Umsetzung von TCP/IP auf eigenes Protokollgefummel )


    Ich hoffe ich liege da mit meiner Recherce richtig.

    Der Beitrag von eBiBy sagt alles noch einmal in Kurzform

    Zitat

    Raspi spricht IPv4.
    Die Arduinos sind über 2.4 GHz (nRF24L01) angebunden => kein IPv4

    Raspi soll zwischen IPv4 und der 2.4 GHz-ID der Arduinos vermitteln, wenn ich es recht versteh.

    Einmal editiert, zuletzt von cocojack42 (9. Juli 2014 um 19:05)

    • Offizieller Beitrag

    Jetzt hab ichs :). der Pi ist also dein Socketserver (Gateway) der nimmt Verbindungen von allem ,was zeug auf dem jeweiligen port an ihn sendet , an. Dein Heimnetz-C-Programm will jetzt z.B. Sender4 erreichen. Also sendet er sein "Hallo Sender4-sag mal was" an den Pi, der wiederum aus dem Nachrichten Paket weiss an welchen Sender es geht und verteilt dann aufgaben.

  • Meine Frage dazu ist zum einen, ob der Raspberry jeden Socket annimmt der an eine IP in seinem Netz ist.

    Vorraussetzung wäre natürlich, dass meine anderen Rechner als Route ins Netz (z.B.) 192.168.1.X den Raspberry als Gateway nutzen.

    Nochmal konkret:

    Mein Windows Rechner (192.168.0.42) baut ein (TCP) Socket zur IP 192.168.1.55 über den Raspberry (Gateway) 192.168.1.1 auf.
    Wenn ich auf dem Raspberry nun einen SocketServer öffne, kann er dieses annehmen?

    Einmal editiert, zuletzt von cocojack42 (9. Juli 2014 um 21:32)

  • Hab das Thema grad mal überflogen, du möchtest also sowas hier:

    Code
    Heimnetz (192.168.0.42)		> RPi (192.168.1.1) 	>	192.168.1.55	> uC1
    													>	192.168.1.56	> uC2
    													>	192.168.1.57	> uC3
    													>	192.168.1.58	> uC4
    													>	192.168.1...	> uC...

    Könntest du nicht zunächst mal dir entsprechend viele virtuelle Netzwerkkarten erstellen und dann deinen Socket Server auf allen entsprechenden IPs lauschen lassen ob da irgenwo was kommt?

  • Vermutlich eher so, dass die uC's eine eigene IP (oder ähnlich) bekommen und mit dem RPi als Gateway im Heimnetz (bidirektional) kommunizieren.

    Code
    Heimnetz (192.168.0.42)		> RPi (192.168.1.1) 	<>	192.168.1.55	= uC1
    													<>	192.168.1.56	= uC2
    													<>	192.168.1.57	= uC3
    													<>	192.168.1.58	= uC4
    													<>	192.168.1...	= uC...
  • Ich glaube, dass das man mit tun/tap (wie bereits weiter am Anfang erwähnt) hier doch recht vielversprechend sein kann oder?

    Wie ich das ganze verstehe, kann ich hier einen "ip" paket annehmen und es dann mit einer software weiterverarbeiten.
    Stimmt das?

  • So ist das wohl ;) ...

    Allerdings bin ich aus dem Thema, wie schon mal erwähnt, leider schon einige Jahre raus.
    Ich fürchte, da wirst Du sinnvollerweise ein anderes Forum konsultieren müssen, das sich etwas spezieller mit Linux/Kernel Geschichten befasst. Gibt's aber ...
    Für RPi-spezifische Geschichten bist Du dann ja hier immer willkommen.

    cu,
    -ds-

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!