QuISP
Loading...
Searching...
No Matches
quisp::modules::ConnectionManager Class Reference

ConnectionManager. More...

#include <ConnectionManager.cc>

Inheritance diagram for quisp::modules::ConnectionManager:
Collaboration diagram for quisp::modules::ConnectionManager:

Public Member Functions

 ConnectionManager ()
 
 ~ConnectionManager ()
 
- Public Member Functions inherited from quisp::modules::IConnectionManager
virtual ~IConnectionManager ()
 
- Public Member Functions inherited from quisp::modules::Logger::LoggerBase
 LoggerBase ()
 
 ~LoggerBase ()
 
void initializeLogger (utils::ComponentProvider &provider)
 

Public Attributes

utils::ComponentProvider provider
 

Protected Member Functions

void initialize () override
 
void handleMessage (cMessage *msg) override
 
void respondToRequest (messages::ConnectionSetupRequest *pk)
 
void respondToRequest_deprecated (messages::ConnectionSetupRequest *pk)
 
void tryRelayRequestToNextHop (messages::ConnectionSetupRequest *pk)
 
void queueApplicationRequest (messages::ConnectionSetupRequest *pk)
 
void initiateApplicationRequest (int qnic_address)
 
void scheduleRequestRetry (int qnic_address)
 
void popApplicationRequest (int qnic_address)
 
void storeRuleSetForApplication (messages::ConnectionSetupResponse *pk)
 
void storeRuleSet (messages::ConnectionSetupResponse *pk)
 
void initiator_reject_req_handler (messages::RejectConnectionSetupRequest *pk)
 
void responder_reject_req_handler (messages::RejectConnectionSetupRequest *pk)
 
void intermediate_reject_req_handler (messages::RejectConnectionSetupRequest *pk)
 
void rejectRequest (messages::ConnectionSetupRequest *req)
 
void reserveQnic (int qnic_address)
 
void releaseQnic (int qnic_address)
 
bool isQnicBusy (int qnic_address)
 
unsigned long createUniqueId () override
 

Static Protected Member Functions

static rules::PurType parsePurType (const std::string &pur_type)
 

Protected Attributes

int my_address
 
int num_of_qnics
 
std::map< int, std::queue< messages::ConnectionSetupRequest * > > connection_setup_buffer
 
std::map< int, int > connection_retry_count
 
std::vector< int > reserved_qnics = {}
 
std::vector< cMessage * > request_send_timing
 
bool simultaneous_es_enabled
 
bool es_with_purify = false
 
int num_remote_purification
 
double threshold_fidelity
 
rules::PurType purification_type
 
IRoutingDaemonrouting_daemon
 
IHardwareMonitorhardware_monitor
 
- Protected Attributes inherited from quisp::modules::Logger::LoggerBase
ILoggerlogger = nullptr
 

Detailed Description

ConnectionManager.

The ConnectionManager is one of the five key modules in the software for a quantum repeater/router (qrsa). It is responsible for managing the connections: initiating ConnectionSetupRequests, behaving as responder for a ConnectionSetupRequest (which involves actually creating the RuleSets), and handling the requests and responses as the move along the path at setup time.

It communicates with the RuleEngine, which is responsible for actually executing the Rules as it is notified of events, but the ConnectionManager has nothing to do with the actual processing of the quantum states as they evolve.

You will see member functions for the roles as initiator, responder, and intermediate node. The main tasks are to respond to ConnectionSetupRequest, ConnectionSetupResponse, RejectConnectionSetupRequest, and ConnectionTeardown messages.

It is also responsible for the end-to-end reservation of resources, as dictated by the multiplexing (muxing) discipline in use.

Constructor & Destructor Documentation

◆ ConnectionManager()

quisp::modules::ConnectionManager::ConnectionManager ( )

◆ ~ConnectionManager()

quisp::modules::ConnectionManager::~ConnectionManager ( )

Member Function Documentation

◆ createUniqueId()

unsigned long quisp::modules::ConnectionManager::createUniqueId ( )
overrideprotectedvirtual

◆ handleMessage()

void quisp::modules::ConnectionManager::handleMessage ( cMessage * msg)
overrideprotected

The catch-all handler for messages received. Needs to confirm the packet type and call the appropriate lower-level handler.

Parameters
msgpointer to the cMessage itself

◆ initialize()

void quisp::modules::ConnectionManager::initialize ( )
overrideprotected

◆ initiateApplicationRequest()

void quisp::modules::ConnectionManager::initiateApplicationRequest ( int qnic_address)
protected

◆ initiator_reject_req_handler()

void quisp::modules::ConnectionManager::initiator_reject_req_handler ( messages::RejectConnectionSetupRequest * pk)
protected

◆ intermediate_reject_req_handler()

void quisp::modules::ConnectionManager::intermediate_reject_req_handler ( messages::RejectConnectionSetupRequest * pk)
protected

This function is called during the handling of ConnectionSetupRequest at an intermediate node (not the initator or responder).

Parameters
pkpointer to the ConnectionSetupRequest packet itself
Returns
nothing This function is called when we discover that we can't fulfill the connection request, primarily due to resource reservation conflicts.

