Εργαστηριακή Άσκηση 5



Σχετικά έγγραφα
Ασύρματες Κινητές Επικοινωνίες Ενότητα 5: Διαχείριση ενέργειας

Εργαστηριακή Άσκηση 3

Ασύρματες Κινητές Επικοινωνίες Ενότητα 2: Το επίπεδο MAC του WiFi

Ασύρματες Κινητές Επικοινωνίες Ενότητα 3: Σημεία πρόσβασης στο Wireless Fidelity (WiFi) Μιχάλας Άγγελος Τμήμα Μηχανικών Πληροφορικής ΤE

Ασύρματες Κινητές Επικοινωνίες Ενότητα 1: Εισαγωγή

Ασύρματες Κινητές Επικοινωνίες Ενότητα 6: Worldwide Interoperability for Microwave Access (WiMAX)

Ασύρματες Κινητές Επικοινωνίες Ενότητα 8: Επαναληπτική ενότητα

Ασύρματες Κινητές Επικοινωνίες Ενότητα 4: Το πρωτόκολλο Transmission Control (TCP)

Προγραμματισμός Υπολογιστών με C++

Ασύρματες Κινητές Επικοινωνίες Ενότητα 7: Long Term Evolution (LTE)

Προγραμματισμός Υπολογιστών με C++

Προγραμματισμός Υπολογιστών με C++

Φροντιςτήριο. Linked-List

Προγραμματισμός Υπολογιστών με C++

ΤΕΧΝΟΛΟΓΙΑ ΔΙΚΤΥΩΝ ΕΠΙΚΟΙΝΩΝΙΩΝ 7ο ΚΕΦΑΛΑΙΟ

Δομές Δεδομένων και Αλγόριθμοι

Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( )

Εργαστήριο 2: Πίνακες

Υπολογιστικά Mαθηματικά II

Ερώτημα Α 1. Να γράψετε τις εντολές που πραγματοποιούν τα ακόλουθα:

Τίτλος Μαθήματος: Ηλεκτρονικοί Υπολογιστές IΙΙ. Διδάσκων: Επίκουρος Καθηγητής Αθανάσιος Σταυρακούδης

Συστήματα Παράλληλης και Κατανεμημένης Επεξεργασίας

1.1 Επαναλήπτες (repeaters ή regenerators)

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Δομές δεδομένων (Structures) Εισαγωγή στη C++

Ασύρματες Ζεύξεις - Εργαστήριο

Αρχές Δικτύων Επικοινωνιών. Επικοινωνίες Δεδομένων Μάθημα 4 ο

Αντικειμενοστραφής Προγραμματισμός

ΤΕΜ-101 Εισαγωγή στους Η/Υ Εξεταστική Ιανουαρίου 2011 Θέματα Β

Συστήματα Παράλληλης και Κατανεμημένης Επεξεργασίας

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΚΑΙ ΠΙΝΑΚΕΣ

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

8. Προσομοίωση Λειτουργίας Ασύρματων Δικτύων Υποδομής

ΚΑΤΑΝΕΜΗΜΕΝΑ ΣΥΣΤΗΜΑΤΑ. Παράδοση Ασκήσεων Κεφάλαιο 2 Ασκήσεις 3,6,8,9,15,22,24,26. Γεωργόπουλος Άλκης Α.Μ.: 39 Κοντογιώργης Αναστάσιος A.M.

ΔΙΚΤΥΑ ΥΠΟΛΟΓΙΣΤΩΝ Γ Τάξη ΤΟΜΕΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΠΑ.Λ. ΤΕΤΡΑΔΙΟ ΜΑΘΗΤΗ Κωνσταντοπούλου Μ., Χρυσοστόμου Γ.

Χωρική Βάση δεδοµένων Autocad

Δίκτυα Υπολογιστών. Ασκήσεις επανάληψης

ΔΙΑΣΥΝΔΕΣΗ ΔΙΚΤΥΩΝ (INTERNETWORKING)

