Hallo,
Ich habe ein AVR32 Board auf dem FreeRTOS + lwIP läuft.
Ich möchte von Matlab aus ein UDP Paket versenden und dies mit dem AVR32
empfangen.
UDP Paket versenden vom AVR32 und empfangen von Matlab funktioniert.
Anpingen funktioniert auch, nur das empfangen nicht. :(
IP Adresse vom PC mit Matlab: 143.205.120.123
IP Adresse vom AVR32: 143.205.120.211
Mein Task: (es ist nur dieser Task aktiv)
Wenn ich von Matlab ein Paket versende dann bekomme ich vom AVR32 immer
die Antwort: Destination Unreachable (Port unreachable)
Hat jemand eine Idee warum dies so ist?
Bin schon am verzweifeln weil ich es mir einfach nicht erklären kann was
da nicht passt! :(
LG
godi
"Destination Unreachable" kommt immer von einem Router, Switch oder vom
IP-Stack des Absenders selbst.
Da in Deinem Fall beide Systeme im gleichen Netz hängen, besteht
anscheinend keine Verbindung zwischem Deinem Router und dem AVR32 (er
wantwortet nicht auf ARP Pakete).
Warscheinlich kannst DU ihn auch nicht anpingen, stimmts?
Doch ich kann ihn anpingen. Der AVR32 antworted auf alle 4 Pakete.
Wenn ich ein UDP Paket zum AVR32 sendet wird auch im lwIP die Funktion
ip_input() aufgerufen. Diese ruft auch die Funktion udp_input() auf.
Jedoch wird dort die ICMP Message mit den nicht erreichten Port
zurückgesendet.
In diesem Code in der udp_input() Funktion:
1
#if LWIP_ICMP
2
/* No match was found, send ICMP destination port unreachable unless
godi S. schrieb:> Doch ich kann ihn anpingen. Der AVR32 antworted auf alle 4 Pakete.
Und Du bist sicher, das der AVR antwortet und nicht irgendein anderes
Gerät?
Fritz
Ja es ist der AVR32.
Mir ist aber jetzt gerade was anderes aufgefallen.
Ich überwache mit Wireshark den Traffic und da steht beim gesendeten UDP
Paket das die Checksumme des Headers nicht stimmt. Im Anhang noch ein
Screenshot von Wireshark.
In Matlab R2011b verwende ich folgenden code:
Hmm...
Habe jetzt mal alle Pakete überprüft die vom PC gesendet werden.
Da ist anscheinend überall der Header defekt (auch beim Ping). Also
dürfte es nicht daran liegen.
Höchstwahrscheinlich hast Du eine intelligente Netzwerkkarte, die die
Checksummenberechnung macht. Dann haben die lokal gesendeten Pakete im
Dump eine falsche Checksumme, auf der Leitung sollte sie dann aber
stimmen.
Ok, Danke für die Info.
Hat jemand noch eine Idee warum das Empfangen nicht funktioniert?
Kann es sein, dass die Funktion udp_bind nicht richtig funktioniert, bzw
dass ich da noch falsche Parameter habe? (Fehler wird von der Funktion
keiner zurückgegeben)
dann sollte man noch die Portnummer mit dem 'htons(1234)' setzen. Damit
wird von der internen auf die feste Netzwerk Darstellung der Werte
konvertiert.
Hi godi,
hast du dein Problem lösen können? Ich habe das selbe Problem mit meinem
lwip-Stack.
Ich verwende die Version 1.4.1 auf dem NiosII, Cyclone V.
Der Stack an sich funtioniert, ich kann UDP-Packete versenden und diese
auch mit Wireshark ansehen. TCP-Packe werden sowohl gesendet, als auch
empfangen. Ich kann den Webserver via Firefox anzeigen. Nur das
Empfangen von UDP-Packeten funkioniert nicht.
Vielen Dank für die Hilfe
Gruß
Marius
Da ich diese Funktion recht häufig aufrufe ist es vielleicht nicht die
schönste Lösung, bei jedem Aufruf einen neuen UDP-Protokollblock
aufzusetzten, aber so funktioniert es erstmal.
Mein Problem liegt beim Empfangen von UDP-Pkgs. Mein Lösungsansatz sieht
so aus:
Das Flag "send_pkg" wird in einer Timer-ISR auf 1 gesetzt um das senden
anzustoßen.
Zum Testaufbau:
Auf einem dritten Rechner "C" erzeuge ich UDP-Pakete die ich gerne mit
meinem TestBoard B empfangen würde, die Pakete werden an die
Multicast-Addr. 224.0.0.0 Port 8884 gesendet. Ich sehe diese Pakete mit
WireShark auf meinem Host-Rechner A, ebenso die gesendeten Pakete von
meinem TestBoard B an die Multicast-Addr 192.168.1.255 Port 8884.
Aber ich kann mit meinem TestBoard B eben nicht die Pakete von C
empfangen.
Vielen dank für die Hilfe
>Mein Problem liegt beim Empfangen von UDP-Pkgs
ja das hab ich schon verstanden
das dein senden funktioniert
ich hatte den gleichen Fehler
und es so gelöst wie beschrieben
lass mal alles so wie es jetzt ist
(also ohne das "udp_connect")
hat dein "Testboard-B" die IP "224.0.0.0" ?
falls ja, setz sie zum test mal in den gleichen Adressraum
wie den PC also z.B. auf "192.168.1.15"
und schreib ob es damit funktioniert
Sorry,
also das Testboard B bekommt über DHCP die 192.168.1.106
PC A die 192.168.1.102 und
PC C die 192.168.1.103
ohne das udp_connect funktioniert es leider auch nicht. Ich habe eben im
Debugger-Mode gesehen, dass die Multicast-Pakete an die Adresse
224.0.0.0 empfangen werden und bis an die Funktion ip_input()
weitergegeben werden.
Hier fällt das Paket glaube ich durch den Test auf
>Weiß du ob man in den lwipOpts.h irgendwo ein/ausschalten kann/muss>Multicastpakete zu empfangen?
nein, weiß ich leider nicht
...ich würde wie gesagt erst mal versuchen an
die "normale" IP zu senden also "192.168.1.106"
und schauen ob zumindest das geht
ja das habe ich gerade getestet, bringt aber leider auch nicht den
gewünschten Erfolg. Ich sehe das empfangene Paket aber das wird nicht
mit meiner UDP-Callback-Funktion verknüpft. Scheint so als ob ich meinen
udp-pcb nicht richtig aufsetzte...
Marius Mueller schrieb:> Hi godi,>> hast du dein Problem lösen können? Ich habe das selbe Problem mit meinem> lwip-Stack.
Hallo,
nein mein Problem mit UDP habe ich nicht mehr weiterverfolgt, da es mit
TCP/IP funktioniert.
Wenn ich am Montag zeit finde dann kann ich ja noch mal was Probieren
und die neu vorgeschlagenen Lösungen Probieren.