◆ isQnicBusy()

bool quisp::modules::ConnectionManager::isQnicBusy ( int qnic_address)
protected

◆ parsePurType()

PurType quisp::modules::ConnectionManager::parsePurType ( const std::string & pur_type)
staticprotected

◆ popApplicationRequest()

void quisp::modules::ConnectionManager::popApplicationRequest ( int qnic_address)
protected

◆ queueApplicationRequest()

void quisp::modules::ConnectionManager::queueApplicationRequest ( messages::ConnectionSetupRequest * pk)
protected

◆ rejectRequest()

void quisp::modules::ConnectionManager::rejectRequest ( messages::ConnectionSetupRequest * req)
protected

◆ releaseQnic()

void quisp::modules::ConnectionManager::releaseQnic ( int qnic_address)
protected

◆ reserveQnic()

void quisp::modules::ConnectionManager::reserveQnic ( int qnic_address)
protected

◆ responder_reject_req_handler()

void quisp::modules::ConnectionManager::responder_reject_req_handler ( messages::RejectConnectionSetupRequest * pk)
protected

This function is called during the handling of ConnectionSetupRequest at the responder.

Parameters
pkpointer to the ConnectionSetupRequest packet itself
Returns
nothing This function is called when we discover that we can't fulfill the connection request, primarily due to resource reservation conflicts.

◆ respondToRequest()

void quisp::modules::ConnectionManager::respondToRequest ( messages::ConnectionSetupRequest * pk)
protected

This function is called to handle the ConnectionSetupRequest at the responder. This is where much of the work happens, and there is the potential for new value if you have a better way to do this.

Parameters
pkpointer to the ConnectionSetupRequest packet itself
Returns
nothing

The procedure:

* 1. check the qnic is busy or not
* 2. generate all the RuleSets by calling RuleSetGenerator
* 3. reserve the qnic for the connection
* 4. return ConnectionSetupResponse to each node in this connection.
* 

◆ respondToRequest_deprecated()

void quisp::modules::ConnectionManager::respondToRequest_deprecated ( messages::ConnectionSetupRequest * pk)
protected

◆ scheduleRequestRetry()

void quisp::modules::ConnectionManager::scheduleRequestRetry ( int qnic_address)
protected

◆ storeRuleSet()

void quisp::modules::ConnectionManager::storeRuleSet ( messages::ConnectionSetupResponse * pk)
protected

This function is called to handle the ConnectionSetupResponse at the intermediate node. The only job here is to unpack the RuleSets, feed them to the RuleEngine via Router, and start the connection running. Probably should also let the Application know that the setup is complete and running.

Parameters
pkthe received ConnectionSetupResponse.

◆ storeRuleSetForApplication()

void quisp::modules::ConnectionManager::storeRuleSetForApplication ( messages::ConnectionSetupResponse * pk)
protected

This method is called to handle the ConnectionSetupResponse at an end node. The only job here is to unpack the RuleSets, feed them to the RuleEngine via Router, and start the connection running.

Parameters
pkthe received ConnectionSetupResponse.

◆ tryRelayRequestToNextHop()

void quisp::modules::ConnectionManager::tryRelayRequestToNextHop ( messages::ConnectionSetupRequest * pk)
protected

This method is called to handle the ConnectionSetupRequest at an intermediate. This method reserves requested qnics and then send the request to next hop. If the QNIC cannot be reserved the ConnectionSetupRequest will be rejected.

Parameters
reqpointer to the ConnectionSetupRequest packet itself
Returns
nothing

Member Data Documentation

◆ connection_retry_count

std::map<int, int> quisp::modules::ConnectionManager::connection_retry_count
protected

◆ connection_setup_buffer

std::map<int, std::queue<messages::ConnectionSetupRequest *> > quisp::modules::ConnectionManager::connection_setup_buffer
protected

◆ es_with_purify

bool quisp::modules::ConnectionManager::es_with_purify = false
protected

◆ hardware_monitor

IHardwareMonitor* quisp::modules::ConnectionManager::hardware_monitor
protected

◆ my_address

int quisp::modules::ConnectionManager::my_address
protected

◆ num_of_qnics

int quisp::modules::ConnectionManager::num_of_qnics
protected

◆ num_remote_purification

int quisp::modules::ConnectionManager::num_remote_purification
protected

◆ provider

utils::ComponentProvider quisp::modules::ConnectionManager::provider

◆ purification_type

rules::PurType quisp::modules::ConnectionManager::purification_type
protected

◆ request_send_timing

std::vector<cMessage *> quisp::modules::ConnectionManager::request_send_timing
protected

◆ reserved_qnics

std::vector<int> quisp::modules::ConnectionManager::reserved_qnics = {}
protected

◆ routing_daemon

IRoutingDaemon* quisp::modules::ConnectionManager::routing_daemon
protected

◆ simultaneous_es_enabled

bool quisp::modules::ConnectionManager::simultaneous_es_enabled
protected

◆ threshold_fidelity

double quisp::modules::ConnectionManager::threshold_fidelity
protected

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