Sunteți pe pagina 1din 9

Outline

Network Simulation Using GlomoSim


Presented By Akarapon Kunpisut

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 )

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
5 6

a scalable simulation environment supports Wire & Wireless network layered approach Standard APIs parallel discrete-event simulation

GloMoSim Simulation Layers


Application Traffic Generator RTP, TCP, UTP RSVP IP, Mobile IP Wireless Network Layer Clustering (optional) Data Link MAC Radio Model Propagation Model/Mobility Model
7

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
8

Multicast Routing -------------QoS Routing

VC Connection Management Call Acceptance Control, Rate Control Packet Store / Forward Congestion Control, Rate Control

GloMoSim Layered Architecture


collection of network nodes each node has its own protocol stack parameters and statistics
struct glomo_node_str{ double position_x; GlomoMac macData[xxx]; GlomoNetwork NetworkData; } GlomoNode;

Data Structure for a Layer


each layer has its own data structure base on protocol in the layer
struct glomo_mac_str { MAC_PROTOCOL macProtocol; int interfaceIndex; BOOL macStats; void *macVar; } GlomoMac;

mac\mac.h
10

Include\api.h
9

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

11

12

Non-packet Message
MSG_MAC_TimerExpired
Self scheduled (timer) events
GLOMO_MacLayer() Mac802_11StartTimer()

Packet/cell Message
NetworkIpSend PacketToMacLayer()

typedef enum { RADIO_IDLE, RADIO_SENSING, RADIO_RECEIVING, RADIO_TRANSMITTING } RadioStatusType;


GLOMO_MacReceiveRadio StatusChangeNotification()

Network

Network

NetworkIpReceive PacketFromMacLayer()

Inter-layer packets GLOMO_MacNetwork LayerHasPacketToSend() Add Header

Inter-layer packets Mac802_11ProcessFrame()

MAC

MAC

MAC

Remove Header GLOMO_MacReceive PacketFromRadio ()

Mac802_11TransmitDataFrame() Inter-layer packets GLOMO_RadioStartTransmittingPacket()

Inter-layer event messages Radio


RadioAccnoiseLayer()

Inter-layer packets RadioAccnoiseLayer ()

Radio Layer
13

Radio Layer
14

Inter-Node Packet

Packet/cell Message
NetworkIpSend PacketToMacLayer()

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
16

Network

(Network Layer Packet)


GLOMO_MacNetwork LayerHasPacketToSend() Add Header

Inter-layer packets

/* Data frames. NetworkIpReceive */ Header + Data Network PacketFromMacLayer() typedef struct M802_mac_frame { M802_11FrameHdr hdr; Inter-layer packets
char payload[ MAX_NW_PKT_SIZE];

MAC

Mac802_11TransmitDataFrame()

int duration; NODE_ADDR destAddr; Inter-layer packets NODE_ADDR sourceAddr; GLOMO_RadioStartTransmittingPacket() RadioAccnoiseLayer () } M802_11FrameHdr;

(MAC Inter-layer packets Header Frame) + (Network Layer Packet)


Radio Layer

Mac802_11ProcessFrame() } M802_11_MacFrame; Remove Header MAC _Mac802_11FrameHdr typedef struct GLOMO_MacReceive {unsigned short frameType; PacketFromRadio () char Padding1[2];

Radio Layer

Inter-Node Packet

15

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
17

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
18

Message Parameters
Message Destination:
Node ID Layer in that node Protocol in that layer (optional) Instance (Interface) optional

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;

Message Event Type Event Specific Parameters called info


Both packets and non-packet messages

Packet payload Current header position

Schedule the Event:


GLOMO_MsgSend(node, message, MyChosenDelay);

19

20

Scheduling an Event (Example)


Allocate the GloMoSim Message void Mac802_11StartTimer( GlomoNode *node, GlomoMac802_11 *M802, clocktype timerDelay) Set the Event Specific Information { Message *newMsg; Schedule the Event 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); }

Message Scheduling
GLOMO_MsgSend(node, *msg, delay)
GLOMO_RADIO_LAYER: GLOMO_RadioLayer(node, msg) GLOMO_MAC_LAYER: GLOMO_MacLayer(node, msg);

GLOMO_CallLayer( node, msg)

if delay == 0 (msg)->layerType

GLOMO_APP_LAYER: GLOMO_AppLayer(node, msg);

Destination Layer

21

22

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); }
23

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);
24

Transmitting Packet (contd)


Add Header & Set information
GLOMO_MsgAddHeader(node, pktToRadio, sizeof(M802_11FrameHdr) ); memcpy(pktToRadio->packet, &hdr, sizeof(M802_11FrameHdr));

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); }
25 26

Transmit Packet
StartTransmittingPacket(node, M802, pktToRadio, M802_11_DIFS);

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);

Editing your code

27

28

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
29

Basic Structure (contd)


/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
30

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
31

Configuration file (Example)


[config.in] NUMBER-OF-NODES NODE-PLACEMENT NODE-PLACEMENT-FILE #NODE-PLACEMENT MAC-PROTOCOL NETWORK-PROTOCOL ROUTING-PROTOCOL APP-CONFIG-FILE RADIO-TYPE [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)
#CBR # #

3 FILE ./nodes.input UNIFORM 802.11 IP BELLMANFORD ./app.conf RADIO-ACCNOISE [app.conf]


<src_node> <dest_node> <items> <item_size> <interval_time> <start_time> <end_time>
32

CBR 0 1 10 512 1S 0S 0S

In the directory
Application Transport
(.h) Basic Definition of functions and data objects (.pc) Actual Functions (Layer.pc) Layer Interface

Adding a model or protocol to a layer


Needs 3 functions
Upper Layer Initialization Function Simulation Event Handling Function mac mac .pc .pc
33

GLOMOPartition()

MAC Radio

802_11 802_11 .h .h cama.h cama.h

802_11 802_11 .pc .pc csma. csma. pc pc

Finalization Function Lower Layer


34

Data structure in specific layer


typedef struct glomo_mac_802_11_str { GlomoMac* myGlomoMac; int state; /* Statistics collection variables. */ long pktsSentUnicast; } GlomoMac802_11;
35

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; }
36

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); }

37

38

Obtaining the information


Select what layer you want the statistics for
APPLICATION-STATISTICS TCP-STATISTICS NETWORK-LAYER-STATISTICS MAC-LAYER-STATISTICS RADIO-LAYER-STATISTICS CHANNEL-LAYER-STATISTICS MOBILITY-STATISTICS YES NO YES YES NO NO NO

Sifting through the Data


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

config.in
39 40

Sifting through the Data


Stats Printed for Each Node Youll 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;
41

802_11.h
42

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; }
43

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); }
44

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); }
45

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


46

Inside the Source Program

Installing Parsec
copy correct directory to be parsec in

Linux glomosim-2.0

/usr/local/parsec C:\Parsec

Windows

\glomosim

\parsec
47

\glomosim-2.0\parsec\
48

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
49 50

Compiling GloMoSim (optional)


compiles only specific layer by
make _layerName or makent _layerName for example prompt> makent MAC

Runnig Program
Go to directory glomosim/bin -> type: glomosim config.in

51

52

For gcc v.2.96 and higher


setenv (or set or export, depending on your shell) the environment variable

PCC_PP_OPTIONS

"-D__builtin_va_list= void* -D__STRICT_ANSI__ -E -U__GNUC__ -I."

End

53

54

S-ar putea să vă placă și