MAC Layer Simulation Using GlomoSim

advertisement
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: parsec@cs.ucla.edu
GloMoSim: glomosim@pcl.cs.ucla.edu
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
Download