ΜΑΘΗΜΑ / ΤΑΞΗ : ΔΙΚΤΥΑ ΥΠΟΛΟΓΙΣΤΩΝ ΙΙ / ΕΠΑΛ(Α & Β ΟΜΑΔΑ) ΣΕΙΡΑ: ΗΜΕΡΟΜΗΝΙΑ: 11/12/2011 ΑΠΑΝΤΗΣΕΙΣ

Δομές Δεδομένων. Λουκάς Γεωργιάδης.

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ - ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΜΑΘΗΜΑ: ΤΗΛΕΠΙΚΟΙΝΩΝΙΕΣ ΚΑΙ ΔΙΚΤΥΑ Η/Υ. Μελέτη Σημείου Πρόσβασης ως ασύρματου επαναλήπτη

ιαδίκτυα & Ενδοδίκτυα Η/Υ

Δίκτυα Υπολογιστών Εργαστήρια

Εισαγωγή στον Προγραμματισμό

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Συναρτήσεις II Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

Δομές Δεδομένων και Αλγόριθμοι (Γ εξάμηνο) Τμήμα Μηχανικών Πληροφορικής ΤΕ, ΤΕΙ Ηπείρου. Άσκηση εργαστηρίου #6 (Υλοποίηση δυαδικού δένδρου αναζήτησης)

ΤΙΤΛΟΣ ΜΑΘΗΜΑΤΟΣ: Δίκτυα Μεταγωγής & Τεχνικές Μεταγωγής Σε Δίκτυα Ευρείας Περιοχής

Τίτλος Μαθήματος: Ηλεκτρονικοί Υπολογιστές IΙΙ. Διδάσκων: Επίκουρος Καθηγητής Αθανάσιος Σταυρακούδης

Προγραμματισμός Ι. Κλάσεις και Αντικείμενα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Θέματα Πανελλαδικών Εξετάσεων

ΤΕΧΝΟΛΟΓΙΑ ΔΙΚΤΥΩΝ ΕΠΙΚΟΙΝΩΝΙΩΝ

Αναφορές, είκτες και Αλφαριθμητικά

Δομή Προγράμματος C++, Χειρισμός Μεταβλητών και Συναρτήσεις Εισόδου - Εξόδου

Δίκτυα Υπολογιστών. Δίκτυα υπολογιστών και το Διαδίκτυο Εισαγωγή. Κ. Βασιλάκης

Αντικείμενο της παρούσας άσκησης είναι η μελέτη του ρόλου των τοίχων προστασίας Firewalls στην προστασία των κοινόχρηστων δικτύων.

1 η ΣΕΙΡΑ ΑΣΚΗΣΕΩΝ. / 2. Οι όροι Eb. και Ec

Πληροφορική 2. Γλώσσες Προγραμματισμού

Ο στόχος του εργαστηρίου είναι να παρουσιάσει τις δύο βασικές καταστάσεις λειτουργίας ενός ασύρματου τοπικού δικτύου (ad hoc και υποδομής).

Αντικειμενοστραφείς Γλώσσες Προγραμματισμού C++ / ROOT

ΣΤΟΙΧΕΙΑ ΤΗΣ ΓΛΩΣΣΑΣ C++ Constructors, Destructors, Pointers IO Streams, File Streams

Προγραμματισμός ΙI (E)

Εργαστήριο 4 Πρωτόκολλα Δρομολόγησης

Εισαγωγή στον Προγραμματισμό με C++

lab13grades Άσκηση 2 -Σωστά απελευθερώνετε ολόκληρη τη λίστα και την κεφαλή

Πρόγραμμα Πιστοποίησης Γνώσεων και Δεξιοτήτων H/Y ΕΝΟΤΗΤΑ 1: «ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ ΠΛΗΡΟΦΟΡΙΚΗΣ»

