From: g0dil Date: Mon, 26 Apr 2010 09:43:40 +0000 (+0000) Subject: Socket/Protocols/Raw: Allow direct comparison of MACAddress and EUI64 instances X-Git-Url: http://g0dil.de/git?a=commitdiff_plain;h=c74546060360ac6a739a2f2878c72e21e9135390;p=senf.git Socket/Protocols/Raw: Allow direct comparison of MACAddress and EUI64 instances git-svn-id: https://svn.berlios.de/svnroot/repos/senf/trunk@1605 270642c3-0616-0410-b53a-bc976706d245 --- diff --git a/senf/Socket/Protocols/Raw/MACAddress.cci b/senf/Socket/Protocols/Raw/MACAddress.cci index a2ec274..5c73fe2 100644 --- a/senf/Socket/Protocols/Raw/MACAddress.cci +++ b/senf/Socket/Protocols/Raw/MACAddress.cci @@ -26,6 +26,7 @@ // Custom includes #include #include +#include "EUI64.hh" #define prefix_ inline ///////////////////////////////cci.p/////////////////////////////////////// @@ -80,18 +81,18 @@ prefix_ bool senf::MACAddress::boolean_test() prefix_ boost::uint32_t senf::MACAddress::oui() const { - return - (boost::uint32_t((*this)[0])<<16) | - (boost::uint32_t((*this)[1])<<8) | + return + (boost::uint32_t((*this)[0])<<16) | + (boost::uint32_t((*this)[1])<<8) | (*this)[2]; } prefix_ boost::uint32_t senf::MACAddress::nic() const { - return - (boost::uint32_t((*this)[3])<<16) | - (boost::uint32_t((*this)[4])<<8) | + return + (boost::uint32_t((*this)[3])<<16) | + (boost::uint32_t((*this)[4])<<8) | (*this)[5]; } @@ -99,12 +100,12 @@ prefix_ boost::uint64_t senf::MACAddress::eui64() const { return - (boost::uint64_t( (*this)[0] ) << 56) | - (boost::uint64_t( (*this)[1] ) << 48) | - (boost::uint64_t( (*this)[2] ) << 40) | + (boost::uint64_t( (*this)[0] ) << 56) | + (boost::uint64_t( (*this)[1] ) << 48) | + (boost::uint64_t( (*this)[2] ) << 40) | (boost::uint64_t( 0xfffe ) << 24) | - (boost::uint64_t( (*this)[3] ) << 16) | - (boost::uint64_t( (*this)[4] ) << 8) | + (boost::uint64_t( (*this)[3] ) << 16) | + (boost::uint64_t( (*this)[4] ) << 8) | (boost::uint64_t( (*this)[5] ) ); } @@ -112,18 +113,34 @@ prefix_ boost::uint64_t senf::MACAddress::uint64() const { return - (boost::uint64_t( (*this)[0] ) << 40) | - (boost::uint64_t( (*this)[1] ) << 32) | - (boost::uint64_t( (*this)[2] ) << 24) | - (boost::uint64_t( (*this)[3] ) << 16) | - (boost::uint64_t( (*this)[4] ) << 8) | + (boost::uint64_t( (*this)[0] ) << 40) | + (boost::uint64_t( (*this)[1] ) << 32) | + (boost::uint64_t( (*this)[2] ) << 24) | + (boost::uint64_t( (*this)[3] ) << 16) | + (boost::uint64_t( (*this)[4] ) << 8) | (boost::uint64_t( (*this)[5] ) ); } +prefix_ bool senf::operator==(MACAddress const & mac, EUI64 const & eui64) +{ + return eui64.isMACCompatible() + && eui64[0] == mac[0] + && eui64[1] == mac[1] + && eui64[2] == mac[2] + && eui64[5] == mac[3] + && eui64[6] == mac[4] + && eui64[7] == mac[5]; +} + +prefix_ bool senf::operator==(EUI64 const & eui64, MACAddress const & mac) +{ + return mac==eui64; +} + ///////////////////////////////cci.e/////////////////////////////////////// #undef prefix_ - + // Local Variables: // mode: c++ // fill-column: 100 diff --git a/senf/Socket/Protocols/Raw/MACAddress.hh b/senf/Socket/Protocols/Raw/MACAddress.hh index 12b105f..fa99fa0 100644 --- a/senf/Socket/Protocols/Raw/MACAddress.hh +++ b/senf/Socket/Protocols/Raw/MACAddress.hh @@ -137,6 +137,9 @@ namespace senf { */ std::istream & operator>>(std::istream & os, MACAddress & mac); + bool operator==(MACAddress const & mac, EUI64 const & eui64); + bool operator==(EUI64 const & eui64, MACAddress const & mac); + } ///////////////////////////////hh.e//////////////////////////////////////// diff --git a/senf/Socket/Protocols/Raw/MACAddress.test.cc b/senf/Socket/Protocols/Raw/MACAddress.test.cc index fcf9ee1..571d167 100644 --- a/senf/Socket/Protocols/Raw/MACAddress.test.cc +++ b/senf/Socket/Protocols/Raw/MACAddress.test.cc @@ -71,7 +71,7 @@ SENF_AUTO_UNIT_TEST(macAddress) str >> mac; BOOST_CHECK( ! str.fail() ); } - + BOOST_CHECK_EQUAL(mac, MACAddress::from_string(test)); BOOST_CHECK( ! mac.local() ); BOOST_CHECK( mac.multicast() ); @@ -107,12 +107,15 @@ SENF_AUTO_UNIT_TEST(macAddress) AddressSyntaxException ); BOOST_CHECK_EQUAL( MACAddress(0x1a2b3c4d5e6fULL).uint64(), 0x1a2b3c4d5e6fULL); + + BOOST_CHECK_EQUAL( mac, senf::EUI64::from_mac(mac) ); + BOOST_CHECK_EQUAL( senf::EUI64::from_mac(mac), mac ); } ///////////////////////////////cc.e//////////////////////////////////////// #undef prefix_ - + // Local Variables: // mode: c++ // fill-column: 100