Hallo, nach welcher groben verfahrensweise schreibt man einen tcp/ip-stack? 1. socket installieren 2. IP konfigurieren 3. ARP und ICMP 4. ... weitere protokolle und wenn das alles installiert worden ist nach der reihe geht man dann einfach in die while(1) schleife der main-routine und wartet bis ein entsprechender interrupt auftritt? Ich hab mir schon ein paar stacks angeschaut - jedoch werden oft unterschiedliche verfahren durchgeführt... Vll. kann mir jmd sagen, was am anfang alles installiert werden muss und wo der interrupt beginnen muss, wenn ein neues ip-paket ankommt oder gesendet werden soll? Bernd
Von unten nach oben, würde ich sagen. TCP/IP ist in mehreren Layern aufgeteilt. Ich würde mit der untersten Schicht anfangen. Ich würde erstmal versuchen auf unterster Ebene ICMP-Nachrichten zu verschicken, zu empfangen und auszuwerten. Zum Beispiel einer Sync-Nachricht an eine IP-Adresse, die der Router nicht kennt und mit einer Unreachable-Nachricht beantworten müsste.... Da du offensichtlich mit Begriffen wie "Interrupts" noch nichts anzufangen weisst, würde ich erstmal ganz einfaches Polling vorschlagen.
doch mit interrupts kann ich schon was anfangen und hab ich auch schon programmiert... und "von unten nach oben" ist mir auch klar... nur die art wie man das programmiert, ist mir nicht ganz klar... sind das wirklich einzelne Funktionen, die nach einander aufgerufen werden zu beginn bis alles initialisiert worden ist? Und während das programm in der while(1) schleife läuft im main-programm, werden neue pakete durch interrupts erkannt und dann die entsprechenden funktionen aufgerufen? Normalerweise soll ja ein solcher interrupt sehr kurz gehalten werden, aber wenn ein interrupt dann daraus besteht, dass erst erkannt werden muss ob das paket auch wirklich für einen ist, das paket bis zur eigentlich information entpackt werden muss - dauert das doch schon etwas länger.... wie man das richtig effektiv programmiert, hab ich noch nicht ganz verstanden... Bernd
werden z.B. auch zuerst alle Protokolle die man so einsetzen möchte initialisiert und abschließend als letzte Aktion erst der Ethernet PHY aktiviert? Bernd
Hallo Bernd, wahrscheinlich würde ich ein Multitasking-Betriebssystem dazu einsetzen. Die Interruptroutine nimmt nur das Paket entgegen, aktiviert die Netzwerktask und ist dann schon fertig. Die Netzwerktask kümmert sich um das Paket, nimmt es auseinander und baut eine passende Antwort zusammen. Die Antwortpakete werden in eine Warteschlange gelegt und nach und nach von einer anderen Interruptroutine verschickt. Main() kann in der Zeit weiter warten und vielleicht auf bestimmte Ergebnisse aus der Kommunikation reagieren. Gruß, Martin
Für mich macht es den anschein, als wenn hier ziemlich wenig Programmiererfahrung vorhanden ist. Macht es sinn gleich mit der implementierung eines TCP/IP-Stacks anzufangen? Meiner Meinung nach nicht. Meine persönliche Herrangehensweise ist immer Stückchen für Stückchen und irgendwann setzt sich das Puzzle automatisch zusammen. Die Frage nach Reihenfolge, wie man was initialisiert und aktiviert stellt sich am Anfang einfach nicht. Ausserdem ist sie abhängig von der eingesetzten Hardware. Überlicherweise funktionieren Interrupt-gesteuerte Kommunikation über sog. Ringbuffer: Eine Interruptroutine schreibt die empfangenen Daten in einem Buffer und signalisiert dem vordergrundprozess, daß es etwas zu tun gibt..
>Die Interruptroutine nimmt nur das Paket entgegen, aktiviert die >Netzwerktask und ist dann schon fertig. Die Netzwerktask kümmert sich um >das Paket, nimmt es auseinander und baut eine passende Antwort zusammen. d.h. der erste interrupt macht seine tasks - paket entgegennehmen und im speicher sichern - und ruft zum schluss in form eines weiteren interrupts - xyz Bit setzen die nächste task auf und wird danach beendet? Diese Task nimmt dann das Paket auseinander und jedes Protokol holt sich seinen teil über einen pointer ab. Antworten werden generiert und durch Interrupt angezeigt, dass diese versendet werden können. >Die Reihenfolge, wie man was initialisiert und aktiviert stellt sich am >Anfang einfach nicht. versteh ich leider nicht? Man macht sich doch zuvor gedanken wie man was aufbauen möchte und arbeitet sich dann step by step durch? Bernd
Bernd Schuster wrote: >>Die Reihenfolge, wie man was initialisiert und aktiviert stellt sich am >>Anfang einfach nicht. > > versteh ich leider nicht? Man macht sich doch zuvor gedanken wie man was > aufbauen möchte und arbeitet sich dann step by step durch? Wenn man noch nicht mal nen Plan hat, wie die Kommunikation funktioniert, finde ich es absolut unsinnig sich zu diesem Zeitpunkt Gedanken zu einer Funktionaltät zu machen, der in astrologisch weiter Ferne liegt....
wählt man sich eigentlich die MAC Adresse selber aus? Oder steht die irgendwo? welche der Chip aufweist? Bernd
Wahlweise. Die Mac-Adresse kann man entweder selber generieren (auf validität achten) oder man nimmt die Mac-Adresse, die nahezu jeder Ethernet Kontroller gespeichert hat. Ich empfehle Letzteres.
wie bekommt man diese MAC Adresse heraus? kann man diese mit EMAC_SA1L etc. auslesen? Bernd
was genau ist eine EMAC Hash Address 64Bit groß und wozu benötigt man diese? Wird hierdurch die MAC Adresse geschützt / verschlüsselt übertragen? Des Weiteren kann mein µController bis zu vier verschiedene MAC Adressen in den folgenden REgistern speichern. EMAC specific Address 1 Low, First 4 Bytes EMAC specific Address 1 High, Last 2 Bytes EMAC specific Address 2 Low, First 4 Bytes EMAC specific Address 2 High, Last 2 Bytes EMAC specific Address 3 Low, First 4 Bytes EMAC specific Address 3 High, Last 2 Bytes EMAC specific Address 4 Low, First 4 Bytes EMAC specific Address 4 High, Last 2 Bytes Ich hab mal von einem Verfahren gelesen, welches sich dann stets die passende MAC raussucht oder nach einer gewissen zeit diese ändert, wegen Angriffen etc. Und von irgendwo holt sich das Gerät die neuen MAC adressen ab und löscht gleichzeitig die älteste aus dem system. Weiß da jmd noch mehr zu diesem Thema? Bernd
EMAC? Vieleicht solltest du mal deine Quellen offenlegen..... Die Mac-Adresse kann man in der Regel ganz normal aus dem Speicher des Kontrollers auslesen. Wie und Wo die zu lesen ist hängt von der eingesetzen Hardware ab... Das mit den sich wechselnden MacAdressen sind Sicherheitsthemen die dich am Anfang nicht ablenken dürfen und erstmal bei Seite packen solltest..
AT91RM9200 verwende ich als http://www.atmel.com/dyn/products/product_card.asp?part_id=2983 EMAC bedeutet nur ethernet mac interface oder so ähnlich also nichts spezielles... >Die Mac-Adresse kann man in der Regel ganz normal aus dem Speicher des >Kontrollers auslesen. Wie und Wo die zu lesen ist hängt von der >eingesetzen Hardware ab... hmmm hab ich jetzt beim durchlesen des Ethernet Teils nichts gelesen, dass irgendwo die mac adresse hinterlegt sei... Berndd
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.