Survey
* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project
Network Simulation
Using GlomoSim
Presented By
Akarapon Kunpisut
1
Outline
Introduction to Glomosim
Glomosim Structure
Editing the code
Installation
Conclusion
2
Introduction
3 methods to analysis network
protocol
Mathematical Analysis
Network Simulator (NS, GloMoSim, …)
Test bed
3
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
4
GloMoSim
(Scalable Mobile Network Simulator )
a scalable simulation environment
supports Wire & Wireless network
layered approach
Standard APIs
parallel discrete-event simulation
5
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
6
GloMoSim Simulation Layers
Application
Traffic Generator
RTP, TCP, UTP
RSVP
IP, Mobile IP
Wireless Network Layer
Clustering (optional)
Multicast
Routing
-------------QoS
Routing
VC Connection Management
Call Acceptance Control,
Rate Control
Packet Store / Forward
Congestion Control,
Rate Control
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
GloMoSim Layered Architecture
collection of network nodes
each node has it’s own protocol stack
parameters and statistics
struct glomo_node_str{
double position_x;
GlomoMac
macData[xxx];
GlomoNetwork NetworkData;
…
} GlomoNode;
Include\api.h
9
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
Layer Interaction with Events
Packets & Message going through layers
are annotated with information that
simulate inter-layer parameter passing
11
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
12
Non-packet Message
MSG_MAC_TimerExpired
Self scheduled (timer) events
GLOMO_MacLayer()
MAC
Mac802_11StartTimer()
typedef enum {
RADIO_IDLE,
RADIO_SENSING,
RADIO_RECEIVING,
RADIO_TRANSMITTING
} RadioStatusType;
GLOMO_MacReceiveRadioS
tatusChangeNotification()
Inter-layer event messages
Radio
RadioAccnoiseLayer()
13
Packet/cell Message
NetworkIpSend
PacketToMacLayer()
Network
Inter-layer packets
GLOMO_MacNetwork
LayerHasPacketToSend()
Add Header
Network
NetworkIpReceive
PacketFromMacLayer()
Inter-layer packets
Mac802_11ProcessFrame()
MAC
MAC
GLOMO_MacReceive
PacketFromRadio ()
Mac802_11TransmitDataFrame()
Inter-layer packets
GLOMO_RadioStartTransmittingPacket()
Radio Layer
Remove Header
Inter-layer packets
RadioAccnoiseLayer ()
Radio Layer
Inter-Node Packet
14
Packet/cell Message
NetworkIpSend
PacketToMacLayer()
Network
Inter-layer
packets
(Network
Layer
Packet)
/* Data frames. NetworkIpReceive
*/ Header + Data
Network
typedef
struct M802_mac_frame
PacketFromMacLayer()
{
M802_11FrameHdr hdr;
Inter-layer packets
char payload[ MAX_NW_PKT_SIZE];
GLOMO_MacNetwork
LayerHasPacketToSend()
Mac802_11ProcessFrame()
} M802_11_MacFrame;
Remove Header
Add Header MAC
MAC
typedef
struct _Mac802_11FrameHdr
GLOMO_MacReceive
{unsigned short
frameType;
Mac802_11TransmitDataFrame()
PacketFromRadio ()
char Padding1[2];
int duration;
(MAC Inter-layer
Headerpackets
Frame) +
NODE_ADDR
destAddr;
Inter-layer
packets
(Network Layer Packet)
NODE_ADDR sourceAddr;
GLOMO_RadioStartTransmittingPacket()
RadioAccnoiseLayer ()
…
} M802_11FrameHdr;
Radio Layer
Radio Layer
Inter-Node Packet
15
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
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
Message Event Type
Event Specific Parameters called info
Both packets and non-packet messages
Packet payload
Current header position
19
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);
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);
}
Destination Layer
21
Message Scheduling
GLOMO_MsgSend(node, *msg, delay)
GLOMO_CallLayer(
node, msg)
if delay == 0
(msg)->layerType
GLOMO_RADIO_LAYER:
GLOMO_RadioLayer(node, msg)
GLOMO_MAC_LAYER:
GLOMO_MacLayer(node, msg);
…
GLOMO_APP_LAYER:
GLOMO_AppLayer(node, msg);
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 (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);
25
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);
…
}
26
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);
27
Editing your code
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 (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
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)
3
FILE
./nodes.input
UNIFORM
802.11
IP
BELLMANFORD
./app.conf
RADIO-ACCNOISE
[app.conf]
#CBR
#
#
<src_node> <dest_node>
<items> <item_size> <interval_time>
<start_time> <end_time>
CBR 0 1 10 512 1S 0S 0S
32
In the directory
Application
Transport
…
MAC
Radio
(.h)
Basic Definition
of functions and
data objects
802_11
.h
cama.h
(.pc)
Actual Functions
802_11
.pc
csma
.pc
(Layer.pc)
Layer Interface
mac
.pc
33
Adding a model or protocol to a layer
Needs 3 functions
GLOMOPartition()
Upper Layer
Initialization Function
Simulation Event Handling Function
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);
}
37
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);
}
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
config.in
39
Sifting through the Data
Sample Output from 1 node: Glomo.stat
Node:
Node:
Node:
0, Layer:
0, Layer:
0, Layer:
Node:
0, Layer:
Node:
Node:
Node:
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
…
40
Sifting through the Data
Stats Printed for Each Node
You’ll Probably need to add Statistics
41
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
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: [email protected]
GloMoSim: [email protected]
Scalable Mobile Network Simulator
46
Inside the Source Program
glomosim-2.0
\glomosim
\parsec
47
Installing Parsec
copy correct directory to be parsec in …
Linux
Windows
/usr/local/parsec
C:\Parsec
\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
49
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
50
Compiling GloMoSim (optional)
compiles only specific layer by
“make _layerName” or “makent _layerName”
for example
prompt> makent MAC
51
Runnig Program
Go to directory glomosim/bin -> type:
“glomosim config.in“
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."
53
End
54