Hello.
I´m working on 802.11g in ns-2.28. I need to make automatic
change in dataRate depending in distance between tow nodes.
I tried to make some changes on the on the mac-802_11.h and
in the mac-802_11.cc but they did not worked for me.
I make some other changes in ns-default.tcl and ns-mac.tcl
for make that the 802.11g standard work in ns-2.28, this
changes were succesful.
In order to make the automatic change in dataRate I tried to
make some changes in mac-802_11.cc:
Packet *p = Packet::alloc();
struct hdr_cmn *ch = HDR_CMN(p);
struct hdr_mac802_11 *dh = HDR_MAC802_11(p);
struct hdr_arp *ah = HDR_ARP(p);
double tX_,tY_,tZ_,rX_,rY_,rZ_;
nsaddr_t txid=index_;
nsaddr_t rxid;
MobileNode *tx_node= (MobileNode*)(Node::get_node_by_address(txid));
tx_node->getLoc(&tX_,&tY_,&tZ_);
ch->tX()=tX_;
ch->tY()=tY_; ch->tZ()=tZ_;
if (strcmp(packet_info.name(ch->ptype()), "ARP") == 0)
rxid=ah->arp_tpa;
else
rxid=ETHER_ADDR(dh->dh_ra);
MobileNode *rx_node= (MobileNode*)(Node::get_node_by_address(rxid));
rx_node->getLoc(&rX_,&rY_,&rZ_);
dist = sqrt((rX_ - tX_) * (rX_ - tX_) + (rY_ - tY_) * (rY_ - tY_) +
(rZ_ - tZ_) * (rZ_ - tZ_));
// End of modification
Tcl& tcl = Tcl::instance();
tcl.evalf("Mac/802_11 set basicRate_");
if (strcmp(tcl.result(), "0") != 0)
bind_bw("basicRate_", &basicRate_);
else
basicRate_ = bandwidth_;
tcl.evalf("Mac/802_11 set dataRate_");
if (strcmp(tcl.result(), "0") != 0)
bind_bw("dataRate_", &dataRate_);
//Modification to obtain dataRate VS distance by Jonathan Lopez
else if (dist<=100 & dist>77)
dataRate_ = 1*1e6;
else if (dist<=77 & dist>65)
dataRate_ = 2*1e6;
else if (dist<=65 & dist>57)
dataRate_ = 6*1e6;
else if (dist<=57 & dist>54)
dataRate_ = 9*1e6;
else if (dist<=54 & dist>50)
dataRate_ = 12*1e6;
else if (dist<=50 & dist>42)
dataRate_ = 18*1e6;
else if (dist<=42 & dist>35)
dataRate_ = 24*1e6;
else if (dist<=35 & dist>23)
dataRate_ = 36*1e6;
else if (dist<=23 & dist>19)
dataRate_ = 48*1e6;
else
dataRate_ = bandwidth_;
// End of modification
EOTtarget_ = 0;
bss_id_ = IBSS_ID;
//printf("bssid in constructor %d\n",bss_id_);
}
Here I just tried to change dataRate depending the distance
between the nodes, for make the change for every packet that
is send.
However this modification is not working, I see that every
time the
dataRate is at 54Mbps, including if I comment
every line that define the dataRate, including the lines
tcl.evalf("Mac/802_11 set dataRate_");
if (strcmp(tcl.result(), "0") != 0)
bind_bw("dataRate_", &dataRate_);
I can modify the dataRate with Mac/802_11 set dataRate_ xMb
in my tcl script. But I need that the dataRate been modified
for every packet that is send denpending in the distance.
Can anyone tell me what is happend or how can I do the
modifications that I need?.
Thanks.
---------------------------------
Do You Yahoo!? La mejor conexión a Internet y 2GB extra a tu correo por $100
al mes. http://net.yahoo.com.mx