This module implements a data structure that can be used to maintain information about the topology of an OpenFlow network. It maintains a graph whose nodes are switches and whose edges are links connect switches and attaching to switches at particular ports.
- type LinkID = ((SwitchID, PortID), (SwitchID, PortID))
- data Topology
- type Weight = Double
- empty :: Topology
- addLink :: LinkID -> Weight -> Topology -> Topology
- adjustLinkWeight :: LinkID -> (Weight -> Weight) -> Topology -> Topology
- deleteLink :: LinkID -> Topology -> Topology
- addSwitch :: SwitchID -> Topology -> Topology
- deleteSwitch :: SwitchID -> Topology -> Topology
- addEdgePort :: SwitchID -> PortID -> Topology -> Topology
- addEdgePorts :: [(SwitchID, PortID)] -> Topology -> Topology
- lookupLink :: Topology -> SwitchID -> PortID -> (LinkID, Weight)
- links :: Topology -> [LinkID]
- lGraph :: Topology -> LabelledGraph SwitchID LinkID
- edgePorts :: Topology -> Set (SwitchID, PortID)
- data ShortestPathMatrix
- shortestPathMatrix :: Topology -> ShortestPathMatrix
- pathBetween :: ShortestPathMatrix -> SwitchID -> SwitchID -> Maybe [LinkID]
- completeTopology :: Int -> Int -> Weight -> Topology
- makeTopology :: Int -> Int -> [(Int, Int, Weight)] -> Topology
Documentation
Construction
deleteLink :: LinkID -> Topology -> TopologySource
deleteSwitch :: SwitchID -> Topology -> TopologySource
Query
Shortest paths
data ShortestPathMatrix Source
pathBetween :: ShortestPathMatrix -> SwitchID -> SwitchID -> Maybe [LinkID]Source