610 likes | 2.21k Views
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.
E N D
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
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
GloMoSim (Scalable Mobile Network Simulator ) • a scalable simulation environment • supports Wire & Wireless network • layered approach • Standard APIs • parallel discrete-event simulation
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
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
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
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
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
Layer Interaction with Events • Packets & Message going through layers are annotated with information that simulate inter-layer parameter passing
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
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()
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
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
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
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
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
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
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);
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
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);
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); }
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);
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);
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); … }
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);
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
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
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
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
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
Adding a model or protocol to a layer Needs 3 functions GLOMOPartition() Upper Layer Initialization Function Simulation Event Handling Function Finalization Function Lower Layer
Data structure in specific layer typedef struct glomo_mac_802_11_str { GlomoMac* myGlomoMac; int state; /* Statistics collection variables. */ long pktsSentUnicast; … } GlomoMac802_11;
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; }
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); }
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); }
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
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 …
Sifting through the Data • Stats Printed for Each Node • You’ll Probably need to add Statistics
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
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; … }
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); }
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); … }
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
Inside the Source Program glomosim-2.0 \glomosim \parsec
Installing Parsec copy correct directory to be parsec in … Linux /usr/local/parsec Windows C:\Parsec \glomosim-2.0\parsec\
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
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