WIP, moved bool primaryinterface to an int interface_id

This commit is contained in:
2020-04-21 14:34:48 +02:00
parent d8aa1ab08e
commit 6b5511c9e5
7 changed files with 42 additions and 56 deletions

View File

@ -6846,14 +6846,11 @@ int get_receiver_parameters(int file_des) {
n += sendData(file_des,&i32,sizeof(i32),INT32); n += sendData(file_des,&i32,sizeof(i32),INT32);
if (n < 0) return printSocketReadError(); if (n < 0) return printSocketReadError();
// multisize // multisize
i32 = 0;
n += sendData(file_des,&i32,sizeof(i32),INT32); n += sendData(file_des,&i32,sizeof(i32),INT32);
if (n < 0) return printSocketReadError(); if (n < 0) return printSocketReadError();
i32 = 0;
n += sendData(file_des,&i32,sizeof(i32),INT32); n += sendData(file_des,&i32,sizeof(i32),INT32);
if (n < 0) return printSocketReadError(); if (n < 0) return printSocketReadError();
// detId // detId
i32 = 0;
n += sendData(file_des,&i32,sizeof(i32),INT32); n += sendData(file_des,&i32,sizeof(i32),INT32);
if (n < 0) return printSocketReadError(); if (n < 0) return printSocketReadError();
// hostname // hostname
@ -6863,14 +6860,10 @@ int get_receiver_parameters(int file_des) {
n += sendData(file_des, hostname, MAX_STR_LENGTH, OTHER); n += sendData(file_des, hostname, MAX_STR_LENGTH, OTHER);
if (n < 0) return printSocketReadError(); if (n < 0) return printSocketReadError();
} }
// primary interface // interface id
{ n += sendData(file_des,&i32,sizeof(i32),INT32);
char c = '0'; if (n < 0) return printSocketReadError();
n += sendData(file_des, &c, 1, OTHER);
if (n < 0) return printSocketReadError();
}
// zmq ip // zmq ip
i32 = 0;
n += sendData(file_des,&i32,sizeof(i32),INT32); n += sendData(file_des,&i32,sizeof(i32),INT32);
if (n < 0) return printSocketReadError(); if (n < 0) return printSocketReadError();
// end of shared memory variables in struct // end of shared memory variables in struct

View File

