Ubuntu10.04中间Leach协议一键安装

半天后,尝试,引用网络上的零散资源,成品博客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	= @[email protected]
 LDOUT	= -o $(BLANK)

-DEFINE	= -DTCP_DELAY_BIND_ALL -DNO_TK @[email protected] @[email protected] @[email protected] -DNS_DIFFUSION -DSMAC_NO_SYNC [email protected][email protected] -DUSE_SINGLE_ADDRESS_SPACE -Drng_test
+DEFINE	= -DTCP_DELAY_BIND_ALL -DNO_TK @[email protected] @[email protected] @[email protected] -DNS_DIFFUSION -DSMAC_NO_SYNC [email protected][email protected] -DUSE_SINGLE_ADDRESS_SPACE -Drng_test -DMIT_uAMPS

 INCLUDES =  	-I. @[email protected] @@ -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  	@[email protected]

鍙湪 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!"

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

时间: 2024-08-09 06:19:08

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

Ubuntu10.04中的Leach协议一键安装

1.HashMap的遍历 package com.sheepmu; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; public class KMPText { public static void main(String[] args) { Map<String,String> map=new HashMap<String,Str

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

在介绍安装wine之前,我想是有必要先介绍一下Wine的.当然,如果是Liunx的高手,我想是没必要看的,但是对于笔者这样的菜鸟级人物还是需要看一下的. Wine是一款Liunx下的模拟器软件,但是Wine又不仅仅是一个模拟器软件,它是一个Windows的兼容层,也就是一个Windows的模 拟器.使用Wine可以将Windows系统下的软件在Liunx下稳定的运行.Wine可以工作在绝大多数的UNIX版本下,包括Linux. FreeBSD.和 Solaris.Wine不需要Microsoft

在ubuntu10.04 64位系统下安装adb

1.下载相应的SDk文件,网址http://dl.google.com/android/android-sdk-linux_x86-1.5_r2.zip 2.解压缩后放在某一个目录下,设置环境变量,在~/.bash_profile 或者 ~/.bashrc文件中, 我是放在bashrc里的,加入一行 export PATH="$PATH:/<存放目录>/platform-tools/" chmod 777 <存放目录>//platform-tools/adb  

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

原文网址:http://blog.csdn.net/chenyafei617/article/details/6570928 一.Introduction 今天我们就来谈谈如何在Ubuntu平台上面编译android源码,我的是ubuntu10.04版本,在进行编译流程讲解之前我想讲一下 make .make snod .make kernel的作用,m.mm.mmm它们的作用以及区别. - make:                 编译源码,生成相应的系统镜像文件.             

ubuntu10.04编译安装LAMP

ubuntu10.04编译安装LAMP以及简单wordpress的使用 : http://linuxme.blog.51cto.com/1850814/971631 一.源码安装LAMP 网上有一堆关于介绍lamp的在这里我就不罗嗦了,直接上配置过程 1.apr包的安装 apr简介: The mission of the Apache Portable Runtime (APR) project is to create and maintain software libraries that

itms-services协议:跳转网页部署及PHP动态生成 iOS渠道包IPA一键安装之plist

相信很多人尝试过使用揣果测试库(http://ipa.chuaiguo.com/)的无线安装测试IPA安装包功能.有心人一定注意到其itms-services协议的一键安装地址的url=部分并不是我们常见的plist文件路径,而是一个install.php通过增加参数的形式自动生成输出了plist.之前因为笔者的项目中渠道包不多,所以懒得去写这样一个文件帮助部署,可是最近,笔者的项目的渠道包不断增多了,显然部署多个plist文件管理上似乎越来越麻烦了,于是笔者开始仿照揣果实现了并结合自己项目的需

ubuntu10.04安装配置storm时遇到的问题及解决(单机)

参考<CentOS6.4下Storm0.9.2单机版安装>的步骤在ubuntu上安装storm,中间遇到一些问题记录一下. 参考文章链接:http://blog.csdn.net/qiyating0808/article/details/36041299 我的linux环境:ubuntu-10.04.4-desktop-i386 一,安装zeromq.jzmq及zookeeper时比较顺利,略过. zeromq-4.0.4.tar.gz zookeeper-3.4.6.tar.gz 安装过程可

ubuntu10.04 svn安装方法

ubuntu10.04 svn安装方法:sudo apt-get install subversion sudo apt-get install libneon27-dev orsudo apt-get install libneon27 cd /usr/libsudo mv libneon-gnutls.so.27 libneon-gnutls.so.27.oldsudo ln -s libneon.so.27 libneon-gnutls.so.27

树莓派:L2TP/IPsec VPN 服务器一键安装脚本

经试验,在树莓派上一次成功,很好用,谢谢原作者!!!此文转自:https://github.com/hwdsl2/setup-ipsec-vpn/blob/master/README-zh.md IPsec VPN 服务器一键安装脚本 使用 Linux Shell 脚本一键快速搭建 IPsec VPN 服务器.支持 IPsec/L2TP 和 Cisco IPsec 协议,可用于 Ubuntu,Debian 和 CentOS 系统.你只需提供自己的 VPN 登录凭证,然后运行脚本自动完成安装. I