finished part of the hosts, topos and configuration next
This commit is contained in:
@@ -14,6 +14,8 @@ option(DOFS_GLOB_SOURCES "Dev: auto-add *.cc files via GLOB (not ideal for CI)"
|
|||||||
add_library(dofs_config INTERFACE)
|
add_library(dofs_config INTERFACE)
|
||||||
target_compile_features(dofs_config INTERFACE cxx_std_20)
|
target_compile_features(dofs_config INTERFACE cxx_std_20)
|
||||||
|
|
||||||
|
target_compile_options(dofs_config INTERFACE -Wall -Wextra -Wpedantic)
|
||||||
|
|
||||||
# Let everyone include headers like: #include "core/error.h"
|
# Let everyone include headers like: #include "core/error.h"
|
||||||
target_include_directories(dofs_config INTERFACE "${PROJECT_SOURCE_DIR}/src")
|
target_include_directories(dofs_config INTERFACE "${PROJECT_SOURCE_DIR}/src")
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
# struct
|
||||||
|
|
||||||
|
## Functions
|
||||||
|
|
||||||
|
### operator()
|
||||||
|
|
||||||
|
*public bool operator()(const Item & a, const Item & b)*
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
9
docs/clang-doc/GlobalNamespace/index.md
Normal file
9
docs/clang-doc/GlobalNamespace/index.md
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
# Global Namespace
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Namespaces
|
||||||
|
|
||||||
|
* [dofs](../dofs/index.md)
|
||||||
|
|
||||||
|
|
||||||
5
docs/clang-doc/all_files.md
Normal file
5
docs/clang-doc/all_files.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
# All Files for DOFS
|
||||||
|
|
||||||
|
## [@nonymous_record_1A6CA7D670A31E6DAC055D6C915DB71801F36C7F](@nonymous_record_1A6CA7D670A31E6DAC055D6C915DB71801F36C7F.md)
|
||||||
|
## [dofs](dofs/index.md)
|
||||||
|
## [GlobalNamespace](GlobalNamespace/index.md)
|
||||||
46
docs/clang-doc/dofs/CongestionControl.md
Normal file
46
docs/clang-doc/dofs/CongestionControl.md
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
# class CongestionControl
|
||||||
|
|
||||||
|
*Defined at src/network/nic/congestion_control.h#11*
|
||||||
|
|
||||||
|
## Members
|
||||||
|
|
||||||
|
protected Bytes _cwnd
|
||||||
|
|
||||||
|
protected Bytes _cwnd_max
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Functions
|
||||||
|
|
||||||
|
### CongestionControl
|
||||||
|
|
||||||
|
*public void CongestionControl(Bytes init_cwnd, Bytes max_cwnd)*
|
||||||
|
|
||||||
|
### update
|
||||||
|
|
||||||
|
*public void update(const Packet & pkt, Time rtt)*
|
||||||
|
|
||||||
|
### is_allowed_to_send
|
||||||
|
|
||||||
|
*public bool is_allowed_to_send(Bytes bytes_outstanding, Bytes next_bytes)*
|
||||||
|
|
||||||
|
### ~CongestionControl
|
||||||
|
|
||||||
|
*public void ~CongestionControl()*
|
||||||
|
|
||||||
|
*Defined at src/network/nic/congestion_control.h#14*
|
||||||
|
|
||||||
|
### cwnd
|
||||||
|
|
||||||
|
*public Bytes cwnd()*
|
||||||
|
|
||||||
|
*Defined at src/network/nic/congestion_control.h#21*
|
||||||
|
|
||||||
|
### cwnd_max
|
||||||
|
|
||||||
|
*public Bytes cwnd_max()*
|
||||||
|
|
||||||
|
*Defined at src/network/nic/congestion_control.h#24*
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
20
docs/clang-doc/dofs/DCQCN.md
Normal file
20
docs/clang-doc/dofs/DCQCN.md
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
# class DCQCN
|
||||||
|
|
||||||
|
*Defined at src/network/nic/congestion_control.h#33*
|
||||||
|
|
||||||
|
Inherits from CongestionControl
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Functions
|
||||||
|
|
||||||
|
### DCQCN
|
||||||
|
|
||||||
|
*public void DCQCN(Bytes init_cwnd, Bytes max_cwnd)*
|
||||||
|
|
||||||
|
### update
|
||||||
|
|
||||||
|
*public void update(const Packet & pkt, Time rtt)*
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
44
docs/clang-doc/dofs/DedicatedBuffer.md
Normal file
44
docs/clang-doc/dofs/DedicatedBuffer.md
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
# class DedicatedBuffer
|
||||||
|
|
||||||
|
*Defined at src/network/switch/dedicated_buffer.h#10*
|
||||||
|
|
||||||
|
Inherits from SwitchBuffer
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Functions
|
||||||
|
|
||||||
|
### DedicatedBuffer
|
||||||
|
|
||||||
|
*public void DedicatedBuffer(Simulator *const sim, NetworkSwitch *const owner, Bytes total_bytes, uint16_t ports)*
|
||||||
|
|
||||||
|
### enqueue_packet
|
||||||
|
|
||||||
|
*public bool enqueue_packet(const Packet & pkt, PortId egress, FlowPriority prio)*
|
||||||
|
|
||||||
|
### drain_one
|
||||||
|
|
||||||
|
*public bool drain_one(PortId port)*
|
||||||
|
|
||||||
|
### queues_for
|
||||||
|
|
||||||
|
*protected std::array<std::deque<Queued>, PRI_COUNT> & queues_for(PortId p)*
|
||||||
|
|
||||||
|
### queues_for
|
||||||
|
|
||||||
|
*protected const std::array<std::deque<Queued>, PRI_COUNT> & queues_for(PortId p)*
|
||||||
|
|
||||||
|
### on_enqueue_cap_check
|
||||||
|
|
||||||
|
*protected bool on_enqueue_cap_check(PortId port, Bytes sz)*
|
||||||
|
|
||||||
|
### on_enqueue_commit
|
||||||
|
|
||||||
|
*protected void on_enqueue_commit(PortId port, Bytes sz)*
|
||||||
|
|
||||||
|
### on_dequeue_commit
|
||||||
|
|
||||||
|
*protected void on_dequeue_commit(PortId port, Bytes sz)*
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
22
docs/clang-doc/dofs/DedicatedREDEngine.md
Normal file
22
docs/clang-doc/dofs/DedicatedREDEngine.md
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# class DedicatedREDEngine
|
||||||
|
|
||||||
|
*Defined at src/network/switch/ecn_dedicated_red.h#13*
|
||||||
|
|
||||||
|
Inherits from ECNEngine
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Functions
|
||||||
|
|
||||||
|
### DedicatedREDEngine
|
||||||
|
|
||||||
|
*public void DedicatedREDEngine(Bytes min_th, Bytes max_th, double p_max, bool back_to_sender, Rng *const rng)*
|
||||||
|
|
||||||
|
*Defined at src/network/switch/ecn_dedicated_red.h#15*
|
||||||
|
|
||||||
|
### process_packet
|
||||||
|
|
||||||
|
*public Packet & process_packet(Packet & pkt, SwitchBuffer * buf)*
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
30
docs/clang-doc/dofs/ECNEngine.md
Normal file
30
docs/clang-doc/dofs/ECNEngine.md
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
# class ECNEngine
|
||||||
|
|
||||||
|
*Defined at src/network/switch/ecn_engine.h#12*
|
||||||
|
|
||||||
|
## Functions
|
||||||
|
|
||||||
|
### maybe_mark_ecn
|
||||||
|
|
||||||
|
*protected void maybe_mark_ecn(Packet & pkt)*
|
||||||
|
|
||||||
|
*Defined at src/network/switch/ecn_engine.h#23*
|
||||||
|
|
||||||
|
### process_packet
|
||||||
|
|
||||||
|
*public Packet & process_packet(Packet & pkt, SwitchBuffer * buf)*
|
||||||
|
|
||||||
|
### ~ECNEngine
|
||||||
|
|
||||||
|
*public void ~ECNEngine()*
|
||||||
|
|
||||||
|
*Defined at src/network/switch/ecn_engine.h#14*
|
||||||
|
|
||||||
|
### header_trim
|
||||||
|
|
||||||
|
*protected void header_trim(Packet & pkt, bool back_to_sender)*
|
||||||
|
|
||||||
|
*Defined at src/network/switch/ecn_engine.h#30*
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
18
docs/clang-doc/dofs/EndSimulationMsg.md
Normal file
18
docs/clang-doc/dofs/EndSimulationMsg.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# struct EndSimulationMsg
|
||||||
|
|
||||||
|
*Defined at src/hosts/mgmt_msg.h#41*
|
||||||
|
|
||||||
|
Inherits from MgmtMsg
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Functions
|
||||||
|
|
||||||
|
### kind
|
||||||
|
|
||||||
|
*public MgmtKind kind()*
|
||||||
|
|
||||||
|
*Defined at src/hosts/mgmt_msg.h#42*
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
34
docs/clang-doc/dofs/HeartbeatMsg.md
Normal file
34
docs/clang-doc/dofs/HeartbeatMsg.md
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
# struct HeartbeatMsg
|
||||||
|
|
||||||
|
*Defined at src/hosts/mgmt_msg.h#16*
|
||||||
|
|
||||||
|
Inherits from MgmtMsg
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Members
|
||||||
|
|
||||||
|
public NodeId subscriber_id
|
||||||
|
|
||||||
|
public NodeStatus status
|
||||||
|
|
||||||
|
public Time generated_at
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Functions
|
||||||
|
|
||||||
|
### HeartbeatMsg
|
||||||
|
|
||||||
|
*public void HeartbeatMsg(NodeId sid, NodeStatus st, Time t)*
|
||||||
|
|
||||||
|
*Defined at src/hosts/mgmt_msg.h#21*
|
||||||
|
|
||||||
|
### kind
|
||||||
|
|
||||||
|
*public MgmtKind kind()*
|
||||||
|
|
||||||
|
*Defined at src/hosts/mgmt_msg.h#24*
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
60
docs/clang-doc/dofs/Host.md
Normal file
60
docs/clang-doc/dofs/Host.md
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
# class Host
|
||||||
|
|
||||||
|
*Defined at src/core/host.h#14*
|
||||||
|
|
||||||
|
Inherits from Node
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Functions
|
||||||
|
|
||||||
|
### Host
|
||||||
|
|
||||||
|
*public void Host(Simulator *const sim, NodeId id)*
|
||||||
|
|
||||||
|
### attach_nic
|
||||||
|
|
||||||
|
*public void attach_nic(NetworkNic * nic)*
|
||||||
|
|
||||||
|
### detach_nic
|
||||||
|
|
||||||
|
*public void detach_nic(NetworkNic * nic)*
|
||||||
|
|
||||||
|
### ~Host
|
||||||
|
|
||||||
|
*public void ~Host()*
|
||||||
|
|
||||||
|
*Defined at src/core/host.h#17*
|
||||||
|
|
||||||
|
### nic
|
||||||
|
|
||||||
|
*public NetworkNic * nic()*
|
||||||
|
|
||||||
|
*Defined at src/core/host.h#20*
|
||||||
|
|
||||||
|
### Host
|
||||||
|
|
||||||
|
*public void Host(const Host & )*
|
||||||
|
|
||||||
|
*Defined at src/core/host.h#39*
|
||||||
|
|
||||||
|
### operator=
|
||||||
|
|
||||||
|
*public Host & operator=(const Host & )*
|
||||||
|
|
||||||
|
*Defined at src/core/host.h#40*
|
||||||
|
|
||||||
|
### recv_flow
|
||||||
|
|
||||||
|
*public void recv_flow(NodeId src, FlowId flow, FlowPriority priority, Bytes flow_size)*
|
||||||
|
|
||||||
|
### recv_frame
|
||||||
|
|
||||||
|
*public void recv_frame(const Packet & frame)*
|
||||||
|
|
||||||
|
### recv_mgmt_msg
|
||||||
|
|
||||||
|
*public void recv_mgmt_msg(std::unique_ptr<struct MgmtMsg> msg)*
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
32
docs/clang-doc/dofs/JobFinishedMsg.md
Normal file
32
docs/clang-doc/dofs/JobFinishedMsg.md
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
# struct JobFinishedMsg
|
||||||
|
|
||||||
|
*Defined at src/hosts/mgmt_msg.h#29*
|
||||||
|
|
||||||
|
Inherits from MgmtMsg
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Members
|
||||||
|
|
||||||
|
public FlowId flow_id
|
||||||
|
|
||||||
|
public Time finished_at
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Functions
|
||||||
|
|
||||||
|
### JobFinishedMsg
|
||||||
|
|
||||||
|
*public void JobFinishedMsg(FlowId fid, Time t)*
|
||||||
|
|
||||||
|
*Defined at src/hosts/mgmt_msg.h#33*
|
||||||
|
|
||||||
|
### kind
|
||||||
|
|
||||||
|
*public MgmtKind kind()*
|
||||||
|
|
||||||
|
*Defined at src/hosts/mgmt_msg.h#36*
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
26
docs/clang-doc/dofs/LBRandomPacketSpraying.md
Normal file
26
docs/clang-doc/dofs/LBRandomPacketSpraying.md
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
# class LBRandomPacketSpraying
|
||||||
|
|
||||||
|
*Defined at src/network/nic/load_balance.h#27*
|
||||||
|
|
||||||
|
Inherits from LoadBalance
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Functions
|
||||||
|
|
||||||
|
### LBRandomPacketSpraying
|
||||||
|
|
||||||
|
*public void LBRandomPacketSpraying(Rng *const rng)*
|
||||||
|
|
||||||
|
*Defined at src/network/nic/load_balance.h#29*
|
||||||
|
|
||||||
|
### update
|
||||||
|
|
||||||
|
*public void update(const Packet & pkt)*
|
||||||
|
|
||||||
|
### get_entropy
|
||||||
|
|
||||||
|
*public uint16_t get_entropy(const Packet & context)*
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
96
docs/clang-doc/dofs/Link.md
Normal file
96
docs/clang-doc/dofs/Link.md
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
# class Link
|
||||||
|
|
||||||
|
*Defined at src/network/link.h#27*
|
||||||
|
|
||||||
|
## Records
|
||||||
|
|
||||||
|
Reservation
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Functions
|
||||||
|
|
||||||
|
### Link
|
||||||
|
|
||||||
|
*public void Link(Simulator *const sim, LinkId id, NetworkNode * a, PortId a_port, NetworkNode * b, PortId b_port, Time latency, double bandwidth_gbps)*
|
||||||
|
|
||||||
|
### send_pkt
|
||||||
|
|
||||||
|
*public void send_pkt(Packet & pkt, NodeId caller)*
|
||||||
|
|
||||||
|
### schedule_delivery_after
|
||||||
|
|
||||||
|
*public void schedule_delivery_after(Packet & pkt, NodeId caller, Time after)*
|
||||||
|
|
||||||
|
### next_available
|
||||||
|
|
||||||
|
*public Time next_available(NodeId sender)*
|
||||||
|
|
||||||
|
### reserve
|
||||||
|
|
||||||
|
*public std::optional<Reservation> reserve(Bytes bytes, NodeId sender)*
|
||||||
|
|
||||||
|
### serialization_time
|
||||||
|
|
||||||
|
*public Time serialization_time(Bytes bytes)*
|
||||||
|
|
||||||
|
*Defined at src/network/link.h#49*
|
||||||
|
|
||||||
|
### propagation_latency
|
||||||
|
|
||||||
|
*public Time propagation_latency()*
|
||||||
|
|
||||||
|
*Defined at src/network/link.h#53*
|
||||||
|
|
||||||
|
### id
|
||||||
|
|
||||||
|
*public LinkId id()*
|
||||||
|
|
||||||
|
*Defined at src/network/link.h#57*
|
||||||
|
|
||||||
|
### status
|
||||||
|
|
||||||
|
*public LinkStatus status()*
|
||||||
|
|
||||||
|
*Defined at src/network/link.h#60*
|
||||||
|
|
||||||
|
### bandwidth_gbps
|
||||||
|
|
||||||
|
*public double bandwidth_gbps()*
|
||||||
|
|
||||||
|
*Defined at src/network/link.h#63*
|
||||||
|
|
||||||
|
### src_id
|
||||||
|
|
||||||
|
*public NodeId src_id()*
|
||||||
|
|
||||||
|
*Defined at src/network/link.h#68*
|
||||||
|
|
||||||
|
### dst_id
|
||||||
|
|
||||||
|
*public NodeId dst_id()*
|
||||||
|
|
||||||
|
*Defined at src/network/link.h#71*
|
||||||
|
|
||||||
|
### src_port
|
||||||
|
|
||||||
|
*public PortId src_port()*
|
||||||
|
|
||||||
|
*Defined at src/network/link.h#74*
|
||||||
|
|
||||||
|
### dst_port
|
||||||
|
|
||||||
|
*public PortId dst_port()*
|
||||||
|
|
||||||
|
*Defined at src/network/link.h#77*
|
||||||
|
|
||||||
|
### set_status
|
||||||
|
|
||||||
|
*public void set_status(LinkStatus s, Time new_latency, double new_bandwidth_gbps)*
|
||||||
|
|
||||||
|
### serialization_time
|
||||||
|
|
||||||
|
*public Time serialization_time(Bytes bytes, double gbps)*
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
12
docs/clang-doc/dofs/Link/Reservation.md
Normal file
12
docs/clang-doc/dofs/Link/Reservation.md
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
# struct Reservation
|
||||||
|
|
||||||
|
*Defined at src/network/link.h#29*
|
||||||
|
|
||||||
|
## Members
|
||||||
|
|
||||||
|
public Time start
|
||||||
|
|
||||||
|
public Time finish
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
34
docs/clang-doc/dofs/LoadBalance.md
Normal file
34
docs/clang-doc/dofs/LoadBalance.md
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
# class LoadBalance
|
||||||
|
|
||||||
|
*Defined at src/network/nic/load_balance.h#12*
|
||||||
|
|
||||||
|
## Members
|
||||||
|
|
||||||
|
protected Rng *const _rng
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Functions
|
||||||
|
|
||||||
|
### LoadBalance
|
||||||
|
|
||||||
|
*public void LoadBalance(Rng *const rng)*
|
||||||
|
|
||||||
|
*Defined at src/network/nic/load_balance.h#14*
|
||||||
|
|
||||||
|
### update
|
||||||
|
|
||||||
|
*public void update(const Packet & pkt)*
|
||||||
|
|
||||||
|
### get_entropy
|
||||||
|
|
||||||
|
*public uint16_t get_entropy(const Packet & context)*
|
||||||
|
|
||||||
|
### ~LoadBalance
|
||||||
|
|
||||||
|
*public void ~LoadBalance()*
|
||||||
|
|
||||||
|
*Defined at src/network/nic/load_balance.h#15*
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
64
docs/clang-doc/dofs/Logger.md
Normal file
64
docs/clang-doc/dofs/Logger.md
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
# class Logger
|
||||||
|
|
||||||
|
*Defined at src/core/logger.h#19*
|
||||||
|
|
||||||
|
## Functions
|
||||||
|
|
||||||
|
### Logger
|
||||||
|
|
||||||
|
*public void Logger(std::string_view path, bool append)*
|
||||||
|
|
||||||
|
### Logger
|
||||||
|
|
||||||
|
*public void Logger(const Logger & )*
|
||||||
|
|
||||||
|
*Defined at src/core/logger.h#24*
|
||||||
|
|
||||||
|
### operator=
|
||||||
|
|
||||||
|
*public Logger & operator=(const Logger & )*
|
||||||
|
|
||||||
|
*Defined at src/core/logger.h#25*
|
||||||
|
|
||||||
|
### Logger
|
||||||
|
|
||||||
|
*public void Logger(Logger && )*
|
||||||
|
|
||||||
|
*Defined at src/core/logger.h#26*
|
||||||
|
|
||||||
|
### operator=
|
||||||
|
|
||||||
|
*public Logger & operator=(Logger && )*
|
||||||
|
|
||||||
|
*Defined at src/core/logger.h#27*
|
||||||
|
|
||||||
|
### is_open
|
||||||
|
|
||||||
|
*public bool is_open()*
|
||||||
|
|
||||||
|
*Defined at src/core/logger.h#29*
|
||||||
|
|
||||||
|
### ~Logger
|
||||||
|
|
||||||
|
*public void ~Logger()*
|
||||||
|
|
||||||
|
### write_line
|
||||||
|
|
||||||
|
*public void write_line(std::string_view line)*
|
||||||
|
|
||||||
|
### flush
|
||||||
|
|
||||||
|
*public void flush()*
|
||||||
|
|
||||||
|
### close
|
||||||
|
|
||||||
|
*public void close()*
|
||||||
|
|
||||||
|
### path
|
||||||
|
|
||||||
|
*public std::string_view path()*
|
||||||
|
|
||||||
|
*Defined at src/core/logger.h#38*
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
20
docs/clang-doc/dofs/McTree.md
Normal file
20
docs/clang-doc/dofs/McTree.md
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
# struct McTree
|
||||||
|
|
||||||
|
*Defined at src/network/switch/multicast_table.h#14*
|
||||||
|
|
||||||
|
## Members
|
||||||
|
|
||||||
|
public vector child_ports
|
||||||
|
|
||||||
|
public optional parent_port
|
||||||
|
|
||||||
|
public uint8_t weight
|
||||||
|
|
||||||
|
public uint8_t tier
|
||||||
|
|
||||||
|
public uint16_t tree_id
|
||||||
|
|
||||||
|
public uint8_t epoch
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
18
docs/clang-doc/dofs/MgmtMsg.md
Normal file
18
docs/clang-doc/dofs/MgmtMsg.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# struct MgmtMsg
|
||||||
|
|
||||||
|
*Defined at src/hosts/mgmt_msg.h#11*
|
||||||
|
|
||||||
|
## Functions
|
||||||
|
|
||||||
|
### kind
|
||||||
|
|
||||||
|
*public MgmtKind kind()*
|
||||||
|
|
||||||
|
### ~MgmtMsg
|
||||||
|
|
||||||
|
*public void ~MgmtMsg()*
|
||||||
|
|
||||||
|
*Defined at src/hosts/mgmt_msg.h#12*
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
52
docs/clang-doc/dofs/MulticastTable.md
Normal file
52
docs/clang-doc/dofs/MulticastTable.md
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
# class MulticastTable
|
||||||
|
|
||||||
|
*Defined at src/network/switch/multicast_table.h#23*
|
||||||
|
|
||||||
|
## Functions
|
||||||
|
|
||||||
|
### MulticastTable
|
||||||
|
|
||||||
|
*public void MulticastTable()*
|
||||||
|
|
||||||
|
### add_tree
|
||||||
|
|
||||||
|
*public bool add_tree(std::size_t group_id, uint16_t tree_id)*
|
||||||
|
|
||||||
|
### delete_tree
|
||||||
|
|
||||||
|
*public bool delete_tree(std::size_t group_id, uint16_t tree_id)*
|
||||||
|
|
||||||
|
### add_child_port
|
||||||
|
|
||||||
|
*public bool add_child_port(std::size_t group_id, uint16_t tree_id, PortId out_port)*
|
||||||
|
|
||||||
|
### delete_child_port
|
||||||
|
|
||||||
|
*public bool delete_child_port(std::size_t group_id, uint16_t tree_id, PortId out_port)*
|
||||||
|
|
||||||
|
### set_parent
|
||||||
|
|
||||||
|
*public bool set_parent(std::size_t group_id, uint16_t tree_id, PortId parent)*
|
||||||
|
|
||||||
|
### set_weight
|
||||||
|
|
||||||
|
*public bool set_weight(std::size_t group_id, uint16_t tree_id, uint8_t w)*
|
||||||
|
|
||||||
|
### set_epoch
|
||||||
|
|
||||||
|
*public bool set_epoch(std::size_t group_id, uint16_t tree_id, uint8_t epoch)*
|
||||||
|
|
||||||
|
### trees_of
|
||||||
|
|
||||||
|
*public const std::vector<McTree> * trees_of(std::size_t group_id)*
|
||||||
|
|
||||||
|
### group_count
|
||||||
|
|
||||||
|
*public std::size_t group_count()*
|
||||||
|
|
||||||
|
### get_port_list
|
||||||
|
|
||||||
|
*public std::vector<PortId> get_port_list(PacketGroups groups)*
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
20
docs/clang-doc/dofs/NSCC.md
Normal file
20
docs/clang-doc/dofs/NSCC.md
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
# class NSCC
|
||||||
|
|
||||||
|
*Defined at src/network/nic/congestion_control.h#39*
|
||||||
|
|
||||||
|
Inherits from CongestionControl
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Functions
|
||||||
|
|
||||||
|
### NSCC
|
||||||
|
|
||||||
|
*public void NSCC(Bytes init_cwnd, Bytes max_cwnd)*
|
||||||
|
|
||||||
|
### update
|
||||||
|
|
||||||
|
*public void update(const Packet & pkt, Time rtt)*
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
54
docs/clang-doc/dofs/NetworkNic.md
Normal file
54
docs/clang-doc/dofs/NetworkNic.md
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
# class NetworkNic
|
||||||
|
|
||||||
|
*Defined at src/network/network_nic.h#31*
|
||||||
|
|
||||||
|
Inherits from NetworkNode
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Functions
|
||||||
|
|
||||||
|
### NetworkNic
|
||||||
|
|
||||||
|
*public void NetworkNic(Simulator *const sim, NodeId id, uint16_t total_ports, SwitchBuffer *const buf, Time nic_latency, Bytes mice_elephant_threshold, PacketSeq ooo_threshold, CCType cc_type, LBType lb_type, Bytes cc_init_cwnd, Bytes cc_max_cwnd, const NicSchedulingWeights & schedw)*
|
||||||
|
|
||||||
|
### recv_pkt
|
||||||
|
|
||||||
|
*public void recv_pkt(Packet & pkt, PortId ingress)*
|
||||||
|
|
||||||
|
### attach_host
|
||||||
|
|
||||||
|
*public void attach_host(Host * host)*
|
||||||
|
|
||||||
|
### detach_host
|
||||||
|
|
||||||
|
*public void detach_host(Host * host)*
|
||||||
|
|
||||||
|
### send_flow
|
||||||
|
|
||||||
|
*public void send_flow(NodeId dst, Bytes size, FlowPriority desired)*
|
||||||
|
|
||||||
|
### send_flow
|
||||||
|
|
||||||
|
*public void send_flow(PacketGroups group_mask, Bytes size, FlowPriority desired)*
|
||||||
|
|
||||||
|
### set_status
|
||||||
|
|
||||||
|
*public void set_status(NodeStatus s, Time new_latency)*
|
||||||
|
|
||||||
|
### set_port_blacklisted
|
||||||
|
|
||||||
|
*public void set_port_blacklisted(PortId port, bool blacklisted)*
|
||||||
|
|
||||||
|
### is_port_blacklisted
|
||||||
|
|
||||||
|
*public bool is_port_blacklisted(PortId port)*
|
||||||
|
|
||||||
|
### telemetry
|
||||||
|
|
||||||
|
*public const NicTelemetry & telemetry()*
|
||||||
|
|
||||||
|
*Defined at src/network/network_nic.h#59*
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
26
docs/clang-doc/dofs/NetworkNode.md
Normal file
26
docs/clang-doc/dofs/NetworkNode.md
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
# class NetworkNode
|
||||||
|
|
||||||
|
*Defined at src/network/network_node.h#12*
|
||||||
|
|
||||||
|
Inherits from Node
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Functions
|
||||||
|
|
||||||
|
### NetworkNode
|
||||||
|
|
||||||
|
*public void NetworkNode(Simulator *const sim, NodeId id, NodeType type)*
|
||||||
|
|
||||||
|
### recv_pkt
|
||||||
|
|
||||||
|
*public void recv_pkt(Packet & pkt, PortId ingress)*
|
||||||
|
|
||||||
|
### ~NetworkNode
|
||||||
|
|
||||||
|
*public void ~NetworkNode()*
|
||||||
|
|
||||||
|
*Defined at src/network/network_node.h#17*
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
36
docs/clang-doc/dofs/NetworkSwitch.md
Normal file
36
docs/clang-doc/dofs/NetworkSwitch.md
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
# class NetworkSwitch
|
||||||
|
|
||||||
|
*Defined at src/network/network_switch.h#19*
|
||||||
|
|
||||||
|
Inherits from NetworkNode
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Functions
|
||||||
|
|
||||||
|
### NetworkSwitch
|
||||||
|
|
||||||
|
*public void NetworkSwitch(Simulator *const sim, NodeId id, uint16_t total_ports, ECNEngine *const ecn, SwitchBuffer *const buf, const RoutingTables *const rt, Time forwarding_latency, Time multicast_dup_delay)*
|
||||||
|
|
||||||
|
### get_status
|
||||||
|
|
||||||
|
*public NodeStatus get_status()*
|
||||||
|
|
||||||
|
*Defined at src/network/network_switch.h#38*
|
||||||
|
|
||||||
|
### port_cnt
|
||||||
|
|
||||||
|
*public uint16_t port_cnt()*
|
||||||
|
|
||||||
|
*Defined at src/network/network_switch.h#42*
|
||||||
|
|
||||||
|
### recv_pkt
|
||||||
|
|
||||||
|
*public void recv_pkt(Packet & pkt, PortId ingress)*
|
||||||
|
|
||||||
|
### set_status
|
||||||
|
|
||||||
|
*public void set_status(NodeStatus s, Time new_forward_latency)*
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
16
docs/clang-doc/dofs/NicSchedulingWeights.md
Normal file
16
docs/clang-doc/dofs/NicSchedulingWeights.md
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
# struct NicSchedulingWeights
|
||||||
|
|
||||||
|
*Defined at src/network/network_nic.h#23*
|
||||||
|
|
||||||
|
## Members
|
||||||
|
|
||||||
|
public Bytes control
|
||||||
|
|
||||||
|
public Bytes retrans
|
||||||
|
|
||||||
|
public Bytes mice
|
||||||
|
|
||||||
|
public Bytes elephant
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
32
docs/clang-doc/dofs/NicTelemetry.md
Normal file
32
docs/clang-doc/dofs/NicTelemetry.md
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
# struct NicTelemetry
|
||||||
|
|
||||||
|
*Defined at src/network/nic/nic_telemetry.h#8*
|
||||||
|
|
||||||
|
## Members
|
||||||
|
|
||||||
|
public std::uint64_t rx_acks
|
||||||
|
|
||||||
|
public std::uint64_t rx_nacks
|
||||||
|
|
||||||
|
public std::uint64_t rx_trims
|
||||||
|
|
||||||
|
public std::uint64_t rx_data
|
||||||
|
|
||||||
|
public std::uint64_t tx_acks
|
||||||
|
|
||||||
|
public std::uint64_t tx_nacks
|
||||||
|
|
||||||
|
public std::uint64_t tx_trims
|
||||||
|
|
||||||
|
public std::uint64_t tx_data
|
||||||
|
|
||||||
|
public std::uint64_t retrans
|
||||||
|
|
||||||
|
public std::uint64_t timeouts
|
||||||
|
|
||||||
|
public std::uint64_t cc_updates
|
||||||
|
|
||||||
|
public std::uint64_t lb_updates
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
66
docs/clang-doc/dofs/Node.md
Normal file
66
docs/clang-doc/dofs/Node.md
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
# class Node
|
||||||
|
|
||||||
|
*Defined at src/core/node.h#12*
|
||||||
|
|
||||||
|
## Members
|
||||||
|
|
||||||
|
protected Simulator *const _sim
|
||||||
|
|
||||||
|
protected NodeId _id
|
||||||
|
|
||||||
|
protected NodeStatus _status
|
||||||
|
|
||||||
|
protected NodeType _type
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Functions
|
||||||
|
|
||||||
|
### Node
|
||||||
|
|
||||||
|
*public void Node(Simulator *const sim, NodeId id, NodeType type)*
|
||||||
|
|
||||||
|
### id
|
||||||
|
|
||||||
|
*public NodeId id()*
|
||||||
|
|
||||||
|
### status
|
||||||
|
|
||||||
|
*public NodeStatus status()*
|
||||||
|
|
||||||
|
### type
|
||||||
|
|
||||||
|
*public NodeType type()*
|
||||||
|
|
||||||
|
### set_status
|
||||||
|
|
||||||
|
*public void set_status(NodeStatus s)*
|
||||||
|
|
||||||
|
### boot
|
||||||
|
|
||||||
|
*public void boot(Time boottime_ns)*
|
||||||
|
|
||||||
|
### reboot
|
||||||
|
|
||||||
|
*public void reboot(Time boottime_ns)*
|
||||||
|
|
||||||
|
### ~Node
|
||||||
|
|
||||||
|
*public void ~Node()*
|
||||||
|
|
||||||
|
*Defined at src/core/node.h#15*
|
||||||
|
|
||||||
|
### Node
|
||||||
|
|
||||||
|
*public void Node(const Node & )*
|
||||||
|
|
||||||
|
*Defined at src/core/node.h#26*
|
||||||
|
|
||||||
|
### operator=
|
||||||
|
|
||||||
|
*public Node & operator=(const Node & )*
|
||||||
|
|
||||||
|
*Defined at src/core/node.h#27*
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
136
docs/clang-doc/dofs/Packet.md
Normal file
136
docs/clang-doc/dofs/Packet.md
Normal file
@@ -0,0 +1,136 @@
|
|||||||
|
# class Packet
|
||||||
|
|
||||||
|
*Defined at src/network/packet.h#18*
|
||||||
|
|
||||||
|
## Functions
|
||||||
|
|
||||||
|
### Packet
|
||||||
|
|
||||||
|
*public void Packet(NodeId src_node, PortId src_port, NodeId dst_node, PortId dst_port, PacketProtocol proto, FlowPriority prio, PacketSeq seq, FlowId flow, uint16_t entropy, uint8_t notifications, Bytes payload_bytes)*
|
||||||
|
|
||||||
|
### src_node
|
||||||
|
|
||||||
|
*public NodeId src_node()*
|
||||||
|
|
||||||
|
### src_port
|
||||||
|
|
||||||
|
*public PortId src_port()*
|
||||||
|
|
||||||
|
### dst_node
|
||||||
|
|
||||||
|
*public NodeId dst_node()*
|
||||||
|
|
||||||
|
### dst_port
|
||||||
|
|
||||||
|
*public PortId dst_port()*
|
||||||
|
|
||||||
|
### protocol
|
||||||
|
|
||||||
|
*public PacketProtocol protocol()*
|
||||||
|
|
||||||
|
### seq
|
||||||
|
|
||||||
|
*public PacketSeq seq()*
|
||||||
|
|
||||||
|
### flow_id
|
||||||
|
|
||||||
|
*public FlowId flow_id()*
|
||||||
|
|
||||||
|
### entropy
|
||||||
|
|
||||||
|
*public uint32_t entropy()*
|
||||||
|
|
||||||
|
### set_src_node
|
||||||
|
|
||||||
|
*public void set_src_node(NodeId n)*
|
||||||
|
|
||||||
|
### set_src_port
|
||||||
|
|
||||||
|
*public void set_src_port(PortId p)*
|
||||||
|
|
||||||
|
### set_dst_node
|
||||||
|
|
||||||
|
*public void set_dst_node(NodeId n)*
|
||||||
|
|
||||||
|
### set_dst_port
|
||||||
|
|
||||||
|
*public void set_dst_port(PortId p)*
|
||||||
|
|
||||||
|
### set_seq
|
||||||
|
|
||||||
|
*public void set_seq(PacketSeq s)*
|
||||||
|
|
||||||
|
### set_flow_id
|
||||||
|
|
||||||
|
*public void set_flow_id(FlowId f)*
|
||||||
|
|
||||||
|
### set_entropy
|
||||||
|
|
||||||
|
*public void set_entropy(uint32_t e)*
|
||||||
|
|
||||||
|
### set_protocol
|
||||||
|
|
||||||
|
*public void set_protocol(PacketProtocol p)*
|
||||||
|
|
||||||
|
### set_payload_size
|
||||||
|
|
||||||
|
*public void set_payload_size(Bytes size)*
|
||||||
|
|
||||||
|
### set_ecn_enabled
|
||||||
|
|
||||||
|
*public void set_ecn_enabled(bool v)*
|
||||||
|
|
||||||
|
### set_ecn_marked
|
||||||
|
|
||||||
|
*public void set_ecn_marked(bool v)*
|
||||||
|
|
||||||
|
### set_eof
|
||||||
|
|
||||||
|
*public void set_eof(bool v)*
|
||||||
|
|
||||||
|
### is_ecn_enabled
|
||||||
|
|
||||||
|
*public bool is_ecn_enabled()*
|
||||||
|
|
||||||
|
### is_ecn
|
||||||
|
|
||||||
|
*public bool is_ecn()*
|
||||||
|
|
||||||
|
### is_eof
|
||||||
|
|
||||||
|
*public bool is_eof()*
|
||||||
|
|
||||||
|
### priority
|
||||||
|
|
||||||
|
*public FlowPriority priority()*
|
||||||
|
|
||||||
|
### priority_raw
|
||||||
|
|
||||||
|
*public uint8_t priority_raw()*
|
||||||
|
|
||||||
|
### header_size
|
||||||
|
|
||||||
|
*public Bytes header_size()*
|
||||||
|
|
||||||
|
### payload_size
|
||||||
|
|
||||||
|
*public Bytes payload_size()*
|
||||||
|
|
||||||
|
### total_size
|
||||||
|
|
||||||
|
*public Bytes total_size()*
|
||||||
|
|
||||||
|
### groups
|
||||||
|
|
||||||
|
*public PacketGroups groups()*
|
||||||
|
|
||||||
|
### set_groups
|
||||||
|
|
||||||
|
*public void set_groups(PacketGroups g)*
|
||||||
|
|
||||||
|
### add_groups
|
||||||
|
|
||||||
|
*public void add_groups(PacketGroups gmask)*
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
18
docs/clang-doc/dofs/PubBasePolicy.md
Normal file
18
docs/clang-doc/dofs/PubBasePolicy.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# struct PubBasePolicy
|
||||||
|
|
||||||
|
*Defined at src/hosts/policies.h#13*
|
||||||
|
|
||||||
|
## Functions
|
||||||
|
|
||||||
|
### select_multicast_groups
|
||||||
|
|
||||||
|
*public PacketGroups select_multicast_groups(PacketGroups update_groups_mask)*
|
||||||
|
|
||||||
|
### ~PubBasePolicy
|
||||||
|
|
||||||
|
*public void ~PubBasePolicy()*
|
||||||
|
|
||||||
|
*Defined at src/hosts/policies.h#14*
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
30
docs/clang-doc/dofs/PubRRPolicy.md
Normal file
30
docs/clang-doc/dofs/PubRRPolicy.md
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
# class PubRRPolicy
|
||||||
|
|
||||||
|
*Defined at src/hosts/policies.h#20*
|
||||||
|
|
||||||
|
Inherits from PubBasePolicy
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Records
|
||||||
|
|
||||||
|
ReplicaRange
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Functions
|
||||||
|
|
||||||
|
### PubRRPolicy
|
||||||
|
|
||||||
|
*public void PubRRPolicy(std::vector<ReplicaRange> ranges)*
|
||||||
|
|
||||||
|
*Defined at src/hosts/policies.h#28*
|
||||||
|
|
||||||
|
### select_multicast_groups
|
||||||
|
|
||||||
|
*public PacketGroups select_multicast_groups(PacketGroups update_groups_mask)*
|
||||||
|
|
||||||
|
*Defined at src/hosts/policies.h#33*
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
14
docs/clang-doc/dofs/PubRRPolicy/ReplicaRange.md
Normal file
14
docs/clang-doc/dofs/PubRRPolicy/ReplicaRange.md
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
# struct ReplicaRange
|
||||||
|
|
||||||
|
*Defined at src/hosts/policies.h#22*
|
||||||
|
|
||||||
|
## Members
|
||||||
|
|
||||||
|
public uint32_t update_group
|
||||||
|
|
||||||
|
public uint8_t low_bit
|
||||||
|
|
||||||
|
public uint8_t high_bit
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
48
docs/clang-doc/dofs/Publisher.md
Normal file
48
docs/clang-doc/dofs/Publisher.md
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
# class Publisher
|
||||||
|
|
||||||
|
*Defined at src/hosts/publisher.h#17*
|
||||||
|
|
||||||
|
Inherits from Host
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Functions
|
||||||
|
|
||||||
|
### Publisher
|
||||||
|
|
||||||
|
*public void Publisher(Simulator * sim, NodeId id, Time update_latency_base, std::unique_ptr<PubBasePolicy> policy, Time mgmt_latency)*
|
||||||
|
|
||||||
|
### recv_update
|
||||||
|
|
||||||
|
*public void recv_update(Bytes size, PacketGroups update_groups_mask)*
|
||||||
|
|
||||||
|
### set_status
|
||||||
|
|
||||||
|
*public void set_status(NodeStatus s, Time new_latency)*
|
||||||
|
|
||||||
|
### recv_mgmt_msg
|
||||||
|
|
||||||
|
*public void recv_mgmt_msg(MgmtMsgPtr msg)*
|
||||||
|
|
||||||
|
### recv_flow
|
||||||
|
|
||||||
|
*public void recv_flow(NodeId src, FlowId flow, FlowPriority prio, Bytes flow_size)*
|
||||||
|
|
||||||
|
### recv_frame
|
||||||
|
|
||||||
|
*public void recv_frame(const Packet & frame)*
|
||||||
|
|
||||||
|
### updates_in
|
||||||
|
|
||||||
|
*public uint64_t updates_in()*
|
||||||
|
|
||||||
|
*Defined at src/hosts/publisher.h#40*
|
||||||
|
|
||||||
|
### bytes_out
|
||||||
|
|
||||||
|
*public uint64_t bytes_out()*
|
||||||
|
|
||||||
|
*Defined at src/hosts/publisher.h#43*
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
62
docs/clang-doc/dofs/Rng.md
Normal file
62
docs/clang-doc/dofs/Rng.md
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
# class Rng
|
||||||
|
|
||||||
|
*Defined at src/core/rng.h#14*
|
||||||
|
|
||||||
|
## Functions
|
||||||
|
|
||||||
|
### Rng
|
||||||
|
|
||||||
|
*public void Rng(seed_type seed)*
|
||||||
|
|
||||||
|
*Defined at src/core/rng.h#19*
|
||||||
|
|
||||||
|
### seed
|
||||||
|
|
||||||
|
*public void seed(seed_type s)*
|
||||||
|
|
||||||
|
*Defined at src/core/rng.h#22*
|
||||||
|
|
||||||
|
### uniform01
|
||||||
|
|
||||||
|
*public double uniform01()*
|
||||||
|
|
||||||
|
*Defined at src/core/rng.h#27*
|
||||||
|
|
||||||
|
### uniform_range
|
||||||
|
|
||||||
|
*public Int uniform_range(Int lo_inclusive, Int hi_exclusive)*
|
||||||
|
|
||||||
|
*Defined at src/core/rng.h#34*
|
||||||
|
|
||||||
|
### uniform_range
|
||||||
|
|
||||||
|
*public Int uniform_range(Int hi_exclusive)*
|
||||||
|
|
||||||
|
*Defined at src/core/rng.h#41*
|
||||||
|
|
||||||
|
### uniform_range
|
||||||
|
|
||||||
|
*public double uniform_range(double lo_inclusive, double hi_exclusive)*
|
||||||
|
|
||||||
|
*Defined at src/core/rng.h#45*
|
||||||
|
|
||||||
|
### poisson
|
||||||
|
|
||||||
|
*public std::uint64_t poisson(double lambda)*
|
||||||
|
|
||||||
|
*Defined at src/core/rng.h#50*
|
||||||
|
|
||||||
|
### choose_weighted
|
||||||
|
|
||||||
|
*public T choose_weighted(const std::vector<std::pair<double, T>> & items)*
|
||||||
|
|
||||||
|
*Defined at src/core/rng.h#56*
|
||||||
|
|
||||||
|
### choose_weighted
|
||||||
|
|
||||||
|
*public T choose_weighted(std::initializer_list<std::pair<double, T>> items)*
|
||||||
|
|
||||||
|
*Defined at src/core/rng.h#61*
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
12
docs/clang-doc/dofs/RoutingTables.md
Normal file
12
docs/clang-doc/dofs/RoutingTables.md
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
# struct RoutingTables
|
||||||
|
|
||||||
|
*Defined at src/network/switch/routing_tables.h#9*
|
||||||
|
|
||||||
|
## Members
|
||||||
|
|
||||||
|
public UnicastTable unicast
|
||||||
|
|
||||||
|
public MulticastTable multicast
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
44
docs/clang-doc/dofs/SharedBuffer.md
Normal file
44
docs/clang-doc/dofs/SharedBuffer.md
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
# class SharedBuffer
|
||||||
|
|
||||||
|
*Defined at src/network/switch/shared_buffer.h#10*
|
||||||
|
|
||||||
|
Inherits from SwitchBuffer
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Functions
|
||||||
|
|
||||||
|
### SharedBuffer
|
||||||
|
|
||||||
|
*public void SharedBuffer(Simulator *const sim, NetworkSwitch *const owner, Bytes total_bytes, uint16_t ports)*
|
||||||
|
|
||||||
|
### enqueue_packet
|
||||||
|
|
||||||
|
*public bool enqueue_packet(const Packet & pkt, PortId egress, FlowPriority prio)*
|
||||||
|
|
||||||
|
### drain_one
|
||||||
|
|
||||||
|
*public bool drain_one(PortId port)*
|
||||||
|
|
||||||
|
### queues_for
|
||||||
|
|
||||||
|
*protected std::array<std::deque<Queued>, PRI_COUNT> & queues_for(PortId p)*
|
||||||
|
|
||||||
|
### queues_for
|
||||||
|
|
||||||
|
*protected const std::array<std::deque<Queued>, PRI_COUNT> & queues_for(PortId p)*
|
||||||
|
|
||||||
|
### on_enqueue_cap_check
|
||||||
|
|
||||||
|
*protected bool on_enqueue_cap_check(PortId port, Bytes sz)*
|
||||||
|
|
||||||
|
### on_enqueue_commit
|
||||||
|
|
||||||
|
*protected void on_enqueue_commit(PortId port, Bytes sz)*
|
||||||
|
|
||||||
|
### on_dequeue_commit
|
||||||
|
|
||||||
|
*protected void on_dequeue_commit(PortId port, Bytes sz)*
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
22
docs/clang-doc/dofs/SharedREDEngine.md
Normal file
22
docs/clang-doc/dofs/SharedREDEngine.md
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# class SharedREDEngine
|
||||||
|
|
||||||
|
*Defined at src/network/switch/ecn_shared_red.h#18*
|
||||||
|
|
||||||
|
Inherits from ECNEngine
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Functions
|
||||||
|
|
||||||
|
### SharedREDEngine
|
||||||
|
|
||||||
|
*public void SharedREDEngine(Rng *const rng)*
|
||||||
|
|
||||||
|
*Defined at src/network/switch/ecn_shared_red.h#20*
|
||||||
|
|
||||||
|
### process_packet
|
||||||
|
|
||||||
|
*public Packet & process_packet(Packet & pkt, SwitchBuffer * buf)*
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
88
docs/clang-doc/dofs/Simulator.md
Normal file
88
docs/clang-doc/dofs/Simulator.md
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
# class Simulator
|
||||||
|
|
||||||
|
*Defined at src/core/simulator.h#34*
|
||||||
|
|
||||||
|
## Functions
|
||||||
|
|
||||||
|
### Simulator
|
||||||
|
|
||||||
|
*public void Simulator()*
|
||||||
|
|
||||||
|
*Defined at src/core/simulator.h#58*
|
||||||
|
|
||||||
|
### create_simulator
|
||||||
|
|
||||||
|
*public std::pair<InstanceId, Simulator *> create_simulator(InstanceId id)*
|
||||||
|
|
||||||
|
### get_simulator
|
||||||
|
|
||||||
|
*public Simulator * get_simulator(InstanceId id)*
|
||||||
|
|
||||||
|
### is_locked
|
||||||
|
|
||||||
|
*public bool is_locked()*
|
||||||
|
|
||||||
|
*Defined at src/core/simulator.h#96*
|
||||||
|
|
||||||
|
### now
|
||||||
|
|
||||||
|
*public Time now()*
|
||||||
|
|
||||||
|
### cancel
|
||||||
|
|
||||||
|
*public bool cancel(EventId id)*
|
||||||
|
|
||||||
|
### run_next
|
||||||
|
|
||||||
|
*public bool run_next()*
|
||||||
|
|
||||||
|
### run_until
|
||||||
|
|
||||||
|
*public void run_until(Time end_time)*
|
||||||
|
|
||||||
|
### lock
|
||||||
|
|
||||||
|
*public void lock()*
|
||||||
|
|
||||||
|
### flush_after
|
||||||
|
|
||||||
|
*public void flush_after(Time grace)*
|
||||||
|
|
||||||
|
### create_rng
|
||||||
|
|
||||||
|
*public Rng * create_rng(std::uint64_t seed)*
|
||||||
|
|
||||||
|
### get_rng
|
||||||
|
|
||||||
|
*public Rng * get_rng()*
|
||||||
|
|
||||||
|
### get_rng
|
||||||
|
|
||||||
|
*public const Rng * get_rng()*
|
||||||
|
|
||||||
|
### create_link
|
||||||
|
|
||||||
|
*public std::pair<LinkId, Link *> create_link(NetworkNode * a, PortId a_port, NetworkNode * b, PortId b_port, Time latency, double bandwidth_gbps)*
|
||||||
|
|
||||||
|
### get_link
|
||||||
|
|
||||||
|
*public Link * get_link(LinkId id)*
|
||||||
|
|
||||||
|
### get_link
|
||||||
|
|
||||||
|
*public const Link * get_link(LinkId id)*
|
||||||
|
|
||||||
|
### schedule_at
|
||||||
|
|
||||||
|
*public EventId schedule_at(Time abs_time, F && f, Args &&... args)*
|
||||||
|
|
||||||
|
*Defined at src/core/simulator.h#66*
|
||||||
|
|
||||||
|
### schedule_after
|
||||||
|
|
||||||
|
*public EventId schedule_after(Time delay, F && f, Args &&... args)*
|
||||||
|
|
||||||
|
*Defined at src/core/simulator.h#84*
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
14
docs/clang-doc/dofs/SubBasePolicy.md
Normal file
14
docs/clang-doc/dofs/SubBasePolicy.md
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
# struct SubBasePolicy
|
||||||
|
|
||||||
|
*Defined at src/hosts/policies.h#76*
|
||||||
|
|
||||||
|
## Functions
|
||||||
|
|
||||||
|
### ~SubBasePolicy
|
||||||
|
|
||||||
|
*public void ~SubBasePolicy()*
|
||||||
|
|
||||||
|
*Defined at src/hosts/policies.h#77*
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
18
docs/clang-doc/dofs/SubDummyPolicy.md
Normal file
18
docs/clang-doc/dofs/SubDummyPolicy.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# struct SubDummyPolicy
|
||||||
|
|
||||||
|
*Defined at src/hosts/policies.h#80*
|
||||||
|
|
||||||
|
Inherits from SubBasePolicy
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Functions
|
||||||
|
|
||||||
|
### ~SubDummyPolicy
|
||||||
|
|
||||||
|
*public void ~SubDummyPolicy()*
|
||||||
|
|
||||||
|
*Defined at src/hosts/policies.h#81*
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
38
docs/clang-doc/dofs/Subscriber.md
Normal file
38
docs/clang-doc/dofs/Subscriber.md
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
# class Subscriber
|
||||||
|
|
||||||
|
*Defined at src/hosts/subscriber.h#15*
|
||||||
|
|
||||||
|
Inherits from Host
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Functions
|
||||||
|
|
||||||
|
### Subscriber
|
||||||
|
|
||||||
|
*public void Subscriber(Simulator * sim, NodeId id, Publisher * publisher, std::unique_ptr<SubBasePolicy> policy, Time mgmt_latency, Time heartbeat_period)*
|
||||||
|
|
||||||
|
### recv_mgmt_msg
|
||||||
|
|
||||||
|
*public void recv_mgmt_msg(MgmtMsgPtr msg)*
|
||||||
|
|
||||||
|
### recv_flow
|
||||||
|
|
||||||
|
*public void recv_flow(NodeId src, FlowId flow, FlowPriority prio, Bytes flow_size)*
|
||||||
|
|
||||||
|
### recv_frame
|
||||||
|
|
||||||
|
*public void recv_frame(const Packet & frame)*
|
||||||
|
|
||||||
|
### set_publisher
|
||||||
|
|
||||||
|
*public void set_publisher(Publisher * p)*
|
||||||
|
|
||||||
|
*Defined at src/hosts/subscriber.h#35*
|
||||||
|
|
||||||
|
### set_status
|
||||||
|
|
||||||
|
*public void set_status(NodeStatus s)*
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
168
docs/clang-doc/dofs/SwitchBuffer.md
Normal file
168
docs/clang-doc/dofs/SwitchBuffer.md
Normal file
@@ -0,0 +1,168 @@
|
|||||||
|
# class SwitchBuffer
|
||||||
|
|
||||||
|
*Defined at src/network/switch/switch_buffer.h#22*
|
||||||
|
|
||||||
|
## Members
|
||||||
|
|
||||||
|
protected Simulator *const _sim
|
||||||
|
|
||||||
|
protected NetworkSwitch *const _owner
|
||||||
|
|
||||||
|
protected SwitchBufferType _type
|
||||||
|
|
||||||
|
protected Bytes _buffer_bytes
|
||||||
|
|
||||||
|
protected uint16_t _port_cnt
|
||||||
|
|
||||||
|
protected vector _egress_links
|
||||||
|
|
||||||
|
protected vector _drain_scheduled
|
||||||
|
|
||||||
|
protected vector _per_port_bytes
|
||||||
|
|
||||||
|
protected vector _sched
|
||||||
|
|
||||||
|
protected uint8_t _share_ctrl
|
||||||
|
|
||||||
|
protected uint8_t _share_mice
|
||||||
|
|
||||||
|
protected uint8_t _share_ele
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Records
|
||||||
|
|
||||||
|
PerPortSched
|
||||||
|
|
||||||
|
Queued
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Functions
|
||||||
|
|
||||||
|
### enqueue_packet
|
||||||
|
|
||||||
|
*public bool enqueue_packet(const Packet & pkt, PortId egress, FlowPriority prio)*
|
||||||
|
|
||||||
|
### drain_one
|
||||||
|
|
||||||
|
*public bool drain_one(PortId port)*
|
||||||
|
|
||||||
|
### buffer_size
|
||||||
|
|
||||||
|
*public Bytes buffer_size()*
|
||||||
|
|
||||||
|
### type
|
||||||
|
|
||||||
|
*public SwitchBufferType type()*
|
||||||
|
|
||||||
|
### port_cnt
|
||||||
|
|
||||||
|
*public uint16_t port_cnt()*
|
||||||
|
|
||||||
|
### port_buffered
|
||||||
|
|
||||||
|
*public Bytes port_buffered(PortId p)*
|
||||||
|
|
||||||
|
### ports_buffered
|
||||||
|
|
||||||
|
*public const std::vector<Bytes> & ports_buffered()*
|
||||||
|
|
||||||
|
### share_ctrl
|
||||||
|
|
||||||
|
*public uint8_t share_ctrl()*
|
||||||
|
|
||||||
|
### share_mice
|
||||||
|
|
||||||
|
*public uint8_t share_mice()*
|
||||||
|
|
||||||
|
### share_elephant
|
||||||
|
|
||||||
|
*public uint8_t share_elephant()*
|
||||||
|
|
||||||
|
### set_share_ctrl
|
||||||
|
|
||||||
|
*public void set_share_ctrl(uint8_t pct)*
|
||||||
|
|
||||||
|
### set_share_mice
|
||||||
|
|
||||||
|
*public void set_share_mice(uint8_t pct)*
|
||||||
|
|
||||||
|
### set_share_elephant
|
||||||
|
|
||||||
|
*public void set_share_elephant(uint8_t pct)*
|
||||||
|
|
||||||
|
### simulator
|
||||||
|
|
||||||
|
*public const Simulator * simulator()*
|
||||||
|
|
||||||
|
### owner
|
||||||
|
|
||||||
|
*public const NetworkSwitch * owner()*
|
||||||
|
|
||||||
|
### set_egress_links
|
||||||
|
|
||||||
|
*public void set_egress_links(const std::vector<Link *> & links)*
|
||||||
|
|
||||||
|
### SwitchBuffer
|
||||||
|
|
||||||
|
*protected void SwitchBuffer(Simulator *const sim, NetworkSwitch *const owner, SwitchBufferType t, Bytes total_bytes, uint16_t ports)*
|
||||||
|
|
||||||
|
### drain_one_common
|
||||||
|
|
||||||
|
*protected bool drain_one_common(PortId port)*
|
||||||
|
|
||||||
|
### schedule_drain_if_needed
|
||||||
|
|
||||||
|
*protected void schedule_drain_if_needed(PortId port)*
|
||||||
|
|
||||||
|
### drain_once
|
||||||
|
|
||||||
|
*protected void drain_once(PortId port)*
|
||||||
|
|
||||||
|
### queues_for
|
||||||
|
|
||||||
|
*protected std::array<std::deque<Queued>, PRI_COUNT> & queues_for(PortId p)*
|
||||||
|
|
||||||
|
### queues_for
|
||||||
|
|
||||||
|
*protected const std::array<std::deque<Queued>, PRI_COUNT> & queues_for(PortId p)*
|
||||||
|
|
||||||
|
### on_enqueue_cap_check
|
||||||
|
|
||||||
|
*protected bool on_enqueue_cap_check(PortId port, Bytes sz)*
|
||||||
|
|
||||||
|
### on_enqueue_commit
|
||||||
|
|
||||||
|
*protected void on_enqueue_commit(PortId port, Bytes sz)*
|
||||||
|
|
||||||
|
### on_dequeue_commit
|
||||||
|
|
||||||
|
*protected void on_dequeue_commit(PortId port, Bytes sz)*
|
||||||
|
|
||||||
|
### ~SwitchBuffer
|
||||||
|
|
||||||
|
*public void ~SwitchBuffer()*
|
||||||
|
|
||||||
|
*Defined at src/network/switch/switch_buffer.h#32*
|
||||||
|
|
||||||
|
### to_idx
|
||||||
|
|
||||||
|
*protected int to_idx(FlowPriority p)*
|
||||||
|
|
||||||
|
*Defined at src/network/switch/switch_buffer.h#83*
|
||||||
|
|
||||||
|
### try_reserve_and_send
|
||||||
|
|
||||||
|
*protected std::optional<Time> try_reserve_and_send(PortId port, Queued & q)*
|
||||||
|
|
||||||
|
### queued_bytes_total
|
||||||
|
|
||||||
|
*protected Bytes queued_bytes_total()*
|
||||||
|
|
||||||
|
### queued_bytes_port
|
||||||
|
|
||||||
|
*protected Bytes queued_bytes_port(PortId p)*
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
12
docs/clang-doc/dofs/SwitchBuffer/PerPortSched.md
Normal file
12
docs/clang-doc/dofs/SwitchBuffer/PerPortSched.md
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
# struct PerPortSched
|
||||||
|
|
||||||
|
*Defined at src/network/switch/switch_buffer.h#104*
|
||||||
|
|
||||||
|
## Members
|
||||||
|
|
||||||
|
public array deficit_bytes
|
||||||
|
|
||||||
|
public int next_pick
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
18
docs/clang-doc/dofs/SwitchBuffer/Queued.md
Normal file
18
docs/clang-doc/dofs/SwitchBuffer/Queued.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# struct Queued
|
||||||
|
|
||||||
|
*Defined at src/network/switch/switch_buffer.h#24*
|
||||||
|
|
||||||
|
## Members
|
||||||
|
|
||||||
|
public Packet pkt
|
||||||
|
|
||||||
|
public PortId egress
|
||||||
|
|
||||||
|
public FlowPriority prio
|
||||||
|
|
||||||
|
public Time enq_time
|
||||||
|
|
||||||
|
public Bytes size_bytes
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
86
docs/clang-doc/dofs/Time.md
Normal file
86
docs/clang-doc/dofs/Time.md
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
# class Time
|
||||||
|
|
||||||
|
*Defined at src/core/time.h#9*
|
||||||
|
|
||||||
|
## Functions
|
||||||
|
|
||||||
|
### Time
|
||||||
|
|
||||||
|
*public void Time()*
|
||||||
|
|
||||||
|
*Defined at src/core/time.h#14*
|
||||||
|
|
||||||
|
### Time
|
||||||
|
|
||||||
|
*public void Time(rep ns)*
|
||||||
|
|
||||||
|
*Defined at src/core/time.h#15*
|
||||||
|
|
||||||
|
### from_ns
|
||||||
|
|
||||||
|
*public Time from_ns(rep ns)*
|
||||||
|
|
||||||
|
*Defined at src/core/time.h#18*
|
||||||
|
|
||||||
|
### from_us
|
||||||
|
|
||||||
|
*public Time from_us(rep us)*
|
||||||
|
|
||||||
|
*Defined at src/core/time.h#21*
|
||||||
|
|
||||||
|
### from_ms
|
||||||
|
|
||||||
|
*public Time from_ms(rep ms)*
|
||||||
|
|
||||||
|
*Defined at src/core/time.h#24*
|
||||||
|
|
||||||
|
### from_s
|
||||||
|
|
||||||
|
*public Time from_s(rep s)*
|
||||||
|
|
||||||
|
*Defined at src/core/time.h#27*
|
||||||
|
|
||||||
|
### ns
|
||||||
|
|
||||||
|
*public rep ns()*
|
||||||
|
|
||||||
|
*Defined at src/core/time.h#32*
|
||||||
|
|
||||||
|
### count
|
||||||
|
|
||||||
|
*public rep count()*
|
||||||
|
|
||||||
|
*Defined at src/core/time.h#35*
|
||||||
|
|
||||||
|
### us_to_ns
|
||||||
|
|
||||||
|
*public rep us_to_ns(rep us)*
|
||||||
|
|
||||||
|
*Defined at src/core/time.h#40*
|
||||||
|
|
||||||
|
### ms_to_ns
|
||||||
|
|
||||||
|
*public rep ms_to_ns(rep ms)*
|
||||||
|
|
||||||
|
*Defined at src/core/time.h#43*
|
||||||
|
|
||||||
|
### operator+=
|
||||||
|
|
||||||
|
*public Time & operator+=(Time rhs)*
|
||||||
|
|
||||||
|
*Defined at src/core/time.h#73*
|
||||||
|
|
||||||
|
### operator-=
|
||||||
|
|
||||||
|
*public Time & operator-=(Time rhs)*
|
||||||
|
|
||||||
|
*Defined at src/core/time.h#77*
|
||||||
|
|
||||||
|
### unsafe_sub
|
||||||
|
|
||||||
|
*public Time unsafe_sub(Time t)*
|
||||||
|
|
||||||
|
*Defined at src/core/time.h#106*
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
38
docs/clang-doc/dofs/Timer.md
Normal file
38
docs/clang-doc/dofs/Timer.md
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
# class Timer
|
||||||
|
|
||||||
|
*Defined at src/core/timer.h#9*
|
||||||
|
|
||||||
|
## Functions
|
||||||
|
|
||||||
|
### Timer
|
||||||
|
|
||||||
|
*public void Timer()*
|
||||||
|
|
||||||
|
*Defined at src/core/timer.h#11*
|
||||||
|
|
||||||
|
### init
|
||||||
|
|
||||||
|
*public void init()*
|
||||||
|
|
||||||
|
*Defined at src/core/timer.h#15*
|
||||||
|
|
||||||
|
### start
|
||||||
|
|
||||||
|
*public Time start()*
|
||||||
|
|
||||||
|
*Defined at src/core/timer.h#19*
|
||||||
|
|
||||||
|
### now
|
||||||
|
|
||||||
|
*public Time now()*
|
||||||
|
|
||||||
|
*Defined at src/core/timer.h#29*
|
||||||
|
|
||||||
|
### elapsed
|
||||||
|
|
||||||
|
*public Time elapsed()*
|
||||||
|
|
||||||
|
*Defined at src/core/timer.h#39*
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
26
docs/clang-doc/dofs/UnicastTable.md
Normal file
26
docs/clang-doc/dofs/UnicastTable.md
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
# class UnicastTable
|
||||||
|
|
||||||
|
*Defined at src/network/switch/unicast_table.h#13*
|
||||||
|
|
||||||
|
## Functions
|
||||||
|
|
||||||
|
### UnicastTable
|
||||||
|
|
||||||
|
*public void UnicastTable()*
|
||||||
|
|
||||||
|
*Defined at src/network/switch/unicast_table.h#15*
|
||||||
|
|
||||||
|
### get_port_list
|
||||||
|
|
||||||
|
*public std::vector<PortId> get_port_list(NodeId dst_node, PortId dst_port)*
|
||||||
|
|
||||||
|
### add_entry
|
||||||
|
|
||||||
|
*public bool add_entry(NodeId dst_node, PortId dst_port, PortId out_port)*
|
||||||
|
|
||||||
|
### delete_entry
|
||||||
|
|
||||||
|
*public bool delete_entry(NodeId dst_node, PortId dst_port, PortId out_port)*
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
274
docs/clang-doc/dofs/index.md
Normal file
274
docs/clang-doc/dofs/index.md
Normal file
@@ -0,0 +1,274 @@
|
|||||||
|
# namespace dofs
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Records
|
||||||
|
|
||||||
|
* [CongestionControl](CongestionControl.md)
|
||||||
|
* [DCQCN](DCQCN.md)
|
||||||
|
* [DedicatedBuffer](DedicatedBuffer.md)
|
||||||
|
* [DedicatedREDEngine](DedicatedREDEngine.md)
|
||||||
|
* [ECNEngine](ECNEngine.md)
|
||||||
|
* [EndSimulationMsg](EndSimulationMsg.md)
|
||||||
|
* [HeartbeatMsg](HeartbeatMsg.md)
|
||||||
|
* [Host](Host.md)
|
||||||
|
* [JobFinishedMsg](JobFinishedMsg.md)
|
||||||
|
* [LBRandomPacketSpraying](LBRandomPacketSpraying.md)
|
||||||
|
* [Link](Link.md)
|
||||||
|
* [LoadBalance](LoadBalance.md)
|
||||||
|
* [Logger](Logger.md)
|
||||||
|
* [McTree](McTree.md)
|
||||||
|
* [MgmtMsg](MgmtMsg.md)
|
||||||
|
* [MulticastTable](MulticastTable.md)
|
||||||
|
* [NSCC](NSCC.md)
|
||||||
|
* [NetworkNic](NetworkNic.md)
|
||||||
|
* [NetworkNode](NetworkNode.md)
|
||||||
|
* [NetworkSwitch](NetworkSwitch.md)
|
||||||
|
* [NicSchedulingWeights](NicSchedulingWeights.md)
|
||||||
|
* [NicTelemetry](NicTelemetry.md)
|
||||||
|
* [Node](Node.md)
|
||||||
|
* [Packet](Packet.md)
|
||||||
|
* [PubBasePolicy](PubBasePolicy.md)
|
||||||
|
* [PubRRPolicy](PubRRPolicy.md)
|
||||||
|
* [Publisher](Publisher.md)
|
||||||
|
* [Rng](Rng.md)
|
||||||
|
* [RoutingTables](RoutingTables.md)
|
||||||
|
* [SharedBuffer](SharedBuffer.md)
|
||||||
|
* [SharedREDEngine](SharedREDEngine.md)
|
||||||
|
* [Simulator](Simulator.md)
|
||||||
|
* [SubBasePolicy](SubBasePolicy.md)
|
||||||
|
* [SubDummyPolicy](SubDummyPolicy.md)
|
||||||
|
* [Subscriber](Subscriber.md)
|
||||||
|
* [SwitchBuffer](SwitchBuffer.md)
|
||||||
|
* [Time](Time.md)
|
||||||
|
* [Timer](Timer.md)
|
||||||
|
* [UnicastTable](UnicastTable.md)
|
||||||
|
|
||||||
|
|
||||||
|
## Functions
|
||||||
|
|
||||||
|
### show
|
||||||
|
|
||||||
|
*T && show(std::string_view name, T && value)*
|
||||||
|
|
||||||
|
*Defined at src/core/error.h#21*
|
||||||
|
|
||||||
|
### eval_and_show
|
||||||
|
|
||||||
|
*T && eval_and_show(std::string_view expr, T && value)*
|
||||||
|
|
||||||
|
*Defined at src/core/error.h#28*
|
||||||
|
|
||||||
|
### hash_ecmp
|
||||||
|
|
||||||
|
*PortId hash_ecmp(NodeId src_node, PortId src_port, NodeId dst_node, PortId dst_port, uint32_t differentiator, uint16_t port_count)*
|
||||||
|
|
||||||
|
### error_mutex
|
||||||
|
|
||||||
|
*std::mutex & error_mutex()*
|
||||||
|
|
||||||
|
### hash_ecmp
|
||||||
|
|
||||||
|
*PortId hash_ecmp(NodeId src_node, NodeId dst_node, uint32_t differentiator, uint16_t port_count)*
|
||||||
|
|
||||||
|
*Defined at src/network/switch/routing_alg.h#15*
|
||||||
|
|
||||||
|
### ipv4
|
||||||
|
|
||||||
|
*IPv4Addr ipv4(NodeId n, PortId p)*
|
||||||
|
|
||||||
|
*Defined at src/core/types.h#31*
|
||||||
|
|
||||||
|
### log_error
|
||||||
|
|
||||||
|
*void log_error(std::string_view type, std::string_view message, std::optional<uint64_t> timestamp)*
|
||||||
|
|
||||||
|
### operator==
|
||||||
|
|
||||||
|
*bool operator==(Time a, Time b)*
|
||||||
|
|
||||||
|
*Defined at src/core/time.h#48*
|
||||||
|
|
||||||
|
### operator!=
|
||||||
|
|
||||||
|
*bool operator!=(Time a, Time b)*
|
||||||
|
|
||||||
|
*Defined at src/core/time.h#52*
|
||||||
|
|
||||||
|
### operator<
|
||||||
|
|
||||||
|
*bool operator<(Time a, Time b)*
|
||||||
|
|
||||||
|
*Defined at src/core/time.h#56*
|
||||||
|
|
||||||
|
### operator>
|
||||||
|
|
||||||
|
*bool operator>(Time a, Time b)*
|
||||||
|
|
||||||
|
*Defined at src/core/time.h#60*
|
||||||
|
|
||||||
|
### operator<=
|
||||||
|
|
||||||
|
*bool operator<=(Time a, Time b)*
|
||||||
|
|
||||||
|
*Defined at src/core/time.h#64*
|
||||||
|
|
||||||
|
### operator>=
|
||||||
|
|
||||||
|
*bool operator>=(Time a, Time b)*
|
||||||
|
|
||||||
|
*Defined at src/core/time.h#68*
|
||||||
|
|
||||||
|
### operator+
|
||||||
|
|
||||||
|
*Time operator+(Time a, Time b)*
|
||||||
|
|
||||||
|
*Defined at src/core/time.h#86*
|
||||||
|
|
||||||
|
### operator*
|
||||||
|
|
||||||
|
*Time operator*(Time a, Time b)*
|
||||||
|
|
||||||
|
*Defined at src/core/time.h#90*
|
||||||
|
|
||||||
|
### operator-
|
||||||
|
|
||||||
|
*std::optional<Time> operator-(Time a, Time b)*
|
||||||
|
|
||||||
|
*Defined at src/core/time.h#94*
|
||||||
|
|
||||||
|
### safe_sub
|
||||||
|
|
||||||
|
*std::optional<Time> safe_sub(Time a, Time b)*
|
||||||
|
|
||||||
|
*Defined at src/core/time.h#98*
|
||||||
|
|
||||||
|
### operator""_ns
|
||||||
|
|
||||||
|
*Time operator""_ns(unsigned long long v)*
|
||||||
|
|
||||||
|
*Defined at src/core/time.h#114*
|
||||||
|
|
||||||
|
### operator""_us
|
||||||
|
|
||||||
|
*Time operator""_us(unsigned long long v)*
|
||||||
|
|
||||||
|
*Defined at src/core/time.h#117*
|
||||||
|
|
||||||
|
### operator""_ms
|
||||||
|
|
||||||
|
*Time operator""_ms(unsigned long long v)*
|
||||||
|
|
||||||
|
*Defined at src/core/time.h#120*
|
||||||
|
|
||||||
|
### operator""_s
|
||||||
|
|
||||||
|
*Time operator""_s(unsigned long long v)*
|
||||||
|
|
||||||
|
*Defined at src/core/time.h#123*
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Enums
|
||||||
|
|
||||||
|
| enum class NodeStatus |
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
| OK |
|
||||||
|
| THROTTLING |
|
||||||
|
| DOWN |
|
||||||
|
| BOOTING |
|
||||||
|
|
||||||
|
|
||||||
|
*Defined at src/core/types.h#15*
|
||||||
|
|
||||||
|
| enum class NodeType |
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
| HOST |
|
||||||
|
| SWITCH |
|
||||||
|
| NIC |
|
||||||
|
|
||||||
|
|
||||||
|
*Defined at src/core/types.h#22*
|
||||||
|
|
||||||
|
| enum class LinkStatus |
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
| OK |
|
||||||
|
| DOWN |
|
||||||
|
| THROTTLING |
|
||||||
|
|
||||||
|
|
||||||
|
*Defined at src/core/types.h#36*
|
||||||
|
|
||||||
|
| enum class PacketProtocol |
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
| DATA |
|
||||||
|
| ACK |
|
||||||
|
| NACK |
|
||||||
|
| HEADER_TRIM |
|
||||||
|
| HEADER_TRIM_BACK |
|
||||||
|
|
||||||
|
|
||||||
|
*Defined at src/core/types.h#42*
|
||||||
|
|
||||||
|
| enum class SwitchBufferType |
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
| SHARED |
|
||||||
|
| DEDICATED |
|
||||||
|
|
||||||
|
|
||||||
|
*Defined at src/core/types.h#50*
|
||||||
|
|
||||||
|
| enum class FlowPriority |
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
| CTRL |
|
||||||
|
| MICE |
|
||||||
|
| ELEPHANT |
|
||||||
|
| AUTO |
|
||||||
|
|
||||||
|
|
||||||
|
*Defined at src/core/types.h#52*
|
||||||
|
|
||||||
|
| enum class CCType |
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
| DCQCN |
|
||||||
|
| NSCC |
|
||||||
|
|
||||||
|
|
||||||
|
*Defined at src/core/types.h#59*
|
||||||
|
|
||||||
|
| enum class LBType |
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
| RANDOM_PACKET_SPRAYING |
|
||||||
|
|
||||||
|
|
||||||
|
*Defined at src/core/types.h#64*
|
||||||
|
|
||||||
|
| enum class MgmtKind |
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
| HEARTBEAT |
|
||||||
|
| JOB_FINISHED |
|
||||||
|
| END_SIMULATION |
|
||||||
|
|
||||||
|
|
||||||
|
*Defined at src/core/types.h#68*
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
3
docs/clang-doc/index.md
Normal file
3
docs/clang-doc/index.md
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# DOFS C/C++ Reference
|
||||||
|
|
||||||
|
* Namespace: [dofs](dofs)
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
#include "core/host.h"
|
#include "core/host.h"
|
||||||
|
|
||||||
#include "core/error.h"
|
#include "core/error.h"
|
||||||
|
|
||||||
namespace dofs {
|
namespace dofs {
|
||||||
|
|||||||
@@ -27,12 +27,15 @@ public:
|
|||||||
|
|
||||||
// Data-plane completion: a whole flow has arrived.
|
// Data-plane completion: a whole flow has arrived.
|
||||||
virtual void recv_flow(NodeId src,
|
virtual void recv_flow(NodeId src,
|
||||||
|
FlowId flow,
|
||||||
FlowPriority priority,
|
FlowPriority priority,
|
||||||
Bytes flow_size) = 0;
|
Bytes flow_size) = 0;
|
||||||
|
|
||||||
// Control/telemetry interrupt: ACK/NACK/TRIM_BACK, etc.
|
// Control/telemetry interrupt: ACK/NACK/TRIM_BACK, etc.
|
||||||
virtual void recv_frame(const Packet& frame) = 0;
|
virtual void recv_frame(const Packet& frame) = 0;
|
||||||
|
|
||||||
|
virtual void recv_mgmt_msg(std::unique_ptr<struct MgmtMsg> msg) = 0;
|
||||||
|
|
||||||
Host(const Host &) = delete;
|
Host(const Host &) = delete;
|
||||||
Host &operator=(const Host &) = delete;
|
Host &operator=(const Host &) = delete;
|
||||||
|
|
||||||
|
|||||||
@@ -49,7 +49,25 @@ void Simulator::run_until(Time end_time) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<std::unique_ptr<Simulator>>& Simulator::registry_() {
|
void Simulator::lock() noexcept {
|
||||||
|
_locked = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Simulator::flush_after(Time grace) noexcept {
|
||||||
|
_locked = true;
|
||||||
|
|
||||||
|
const Time deadline = _now + grace;
|
||||||
|
run_until(deadline);
|
||||||
|
|
||||||
|
while (!_event_pq.empty()) {
|
||||||
|
_event_pq.pop();
|
||||||
|
}
|
||||||
|
|
||||||
|
_cancelled.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
std::vector<std::unique_ptr<Simulator>>& Simulator::_registry() {
|
||||||
static std::vector<std::unique_ptr<Simulator>> reg;
|
static std::vector<std::unique_ptr<Simulator>> reg;
|
||||||
return reg;
|
return reg;
|
||||||
}
|
}
|
||||||
@@ -59,7 +77,7 @@ std::pair<InstanceId, Simulator *> Simulator::create_simulator(InstanceId id) {
|
|||||||
return {INVALID_INSTANCE_ID, nullptr};
|
return {INVALID_INSTANCE_ID, nullptr};
|
||||||
}
|
}
|
||||||
|
|
||||||
auto& reg = registry_();
|
auto& reg = _registry();
|
||||||
|
|
||||||
if (static_cast<size_t>(id) >= reg.size()) {
|
if (static_cast<size_t>(id) >= reg.size()) {
|
||||||
reg.resize(static_cast<size_t>(id) + 1);
|
reg.resize(static_cast<size_t>(id) + 1);
|
||||||
@@ -79,7 +97,7 @@ Simulator * Simulator::get_simulator(InstanceId id) noexcept {
|
|||||||
if (id == INVALID_INSTANCE_ID)
|
if (id == INVALID_INSTANCE_ID)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
||||||
auto& reg = registry_();
|
auto& reg = _registry();
|
||||||
const size_t idx = static_cast<size_t>(id);
|
const size_t idx = static_cast<size_t>(id);
|
||||||
|
|
||||||
if (idx >= reg.size())
|
if (idx >= reg.size())
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
#ifndef CORE_SIMULATOR_H
|
#ifndef CORE_SIMULATOR_H
|
||||||
#define CORE_SIMULATOR_H
|
#define CORE_SIMULATOR_H
|
||||||
|
|
||||||
// TODO: implement concrete node methods for different nodes, store them all uniformly in vector<u_ptr<Node>> and return a get function
|
|
||||||
|
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <functional>
|
#include <functional>
|
||||||
#include <queue>
|
#include <queue>
|
||||||
@@ -49,6 +47,7 @@ private:
|
|||||||
std::unordered_set<EventId> _cancelled;
|
std::unordered_set<EventId> _cancelled;
|
||||||
Time _now{};
|
Time _now{};
|
||||||
EventId _next_id{1};
|
EventId _next_id{1};
|
||||||
|
bool _locked{false};
|
||||||
|
|
||||||
std::unique_ptr<Rng> _rng;
|
std::unique_ptr<Rng> _rng;
|
||||||
|
|
||||||
@@ -65,6 +64,9 @@ public:
|
|||||||
|
|
||||||
template <class F, class... Args>
|
template <class F, class... Args>
|
||||||
EventId schedule_at(Time abs_time, F&& f, Args&&... args) {
|
EventId schedule_at(Time abs_time, F&& f, Args&&... args) {
|
||||||
|
if (_locked)
|
||||||
|
return NULL_EVENT;
|
||||||
|
|
||||||
if (abs_time < _now)
|
if (abs_time < _now)
|
||||||
return NULL_EVENT;
|
return NULL_EVENT;
|
||||||
|
|
||||||
@@ -88,6 +90,15 @@ public:
|
|||||||
bool run_next();
|
bool run_next();
|
||||||
void run_until(Time end_time);
|
void run_until(Time end_time);
|
||||||
|
|
||||||
|
// ----- Termination helpers -----
|
||||||
|
// Prevent any future schedule_* calls from enqueuing events.
|
||||||
|
void lock() noexcept;
|
||||||
|
bool is_locked() const noexcept {
|
||||||
|
return _locked;
|
||||||
|
}
|
||||||
|
// Lock, then run all events up to now()+grace, finally discard any remaining.
|
||||||
|
void flush_after(Time grace) noexcept;
|
||||||
|
|
||||||
// ---------- Object management ----------
|
// ---------- Object management ----------
|
||||||
Rng* create_rng(std::uint64_t seed);
|
Rng* create_rng(std::uint64_t seed);
|
||||||
Rng* get_rng() noexcept;
|
Rng* get_rng() noexcept;
|
||||||
@@ -112,7 +123,7 @@ private:
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
static std::vector<std::unique_ptr<Simulator>>& registry_();
|
static std::vector<std::unique_ptr<Simulator>>& _registry();
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace dofs
|
} // namespace dofs
|
||||||
|
|||||||
@@ -65,6 +65,12 @@ enum class LBType : uint8_t {
|
|||||||
RANDOM_PACKET_SPRAYING
|
RANDOM_PACKET_SPRAYING
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum class MgmtKind : uint8_t {
|
||||||
|
HEARTBEAT,
|
||||||
|
JOB_FINISHED,
|
||||||
|
END_SIMULATION
|
||||||
|
};
|
||||||
|
|
||||||
} // namespace dofs
|
} // namespace dofs
|
||||||
|
|
||||||
#endif // CORE_TYPES_H
|
#endif // CORE_TYPES_H
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ target_include_directories(dofs_hosts
|
|||||||
$<INSTALL_INTERFACE:include>
|
$<INSTALL_INTERFACE:include>
|
||||||
)
|
)
|
||||||
|
|
||||||
target_link_libraries(dofs_hosts PUBLIC dofs_core)
|
target_link_libraries(dofs_hosts PUBLIC dofs_core dofs_network)
|
||||||
|
|
||||||
if(DOFS_GLOB_SOURCES)
|
if(DOFS_GLOB_SOURCES)
|
||||||
file(GLOB HOSTS_CC CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/*.cc")
|
file(GLOB HOSTS_CC CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/*.cc")
|
||||||
@@ -18,9 +18,13 @@ if(DOFS_GLOB_SOURCES)
|
|||||||
else()
|
else()
|
||||||
target_sources(dofs_hosts
|
target_sources(dofs_hosts
|
||||||
PUBLIC
|
PUBLIC
|
||||||
nodes_dummy.h
|
mgmt_msg.h
|
||||||
|
policies.h
|
||||||
|
publisher.h
|
||||||
|
subscriber.h
|
||||||
PRIVATE
|
PRIVATE
|
||||||
nodes_dummy.cc
|
publisher.cc
|
||||||
|
subscriber.cc
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@@ -39,7 +43,12 @@ endforeach()
|
|||||||
add_library(dofs_hosts_headers_tooling STATIC ${HOSTS_STUBS})
|
add_library(dofs_hosts_headers_tooling STATIC ${HOSTS_STUBS})
|
||||||
|
|
||||||
# inherit include dirs/usage reqs from dofs_hosts
|
# inherit include dirs/usage reqs from dofs_hosts
|
||||||
target_link_libraries(dofs_hosts_headers_tooling PRIVATE dofs_hosts dofs_core)
|
target_link_libraries(
|
||||||
|
dofs_hosts_headers_tooling
|
||||||
|
PRIVATE
|
||||||
|
dofs_hosts
|
||||||
|
dofs_core
|
||||||
|
dofs_network)
|
||||||
|
|
||||||
# This ensures the same -I flags even if cmake-ide builds the stubs alone
|
# This ensures the same -I flags even if cmake-ide builds the stubs alone
|
||||||
target_include_directories(dofs_hosts_headers_tooling
|
target_include_directories(dofs_hosts_headers_tooling
|
||||||
|
|||||||
51
src/hosts/mgmt_msg.h
Normal file
51
src/hosts/mgmt_msg.h
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
#ifndef HOSTS_MGMT_MSG_H
|
||||||
|
#define HOSTS_MGMT_MSG_H
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
#include <memory>
|
||||||
|
#include "core/time.h"
|
||||||
|
#include "core/types.h"
|
||||||
|
|
||||||
|
namespace dofs {
|
||||||
|
|
||||||
|
struct MgmtMsg {
|
||||||
|
virtual ~MgmtMsg() = default;
|
||||||
|
virtual MgmtKind kind() const noexcept = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct HeartbeatMsg final : public MgmtMsg {
|
||||||
|
NodeId subscriber_id;
|
||||||
|
NodeStatus status;
|
||||||
|
Time generated_at;
|
||||||
|
|
||||||
|
explicit HeartbeatMsg(NodeId sid, NodeStatus st, Time t) noexcept
|
||||||
|
: subscriber_id(sid), status(st), generated_at(t) {}
|
||||||
|
|
||||||
|
MgmtKind kind() const noexcept override {
|
||||||
|
return MgmtKind::HEARTBEAT;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
struct JobFinishedMsg final : public MgmtMsg {
|
||||||
|
FlowId flow_id;
|
||||||
|
Time finished_at;
|
||||||
|
|
||||||
|
explicit JobFinishedMsg(FlowId fid, Time t) noexcept
|
||||||
|
: flow_id(fid), finished_at(t) {}
|
||||||
|
|
||||||
|
MgmtKind kind() const noexcept override {
|
||||||
|
return MgmtKind::JOB_FINISHED;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
struct EndSimulationMsg final : public MgmtMsg {
|
||||||
|
MgmtKind kind() const noexcept override {
|
||||||
|
return MgmtKind::END_SIMULATION;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
using MgmtMsgPtr = std::unique_ptr<MgmtMsg>;
|
||||||
|
|
||||||
|
} // namespace dofs
|
||||||
|
|
||||||
|
#endif // HOSTS_MGMT_MSG_H
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
#include "core/error.h"
|
|
||||||
#include "core/logger.h"
|
|
||||||
|
|
||||||
namespace dofs {
|
|
||||||
int _nodes_tooling_dummy = 0;
|
|
||||||
}
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
#ifndef NODES_DUMMY
|
|
||||||
#define NODES_DUMMY
|
|
||||||
|
|
||||||
#endif
|
|
||||||
86
src/hosts/policies.h
Normal file
86
src/hosts/policies.h
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
#ifndef HOSTS_POLICIES_H
|
||||||
|
#define HOSTS_POLICIES_H
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
#include <vector>
|
||||||
|
#include <unordered_map>
|
||||||
|
#include <cassert>
|
||||||
|
#include "core/types.h"
|
||||||
|
|
||||||
|
namespace dofs {
|
||||||
|
|
||||||
|
// Abstract publisher policy: map logical update groups → concrete multicast mask.
|
||||||
|
struct PubBasePolicy {
|
||||||
|
virtual ~PubBasePolicy() = default;
|
||||||
|
virtual PacketGroups select_multicast_groups(PacketGroups update_groups_mask) =
|
||||||
|
0;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Round-robin policy over bit ranges per logical group.
|
||||||
|
class PubRRPolicy final : public PubBasePolicy {
|
||||||
|
public:
|
||||||
|
struct ReplicaRange {
|
||||||
|
uint32_t update_group; // logical group id you use in your workload file
|
||||||
|
uint8_t low_bit; // inclusive, < 128
|
||||||
|
uint8_t high_bit; // inclusive, < 128
|
||||||
|
};
|
||||||
|
|
||||||
|
explicit PubRRPolicy(std::vector<ReplicaRange> ranges)
|
||||||
|
: _ranges(std::move(ranges)) {
|
||||||
|
validate_and_build();
|
||||||
|
}
|
||||||
|
|
||||||
|
PacketGroups select_multicast_groups(PacketGroups update_groups_mask) override {
|
||||||
|
PacketGroups result = 0;
|
||||||
|
|
||||||
|
for (auto const& r : _ranges) {
|
||||||
|
if (!group_present(update_groups_mask, r.update_group))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
const uint8_t width = static_cast<uint8_t>(r.high_bit - r.low_bit + 1);
|
||||||
|
uint8_t &cursor = _rr_cursor[r.update_group];
|
||||||
|
uint8_t chosen = static_cast<uint8_t>(r.low_bit + (cursor % width));
|
||||||
|
cursor = static_cast<uint8_t>((cursor + 1) % width);
|
||||||
|
result |= (PacketGroups(1) << chosen);
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::vector<ReplicaRange> _ranges;
|
||||||
|
std::unordered_map<uint32_t, uint8_t> _rr_cursor; // per logical group
|
||||||
|
|
||||||
|
static bool group_present(PacketGroups mask, uint32_t gid) noexcept {
|
||||||
|
// convention: logical update groups are not bits, they’re ids you pass in;
|
||||||
|
// presence is determined outside—if you want bitwise presence, adapt here later.
|
||||||
|
// For now, assume any nonzero mask means all configured groups are requested.
|
||||||
|
(void)gid;
|
||||||
|
return mask != 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void validate_and_build() {
|
||||||
|
for (auto const& r : _ranges) {
|
||||||
|
assert(r.low_bit <= r.high_bit);
|
||||||
|
assert(r.high_bit < 128 && r.low_bit < 128);
|
||||||
|
(void)r;
|
||||||
|
// Non-overlap across different logical groups is allowed.
|
||||||
|
}
|
||||||
|
|
||||||
|
// init all cursors to 0 for determinism.
|
||||||
|
for (auto const& r : _ranges)
|
||||||
|
_rr_cursor[r.update_group] = 0;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
struct SubBasePolicy {
|
||||||
|
virtual ~SubBasePolicy() = default;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct SubDummyPolicy final : public SubBasePolicy {
|
||||||
|
~SubDummyPolicy() override = default;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace dofs
|
||||||
|
|
||||||
|
#endif // HOSTS_POLICIES_H
|
||||||
143
src/hosts/publisher.cc
Normal file
143
src/hosts/publisher.cc
Normal file
@@ -0,0 +1,143 @@
|
|||||||
|
#include "hosts/publisher.h"
|
||||||
|
#include "core/error.h"
|
||||||
|
#include "network/network_nic.h"
|
||||||
|
|
||||||
|
namespace dofs {
|
||||||
|
|
||||||
|
Publisher::Publisher(Simulator *const sim,
|
||||||
|
NodeId id,
|
||||||
|
Time update_latency_base,
|
||||||
|
std::unique_ptr<PubBasePolicy> policy,
|
||||||
|
Time mgmt_latency) noexcept
|
||||||
|
: Host(sim, id)
|
||||||
|
, _sim(sim)
|
||||||
|
, _update_latency_base(update_latency_base)
|
||||||
|
, _update_latency_cur(update_latency_base)
|
||||||
|
, _mgmt_latency(mgmt_latency)
|
||||||
|
, _policy(std::move(policy)) {}
|
||||||
|
|
||||||
|
void Publisher::set_status(NodeStatus s, Time new_latency) noexcept {
|
||||||
|
// Enforce clamp: new_latency == 0 means "no-op"
|
||||||
|
if (new_latency.count() != 0 && new_latency < _update_latency_base) {
|
||||||
|
DOFS_ERROR("publisher", "set_status: new latency below base; ignored");
|
||||||
|
} else if (new_latency.count() != 0) {
|
||||||
|
_update_latency_cur = new_latency;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Forward to Node base if available (Host derives from Node).
|
||||||
|
// If Node::set_status is public, this works; otherwise adjust when you expose it.
|
||||||
|
// (We keep this call for correctness; remove if not yet available.)
|
||||||
|
// Node::set_status(s);
|
||||||
|
|
||||||
|
if (s == NodeStatus::DOWN) {
|
||||||
|
if (_staging_evt != NULL_EVENT) {
|
||||||
|
_sim->cancel(_staging_evt);
|
||||||
|
_staging_evt = NULL_EVENT;
|
||||||
|
}
|
||||||
|
|
||||||
|
_state = State::Quiesced;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Publisher::recv_update(Bytes size,
|
||||||
|
PacketGroups update_groups_mask) noexcept {
|
||||||
|
if (size == 0 || update_groups_mask == 0) {
|
||||||
|
DOFS_ERROR("publisher", "recv_update: invalid size or groups");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_queue.push_back(Pending{size, update_groups_mask, _sim->now()});
|
||||||
|
++_updates_in;
|
||||||
|
|
||||||
|
if (_state == State::Idle) {
|
||||||
|
_state = State::Staging;
|
||||||
|
arm_staging_if_needed();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Publisher::arm_staging_if_needed() noexcept {
|
||||||
|
if (_staging_evt != NULL_EVENT)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (_queue.empty()) {
|
||||||
|
_state = State::Idle;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_staging_evt = _sim->schedule_after(_update_latency_cur, [this]() {
|
||||||
|
this->on_staging_timer();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void Publisher::on_staging_timer() noexcept {
|
||||||
|
_staging_evt = NULL_EVENT;
|
||||||
|
|
||||||
|
if (_state == State::Quiesced)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (_queue.empty()) {
|
||||||
|
_state = State::Idle;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Pending p = _queue.front();
|
||||||
|
_queue.pop_front();
|
||||||
|
|
||||||
|
const PacketGroups mcast_mask = _policy ? _policy->select_multicast_groups(
|
||||||
|
p.mask) : PacketGroups{0};
|
||||||
|
|
||||||
|
if (mcast_mask == 0) {
|
||||||
|
DOFS_ERROR("publisher", "policy produced empty multicast mask");
|
||||||
|
} else {
|
||||||
|
auto* n = this->nic();
|
||||||
|
|
||||||
|
if (!n) {
|
||||||
|
DOFS_ERROR("publisher", "no NIC attached; dropping update");
|
||||||
|
} else {
|
||||||
|
n->send_flow(mcast_mask, p.size, FlowPriority::MICE);
|
||||||
|
_bytes_out += p.size;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Next
|
||||||
|
if (_queue.empty()) {
|
||||||
|
_state = State::Idle;
|
||||||
|
} else {
|
||||||
|
arm_staging_if_needed();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Publisher::recv_mgmt_msg(MgmtMsgPtr msg) noexcept {
|
||||||
|
if (!msg)
|
||||||
|
return;
|
||||||
|
|
||||||
|
++_mgmt_in;
|
||||||
|
|
||||||
|
switch (msg->kind()) {
|
||||||
|
case MgmtKind::END_SIMULATION: {
|
||||||
|
if (_staging_evt != NULL_EVENT) {
|
||||||
|
_sim->cancel(_staging_evt);
|
||||||
|
_staging_evt = NULL_EVENT;
|
||||||
|
}
|
||||||
|
|
||||||
|
_state = State::Quiesced;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MgmtKind::HEARTBEAT:
|
||||||
|
case MgmtKind::JOB_FINISHED:
|
||||||
|
default:
|
||||||
|
// informational only for now
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Publisher::recv_flow(NodeId, FlowId, FlowPriority, Bytes) {
|
||||||
|
// Publisher is mainly a sender in this workload; ignore data-plane flow arrivals.
|
||||||
|
}
|
||||||
|
|
||||||
|
void Publisher::recv_frame(const Packet &) {
|
||||||
|
// Control frames not used by Publisher in this stage.
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace dofs
|
||||||
79
src/hosts/publisher.h
Normal file
79
src/hosts/publisher.h
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
#ifndef HOSTS_PUBLISHER_H
|
||||||
|
#define HOSTS_PUBLISHER_H
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
#include <deque>
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
|
#include "core/time.h"
|
||||||
|
#include "core/types.h"
|
||||||
|
#include "core/host.h"
|
||||||
|
#include "core/simulator.h"
|
||||||
|
#include "hosts/mgmt_msg.h"
|
||||||
|
#include "hosts/policies.h"
|
||||||
|
|
||||||
|
namespace dofs {
|
||||||
|
|
||||||
|
class Publisher final : public Host {
|
||||||
|
public:
|
||||||
|
Publisher(Simulator* sim,
|
||||||
|
NodeId id,
|
||||||
|
Time update_latency_base,
|
||||||
|
std::unique_ptr<PubBasePolicy> policy,
|
||||||
|
Time mgmt_latency) noexcept;
|
||||||
|
|
||||||
|
// Triggered by workload driver
|
||||||
|
void recv_update(Bytes size, PacketGroups update_groups_mask) noexcept;
|
||||||
|
|
||||||
|
// Status with latency clamp; new_latency==0 means "no change"
|
||||||
|
void set_status(NodeStatus s, Time new_latency = Time{}) noexcept;
|
||||||
|
|
||||||
|
// Mgmt-plane receive (from subscribers)
|
||||||
|
virtual void recv_mgmt_msg(MgmtMsgPtr msg) noexcept override;
|
||||||
|
|
||||||
|
// Host overrides (data-plane callbacks)
|
||||||
|
virtual void recv_flow(NodeId src, FlowId flow, FlowPriority prio,
|
||||||
|
Bytes flow_size) override;
|
||||||
|
virtual void recv_frame(const Packet& frame) override;
|
||||||
|
|
||||||
|
// Telemetry
|
||||||
|
uint64_t updates_in() const noexcept {
|
||||||
|
return _updates_in;
|
||||||
|
}
|
||||||
|
uint64_t bytes_out() const noexcept {
|
||||||
|
return _bytes_out;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
enum class State : uint8_t { Idle = 0, Staging = 1, Quiesced = 2 };
|
||||||
|
|
||||||
|
struct Pending {
|
||||||
|
Bytes size{0};
|
||||||
|
PacketGroups mask{0};
|
||||||
|
Time enq_time{};
|
||||||
|
};
|
||||||
|
|
||||||
|
void arm_staging_if_needed() noexcept;
|
||||||
|
void on_staging_timer() noexcept;
|
||||||
|
|
||||||
|
private:
|
||||||
|
Simulator *const _sim;
|
||||||
|
Time _update_latency_base;
|
||||||
|
Time _update_latency_cur;
|
||||||
|
Time _mgmt_latency;
|
||||||
|
std::unique_ptr<PubBasePolicy> _policy;
|
||||||
|
|
||||||
|
State _state{State::Idle};
|
||||||
|
EventId _staging_evt{NULL_EVENT};
|
||||||
|
std::deque<Pending> _queue;
|
||||||
|
|
||||||
|
// telemetry
|
||||||
|
uint64_t _updates_in{0};
|
||||||
|
uint64_t _bytes_out{0};
|
||||||
|
uint64_t _mgmt_in{0};
|
||||||
|
uint64_t _mgmt_out{0};
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace dofs
|
||||||
|
|
||||||
|
#endif // HOSTS_PUBLISHER_H
|
||||||
104
src/hosts/subscriber.cc
Normal file
104
src/hosts/subscriber.cc
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
#include "hosts/subscriber.h"
|
||||||
|
#include "hosts/publisher.h"
|
||||||
|
#include "core/error.h"
|
||||||
|
|
||||||
|
namespace dofs {
|
||||||
|
|
||||||
|
Subscriber::Subscriber(Simulator* sim,
|
||||||
|
NodeId id,
|
||||||
|
Publisher* publisher,
|
||||||
|
std::unique_ptr<SubBasePolicy> policy,
|
||||||
|
Time mgmt_latency,
|
||||||
|
Time heartbeat_period) noexcept
|
||||||
|
: Host(sim, id)
|
||||||
|
, _sim(sim)
|
||||||
|
, _publisher(publisher)
|
||||||
|
, _policy(std::move(policy))
|
||||||
|
, _mgmt_latency(mgmt_latency)
|
||||||
|
, _hb_period(heartbeat_period) {
|
||||||
|
// Deterministic stagger: simple function of NodeId.
|
||||||
|
Time::rep off = (static_cast<Time::rep>(id) % (std::max<Time::rep>(1,
|
||||||
|
heartbeat_period.count() / 4)));
|
||||||
|
schedule_next_heartbeat(Time(off));
|
||||||
|
}
|
||||||
|
|
||||||
|
void Subscriber::set_status(NodeStatus s) noexcept {
|
||||||
|
// Node::set_status(s);
|
||||||
|
if (s == NodeStatus::DOWN) {
|
||||||
|
if (_hb_evt != NULL_EVENT) {
|
||||||
|
_sim->cancel(_hb_evt);
|
||||||
|
_hb_evt = NULL_EVENT;
|
||||||
|
}
|
||||||
|
|
||||||
|
_state = State::Quiesced;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Subscriber::schedule_next_heartbeat(Time delay) noexcept {
|
||||||
|
if (_state == State::Quiesced)
|
||||||
|
return;
|
||||||
|
|
||||||
|
_hb_evt = _sim->schedule_after(delay, [this]() {
|
||||||
|
this->on_heartbeat_timer();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void Subscriber::on_heartbeat_timer() noexcept {
|
||||||
|
_hb_evt = NULL_EVENT;
|
||||||
|
|
||||||
|
if (_state == State::Quiesced)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (_publisher) {
|
||||||
|
const NodeId sid = this->id();
|
||||||
|
const NodeStatus st = NodeStatus::OK;
|
||||||
|
const Time gen = _sim->now();
|
||||||
|
Publisher* const pub = _publisher;
|
||||||
|
_sim->schedule_after(_mgmt_latency, [pub, sid, st, gen]() {
|
||||||
|
pub->recv_mgmt_msg(std::make_unique<HeartbeatMsg>(sid, st, gen));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
schedule_next_heartbeat(_hb_period);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Subscriber::send_job_finished(FlowId flow) noexcept {
|
||||||
|
if (_publisher) {
|
||||||
|
const Time fin = _sim->now();
|
||||||
|
_sim->schedule_after(_mgmt_latency, [pub = _publisher, flow, fin]() mutable {
|
||||||
|
pub->recv_mgmt_msg(std::make_unique<JobFinishedMsg>(flow, fin));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Subscriber::recv_mgmt_msg(MgmtMsgPtr msg) noexcept {
|
||||||
|
if (!msg)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (msg->kind() == MgmtKind::END_SIMULATION) {
|
||||||
|
if (_hb_evt != NULL_EVENT) {
|
||||||
|
_sim->cancel(_hb_evt);
|
||||||
|
_hb_evt = NULL_EVENT;
|
||||||
|
}
|
||||||
|
|
||||||
|
_state = State::Quiesced;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Subscriber::recv_flow(NodeId /*src*/, FlowId flow, FlowPriority /*prio*/,
|
||||||
|
Bytes /*flow_size*/) {
|
||||||
|
if (_state == State::Quiesced) {
|
||||||
|
DOFS_ERROR("subscriber", "drop flow: quiesced");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 3-day scope: zero processing delay → immediately report completion.
|
||||||
|
send_job_finished(flow);
|
||||||
|
_state = State::Idle;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Subscriber::recv_frame(const Packet & /*frame*/) {
|
||||||
|
// Not used for this pub/sub workload phase.
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace dofs
|
||||||
61
src/hosts/subscriber.h
Normal file
61
src/hosts/subscriber.h
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
#ifndef HOSTS_SUBSCRIBER_H
|
||||||
|
#define HOSTS_SUBSCRIBER_H
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
#include <memory>
|
||||||
|
#include "core/host.h"
|
||||||
|
#include "core/simulator.h"
|
||||||
|
#include "hosts/mgmt_msg.h"
|
||||||
|
#include "hosts/policies.h"
|
||||||
|
|
||||||
|
namespace dofs {
|
||||||
|
|
||||||
|
class Publisher;
|
||||||
|
|
||||||
|
class Subscriber final : public Host {
|
||||||
|
public:
|
||||||
|
Subscriber(Simulator* sim,
|
||||||
|
NodeId id,
|
||||||
|
Publisher* publisher,
|
||||||
|
std::unique_ptr<SubBasePolicy> policy,
|
||||||
|
Time mgmt_latency,
|
||||||
|
Time heartbeat_period) noexcept;
|
||||||
|
|
||||||
|
// Mgmt-plane receive (from publisher)
|
||||||
|
virtual void recv_mgmt_msg(MgmtMsgPtr msg) noexcept override;
|
||||||
|
|
||||||
|
// Host overrides (data-plane callbacks)
|
||||||
|
void recv_flow(NodeId src, FlowId flow, FlowPriority prio,
|
||||||
|
Bytes flow_size) override;
|
||||||
|
void recv_frame(const Packet& frame) override;
|
||||||
|
|
||||||
|
void set_status(NodeStatus s) noexcept;
|
||||||
|
|
||||||
|
// For future: swap publisher pointer
|
||||||
|
void set_publisher(Publisher* p) noexcept {
|
||||||
|
_publisher = p;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
enum class State : uint8_t { Idle = 0, Processing = 1, Quiesced = 2 };
|
||||||
|
|
||||||
|
void schedule_next_heartbeat(Time delay) noexcept;
|
||||||
|
void on_heartbeat_timer() noexcept;
|
||||||
|
void send_job_finished(FlowId flow) noexcept;
|
||||||
|
|
||||||
|
private:
|
||||||
|
Simulator *_sim;
|
||||||
|
Publisher *_publisher;
|
||||||
|
std::unique_ptr<SubBasePolicy> _policy;
|
||||||
|
Time _mgmt_latency;
|
||||||
|
Time _hb_period;
|
||||||
|
EventId _hb_evt{NULL_EVENT};
|
||||||
|
State _state{State::Idle};
|
||||||
|
|
||||||
|
// simple token generator for completions (since FlowId not surfaced here)
|
||||||
|
uint64_t _next_token{1};
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace dofs
|
||||||
|
|
||||||
|
#endif // HOSTS_SUBSCRIBER_H
|
||||||
@@ -165,7 +165,8 @@ void NetworkNic::recv_pkt(Packet &pkt_in, PortId ingress) {
|
|||||||
|
|
||||||
// Flow completion: if EOF, notify host with total size from payload (accumulation would live in RxFlowState).
|
// Flow completion: if EOF, notify host with total size from payload (accumulation would live in RxFlowState).
|
||||||
if (pkt.is_eof() && _host) {
|
if (pkt.is_eof() && _host) {
|
||||||
_host->recv_flow(pkt.src_node(), pkt.priority(), pkt.payload_size());
|
_host->recv_flow(pkt.src_node(),
|
||||||
|
pkt.flow_id(), pkt.priority(), pkt.payload_size());
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -90,6 +90,9 @@ protected:
|
|||||||
|
|
||||||
case FlowPriority::ELEPHANT:
|
case FlowPriority::ELEPHANT:
|
||||||
return PRI_ELE;
|
return PRI_ELE;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return PRI_CTRL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return PRI_ELE; // defensive
|
return PRI_ELE; // defensive
|
||||||
|
|||||||
Reference in New Issue
Block a user