module Hans.Device.Loopback where
import Hans.Device.Types
import Hans.Ethernet.Types (Mac(..))
import Hans.Types
import Control.Concurrent.BoundedChan (newBoundedChan)
newLoopbackDevice :: NetworkStack -> IO Device
newLoopbackDevice _ns =
do let noChecksum = ChecksumOffload { coIP4 = True
, coUdp = True
, coTcp = True
, coIcmp4 = True }
let devConfig = defaultDeviceConfig { dcSendQueueLen = 1
, dcTxOffload = noChecksum
, dcRxOffload = noChecksum }
let devName = "lo"
let devMac = Mac 0 0 0 0 0 0
devStats <- newDeviceStats
devSendQueue <- newBoundedChan (dcSendQueueLen devConfig)
return $! Device { devStart = return ()
, devStop = return ()
, devCleanup = return ()
, .. }