Praesi C-Mesh

22
C -Mesh Routing-Simulation in C ( ), 01. Juli 2013 Alain Horner @elHornair

description

German presentation on a school project on parallel C programs. For details see https://github.com/elHornair/mesh

Transcript of Praesi C-Mesh

Page 1: Praesi C-Mesh

C-MeshRouting-Simulation in C

( ), 01. Juli 2013Alain Horner @elHornair

Page 2: Praesi C-Mesh

Intro

Page 3: Praesi C-Mesh

AufgabenstellungOffizielle Kennen wir alle

Aufgabenstellung

Page 4: Praesi C-Mesh

Lösungskonzept

Page 5: Praesi C-Mesh

Funktionsweise der KnotenBoss-Worker ModellBoss: Auf Paket wartenBoss: Paket an Worker weitergebenWorker: Paket verarbeiten

Page 6: Praesi C-Mesh

Funktionsweise der KnotenVerteilung der Pakete

Page 7: Praesi C-Mesh

Funktionsweise der KnotenBoss-Worker: Implementierung mit Pthreads

while (1) { // wait for next package newsockfd = wait_for_connection(sockfd);

// let worker handle package pthread_create(&workers[thread_counter], NULL, worker_init, (void *)newsockfd);

// alternate workers thread_counter += 1; if (thread_counter >= NUM_WORKERS) { thread_counter = 0; }}

Details: Siehe Github

Page 8: Praesi C-Mesh

Verbindungen zu NachbarenNachbar: Knoten, dessen IP-Adresse und Port bekannt istNachbaren-ListeBidirektionale Verbindungen -> Handshake

Page 9: Praesi C-Mesh

Verbindungen zu NachbarenHandshake

Page 10: Praesi C-Mesh

RoutingZ.B. “In welcher Richtung liegt das Ziel?”Tabelle mit zwei EinträgenPro Eintrag: Nachbar (IP-Adresse und Port)

Page 11: Praesi C-Mesh

RoutingEigenheit von Aufgabenstellung ausgenutzt:

Routingtabelle möglichst früh anpassenEinträge werden nie überschrieben

“Pakete werden immer von der Quelle zum Zieloder vom Ziel zur Quelle gesendet”

Page 12: Praesi C-Mesh

Paket-ForwardingKnoten: Paket weiterleiten, falls nicht für michRoutingtabelle verwendenFallback: Flooding

Page 13: Praesi C-Mesh

Paket-ForwardingFlooding

Page 14: Praesi C-Mesh

Paket-ForwardingProblem mit ringförmig verbundenen Knoten

Page 15: Praesi C-Mesh

Erreichen des ZielsNur bei Quell- und Zielknoten möglichAusgabe der NachrichtUmwandlung des Nachrichtenpakets in OK-PaketRouting sehr einfachSchwarze Liste wird ignoriertOK-Paket: Zurück bis zu ursprünglichem Sender

Page 16: Praesi C-Mesh

Demo

Page 17: Praesi C-Mesh

DemoPython-Testprogramm1 Startknoten1 Zielknoten10 Verbindungsknoten3 Pakete

Page 18: Praesi C-Mesh

Outro

Page 19: Praesi C-Mesh

Lessons learnedGeteilte Ressourcen immer lockenDebugging: Gnu Debugger (GDB)

Page 21: Praesi C-Mesh

Fragen?

Page 22: Praesi C-Mesh

Danke!