|
rogue
|
Software SRPv3 server that emulates a hardware SRP endpoint. More...
#include <SrpV3Emulation.h>
Public Member Functions | |
| SrpV3Emulation () | |
| Constructs an SRP v3 server instance. | |
| ~SrpV3Emulation () | |
| Destroys the SRP v3 server instance and frees allocated memory. | |
| void | stop () |
| Stops the worker thread. | |
| void | acceptFrame (std::shared_ptr< rogue::interfaces::stream::Frame > frame) |
| Queues an incoming SRP v3 request frame for processing. | |
Public Member Functions inherited from rogue::interfaces::stream::Master | |
| Master () | |
| Constructs a stream master. | |
| virtual | ~Master () |
| Destroys the stream master. | |
| uint32_t | slaveCount () |
| Returns the number of attached slaves. | |
| void | addSlave (std::shared_ptr< rogue::interfaces::stream::Slave > slave) |
| Attaches a downstream slave. | |
| std::shared_ptr< rogue::interfaces::stream::Frame > | reqFrame (uint32_t size, bool zeroCopyEn) |
| Requests allocation of a new frame from the primary slave. | |
| void | sendFrame (std::shared_ptr< rogue::interfaces::stream::Frame > frame) |
| Sends a frame to all attached slaves. | |
| bool | ensureSingleBuffer (std::shared_ptr< rogue::interfaces::stream::Frame > &frame, bool reqEn) |
| Ensures a frame is represented by a single buffer. | |
| void | equalsPy (boost::python::object p) |
Supports == operator usage from Python. | |
| boost::python::object | rshiftPy (boost::python::object p) |
Supports >> operator usage from Python. | |
| void | operator== (std::shared_ptr< rogue::interfaces::stream::Slave > &other) |
Supports == operator usage in C++. | |
| std::shared_ptr< rogue::interfaces::stream::Slave > & | operator>> (std::shared_ptr< rogue::interfaces::stream::Slave > &other) |
| Connects this master to a slave via stream chaining operator. | |
Public Member Functions inherited from rogue::EnableSharedFromThis< rogue::interfaces::stream::Master > | |
| std::shared_ptr< rogue::interfaces::stream::Master > | shared_from_this () |
Returns a shared_ptr<T> for this instance. | |
Public Member Functions inherited from rogue::EnableSharedFromThisBase | |
| virtual | ~EnableSharedFromThisBase () |
| Virtual destructor for polymorphic base usage. | |
Public Member Functions inherited from rogue::interfaces::stream::Slave | |
| Slave () | |
| Constructs a stream slave. | |
| virtual | ~Slave () |
| Destroys the stream slave. | |
| void | setDebug (uint32_t debug, std::string name) |
| Sets debug message verbosity and logger name. | |
| uint64_t | getFrameCount () |
| Returns frame counter. | |
| uint64_t | getByteCount () |
| Returns byte counter. | |
| bool | ensureSingleBuffer (std::shared_ptr< rogue::interfaces::stream::Frame > &frame, bool reqEn) |
| Ensures frame is backed by a single buffer. | |
| std::shared_ptr< rogue::interfaces::stream::Frame > | reqLocalFrame (uint32_t size, bool zeroCopyEn) |
| Services a local frame allocation request through this object's pool interface. | |
| boost::python::object | lshiftPy (boost::python::object p) |
Supports << operator usage from Python. | |
| std::shared_ptr< rogue::interfaces::stream::Master > & | operator<< (std::shared_ptr< rogue::interfaces::stream::Master > &other) |
| Connects this slave to a master via stream chaining operator. | |
Public Member Functions inherited from rogue::interfaces::stream::Pool | |
| Pool () | |
| Constructs a pool with default allocation behavior enabled. | |
| virtual | ~Pool () |
| Destroys the pool and releases any cached buffer storage. | |
| uint32_t | getAllocBytes () |
| Returns total currently allocated bytes. | |
| uint32_t | getAllocCount () |
| Returns total currently allocated buffer count. | |
| virtual std::shared_ptr< rogue::interfaces::stream::Frame > | acceptReq (uint32_t size, bool zeroCopyEn) |
| Services a frame allocation request from a master. | |
| virtual void | retBuffer (uint8_t *data, uint32_t meta, uint32_t size) |
| Returns buffer data to the allocator. | |
| void | setFixedSize (uint32_t size) |
| Sets fixed-size mode. | |
| uint32_t | getFixedSize () |
| Returns fixed-size allocation setting. | |
| void | setPoolSize (uint32_t size) |
| Sets buffer pool size. | |
| uint32_t | getPoolSize () |
| Returns configured maximum number of cached pool entries. | |
Public Member Functions inherited from rogue::EnableSharedFromThis< rogue::interfaces::stream::Pool > | |
| std::shared_ptr< rogue::interfaces::stream::Pool > | shared_from_this () |
Returns a shared_ptr<T> for this instance. | |
Public Member Functions inherited from rogue::EnableSharedFromThis< rogue::interfaces::stream::Slave > | |
| std::shared_ptr< rogue::interfaces::stream::Slave > | shared_from_this () |
Returns a shared_ptr<T> for this instance. | |
Static Public Member Functions | |
| static std::shared_ptr< rogue::protocols::srp::SrpV3Emulation > | create () |
| Creates an SRP v3 server instance. | |
| static void | setup_python () |
| Registers Python bindings for this class. | |
Static Public Member Functions inherited from rogue::interfaces::stream::Master | |
| static std::shared_ptr< rogue::interfaces::stream::Master > | create () |
| Creates a stream master. | |
| static void | setup_python () |
| Registers this type with Python bindings. | |
Static Public Member Functions inherited from rogue::interfaces::stream::Slave | |
| static std::shared_ptr< rogue::interfaces::stream::Slave > | create () |
| Creates a new stream slave. | |
| static void | setup_python () |
| Registers this type with Python bindings. | |
Static Public Member Functions inherited from rogue::interfaces::stream::Pool | |
| static void | setup_python () |
| Registers this type with Python bindings. | |
Additional Inherited Members | |
Protected Member Functions inherited from rogue::interfaces::stream::Pool | |
| std::shared_ptr< rogue::interfaces::stream::Buffer > | allocBuffer (uint32_t size, uint32_t *total) |
| Allocate a buffer passed size. | |
| std::shared_ptr< rogue::interfaces::stream::Buffer > | createBuffer (void *data, uint32_t meta, uint32_t size, uint32_t alloc) |
| Creates a Buffer with a pre-allocated data block. | |
| void | decCounter (uint32_t alloc) |
| Decrements allocation counter. | |
Software SRPv3 server that emulates a hardware SRP endpoint.
SrpV3Emulation acts as the remote endpoint of the SRPv3 protocol, receiving SRPv3 request frames and producing SRPv3 response frames. It maintains an internal memory space, enabling full software-only testing of the SRPv3 protocol path without FPGA or ASIC hardware.
Typical CI/test usage connects SrpV3 (the client/master) to SrpV3Emulation via a bidirectional stream path:
When a request frame arrives via acceptFrame(), the server queues the frame for processing on an internal worker thread. The worker:
The worker thread avoids a deadlock that would occur if response frames were sent synchronously inside acceptFrame(), since SrpV3 holds a transaction lock during its doTransaction() call chain.
Memory is allocated on demand in 4 KiB pages, similar to rogue::interfaces::memory::Emulate.
Threading/locking model:
acceptFrame() queues frames and returns immediately.Protocol reference: https://confluence.slac.stanford.edu/x/cRmVD
Definition at line 79 of file SrpV3Emulation.h.
| rogue::protocols::srp::SrpV3Emulation::SrpV3Emulation | ( | ) |
Constructs an SRP v3 server instance.
Constructor.
This constructor is a low-level C++ allocation path. Prefer create() when shared ownership or Python exposure is required. Starts an internal worker thread for processing queued request frames.
Definition at line 64 of file SrpV3Emulation.cpp.
| rogue::protocols::srp::SrpV3Emulation::~SrpV3Emulation | ( | ) |
Destroys the SRP v3 server instance and frees allocated memory.
Destructor.
Definition at line 72 of file SrpV3Emulation.cpp.
|
virtual |
Queues an incoming SRP v3 request frame for processing.
Queue an incoming frame for processing.
The frame is added to an internal queue and processed asynchronously by the worker thread. This avoids the deadlock that would occur from sending a response synchronously inside the calling thread's transaction lock scope.
| frame | Received SRP request stream frame. |
Reimplemented from rogue::interfaces::stream::Slave.
Definition at line 194 of file SrpV3Emulation.cpp.
|
static |
Creates an SRP v3 server instance.
Class creation.
This static factory is the preferred construction path when the object is shared across Rogue graph connections or exposed to Python. It returns std::shared_ptr ownership compatible with Rogue pointer typedefs.
SrpV3Emulation.Description :
This file is part of the rogue software platform. It is subject to the license terms in the LICENSE.txt file found in the top-level directory of this distribution and at: https://confluence.slac.stanford.edu/display/ppareg/LICENSE.html. No part of the rogue software platform, including this file, may be copied, modified, propagated, or distributed except according to the terms
Definition at line 47 of file SrpV3Emulation.cpp.
|
static |
Registers Python bindings for this class.
Setup class in python.
Definition at line 53 of file SrpV3Emulation.cpp.
|
virtual |
Stops the worker thread.
Stop the worker thread.
Called during shutdown to cleanly stop the processing thread.
Reimplemented from rogue::interfaces::stream::Master.
Definition at line 83 of file SrpV3Emulation.cpp.