Laboration 3 beskrivs här.
Du har klarat laborationen när du kan pinga CD-servern med alla
möjliga storlekar från 4 till 1450 och den svarar fastän du
pingar många gånger med olika storlekar. ARP, IP samt ICMP
skall vara implementerade korrekt. Servern skall givetvis inte
krascha. Dessutom får inga minnesläckor förekomma. Använd
följande kodrad för att ta reda på tillgängligt minne: (för
att använda ax_coreleft_total() måste sp_alloc.h
inkluderas med
cout << "Core " << ax_coreleft_total() << endl;
Vidare skall CD-servern svara på rimlig tid. En normal ping tid från en CD-server är ca 2 ms och din tid skall inte vara mycket högre. Bovarna i dramat här är minnesallokeringar, minneskopieringar och debugutskrifter. Tag bort alla debugutskrifter och minimera antalet allokeringar och kopieringar. Tänk på att objekt instancieringar ger en minnesallokering var. Stackallokeringar är mycket snabbare än vanliga dynamiska allokeringar!
Slutligen skall givetvis the ethernetpaket som skickas ut på nätet vara korrekta med rätt längd, käll- och destinationsadress i ethernetheadern, korrekta IP- och ICMP-headrar samt korrekta ARP-svar!
Gör labben i följande ordning:
Börja med ARP. Tänk på att hela tiden implementera i den ordning paket hanteras, dvs.
Obs! Testa ofta. Testa varje metod du lägger till i kedjan!