module Nettle.Ethernet.EthernetAddress ( -- * Ethernet address EthernetAddress(..) , isReserved -- * Parsers and unparsers , getEthernetAddress , putEthernetAddress ) where import Data.Word import Data.Bits import Data.Binary -- | An Ethernet address consists of 6 bytes. data EthernetAddress = EthernetAddress Word8 Word8 Word8 Word8 Word8 Word8 deriving (Show,Read,Eq,Ord) -- | Parse an Ethernet address from a ByteString getEthernetAddress :: Get EthernetAddress getEthernetAddress = do a1 <- get a2 <- get a3 <- get a4 <- get a5 <- get a6 <- get return $ EthernetAddress a1 a2 a3 a4 a5 a6 -- | Unparse an Ethernet address to a ByteString putEthernetAddress :: EthernetAddress -> Put putEthernetAddress (EthernetAddress a1 a2 a3 a4 a5 a6) = put a1 >> put a2 >> put a3 >> put a4 >> put a5 >> put a6 isReserved :: EthernetAddress -> Bool isReserved (EthernetAddress a1 a2 a3 a4 a5 a6) = a1 == 0x01 && a2 == 0x80 && a3 == 0xc2 && a4 == 0 && ((a5 .&. 0xf0) == 0)