DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
dunedaq::dpdklibs::SourceModel< TargetPayloadType > Class Template Reference

#include <SourceModel.hpp>

Inheritance diagram for dunedaq::dpdklibs::SourceModel< TargetPayloadType >:
[legend]
Collaboration diagram for dunedaq::dpdklibs::SourceModel< TargetPayloadType >:
[legend]

Public Types

using sink_t = iomanager::SenderConcept<TargetPayloadType>
 
using inherited = SourceConcept
 
using data_t = nlohmann::json
 
- Public Types inherited from dunedaq::opmonlib::MonitorableObject
using NodePtr = std::weak_ptr<MonitorableObject>
 
using NewNodePtr = std::shared_ptr<MonitorableObject>
 
using ElementId = std::string
 

Public Member Functions

 SourceModel ()
 SourceModel Constructor.
 
 ~SourceModel ()
 
void acquire_callback () override
 
void handle_daq_frame (char *buffer, std::size_t size)
 
void generate_opmon_data () override
 
- Public Member Functions inherited from dunedaq::dpdklibs::SourceConcept
 SourceConcept ()
 
virtual ~SourceConcept ()
 
 SourceConcept (const SourceConcept &)=delete
 SourceConcept is not copy-constructible.
 
SourceConceptoperator= (const SourceConcept &)=delete
 SourceConcept is not copy-assginable.
 
 SourceConcept (SourceConcept &&)=delete
 SourceConcept is not move-constructible.
 
SourceConceptoperator= (SourceConcept &&)=delete
 SourceConcept is not move-assignable.
 
void set_sink_config (const appmodel::DataMoveCallbackConf *sink_conf)
 
void disable_daq_protocol_checks ()
 
- Public Member Functions inherited from dunedaq::opmonlib::MonitorableObject
 MonitorableObject (const MonitorableObject &)=delete
 
MonitorableObjectoperator= (const MonitorableObject &)=delete
 
 MonitorableObject (MonitorableObject &&)=delete
 
MonitorableObjectoperator= (MonitorableObject &&)=delete
 
virtual ~MonitorableObject ()=default
 
auto get_opmon_id () const noexcept
 
auto get_opmon_level () const noexcept
 

Private Types

using sink_cb_t = std::shared_ptr<std::function<void(TargetPayloadType&&)>>
 

Private Attributes

const std::size_t m_expected_frame_size = sizeof(TargetPayloadType)
 
bool m_callback_is_acquired { false }
 
sink_cb_t m_sink_callback
 
std::atomic< uint64_t > m_leftover_bytes_encountered {0}
 
std::atomic< uint64_t > m_failed_to_send_daq_payloads {0}
 

Additional Inherited Members

- Static Public Member Functions inherited from dunedaq::opmonlib::MonitorableObject
static bool publishable_metric (OpMonLevel entry, OpMonLevel system) noexcept
 
- Public Attributes inherited from dunedaq::dpdklibs::SourceConcept
const appmodel::DataMoveCallbackConfm_sink_conf
 
bool m_daq_protocol_ensured { true }
 
- Protected Member Functions inherited from dunedaq::opmonlib::MonitorableObject
 MonitorableObject ()=default
 
void register_node (ElementId name, NewNodePtr)
 
void publish (google::protobuf::Message &&, CustomOrigin &&co={}, OpMonLevel l=to_level(EntryOpMonLevel::kDefault)) const noexcept
 

Detailed Description

template<class TargetPayloadType>
class dunedaq::dpdklibs::SourceModel< TargetPayloadType >

Definition at line 35 of file SourceModel.hpp.

Member Typedef Documentation

◆ data_t

template<class TargetPayloadType >
using dunedaq::dpdklibs::SourceModel< TargetPayloadType >::data_t = nlohmann::json

Definition at line 40 of file SourceModel.hpp.

◆ inherited

template<class TargetPayloadType >
using dunedaq::dpdklibs::SourceModel< TargetPayloadType >::inherited = SourceConcept

Definition at line 39 of file SourceModel.hpp.

◆ sink_cb_t

template<class TargetPayloadType >
using dunedaq::dpdklibs::SourceModel< TargetPayloadType >::sink_cb_t = std::shared_ptr<std::function<void(TargetPayloadType&&)>>
private

Definition at line 110 of file SourceModel.hpp.

◆ sink_t

template<class TargetPayloadType >
using dunedaq::dpdklibs::SourceModel< TargetPayloadType >::sink_t = iomanager::SenderConcept<TargetPayloadType>

Definition at line 38 of file SourceModel.hpp.

Constructor & Destructor Documentation

◆ SourceModel()

template<class TargetPayloadType >
dunedaq::dpdklibs::SourceModel< TargetPayloadType >::SourceModel ( )
inline

SourceModel Constructor.

Parameters
nameInstance name for this SourceModel instance

Definition at line 46 of file SourceModel.hpp.

◆ ~SourceModel()

template<class TargetPayloadType >
dunedaq::dpdklibs::SourceModel< TargetPayloadType >::~SourceModel ( )
inline

