半天后,尝试,引用网络上的零散资源,成品博客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!"

版权声明:本文博客原创文章,博客,未经同意,不得转载。

Ubuntu10.04中间Leach协议一键安装的更多相关文章

  1. 【2022.04.19】Docker-compose一键安装mirai,搭建QQ机器人最快方法

    先用官方的脚本安装下docker curl -sSL https://get.docker.com/ | sh 安装docker-compose curl -L "https://githu ...

  2. [Ubuntu] ubuntu10.04系统维护之Wine的安装

    在介绍安装wine之前,我想是有必要先介绍一下Wine的.当然,如果是Liunx的高手,我想是没必要看的,但是对于笔者这样的菜鸟级人物还是需要看一下的. Wine是一款Liunx下的模拟器软件,但是W ...

  3. 【转】Ubuntu10.04上编译Android源码(Build Android source in Ubuntu10.04 Platform)

    原文网址:http://blog.csdn.net/chenyafei617/article/details/6570928 一.Introduction 今天我们就来谈谈如何在Ubuntu平台上面编 ...

  4. ubuntu10.04 建V

    ubuntu10.04架设vpn服 vpn 安装:  pptpd:apt-get install pptpd 1. 配置网络IP地址,编辑 vim /etc/pptpd.conf ,去掉下面两行前面# ...

  5. ubuntu10.04 安装配置tftp服务

    tftpd-hpa 是一个功能增强的TFTP服务器.它提供了很多TFTP的增强功能,它已经被移植到大多数的现代UNIX系统. 1.安装 sudo apt-get install tftpd-hpa t ...

  6. ubuntu10.04编译安装LAMP

    ubuntu10.04编译安装LAMP以及简单wordpress的使用 : http://linuxme.blog.51cto.com/1850814/971631 一.源码安装LAMP 网上有一堆关 ...

  7. u盘安装ubuntu10.04 server.txt

    10.04 先将 ubuntu server 的 iso 放到优盘上,然后在提示无法找到光驱时,按 alt+f2 打开一个新的 console 窗口,将 iso mount 上,具体操作如下: ls ...

  8. u盘安装ubuntu10.04 、11.04 server

    10.04 先将 ubuntu server 的 iso 放到优盘上,然后在提示无法找到光驱时,按 alt+f2 打开一个新的 console 窗口,将 iso mount 上,具体操作如下: ls ...

  9. ubuntu10.04 svn安装方法

    ubuntu10.04 svn安装方法:sudo apt-get install subversion sudo apt-get install libneon27-dev orsudo apt-ge ...

随机推荐

  1. MapXtreme DJ最短路径算法 全路径搜索算法

    包括最短路径,全路径搜索算法演示程序请在http://pan.baidu.com/s/1jG9gKMM#dir/path=%2F%E4%BA%A7%E5%93%81%2FDemos 找 ShortWa ...

  2. T-SQL性能调整——信息收集

    原文:T-SQL性能调整--信息收集 IO信息(自服务器启动开始) --Database IO analysis WITH IOFORDATABASE AS ( SELECT DB_NAME(VFS. ...

  3. 【SSH之旅】一步学习的步Struts1相框(三):分析控制Struts1示例

    部分博客,,先后实施了Struts抽样.现在我们来分析这个样本.具体解释Struts1. Struts1的几个核心组件是值得我们注意的: (1)ActionServlet(核心控制器). (2)Act ...

  4. hexo 部署至Git遇到的坑

    查找资料的时候发现了next这个博客主题,next!非常的漂亮,顺手查看了hexo的相关部署. Hexo官方介绍 Hexo 是一个快速.简洁且高效的博客框架.Hexo 使用 Markdown(或其他渲 ...

  5. Android读取JSON格式数据

    Android读取JSON格式数据 1. 何为JSON? JSON,全称为JavaScript Object Notation,意为JavaScript对象表示法. JSON 是轻量级的文本数据交换格 ...

  6. Xamarin.Forms 初探

    什么是 Xamarin Forms ? Xamarin Forms 是一个高效创建跨平台用户界面的库 .通过Xamarin Forms 能够一次编码生成基于主流移动平台(iOS, Android, W ...

  7. hdu 4445 Crazy Tank (暴力枚举)

    Crazy Tank Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  8. SVN在branch兼并和游戏patch(1)

    近期要hadoop2.4关于上面的行hdfs raid,但在此之前hdfs raid如svn 的branch发展,领导人希望patch方式hdfs raid功能进球trunk里面去,这里涉及到svn ...

  9. Eddy's mistakes(字母大小写转换)strlwr函数的应用

    Problem Description Eddy usually writes  articles ,but he likes mixing the English letter uses, for ...

  10. oracle_利用闪回功能恢复数据

    方便起见一般:执行如下即可不用往下看: ① 启用行移动功能 alter table tbl_a enable row movement; ② 闪回表数据到某个时间点 flashback table t ...