From 321c60bcf84d7124ccfb136f2baebe3dadca7b8d Mon Sep 17 00:00:00 2001 From: Peisong Xiao Date: Sat, 13 Sep 2025 01:24:38 -0400 Subject: [PATCH] finished part of the hosts, topos and configuration next --- CMakeLists.txt | 2 + ...A6CA7D670A31E6DAC055D6C915DB71801F36C7F.md | 10 + docs/clang-doc/GlobalNamespace/index.md | 9 + docs/clang-doc/all_files.md | 5 + docs/clang-doc/dofs/CongestionControl.md | 46 +++ docs/clang-doc/dofs/DCQCN.md | 20 ++ docs/clang-doc/dofs/DedicatedBuffer.md | 44 +++ docs/clang-doc/dofs/DedicatedREDEngine.md | 22 ++ docs/clang-doc/dofs/ECNEngine.md | 30 ++ docs/clang-doc/dofs/EndSimulationMsg.md | 18 ++ docs/clang-doc/dofs/HeartbeatMsg.md | 34 +++ docs/clang-doc/dofs/Host.md | 60 ++++ docs/clang-doc/dofs/JobFinishedMsg.md | 32 ++ docs/clang-doc/dofs/LBRandomPacketSpraying.md | 26 ++ docs/clang-doc/dofs/Link.md | 96 ++++++ docs/clang-doc/dofs/Link/Reservation.md | 12 + docs/clang-doc/dofs/LoadBalance.md | 34 +++ docs/clang-doc/dofs/Logger.md | 64 ++++ docs/clang-doc/dofs/McTree.md | 20 ++ docs/clang-doc/dofs/MgmtMsg.md | 18 ++ docs/clang-doc/dofs/MulticastTable.md | 52 ++++ docs/clang-doc/dofs/NSCC.md | 20 ++ docs/clang-doc/dofs/NetworkNic.md | 54 ++++ docs/clang-doc/dofs/NetworkNode.md | 26 ++ docs/clang-doc/dofs/NetworkSwitch.md | 36 +++ docs/clang-doc/dofs/NicSchedulingWeights.md | 16 + docs/clang-doc/dofs/NicTelemetry.md | 32 ++ docs/clang-doc/dofs/Node.md | 66 +++++ docs/clang-doc/dofs/Packet.md | 136 +++++++++ docs/clang-doc/dofs/PubBasePolicy.md | 18 ++ docs/clang-doc/dofs/PubRRPolicy.md | 30 ++ .../dofs/PubRRPolicy/ReplicaRange.md | 14 + docs/clang-doc/dofs/Publisher.md | 48 +++ docs/clang-doc/dofs/Rng.md | 62 ++++ docs/clang-doc/dofs/RoutingTables.md | 12 + docs/clang-doc/dofs/SharedBuffer.md | 44 +++ docs/clang-doc/dofs/SharedREDEngine.md | 22 ++ docs/clang-doc/dofs/Simulator.md | 88 ++++++ docs/clang-doc/dofs/SubBasePolicy.md | 14 + docs/clang-doc/dofs/SubDummyPolicy.md | 18 ++ docs/clang-doc/dofs/Subscriber.md | 38 +++ docs/clang-doc/dofs/SwitchBuffer.md | 168 +++++++++++ .../dofs/SwitchBuffer/PerPortSched.md | 12 + docs/clang-doc/dofs/SwitchBuffer/Queued.md | 18 ++ docs/clang-doc/dofs/Time.md | 86 ++++++ docs/clang-doc/dofs/Timer.md | 38 +++ docs/clang-doc/dofs/UnicastTable.md | 26 ++ docs/clang-doc/dofs/index.md | 274 ++++++++++++++++++ docs/clang-doc/index.md | 3 + src/core/host.cc | 1 + src/core/host.h | 3 + src/core/simulator.cc | 24 +- src/core/simulator.h | 17 +- src/core/types.h | 6 + src/hosts/CMakeLists.txt | 17 +- src/hosts/mgmt_msg.h | 51 ++++ src/hosts/nodes_dummy.cc | 6 - src/hosts/nodes_dummy.h | 4 - src/hosts/policies.h | 86 ++++++ src/hosts/publisher.cc | 143 +++++++++ src/hosts/publisher.h | 79 +++++ src/hosts/subscriber.cc | 104 +++++++ src/hosts/subscriber.h | 61 ++++ src/network/network_nic.cc | 3 +- src/network/packet.h | 2 +- src/network/switch/switch_buffer.h | 3 + 66 files changed, 2661 insertions(+), 22 deletions(-) create mode 100644 docs/clang-doc/@nonymous_record_1A6CA7D670A31E6DAC055D6C915DB71801F36C7F.md create mode 100644 docs/clang-doc/GlobalNamespace/index.md create mode 100644 docs/clang-doc/all_files.md create mode 100644 docs/clang-doc/dofs/CongestionControl.md create mode 100644 docs/clang-doc/dofs/DCQCN.md create mode 100644 docs/clang-doc/dofs/DedicatedBuffer.md create mode 100644 docs/clang-doc/dofs/DedicatedREDEngine.md create mode 100644 docs/clang-doc/dofs/ECNEngine.md create mode 100644 docs/clang-doc/dofs/EndSimulationMsg.md create mode 100644 docs/clang-doc/dofs/HeartbeatMsg.md create mode 100644 docs/clang-doc/dofs/Host.md create mode 100644 docs/clang-doc/dofs/JobFinishedMsg.md create mode 100644 docs/clang-doc/dofs/LBRandomPacketSpraying.md create mode 100644 docs/clang-doc/dofs/Link.md create mode 100644 docs/clang-doc/dofs/Link/Reservation.md create mode 100644 docs/clang-doc/dofs/LoadBalance.md create mode 100644 docs/clang-doc/dofs/Logger.md create mode 100644 docs/clang-doc/dofs/McTree.md create mode 100644 docs/clang-doc/dofs/MgmtMsg.md create mode 100644 docs/clang-doc/dofs/MulticastTable.md create mode 100644 docs/clang-doc/dofs/NSCC.md create mode 100644 docs/clang-doc/dofs/NetworkNic.md create mode 100644 docs/clang-doc/dofs/NetworkNode.md create mode 100644 docs/clang-doc/dofs/NetworkSwitch.md create mode 100644 docs/clang-doc/dofs/NicSchedulingWeights.md create mode 100644 docs/clang-doc/dofs/NicTelemetry.md create mode 100644 docs/clang-doc/dofs/Node.md create mode 100644 docs/clang-doc/dofs/Packet.md create mode 100644 docs/clang-doc/dofs/PubBasePolicy.md create mode 100644 docs/clang-doc/dofs/PubRRPolicy.md create mode 100644 docs/clang-doc/dofs/PubRRPolicy/ReplicaRange.md create mode 100644 docs/clang-doc/dofs/Publisher.md create mode 100644 docs/clang-doc/dofs/Rng.md create mode 100644 docs/clang-doc/dofs/RoutingTables.md create mode 100644 docs/clang-doc/dofs/SharedBuffer.md create mode 100644 docs/clang-doc/dofs/SharedREDEngine.md create mode 100644 docs/clang-doc/dofs/Simulator.md create mode 100644 docs/clang-doc/dofs/SubBasePolicy.md create mode 100644 docs/clang-doc/dofs/SubDummyPolicy.md create mode 100644 docs/clang-doc/dofs/Subscriber.md create mode 100644 docs/clang-doc/dofs/SwitchBuffer.md create mode 100644 docs/clang-doc/dofs/SwitchBuffer/PerPortSched.md create mode 100644 docs/clang-doc/dofs/SwitchBuffer/Queued.md create mode 100644 docs/clang-doc/dofs/Time.md create mode 100644 docs/clang-doc/dofs/Timer.md create mode 100644 docs/clang-doc/dofs/UnicastTable.md create mode 100644 docs/clang-doc/dofs/index.md create mode 100644 docs/clang-doc/index.md create mode 100644 src/hosts/mgmt_msg.h delete mode 100644 src/hosts/nodes_dummy.cc delete mode 100644 src/hosts/nodes_dummy.h create mode 100644 src/hosts/policies.h create mode 100644 src/hosts/publisher.cc create mode 100644 src/hosts/publisher.h create mode 100644 src/hosts/subscriber.cc create mode 100644 src/hosts/subscriber.h diff --git a/CMakeLists.txt b/CMakeLists.txt index dd70782..2fdd28c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,6 +14,8 @@ option(DOFS_GLOB_SOURCES "Dev: auto-add *.cc files via GLOB (not ideal for CI)" add_library(dofs_config INTERFACE) 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" target_include_directories(dofs_config INTERFACE "${PROJECT_SOURCE_DIR}/src") diff --git a/docs/clang-doc/@nonymous_record_1A6CA7D670A31E6DAC055D6C915DB71801F36C7F.md b/docs/clang-doc/@nonymous_record_1A6CA7D670A31E6DAC055D6C915DB71801F36C7F.md new file mode 100644 index 0000000..f9bd62b --- /dev/null +++ b/docs/clang-doc/@nonymous_record_1A6CA7D670A31E6DAC055D6C915DB71801F36C7F.md @@ -0,0 +1,10 @@ +# struct + +## Functions + +### operator() + +*public bool operator()(const Item & a, const Item & b)* + + + diff --git a/docs/clang-doc/GlobalNamespace/index.md b/docs/clang-doc/GlobalNamespace/index.md new file mode 100644 index 0000000..9dfc3f2 --- /dev/null +++ b/docs/clang-doc/GlobalNamespace/index.md @@ -0,0 +1,9 @@ +# Global Namespace + + + +## Namespaces + +* [dofs](../dofs/index.md) + + diff --git a/docs/clang-doc/all_files.md b/docs/clang-doc/all_files.md new file mode 100644 index 0000000..f906622 --- /dev/null +++ b/docs/clang-doc/all_files.md @@ -0,0 +1,5 @@ +# All Files for DOFS + +## [@nonymous_record_1A6CA7D670A31E6DAC055D6C915DB71801F36C7F](@nonymous_record_1A6CA7D670A31E6DAC055D6C915DB71801F36C7F.md) +## [dofs](dofs/index.md) +## [GlobalNamespace](GlobalNamespace/index.md) diff --git a/docs/clang-doc/dofs/CongestionControl.md b/docs/clang-doc/dofs/CongestionControl.md new file mode 100644 index 0000000..d11a777 --- /dev/null +++ b/docs/clang-doc/dofs/CongestionControl.md @@ -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* + + + diff --git a/docs/clang-doc/dofs/DCQCN.md b/docs/clang-doc/dofs/DCQCN.md new file mode 100644 index 0000000..2096c6f --- /dev/null +++ b/docs/clang-doc/dofs/DCQCN.md @@ -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)* + + + diff --git a/docs/clang-doc/dofs/DedicatedBuffer.md b/docs/clang-doc/dofs/DedicatedBuffer.md new file mode 100644 index 0000000..56b5369 --- /dev/null +++ b/docs/clang-doc/dofs/DedicatedBuffer.md @@ -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, PRI_COUNT> & queues_for(PortId p)* + +### queues_for + +*protected const std::array, 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)* + + + diff --git a/docs/clang-doc/dofs/DedicatedREDEngine.md b/docs/clang-doc/dofs/DedicatedREDEngine.md new file mode 100644 index 0000000..ac76a6c --- /dev/null +++ b/docs/clang-doc/dofs/DedicatedREDEngine.md @@ -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)* + + + diff --git a/docs/clang-doc/dofs/ECNEngine.md b/docs/clang-doc/dofs/ECNEngine.md new file mode 100644 index 0000000..b8115c5 --- /dev/null +++ b/docs/clang-doc/dofs/ECNEngine.md @@ -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* + + + diff --git a/docs/clang-doc/dofs/EndSimulationMsg.md b/docs/clang-doc/dofs/EndSimulationMsg.md new file mode 100644 index 0000000..d1cbb30 --- /dev/null +++ b/docs/clang-doc/dofs/EndSimulationMsg.md @@ -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* + + + diff --git a/docs/clang-doc/dofs/HeartbeatMsg.md b/docs/clang-doc/dofs/HeartbeatMsg.md new file mode 100644 index 0000000..311b17b --- /dev/null +++ b/docs/clang-doc/dofs/HeartbeatMsg.md @@ -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* + + + diff --git a/docs/clang-doc/dofs/Host.md b/docs/clang-doc/dofs/Host.md new file mode 100644 index 0000000..2369731 --- /dev/null +++ b/docs/clang-doc/dofs/Host.md @@ -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 msg)* + + + diff --git a/docs/clang-doc/dofs/JobFinishedMsg.md b/docs/clang-doc/dofs/JobFinishedMsg.md new file mode 100644 index 0000000..6b23ce0 --- /dev/null +++ b/docs/clang-doc/dofs/JobFinishedMsg.md @@ -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* + + + diff --git a/docs/clang-doc/dofs/LBRandomPacketSpraying.md b/docs/clang-doc/dofs/LBRandomPacketSpraying.md new file mode 100644 index 0000000..4fdffe9 --- /dev/null +++ b/docs/clang-doc/dofs/LBRandomPacketSpraying.md @@ -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)* + + + diff --git a/docs/clang-doc/dofs/Link.md b/docs/clang-doc/dofs/Link.md new file mode 100644 index 0000000..5456b11 --- /dev/null +++ b/docs/clang-doc/dofs/Link.md @@ -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 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)* + + + diff --git a/docs/clang-doc/dofs/Link/Reservation.md b/docs/clang-doc/dofs/Link/Reservation.md new file mode 100644 index 0000000..d8fc818 --- /dev/null +++ b/docs/clang-doc/dofs/Link/Reservation.md @@ -0,0 +1,12 @@ +# struct Reservation + +*Defined at src/network/link.h#29* + +## Members + +public Time start + +public Time finish + + + diff --git a/docs/clang-doc/dofs/LoadBalance.md b/docs/clang-doc/dofs/LoadBalance.md new file mode 100644 index 0000000..728f327 --- /dev/null +++ b/docs/clang-doc/dofs/LoadBalance.md @@ -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* + + + diff --git a/docs/clang-doc/dofs/Logger.md b/docs/clang-doc/dofs/Logger.md new file mode 100644 index 0000000..47d472b --- /dev/null +++ b/docs/clang-doc/dofs/Logger.md @@ -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* + + + diff --git a/docs/clang-doc/dofs/McTree.md b/docs/clang-doc/dofs/McTree.md new file mode 100644 index 0000000..9ac2b7c --- /dev/null +++ b/docs/clang-doc/dofs/McTree.md @@ -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 + + + diff --git a/docs/clang-doc/dofs/MgmtMsg.md b/docs/clang-doc/dofs/MgmtMsg.md new file mode 100644 index 0000000..b97ef5c --- /dev/null +++ b/docs/clang-doc/dofs/MgmtMsg.md @@ -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* + + + diff --git a/docs/clang-doc/dofs/MulticastTable.md b/docs/clang-doc/dofs/MulticastTable.md new file mode 100644 index 0000000..dd9d3f5 --- /dev/null +++ b/docs/clang-doc/dofs/MulticastTable.md @@ -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 * trees_of(std::size_t group_id)* + +### group_count + +*public std::size_t group_count()* + +### get_port_list + +*public std::vector get_port_list(PacketGroups groups)* + + + diff --git a/docs/clang-doc/dofs/NSCC.md b/docs/clang-doc/dofs/NSCC.md new file mode 100644 index 0000000..4068870 --- /dev/null +++ b/docs/clang-doc/dofs/NSCC.md @@ -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)* + + + diff --git a/docs/clang-doc/dofs/NetworkNic.md b/docs/clang-doc/dofs/NetworkNic.md new file mode 100644 index 0000000..0e8f869 --- /dev/null +++ b/docs/clang-doc/dofs/NetworkNic.md @@ -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* + + + diff --git a/docs/clang-doc/dofs/NetworkNode.md b/docs/clang-doc/dofs/NetworkNode.md new file mode 100644 index 0000000..1c84912 --- /dev/null +++ b/docs/clang-doc/dofs/NetworkNode.md @@ -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* + + + diff --git a/docs/clang-doc/dofs/NetworkSwitch.md b/docs/clang-doc/dofs/NetworkSwitch.md new file mode 100644 index 0000000..c349610 --- /dev/null +++ b/docs/clang-doc/dofs/NetworkSwitch.md @@ -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)* + + + diff --git a/docs/clang-doc/dofs/NicSchedulingWeights.md b/docs/clang-doc/dofs/NicSchedulingWeights.md new file mode 100644 index 0000000..96c1721 --- /dev/null +++ b/docs/clang-doc/dofs/NicSchedulingWeights.md @@ -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 + + + diff --git a/docs/clang-doc/dofs/NicTelemetry.md b/docs/clang-doc/dofs/NicTelemetry.md new file mode 100644 index 0000000..529b46f --- /dev/null +++ b/docs/clang-doc/dofs/NicTelemetry.md @@ -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 + + + diff --git a/docs/clang-doc/dofs/Node.md b/docs/clang-doc/dofs/Node.md new file mode 100644 index 0000000..6b06d31 --- /dev/null +++ b/docs/clang-doc/dofs/Node.md @@ -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* + + + diff --git a/docs/clang-doc/dofs/Packet.md b/docs/clang-doc/dofs/Packet.md new file mode 100644 index 0000000..bb22919 --- /dev/null +++ b/docs/clang-doc/dofs/Packet.md @@ -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)* + + + diff --git a/docs/clang-doc/dofs/PubBasePolicy.md b/docs/clang-doc/dofs/PubBasePolicy.md new file mode 100644 index 0000000..938d8f7 --- /dev/null +++ b/docs/clang-doc/dofs/PubBasePolicy.md @@ -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* + + + diff --git a/docs/clang-doc/dofs/PubRRPolicy.md b/docs/clang-doc/dofs/PubRRPolicy.md new file mode 100644 index 0000000..4b143f5 --- /dev/null +++ b/docs/clang-doc/dofs/PubRRPolicy.md @@ -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 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* + + + diff --git a/docs/clang-doc/dofs/PubRRPolicy/ReplicaRange.md b/docs/clang-doc/dofs/PubRRPolicy/ReplicaRange.md new file mode 100644 index 0000000..9aec771 --- /dev/null +++ b/docs/clang-doc/dofs/PubRRPolicy/ReplicaRange.md @@ -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 + + + diff --git a/docs/clang-doc/dofs/Publisher.md b/docs/clang-doc/dofs/Publisher.md new file mode 100644 index 0000000..7641d10 --- /dev/null +++ b/docs/clang-doc/dofs/Publisher.md @@ -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 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* + + + diff --git a/docs/clang-doc/dofs/Rng.md b/docs/clang-doc/dofs/Rng.md new file mode 100644 index 0000000..fba31da --- /dev/null +++ b/docs/clang-doc/dofs/Rng.md @@ -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> & items)* + +*Defined at src/core/rng.h#56* + +### choose_weighted + +*public T choose_weighted(std::initializer_list> items)* + +*Defined at src/core/rng.h#61* + + + diff --git a/docs/clang-doc/dofs/RoutingTables.md b/docs/clang-doc/dofs/RoutingTables.md new file mode 100644 index 0000000..c94bdc2 --- /dev/null +++ b/docs/clang-doc/dofs/RoutingTables.md @@ -0,0 +1,12 @@ +# struct RoutingTables + +*Defined at src/network/switch/routing_tables.h#9* + +## Members + +public UnicastTable unicast + +public MulticastTable multicast + + + diff --git a/docs/clang-doc/dofs/SharedBuffer.md b/docs/clang-doc/dofs/SharedBuffer.md new file mode 100644 index 0000000..2b8f459 --- /dev/null +++ b/docs/clang-doc/dofs/SharedBuffer.md @@ -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, PRI_COUNT> & queues_for(PortId p)* + +### queues_for + +*protected const std::array, 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)* + + + diff --git a/docs/clang-doc/dofs/SharedREDEngine.md b/docs/clang-doc/dofs/SharedREDEngine.md new file mode 100644 index 0000000..96f9b76 --- /dev/null +++ b/docs/clang-doc/dofs/SharedREDEngine.md @@ -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)* + + + diff --git a/docs/clang-doc/dofs/Simulator.md b/docs/clang-doc/dofs/Simulator.md new file mode 100644 index 0000000..0e6cceb --- /dev/null +++ b/docs/clang-doc/dofs/Simulator.md @@ -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 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 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* + + + diff --git a/docs/clang-doc/dofs/SubBasePolicy.md b/docs/clang-doc/dofs/SubBasePolicy.md new file mode 100644 index 0000000..fe116d8 --- /dev/null +++ b/docs/clang-doc/dofs/SubBasePolicy.md @@ -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* + + + diff --git a/docs/clang-doc/dofs/SubDummyPolicy.md b/docs/clang-doc/dofs/SubDummyPolicy.md new file mode 100644 index 0000000..0e782df --- /dev/null +++ b/docs/clang-doc/dofs/SubDummyPolicy.md @@ -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* + + + diff --git a/docs/clang-doc/dofs/Subscriber.md b/docs/clang-doc/dofs/Subscriber.md new file mode 100644 index 0000000..bf0821e --- /dev/null +++ b/docs/clang-doc/dofs/Subscriber.md @@ -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 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)* + + + diff --git a/docs/clang-doc/dofs/SwitchBuffer.md b/docs/clang-doc/dofs/SwitchBuffer.md new file mode 100644 index 0000000..c2bc8d1 --- /dev/null +++ b/docs/clang-doc/dofs/SwitchBuffer.md @@ -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 & 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 & 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, PRI_COUNT> & queues_for(PortId p)* + +### queues_for + +*protected const std::array, 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