Definition at line 49 of file SourceModel.hpp.

49{}

Member Function Documentation

◆ acquire_callback()

template<class TargetPayloadType >
void dunedaq::dpdklibs::SourceModel< TargetPayloadType >::acquire_callback ( )
inlineoverridevirtual

Implements dunedaq::dpdklibs::SourceConcept.

Definition at line 51 of file SourceModel.hpp.

52 {
54 TLOG_DEBUG(5) << "SourceModel callback is already acquired!";
55 } else {
56 // Getting DataMoveCBRegistry
58 m_sink_callback = dmcbr->get_callback<TargetPayloadType>(inherited::m_sink_conf);
60 }
61 }
static std::shared_ptr< DataMoveCallbackRegistry > get()
const appmodel::DataMoveCallbackConf * m_sink_conf
#define TLOG_DEBUG(lvl,...)
Definition Logging.hpp:112

◆ generate_opmon_data()

template<class TargetPayloadType >
void dunedaq::dpdklibs::SourceModel< TargetPayloadType >::generate_opmon_data ( )
inlineoverridevirtual

Hook for customisable pubblication. The function can throw, exception will be caught by the monitoring thread

Reimplemented from dunedaq::opmonlib::MonitorableObject.

Definition at line 91 of file SourceModel.hpp.

91 {
92
95 }
96
97 opmon::SourceInfo info;
98 info.set_failed_to_send_daq_payloads( m_failed_to_send_daq_payloads.exchange(0) );
99 info.set_leftover_bytes_encountered( m_leftover_bytes_encountered.exchange(0) );
100
101 publish( std::move(info) );
102 }
#define ERS_HERE
std::atomic< uint64_t > m_failed_to_send_daq_payloads
std::atomic< uint64_t > m_leftover_bytes_encountered
void publish(google::protobuf::Message &&, CustomOrigin &&co={}, OpMonLevel l=to_level(EntryOpMonLevel::kDefault)) const noexcept
void warning(const Issue &issue)
Definition ers.hpp:115

◆ handle_daq_frame()

template<class TargetPayloadType >
void dunedaq::dpdklibs::SourceModel< TargetPayloadType >::handle_daq_frame ( char * buffer,
std::size_t size )
inlinevirtual

Implements dunedaq::dpdklibs::SourceConcept.

Definition at line 64 of file SourceModel.hpp.

65 {
66 // Calculate how many full frames fit in the incoming message buffer.
67 std::size_t full_frames = size / m_expected_frame_size;
68
69 // Calculate leftover bytes that don't form a complete frame.
70 if (size % m_expected_frame_size > 0) [[unlikely]] {
72 }
73
74 // Process each full frames
75 for (std::size_t i = 0; i < full_frames; ++i) {
76 // Calculate pointer to the i-th frame chunk inside the message buffer.
77 const char* src = buffer + i * m_expected_frame_size;
78
79 // Materialize a real TargetPayloadType object by copying bytes from the buffer.
80 // This is defined behavior, alignment-safe, and fast, without pointer vodoo
81 // Previously reinterpret_cast to TargetPayloadType* introduced alignment traps
82 // “pretend there’s a constructed object there” UB. Scatter won't work like that.
83 TargetPayloadType frame;
84 std::memcpy(&frame, src, m_expected_frame_size);
85
86 // Pass by value (moved); no references into 'buffer', so no UAF.
87 (*m_sink_callback)(std::move(frame));
88 }
89 }
const std::size_t m_expected_frame_size
FELIX Initialization std::string initerror FELIX queue timed std::string queuename Unexpected chunk size

Member Data Documentation

◆ m_callback_is_acquired

template<class TargetPayloadType >
bool dunedaq::dpdklibs::SourceModel< TargetPayloadType >::m_callback_is_acquired { false }
private

Definition at line 109 of file SourceModel.hpp.

109{ false };

◆ m_expected_frame_size

template<class TargetPayloadType >
const std::size_t dunedaq::dpdklibs::SourceModel< TargetPayloadType >::m_expected_frame_size = sizeof(TargetPayloadType)
private

Definition at line 106 of file SourceModel.hpp.

◆ m_failed_to_send_daq_payloads

template<class TargetPayloadType >
std::atomic<uint64_t> dunedaq::dpdklibs::SourceModel< TargetPayloadType >::m_failed_to_send_daq_payloads {0}
private

Definition at line 115 of file SourceModel.hpp.

115{0};

◆ m_leftover_bytes_encountered

template<class TargetPayloadType >
std::atomic<uint64_t> dunedaq::dpdklibs::SourceModel< TargetPayloadType >::m_leftover_bytes_encountered {0}
private

Definition at line 114 of file SourceModel.hpp.

114{0};

◆ m_sink_callback

template<class TargetPayloadType >
sink_cb_t dunedaq::dpdklibs::SourceModel< TargetPayloadType >::m_sink_callback
private

Definition at line 111 of file SourceModel.hpp.


The documentation for this class was generated from the following file: