rogue
Loading...
Searching...
No Matches
Public Member Functions | Static Public Member Functions | List of all members
rogue::protocols::srp::SrpV3Emulation Class Reference

Software SRPv3 server that emulates a hardware SRP endpoint. More...

#include <SrpV3Emulation.h>

Inheritance diagram for rogue::protocols::srp::SrpV3Emulation:
rogue::interfaces::stream::Master rogue::interfaces::stream::Slave rogue::EnableSharedFromThis< rogue::interfaces::stream::Master > rogue::interfaces::stream::Pool rogue::EnableSharedFromThis< rogue::interfaces::stream::Slave > rogue::EnableSharedFromThisBase rogue::EnableSharedFromThis< rogue::interfaces::stream::Pool > rogue::EnableSharedFromThisBase rogue::EnableSharedFromThisBase

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::FramereqFrame (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::Mastershared_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::FramereqLocalFrame (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::FrameacceptReq (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::Poolshared_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::Slaveshared_from_this ()
 Returns a shared_ptr<T> for this instance.
 

Static Public Member Functions

static std::shared_ptr< rogue::protocols::srp::SrpV3Emulationcreate ()
 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::Mastercreate ()
 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::Slavecreate ()
 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::BufferallocBuffer (uint32_t size, uint32_t *total)
 Allocate a buffer passed size.
 
std::shared_ptr< rogue::interfaces::stream::BuffercreateBuffer (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.
 

Detailed Description

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:

SrpV3 (client) == SrpV3Emulation (server)
SrpV3Emulation()
Constructs an SRP v3 server instance.
SRP v3 bridge between Rogue memory transactions and stream frames.
Definition SrpV3.h:87

When a request frame arrives via acceptFrame(), the server queues the frame for processing on an internal worker thread. The worker:

  1. Decodes the SRPv3 header (version, opcode, transaction ID, address, size).
  2. For write/post requests: copies payload data into internal memory.
  3. For read requests: copies data from internal memory into the response.
  4. Builds and sends a response frame with the original header and a zero status tail (indicating success).
  5. For posted writes, no response frame is sent.

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:

Protocol reference: https://confluence.slac.stanford.edu/x/cRmVD

Definition at line 79 of file SrpV3Emulation.h.

Constructor & Destructor Documentation

◆ SrpV3Emulation()

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.

◆ ~SrpV3Emulation()

rogue::protocols::srp::SrpV3Emulation::~SrpV3Emulation ( )

Destroys the SRP v3 server instance and frees allocated memory.

Destructor.

Definition at line 72 of file SrpV3Emulation.cpp.

Member Function Documentation

◆ acceptFrame()

void rogue::protocols::srp::SrpV3Emulation::acceptFrame ( std::shared_ptr< rogue::interfaces::stream::Frame frame)
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.

Parameters
frameReceived SRP request stream frame.

Reimplemented from rogue::interfaces::stream::Slave.

Definition at line 194 of file SrpV3Emulation.cpp.

◆ create()

rogue::protocols::srp::SrpV3EmulationPtr rogue::protocols::srp::SrpV3Emulation::create ( )
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.

Returns
Shared pointer to the created SrpV3Emulation.

Company : SLAC National Accelerator Laboratory

Description :

SRP protocol emulation, Version 3

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

contained in the LICENSE.txt file.

Definition at line 47 of file SrpV3Emulation.cpp.

◆ setup_python()

void rogue::protocols::srp::SrpV3Emulation::setup_python ( )
static

Registers Python bindings for this class.

Setup class in python.

Definition at line 53 of file SrpV3Emulation.cpp.

◆ stop()

void rogue::protocols::srp::SrpV3Emulation::stop ( )
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.


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