netcore-1.0.0: src/Frenetic/NetworkFrames.hs
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