module Frenetic.Server ( controller , dynController ) where import Frenetic.Hosts.Nettle import Frenetic.NetCore.Types import Frenetic.Common -- |Starts an OpenFlow controller that runs dynamic NetCore programs. -- -- The controller reads NetCore programs from the given channel. When -- the controller receives a program on the channel, it compiles it and -- reconfigures the network to run it. dynController :: Chan Policy -> Chan (Loc, ByteString) -- ^packets to emit -> IO () dynController = nettleServer -- |Starts an OpenFlow controller that runs a static NetCore program. controller :: Policy -> IO () controller policy = do ch <- newChan writeChan ch policy pktChan <- newChan dynController ch pktChan