mirror of
https://github.com/logos-storage/transport-over-mix.git
synced 2026-07-22 02:20:21 +00:00
54 lines
1.4 KiB
Haskell
54 lines
1.4 KiB
Haskell
|
|
|
||
|
|
-- | Mix simulator
|
||
|
|
|
||
|
|
{-# LANGUAGE StrictData #-}
|
||
|
|
module Simulate.Mix where
|
||
|
|
|
||
|
|
--------------------------------------------------------------------------------
|
||
|
|
|
||
|
|
import Data.Word
|
||
|
|
|
||
|
|
import Simulate.Distributions
|
||
|
|
import Simulate.DiscreteEvents
|
||
|
|
|
||
|
|
--------------------------------------------------------------------------------
|
||
|
|
|
||
|
|
type Address = String
|
||
|
|
|
||
|
|
data NodeType
|
||
|
|
= MixNode
|
||
|
|
| ExternalNode
|
||
|
|
deriving (Eq,Show)
|
||
|
|
|
||
|
|
data CoverTrafficStrategy
|
||
|
|
= NoCoverTraffic
|
||
|
|
| ConstantRateCoverTraffic Double
|
||
|
|
| Poisson
|
||
|
|
deriving (Eq,Show)
|
||
|
|
|
||
|
|
data GlobalConfig = MkGlobCfg
|
||
|
|
{ _numberOfMixNodes :: Int
|
||
|
|
, _numberOfExtNodes :: Int
|
||
|
|
, _meanDelay :: Double
|
||
|
|
, _coverTraffic :: CoverTrafficStrategy
|
||
|
|
, _epochInSeconds :: Int -- ^ epoch time in seconds
|
||
|
|
, _ratePerEpoch :: Int -- ^ max number of messages per epoch
|
||
|
|
, _networkDropRate :: Double -- ^ percentage of packets dropped by the ambient networking layer
|
||
|
|
}
|
||
|
|
deriving (Eq,Show)
|
||
|
|
|
||
|
|
--------------------------------------------------------------------------------
|
||
|
|
|
||
|
|
-- | Globally unique packet id
|
||
|
|
type PacketUID = Word64
|
||
|
|
|
||
|
|
data Event
|
||
|
|
= PacketReceived Address Time PacketUID
|
||
|
|
|
||
|
|
--------------------------------------------------------------------------------
|
||
|
|
|
||
|
|
data ExtNodeCfg
|
||
|
|
= ExtNodePoisson ExpoDistr
|
||
|
|
| ExtNodeSteady LeftTruncGaussDistr
|
||
|
|
deriving Show
|
||
|
|
|