Περιεχόμενα. Κεφάλαιο 1 Εισαγωγή σε Έννοιες των Δικτύων Υπολογιστών Κεφάλαιο 2 Αξιοπιστία Κεφάλαιο 3 Αλγόριθμοι Πολλαπλής Πρόσβασης...

ΑΣΚΗΣΕΙΣ ΓΙΑ ΤΟ ΕΡΓΑΣΤΗΡΙΟ 2

3.2 Το αυτοδύναμο πακέτο IP (datagram) Δομή πακέτου

Προγραμματισμός Υπολογιστών με C++ Φύλλο Διαγωνίσματος Ακαδημαϊκό εξάμηνο: Χειμερινό

Σημειώσεις κεφαλαίου 16 Αρχές επικοινωνίας με ήχο και εικόνα

Ασύρματες Ζεύξεις - Εργαστήριο

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧ/ΚΩΝ ΚΑΙ ΜΗΧ. ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΕΠΙΚΟΙΝΩΝΙΩΝ, ΗΛΕΚΤΡΟΝΙΚΗΣ ΚΑΙ ΣΥΣΤΗΜΑΤΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ

Αντικειμενοστραφείς Γλώσσες Προγραμματισμού C++ / ROOT

Εργαστήριο 1: Αρχές Κινητών Επικοινωνιών

6. Ethernet. 6.1 Εισαγωγή

Η εντολή if-else. Η απλή μορφή της εντολής if είναι η ακόλουθη: if (συνθήκη) { Η γενική μορφή της εντολής ifelse. εντολή_1; εντολή_2;..

Προγραμματισμός Υπολογιστών με C++

Χρόνοι Μετάδοσης και Διάδοσης

Δισδιάστατοι Πίνακες (2D Arrays) Εισαγωγή στη C++

Υπολογιστικά Mαθηματικά II

A1. Φυσικό επίπεδο 1. Αντιπαραθέσετε (κάνετε τη σύγκριση) με 2-3 προτάσεις την στατιστική πολυπλεξία και την πολυπλεξία με διαίρεση χρόνου.

MYY703: Δίκτυα Υπολογιστών I Εργαστήρια

ΔΙΚΤΥΑ ΥΠΟΛΟΓΙΣΤΩΝ ΙΙ

Εργαστήριο 4: Κυψελωτά Δίκτυα Κινητών Επικοινωνιών

Μεταγωγή Τοπικής Κλίμακας

ίκτυα ίκτυο υπολογιστών: Ένα σύνολο από υπολογιστικές συσκευές που συνδέονται µεταξύ τους για σκοπούς επικοινωνίας και χρήσης πόρων. Συνήθως, οι συσκε

Υλοποίηση τεχνικών για την αποφυγή συμφόρησης σε τοπικά ασύρματα δίκτυα αισθητήρων

Εντολές εισόδου - εξόδου. Εισαγωγή στη C++

Δίκτυα Τηλεπικοινωνιών. και Μετάδοσης

Δίκτυα Υπολογιστών. Δίκτυα υπολογιστών και το Διαδίκτυο Εισαγωγή. Κ. Βασιλάκης

ΕΠΙΚΟΙΝΩΝΙΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΤΕΧΝΟΛΟΓΙΕΣ INTERNET

Ενδεικτικές λύσεις και στατιστικά

ΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ - ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΜΑΘΗΜΑ: ΔΙΚΤΥΑ Η/Υ

Άσκηση 1 η Τοπικά Δίκτυα Δεδομένων (LANs)

Συμβολοσειρές ΣΥΜΒΟΛΟΣΕΙΡΕΣ. Γεώργιος Παπαϊωάννου ( )

Ευρετική αναζήτηση (πληροφορημένη αναζήτηση)

Προγραμματισμός Υπολογιστών με C++

Αντικειµενοστρεφής Προγραµµατισµός

How do loss and delay occur?

2η Σειρά Ασκήσεων ΗΥ-335α Network layer Παράδοση Παρασκευή 27/11/ :55

Transcript:

Εργαστηριακή Άσκηση 5 1) Σκοπός της εργαστηριακής άσκησης Σκοπός της άσκησης είναι η μελέτη της ενεργειακής συμπεριφοράς των κόμβων ενός ασύρματου δικτύου και η μελέτη της εξασθένισης του σήματος. 2) Βασικές έννοιες Propagation loss: Εξασθένιση του σήματος. Κατά τη μετάδοση των σημάτων, παρατηρείται εξασθένιση της ισχύος των σημάτων, που ονομάζεται απώλεια διαδρομής (path loss). Για τον προσδιορισμό της απώλειας διαδρομής και την περιοχή κάλυψης ενός πομπού χρησιμοποιούνται διάφορα propagation loss models. Propagation delay: Ο χρόνος που χρειάζεται ώστε να φτάσει το σήμα στον προορισμό του. Εξαρτάται από την απόσταση μεταξύ πομπού και δέκτη και την ταχύτητα μετάδοσης. 3) Σενάριο Προσομοίωσης Αρχικά, δηλώνουμε τα include αρχεία που θα χρειαστούμε και το namespace που θα χρησιμοποιήσουμε. #include "ns3/core-module.h" #include "ns3/network-module.h" #include "ns3/mobility-module.h" #include "ns3/config-store-module.h" #include "ns3/wifi-module.h" #include "ns3/energy-module.h" #include "ns3/internet-module.h" #include "ns3/applications-module.h" #include <iostream> #include <fstream> #include <vector> #include <string> NS_LOG_COMPONENT_DEFINE ("Lab7"); usingnamespacens3; Στη συνέχεια, δημιουργούμε τη μέθοδο RemainingEnergy, η οποία τυπώνει την εναπομένουσα ενέργεια σε ένα κόμβο και τη μέθοδο TotalEnergy, η οποία τυπώνει τη συνολική κατανάλωση της ενέργειας σε ένα κόμβο, αντίστοιχα. void RemainingEnergy (double oldvalue, double remainingenergy) std::cout<<simulator::now ().GetSeconds () 1

