module Frenetic.NetworkFrames ( arpReply ) where import Data.Binary import Data.Binary.Get import Data.Binary.Put import Frenetic.Common import Frenetic.NetCore.Types arpReply :: Word48 -> Word32 -> Word48 -> Word32 -> ByteString arpReply srcEth srcIP dstEth dstIP = runPut $ putArpReply srcEth srcIP dstEth dstIP putArpReply :: Word48 -> Word32 -> Word48 -> Word32 -> Put putArpReply srcEth srcIP dstEth dstIP = do putEthPacket srcEth dstEth 0x0806 putWord16be 1 -- ethernet header type putWord16be 0x0800 putWord8 6 -- bytes in MAC address putWord8 4 -- bytes in IP address putWord16be 2 -- reply put srcEth put srcIP put dstEth put dstIP putEthPacket :: Word48 -> Word48 -> Word16 -> Put putEthPacket srcMac dstMac ethType = do put dstMac put srcMac put ethType