From cd045df1c3a23ca667460fc39d86cba422dcd375 Mon Sep 17 00:00:00 2001 From: Mathieu Lacage Date: Thu, 11 Oct 2007 13:11:45 +0200 Subject: [PATCH] bug 86: add missing functions to manipulate Mac48Address --- src/node/mac48-address.cc | 39 ++++++++++++++++++++++++++++++++++----- src/node/mac48-address.h | 18 ++++++++++++++++++ 2 files changed, 52 insertions(+), 5 deletions(-) diff --git a/src/node/mac48-address.cc b/src/node/mac48-address.cc index c71131342..d366c0ec5 100644 --- a/src/node/mac48-address.cc +++ b/src/node/mac48-address.cc @@ -133,19 +133,48 @@ Mac48Address::GetType (void) return type; } +bool +Mac48Address::IsBroadcast (void) const +{ + return *this == GetBroadcast (); +} +bool +Mac48Address::IsMulticast (void) const +{ + return (m_address[0] & 0x01) == 0x01; +} +Mac48Address +Mac48Address::GetBroadcast (void) +{ + static Mac48Address broadcast = Mac48Address ("ff:ff:ff:ff:ff:ff"); + return broadcast; +} bool operator == (const Mac48Address &a, const Mac48Address &b) { - uint8_t ada[6]; - uint8_t adb[6]; - a.CopyTo (ada); - b.CopyTo (adb); - return memcmp (ada, adb, 6) == 0; + return memcmp (a.m_address, b.m_address, 6) == 0; } bool operator != (const Mac48Address &a, const Mac48Address &b) { return ! (a == b); } +bool operator < (const Mac48Address &a, const Mac48Address &b) +{ + for (uint8_t i = 0; i < 6; i++) + { + if (a.m_address[i] < b.m_address[i]) + { + return true; + } + else if (a.m_address[i] > b.m_address[i]) + { + return false; + } + } + return false; +} + + std::ostream& operator<< (std::ostream& os, const Mac48Address & address) { uint8_t ad[6]; diff --git a/src/node/mac48-address.h b/src/node/mac48-address.h index a0649a5c2..255557e3d 100644 --- a/src/node/mac48-address.h +++ b/src/node/mac48-address.h @@ -79,6 +79,20 @@ public: * Allocate a new Mac48Address. */ static Mac48Address Allocate (void); + + /** + * \returns true if this is a broadcast address, false otherwise. + */ + bool IsBroadcast (void) const; + /** + * \returns true if this is a multicast address, false otherwise. + */ + bool IsMulticast (void) const; + + /** + * \returns the broadcast address + */ + static Mac48Address GetBroadcast (void); private: /** * \returns a new Address instance @@ -87,11 +101,15 @@ private: */ Address ConvertTo (void) const; static uint8_t GetType (void); + friend bool operator < (const Mac48Address &a, const Mac48Address &b); + friend bool operator == (const Mac48Address &a, const Mac48Address &b); + uint8_t m_address[6]; }; bool operator == (const Mac48Address &a, const Mac48Address &b); bool operator != (const Mac48Address &a, const Mac48Address &b); +bool operator < (const Mac48Address &a, const Mac48Address &b); std::ostream& operator<< (std::ostream& os, const Mac48Address & address); } // namespace ns3