<< "s Current remaining energy = " <<remainingenergy<< "Joules"<<std::endl; void TotalEnergy (double oldvalue, double totalenergy) std::cout<<simulator::now ().GetSeconds () << "s Total energy consumed = " <<totalenergy<< "Joules" <<std::endl; Έπειτα, ορίζουμε τη μέθοδο main, στην οποία δημιουργούμε 2 κόμβους στο δίκτυο και ορίζουμε ότι το δίκτυό μας θα είναι ένα 802.11b δίκτυο. int main (intargc, char *argv[]) //LogComponentEnable ("EnergySource", LOG_LEVEL_DEBUG); //LogComponentEnable ("BasicEnergySource", LOG_LEVEL_DEBUG); //LogComponentEnable ("WifiRadioEnergyModel", LOG_LEVEL_DEBUG); LogComponentEnable("UdpClient", LOG_LEVEL_INFO); LogComponentEnable("UdpServer", LOG_LEVEL_INFO); NodeContainer nodes; nodes.create (2); WifiHelperwifi; wifi.setstandard (WIFI_PHY_STANDARD_80211b); Με το παρακάτω κομμάτι κώδικα, καθορίζουμε τα RxGain και TxGain, τα οποία σχετίζονται με την ποιότητα του λαμβανόμενου και του προς αποστολή σήματος, αντίστοιχα. Επίσης, ορίζουμε το CCaMode1Threshold, το οποίο είναι ένα κατώφλι. Αν η ισχύς του λαμβανόμενου σήματος υπερβεί το εν λόγω κατώφλι, τότε ο κόμβος μεταβαίνει σε κατάσταση CCA_BUSY. YansWifiPhyHelperwifiPhy = YansWifiPhyHelper::Default (); wifiphy.set ("RxGain", DoubleValue (1)); wifiphy.set ("TxGain", DoubleValue (1)); wifiphy.set ("CcaMode1Threshold", DoubleValue (0)); Το propagation loss model που θα χρησιμοποιηθεί είναι το RangePropagationLossModel, το οποίο καθορίζει την απώλεια διαδρομής σε μέτρα. Πιο συγκεκριμένα, οι κόμβοι που βρίσκονται σε απόσταση μικρότερη ή ίση με την MaxRange, λαμβάνουν το σήμα. Ακόμα, ορίζουμε ότι θα χρησιμοποιηθεί το ConstantSpeedPropagationDelayModel, όπου η ταχύτητα μετάδοσης είναι σταθερή. YansWifiChannelHelperwifiChannel; wifichannel.setpropagationdelay ("ns3::constantspeedpropagationdelaymodel"); 2

