hello message header
authorBorovkova Elena <borovkovaes@iitp.ru>
Tue, 07 Jul 2009 12:07:31 +0400
changeset 5554 4b48d25a6f93
parent 5553 d83d6761dece
child 5555 ba1ce4a9ec24
hello message header
src/routing/aodv/aodv-packet.cc
src/routing/aodv/aodv-packet.h
--- a/src/routing/aodv/aodv-packet.cc	Tue Jul 07 11:27:15 2009 +0400
+++ b/src/routing/aodv/aodv-packet.cc	Tue Jul 07 12:07:31 2009 +0400
@@ -278,6 +278,27 @@
 			rp_lifetime == o.rp_lifetime);
 }
 
+
+void
+RrepHeader::SetHello(Ipv4Address src, uint32_t srcSeqNo)
+{
+	rp_flags = 0;
+	prefixSize = 0;
+	rp_hop_count = 0;
+	rp_dst = src;
+	rp_dst_seqno = srcSeqNo;
+	rp_src = src;
+	rp_lifetime = HELLO_INTERVAL * ALLOWED_HELLO_LOSS;
+}
+
+bool
+RrepHeader::IsHello(Ipv4Address src, uint32_t srcSeqNo)
+{
+	return (rp_flags == 0 && prefixSize == 0 && rp_hop_count == 0 &&
+			rp_dst == src && rp_dst_seqno == srcSeqNo && rp_src == src &&
+			rp_lifetime ==  (HELLO_INTERVAL * ALLOWED_HELLO_LOSS));
+}
+
 std::ostream & operator<<(std::ostream & os, RrepHeader const & h)
 {
   h.Print (os);
@@ -311,6 +332,9 @@
   h.SetPrefixSize(2);
   uint8_t sz = h.GetPrefixSize();
   NS_TEST_ASSERT_EQUAL(2, sz);
+  NS_TEST_ASSERT(!h.IsHello(Ipv4Address("1.2.3.4"),10));
+  h.SetHello(Ipv4Address("1.2.3.4"),12);
+  NS_TEST_ASSERT(h.IsHello(Ipv4Address("1.2.3.4"),12));
 
   Ptr<Packet> p = Create<Packet> ();
   p->AddHeader (h);
@@ -326,31 +350,31 @@
 // RREP-ACK
 //-----------------------------------------------------------------------------
 
-RrepAckHader::RrepAckHader () : reserved(0)
+RrepAckHeader::RrepAckHeader () : reserved(0)
 {
 }
 
 TypeId
-RrepAckHader::GetInstanceTypeId() const
+RrepAckHeader::GetInstanceTypeId() const
 {
 	return TypeId();
 }
 
 uint32_t
-RrepAckHader::GetSerializedSize () const
+RrepAckHeader::GetSerializedSize () const
 {
 	return 2;
 }
 
 void
-RrepAckHader::Serialize (Buffer::Iterator i) const
+RrepAckHeader::Serialize (Buffer::Iterator i) const
 {
 	i.WriteU8(type());
 	i.WriteU8(reserved);
 }
 
 uint32_t
-RrepAckHader::Deserialize (Buffer::Iterator start)
+RrepAckHeader::Deserialize (Buffer::Iterator start)
 {
   Buffer::Iterator i = start;
   uint8_t t = i.ReadU8 ();
@@ -362,18 +386,19 @@
 }
 
 void
-RrepAckHader::Print (std::ostream &os) const
+RrepAckHeader::Print (std::ostream &os) const
 {
 	// TODO
 }
 
+
 bool
-RrepAckHader::operator==(RrepAckHader const & o) const
+RrepAckHeader::operator==(RrepAckHeader const & o) const
 {
 	return reserved == o.reserved;
 }
 
-std::ostream & operator<<(std::ostream & os, RrepAckHader const & h)
+std::ostream & operator<<(std::ostream & os, RrepAckHeader const & h)
 {
 	h.Print(os);
 	return os;
@@ -394,10 +419,10 @@
 {
   bool result(true);
 
-  RrepAckHader h;
+  RrepAckHeader h;
   Ptr<Packet> p = Create<Packet> ();
   p->AddHeader (h);
-  RrepAckHader h2;
+  RrepAckHeader h2;
   uint32_t bytes = p->RemoveHeader(h2);
   NS_TEST_ASSERT_EQUAL (bytes, 2);
   NS_TEST_ASSERT_EQUAL (h, h2);
--- a/src/routing/aodv/aodv-packet.h	Tue Jul 07 11:27:15 2009 +0400
+++ b/src/routing/aodv/aodv-packet.h	Tue Jul 07 12:07:31 2009 +0400
@@ -36,13 +36,15 @@
 /// AODV message types
 enum MessageType 
 {
-  AODVTYPE_HELLO = 0x01,
   AODVTYPE_RREQ  = 0x02,
   AODVTYPE_RREP  = 0x04,
   AODVTYPE_RERR  = 0x08,
   AODVTYPE_RREP_ACK = 0x10
 };
 
+#define HELLO_INTERVAL          1               // 1000 ms
+#define ALLOWED_HELLO_LOSS      3               // packets
+
 /**
  * \ingroup aodv
  * \brief   Route Request (RREQ) Message Format
@@ -172,7 +174,12 @@
   bool GetAckRequired () const;
   void SetPrefixSize(uint8_t sz);
   uint8_t GetPrefixSize() const;
+  //\}
 
+  ///\name Hello massage
+  //\{
+  void SetHello(Ipv4Address src, uint32_t srcSeqNo);
+  bool IsHello(Ipv4Address src, uint32_t srcSeqNo);
   //\}
 
   bool operator==(RrepHeader const & o) const;
@@ -198,10 +205,10 @@
    |     Type      |   Reserved    |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  */
-class RrepAckHader : public Header
+class RrepAckHeader : public Header
 {
 public:
-	RrepAckHader ();
+	RrepAckHeader ();
 
   ///\name Header serialization/deserialization
   //\{
@@ -211,12 +218,12 @@
   uint32_t Deserialize (Buffer::Iterator start);
   void Print (std::ostream &os) const;
   //\}
-  bool operator==(RrepAckHader const & o) const;
+  bool operator==(RrepAckHeader const & o) const;
 private:
    static MessageType type() { return AODVTYPE_RREP_ACK; }
    uint8_t	reserved;
 };
-std::ostream & operator<<(std::ostream & os, RrepAckHader const &);
+std::ostream & operator<<(std::ostream & os, RrepAckHeader const &);
 
 
 /**