Hallo zusammen,
ich habe nun seit zwei Jahren MC-Systeme mit W5500 Chip laufen, bislang
alle mit fester IP. Jetzt wollte ich "mal schnell" :-) DHCP testen.
(Zwei Tage gefummelt..)
Ich benutze WIZNET Routinen. (Bei Github bzw. Wiznet aufrufbar)
Ich erhalte auch vom DHCP-Server eine Adresse,aber wenn ich diese gemäß
der Wiznet-Routine prüfen will, klappt das nicht:
Nach Erhalt der Adresse vom Server wird die Routine
"check_DHCP_LeasedIP aus der Library aufgerufen:
1
S8check_DHCP_leasedIP(void)
2
{
3
U8tmp;
4
int32_tret;
5
6
//WIZchip RCR value changed for ARP Timeout count control
// UDP send Timeout occurred : allocated IP address is unique, DHCP Success
19
20
#ifdef _DHCP_DEBUG_
21
printf("\r\n> Check leased IP - OK\r\n");
22
#endif
23
24
return1;
25
}else{
26
// Received ARP reply or etc : IP address conflict occur, DHCP Failed
27
send_DHCP_DECLINE();
28
29
//ret = dhcp_tick_1s;
30
//while((dhcp_tick_1s - ret) < 2) ; // wait for 1s over; wait to complete to send DECLINE message;
31
dhcp_tick_1s=4;
32
return0;
33
}
34
}
Die Routine prüft also, ob die für mich gedachte IP wirklich unbenutzt
ist ist, und somit keine Antwort erfolgt, so daß ein Timeout-Error
erfolgt. Nur dies ist nicht der Fall, die Rückgabe ist nur ein SENT
complete Interrupt.
sendto-Routine ist Bestandteil von socket.c von Wiznet, hier nur
verkürzt wiedergegeben:
IMHO hat die WIZNET-Library einen Fehler.. Müßte nicht eine bestimmte
Zeit auf Antwort gewartet werden?
Zweite Frage: Ich habe mir das mit Wireshark angesehen. Die
Überprüfungs-sendto- Routine, bzw. dessen Datenprotokoll, ist in
Wireshark nicht zu sehen, obwohl gesendet wird (Send-OK Interrupt Flag)?
Verschluckt Wireshark
unbekannte UDP- Protokolle?? Kann ich das irgendwie konfigurieren?
Hanns-Jürgen M. schrieb:> Verschluckt Wireshark> unbekannte UDP- Protokolle?? Kann ich das irgendwie konfigurieren?
Wireshark im Promiscuous-Mode eher nicht. Aber das UDP-Paket wird, wenn
die IP unbenutzt ist, ja gar nicht selbst gesendet. Was du sehen
solltest ist eine ARP Anfrage welche MAC die neue IP hat. Das sollte im
Normalfall keiner sein, also kommt keine Antwort, also wird nach Timeout
das Senden des UDP-Pakets mit Fehler abgebrochen.
LG, Sebastian
Hallo Sebastian, danke für die ausführliche Antwort.
Leider sind meine Netzwerkprotokoll-Kenntnisse eher rudimentär.
Soweit ich weiß, sind UDP Nachrichten verbindungslos. Also müßte IMHO
die Nachricht ausgesendet werden? Und damit auch zu sehen sein? Wo liegt
hier mein Verständnisproblem?
Ich hänge mal den (verkürzten) Screenshot von Wireshark an. "Meine"
vorläufige IP ist 1.2.3.4
Oh, ich sehe gerade, da wird von MAC DE:AD:BE:EF:00:FF ("ich") die
ARP-Nachricht ausgesendet. Der Router und DHSOD "Genexis" fragt
daraufhin, ob die IP 192.168.1.43, die er "mir" in Nachricht Nr. 18
angeboten hat, genutzt wird (?).
Aber: Nach dem Aussenden meiner ARP-Nachricht gibt meine W5500 keine
Timeout IRQ-Bit sondern nur ein SEND_OK -IRQ zurück. Zusätztlich und
mir unverständlich ist das IRQ-Bit 0 gesetzt. (Bedeutung ist auch im
Screen Shot)
ACHTUNG: Mein vorheriges Posting enthält einen Fehler, reiche Korrektur
nach
So, der Teil mit den Interrupt-Bits ist falsch, es wird überhaupt kein
Bit gesetzt. Ich hatte etwas verwechselt.
Aber auch wenn ich nun per UDP / ARP die "CHECK_IP_CONFLICT" Nachricht
an eine bereits vergebene Adresse sende, ändert sich nichts, es wird
kein IRQ-Bit gesetzt. Allerdings sehe ich dann (und nur dann) die
Nachricht in WireShark. (ScreenShot angehängt)
Grübel, Grübel... ein sehr seltsames Verhalten.
So, ich erkläre das Thema als beendet. Ich habe die
WIZNET-Vorlageroutinen Schritt für Schritt analysiert, um einen Fehler
zu finden. Ich finde aber keinen. Der W5500 (zumindest ist der Version,
die ich habe) liefert keinen Timeout-Fehler. Auch ist nichts anderes
Vergleichbares verwendbar.
Zwei Tage Suche reichen mir, ich werde also die Überprüfung, ob die
angebotene IP schon verwendet wird, ersatzlos streichen. Bei meinem
kleinen Netz ist das tolerierbar.
Schönes WE wünscht Yogy