wifichannel.addpropagationloss ("ns3::rangepropagationlossmodel","maxrange", DoubleValue (250.0)); Ptr<YansWifiChannel>wifiChannelPtr = wifichannel.create (); wifiphy.setchannel (wifichannelptr); Θέτουμε τον τύπο του αλγορίθμου για τον έλεγχο του ρυθμού που θα χρησιμοποιεί και καθορίζουμε να μην εφαρμόζεται κάποια μέθοδος εξασφάλισης της Ποιότητα της Υπηρεσίας (QualityofService) στο επίπεδο MAC, ενεργοποιούμε το μηχανισμό RTS/CTS κι ορίζουμε τις θέσεις των κόμβων του δικτύου. Επίσης, καθορίζουμε ότι το δίκτυο υποστηρίζει την αδόμητη δικτύωση (AdHoc). NqosWifiMacHelperwifiMac = NqosWifiMacHelper::Default (); wifi.setremotestationmanager ("ns3::arfwifimanager", "RtsCtsThreshold",StringValue("0")); wifimac.settype ("ns3::adhocwifimac"); NetDeviceContainer devices = wifi.install (wifiphy, wifimac, nodes); MobilityHelper mobility; Ptr<ListPositionAllocator>positionAlloc = CreateObject<ListPositionAllocator> (); positionalloc->add (Vector (0.0, 0.0, 0.0)); positionalloc->add (Vector (0.0, 100.0, 0.0)); mobility.setpositionallocator (positionalloc); mobility.setmobilitymodel ("ns3::constantpositionmobilitymodel"); mobility.install (nodes); Εν συνεχεία, θέτουμε την αρχική ενέργεια των κόμβων και την τιμή του ρεύματος σε Ampere, που συμβάλει στον υπολογισμό της κατανάλωσης της ενέργειας του κόμβου όταν μεταδίδει πακέτα. Ακόμα, εγκαθιστούμε το μοντέλο ενέργειας (WifiRadioEnergyModel) σε όλους τους κόμβους. BasicEnergySourceHelperbasicSourceHelper; basicsourcehelper.set ("BasicEnergySourceInitialEnergyJ", DoubleValue (0.1)); EnergySourceContainer sources = basicsourcehelper.install (nodes); WifiRadioEnergyModelHelperradioEnergyHelper; radioenergyhelper.set ("TxCurrentA", DoubleValue (0.0174)); DeviceEnergyModelContainerdeviceModels = radioenergyhelper.install (devices, sources); Θέτουμε τις IP διευθύνσεις που θα χρησιμοποιηθούν και τους server και client (application). InternetStackHelper internet; internet.install (nodes); Ipv4AddressHelper ipv4; ipv4.setbase ("10.1.1.0", "255.255.255.0"); Ipv4InterfaceContainer interfaces = ipv4.assign (devices); 3

