Guten Morgen zusammen, ich nehme aktuell den MAC an einem STM32F7 (Nucleo-F767ZI) in Betrieb und versuche mich in die Thematik einzuarbeiten. Das Nucleo Board ist direkt mit meinem PC über ein Ethernet-USB Wandler (Edimax EU-4208) angeschlossen. Im Wireshark kann ich sehen, dass regelmäßig ARP und Broadcast Pakete vom PC verschickt werden. Diese kann ich auch mit dem STM32F7 empfangen. Nun möchte ich gerne RAW Ethernet Frames (Payload 256 Bytes, 0x00 bis 0xFF) verschicken, laut Logic-Analyzer auf dem RMII passiert dies auch. Nur kann ich im Wireshark nichts erkennen, hätte zumindest den Empfang von fehlerhaften Paketen erwartet. Ob CRC korrekt berechnet und verschickt wird kann man via Logic-Analyzer nicht direkt sehen, da RMII vom Saleae nicht unterstützt wird. Habe auch keine Lust das von Hand zu zerpflücken :). Via google, habe ich paar Hinweise entdeckt, z. B. promiskuitive Modus oder Deaktivieren des CRC checks im Treiber. Leider führte dies nicht zum Erfolg. Hat jemand von euch sowas gelöst?
mr. mo schrieb: > Nur kann ich im Wireshark nichts erkennen, hätte zumindest den Empfang > von fehlerhaften Paketen erwartet. Vielleicht werden fehlerhafte Pakete schon vom Netzwerkteiber oder gar der Hardware abgefangen. > Via google, habe ich paar Hinweise entdeckt, z. B. promiskuitive > Modus oder Deaktivieren des CRC checks im Treiber. Das sind sicher optionale Features.
Stefan ⛄ F. schrieb: > Vielleicht werden fehlerhafte Pakete schon vom Netzwerkteiber oder gar > der Hardware abgefangen. Habe ich auch vermutet. Aber irgendwie muss man das ja debuggen können. Ich könnte ein weiteres Nucleo Board nehmen, empfangen kann ich ja. Ansonsten werde ich mal nach Sniffer für Ethernet Leitungen googeln, vielleicht ist sowas bezahlbar oder einfach realisierbar.
mr. mo schrieb: > mit meinem PC über ein Ethernet-USB Wandler (Edimax EU-4208) > angeschlossen bei einem Ethernet-Anschluss an USB würde ich erst einmal prüfen, ob der den Promiscuous-Mode überhaupt vollständig implementiert.
Ethernetchips haben einen MAC-Filter, der Pakete wegschmeisst, dessen Zieladresse nicht im Filter steht (Broadcast ff:ff:ff:ff:ff:ff geht immer durch). Der Promiscuous-Mode schaltet diesen Filter ab. Fehlerhafte Pakete (CRC, Framing, etc) werden ebenfalls verworfen (aber üblicherweise in Errorcountern gezählt). Je nach Betriebssystem werden dann Pakete weiter gefiltert (Ethertype etc). Um es dem Empfänger möglichst einfach zu machen, also Broadcast-Pakete mit einem bekannten Ethertype verschicken. CRCs werden üblicherweise vom Chip generiert und sollten korrekt sein. Evtl die Errorcounter überprüfen. Evtl stimmt der Ethernet-Modus aber auch nicht (Bitrate, Duplex, etc) - das wird vom MII ausgehandelt, muß aber evtl erstmals konfiguriert und getriggert werden. Den Link-Status im Empfänger überprüfen, ob da was passiert ist.
Moin, Geh' davon aus, dass normale Netzwerkkarten/Switche das Paket verwerfen, wenn die Ethernet-CRC nicht stimmt oder das Paket zu kurz ist. Fuer solche Tests empfehl' ich ein Arp (+ Padding), da kann man sich einfach ein "schoenes" incl. richtiger CRC aus einem Wireshark Mitschnitt von irgendwoher raussuchen und c+p. Gruss WK
Versuche es doch mal mit dem Beispiel zu dem dev Board. In den cubemx lib für den f4 sind Beispiele zu finden. Hth, Adib.
Danke für die Antworten! foobar schrieb: > Evtl stimmt der Ethernet-Modus aber auch nicht (Bitrate, Duplex, etc) - > das wird vom MII ausgehandelt, muß aber evtl erstmals konfiguriert und > getriggert werden. Den Link-Status im Empfänger überprüfen, ob da was > passiert ist. Wird via Autonegotiation ausgehandelt. Der PHY (LAN8742) meldet, dass alles passt. foobar schrieb: > Um es dem Empfänger möglichst einfach zu machen, also Broadcast-Pakete > mit einem bekannten Ethertype verschicken. Dergute W. schrieb: > solche Tests empfehl' ich ein Arp (+ Padding), ... Das wäre eine einfache Lösung, würde ich als Nächstes testen und berichten. adib schrieb: > Versuche es doch mal mit dem Beispiel zu dem dev Board. > In den cubemx lib für den f4 sind Beispiele zu finden. Funktionieren wundervoll. Habe daraus bloß kaum was gelernt. Deshalb erarbeite ich mir den Weg vom MAC über Konfiguration lwIP bis zum kleinen Server selbst.
Ha! Das war ja einfach :) Das ARP Paket kommt im Wireshark an (siehe Screenshot). Die MAC Adresse mag er nicht sonderlich, aber egal. Folgendes Datenpaket habe ich im Sekundentakt versendet, Padding und CRC macht der MAC des STM32F7.
1 | uint8_t ARP[42] = |
2 | {
|
3 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // Destination: Broadcast |
4 | 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, // Source |
5 | 0x08, 0x06, // Type: ARP |
6 | 0x00, 0x01, // Hardware type: Ethernet |
7 | 0x08, 0x00, // Protocol type: IPv4 |
8 | 0x06, // Hardware size: 6 |
9 | 0x04, // Protocol size: 4 |
10 | 0x00, 0x01, // Opcode: request |
11 | 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, // Sender MAC address |
12 | 0xc0, 0xa8, 0x00, 0x0F, // Sender IP address |
13 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Target MAC address |
14 | 0xc0, 0xa8, 0x00, 0x01, // Target IP address |
15 | };
|
Ich habe dann entsprechend die MAC Adresse und eine virtuelle IP meines eingetragen. Danke Leute!
Nicht umsonst kosten "richtige" Sniffer auch "richtiges" Geld und funktionieren nur mit dem "richtigen" Treiber, der die "richtige" (PCMCIA/PCCARD/PCI/PCIe)-Karte am Laufen haaelt. Das ein Switch das Paket dann trotzdem verwirft ist richtig. Deswegen benutzt man fuer sowas, wenn auch heute nur noch schlecht beschaffbar, einen echten Hub.
mr. mo schrieb: > Ha! Das war ja einfach :) Das ARP Paket kommt im Wireshark an (siehe > Screenshot). Die MAC Adresse mag er nicht sonderlich, aber egal. Das I/G address bit darf bei der Quell-Adresse auch nicht 1 sein... Einfach den Standard lesen. Die 11 durch 10 tauschen und gut ist.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.