半天后,尝试,引用网络上的零散资源,成品博客Leach协议ubuntu10.04在安装(12.04也可以在右侧安装,然而,实施效果的不,求解决~~),并制作了补丁。
一个关键的安装步骤如下面:
1.在用户文件夹创建一个新的文件夹,所谓随机。忠告“Leach”。
2.将一键安装包中的文件拷贝到Leach目录中。
3.运行脚本:./leach-install.sh
中间过程可能须要输入管理员权限的password。请依据自己设定输入。
因为无法上传附件,我在此将补丁文件和脚本贴出来,假设有须要安装包的。能够联系我。
1.补丁文件
diff -u -r ns-2.35-old/apps/app.cc ns-2.35/apps/app.cc --- ns-2.35-old/apps/app.cc 1999-03-04 10:21:34.000000000 +0800 +++ ns-2.35/apps/app.cc 2014-05-13 19:59:14.636571596 +0800 @@ -50,6 +50,9 @@ Application::Application() : enableRecv_(0), enableResume_(0) { +#ifdef MIT_uAMPS + enableRecv_ = 1; +#endif } @@ -120,6 +123,22 @@ tcl.evalf("%s recv %d", name_, nbytes); } +#ifdef MIT_uAMPS +void Application::recv(int link_dst, int data_size, char* meta_data, int sender) +{ + if (! enableRecv_) + return; + Tcl& tcl = Tcl::instance(); + tcl.evalf("%s recv %d %d %d %s", name_, link_dst, sender, data_size, meta_data); +} +void Application::recv(char* ch_index) +{ + if (! enableRecv_) + return; + Tcl& tcl = Tcl::instance(); + tcl.evalf("%s recv %s", name_, ch_index); +} +#endif void Application::resume() { diff -u -r ns-2.35-old/apps/app.h ns-2.35/apps/app.h --- ns-2.35-old/apps/app.h 1999-09-28 11:46:27.000000000 +0800 +++ ns-2.35/apps/app.h 2014-05-13 19:58:00.964434062 +0800 @@ -50,6 +50,10 @@ Application(); virtual void send(int nbytes); virtual void recv(int nbytes); +#ifdef MIT_uAMPS + virtual void recv(int sendto, int data_size, char* meta_data, int sender); + virtual void recv(char* ch_index); +#endif virtual void resume(); protected: 鍙湪 ns-2.35 瀛樺湪锛歛utoconf.h diff -u -r ns-2.35-old/common/mobilenode.cc ns-2.35/common/mobilenode.cc --- ns-2.35-old/common/mobilenode.cc 2006-02-22 21:21:52.000000000 +0800 +++ ns-2.35/common/mobilenode.cc 2014-05-13 20:01:14.620430927 +0800 @@ -338,6 +338,14 @@ "M %.5f %d (%.2f, %.2f, %.2f), (%.2f, %.2f), %.2f", s.clock(), address_, X_, Y_, Z_, destX_, destY_, speed_); log_target_->pt_->dump(); +#ifdef MIT_uAMPS +#if 0 + sprintf(log_target->buffer(), + "M %.5f %d (%.2f, %.2f, %.2f), (%.2f, %.2f), %.2f", + s.clock(), index_, X, Y, Z, destX, destY, speed); + log_target->dump(); +#endif +#endif } diff -u -r ns-2.35-old/common/packet.cc ns-2.35/common/packet.cc --- ns-2.35-old/common/packet.cc 2008-02-18 11:39:02.000000000 +0800 +++ ns-2.35/common/packet.cc 2014-05-13 20:02:50.244395619 +0800 @@ -60,6 +60,9 @@ int Packet::hdrlen_ = 0; // size of a packet's header Packet* Packet::free_; // free list int hdr_cmn::offset_; // static offset of common header +#ifdef MIT_uAMPS +int hdr_rca::offset_; // static offset of rca header +#endif int hdr_flags::offset_; // static offset of flags header @@ -135,6 +138,18 @@ }; } class_cmnhdr; +#ifdef MIT_uAMPS + +class RCAHeaderClass : public PacketHeaderClass { +public: + RCAHeaderClass() : PacketHeaderClass("PacketHeader/RCA", + sizeof(hdr_rca)) { + bind_offset(&hdr_rca::offset_); + } +} class_rcahdr; + +#endif + class FlagsHeaderClass : public PacketHeaderClass { public: FlagsHeaderClass() : PacketHeaderClass("PacketHeader/Flags", diff -u -r ns-2.35-old/common/packet.h ns-2.35/common/packet.h --- ns-2.35-old/common/packet.h 2010-05-10 06:28:41.000000000 +0800 +++ ns-2.35/common/packet.h 2014-05-13 20:08:09.208346200 +0800 @@ -61,6 +61,10 @@ #define HDR_IP(p) (hdr_ip::access(p)) #define HDR_RTP(p) (hdr_rtp::access(p)) #define HDR_TCP(p) (hdr_tcp::access(p)) +#ifdef MIT_uAMPS +#define HDR_RCA(p) ((struct hdr_rca*)(p)->access(hdr_rca::offset_)) +#define HDR_MACSensor(p) ((struct hdr_macSensor*)(p)->access(hdr_mac::offset_)) +#endif #define HDR_SCTP(p) (hdr_sctp::access(p)) #define HDR_SR(p) (hdr_sr::access(p)) #define HDR_TFRC(p) (hdr_tfrc::access(p)) @@ -198,9 +202,12 @@ // M-DART packets static const packet_t PT_MDART = 72; - + +#ifdef MIT_uAMPS +static const packet_t PT_RCA = 73; +#endif // insert new packet types here -static packet_t PT_NTYPE = 73; // This MUST be the LAST one +static packet_t PT_NTYPE = 74; // This MUST be the LAST one enum packetClass { @@ -416,7 +423,9 @@ name_[PT_DCCP_CLOSE]="DCCP_Close"; name_[PT_DCCP_CLOSEREQ]="DCCP_CloseReq"; name_[PT_DCCP_RESET]="DCCP_Reset"; - +#ifdef MIT_uAMPS + name_[PT_RCA] = "rca"; +#endif name_[PT_NTYPE]= "undefined"; } static int addPacket(char *name); @@ -553,7 +562,9 @@ * */ u_int8_t incoming; - +#ifdef MIT_uAMPS + static void PrintRcHeader(Packet *p, char *layer); +#endif //monarch extns end; }; @@ -670,6 +681,48 @@ inline ModulationScheme& mod_scheme() { return (mod_scheme_); } }; +#ifdef MIT_uAMPS + +struct hdr_rca { + int msg_type_; + char meta_[1000]; + int meta_size_; + float dist_to_dest_; + int dist_est_; + int rca_src_; + int rca_mac_dst_; + int rca_link_dst_; + int code_; + + static int offset_; // offset for this header + inline static int& offset() { return offset_; } + inline static hdr_rca* access(Packet* p) { + return (hdr_rca*) p->access(offset_); + } + + /* per-field member functions */ + inline int& msg_type() { return (msg_type_); } + inline int& meta_size() { return (meta_size_); } + inline float& get_dist() { return (dist_to_dest_); } + inline int& dist_est() { return (dist_est_); } + inline void set_meta(const char* data) { + meta_size_ = strlen(data); + if (meta_size_ > maxmetasize()) { + printf("Error: Meta size %d too large (max = %d).\n", meta_size_, maxmetasize()); + exit(1); + } + memcpy(meta_, data, meta_size_+1); + } + inline char* const meta() { return (meta_); } + inline int maxmetasize() { return (sizeof(meta_)); } + inline int& rca_src() { return (rca_src_); } + inline int& rca_mac_dst() { return (rca_mac_dst_); } + inline int& rca_link_dst() { return (rca_link_dst_); } + inline int& get_code() { return (code_); } + +}; + +#endif class PacketHeaderClass : public TclClass { protected: @@ -699,6 +752,10 @@ assert(p->fflag_ == FALSE); free_ = p->next_; assert(p->data_ == 0); +#ifdef MIT_uAMPS + hdr_rca* rca_hdr = HDR_RCA(p); + rca_hdr->meta_size_ = 0; +#endif p->uid_ = 0; p->time_ = 0; } else { @@ -718,6 +775,17 @@ return (p); } +#ifdef MIT_uAMPS +inline void Packet::PrintRcHeader(Packet *p, char *layer) +{ + hdr_cmn *hdr = HDR_CMN(p); + hdr_rca *rca_hdr = HDR_RCA(p); + + printf("%s Layer received: Type=%d data_size=%d\n\tMeta = %s\n\tSource = %x\n\tTarget = %x\n\tLink_target = %x\n",layer,rca_hdr->msg_type(), hdr->size(), rca_hdr->meta(),rca_hdr->rca_src(), rca_hdr->rca_mac_dst(), rca_hdr->rca_link_dst()); + +} +#endif + /* * Allocate an n byte data buffer to an existing packet * @@ -817,7 +885,15 @@ if (data_) p->data_ = data_->copy(); p->txinfo_.init(&txinfo_); - +#ifdef MIT_uAMPS + hdr_rca* ch = HDR_RCA(this); + hdr_rca* new_ch = HDR_RCA(p); + + if (ch->meta_size_) { + new_ch->meta_size_ = ch->meta_size_; + memcpy(new_ch->meta_, ch->meta_, ch->meta_size_+1); + } +#endif return (p); } 鍙湪 ns-2.35 瀛樺湪锛歝onfig.log 鍙湪 ns-2.35 瀛樺湪锛歝onfig.status 鍙湪 ns-2.35 瀛樺湪锛歡en 鍙湪 ns-2.35/indep-utils/cmu-scen-gen/setdest 瀛樺湪锛歝alcdest 鍙湪 ns-2.35/indep-utils/cmu-scen-gen/setdest 瀛樺湪锛歁akefile 鍙湪 ns-2.35/indep-utils/webtrace-conv/dec 瀛樺湪锛歁akefile 鍙湪 ns-2.35/indep-utils/webtrace-conv/epa 瀛樺湪锛歁akefile 鍙湪 ns-2.35/indep-utils/webtrace-conv/nlanr 瀛樺湪锛歁akefile 鍙湪 ns-2.35/indep-utils/webtrace-conv/ucb 瀛樺湪锛歁akefile 鍙湪 ns-2.35 瀛樺湪锛歭each_test diff -u -r ns-2.35-old/mac/channel.cc ns-2.35/mac/channel.cc --- ns-2.35-old/mac/channel.cc 2009-01-03 05:50:24.000000000 +0800 +++ ns-2.35/mac/channel.cc 2014-05-13 20:10:13.372687539 +0800 @@ -121,7 +121,16 @@ ((Phy*) obj)->setchnl(this); return TCL_OK; } - +#ifdef MIT_uAMPS + /* + * When nodes are dead (e.g., they have run out of energy), + * they must be removed from the network. + */ + else if(strcmp(argv[1], "removeif") == 0) { + ((Phy*) obj)->deletechnl(&ifhead_); + return TCL_OK; + } +#endif // add interface for grid_keeper_ /*else if(strncasecmp(argv[1], "grid_keeper", 5) == 0) { grid_keeper_ = (GridKeeper*)obj; diff -u -r ns-2.35-old/mac/ll.h ns-2.35/mac/ll.h --- ns-2.35-old/mac/ll.h 2010-03-08 13:54:52.000000000 +0800 +++ ns-2.35/mac/ll.h 2014-05-13 20:11:32.300421165 +0800 @@ -52,6 +52,9 @@ }; struct hdr_ll { +#ifdef MIT_uAMPS +public: +#endif LLFrameType lltype_; // link-layer frame type int seqno_; // sequence number int ackno_; // acknowledgement number @@ -105,7 +108,9 @@ int seqno_; // link-layer sequence number int ackno_; // ACK received so far int macDA_; // destination MAC address - +#ifdef MIT_uAMPS + double mindelay_; +#endif Queue* ifq_; // interface queue Mac* mac_; // MAC object LanRouter* lanrouter_; // for lookups of the next hop 鍙湪 ns-2.35/mac 瀛樺湪锛歮ac-sensor.cc 鍙湪 ns-2.35/mac 瀛樺湪锛歮ac-sensor.h 鍙湪 ns-2.35/mac 瀛樺湪锛歮ac-sensor-timers.cc 鍙湪 ns-2.35/mac 瀛樺湪锛歮ac-sensor-timers.h diff -u -r ns-2.35-old/mac/phy.cc ns-2.35/mac/phy.cc --- ns-2.35-old/mac/phy.cc 2005-09-19 07:33:33.000000000 +0800 +++ ns-2.35/mac/phy.cc 2014-05-13 20:17:43.501993087 +0800 @@ -57,6 +57,13 @@ channel_ = 0; node_ = 0; head_ = 0; +#ifdef MIT_uAMPS + /* Keep track of when transmission ends for carrier sense. */ + /* Since CDMA can be used with CSMA, need to keep track of when + transmissions from each CDMA code will end. */ + cs_end_ = new double[1000]; + for (int i=0; i<1000; i++) cs_end_[i] = 0; +#endif } int diff -u -r ns-2.35-old/mac/phy.h ns-2.35/mac/phy.h --- ns-2.35-old/mac/phy.h 2000-08-17 08:03:38.000000000 +0800 +++ ns-2.35/mac/phy.h 2014-05-13 20:45:37.292391713 +0800 @@ -90,6 +90,12 @@ LIST_INSERT_HEAD(head, this, chnl_link_); //channel_ = chnl; } +#ifdef MIT_uAMPS + inline void deletechnl(struct if_head *head) { + LIST_REMOVE(this, chnl_link_); + //delete channel_; + } +#endif // list of all network interfaces on a node Phy* nextnode(void) const { return node_link_.le_next; } inline void insertnode(struct if_head* head) { @@ -136,7 +142,11 @@ double bandwidth_; // bit rate Channel *channel_; // the channel for output - +#ifdef MIT_uAMPS + double *cs_end_; // time when carrier sence will end per code +public: + inline double csEnd(int code) { return cs_end_[code]; } +#endif }; diff -u -r ns-2.35-old/mac/wireless-phy.cc ns-2.35/mac/wireless-phy.cc --- ns-2.35-old/mac/wireless-phy.cc 2007-09-04 12:32:18.000000000 +0800 +++ ns-2.35/mac/wireless-phy.cc 2014-05-13 20:48:04.392443613 +0800 @@ -75,6 +75,25 @@ WirelessPhy::WirelessPhy() : Phy(), sleep_timer_(this), status_(IDLE) { +#ifdef MIT_uAMPS + alive_ = 1; // 0 = dead, 1 = alive + bandwidth_ = 1000000; // 100 Mbps + Efriss_amp_ = 100 * 1e-12; // Friss amp energy (J/bit/m^2) + Etwo_ray_amp_ = 0.013 * 1e-12; // Two-ray amp energy (J/bit/m^4) + EXcvr_ = 50 * 1e-9; // Xcvr energy (J/bit) + // Use this base threshold to get a "hearing radius" of ~ 1 m + Pfriss_amp_ = Efriss_amp_ * bandwidth_; // Friss power (W/m^2) + Ptwo_ray_amp_ = Etwo_ray_amp_ * bandwidth_; // Two-ray power (W/m^4) + PXcvr_ = EXcvr_ * bandwidth_; // Xcvr power (W) + sleep_ = 0; // 0 = awake, 1 = asleep + ss_ = 1; // amount of spreading + time_finish_rcv_ = 0; + dist_ = 0; // approx. distance to transmitter + energy_ = 0; +#else + bandwidth_ = 2*1e6; // 2 Mb + Pt_ = pow(10, 2.45) * 1e-3; // 24.5 dbm, ~ 281.8mw +#endif /* * It sounds like 10db should be the capture threshold. * @@ -97,7 +116,16 @@ bind("Pt_", &Pt_); bind("freq_", &freq_); bind("L_", &L_); - +#ifdef MIT_uAMPS + bind("alive_",&alive_); + bind("bandwidth_",&bandwidth_); + bind("Efriss_amp_", &Efriss_amp_); + bind("Etwo_ray_amp_", &Etwo_ray_amp_); + bind("EXcvr_", &EXcvr_); + bind("sleep_",&sleep_); + bind("ss_",&ss_); + bind("dist_",&dist_); +#endif lambda_ = SPEED_OF_LIGHT / freq_; node_ = 0; @@ -196,6 +224,12 @@ node_ = (Node *)obj; return TCL_OK; } +#ifdef MIT_uAMPS + else if (strcasecmp(argv[1], "attach-energy") == 0) { + energy_ = (EnergyResource*) obj; + return TCL_OK; + } +#endif } return Phy::command(argc,argv); } @@ -207,7 +241,47 @@ * Sanity Check */ assert(initialized()); - +#ifdef MIT_uAMPS + /* + * The power for transmission depends on the distance between + * the transmitter and the receiver. If this distance is + * less than the crossover distance: + * (c_d)^2 = 16 * PI^2 * L * hr^2 * ht^2 + * --------------------------------- + * lambda^2 + * the power falls off using the Friss equation. Otherwise, the + * power falls off using the two-ray ground reflection model. + * Therefore, the power for transmission of a bit is: + * Pt = Pfriss_amp_*d^2 if d < c_d + * Pt = Ptwo_ray_amp_*d^4 if d >= c_d. + * The total power dissipated per bit is PXcvr_ + Pt. + */ + hdr_cmn *ch = HDR_CMN(p); + hdr_rca *rca_hdr = HDR_RCA(p); + double d = rca_hdr->get_dist(); + double hr, ht; // height of recv and xmit antennas + double tX, tY, tZ; // transmitter location + ((MobileNode *)node_)->getLoc(&tX, &tY, &tZ); + ht = tZ + ant_->getZ(); + hr = ht; // assume receiving node and antenna at same height + double crossover_dist = sqrt((16 * PI * PI * L_ * ht * ht * hr * hr) + / (lambda_ * lambda_)); + if (d < crossover_dist) + if (d > 1) + Pt_ = Efriss_amp_ * bandwidth_ * d * d; + else + // Pfriss_amp_ is the minimum transmit amplifier power. + Pt_ = Efriss_amp_ * bandwidth_; + else + Pt_ = Etwo_ray_amp_ * bandwidth_ * d * d * d * d; + PXcvr_ = EXcvr_ * bandwidth_; + + if (energy_) + { + if (energy_->remove(pktEnergy(Pt_, PXcvr_, ch->size())) != 0) + alive_ = 0; + } +#endif if (em()) { //node is off here... if (Is_node_on() != true ) { @@ -317,7 +391,24 @@ PacketStamp s; double Pr; int pkt_recvd = 0; - +#ifdef MIT_uAMPS + hdr_cmn *ch = HDR_CMN(p); + hdr_rca *rca_hdr = HDR_RCA(p); + /* + * Record when this packet ends and its code. + */ + int code = rca_hdr->get_code(); + cs_end_[code] = Scheduler::instance().clock() + txtime(p); + /* + * If the node is asleep, drop the packet. + */ + if (sleep_) { + //printf("Sleeping node... carrier sense ends at %f\n", cs_end_); + //fflush(stdout); + pkt_recvd = 0; + goto DONE; + } +#endif Pr = p->txinfo_.getTxPr(); // if the node is in sleeping mode, drop the packet simply @@ -367,7 +458,44 @@ hdr_cmn *hdr = HDR_CMN(p); hdr->error() = modulation_->BitError(Pr); } - +#ifdef MIT_uAMPS + /* + * Only remove energy from nodes that are awake and not currently + * transmitting a packet. + */ + if (Scheduler::instance().clock() >= time_finish_rcv_) { + PXcvr_ = EXcvr_ * bandwidth_; + if (energy_) + { + if (energy_->remove(pktEnergy((double)0, PXcvr_,ch->size())) != 0) + alive_ = 0; + } + time_finish_rcv_ = Scheduler::instance().clock() + txtime(p); + } + /* + * Determine approximate distance of node transmitting node + * from received power. + */ + double hr, ht; // height of recv and xmit antennas + double rX, rY, rZ; // receiver location + double d1, d2; + double crossover_dist, Pt, M; + ((MobileNode *)node_)->getLoc(&rX, &rY, &rZ); + hr = rZ + ant_->getZ(); + ht = hr; // assume transmitting node antenna at same height + + crossover_dist = sqrt((16 * PI * PI * L_ * ht * ht * hr * hr) + / (lambda_ * lambda_)); + Pt = p->txinfo_.getTxPr(); + M = lambda_ / (4 * PI); + d1 = sqrt( (Pt * M * M) / (L_ * Pr) ); + d2 = sqrt(sqrt( (Pt * hr * hr * ht * ht) / Pr) ); + if (d1 < crossover_dist) + dist_ = d1; + else + dist_ = d2; + rca_hdr->dist_est() = (int) ceil(dist_); +#endif /* * The MAC layer must be notified of the packet reception * now - ie; when the first bit has been detected - so that @@ -600,3 +728,23 @@ sleep_timer_.resched(10.0); } + +#ifdef MIT_uAMPS +double +WirelessPhy::pktEnergy(double pt, double pxcvr, int nbytes) +{ + + /* + * Energy (in Joules) is power (in Watts=Joules/sec) divided by + * bandwidth (in bits/sec) multiplied by the number of bytes, times 8 bits. + */ + // If data has been spread, power per DATA bit should be the same + // as if there was no spreading ==> divide transmit power + // by spreading factor. + double bits = (double) nbytes * 8; + pt /= ss_; + double j = bits * (pt + pxcvr) / bandwidth_; + return(j); +} + +#endif diff -u -r ns-2.35-old/mac/wireless-phy.h ns-2.35/mac/wireless-phy.h --- ns-2.35-old/mac/wireless-phy.h 2007-01-30 13:00:50.000000000 +0800 +++ ns-2.35/mac/wireless-phy.h 2014-05-13 21:07:12.060482931 +0800 @@ -48,7 +48,9 @@ #include "phy.h" #include "mobilenode.h" #include "timer-handler.h" - +#ifdef MIT_uAMPS +#include <mit/rca/energy.h> +#endif class Phy; class Propagation; class WirelessPhy; @@ -121,11 +123,30 @@ double CPThresh_; // capture threshold (db) Antenna *ant_; +#ifdef MIT_uAMPS + EnergyResource *energy_; // Energy resource + int alive_; // 0 = dead, 1 = alive +//endif +//ifdef MIT_uAMPS_temp + double Efriss_amp_; // Xmit amp energy (J/bit/m^2) + double Etwo_ray_amp_; // Xmit amp energy (J/bit/m^4) + double EXcvr_; // Xcvr energy (J/bit) + double Pfriss_amp_; // Friss base transmission power (W/m^2) + double Ptwo_ray_amp_; // Two-ray base transmission power (W/m^4) + double PXcvr_; // Xcvr Power (W) + int sleep_; // 0 = awake, 1 = asleep + int ss_; // amount of spreading + double time_finish_rcv_; + double dist_; // approx. distance to transmitter +private: + double pktEnergy(double pt, double pxcvr, int nbytes); +#endif +protected: Propagation *propagation_; // Propagation Model Modulation *modulation_; // Modulation Schem // Why phy has a node_ and this guy has it all over again??-// MobileNode* node_; // Mobile Node to which interface is attached . + //MobileNode* node_; // Mobile Node to which interface is attached . enum ChannelStatus { SLEEP, IDLE, RECV, SEND }; bool node_on_; // on-off status of this node 鍙湪 ns-2.35 瀛樺湪锛歁akefile diff -u -r ns-2.35-old/Makefile.in ns-2.35/Makefile.in --- ns-2.35-old/Makefile.in 2011-10-24 00:29:54.000000000 +0800 +++ ns-2.35/Makefile.in 2014-05-13 20:36:28.672410926 +0800 @@ -59,7 +59,7 @@ LDFLAGS = @LDFLAGS@ LDOUT = -o $(BLANK) -DEFINE = -DTCP_DELAY_BIND_ALL -DNO_TK @V_DEFINE@ @V_DEFINES@ @DEFS@ -DNS_DIFFUSION -DSMAC_NO_SYNC -DCPP_NAMESPACE=@CPP_NAMESPACE@ -DUSE_SINGLE_ADDRESS_SPACE -Drng_test +DEFINE = -DTCP_DELAY_BIND_ALL -DNO_TK @V_DEFINE@ @V_DEFINES@ @DEFS@ -DNS_DIFFUSION -DSMAC_NO_SYNC -DCPP_NAMESPACE=@CPP_NAMESPACE@ -DUSE_SINGLE_ADDRESS_SPACE -Drng_test -DMIT_uAMPS INCLUDES = \ -I. @V_INCLUDE_X11@ \ @@ -72,7 +72,7 @@ -I./diffusion3/lib/nr -I./diffusion3/ns \ -I./diffusion3/filter_core -I./asim/ -I./qs \ -I./diffserv -I./satellite \ - -I./wpan + -I./wpan -I./mit/rca -I./mit/uAMPS LIB = \ @@ -333,6 +333,9 @@ wpan/p802_15_4sscs.o wpan/p802_15_4timer.o \ wpan/p802_15_4trace.o wpan/p802_15_4transac.o \ apps/pbc.o \ + mit/rca/energy.o mit/rca/rcagent.o \ + mit/rca/rca-ll.o mit/rca/resource.o \ + mac/mac-sensor-timers.o mac/mac-sensor.o mit/uAMPS/bsagent.o \ @V_STLOBJ@ 鍙湪 ns-2.35 瀛樺湪锛歮it 鍙湪 ns-2.35/tcl/ex 瀛樺湪锛?94demo.nam 鍙湪 ns-2.35/tcl/ex 瀛樺湪锛?94demo.tr 鍙湪 ns-2.35/tcl/ex 瀛樺湪锛歭each-wireless.tcl 鍙湪 ns-2.35/tcl/lib 瀛樺湪锛歯s-autoconf.tcl diff -u -r ns-2.35-old/tcl/lib/ns-default.tcl ns-2.35/tcl/lib/ns-default.tcl --- ns-2.35-old/tcl/lib/ns-default.tcl 2010-07-04 06:45:45.000000000 +0800 +++ ns-2.35/tcl/lib/ns-default.tcl 2014-05-13 21:13:13.196383783 +0800 @@ -1590,3 +1590,11 @@ Agent/MDART set macFailed_ true Agent/MDART set etxMetric_ true + +#Phy/WirelessPhy set alive_ 1 +#Phy/WirelessPhy set Efriss_amp_ 100 * 1e-12 +#Phy/WirelessPhy set Etwo_ray_amp_ +#Phy/WirelessPhy set EXcvr_ +#Phy/WirelessPhy set sleep_ +#Phy/WirelessPhy set ss_ +#Phy/WirelessPhy set dist_ 鍙湪 ns-2.35/tcl/mobility 瀛樺湪锛歭each-c.tcl 鍙湪 ns-2.35/tcl/mobility 瀛樺湪锛歭each.tcl 鍙湪 ns-2.35/tcl/mobility 瀛樺湪锛歮te.tcl 鍙湪 ns-2.35/tcl/mobility 瀛樺湪锛歴tat-clus.tcl 鍙湪 ns-2.35 瀛樺湪锛歵est diff -u -r ns-2.35-old/trace/cmu-trace.cc ns-2.35/trace/cmu-trace.cc --- ns-2.35-old/trace/cmu-trace.cc 2011-10-03 06:32:35.000000000 +0800 +++ ns-2.35/trace/cmu-trace.cc 2014-05-13 20:31:31.096823052 +0800 @@ -64,6 +64,9 @@ //</zheng: add for 802.15.4> #include "diffusion/diff_header.h" // DIFFUSION -- Chalermek +#ifdef MIT_uAMPS +#include <mit/rca/rcagent.h> +#endif PacketTracer::PacketTracer() : next_(0) @@ -1415,6 +1418,11 @@ case PT_ARP: format_arp(p, offset); break; +#ifdef MIT_uAMPS + case PT_RCA: + format_rca(p,offset); + break; +#endif default: format_ip(p, offset); offset = strlen(pt_->buffer()); @@ -1451,6 +1459,10 @@ case PT_CBR: format_rtp(p, offset); break; +#ifdef MIT_uAMPS + case PT_RCA: + break; +#endif case PT_DIFF: break; case PT_GAF: @@ -1603,3 +1615,40 @@ duration_scaling_factor_ = atof(tcl.result()); } //</zheng> + +#ifdef MIT_uAMPS +void +CMUTrace::format_rca(Packet *p, int offset) +{ + struct hdr_rca *rca_hdr = HDR_RCA(p); + char op = (char) type_; + + switch (rca_hdr->msg_type()) + { + case ADV: + op = ADV_CHAR; + break; + + case REQ: + op = REQ_CHAR; + break; + + case DATA: + op = DATA_CHAR; + break; + + default: + //printf("format_rca: Warning, unknown meta-data type %d\n",rca_hdr->msg_type()); + op = (char) type_; + break; + } + + sprintf(pt_->buffer() + offset, "------- [%c %d %d %d] ", + op, + rca_hdr->rca_src(), + rca_hdr->rca_link_dst(), + rca_hdr->rca_mac_dst() + ); + return; +} +#endif diff -u -r ns-2.35-old/trace/cmu-trace.h ns-2.35/trace/cmu-trace.h --- ns-2.35-old/trace/cmu-trace.h 2010-05-10 06:28:41.000000000 +0800 +++ ns-2.35/trace/cmu-trace.h 2014-05-13 20:32:22.196397952 +0800 @@ -56,7 +56,11 @@ // change wrt Mike's code #define EOT 'x' - +#ifdef MIT_uAMPS +#define ADV_CHAR 'A' +#define REQ_CHAR 'R' +#define DATA_CHAR 'D' +#endif #define TR_ROUTER 0x01 @@ -161,7 +165,9 @@ void format_aodv(Packet *p, int offset); void format_aomdv(Packet *p, int offset); void format_mdart(Packet *p, int offset); - +#ifdef MIT_uAMPS + void format_rca(Packet *p, int offset); +#endif // This holds all the tracers added at run-time static PacketTracer *pktTrc_;
2.脚本文件
#!/bin/sh echo "Before installing NS2, you should ensure that the 'ns-allinone-2.35' is in '/home/<your name>/Leach'" echo "If the files is right, press any key. Otherwise, press 'Ctrl+D'" read ch sudo apt-get update sudo apt-get install libx11-dev libxmu-dev libxmu-headers libxt-dev libtool g++ patch tcl tk tcl-dev tk-dev gnuplot tar -zxvf ns-allinone-2.35.tar.gz cp -ir ns-2.35 ns-allinone-2.35/ cp leach.diff ns-allinone-2.35 cd ns-allinone-2.35 patch -p0 < leach.diff ./install cd .. echo "The NS2 has been installed. If you want to configure '.bashrc' file automatically, press any key. Otherwise, press 'Ctrl+D'" read ch pathto=$(pwd) echo "export PATH=\$PATH:$pathto/ns-allinone-2.35/bin:$pathto/ns-allinone-2.35/tcl8.5.10/unix:$pathto/ns-allinone-2.35/tk8.5.10/unix" >> ~/.bashrc echo "export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:$pathto/ns-allinone-2.35/otcl-1.14:$pathto/ns-allinone-2.35/lib" >> ~/.bashrc echo "export LD_LIBRARY=\$LD_LIBRARY:$pathto/ns-allinone-2.35/tcl8.5.10/library" >> ~/.bashrc echo "export RCA_LIBRARY=$pathto/ns-allinone-2.35/ns-2.35/mit/rca" >> ~/.bashrc echo "export uAMPS_LIBRARY=$pathto/ns-allinone-2.35/ns-2.35/mit/uAMPS" >> ~/.bashrc echo "echo \"==================Welcome to use NS2 for Leach!=====================\"" >> ~/.bashrc echo "echo \"If you have any questions, please contact norbert_jxl AT 163.com\"" >> ~/.bashrc echo "The '.bashrc' file is configured!"
版权声明:本文博客原创文章,博客,未经同意,不得转载。