uint16_t port = 49000; UdpServerHelper server (port); ApplicationContainer apps = server.install (nodes.get (0)); apps.start(seconds(1.0)); apps.stop(seconds(12.0)); UdpClientHelper client (interfaces.getaddress (0), port); client.setattribute("maxpackets", UintegerValue(1000000)); client.setattribute("interval", TimeValue(Seconds(1))); client.setattribute("packetsize", UintegerValue(1024)); ApplicationContainer apps2 = client.install(nodes.get(1)); apps2.start(seconds(2.0)); apps2.stop(seconds(10.0)); Τέλος, καλούμε τις συναρτήσεις RemainingEnergy και TotalEnergy για να παρατηρούμε την εναπομένουσα ενέργεια των κόμβων και τη συνολική κατανάλωση της ενέργειας κάθε χρονική στιγμή, αντίστοιχα. Ptr<BasicEnergySource>basicSourcePtr = DynamicCast<BasicEnergySource> (sources.get (1)); basicsourceptr->traceconnectwithoutcontext ("RemainingEnergy", MakeCallback (&RemainingEnergy)); Ptr<DeviceEnergyModel>basicRadioModelPtr = basicsourceptr->finddeviceenergymodels ("ns3::wifiradioenergymodel").get (0); basicradiomodelptr->traceconnectwithoutcontext ("TotalEnergyConsumption", MakeCallback (&TotalEnergy)); Simulator::Stop (Seconds (13.0)); Simulator::Run (); Simulator::Destroy (); return 0; 4) Άσκηση 1. Εκτελέστε το lab7.cc σενάριο και καταγράψτε τις τελικές τιμές για την εναπομένουσα ενέργεια και τη συνολική κατανάλωση της ενέργειας. 2. Ορίστε την απόσταση μεταξύ των δύο κόμβων στα 300 μέτρα κι εκτελέστε πάλι το σενάριο. Τι παρατηρείτε? Δώστε σύντομη εξήγηση. Επιπλέον, καταγράψτε πάλι τις τελικές τιμές για την εναπομένουσα ενέργεια και τη συνολική κατανάλωση της ενέργειας. 3. Ορίστε το MaxRange στα 350 μέτρα κι εκτελέστε το σενάριο. Τι παρατηρείτε? 4

4. Συγκρίνετε τις τιμές που προέκυψαν από το ερώτημα 2 με αυτές που προέκυψαν από το ερώτημα 3. Δώστε σύντομη εξήγηση. 5. Αλλάξτε το interval σε 0.011 και καταγράψτε τα αποτελέσματα. 6. Αλλάξτε την τιμή TxCurrentA σε 0.00174. Τι παρατηρείτε? Δώστε σύντομη εξήγηση. 7. Ορίστε ο server να λειτουργεί από το δευτερόλεπτο 3 έως το 10 και τον clientαπό το 4 έως το 9. Τι παρατηρείτε? Δώστε σύντομη εξήγηση. 8. Αντικαταστήστε το RangePropagationLossModel με το LogDistancePropagationLossModel. Πώς λειτουργεί το παραπάνω μοντέλο? Καταγράψτε τα αποτελέσματα και δώστε σύντομη εξήγηση. wifichannel.addpropagationloss("ns3::logdistancepropagationlossmodel","e xponent",stringvalue ("3")); 5

Παράρτημα Κώδικα #include "ns3/core-module.h" #include "ns3/network-module.h" #include "ns3/mobility-module.h" #include "ns3/config-store-module.h" #include "ns3/wifi-module.h" #include "ns3/energy-module.h" #include "ns3/internet-module.h" #include "ns3/applications-module.h" #include <iostream> #include <fstream> #include <vector> #include <string> NS_LOG_COMPONENT_DEFINE ("Lab7"); using namespace ns3; void RemainingEnergy (double oldvalue, double remainingenergy) std::cout<<simulator::now ().GetSeconds () << "s Current remaining energy = " <<remainingenergy<< "Joules"<<std::endl; void TotalEnergy (double oldvalue, double totalenergy) std::cout<<simulator::now ().GetSeconds () << "s Total energy consumed = " <<totalenergy<< "Joules" <<std::endl; int main (int argc, char *argv[]) //LogComponentEnable ("EnergySource", LOG_LEVEL_DEBUG); //LogComponentEnable ("BasicEnergySource", LOG_LEVEL_DEBUG); //LogComponentEnable ("WifiRadioEnergyModel", LOG_LEVEL_DEBUG); LogComponentEnable("UdpClient", LOG_LEVEL_INFO); LogComponentEnable("UdpServer", LOG_LEVEL_INFO); std::string phymode ("DsssRate1Mbps"); NodeContainer nodes; 6

