Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 18 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@ set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

add_compile_options(
# Store our strict compile options for later use
set(STRICT_COMPILE_OPTIONS
-Wall
-Wextra
-Woverloaded-virtual
Expand Down Expand Up @@ -34,16 +35,31 @@ FetchContent_Declare(
)
FetchContent_MakeAvailable(xxHash)

FetchContent_Declare(
zlib
GIT_REPOSITORY https://github.com/madler/zlib.git
GIT_TAG v1.3.1
)
FetchContent_MakeAvailable(zlib)

add_executable(beamsim main.cpp)
target_include_directories(beamsim PRIVATE ${PROJECT_SOURCE_DIR}/src)
target_link_libraries(beamsim yaml-cpp::yaml-cpp xxhash)
target_compile_options(beamsim PRIVATE ${STRICT_COMPILE_OPTIONS})

find_package(ns3 CONFIG)
if(ns3_FOUND)
find_package(MPI REQUIRED)

include(external/lsquic.cmake)

add_executable(lsquic-test lsquic-test.cpp)
target_link_libraries(lsquic-test lsquic)
target_compile_options(lsquic-test PRIVATE ${STRICT_COMPILE_OPTIONS})

target_compile_definitions(beamsim PRIVATE ns3_FOUND)
target_link_libraries(beamsim
lsquic
ns3::applications
ns3::core
ns3::internet
Expand All @@ -55,3 +71,4 @@ endif()

add_executable(gml2bin gml2bin.cpp)
target_include_directories(gml2bin PRIVATE ${PROJECT_SOURCE_DIR}/src)
target_compile_options(gml2bin PRIVATE ${STRICT_COMPILE_OPTIONS})
15 changes: 15 additions & 0 deletions cli.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
#include <beamsim/from_chars.hpp>
#include <beamsim/gossip/config.hpp>
#include <beamsim/ns3/mpi.hpp>
#include <beamsim/ns3/protocol.hpp>

struct Bitrate {
uint64_t v;
Expand Down Expand Up @@ -506,6 +507,10 @@ struct SimulationConfig {
{Topology::GOSSIP, "gossip"},
{Topology::GRID, "grid"},
}};
const Args::Enum<beamsim::ns3_::Protocol> enum_protocol_{{
{beamsim::ns3_::Protocol::TCP, "tcp"},
{beamsim::ns3_::Protocol::QUIC, "quic"},
}};

beamsim::example::RolesConfig roles_config;

Expand All @@ -529,6 +534,13 @@ struct SimulationConfig {
"Communication topology",
enum_topology_,
};
beamsim::ns3_::Protocol protocol = beamsim::ns3_::Protocol::TCP;
Args::FlagEnum<decltype(protocol)> flag_protocol{
{"-p", "--protocol"},
protocol,
"Network protocol (TCP/UDP)",
enum_protocol_,
};
Args::FlagInt<beamsim::example::GroupIndex> flag_group_count{{
{"-g", "--groups"},
roles_config.group_count,
Expand Down Expand Up @@ -617,6 +629,7 @@ struct SimulationConfig {
return f(flag_config_path,
flag_backend,
flag_topology,
flag_protocol,
flag_group_count,
flag_validators_per_group,
flag_shuffle,
Expand Down Expand Up @@ -682,6 +695,7 @@ struct SimulationConfig {
Yaml yaml{YAML::LoadFile(path)};
yaml.at({"backend"}).get(backend, enum_backend_);
yaml.at({"topology"}).get(topology, enum_topology_);
yaml.at({"protocol"}).get(protocol, enum_protocol_);
yaml.at({"shuffle"}).get(shuffle);
yaml.at({"snark1_group_once"}).get(snark1_group_once);
yaml.at({"snark1_pull"}).get(snark1_pull);
Expand Down Expand Up @@ -759,6 +773,7 @@ struct SimulationConfig {
std::println("Configuration:");
std::println(" Backend: {}", enum_backend_.str(backend));
std::println(" Topology: {}", enum_topology_.str(topology));
std::println(" Protocol: {}", enum_protocol_.str(protocol));
std::println(" Groups: {}", roles_config.group_count);
std::println(" Validators per group: {}",
roles_config.group_validator_count);
Expand Down
110 changes: 110 additions & 0 deletions external/lsquic.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
set(lsquic_dir ${CMAKE_CURRENT_LIST_DIR}/lsquic)

add_library(lsquic
${lsquic_dir}/src/liblsquic/ls-qpack/lsqpack.c
${lsquic_dir}/src/liblsquic/ls-sfparser.c
${lsquic_dir}/src/liblsquic/lsquic_adaptive_cc.c
${lsquic_dir}/src/liblsquic/lsquic_alarmset.c
${lsquic_dir}/src/liblsquic/lsquic_arr.c
${lsquic_dir}/src/liblsquic/lsquic_attq.c
${lsquic_dir}/src/liblsquic/lsquic_bbr.c
${lsquic_dir}/src/liblsquic/lsquic_bw_sampler.c
${lsquic_dir}/src/liblsquic/lsquic_cfcw.c
${lsquic_dir}/src/liblsquic/lsquic_chsk_stream.c
${lsquic_dir}/src/liblsquic/lsquic_conn.c
${lsquic_dir}/src/liblsquic/lsquic_crand.c
${lsquic_dir}/src/liblsquic/lsquic_crt_compress.c
${lsquic_dir}/src/liblsquic/lsquic_crypto.c
${lsquic_dir}/src/liblsquic/lsquic_cubic.c
${lsquic_dir}/src/liblsquic/lsquic_di_error.c
${lsquic_dir}/src/liblsquic/lsquic_di_hash.c
${lsquic_dir}/src/liblsquic/lsquic_di_nocopy.c
${lsquic_dir}/src/liblsquic/lsquic_enc_sess_common.c
${lsquic_dir}/src/liblsquic/lsquic_enc_sess_ietf.c
${lsquic_dir}/src/liblsquic/lsquic_eng_hist.c
${lsquic_dir}/src/liblsquic/lsquic_engine.c
${lsquic_dir}/src/liblsquic/lsquic_ev_log.c
${lsquic_dir}/src/liblsquic/lsquic_frab_list.c
${lsquic_dir}/src/liblsquic/lsquic_frame_common.c
${lsquic_dir}/src/liblsquic/lsquic_frame_reader.c
${lsquic_dir}/src/liblsquic/lsquic_frame_writer.c
${lsquic_dir}/src/liblsquic/lsquic_full_conn.c
${lsquic_dir}/src/liblsquic/lsquic_full_conn_ietf.c
${lsquic_dir}/src/liblsquic/lsquic_global.c
${lsquic_dir}/src/liblsquic/lsquic_handshake.c
${lsquic_dir}/src/liblsquic/lsquic_hash.c
${lsquic_dir}/src/liblsquic/lsquic_hcsi_reader.c
${lsquic_dir}/src/liblsquic/lsquic_hcso_writer.c
${lsquic_dir}/src/liblsquic/lsquic_headers_stream.c
${lsquic_dir}/src/liblsquic/lsquic_hkdf.c
${lsquic_dir}/src/liblsquic/lsquic_hpi.c
${lsquic_dir}/src/liblsquic/lsquic_hspack_valid.c
${lsquic_dir}/src/liblsquic/lsquic_http.c
${lsquic_dir}/src/liblsquic/lsquic_http1x_if.c
${lsquic_dir}/src/liblsquic/lsquic_logger.c
${lsquic_dir}/src/liblsquic/lsquic_malo.c
${lsquic_dir}/src/liblsquic/lsquic_min_heap.c
${lsquic_dir}/src/liblsquic/lsquic_mini_conn.c
${lsquic_dir}/src/liblsquic/lsquic_mini_conn_ietf.c
${lsquic_dir}/src/liblsquic/lsquic_minmax.c
${lsquic_dir}/src/liblsquic/lsquic_mm.c
${lsquic_dir}/src/liblsquic/lsquic_pacer.c
${lsquic_dir}/src/liblsquic/lsquic_packet_common.c
${lsquic_dir}/src/liblsquic/lsquic_packet_gquic.c
${lsquic_dir}/src/liblsquic/lsquic_packet_in.c
${lsquic_dir}/src/liblsquic/lsquic_packet_out.c
${lsquic_dir}/src/liblsquic/lsquic_packet_resize.c
${lsquic_dir}/src/liblsquic/lsquic_parse_Q046.c
${lsquic_dir}/src/liblsquic/lsquic_parse_Q050.c
${lsquic_dir}/src/liblsquic/lsquic_parse_common.c
${lsquic_dir}/src/liblsquic/lsquic_parse_gquic_be.c
${lsquic_dir}/src/liblsquic/lsquic_parse_gquic_common.c
${lsquic_dir}/src/liblsquic/lsquic_parse_ietf_v1.c
${lsquic_dir}/src/liblsquic/lsquic_parse_iquic_common.c
${lsquic_dir}/src/liblsquic/lsquic_pr_queue.c
${lsquic_dir}/src/liblsquic/lsquic_purga.c
${lsquic_dir}/src/liblsquic/lsquic_qdec_hdl.c
${lsquic_dir}/src/liblsquic/lsquic_qenc_hdl.c
${lsquic_dir}/src/liblsquic/lsquic_qlog.c
${lsquic_dir}/src/liblsquic/lsquic_qpack_exp.c
${lsquic_dir}/src/liblsquic/lsquic_rechist.c
${lsquic_dir}/src/liblsquic/lsquic_rtt.c
${lsquic_dir}/src/liblsquic/lsquic_send_ctl.c
${lsquic_dir}/src/liblsquic/lsquic_senhist.c
${lsquic_dir}/src/liblsquic/lsquic_set.c
${lsquic_dir}/src/liblsquic/lsquic_sfcw.c
${lsquic_dir}/src/liblsquic/lsquic_shsk_stream.c
${lsquic_dir}/src/liblsquic/lsquic_spi.c
${lsquic_dir}/src/liblsquic/lsquic_stock_shi.c
${lsquic_dir}/src/liblsquic/lsquic_str.c
${lsquic_dir}/src/liblsquic/lsquic_stream.c
${lsquic_dir}/src/liblsquic/lsquic_tokgen.c
${lsquic_dir}/src/liblsquic/lsquic_trans_params.c
${lsquic_dir}/src/liblsquic/lsquic_trechist.c
${lsquic_dir}/src/liblsquic/lsquic_util.c
${lsquic_dir}/src/liblsquic/lsquic_varint.c
${lsquic_dir}/src/liblsquic/lsquic_version.c
${lsquic_dir}/src/lshpack/lshpack.c

${lsquic_dir}/src/boringssl.cpp
${lsquic_dir}/src/lsquic-ns3.cpp
)
target_compile_definitions(lsquic PRIVATE
XXH_HEADER_NAME="../liblsquic/lsquic_xxhash.h"
)
target_compile_options(lsquic PRIVATE
-Wno-unused-parameter
-Wno-sign-compare
)
target_include_directories(lsquic PUBLIC
${lsquic_dir}/include
${lsquic_dir}/src/liblsquic/ls-qpack
${lsquic_dir}/src/lshpack
)
target_link_libraries(lsquic
ns3::applications
ns3::internet
ns3::point-to-point
xxhash
zlibstatic
)
6 changes: 6 additions & 0 deletions external/lsquic/.gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
[submodule "src/liblsquic/ls-qpack"]
path = src/liblsquic/ls-qpack
url = https://github.com/litespeedtech/ls-qpack
[submodule "src/lshpack"]
path = src/lshpack
url = https://github.com/litespeedtech/ls-hpack
9 changes: 9 additions & 0 deletions external/lsquic/include/lsquic-ns3.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#pragma once

#include <ns3/ptr.h>

namespace ns3 {
class Node;

void InstallLsquic(const Ptr<Node> &node);
} // namespace ns3
Loading