nettle-openflow-0.1: src/Nettle/Ethernet/EthernetAddress.hs
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)