From a1a95ebb20b808dd71f3dc101ef31c646ed0052d Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Mon, 4 Mar 2019 11:02:10 +0100 Subject: [PATCH] receiver bug fixaffecting Jungfrau receivers as root (optlen size as int), but setting buffer size is uint32_t size. setting it to uint64_t --- slsDetectorSoftware/slsDetector/slsDetector.cpp | 13 +++++++------ slsDetectorSoftware/slsDetector/slsDetector.h | 2 +- .../slsDetector/slsDetectorCommand.cpp | 3 ++- slsReceiverSoftware/include/Listener.h | 8 ++++---- slsReceiverSoftware/include/UDPBaseImplementation.h | 10 +++++----- slsReceiverSoftware/include/UDPInterface.h | 6 +++--- .../include/UDPStandardImplementation.h | 2 +- slsReceiverSoftware/src/Listener.cpp | 6 +++--- slsReceiverSoftware/src/UDPBaseImplementation.cpp | 6 +++--- .../src/UDPStandardImplementation.cpp | 2 +- .../src/slsReceiverTCPIPInterface.cpp | 11 ++++++----- 11 files changed, 36 insertions(+), 33 deletions(-) diff --git a/slsDetectorSoftware/slsDetector/slsDetector.cpp b/slsDetectorSoftware/slsDetector/slsDetector.cpp index f282dc8a6..73c30960d 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetector.cpp @@ -4959,6 +4959,7 @@ uint32_t slsDetector::clearBit(uint32_t addr, int n) { string slsDetector::setNetworkParameter(networkParameter index, string value) { int i; + uint64_t i64 = -1; switch (index) { case DETECTOR_MAC: return setDetectorMAC(value); @@ -5000,8 +5001,8 @@ string slsDetector::setNetworkParameter(networkParameter index, string value) { case ADDITIONAL_JSON_HEADER: return setAdditionalJsonHeader(value); case RECEIVER_UDP_SCKT_BUF_SIZE: - sscanf(value.c_str(),"%d",&i); - setReceiverUDPSocketBufferSize(i); + sscanf(value.c_str(),"%ld",&i64); + setReceiverUDPSocketBufferSize(i64); return getReceiverUDPSocketBufferSize(); default: @@ -5109,7 +5110,7 @@ string slsDetector::getReceiverRealUDPSocketBufferSize() { int fnum=F_RECEIVER_REAL_UDP_SOCK_BUF_SIZE; int ret = FAIL; - int retval = -1; + int64_t retval = -1; if(thisDetector->receiverOnlineFlag == ONLINE_FLAG){ #ifdef VERBOSE @@ -5591,12 +5592,12 @@ string slsDetector::setAdditionalJsonHeader(string jsonheader) { } -string slsDetector::setReceiverUDPSocketBufferSize(int udpsockbufsize) { +string slsDetector::setReceiverUDPSocketBufferSize(uint64_t udpsockbufsize) { int fnum=F_RECEIVER_UDP_SOCK_BUF_SIZE; int ret = FAIL; - int retval = -1; - int arg = udpsockbufsize; + int64_t retval = -1; + int64_t arg = udpsockbufsize; if(thisDetector->receiverOnlineFlag == ONLINE_FLAG){ #ifdef VERBOSE diff --git a/slsDetectorSoftware/slsDetector/slsDetector.h b/slsDetectorSoftware/slsDetector/slsDetector.h index 7e8e1e80d..779ad78e7 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.h +++ b/slsDetectorSoftware/slsDetector/slsDetector.h @@ -2422,7 +2422,7 @@ private: * @param udpsockbufsize additional json header * @returns receiver udp socket buffer size */ - std::string setReceiverUDPSocketBufferSize(int udpsockbufsize=-1); + std::string setReceiverUDPSocketBufferSize(uint64_t udpsockbufsize=-1); /** * Sets the transmission delay for left, right or entire frame diff --git a/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp b/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp index b04552626..651d30210 100644 --- a/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp @@ -4040,7 +4040,8 @@ string slsDetectorCommand::cmdNetworkParameter(int narg, char *args[], int actio } else if (cmd=="rx_udpsocksize") { t=RECEIVER_UDP_SCKT_BUF_SIZE; if (action==PUT_ACTION){ - if (!(sscanf(args[1],"%d",&i))) + uint64_t ival = -1; + if (!(sscanf(args[1],"%ld",&i))) return ("cannot parse argument") + string(args[1]); } } else if (cmd=="rx_realudpsocksize") { diff --git a/slsReceiverSoftware/include/Listener.h b/slsReceiverSoftware/include/Listener.h index 366b4cdc1..f6a559444 100644 --- a/slsReceiverSoftware/include/Listener.h +++ b/slsReceiverSoftware/include/Listener.h @@ -39,7 +39,7 @@ class Listener : private virtual slsReceiverDefs, public ThreadObject { */ Listener(int ind, detectorType dtype, Fifo*& f, runStatus* s, uint32_t* portno, char* e, uint64_t* nf, uint32_t* dr, - uint32_t* us, uint32_t* as, uint32_t* fpf, + uint64_t* us, uint64_t* as, uint32_t* fpf, frameDiscardPolicy* fdp, bool* act, bool* depaden, bool* sm); /** @@ -138,7 +138,7 @@ class Listener : private virtual slsReceiverDefs, public ThreadObject { * @param s UDP socket buffer size to be set * @return OK or FAIL of dummy socket creation */ - int CreateDummySocketForUDPSocketBufferSize(uint32_t s); + int CreateDummySocketForUDPSocketBufferSize(uint64_t s); /** * Set hard coded (calculated but not from detector) row and column @@ -231,10 +231,10 @@ class Listener : private virtual slsReceiverDefs, public ThreadObject { uint32_t* dynamicRange; /** UDP Socket Buffer Size */ - uint32_t* udpSocketBufferSize; + uint64_t* udpSocketBufferSize; /** actual UDP Socket Buffer Size (double due to kernel bookkeeping) */ - uint32_t* actualUDPSocketBufferSize; + uint64_t* actualUDPSocketBufferSize; /** frames per file */ uint32_t* framesPerFile; diff --git a/slsReceiverSoftware/include/UDPBaseImplementation.h b/slsReceiverSoftware/include/UDPBaseImplementation.h index cafcd33bb..695caa96a 100644 --- a/slsReceiverSoftware/include/UDPBaseImplementation.h +++ b/slsReceiverSoftware/include/UDPBaseImplementation.h @@ -313,14 +313,14 @@ class UDPBaseImplementation : protected virtual slsReceiverDefs, public UDPInter * Get UDP Socket Buffer Size * @return UDP Socket Buffer Size */ - uint32_t getUDPSocketBufferSize() const; + uint64_t getUDPSocketBufferSize() const; /** (not saved in client shared memory) * Get actual UDP Socket Buffer Size * @return actual UDP Socket Buffer Size */ - uint32_t getActualUDPSocketBufferSize() const; + uint64_t getActualUDPSocketBufferSize() const; /************************************************************************* * Setters *************************************************************** @@ -651,7 +651,7 @@ class UDPBaseImplementation : protected virtual slsReceiverDefs, public UDPInter * @param s UDP Socket Buffer Size * @return OK or FAIL if dummy socket could be created */ - int setUDPSocketBufferSize(const uint32_t s); + int setUDPSocketBufferSize(const uint64_t s); /* * Restream stop dummy packet from receiver @@ -760,9 +760,9 @@ class UDPBaseImplementation : protected virtual slsReceiverDefs, public UDPInter /** Server UDP Port Number*/ uint32_t udpPortNum[MAX_NUMBER_OF_LISTENING_THREADS]; /** udp socket buffer size */ - uint32_t udpSocketBufferSize; + uint64_t udpSocketBufferSize; /** actual UDP Socket Buffer Size (halved due to kernel bookkeeping) */ - uint32_t actualUDPSocketBufferSize; + uint64_t actualUDPSocketBufferSize; //***file parameters*** /** File format */ diff --git a/slsReceiverSoftware/include/UDPInterface.h b/slsReceiverSoftware/include/UDPInterface.h index 3879abd7e..55e0d2cb6 100644 --- a/slsReceiverSoftware/include/UDPInterface.h +++ b/slsReceiverSoftware/include/UDPInterface.h @@ -404,13 +404,13 @@ class UDPInterface { * Get UDP Socket Buffer Size * @return UDP Socket Buffer Size */ - virtual uint32_t getUDPSocketBufferSize() const = 0; + virtual uint64_t getUDPSocketBufferSize() const = 0; /** (not saved in client shared memory) * Get actual UDP Socket Buffer Size * @return actual UDP Socket Buffer Size */ - virtual uint32_t getActualUDPSocketBufferSize() const = 0; + virtual uint64_t getActualUDPSocketBufferSize() const = 0; /************************************************************************* * Setters *************************************************************** @@ -743,7 +743,7 @@ class UDPInterface { * @param s UDP Socket Buffer Size * @return OK or FAIL if dummy socket could be created */ - virtual int setUDPSocketBufferSize(const uint32_t s) = 0; + virtual int setUDPSocketBufferSize(const uint64_t s) = 0; /* * Restream stop dummy packet from receiver diff --git a/slsReceiverSoftware/include/UDPStandardImplementation.h b/slsReceiverSoftware/include/UDPStandardImplementation.h index 30f19a596..506aeb698 100644 --- a/slsReceiverSoftware/include/UDPStandardImplementation.h +++ b/slsReceiverSoftware/include/UDPStandardImplementation.h @@ -184,7 +184,7 @@ class UDPStandardImplementation: private virtual slsReceiverDefs, public UDPBase * @param s UDP Socket Buffer Size * @return OK or FAIL if dummy socket could be created */ - int setUDPSocketBufferSize(const uint32_t s); + int setUDPSocketBufferSize(const uint64_t s); /** * Restream stop dummy packet from receiver diff --git a/slsReceiverSoftware/src/Listener.cpp b/slsReceiverSoftware/src/Listener.cpp index 3ca976b44..bc2eabb6d 100644 --- a/slsReceiverSoftware/src/Listener.cpp +++ b/slsReceiverSoftware/src/Listener.cpp @@ -20,7 +20,7 @@ const std::string Listener::TypeName = "Listener"; Listener::Listener(int ind, detectorType dtype, Fifo*& f, runStatus* s, uint32_t* portno, char* e, uint64_t* nf, uint32_t* dr, - uint32_t* us, uint32_t* as, uint32_t* fpf, + uint64_t* us, uint64_t* as, uint32_t* fpf, frameDiscardPolicy* fdp, bool* act, bool* depaden, bool* sm) : ThreadObject(ind), runningFlag(0), @@ -242,7 +242,7 @@ void Listener::ShutDownUDPSocket() { } -int Listener::CreateDummySocketForUDPSocketBufferSize(uint32_t s) { +int Listener::CreateDummySocketForUDPSocketBufferSize(uint64_t s) { FILE_LOG(logINFO) << "Testing UDP Socket Buffer size with test port " << *udpPortNumber; if (!(*activated)) { @@ -250,7 +250,7 @@ int Listener::CreateDummySocketForUDPSocketBufferSize(uint32_t s) { return OK; } - uint32_t temp = *udpSocketBufferSize; + uint64_t temp = *udpSocketBufferSize; *udpSocketBufferSize = s; //if eth is mistaken with ip address diff --git a/slsReceiverSoftware/src/UDPBaseImplementation.cpp b/slsReceiverSoftware/src/UDPBaseImplementation.cpp index f8e28cb71..fb7e15054 100644 --- a/slsReceiverSoftware/src/UDPBaseImplementation.cpp +++ b/slsReceiverSoftware/src/UDPBaseImplementation.cpp @@ -356,12 +356,12 @@ char *UDPBaseImplementation::getAdditionalJsonHeader() const{ return output; } -uint32_t UDPBaseImplementation::getUDPSocketBufferSize() const { +uint64_t UDPBaseImplementation::getUDPSocketBufferSize() const { FILE_LOG(logDEBUG) << __AT__ << " starting"; return udpSocketBufferSize; } -uint32_t UDPBaseImplementation::getActualUDPSocketBufferSize() const { +uint64_t UDPBaseImplementation::getActualUDPSocketBufferSize() const { FILE_LOG(logDEBUG) << __AT__ << " starting"; return actualUDPSocketBufferSize; } @@ -786,7 +786,7 @@ void UDPBaseImplementation::setAdditionalJsonHeader(const char c[]){ FILE_LOG(logINFO) << "Additional JSON Header: " << additionalJsonHeader; } -int UDPBaseImplementation::setUDPSocketBufferSize(const uint32_t s) { +int UDPBaseImplementation::setUDPSocketBufferSize(const uint64_t s) { FILE_LOG(logDEBUG) << __AT__ << " starting"; udpSocketBufferSize = s; diff --git a/slsReceiverSoftware/src/UDPStandardImplementation.cpp b/slsReceiverSoftware/src/UDPStandardImplementation.cpp index 75d611006..d7ea6122e 100644 --- a/slsReceiverSoftware/src/UDPStandardImplementation.cpp +++ b/slsReceiverSoftware/src/UDPStandardImplementation.cpp @@ -654,7 +654,7 @@ void UDPStandardImplementation::closeFiles() { dataProcessor[0]->EndofAcquisition(anycaught, maxIndexCaught); } -int UDPStandardImplementation::setUDPSocketBufferSize(const uint32_t s) { +int UDPStandardImplementation::setUDPSocketBufferSize(const uint64_t s) { if (listener.size()) return listener[0]->CreateDummySocketForUDPSocketBufferSize(s); return FAIL; diff --git a/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp b/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp index ffa489851..4536bbbb4 100644 --- a/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp +++ b/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp @@ -2626,8 +2626,8 @@ int slsReceiverTCPIPInterface::set_additional_json_header() { int slsReceiverTCPIPInterface::set_udp_socket_buffer_size() { ret = OK; memset(mess, 0, sizeof(mess)); - int index = -1; - int retval = -1; + uint64_t index = -1; + uint64_t retval = -1; // receive arguments if (mySock->ReceiveDataOnly(&index,sizeof(index)) < 0 ) @@ -2639,7 +2639,7 @@ int slsReceiverTCPIPInterface::set_udp_socket_buffer_size() { invalidReceiverObject(); else { // set - if(index >= 0) { + if((int64_t)index >= 0) { if (mySock->differentClients && lockStatus) receiverlocked(); else if (receiverBase->getStatus() != IDLE) @@ -2654,9 +2654,10 @@ int slsReceiverTCPIPInterface::set_udp_socket_buffer_size() { } //get retval=receiverBase->getUDPSocketBufferSize(); - if(index >= 0 && ((retval != index) || ((int)receiverBase->getActualUDPSocketBufferSize() != (index*2)))) { + if((int64_t)index >= 0 && ((retval != index) || (receiverBase->getActualUDPSocketBufferSize() != (index*2)))) { ret = FAIL; - strcpy(mess, "Could not set UDP Socket buffer size (No CAP_NET_ADMIN privileges?)\n"); + sprintf(mess, "Could not set UDP Socket buffer size (No CAP_NET_ADMIN privileges?). " + "set %lld, got %lld\n", (long long unsigned int)index, (long long unsigned int)retval); FILE_LOG(logERROR) << mess; } }