diff --git a/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c b/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c index 500f627e0..fbf15f8a5 100755 --- a/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c +++ b/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c @@ -6846,14 +6846,11 @@ int get_receiver_parameters(int file_des) { n += sendData(file_des,&i32,sizeof(i32),INT32); if (n < 0) return printSocketReadError(); // multisize - i32 = 0; n += sendData(file_des,&i32,sizeof(i32),INT32); if (n < 0) return printSocketReadError(); - i32 = 0; n += sendData(file_des,&i32,sizeof(i32),INT32); if (n < 0) return printSocketReadError(); // detId - i32 = 0; n += sendData(file_des,&i32,sizeof(i32),INT32); if (n < 0) return printSocketReadError(); // hostname @@ -6863,14 +6860,10 @@ int get_receiver_parameters(int file_des) { n += sendData(file_des, hostname, MAX_STR_LENGTH, OTHER); if (n < 0) return printSocketReadError(); } - // primary interface - { - char c = '0'; - n += sendData(file_des, &c, 1, OTHER); - if (n < 0) return printSocketReadError(); - } + // interface id + n += sendData(file_des,&i32,sizeof(i32),INT32); + if (n < 0) return printSocketReadError(); // zmq ip - i32 = 0; n += sendData(file_des,&i32,sizeof(i32),INT32); if (n < 0) return printSocketReadError(); // end of shared memory variables in struct diff --git a/slsDetectorSoftware/src/DetectorImpl.cpp b/slsDetectorSoftware/src/DetectorImpl.cpp index ac9903295..9c48b97ac 100755 --- a/slsDetectorSoftware/src/DetectorImpl.cpp +++ b/slsDetectorSoftware/src/DetectorImpl.cpp @@ -213,8 +213,8 @@ void DetectorImpl::initializeMembers(bool verify) { receivers.resize(numModules); for (int iReceiver = 0; iReceiver < numReceivers; ++iReceiver) { receivers[iModule].push_back( - sls::make_unique(detectorId, iModule, iReceiver, - true, verify)); + sls::make_unique(detectorId, iModule, 0, + iReceiver, verify)); } } int numReceivers2 = detectors[iModule]->getNumberOfReceivers2(); @@ -222,8 +222,8 @@ void DetectorImpl::initializeMembers(bool verify) { receivers2.resize(numModules); for (int iReceiver = 0; iReceiver < numReceivers2; ++iReceiver) { receivers2[iModule].push_back( - sls::make_unique(detectorId, iModule, iReceiver, - false, verify)); + sls::make_unique(detectorId, iModule, 1, + iReceiver, verify)); } } } @@ -373,7 +373,7 @@ void DetectorImpl::initReceiver(const int udpInterface) { receivers.resize(detectors.size()); receivers[iModule].push_back( sls::make_unique(detectorId, iModule, 0, - true, tcpPort++, "", zmqPort++)); + 0, tcpPort++, "", zmqPort++)); detectors[iModule]->setNumberOfReceivers(1); } } catch (...) { @@ -390,8 +390,8 @@ void DetectorImpl::initReceiver(const int udpInterface) { for (int iModule = 0; iModule < size(); ++iModule) { receivers2.resize(detectors.size()); receivers2[iModule].push_back( - sls::make_unique(detectorId, iModule, 0, - false, tcpPort++, "", zmqPort++)); + sls::make_unique(detectorId, iModule, 1, + 0, tcpPort++, "", zmqPort++)); detectors[iModule]->setNumberOfReceivers2(1); } } catch (...) { diff --git a/slsDetectorSoftware/src/Receiver.cpp b/slsDetectorSoftware/src/Receiver.cpp index 2dc1c8f76..f88a1c316 100755 --- a/slsDetectorSoftware/src/Receiver.cpp +++ b/slsDetectorSoftware/src/Receiver.cpp @@ -99,11 +99,11 @@ Ret Receiver::sendToReceiver(int fnum, const Arg &args) const{ // create shm -Receiver::Receiver(int detector_id, int module_id, int receiver_id, - bool primaryInterface, int tcp_port, std::string hostname, +Receiver::Receiver(int detector_id, int module_id, int interface_id, + int receiver_id, int tcp_port, std::string hostname, int zmq_port) : - receiverId(receiver_id), moduleId(module_id), - shm(detector_id, module_id, receiver_id, primaryInterface) { + receiverId(receiver_id), interfaceId(interface_id), moduleId(module_id), + shm(detector_id, module_id, interface_id, receiver_id) { // ensure shared memory was not created before if (shm.IsExisting()) { @@ -112,15 +112,14 @@ Receiver::Receiver(int detector_id, int module_id, int receiver_id, << shm.GetName() << ". Freeing it again"; shm.RemoveSharedMemory(); } - shm = SharedMemory(detector_id, module_id, receiver_id, - primaryInterface); + shm = SharedMemory(detector_id, module_id, interface_id, + receiver_id); shm.CreateSharedMemory(); // initalize receiver structure shm()->shmversion = RECEIVER_SHMVERSION; memset(shm()->hostname, 0, MAX_STR_LENGTH); shm()->tcpPort = DEFAULT_RX_PORTNO + receiver_id; - shm()->primaryInterface = primaryInterface; shm()-> stoppedFlag = false; shm()->zmqPort = DEFAULT_ZMQ_RX_PORTNO + receiver_id; shm()->zmqIp = IpAddr{}; @@ -138,10 +137,10 @@ Receiver::Receiver(int detector_id, int module_id, int receiver_id, } // open shm -Receiver::Receiver(int detector_id, int module_id, int receiver_id, - bool primaryInterface, bool verify) : - receiverId(receiver_id), moduleId(module_id), - shm(detector_id, module_id, receiver_id, primaryInterface) { +Receiver::Receiver(int detector_id, int module_id, int interface_id, + int receiver_id, bool verify) : + receiverId(receiver_id), interfaceId(interface_id), moduleId(module_id), + shm(detector_id, module_id, interface_id, receiver_id) { shm.OpenSharedMemory(); if (verify && shm()->shmversion != RECEIVER_SHMVERSION) { std::ostringstream ss; @@ -205,8 +204,8 @@ sls::MacAddr Receiver::configure(slsDetectorDefs::rxParameters arg) { // hostname memset(arg.hostname, 0, sizeof(arg.hostname)); strcpy_safe(arg.hostname, shm()->hostname); - // primary interface - arg.primaryInterface = shm()->primaryInterface; + // interface id + arg.interfaceId = interfaceId; // zmqip { sls::IpAddr ip; @@ -230,7 +229,7 @@ sls::MacAddr Receiver::configure(slsDetectorDefs::rxParameters arg) { << "detectorSize.y:" << arg.detectorSize.y << std::endl << "moduleId:" << arg.moduleId << 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 << "udpInterfaces:" << arg.udpInterfaces << std::endl << "udp_dstport:" << arg.udp_dstport << std::endl diff --git a/slsDetectorSoftware/src/Receiver.h b/slsDetectorSoftware/src/Receiver.h index 4030bd0b3..e54c600a5 100755 --- a/slsDetectorSoftware/src/Receiver.h +++ b/slsDetectorSoftware/src/Receiver.h @@ -6,7 +6,7 @@ #include -#define RECEIVER_SHMVERSION 0x200417 +#define RECEIVER_SHMVERSION 0x200421 namespace sls { struct sharedReceiver { @@ -15,7 +15,6 @@ namespace sls { int shmversion; char hostname[MAX_STR_LENGTH]; int tcpPort; - bool primaryInterface; /** END OF FIXED PATTERN -----------------------------------------------*/ int stoppedFlag; @@ -28,12 +27,12 @@ namespace sls { public: static size_t getNumReceivers(); // create shm - explicit Receiver(int detector_id, int module_id, int receiver_id, - bool primaryInterface, int tcp_port = 0, std::string hostname = "", + explicit Receiver(int detector_id, int module_id, int interface_id, + int receiver_id, int tcp_port = 0, std::string hostname = "", int zmq_port = 0); // open shm - explicit Receiver(int detector_id, int module_id, int receiver_id, - bool primaryInterface, bool verify); + explicit Receiver(int detector_id, int module_id, int interface_id, + int receiver_id, bool verify); virtual ~Receiver(); @@ -148,8 +147,9 @@ namespace sls { void checkVersionCompatibility(); const int receiverId{0}; + const int interfaceId{0}; const int moduleId{0}; - mutable sls::SharedMemory shm{0, 0, 0, true}; + mutable sls::SharedMemory shm{0, 0, 0, 0}; }; } // sls \ No newline at end of file diff --git a/slsDetectorSoftware/src/SharedMemory.h b/slsDetectorSoftware/src/SharedMemory.h index 52c9d8d1c..861ba778a 100755 --- a/slsDetectorSoftware/src/SharedMemory.h +++ b/slsDetectorSoftware/src/SharedMemory.h @@ -24,8 +24,7 @@ #define SHM_MULTI_PREFIX "/slsDetectorPackage_multi_" #define SHM_MODULE_PREFIX "_module_" -#define SHM_RECEIVER_PREFIX "_receiver_" -#define SHM_RECEIVER2_PREFIX "_receiver2_" +#define SHM_RECEIVER_PREFIX "_receiver" //interface_id + '_' #define SHM_ENV_NAME "SLSDETNAME" #include @@ -41,12 +40,12 @@ class SharedMemory { * Constructor * creates the single/multi detector shared memory name * @param multiId multi detector id - * @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 primaryInterface is false, for the second udp port receiver + * @param moduleId module detectr id, -1 if a multi detector shared memory + * @param interfaceId 0 for primary interface, 1 for secondary + * @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) { - name = ConstructSharedMemoryName(multiId, moduleId, receiverId, primaryInterface); + SharedMemory(int multiId, int moduleId, int interfaceId = 0, int receiverId = -1) { + name = ConstructSharedMemoryName(multiId, moduleId, interfaceId, receiverId); } /** @@ -221,12 +220,12 @@ class SharedMemory { * throws exception if name created is longer than required 255(manpages) * @param multiId multi detector id * @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 primaryInterface false, if second udp port receiver + * @param interfaceId 0 for primary interface, 1 for secondary + * @param receiverId receiver id, -1 if not a rxr shm, else round robin entry * @returns shared memory name */ std::string ConstructSharedMemoryName(int multiId, int moduleId, - int receiverId, bool primaryInterface) { + int interfaceId = 0, int receiverId = -1) { // using environment path std::string sEnvPath = ""; @@ -242,15 +241,10 @@ class SharedMemory { else if (receiverId < 0) ss << SHM_MULTI_PREFIX << multiId << SHM_MODULE_PREFIX << moduleId << sEnvPath; - else if (primaryInterface) - ss << SHM_MULTI_PREFIX << multiId << - SHM_MODULE_PREFIX << moduleId << - SHM_RECEIVER_PREFIX << receiverId << sEnvPath; else ss << SHM_MULTI_PREFIX << multiId << SHM_MODULE_PREFIX << moduleId << - SHM_RECEIVER2_PREFIX << receiverId << sEnvPath; - + SHM_RECEIVER_PREFIX << interfaceId << '_' << receiverId << sEnvPath; std::string temp = ss.str(); if (temp.length() > NAME_MAX_LENGTH) { diff --git a/slsReceiverSoftware/src/ClientInterface.cpp b/slsReceiverSoftware/src/ClientInterface.cpp index 6e0d74321..d8d2eae0a 100755 --- a/slsReceiverSoftware/src/ClientInterface.cpp +++ b/slsReceiverSoftware/src/ClientInterface.cpp @@ -334,7 +334,7 @@ int ClientInterface::setup_receiver(Interface &socket) { << "detectorSize.y:" << arg.detectorSize.y << std::endl << "moduleId:" << arg.moduleId << 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 << "udpInterfaces:" << arg.udpInterfaces << std::endl << "udp_dstport:" << arg.udp_dstport << std::endl diff --git a/slsSupportLib/include/sls_detector_defs.h b/slsSupportLib/include/sls_detector_defs.h index e1eb67b78..436a49f54 100755 --- a/slsSupportLib/include/sls_detector_defs.h +++ b/slsSupportLib/include/sls_detector_defs.h @@ -470,7 +470,7 @@ class slsDetectorDefs { xy detectorSize; int moduleId{0}; char hostname[MAX_STR_LENGTH]; - bool primaryInterface{true}; + int interfaceId{0}; uint32_t zmq_ip{0U}; int udpInterfaces{1}; int udp_dstport{0};