Mein Kollege ist aus gefallen und man hat hat mir am Montag die Aufgabe
aufs Auge gedrückt, einen MAC über MCU anzusprechen. MAC ist als
Software da, PHY auf dem board (ich habe es noch nicht gesehen) und
alles soll hw-mässig laufen.
Mein Problem: Ich habe keinen Plan, wie ich da ran gehe. Was ich muss
einem MAC an infos verpassen, dass er einen Ton abgibt?
Gesendet werden sollen UDP-Pakete. Ich habe mir das angesehen und laut
WIKI wird noch aus dem IPV4-Protokoll ein header vorgeschaltet.
Progger schrieb:> Mein Problem: Ich habe keinen Plan, wie ich da ran gehe. Was ich muss> einem MAC an infos verpassen, dass er einen Ton abgibt?
Ein MAC möchte eine MAC-Adresse als Ziel und eine als Quelle. Und einen
Datenblock. Den sendet er raus, an das Ziel. Hängt natürlich vom
verwendeten MAC und seinen Schnittstellen ab, wie genau und was genau er
das möchte.
> Gesendet werden sollen UDP-Pakete. Ich habe mir das angesehen und laut> WIKI wird noch aus dem IPV4-Protokoll ein header vorgeschaltet.
Der Datenblock besteht dann in diesem Fall aus einem IP4 Header (mit
IP-Adresse für Ziel und Absender, und vielem mehr) und den Nutzdaten.
Diese Nutzdaten bestehen aus dem UDP Header und den eigentlichen
Nutzdaten.
Jedes Protokoll hat ein "next header" Feld, welches eine Nummer enthält
die angibt, von welchem Typ das nächste innere Paket ist.
Den Kram musst du vorher zusammenbauen und dem MAC schicken.
Du musst natürlich die MAC Adresse des Ziels wissen. Wenn du nur die IP
Adresse hast, musst du MAC Adresse nachgucken, oder noch ARP
implementieren.
gruß cyblord
Also
- eine MAC Adresse für mein Gerät habe ich (vergeben)
- eine MAC Adresse für das Ziel hätte ich auch, denke ich
Die IP-Adressen sehe ich hier noch nicht, woher ich die nehme und wie
die relevant sind. Braucht man die, wenn der MAC an MAC schickt?
Laut WIKI stecken die IP-Adressen (ziel und quelle) im IPV4 header,
ferner das Datenpaket UDP und dessen Länge.
Wie ich es interpretiere muss ich dem MAC das gesamte IPV4-Datenpaket
zusammengebaut schicken?
Progger schrieb:> Also>> - eine MAC Adresse für mein Gerät habe ich (vergeben)> - eine MAC Adresse für das Ziel hätte ich auch, denke ich>> Die IP-Adressen sehe ich hier noch nicht, woher ich die nehme und wie> die relevant sind. Braucht man die, wenn der MAC an MAC schickt?
Nein, aber die brauchst du wenn du UDP Pakete schicken willst. Weil der
Empfänger, den interessiert MAC nicht, nichtmal IP. Der mach nen Socket
auf und wartet auf ein UDP Paket von dir. Und das Socket ist an die
lokale Netzwekkarte gebunden und die kann dein Paket nicht an das
Programm zustellen wenn die IP Adresse nicht stimmt, auf die das Socket
horcht.
Und da UDP auf Schicht 4 (Transportschicht) liegt und IP auf Schicht 3
(Netzwerkschicht) und du nur MAC hast (Sicherungsschicht/2) musst du
wohl oder übel den ganzen Quatsch implementieren.
Du musst ja auch bedenken, was wenn du die Pakete über LAN Grenzen
hinweg, via Router oder gar über Internet schicken wolltest. Dann
erfolgt die gesamte Adressierung nur noch logisch über IP Adressen, dann
bringt dir die physikalische Adressierung via MAC gar nichts.
Wenn du jetzt nur Controller hättest, welche sich Nachrichten schicken
wollen über Ethernet, dann reicht MAC aus.
Wer ist denn der Empfänger der UDP Pakete?
Aber du hast ja sowieso UDP als Vorgabe also ist das alles egal.
>> Laut WIKI stecken die IP-Adressen (ziel und quelle) im IPV4 header,> ferner das Datenpaket UDP und dessen Länge.>> Wie ich es interpretiere muss ich dem MAC das gesamte IPV4-Datenpaket> zusammengebaut schicken?
Ja genau richtig. Aber du hast Glück. UDP ist ja total simpel. TCP ist
viel viel komplizierter.
gruß cyblord
Progger schrieb:> Also>> - eine MAC Adresse für mein Gerät habe ich (vergeben)> - eine MAC Adresse für das Ziel hätte ich auch, denke ich>> Die IP-Adressen sehe ich hier noch nicht, woher ich die nehme und wie> die relevant sind. Braucht man die, wenn der MAC an MAC schickt?>> Laut WIKI stecken die IP-Adressen (ziel und quelle) im IPV4 header,> ferner das Datenpaket UDP und dessen Länge.>> Wie ich es interpretiere muss ich dem MAC das gesamte IPV4-Datenpaket> zusammengebaut schicken?
Genau.
Dafür gibt es das ARP (Adress Resolution Protocol). Damit kannst Du
erstmal rausfinden, welche MAC Addresse Dein Ziel hat.
Also: Ziel ist eine IP Adresse, meinetwegen 192.1.1.0
Jetzt musst Du dazu die MAC Adresse rausfinden.
Dazu sendest Du ein ARP Packet. Das geht an alle und da wird sinngemäss
drum gebeten, dass sich der Knoten mit der IP Adresse 192.1.1.0 meldet.
Der antwortet dann und in dem Paket steht dann die MAC adresse als
Sendeadresse.
Damit hast Du die IP Adresse und die dazugheörende MAC Adresse und
kannst Dein UDP Paket zusamenbauen.
Gruss
Axel
Hallo,
irgendwann willst du die Daten sicherlich aufs Kabel drücken. Ethernet
nutzt dazu meist MII (Media Independent Interface) oder RMII (Reduced
MII), um MAC und PHY zu verbinden. Welches von beiden benutzt wird und
welche Pins dafür verwendet werden, musst du dem MAC auch mitteilen.
Um die Pakete zu erzeugen, kannst du dir zwei fertige Stacks anschauen:
uIP (ziemlich limitiert, aber um ein paar UDP-Pakete zu verschicken
ausreichend) und lwIP (komplizierter, größer und mächtiger). Beide sind
mikrocontrollertauglich und besser, als sich da was selbst zu stricken.
Gruß