LinuxQuestions.org
Visit Jeremy's Blog.
Go Back   LinuxQuestions.org > Forums > Linux Forums > Linux - Software
User Name
Password
Linux - Software This forum is for Software issues.
Having a problem installing a new program? Want to know which application is best for the job? Post your question in this forum.

Notices


Reply
  Search this Thread
Old 04-12-2009, 03:52 PM   #1
linux_007
LQ Newbie
 
Registered: Mar 2009
Posts: 8

Rep: Reputation: 0
EDCF protocol in Network Simulation-2


Please can any one insert comments for this part of the source code for NS-2 program that use EDCF protocol than DCF .The EDCF use 4 queues in each station than one and modify on the some parameters (CWmin,CWmax,AIFS)these parameters using for assign priorities for each queue.The code is long,, but please i need help.

#include <object.h>
#include <queue.h>
#include <packet.h>
#include <cmu-trace.h>
//#include <iostream.h>
#include "priq.h"
#include "mac-802_11e.h"

typedef int (*PacketFilter)(Packet *, void *);

PriQ_List PriQ:rhead = { 0 };

static class PriQClass : public TclClass {
public:
PriQClass() : TclClass("Queue/DTail/PriQ") {}
TclObject* create(int, const char*const*) {
return (new PriQ);
}
} class_PriQ;


PriQ::PriQ() : DTail()
{
bind("Prefer_Routing_Protocols", &Prefer_Routing_Protocols);
bind("Max_Levels", &max_levels);
bind("Levels", &levels);
LIST_INSERT_HEAD(&prhead, this, link);
flag = 0;
cntl = 0;
level = 0;
}

int
PriQ::command(int argc, const char*const* argv)
{
Scheduler &s = Scheduler::instance();
if (argc == 5 )
{
if(strcmp(argv[1], "Prio") == 0){
if(!(atoi(argv[2]) > levels)){
level = atoi(argv[2]);
if(strcmp(argv[3], "PF") == 0){
pri_[level].setPF(atoi(argv[4]));
return(TCL_OK);
}
if(strcmp(argv[3], "CW_MIN") == 0){
pri_[level].setCW_MIN(atoi(argv[4]));
return(TCL_OK);
}
if(strcmp(argv[3], "CW_MAX") == 0){
pri_[level].setCW_MAX(atoi(argv[4]));
return(TCL_OK);
}
if(strcmp(argv[3], "AIFS") == 0){
pri_[level].setAIFS(atoi(argv[4]));
return(TCL_OK);
}
if(strcmp(argv[3], "TXOPLimit") == 0){
pri_[level].setTXOPLimit(atof(argv[4]));
return(TCL_OK);
}
}else return (TCL_ERROR);
}
}
if (argc == 2 && strcasecmp(argv[1], "reset") == 0)
{
Terminate();
//FALL-THROUGH to give parents a chance to reset
}

return DTail::command(argc, argv);
}

void
PriQ::recv(Packet *p, Handler *h)
{
if(flag == 0) {
((Mac802_11e*) target())->queue_ = this;
flag = 1;
for(int i = 0; i < MAX_PRI; i++) {
pri_[i].setdrop(drop_);
}
}

struct hdr_cmn *ch = HDR_CMN(p);
if(Prefer_Routing_Protocols) {

switch(ch->ptype()) {
case PT_DSR:
case PT_MESSAGE:
case PT_TORA:
case PT_AODV:
recvHighPriority(p, h);
break;

default:
pri_recv(p, h);
}
}
else {
pri_recv(p, h);
}
}

void
PriQ:ri_recv(Packet *p, Handler *h)
{
Scheduler &s = Scheduler::instance();
level = PKT_LEVEL(p);
struct hdr_cmn *ch = HDR_CMN(p);
/* target_handle() is necessary to give the target to class Queue.
* Otherwise the target is not known in class Queue
* when dequeing packet (
*/
pri_[level].target_handle(target_);
pri_[level].recv(p,h);
}


void
PriQ::recvHighPriority(Packet *p, Handler *)
// insert packet at front of queue
{
pri_[cntl].q_->enqueHead(p);
pri_[cntl].target_handle(target_);
if (pri_[cntl].q_->length() >= qlim_)
{
Packet *to_drop = pri_[cntl].q_->lookup(pri_[cntl].q_->length()-1);
pri_[cntl].q_->remove(to_drop);
drop(to_drop);
}
if (!pri_[cntl].blocked()) {
/*
* We're not blocked. Get a packet and send it on.
* We perform an extra check because the queue
* might drop the packet even if it was
* previously empty! (e.g., RED can do this.)
*/


p = pri_[cntl].deque();
if (p != 0) {
pri_[cntl].block();
pri_[cntl].recvHighPri(p);
//target_->recv(p, &qh_); <- done in d-tail.cc
}
}
}

void
PriQ::filter(PacketFilter filter, void * data)
// apply filter to each packet in queue,
// - if filter returns 0 leave packet in queue
// - if filter returns 1 remove packet from queue
{
int i = 0;
while (i < pri_[cntl].q_->length())
{
Packet *p = pri_[cntl].q_->lookup(i);
if (filter(p,data))
{
pri_[cntl].q_->remove(p); // decrements q len
}
else i++;
}
}

Packet*
PriQ::filter(nsaddr_t id)
{
Packet *p = 0;
Packet *pp = 0;
struct hdr_cmn *ch;

for(p = pri_[cntl].q_->head(); p; p = p->next_) {
ch = HDR_CMN(p);
if(ch->next_hop() == id)
break;
pp = p;
}

/*
* Deque Packet
*/
if(p) {
if(pp == 0)
pri_[cntl].q_->remove(p);
else
pri_[cntl].q_->remove(p, pp);
}
return p;
}



/*
* Called at the end of the simulation to purge the IFQ.
*/
void
PriQ::Terminate()
{
for(int i = 0; i< MAX_PRI; i++){
Packet *p;
while((p = pri_[i].deque())) {
drop(p, DROP_END_OF_SIMULATION);
//drop(p);

}
}
}

int PriQ::getLevels(){
return levels;
}
 
Old 04-13-2009, 12:26 PM   #2
linux_007
LQ Newbie
 
Registered: Mar 2009
Posts: 8

Original Poster
Rep: Reputation: 0
Please need HELP!!!
 
  


Reply


Thread Tools Search this Thread
Search this Thread:

Advanced Search

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is Off
HTML code is Off



Similar Threads
Thread Thread Starter Forum Replies Last Post
Is there freeware Network Simulation software? jimdaworm Linux - Networking 10 04-18-2016 08:52 PM
Plz.. help me. Network Simulation(NS2)'s problems everfree General 0 06-16-2008 01:06 AM
Network time protocol sailu_mvn Linux - Software 1 01-06-2006 06:47 AM
network simulation software mohtasham1983 Linux - Networking 3 01-03-2006 05:05 PM
A network protocol like Samba??? Zappa Linux - Networking 8 02-11-2004 09:00 AM

LinuxQuestions.org > Forums > Linux Forums > Linux - Software

All times are GMT -5. The time now is 05:21 PM.

Main Menu
Advertisement
My LQ
Write for LQ
LinuxQuestions.org is looking for people interested in writing Editorials, Articles, Reviews, and more. If you'd like to contribute content, let us know.
Main Menu
Syndicate
RSS1  Latest Threads
RSS1  LQ News
Twitter: @linuxquestions
Open Source Consulting | Domain Registration