Address comparator moved to separate file, remade constructors (closed ticket
authorKirill Andreev <andreev@iitp.ru>
Fri, 13 Mar 2009 13:40:43 +0300
changeset 4802 5e2ca849c9c1
parent 4800 b26167ef0c84
child 4803 882553eade80
Address comparator moved to separate file, remade constructors (closed ticket #21), removed unneded "struct" word
src/devices/l2-routing/l2-routing-hwmp/hwmp-rtable.cc
src/devices/l2-routing/l2-routing-hwmp/hwmp-rtable.h
src/devices/l2-routing/l2-routing-hwmp/hwmp-state.cc
src/devices/l2-routing/l2-routing-hwmp/hwmp-state.h
src/devices/l2-routing/l2-routing-hwmp/hwmp.cc
src/devices/l2-routing/l2-routing-hwmp/hwmp.h
src/devices/wifi/mesh-wifi-mac-header.cc
src/devices/wifi/mesh-wifi-mac.h
src/devices/wifi/mesh-wifi-peer-manager.h
src/devices/wifi/mesh-wifi-perr-information-element.cc
src/devices/wifi/mesh-wifi-perr-information-element.h
src/devices/wifi/mesh-wifi-prep-information-element.cc
src/devices/wifi/mesh-wifi-preq-information-element.cc
src/devices/wifi/mesh-wifi-preq-information-element.h
src/node/mac48-address-comparator.h
src/node/wscript
--- a/src/devices/l2-routing/l2-routing-hwmp/hwmp-rtable.cc	Thu Mar 12 13:39:22 2009 +0300
+++ b/src/devices/l2-routing/l2-routing-hwmp/hwmp-rtable.cc	Fri Mar 13 13:40:43 2009 +0300
@@ -70,7 +70,7 @@
 		uint32_t	seqnum
 		)
 {
-	std::map<Mac48Address, ReactiveRoute, addrcmp>::iterator i = m_routes.find(destination);
+	std::map<Mac48Address, ReactiveRoute, mac48addrComparator>::iterator i = m_routes.find(destination);
 	if(i == m_routes.end())
 	{
 		ReactiveRoute newroute;
@@ -135,7 +135,7 @@
 HwmpRtable::AddPrecursor(Mac48Address destination, uint32_t port, Mac48Address precursor)
 {
 	bool should_add = true;
-	std::map<Mac48Address, ReactiveRoute, addrcmp>::iterator i = m_routes.find(destination);
+	std::map<Mac48Address, ReactiveRoute, mac48addrComparator>::iterator i = m_routes.find(destination);
 	if((i != m_routes.end()) && (i->second.port == port))
 	{
 		for(unsigned int j = 0 ; j < i->second.precursors.size(); j ++)
@@ -178,7 +178,7 @@
 void
 HwmpRtable::DeleteReactivePath(Mac48Address destination, uint32_t port)
 {
-	std::map<Mac48Address, ReactiveRoute, addrcmp>::iterator i = m_routes.find(destination);
+	std::map<Mac48Address, ReactiveRoute, mac48addrComparator>::iterator i = m_routes.find(destination);
 	if(i != m_routes.end())
 		if(i->second.port ==  port)
 			m_routes.erase(i);
@@ -192,7 +192,7 @@
 	result.metric = MAX_METRIC;
 	result.ifIndex = PORT_ANY;
 	
-	std::map<Mac48Address, ReactiveRoute, addrcmp>::iterator i = m_routes.find(destination);
+	std::map<Mac48Address, ReactiveRoute, mac48addrComparator>::iterator i = m_routes.find(destination);
 	if(i == m_routes.end())
 		return result;
 	result.ifIndex = i->second.port;
@@ -213,7 +213,7 @@
 	result.retransmitter = Mac48Address::GetBroadcast();
 	result.metric = MAX_METRIC;
 	result.ifIndex = PORT_ANY;
-	std::map<uint32_t, ProactiveRoute, addrcmp>::iterator i = m_roots.find(port);
+	std::map<uint32_t, ProactiveRoute, mac48addrComparator>::iterator i = m_roots.find(port);
 	if(i == m_roots.end())
 		return result;
 	result.ifIndex = i->first;
@@ -229,7 +229,7 @@
 HwmpRtable::GetUnreachableDestinations(Mac48Address peerAddress, uint32_t port)
 {
 	std::vector<FailedDestination> retval;
-	for(std::map<Mac48Address, ReactiveRoute, addrcmp>::iterator i = m_routes.begin(); i!= m_routes.end(); i++)
+	for(std::map<Mac48Address, ReactiveRoute, mac48addrComparator>::iterator i = m_routes.begin(); i!= m_routes.end(); i++)
 		if((i->second.retransmitter == peerAddress)&&(i->second.port == port))
 		{
 			FailedDestination dst;
@@ -241,7 +241,7 @@
 	/**
 	 * Lookup a path to root
 	 */
-	std::map<uint32_t, ProactiveRoute, addrcmp>::iterator i = m_roots.find(port);
+	std::map<uint32_t, ProactiveRoute, mac48addrComparator>::iterator i = m_roots.find(port);
 	if((i != m_roots.end())&&(i->second.retransmitter == peerAddress))
 	{
 		FailedDestination dst;
@@ -254,7 +254,7 @@
 uint32_t
 HwmpRtable::RequestSeqnum(Mac48Address destination)
 {
-	std::map<Mac48Address, ReactiveRoute, addrcmp>::iterator i = m_routes.find(destination);
+	std::map<Mac48Address, ReactiveRoute, mac48addrComparator>::iterator i = m_routes.find(destination);
 	if(i == m_routes.end())
 		return 0;
 	return i->second.seqnum;
@@ -264,13 +264,13 @@
 HwmpRtable::GetPrecursors(Mac48Address destination, uint32_t port)
 {
 	std::vector<Mac48Address> retval;
-	std::map<uint32_t, ProactiveRoute, addrcmp>::iterator root = m_roots.find(port);
+	std::map<uint32_t, ProactiveRoute, mac48addrComparator>::iterator root = m_roots.find(port);
 	if((root != m_roots.end()) &&(root->second.root == destination))
 	{
 		for(unsigned int i = 0; i < root->second.precursors.size(); i ++)
 			retval.push_back(root->second.precursors[i]);
 	}
-	std::map<Mac48Address, ReactiveRoute, addrcmp>::iterator route = m_routes.find(destination);
+	std::map<Mac48Address, ReactiveRoute, mac48addrComparator>::iterator route = m_routes.find(destination);
 	if( (route != m_routes.end()) && (route->second.port == port) )
 	{
 		for(unsigned int i = 0; i < route->second.precursors.size(); i ++)
--- a/src/devices/l2-routing/l2-routing-hwmp/hwmp-rtable.h	Thu Mar 12 13:39:22 2009 +0300
+++ b/src/devices/l2-routing/l2-routing-hwmp/hwmp-rtable.h	Fri Mar 13 13:40:43 2009 +0300
@@ -26,6 +26,7 @@
 #include <map>
 #include "ns3/nstime.h"
 #include "ns3/mac48-address.h"
+#include "ns3/mac48-address-comparator.h"
 #include "ns3/net-device.h"
 #include "ns3/event-id.h"
 #include "ns3/packet.h"
@@ -66,9 +67,9 @@
 				uint32_t	metric;
 				uint32_t	seqnum;
 			};
-			struct LookupResult
+			LookupResult
 				LookupReactive(Mac48Address destination);
-			struct LookupResult
+			LookupResult
 				LookupProactive(uint32_t port);
 			//path error routines:
 			struct FailedDestination
@@ -76,7 +77,7 @@
 				Mac48Address	destination;
 				uint32_t	seqnum;
 			};
-			std::vector<struct FailedDestination>
+			std::vector<FailedDestination>
 				GetUnreachableDestinations(Mac48Address peerAddress, uint32_t port);
 			uint32_t
 				RequestSeqnum(Mac48Address dst);
@@ -103,22 +104,9 @@
 				uint32_t seqnum;
 				std::vector<Mac48Address> precursors;
 			};
-			struct addrcmp
-			{
-				bool operator()(const Mac48Address addr1, const Mac48Address addr2) const
-					    {
-						    uint8_t s1[6], s2[6];
-						    addr1.CopyTo(s1);
-						    addr2.CopyTo(s2);
-						    for(int i = 0; i < 6; i ++)
-							    if(s1[i] > s2[i])
-								    return true;
-						    return false;
-					    }
-			};
-			std::map<Mac48Address, struct ReactiveRoute, addrcmp>
+			std::map<Mac48Address, ReactiveRoute, mac48addrComparator>
 				m_routes;
-			std::map<uint32_t, struct ProactiveRoute>
+			std::map<uint32_t, ProactiveRoute>
 				m_roots;
 	};
 } //namespace ns3
--- a/src/devices/l2-routing/l2-routing-hwmp/hwmp-state.cc	Thu Mar 12 13:39:22 2009 +0300
+++ b/src/devices/l2-routing/l2-routing-hwmp/hwmp-state.cc	Fri Mar 13 13:40:43 2009 +0300
@@ -37,13 +37,13 @@
 	return tid;
 }
 
-HwmpState::HwmpState()
+HwmpState::HwmpState():
+	m_myPreq(m_preqQueue.end()),
+	m_preqId(1),
+	m_myDsn(1),
+	m_disabled(false),
+	m_maxTtl(10)
 {
-	m_myPreq = m_preqQueue.end();
-	m_preqId = 1;
-	m_myDsn = 1;
-	m_maxTtl = 10;
-	m_disabled = false;
 }
 void
 HwmpState::SetRequestRouteCallback(
@@ -184,7 +184,7 @@
 	if(preq.GetTtl() == 0)
 		return;
 	//acceptance cretirea:
-	std::map<Mac48Address, uint32_t, addrcmp>::iterator i = m_dsnDatabase.find(preq.GetOriginatorAddress());
+	std::map<Mac48Address, uint32_t, mac48addrComparator>::iterator i = m_dsnDatabase.find(preq.GetOriginatorAddress());
 	if(i == m_dsnDatabase.end())
 	{
 		m_dsnDatabase[preq.GetOriginatorAddress()] = preq.GetOriginatorSeqNumber();
@@ -197,7 +197,7 @@
 		if(i->second == preq.GetOriginatorSeqNumber())
 		{
 			//find metric
-			std::map<Mac48Address, uint32_t, addrcmp>::iterator j = 
+			std::map<Mac48Address, uint32_t, mac48addrComparator>::iterator j = 
 				m_preqMetricDatabase.find(preq.GetOriginatorAddress());
 			NS_ASSERT(j != m_dsnDatabase.end());
 			if(j->second <= preq.GetMetric())
@@ -319,7 +319,7 @@
 	prep.DecrementTtl();
 	prep.IncrementMetric(metric);
 	//acceptance cretirea:
-	std::map<Mac48Address, uint32_t, addrcmp>::iterator i = m_dsnDatabase.find(prep.GetDestinationAddress());
+	std::map<Mac48Address, uint32_t, mac48addrComparator>::iterator i = m_dsnDatabase.find(prep.GetDestinationAddress());
 	if(i == m_dsnDatabase.end())
 	{
 		m_dsnDatabase[prep.GetDestinationAddress()] = prep.GetDestinationSeqNumber();
--- a/src/devices/l2-routing/l2-routing-hwmp/hwmp-state.h	Thu Mar 12 13:39:22 2009 +0300
+++ b/src/devices/l2-routing/l2-routing-hwmp/hwmp-state.h	Fri Mar 13 13:40:43 2009 +0300
@@ -54,9 +54,9 @@
 			 * information
 			 */
 			void	SetRequestRouteCallback(
-					Callback<struct HwmpRtable::LookupResult, const Mac48Address&> cb);
+					Callback<HwmpRtable::LookupResult, const Mac48Address&> cb);
 			void	SetRequestRootPathCallback(
-					Callback<struct HwmpRtable::LookupResult, uint32_t> cb);
+					Callback<HwmpRtable::LookupResult, uint32_t> cb);
 
 			enum InfoType {
 				INFO_PREQ,
@@ -84,9 +84,9 @@
 					Callback<void, INFO> cb
 					);
 			void	SetRetransmittersOfPerrCallback(
-					Callback<std::vector<Mac48Address>, std::vector<struct HwmpRtable::FailedDestination>, uint32_t> cb);
+					Callback<std::vector<Mac48Address>, std::vector<HwmpRtable::FailedDestination>, uint32_t> cb);
 			void	RequestDestination(Mac48Address dest);
-			void	SendPathError(std::vector<struct HwmpRtable::FailedDestination> destinations);
+			void	SendPathError(std::vector<HwmpRtable::FailedDestination> destinations);
 			void	SetAssociatedIfaceId(uint32_t interface);
 			uint32_t
 				GetAssociatedIfaceId();
@@ -144,11 +144,11 @@
 			//HWMP interaction callbacks:
 			Callback<void, INFO>
 					m_routingInfoCallback;
-			Callback<std::vector<Mac48Address>, std::vector<struct HwmpRtable::FailedDestination>, uint32_t>
+			Callback<std::vector<Mac48Address>, std::vector<HwmpRtable::FailedDestination>, uint32_t>
 					m_retransmittersOfPerrCallback;
-			Callback<struct HwmpRtable::LookupResult, const Mac48Address&>
+			Callback<HwmpRtable::LookupResult, const Mac48Address&>
 					m_requestRouteCallback;
-			Callback<struct HwmpRtable::LookupResult, uint32_t>
+			Callback<HwmpRtable::LookupResult, uint32_t>
 					m_requestRootPathCallback;
 			//Mac interaction callbacks:
 			Callback<void, const WifiPreqInformationElement&>
@@ -161,22 +161,9 @@
 			uint32_t	m_preqId;
 			uint32_t	m_myDsn;
 			//Seqno and metric database
-			struct addrcmp
-			{
-				bool operator()(const Mac48Address addr1, Mac48Address addr2) const
-				{
-					uint8_t s1[6], s2[6];
-					addr1.CopyTo(s1);
-					addr2.CopyTo(s2);
-					for(int i = 0; i < 6; i ++)
-						if(s1[i] > s2[i])
-							return true;
-					return false;
-				}
-			};
-			std::map<Mac48Address, uint32_t, addrcmp>
+			std::map<Mac48Address, uint32_t, mac48addrComparator>
 					m_dsnDatabase;
-			std::map<Mac48Address, uint32_t, addrcmp>
+			std::map<Mac48Address, uint32_t, mac48addrComparator>
 					m_preqMetricDatabase;
 			//Disable/enable functionality
 			bool		m_disabled;
--- a/src/devices/l2-routing/l2-routing-hwmp/hwmp.cc	Thu Mar 12 13:39:22 2009 +0300
+++ b/src/devices/l2-routing/l2-routing-hwmp/hwmp.cc	Fri Mar 13 13:40:43 2009 +0300
@@ -156,11 +156,11 @@
                 .AddConstructor<Hwmp>();
 	return tid;
 }
-Hwmp::Hwmp()
+Hwmp::Hwmp():
+	m_rtable(CreateObject<HwmpRtable> ()),
+	m_maxTtl(32),
+	m_broadcastPerr(false)
 {
-	m_maxTtl = 32;
-	m_broadcastPerr = false;
-	m_rtable = CreateObject<HwmpRtable> ();
 }
 
 Hwmp::~Hwmp()
@@ -170,7 +170,7 @@
 void
 Hwmp::DoDispose()
 {
-	for(std::map<Mac48Address, EventId, addrcmp>::iterator i = m_timeoutDatabase.begin(); i != m_timeoutDatabase.end(); i ++)
+	for(std::map<Mac48Address, EventId, mac48addrComparator>::iterator i = m_timeoutDatabase.begin(); i != m_timeoutDatabase.end(); i ++)
 		i->second.Cancel();
 	m_timeoutDatabase.clear();
 	m_seqnoDatabase.clear();
@@ -230,7 +230,7 @@
 		//check seqno!
 		if(destination == Mac48Address::GetBroadcast())
 		{
-			std::map<Mac48Address, uint32_t, addrcmp>::iterator i = m_seqnoDatabase.find(source);
+			std::map<Mac48Address, uint32_t, mac48addrComparator>::iterator i = m_seqnoDatabase.find(source);
 			if(i == m_seqnoDatabase.end())
 				m_seqnoDatabase[source] = tag.GetSeqno();
 			else
@@ -611,7 +611,7 @@
 	L2RoutingProtocol::QueuedPacket retval;
 	retval.pkt = NULL;
 	//Ptr<Packet> in this structure is NULL when queue is empty
-	std::map<Mac48Address, std::queue<QueuedPacket>, addrcmp>:: iterator i = m_rqueue.find(dst);
+	std::map<Mac48Address, std::queue<QueuedPacket>, mac48addrComparator>:: iterator i = m_rqueue.find(dst);
 	if(i == m_rqueue.end())
 		return retval;
 	if((int)m_rqueue[dst].size() == 0)
@@ -651,7 +651,7 @@
 bool
 Hwmp::ShouldSendPreq(Mac48Address dst)
 {
-	std::map<Mac48Address, EventId, addrcmp>::iterator i = m_timeoutDatabase.find(dst);
+	std::map<Mac48Address, EventId, mac48addrComparator>::iterator i = m_timeoutDatabase.find(dst);
 	if(i == m_timeoutDatabase.end())
 	{
 		m_timeoutDatabase[dst] = Simulator::Schedule(
@@ -667,7 +667,7 @@
 	HwmpRtable::LookupResult result = m_rtable->LookupReactive(dst);
 	if(result.retransmitter != Mac48Address::GetBroadcast())
 	{
-		std::map<Mac48Address, EventId, addrcmp>::iterator i = m_timeoutDatabase.find(dst);
+		std::map<Mac48Address, EventId, mac48addrComparator>::iterator i = m_timeoutDatabase.find(dst);
 		NS_ASSERT(i!=  m_timeoutDatabase.end());
 		m_timeoutDatabase.erase(i);
 		return;
@@ -684,7 +684,7 @@
 				break;
 			packet.reply(false, packet.pkt, packet.src, packet.dst, packet.protocol, HwmpRtable::MAX_METRIC);
 		}
-		std::map<Mac48Address, EventId, addrcmp>::iterator i = m_timeoutDatabase.find(dst);
+		std::map<Mac48Address, EventId, mac48addrComparator>::iterator i = m_timeoutDatabase.find(dst);
 		NS_ASSERT(i!=  m_timeoutDatabase.end());
 		m_timeoutDatabase.erase(i);
 		return;
--- a/src/devices/l2-routing/l2-routing-hwmp/hwmp.h	Thu Mar 12 13:39:22 2009 +0300
+++ b/src/devices/l2-routing/l2-routing-hwmp/hwmp.h	Fri Mar 13 13:40:43 2009 +0300
@@ -27,6 +27,7 @@
 #include "ns3/tag.h"
 #include "ns3/object.h"
 #include "ns3/mac48-address.h"
+#include "ns3/mac48-address-comparator.h"
 #include "ns3/l2-routing-protocol.h"
 #include "ns3/packet.h"
 #include "ns3/ptr.h"
@@ -167,24 +168,11 @@
 			//protocol:
 			void		SetMaxQueueSize(int maxPacketsPerDestination);
 			int		m_maxQueueSize;
-			bool		QueuePacket(struct L2RoutingProtocol::QueuedPacket packet);
-			struct		L2RoutingProtocol::QueuedPacket
+			bool		QueuePacket(L2RoutingProtocol::QueuedPacket packet);
+			L2RoutingProtocol::QueuedPacket
 					DequeuePacket(Mac48Address dst);
 			void		SendAllPossiblePackets(Mac48Address dst);
-			struct addrcmp
-			{
-				bool operator()(const Mac48Address addr1, Mac48Address addr2) const
-				{
-					uint8_t s1[6], s2[6];
-					addr1.CopyTo(s1);
-					addr2.CopyTo(s2);
-					for(int i = 0; i < 6; i ++)
-						if(s1[i] > s2[i])
-							return true;
-					return false;
-				}
-			};
-			std::map<Mac48Address, std::queue<struct QueuedPacket> > 
+			std::map<Mac48Address, std::queue<QueuedPacket> > 
 					m_rqueue;
 			//devices and HWMP states:
 			enum DeviceState {
@@ -236,10 +224,10 @@
 			 * \param std::vector<Mac48Address> is
 			 * receivers of PERR
 			 */
-			std::vector<Callback<void,std::vector<struct HwmpRtable::FailedDestination> > >
+			std::vector<Callback<void,std::vector<HwmpRtable::FailedDestination> > >
 					m_pathErrorCallback;
 			void	StartPathErrorProcedure(
-					std::vector<struct HwmpRtable::FailedDestination> destinations,
+					std::vector<HwmpRtable::FailedDestination> destinations,
 					uint32_t port);
 			/**
 			 * \brief HwmpState need to know where to
@@ -249,7 +237,7 @@
 			 */
 			std::vector<Mac48Address>
 					GetRetransmittersForFailedDestinations(
-							std::vector<struct HwmpRtable::FailedDestination> failedDest,
+							std::vector<HwmpRtable::FailedDestination> failedDest,
 							uint32_t port);
 			/**
 			 * \brief Needed by HwmpState to find routes in case
@@ -257,9 +245,9 @@
 			 * better route
 			 * 
 			 */
-			struct	HwmpRtable::LookupResult
+			HwmpRtable::LookupResult
 					RequestRouteForAddress(const Mac48Address& destination);
-			struct	HwmpRtable::LookupResult
+			HwmpRtable::LookupResult
 					RequestRootPathForPort(uint32_t port);
 
 			/**
@@ -271,7 +259,7 @@
 			 * \attention mesh seqno is processed at HWMP
 			 */
 			uint32_t	m_seqno;
-			std::map<Mac48Address, uint32_t, addrcmp>
+			std::map<Mac48Address, uint32_t, mac48addrComparator>
 					m_seqnoDatabase;
 			//Timers:
 			/**
@@ -291,7 +279,7 @@
 			 * Keeps PREQ retry timers for every
 			 * destination
 			 */
-			std::map<Mac48Address, EventId, addrcmp>
+			std::map<Mac48Address, EventId, mac48addrComparator>
 					m_timeoutDatabase;
 			/**
 			 * Configurable parameters:
--- a/src/devices/wifi/mesh-wifi-mac-header.cc	Thu Mar 12 13:39:22 2009 +0300
+++ b/src/devices/wifi/mesh-wifi-mac-header.cc	Fri Mar 13 13:40:43 2009 +0300
@@ -18,8 +18,8 @@
 }
 
 WifiMeshHeader::WifiMeshHeader()
+	:m_meshFlags(0)
 {
-	m_meshFlags = 0;
 }
 
 WifiMeshHeader::~WifiMeshHeader()
--- a/src/devices/wifi/mesh-wifi-mac.h	Thu Mar 12 13:39:22 2009 +0300
+++ b/src/devices/wifi/mesh-wifi-mac.h	Fri Mar 13 13:40:43 2009 +0300
@@ -26,6 +26,7 @@
 #include <stdint.h>
 #include <map>
 #include "ns3/mac48-address.h"
+#include "ns3/mac48-address-comparator.h"
 #include "mgt-headers.h"
 #include "mesh-mgt-headers.h"
 #include "ns3/callback.h"
@@ -375,21 +376,7 @@
 			 * \brief metric calculation parameters
 			 */
 			uint32_t			CalculateMetric(Mac48Address peerAddress);
-			struct addrcmp
-			{
-				bool operator()(const Mac48Address addr1, Mac48Address addr2) const
-				{
-					uint8_t s1[6], s2[6];
-					addr1.CopyTo(s1);
-					addr2.CopyTo(s2);
-					for(int i = 0; i < 6; i ++)
-						if(s1[i] > s2[i])
-							return true;
-					return false;
-				}
-			};
-
-			std::map<Mac48Address, uint32_t, addrcmp>
+			std::map<Mac48Address, uint32_t, mac48addrComparator>
 							m_metricDatabase;
 	};
 
--- a/src/devices/wifi/mesh-wifi-peer-manager.h	Thu Mar 12 13:39:22 2009 +0300
+++ b/src/devices/wifi/mesh-wifi-peer-manager.h	Fri Mar 13 13:40:43 2009 +0300
@@ -269,7 +269,7 @@
       typedef std::map<Mac48Address, std::vector<Ptr<WifiPeerLinkDescriptor> >, std::less<Mac48Address> >
         PeerDescriptorsMap;
     	typedef std::map<Mac48Address, Ptr<MeshWifiMac>,std::less<Mac48Address> > MeshMacMap;
-			typedef std::map<Mac48Address, struct BeaconInfo, std::less<Mac48Address> > BeaconInfoMap;
+			typedef std::map<Mac48Address, BeaconInfo, std::less<Mac48Address> > BeaconInfoMap;
 
 			//Ptr<MeshWifiMac> m_mac;
 			//Maximum peers that may be opened:
--- a/src/devices/wifi/mesh-wifi-perr-information-element.cc	Thu Mar 12 13:39:22 2009 +0300
+++ b/src/devices/wifi/mesh-wifi-perr-information-element.cc	Fri Mar 13 13:40:43 2009 +0300
@@ -46,9 +46,9 @@
 {
 	return GetTypeId();
 }
-WifiPerrInformationElement::WifiPerrInformationElement()
+WifiPerrInformationElement::WifiPerrInformationElement():
+	m_numOfDest(0)
 {
-	m_numOfDest = 0;
 }
 uint8_t
 WifiPerrInformationElement::GetNumOfDest()
@@ -83,7 +83,7 @@
 	length = 0; //to avoid compiler warning in optimized builds
 	for(unsigned int j = 0; j < m_numOfDest; j++)
 	{
-		struct HwmpRtable::FailedDestination unit;
+		HwmpRtable::FailedDestination unit;
 		ReadFrom(i,unit.destination);
 		unit.seqnum = i.ReadNtohU32();
 		m_addressUnits.push_back(unit);
@@ -105,7 +105,7 @@
 }
 
 void
-WifiPerrInformationElement::AddAddressUnit(struct HwmpRtable::FailedDestination unit)
+WifiPerrInformationElement::AddAddressUnit(HwmpRtable::FailedDestination unit)
 {
 	for(unsigned int i = 0; i < m_addressUnits.size(); i ++)
 		if(m_addressUnits[i].destination == unit.destination)
@@ -114,7 +114,7 @@
 	m_numOfDest++;
 }
 
-std::vector<struct HwmpRtable::FailedDestination>
+std::vector<HwmpRtable::FailedDestination>
 WifiPerrInformationElement::GetAddressUnitVector()
 {
 	return m_addressUnits;
@@ -122,7 +122,7 @@
 void
 WifiPerrInformationElement::DeleteAddressUnit(Mac48Address address)
 {
-	for(std::vector<struct HwmpRtable::FailedDestination>::iterator i = m_addressUnits.begin(); i != m_addressUnits.end(); i ++)
+	for(std::vector<HwmpRtable::FailedDestination>::iterator i = m_addressUnits.begin(); i != m_addressUnits.end(); i ++)
 		if((*i).destination == address)
 		{
 			m_numOfDest --;
--- a/src/devices/wifi/mesh-wifi-perr-information-element.h	Thu Mar 12 13:39:22 2009 +0300
+++ b/src/devices/wifi/mesh-wifi-perr-information-element.h	Fri Mar 13 13:40:43 2009 +0300
@@ -51,13 +51,13 @@
 		uint8_t			GetNumOfDest();
 
 		void			AddAddressUnit(struct HwmpRtable::FailedDestination unit);
-		std::vector<struct HwmpRtable::FailedDestination>
+		std::vector<HwmpRtable::FailedDestination>
 					GetAddressUnitVector();
 		void			DeleteAddressUnit(Mac48Address address);
 		void			ResetPerr();
 	private:
 		uint8_t			m_numOfDest;
-		std::vector<struct HwmpRtable::FailedDestination>
+		std::vector<HwmpRtable::FailedDestination>
 					m_addressUnits;
 };
 
--- a/src/devices/wifi/mesh-wifi-prep-information-element.cc	Thu Mar 12 13:39:22 2009 +0300
+++ b/src/devices/wifi/mesh-wifi-prep-information-element.cc	Fri Mar 13 13:40:43 2009 +0300
@@ -49,16 +49,17 @@
 {
 	return GetTypeId();
 }
-WifiPrepInformationElement::WifiPrepInformationElement()
+WifiPrepInformationElement::WifiPrepInformationElement():
+	m_flags(0),
+	m_hopcount(0),
+	m_ttl(0),
+	m_destinationAddress(Mac48Address::GetBroadcast()),
+	m_destSeqNumber(0),
+	m_lifetime(0),
+	m_metric(0),
+	m_originatorAddress(Mac48Address::GetBroadcast()),
+	m_originatorSeqNumber(0)
 {
-	m_flags = 0;
-        m_hopcount = 0;
-	m_ttl = 0;
-	m_destSeqNumber = 0;
-	m_lifetime = 0;
-	m_destinationAddress = Mac48Address::GetBroadcast();
-	m_metric = 0;
-	m_originatorSeqNumber = 0;
 }
 void
 WifiPrepInformationElement::SetFlags(uint8_t flags)
--- a/src/devices/wifi/mesh-wifi-preq-information-element.cc	Thu Mar 12 13:39:22 2009 +0300
+++ b/src/devices/wifi/mesh-wifi-preq-information-element.cc	Fri Mar 13 13:40:43 2009 +0300
@@ -105,18 +105,18 @@
 	return GetTypeId();
 }
 
-WifiPreqInformationElement::WifiPreqInformationElement()
+WifiPreqInformationElement::WifiPreqInformationElement():
+	m_maxSize(32),
+	m_flags(0),
+	m_hopCount(0),
+	m_ttl(0),
+	m_preqId(0),
+	m_originatorAddress(Mac48Address::GetBroadcast()),
+	m_originatorSeqNumber(0),
+	m_lifetime(0),
+	m_metric(0),
+	m_destCount(0)
 {
-	m_flags = 0;
-        m_hopCount = 0;
-	m_ttl = 0;
-	m_preqId = 0;
-	m_lifetime = 0;
-	m_originatorAddress = Mac48Address::GetBroadcast();
-	m_originatorSeqNumber = 0;
-	m_metric = 0;
-	m_destCount = 0;
-	m_maxSize = 32;
 }
 void
 WifiPreqInformationElement::SetUnicastPreq()
--- a/src/devices/wifi/mesh-wifi-preq-information-element.h	Thu Mar 12 13:39:22 2009 +0300
+++ b/src/devices/wifi/mesh-wifi-preq-information-element.h	Fri Mar 13 13:40:43 2009 +0300
@@ -102,10 +102,8 @@
 		void		IncrementMetric(uint32_t metric);
 
 	private:
-		std::vector<Ptr<DestinationAddressUnit> >
-				m_destinations;
 		//how many destinations we support
-		uint8_t	m_maxSize;
+		uint8_t	m_maxSize; //TODO: make as an attrubute
 		//Fields:
 		uint8_t	m_flags;
 		uint8_t	m_hopCount;
@@ -116,6 +114,9 @@
 		uint32_t	m_lifetime;
 		uint32_t	m_metric;
 		uint8_t		m_destCount;
+		std::vector<Ptr<DestinationAddressUnit> >
+				m_destinations;
+
 };
 
 } //namespace ns3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/node/mac48-address-comparator.h	Fri Mar 13 13:40:43 2009 +0300
@@ -0,0 +1,19 @@
+#ifndef MAC48ADDRESS_COMPARATOR
+#define MAC48ADDRESS_COMPARATOR
+#include "ns3/mac48-address.h"
+namespace ns3 {
+struct mac48addrComparator
+			{
+				bool operator()(const Mac48Address addr1, Mac48Address addr2) const
+				{
+					uint8_t s1[6], s2[6];
+					addr1.CopyTo(s1);
+					addr2.CopyTo(s2);
+					for(int i = 0; i < 6; i ++)
+						if(s1[i] > s2[i])
+							return true;
+					return false;
+				}
+			};
+}//namespace ns3
+#endif
--- a/src/node/wscript	Thu Mar 12 13:39:22 2009 +0300
+++ b/src/node/wscript	Fri Mar 13 13:40:43 2009 +0300
@@ -45,6 +45,7 @@
     headers.module = 'node'
     headers.source = [
         'address.h',
+	'mac48-address-comparator.h',
         'mac48-address.h',
         'mac64-address.h',
         'inet-socket-address.h',