module Hans.Device.Pcap (pcapOpen, pcapSend, pcapReceiveLoop) where import Prelude (String, IO, Bool(..), const, (.)) import Hans.Layer.Ethernet (EthernetHandle, queueEthernet) import Control.Monad (void) import Data.ByteString.Lazy (ByteString, toStrict) import Network.Pcap (PcapHandle, openLive, loopBS, sendPacketBS) -- | Open device with pcap, will give info about the state, -- Unless the device is up it will throw errors later -- Be sure to use fesh mac, otherwise all might fail. pcapOpen :: String -> IO PcapHandle pcapOpen s = openLive s 1514 True 0 -- | send to deviece pcapSend :: PcapHandle -> ByteString -> IO () pcapSend dev = sendPacketBS dev . toStrict -- | receive from it pcapReceiveLoop :: PcapHandle -> EthernetHandle -> IO () pcapReceiveLoop dev = void . loopBS dev (-1) . const . queueEthernet