X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Socket%2FProtocols%2FRaw%2FMACAddress.hh;h=cc4a6bad361a95fbd6d0fcd7f50f1f954f0c1995;hb=5443435c4c2b6e4386c5334b5b8358273f2bae93;hp=f8739befaa5f2efc9a0c63c29de217c1e1ded3f6;hpb=25fe79f266e7583750d8e761abec4022d87972b8;p=senf.git diff --git a/Socket/Protocols/Raw/MACAddress.hh b/Socket/Protocols/Raw/MACAddress.hh index f8739be..cc4a6ba 100644 --- a/Socket/Protocols/Raw/MACAddress.hh +++ b/Socket/Protocols/Raw/MACAddress.hh @@ -23,8 +23,8 @@ /** \file \brief MACAddress public header */ -#ifndef HH_MACAddress_ -#define HH_MACAddress_ 1 +#ifndef HH_SENF_Socket_Protocols_Raw_MACAddress_ +#define HH_SENF_Socket_Protocols_Raw_MACAddress_ 1 // Custom includes #include @@ -41,9 +41,36 @@ namespace senf { + class EUI64; + /** \brief Ethernet MAC address - - The Ethernet MAC is modelled as a fixed-size container/sequence of 6 bytes. + + The Ethernet MAC is modelled as a fixed-size container/sequence of 6 bytes. A MACAddress can + be converted from/to the following representations + + + + + + + + + + +
boost::uint64_tsenf::MACAddress(0x112233445566ull)
+ mac.uint64()
std::stringsenf::MACAddress::from_string("11:22:33:44:55:66")
+ senf::str(mac)
raw data
    (6 bytes)
senf::MACAddress::from_data(iterator)
+ mac.begin()
senf::EUI64senf::MACAddress::from_eui64(eui64)
+ senf::EUI64::from_mac(mac)
+ + Since MACAddress is based on \c boost::array, you can access the raw data bytes of the + address using \c begin(), \c end() or \c operator[]: + \code + senf::MACAddress mac (...); + std::vector data; + data.resize(6); + std::copy(mac.begin(), mac.end(), data.begin()); // Copy 6 bytes + \endcode \implementation We awkwardly need to use static named constructors (from_ members) instead of ordinarily overloaded constructors for one simple reason: char * @@ -54,7 +81,7 @@ namespace senf { \ingroup addr_group */ struct MACAddress - : public boost::array, + : public boost::array, public comparable_safe_bool { static MACAddress const Broadcast; ///< The broadcast address @@ -72,14 +99,14 @@ namespace senf { accepted as a delimiter. \throws AddressSyntaxException */ - template + template static MACAddress from_data(InputIterator i); ///< Construct address from raw data /**< Copies the data from \a i into the MAC address. \pre The input range at \a i must have a size of at least 6 elements. */ - static MACAddress from_eui64(boost::uint64_t v); + static MACAddress from_eui64(senf::EUI64 const & eui); ///< Construct address from EUI-64 /**< This constructor takes an EUI-64 value and converts it to a MAC address. This conversion is only possible, if @@ -89,21 +116,27 @@ namespace senf { compatible EUI-64. */ bool local() const; ///< \c true, if address is locally administered - bool multicast() const; ///< \c true, if address is a group/multicast address + bool multicast() const; ///< \c true, if address is a group/multicast address bool broadcast() const; ///< \c true, if address is the broadcast address - bool boolean_test() const; ///< \c true, if address is the zero address + bool boolean_test() const; ///< \c true, if address is not the zero address boost::uint32_t oui() const; ///< Return first 3 bytes of the address boost::uint32_t nic() const; ///< Return last 3 bytes of the address - - boost::uint64_t eui64() const; ///< Build EUI-64 from the MAC address + boost::uint64_t eui64() const; ///< Build EUI-64 from the MAC address + boost::uint64_t uint64() const; ///< Return MAC address as uint64 value }; - /** \brief Write MAC address + /** \brief Output MAC instance as it's string representation \related MACAddress */ std::ostream & operator<<(std::ostream & os, MACAddress const & mac); + /** \brief Try to initialize MACAddress instance from a string representation + sets std::ios::failbit on the stream if an error occurred + \see MACAddress from_string() + \related MACAddress + */ + std::istream & operator>>(std::istream & os, MACAddress & mac); } @@ -113,7 +146,7 @@ namespace senf { //#include "MACAddress.cti" #endif - + // Local Variables: // mode: c++ // fill-column: 100