1 / 54

Network Simulation Using GlomoSim

Network Simulation Using GlomoSim. Presented By Akarapon Kunpisut. Outline. Introduction to Glomosim Glomosim Structure Editing the code Installation Conclusion. Introduction. 3 methods to analysis network protocol Mathematical Analysis Network Simulator (NS, GloMoSim, …) Test bed.

octavius
Download Presentation

Network Simulation Using GlomoSim

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Network Simulation Using GlomoSim Presented By Akarapon Kunpisut

  2. Outline • Introduction to Glomosim • Glomosim Structure • Editing the code • Installation • Conclusion

  3. Introduction • 3 methods to analysis network protocol • Mathematical Analysis • Network Simulator (NS, GloMoSim, …) • Test bed

  4. Network Simulator (GloMoSim) • Requires 2 components • GloMoSim (Global Mobile Information Systems Simulation Library) • Network Simulation Environment • Parsec (Parallel Simulation Environment for Complex Systems) • C-Base Simulation Language

  5. GloMoSim (Scalable Mobile Network Simulator ) • a scalable simulation environment • supports Wire & Wireless network • layered approach • Standard APIs • parallel discrete-event simulation

  6. Parsec • C-based simulation language • sequential and parallel execution • discrete-event simulation models • can be used as a parallel programming language. • developed by the Parallel Computing Laboratory at UCLA

  7. Application Traffic Generator RTP, TCP, UTP RSVP VC Connection ManagementCall Acceptance Control, Rate Control IP, Mobile IP Multicast Routing--------------QoS Routing Wireless Network Layer Packet Store / ForwardCongestion Control, Rate Control Clustering (optional) Data Link MAC Radio Model Propagation Model/Mobility Model GloMoSim Simulation Layers

  8. Models Currently Available in GloMoSim • Application: TCPLIB (telnet, ftp) , CBR (Constant Bit Rate traffic), Replicated file system, HTTP • Transport: TCP (Free BSD), UDP, NS TCP (Tahoe) and others • Unicast Routing: AODV, Bellman-Ford, DSR, Fisheye, Flooding, LAR (Scheme 1), NS DSDV, OSPF, WRP • MAC Layer: CSMA, FAMA, MACA, IEEE 802.11 • Radio: Radio with and without capture capacity • Propagation: Free Space, Rayleigh, Ricean, SIRCIM • Mobility: Random Waypoint, Random Drunken, ECRV, Group Mobility

  9. struct glomo_node_str{ • double position_x; • GlomoMac macData[xxx]; • GlomoNetwork NetworkData; • … • } GlomoNode; Include\api.h GloMoSim Layered Architecture • collection of network nodes • each node has it’s own protocol stack parameters and statistics

  10. struct glomo_mac_str { • MAC_PROTOCOL macProtocol; • int interfaceIndex; • BOOL macStats; • … • void *macVar; • } GlomoMac; mac\mac.h Data Structure for a Layer • each layer has its own data structure • base on protocol in the layer

  11. Layer Interaction with Events • Packets & Message going through layers are annotated with information that simulate inter-layer parameter passing

  12. Scheduling Events • Two types of Message • Non-Packet Messages • Inter-layer event messages • Self scheduled (timer) events • Packets/ Cell Messages • Inter-node packets • Inter-layer packets

  13. typedef enum { RADIO_IDLE, RADIO_SENSING, RADIO_RECEIVING, RADIO_TRANSMITTING } RadioStatusType; MSG_MAC_TimerExpired Non-packet Message Self scheduled (timer) events GLOMO_MacLayer() GLOMO_MacReceiveRadioStatusChangeNotification() MAC Mac802_11StartTimer() Inter-layer event messages Radio RadioAccnoiseLayer()

  14. NetworkIpReceive PacketFromMacLayer() Network Inter-layer packets Mac802_11ProcessFrame() Remove Header MAC GLOMO_MacReceive PacketFromRadio () Inter-layer packets RadioAccnoiseLayer () Inter-Node Packet Packet/cell Message NetworkIpSend PacketToMacLayer() Network Inter-layer packets GLOMO_MacNetwork LayerHasPacketToSend() MAC Add Header Mac802_11TransmitDataFrame() Inter-layer packets GLOMO_RadioStartTransmittingPacket() Radio Layer Radio Layer

  15. NetworkIpReceive PacketFromMacLayer() Network Inter-layer packets Mac802_11ProcessFrame() Remove Header MAC GLOMO_MacReceive PacketFromRadio () Inter-layer packets RadioAccnoiseLayer () Inter-Node Packet Packet/cell Message /* Data frames. */ Header + Data typedef struct M802_mac_frame { M802_11FrameHdr hdr; char payload[ MAX_NW_PKT_SIZE]; } M802_11_MacFrame; typedef struct _Mac802_11FrameHdr {unsigned short frameType; char Padding1[2]; int duration; NODE_ADDR destAddr; NODE_ADDR sourceAddr; … } M802_11FrameHdr; NetworkIpSend PacketToMacLayer() Network (Network Layer Packet) Inter-layer packets GLOMO_MacNetwork LayerHasPacketToSend() MAC Add Header Mac802_11TransmitDataFrame() (MAC Header Frame) +(Network Layer Packet) Inter-layer packets GLOMO_RadioStartTransmittingPacket() RadioAccnoiseLayer () Radio Layer Radio Layer

  16. Data Structure for Layer Interaction • Enumerate event type • enum { • /* for Channel layer */ • MSG_CHANNEL_FromChannel, • MSG_CHANNEL_FromRadio, • /* Message Types for MAC layer */ • MSG_MAC_FromNetwork, • MSG_MAC_TimerExpired, • … • /* Default Message */ • MSG_DEFAULT • }; include\structmsg.h

  17. Data Structure for Layer Interaction • Message Structure (general information) • struct message_str • { • short layerType; // Layer will received message • short protocolType; • short eventType; • char* packet; • char* payLoad; • … • } message; include\message.h

  18. Data Structure for Layer Interaction • Message header (for packet) • typedef struct _Mac802_11LCtrlFrame • { • unsigned short frameType; • char Padding[2]; • int duration; • NODE_ADDR destAddr; • NODE_ADDR sourceAddr; • char FCS[4]; • } M802_11LongControlFrame; \mac\802_11.h

  19. Message Parameters • Message Destination: • Node ID • Layer in that node • Protocol in that layer (optional) • Instance (Interface) optional • Message Event Type • Event Specific Parameters called info • Both packets and non-packet messages • Packet payload • Current header position

  20. Scheduling an Event • Allocate the GloMoSim Message: • Message* msg = GLOMO_MsgAlloc(node, MyID, MyLayer, MyProtocol, MSG_LAYER_PROTO_MY_EVENT); • Set the Event Specific Information: • MyEventInfoType* MyEventInfo; • GLOMO_MsgInfoAlloc(node, msg, sizeof(MyEventInfoType)); • MyEventInfo-> MyFirstParameter =1; • … • Schedule the Event: • GLOMO_MsgSend(node, message, MyChosenDelay);

  21. Scheduling an Event (Example) Allocate the GloMoSim Message void Mac802_11StartTimer( GlomoNode *node, GlomoMac802_11 *M802, clocktype timerDelay) { Message *newMsg; M802->timerSequenceNumber++; newMsg = GLOMO_MsgAlloc(node, GLOMO_MAC_LAYER, MAC_PROTOCOL_802_11, MSG_MAC_TimerExpired); GLOMO_MsgSetInstanceId(newMsg, M802->myGlomoMac->interfaceIndex); GLOMO_MsgInfoAlloc(node, newMsg, sizeof(M802->timerSequenceNumber)); *((int*)(newMsg->info)) = M802->timerSequenceNumber; GLOMO_MsgSend(node, newMsg, timerDelay); } Set the Event Specific Information Schedule the Event Destination Layer

  22. Message Scheduling GLOMO_MsgSend(node, *msg, delay) GLOMO_RADIO_LAYER: GLOMO_RadioLayer(node, msg) GLOMO_CallLayer(node, msg) GLOMO_MAC_LAYER: GLOMO_MacLayer(node, msg); if delay == 0 (msg)->layerType … GLOMO_APP_LAYER: GLOMO_AppLayer(node, msg);

  23. Processing Message Events void Mac802_11Layer(GlomoNode *node, int interfaceIndex, Message *msg) { switch (msg->eventType) { case MSG_MAC_TimerExpired) Mac802_11HandleTimeout(node, M802); case MSG_MAC_TimerExpired_PCF) Mac802_11HandleTimeout_PCF(node, M802); … } GLOMO_MsgFree(node, msg); }

  24. Transmitting Packet • Allocate Message • Message* pktToRadio = GLOMO_MsgAlloc(node, 0, 0, 0); • Set Header Information • hdr.frameType = M802_11_DATA; • hdr.sourceAddr = node->nodeAddr; • hdr.destAddr = destAddr; • … • Allocate Packet & Set information • GLOMO_MsgPacketAlloc(node, pktToRadio, topPacket->packetSize); • memcpy(pktToRadio->packet, topPacket->packet, topPacket->packetSize);

  25. Transmitting Packet (cont’d) • Add Header & Set information • GLOMO_MsgAddHeader(node, pktToRadio, sizeof(M802_11FrameHdr) ); • memcpy(pktToRadio->packet, &hdr, sizeof(M802_11FrameHdr)); • Transmit Packet • StartTransmittingPacket(node, M802, pktToRadio, M802_11_DIFS);

  26. Processing Packet Mac802_11ReceivePacketFromRadio(){ if (hdr->destAddr == node->nodeAddr) { switch (hdr->frameType) { case M802_11_RTS: … case M802_11_DATA: } else if (hdr->destAddr == ANY_DEST){ switch (hdr->frameType) { case M802_11_DATA: Mac802_11ProcessFrame(node, M802, msg); … }

  27. Message Function • GLOMO_MsgAlloc(node, destId, layer, protocol, enent_type); • Functions to retrieve and set parameters individually. • GLOMO_MsgInfoAlloc(node, msg, info_size); • GLOMO_MsgPacketAlloc(node, msg, packet_size); • GLOMO_MsgAddHeader(node, msg, header_size); • GLOMO_MsgRemoveHeader(node, msg, header_size); • GLOMO_MsgSend(node, msg, delay); • GLOMO_MsgFree(node, msg); • GLOMO_MsgCopy(node, msg);

  28. Editing your code

  29. Basic Structure • /doc contains the documentation • /scenarios contains directories of various sample configuration topologies • /main contains the basic framework design • /bin for executable and input/output files • /include contains common include files

  30. Basic Structure (cont’d) • /application contains code for the application layer • /transport contains the code for the transport layer • /network contains the code for the network layer • /mac contains the code for the mac laye • /radio contains the code for the physical layer

  31. Configuration file (\bin\ Config.in) • General Simulation Parameter • Scenario Topology & Mobility • Radio & Propagation Model • MAC Protocol • Routing Protocol • Transport Protocol • Application (Traffic Generators) • Statistical & GUI options

  32. Configuration file (Example) [config.in] NUMBER-OF-NODES 3 NODE-PLACEMENT FILE NODE-PLACEMENT-FILE ./nodes.input #NODE-PLACEMENT UNIFORM MAC-PROTOCOL 802.11 NETWORK-PROTOCOL IP ROUTING-PROTOCOL BELLMANFORD APP-CONFIG-FILE ./app.conf RADIO-TYPE RADIO-ACCNOISE [nodes.input] 0 0 (20.2, 0.9, 0.11) 1 0 (80.4, 90.8, 0.17) 2 0 (60.7, 30.4, 0.10) [app.conf] #CBR <src_node> <dest_node> # <items> <item_size> <interval_time> # <start_time> <end_time> CBR 0 1 10 512 1S 0S 0S

  33. In the directory (.pc) Actual Functions Application (.h) Basic Definition of functions and data objects (Layer.pc) Layer Interface Transport … 802_11.h 802_11.pc MAC mac.pc cama.h csma.pc Radio

  34. Adding a model or protocol to a layer Needs 3 functions GLOMOPartition() Upper Layer Initialization Function Simulation Event Handling Function Finalization Function Lower Layer

  35. Data structure in specific layer typedef struct glomo_mac_802_11_str { GlomoMac* myGlomoMac; int state; /* Statistics collection variables. */ long pktsSentUnicast; … } GlomoMac802_11;

  36. Initialization Function void Mac802_11Init (GlomoNode *node, int interfaceIndex, const GlomoNodeInput *nodeInput) { GlomoMac802_11 *M802 = (GlomoMac802_11*) checked_pc_malloc(sizeof(GlomoMac802_11)); M802->myGlomoMac = node->macData[interfaceIndex]; M802->myGlomoMac->macVar = (void *)M802; // Init Data here M802->pktsSentUnicast = 0; }

  37. Event Handling Function void Mac802_11Layer (GlomoNode *node, int interfaceIndex, Message *msg) { int timerSequenceNumber = *(int*)(msg->info); // handle simulation “message” Mac802_11HandleTimeout(node, M802); GLOMO_MsgFree(node, msg); }

  38. Finalization Function void Mac802_11Finalize (GlomoNode *node, int interfaceIndex) { GlomoMac802_11 *M802 = (GlomoMac802_11*)node->macData[interfaceIndex]->macVar; if (M802->myGlomoMac->macStats == TRUE) { Mac802_11PrintStats(node, M802); } sprintf(buf, "UCAST (non-frag) pkts sent " "to chanl: %ld", M802->pktsSentUnicast); GLOMO_PrintStat(node, "802.11", buf); }

  39. Obtaining the information Select what layer you want the statistics for APPLICATION-STATISTICS YES TCP-STATISTICS NO NETWORK-LAYER-STATISTICS YES MAC-LAYER-STATISTICS YES RADIO-LAYER-STATISTICS NO CHANNEL-LAYER-STATISTICS NO MOBILITY-STATISTICS NO config.in

  40. Sifting through the Data Sample Output from 1 node: Glomo.stat Node: 0, Layer: 802.11, pkts from network: 0 Node: 0, Layer: 802.11, BCAST pkts sent to chanl: 69 Node: 0, Layer: NetworkIp, Number of Packets Routed For Another Node: 0 Node: 0, Layer: NetworkIp, Number of Packets Delivered To this Node: 4549 Node: 1, Layer: 802.11, pkts from network: 0 Node: 1, Layer: 802.11, UCAST (non-frag) pkts sent to chanl: 2499 Node: 1, Layer: 802.11, BCAST pkts sent to chanl: 67 …

  41. Sifting through the Data • Stats Printed for Each Node • You’ll Probably need to add Statistics

  42. Adding Stats Go through Header and add for Statistic Variables typedef struct glomo_mac_802_11_str { GlomoMac* myGlomoMac; int state; /* Statistics collection variables. */ long pktsSentUnicast; … <---------- Add Stat here !!! } GlomoMac802_11; 802_11.h

  43. Adding Stats Initialize your extra stat to zero in the initialize function void Mac802_11Init(){ M802->myGlomoMac = node->macData[interfaceIndex]; M802->state = M802_11_S_IDLE; /* initial Statistic Variable to zero */ M802->pktsSentUnicast = 0; M802->pktsSentBroadcast = 0; M802->pktsGotUnicast = 0; … }

  44. Adding Stats Add code to increment your counter void Mac802_11ProcessFrame(){ hdr = (M802_11FrameHdr *)frame ->packet; if (hdr->destAddr == ANY_DEST) { M802->pktsGotBroadcast++; } else{ M802->pktsGotUnicast++; … GLOMO_MsgFree(node, frame); }

  45. Adding Stats Add a print statement in “Finalize” function void Mac802_11Finalize(){ M802 = node->macData[interfaceIndex]->macVar; sprintf(buf, "UCAST (non-frag) pkts sent " "to chanl: %ld", M802->pktsSentUnicast); GLOMO_PrintStat(node, "802.11", buf); sprintf(buf, "BCAST pkts sent to chanl: “, "%ld", M802->pktsSentBroadcast); GLOMO_PrintStat(node, "802.11", buf); … }

  46. Obtaining Glomosim/Parsec • Web site: • http://pcl.cs.ucla.edu/projects/parsec • http://pcl.cs.ucla.edu/projects/glomosim • Questions: • PARSEC: parsec@cs.ucla.edu • GloMoSim: glomosim@pcl.cs.ucla.edu • Scalable Mobile Network Simulator

  47. Inside the Source Program glomosim-2.0 \glomosim \parsec

  48. Installing Parsec copy correct directory to be parsec in … Linux /usr/local/parsec Windows C:\Parsec \glomosim-2.0\parsec\

  49. Installing Parsec • Windows (Set Environment Variable) • path %path%;c:\devstudio\vc\bin; c:\devstudio\sharedide\bin • set INCLUDE=c:\devstudio\vc\include • set LIB=c:\devstudio\vc\lib

  50. Installing GloMoSim • UNIX (go to /glomosim/main) • Run "make depend" to create list of depndencies in the Makefile. • Make sure that the right path for the Parsec compiler is specified in the Makefile for the "PAR" variable. • Run "make" to create the executable • Windows (go to c:\glomosim\main • Run “makent” to create the executable

More Related