@ -213,8 +213,8 @@ void DetectorImpl::initializeMembers(bool verify) {
receivers.resize(numModules); receivers.resize(numModules);
for (int iReceiver = 0; iReceiver < numReceivers; ++iReceiver) { for (int iReceiver = 0; iReceiver < numReceivers; ++iReceiver) {
receivers[iModule].push_back( receivers[iModule].push_back(
sls::make_unique<Receiver>(detectorId, iModule, iReceiver, sls::make_unique<Receiver>(detectorId, iModule, 0,
true, verify)); iReceiver, verify));
} }
} }
int numReceivers2 = detectors[iModule]->getNumberOfReceivers2(); int numReceivers2 = detectors[iModule]->getNumberOfReceivers2();
@ -222,8 +222,8 @@ void DetectorImpl::initializeMembers(bool verify) {
receivers2.resize(numModules); receivers2.resize(numModules);
for (int iReceiver = 0; iReceiver < numReceivers2; ++iReceiver) { for (int iReceiver = 0; iReceiver < numReceivers2; ++iReceiver) {
receivers2[iModule].push_back( receivers2[iModule].push_back(
sls::make_unique<Receiver>(detectorId, iModule, iReceiver, sls::make_unique<Receiver>(detectorId, iModule, 1,
false, verify)); iReceiver, verify));
} }
} }
} }
@ -373,7 +373,7 @@ void DetectorImpl::initReceiver(const int udpInterface) {
receivers.resize(detectors.size()); receivers.resize(detectors.size());
receivers[iModule].push_back( receivers[iModule].push_back(
sls::make_unique<Receiver>(detectorId, iModule, 0, sls::make_unique<Receiver>(detectorId, iModule, 0,
true, tcpPort++, "", zmqPort++)); 0, tcpPort++, "", zmqPort++));
detectors[iModule]->setNumberOfReceivers(1); detectors[iModule]->setNumberOfReceivers(1);
} }
} catch (...) { } catch (...) {
@ -390,8 +390,8 @@ void DetectorImpl::initReceiver(const int udpInterface) {
for (int iModule = 0; iModule < size(); ++iModule) { for (int iModule = 0; iModule < size(); ++iModule) {
receivers2.resize(detectors.size()); receivers2.resize(detectors.size());
receivers2[iModule].push_back( receivers2[iModule].push_back(
sls::make_unique<Receiver>(detectorId, iModule, 0, sls::make_unique<Receiver>(detectorId, iModule, 1,
false, tcpPort++, "", zmqPort++)); 0, tcpPort++, "", zmqPort++));
detectors[iModule]->setNumberOfReceivers2(1); detectors[iModule]->setNumberOfReceivers2(1);
} }
} catch (...) { } catch (...) {

View File

@ -99,11 +99,11 @@ Ret Receiver::sendToReceiver(int fnum, const Arg &args) const{
// create shm // create shm
Receiver::Receiver(int detector_id, int module_id, int receiver_id, Receiver::Receiver(int detector_id, int module_id, int interface_id,
bool primaryInterface, int tcp_port, std::string hostname, int receiver_id, int tcp_port, std::string hostname,
int zmq_port) : int zmq_port) :
receiverId(receiver_id), moduleId(module_id), receiverId(receiver_id), interfaceId(interface_id), moduleId(module_id),
shm(detector_id, module_id, receiver_id, primaryInterface) { shm(detector_id, module_id, interface_id, receiver_id) {
// ensure shared memory was not created before // ensure shared memory was not created before
if (shm.IsExisting()) { if (shm.IsExisting()) {
@ -112,15 +112,14 @@ Receiver::Receiver(int detector_id, int module_id, int receiver_id,
<< shm.GetName() << ". Freeing it again"; << shm.GetName() << ". Freeing it again";
shm.RemoveSharedMemory(); shm.RemoveSharedMemory();
} }
shm = SharedMemory<sharedReceiver>(detector_id, module_id, receiver_id, shm = SharedMemory<sharedReceiver>(detector_id, module_id, interface_id,
primaryInterface); receiver_id);
shm.CreateSharedMemory(); shm.CreateSharedMemory();
// initalize receiver structure // initalize receiver structure
shm()->shmversion = RECEIVER_SHMVERSION; shm()->shmversion = RECEIVER_SHMVERSION;
memset(shm()->hostname, 0, MAX_STR_LENGTH); memset(shm()->hostname, 0, MAX_STR_LENGTH);
shm()->tcpPort = DEFAULT_RX_PORTNO + receiver_id; shm()->tcpPort = DEFAULT_RX_PORTNO + receiver_id;
shm()->primaryInterface = primaryInterface;
shm()-> stoppedFlag = false; shm()-> stoppedFlag = false;
shm()->zmqPort = DEFAULT_ZMQ_RX_PORTNO + receiver_id; shm()->zmqPort = DEFAULT_ZMQ_RX_PORTNO + receiver_id;
shm()->zmqIp = IpAddr{}; shm()->zmqIp = IpAddr{};
@ -138,10 +137,10 @@ Receiver::Receiver(int detector_id, int module_id, int receiver_id,
} }
// open shm // open shm
Receiver::Receiver(int detector_id, int module_id, int receiver_id, Receiver::Receiver(int detector_id, int module_id, int interface_id,
bool primaryInterface, bool verify) : int receiver_id, bool verify) :
receiverId(receiver_id), moduleId(module_id), receiverId(receiver_id), interfaceId(interface_id), moduleId(module_id),
shm(detector_id, module_id, receiver_id, primaryInterface) { shm(detector_id, module_id, interface_id, receiver_id) {
shm.OpenSharedMemory(); shm.OpenSharedMemory();
if (verify && shm()->shmversion != RECEIVER_SHMVERSION) { if (verify && shm()->shmversion != RECEIVER_SHMVERSION) {
std::ostringstream ss; std::ostringstream ss;
@ -205,8 +204,8 @@ sls::MacAddr Receiver::configure(slsDetectorDefs::rxParameters arg) {
// hostname // hostname
memset(arg.hostname, 0, sizeof(arg.hostname)); memset(arg.hostname, 0, sizeof(arg.hostname));
strcpy_safe(arg.hostname, shm()->hostname); strcpy_safe(arg.hostname, shm()->hostname);
// primary interface // interface id
arg.primaryInterface = shm()->primaryInterface; arg.interfaceId = interfaceId;
// zmqip // zmqip
{ {
sls::IpAddr ip; sls::IpAddr ip;
@ -230,7 +229,7 @@ sls::MacAddr Receiver::configure(slsDetectorDefs::rxParameters arg) {
<< "detectorSize.y:" << arg.detectorSize.y << std::endl << "detectorSize.y:" << arg.detectorSize.y << std::endl
<< "moduleId:" << arg.moduleId << std::endl << "moduleId:" << arg.moduleId << std::endl
<< "hostname:" << arg.hostname << std::endl << "hostname:" << arg.hostname << std::endl
<< "primary Interace: " << arg.primaryInterface << std::endl << "interfaceId: " << arg.interfaceId << std::endl
<< "zmq ip:" << arg.zmq_ip << std::endl << "zmq ip:" << arg.zmq_ip << std::endl
<< "udpInterfaces:" << arg.udpInterfaces << std::endl << "udpInterfaces:" << arg.udpInterfaces << std::endl
<< "udp_dstport:" << arg.udp_dstport << std::endl << "udp_dstport:" << arg.udp_dstport << std::endl

View File

@ -6,7 +6,7 @@
#include <map> #include <map>
#define RECEIVER_SHMVERSION 0x200417 #define RECEIVER_SHMVERSION 0x200421
namespace sls { namespace sls {
struct sharedReceiver { struct sharedReceiver {
@ -15,7 +15,6 @@ namespace sls {
int shmversion; int shmversion;
char hostname[MAX_STR_LENGTH]; char hostname[MAX_STR_LENGTH];
int tcpPort; int tcpPort;
bool primaryInterface;
/** END OF FIXED PATTERN -----------------------------------------------*/ /** END OF FIXED PATTERN -----------------------------------------------*/
int stoppedFlag; int stoppedFlag;
@ -28,12 +27,12 @@ namespace sls {
public: public:
static size_t getNumReceivers(); static size_t getNumReceivers();
// create shm // create shm
explicit Receiver(int detector_id, int module_id, int receiver_id, explicit Receiver(int detector_id, int module_id, int interface_id,
bool primaryInterface, int tcp_port = 0, std::string hostname = "", int receiver_id, int tcp_port = 0, std::string hostname = "",
int zmq_port = 0); int zmq_port = 0);
// open shm // open shm
explicit Receiver(int detector_id, int module_id, int receiver_id, explicit Receiver(int detector_id, int module_id, int interface_id,
bool primaryInterface, bool verify); int receiver_id, bool verify);
virtual ~Receiver(); virtual ~Receiver();
@ -148,8 +147,9 @@ namespace sls {
void checkVersionCompatibility(); void checkVersionCompatibility();
const int receiverId{0}; const int receiverId{0};
const int interfaceId{0};
const int moduleId{0}; const int moduleId{0};
mutable sls::SharedMemory<sharedReceiver> shm{0, 0, 0, true}; mutable sls::SharedMemory<sharedReceiver> shm{0, 0, 0, 0};
}; };
} // sls } // sls

View File

@ -24,8 +24,7 @@
#define SHM_MULTI_PREFIX "/slsDetectorPackage_multi_" #define SHM_MULTI_PREFIX "/slsDetectorPackage_multi_"
#define SHM_MODULE_PREFIX "_module_" #define SHM_MODULE_PREFIX "_module_"
#define SHM_RECEIVER_PREFIX "_receiver_" #define SHM_RECEIVER_PREFIX "_receiver" //interface_id + '_'
#define SHM_RECEIVER2_PREFIX "_receiver2_"
#define SHM_ENV_NAME "SLSDETNAME" #define SHM_ENV_NAME "SLSDETNAME"
#include <iostream> #include <iostream>
@ -41,12 +40,12 @@ class SharedMemory {
* Constructor * Constructor
* creates the single/multi detector shared memory name * creates the single/multi detector shared memory name
* @param multiId multi detector id * @param multiId multi detector id
* @param moduleId module detector id, -1 if a multi detector shared memory * @param moduleId module detectr id, -1 if a multi detector shared memory
* @param receiverId receiver id, -1 if a multi detector or module shared memory * @param interfaceId 0 for primary interface, 1 for secondary
* @param primaryInterface is false, for the second udp port receiver * @param receiverId receiver id, -1 if not a rxr shm, else round robin entry
*/ */
SharedMemory(int multiId, int moduleId, int receiverId = -1, bool primaryInterface = true) { SharedMemory(int multiId, int moduleId, int interfaceId = 0, int receiverId = -1) {
name = ConstructSharedMemoryName(multiId, moduleId, receiverId, primaryInterface); name = ConstructSharedMemoryName(multiId, moduleId, interfaceId, receiverId);
} }
/** /**
@ -221,12 +220,12 @@ class SharedMemory {
* throws exception if name created is longer than required 255(manpages) * throws exception if name created is longer than required 255(manpages)
* @param multiId multi detector id * @param multiId multi detector id
* @param moduleId module detector id, -1 if a multi detector shared memory * @param moduleId module detector id, -1 if a multi detector shared memory
* @param receiverId receiver id, -1 if a multi detector or module shared memory * @param interfaceId 0 for primary interface, 1 for secondary
* @param primaryInterface false, if second udp port receiver * @param receiverId receiver id, -1 if not a rxr shm, else round robin entry
* @returns shared memory name * @returns shared memory name
*/ */
std::string ConstructSharedMemoryName(int multiId, int moduleId, std::string ConstructSharedMemoryName(int multiId, int moduleId,
int receiverId, bool primaryInterface) { int interfaceId = 0, int receiverId = -1) {
// using environment path // using environment path
std::string sEnvPath = ""; std::string sEnvPath = "";
@ -242,15 +241,10 @@ class SharedMemory {
else if (receiverId < 0) else if (receiverId < 0)
ss << SHM_MULTI_PREFIX << multiId << ss << SHM_MULTI_PREFIX << multiId <<
SHM_MODULE_PREFIX << moduleId << sEnvPath; SHM_MODULE_PREFIX << moduleId << sEnvPath;
else if (primaryInterface)
ss << SHM_MULTI_PREFIX << multiId <<
SHM_MODULE_PREFIX << moduleId <<
SHM_RECEIVER_PREFIX << receiverId << sEnvPath;
else else
ss << SHM_MULTI_PREFIX << multiId << ss << SHM_MULTI_PREFIX << multiId <<
SHM_MODULE_PREFIX << moduleId << SHM_MODULE_PREFIX << moduleId <<
SHM_RECEIVER2_PREFIX << receiverId << sEnvPath; SHM_RECEIVER_PREFIX << interfaceId << '_' << receiverId << sEnvPath;
std::string temp = ss.str(); std::string temp = ss.str();
if (temp.length() > NAME_MAX_LENGTH) { if (temp.length() > NAME_MAX_LENGTH) {

View File

@ -334,7 +334,7 @@ int ClientInterface::setup_receiver(Interface &socket) {
<< "detectorSize.y:" << arg.detectorSize.y << std::endl << "detectorSize.y:" << arg.detectorSize.y << std::endl
<< "moduleId:" << arg.moduleId << std::endl << "moduleId:" << arg.moduleId << std::endl
<< "hostname:" << arg.hostname << std::endl << "hostname:" << arg.hostname << std::endl
<< "primary Interace: " << arg.primaryInterface << std::endl << "interfaceId: " << arg.interfaceId << std::endl
<< "zmq ip:" << arg.zmq_ip << std::endl << "zmq ip:" << arg.zmq_ip << std::endl
<< "udpInterfaces:" << arg.udpInterfaces << std::endl << "udpInterfaces:" << arg.udpInterfaces << std::endl
<< "udp_dstport:" << arg.udp_dstport << std::endl << "udp_dstport:" << arg.udp_dstport << std::endl

View File

@ -470,7 +470,7 @@ class slsDetectorDefs {
xy detectorSize; xy detectorSize;
int moduleId{0}; int moduleId{0};
char hostname[MAX_STR_LENGTH]; char hostname[MAX_STR_LENGTH];
bool primaryInterface{true}; int interfaceId{0};
uint32_t zmq_ip{0U}; uint32_t zmq_ip{0U};
int udpInterfaces{1}; int udpInterfaces{1};
int udp_dstport{0}; int udp_dstport{0};