nodes.create (2); WifiHelper wifi; wifi.setstandard (WIFI_PHY_STANDARD_80211b); YansWifiPhyHelper wifiphy = YansWifiPhyHelper::Default (); wifiphy.set ("RxGain", DoubleValue (1)); wifiphy.set ("TxGain", DoubleValue (1)); wifiphy.set ("CcaMode1Threshold", DoubleValue (0)); YansWifiChannelHelper wifichannel; wifichannel.setpropagationdelay ("ns3::constantspeedpropagationdelaymodel"); wifichannel.addpropagationloss ("ns3::rangepropagationlossmodel","maxrange", DoubleValue (250.0)); Ptr<YansWifiChannel> wifichannelptr = wifichannel.create (); wifiphy.setchannel (wifichannelptr); NqosWifiMacHelper wifimac = NqosWifiMacHelper::Default (); wifi.setremotestationmanager "RtsCtsThreshold",StringValue("0")); wifimac.settype ("ns3::adhocwifimac"); ("ns3::arfwifimanager", NetDeviceContainer devices = wifi.install (wifiphy, wifimac, nodes); MobilityHelper mobility; Ptr<ListPositionAllocator> positionalloc = CreateObject<ListPositionAllocator> (); positionalloc->add (Vector (0.0, 0.0, 0.0)); positionalloc->add (Vector (0.0, 100.0, 0.0)); mobility.setpositionallocator (positionalloc); mobility.setmobilitymodel ("ns3::constantpositionmobilitymodel"); mobility.install (nodes); BasicEnergySourceHelper basicsourcehelper; basicsourcehelper.set ("BasicEnergySourceInitialEnergyJ", DoubleValue (0.1)); EnergySourceContainer sources = basicsourcehelper.install (nodes); WifiRadioEnergyModelHelper radioenergyhelper; radioenergyhelper.set ("TxCurrentA", DoubleValue (0.0174)); DeviceEnergyModelContainer devicemodels = radioenergyhelper.install (devices, sources); InternetStackHelper internet; internet.install (nodes); Ipv4AddressHelper ipv4; ipv4.setbase ("10.1.1.0", "255.255.255.0"); Ipv4InterfaceContainer interfaces = ipv4.assign (devices); 7

uint16_t port = 49000; UdpServerHelper server (port); ApplicationContainer apps = server.install (nodes.get (0)); apps.start(seconds(1.0)); apps.stop(seconds(12.0)); UdpClientHelper client (interfaces.getaddress (0), port); client.setattribute("maxpackets", UintegerValue(1000000)); client.setattribute("interval", TimeValue(Seconds(1))); client.setattribute("packetsize", UintegerValue(1024)); ApplicationContainer apps2 = client.install(nodes.get(1)); apps2.start(seconds(2.0)); apps2.stop(seconds(10.0)); Ptr<BasicEnergySource> basicsourceptr = DynamicCast<BasicEnergySource> (sources.get (1)); basicsourceptr->traceconnectwithoutcontext ("RemainingEnergy", MakeCallback (&RemainingEnergy)); Ptr<DeviceEnergyModel> basicradiomodelptr = basicsourceptr->finddeviceenergymodels ("ns3::wifiradioenergymodel").get (0); basicradiomodelptr->traceconnectwithoutcontext ("TotalEnergyConsumption", MakeCallback (&TotalEnergy)); Simulator::Stop (Seconds (13.0)); Simulator::Run (); Simulator::Destroy (); return 0; 8