receiver bug fixaffecting Jungfrau receivers as root (optlen size as int), but setting buffer size is uint32_t size. setting it to uint64_t

This commit is contained in:
maliakal_d 2019-03-04 11:02:10 +01:00
parent d7ce5fedfd
commit a1a95ebb20
11 changed files with 36 additions and 33 deletions

View File

@ -4959,6 +4959,7 @@ uint32_t slsDetector::clearBit(uint32_t addr, int n) {
string slsDetector::setNetworkParameter(networkParameter index, string value) { string slsDetector::setNetworkParameter(networkParameter index, string value) {
int i; int i;
uint64_t i64 = -1;
switch (index) { switch (index) {
case DETECTOR_MAC: case DETECTOR_MAC:
return setDetectorMAC(value); return setDetectorMAC(value);
@ -5000,8 +5001,8 @@ string slsDetector::setNetworkParameter(networkParameter index, string value) {
case ADDITIONAL_JSON_HEADER: case ADDITIONAL_JSON_HEADER:
return setAdditionalJsonHeader(value); return setAdditionalJsonHeader(value);
case RECEIVER_UDP_SCKT_BUF_SIZE: case RECEIVER_UDP_SCKT_BUF_SIZE:
sscanf(value.c_str(),"%d",&i); sscanf(value.c_str(),"%ld",&i64);
setReceiverUDPSocketBufferSize(i); setReceiverUDPSocketBufferSize(i64);
return getReceiverUDPSocketBufferSize(); return getReceiverUDPSocketBufferSize();
default: default:
@ -5109,7 +5110,7 @@ string slsDetector::getReceiverRealUDPSocketBufferSize() {
int fnum=F_RECEIVER_REAL_UDP_SOCK_BUF_SIZE; int fnum=F_RECEIVER_REAL_UDP_SOCK_BUF_SIZE;
int ret = FAIL; int ret = FAIL;
int retval = -1; int64_t retval = -1;
if(thisDetector->receiverOnlineFlag == ONLINE_FLAG){ if(thisDetector->receiverOnlineFlag == ONLINE_FLAG){
#ifdef VERBOSE #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 fnum=F_RECEIVER_UDP_SOCK_BUF_SIZE;
int ret = FAIL; int ret = FAIL;
int retval = -1; int64_t retval = -1;
int arg = udpsockbufsize; int64_t arg = udpsockbufsize;
if(thisDetector->receiverOnlineFlag == ONLINE_FLAG){ if(thisDetector->receiverOnlineFlag == ONLINE_FLAG){
#ifdef VERBOSE #ifdef VERBOSE

View File

@ -2422,7 +2422,7 @@ private:
* @param udpsockbufsize additional json header * @param udpsockbufsize additional json header
* @returns receiver udp socket buffer size * @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 * Sets the transmission delay for left, right or entire frame

View File

@ -4040,7 +4040,8 @@ string slsDetectorCommand::cmdNetworkParameter(int narg, char *args[], int actio
} else if (cmd=="rx_udpsocksize") { } else if (cmd=="rx_udpsocksize") {
t=RECEIVER_UDP_SCKT_BUF_SIZE; t=RECEIVER_UDP_SCKT_BUF_SIZE;
if (action==PUT_ACTION){ 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]); return ("cannot parse argument") + string(args[1]);
} }
} else if (cmd=="rx_realudpsocksize") { } else if (cmd=="rx_realudpsocksize") {

View File

@ -39,7 +39,7 @@ class Listener : private virtual slsReceiverDefs, public ThreadObject {
*/ */
Listener(int ind, detectorType dtype, Fifo*& f, runStatus* s, Listener(int ind, detectorType dtype, Fifo*& f, runStatus* s,
uint32_t* portno, char* e, uint64_t* nf, uint32_t* dr, 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); 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 * @param s UDP socket buffer size to be set
* @return OK or FAIL of dummy socket creation * @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 * 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; uint32_t* dynamicRange;
/** UDP Socket Buffer Size */ /** UDP Socket Buffer Size */
uint32_t* udpSocketBufferSize; uint64_t* udpSocketBufferSize;
/** actual UDP Socket Buffer Size (double due to kernel bookkeeping) */ /** actual UDP Socket Buffer Size (double due to kernel bookkeeping) */
uint32_t* actualUDPSocketBufferSize; uint64_t* actualUDPSocketBufferSize;
/** frames per file */ /** frames per file */
uint32_t* framesPerFile; uint32_t* framesPerFile;

View File

@ -313,14 +313,14 @@ class UDPBaseImplementation : protected virtual slsReceiverDefs, public UDPInter
* Get UDP Socket Buffer Size * Get UDP Socket Buffer Size
* @return UDP Socket Buffer Size * @return UDP Socket Buffer Size
*/ */
uint32_t getUDPSocketBufferSize() const; uint64_t getUDPSocketBufferSize() const;
/** (not saved in client shared memory) /** (not saved in client shared memory)
* Get actual UDP Socket Buffer Size * Get actual UDP Socket Buffer Size
* @return actual UDP Socket Buffer Size * @return actual UDP Socket Buffer Size
*/ */
uint32_t getActualUDPSocketBufferSize() const; uint64_t getActualUDPSocketBufferSize() const;
/************************************************************************* /*************************************************************************
* Setters *************************************************************** * Setters ***************************************************************
@ -651,7 +651,7 @@ class UDPBaseImplementation : protected virtual slsReceiverDefs, public UDPInter
* @param s UDP Socket Buffer Size * @param s UDP Socket Buffer Size
* @return OK or FAIL if dummy socket could be created * @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 * Restream stop dummy packet from receiver
@ -760,9 +760,9 @@ class UDPBaseImplementation : protected virtual slsReceiverDefs, public UDPInter
/** Server UDP Port Number*/ /** Server UDP Port Number*/
uint32_t udpPortNum[MAX_NUMBER_OF_LISTENING_THREADS]; uint32_t udpPortNum[MAX_NUMBER_OF_LISTENING_THREADS];
/** udp socket buffer size */ /** udp socket buffer size */
uint32_t udpSocketBufferSize; uint64_t udpSocketBufferSize;
/** actual UDP Socket Buffer Size (halved due to kernel bookkeeping) */ /** actual UDP Socket Buffer Size (halved due to kernel bookkeeping) */
uint32_t actualUDPSocketBufferSize; uint64_t actualUDPSocketBufferSize;
//***file parameters*** //***file parameters***
/** File format */ /** File format */

View File

@ -404,13 +404,13 @@ class UDPInterface {
* Get UDP Socket Buffer Size * Get UDP Socket Buffer Size
* @return 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) /** (not saved in client shared memory)
* Get actual UDP Socket Buffer Size * Get actual UDP Socket Buffer Size
* @return actual UDP Socket Buffer Size * @return actual UDP Socket Buffer Size
*/ */
virtual uint32_t getActualUDPSocketBufferSize() const = 0; virtual uint64_t getActualUDPSocketBufferSize() const = 0;
/************************************************************************* /*************************************************************************
* Setters *************************************************************** * Setters ***************************************************************
@ -743,7 +743,7 @@ class UDPInterface {
* @param s UDP Socket Buffer Size * @param s UDP Socket Buffer Size
* @return OK or FAIL if dummy socket could be created * @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 * Restream stop dummy packet from receiver

View File

@ -184,7 +184,7 @@ class UDPStandardImplementation: private virtual slsReceiverDefs, public UDPBase
* @param s UDP Socket Buffer Size * @param s UDP Socket Buffer Size
* @return OK or FAIL if dummy socket could be created * @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 * Restream stop dummy packet from receiver

View File

@ -20,7 +20,7 @@ const std::string Listener::TypeName = "Listener";
Listener::Listener(int ind, detectorType dtype, Fifo*& f, runStatus* s, Listener::Listener(int ind, detectorType dtype, Fifo*& f, runStatus* s,
uint32_t* portno, char* e, uint64_t* nf, uint32_t* dr, 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) : frameDiscardPolicy* fdp, bool* act, bool* depaden, bool* sm) :
ThreadObject(ind), ThreadObject(ind),
runningFlag(0), 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; FILE_LOG(logINFO) << "Testing UDP Socket Buffer size with test port " << *udpPortNumber;
if (!(*activated)) { if (!(*activated)) {
@ -250,7 +250,7 @@ int Listener::CreateDummySocketForUDPSocketBufferSize(uint32_t s) {
return OK; return OK;
} }
uint32_t temp = *udpSocketBufferSize; uint64_t temp = *udpSocketBufferSize;
*udpSocketBufferSize = s; *udpSocketBufferSize = s;
//if eth is mistaken with ip address //if eth is mistaken with ip address

View File

@ -356,12 +356,12 @@ char *UDPBaseImplementation::getAdditionalJsonHeader() const{
return output; return output;
} }
uint32_t UDPBaseImplementation::getUDPSocketBufferSize() const { uint64_t UDPBaseImplementation::getUDPSocketBufferSize() const {
FILE_LOG(logDEBUG) << __AT__ << " starting"; FILE_LOG(logDEBUG) << __AT__ << " starting";
return udpSocketBufferSize; return udpSocketBufferSize;
} }
uint32_t UDPBaseImplementation::getActualUDPSocketBufferSize() const { uint64_t UDPBaseImplementation::getActualUDPSocketBufferSize() const {
FILE_LOG(logDEBUG) << __AT__ << " starting"; FILE_LOG(logDEBUG) << __AT__ << " starting";
return actualUDPSocketBufferSize; return actualUDPSocketBufferSize;
} }
@ -786,7 +786,7 @@ void UDPBaseImplementation::setAdditionalJsonHeader(const char c[]){
FILE_LOG(logINFO) << "Additional JSON Header: " << additionalJsonHeader; 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"; FILE_LOG(logDEBUG) << __AT__ << " starting";
udpSocketBufferSize = s; udpSocketBufferSize = s;

View File

@ -654,7 +654,7 @@ void UDPStandardImplementation::closeFiles() {
dataProcessor[0]->EndofAcquisition(anycaught, maxIndexCaught); dataProcessor[0]->EndofAcquisition(anycaught, maxIndexCaught);
} }
int UDPStandardImplementation::setUDPSocketBufferSize(const uint32_t s) { int UDPStandardImplementation::setUDPSocketBufferSize(const uint64_t s) {
if (listener.size()) if (listener.size())
return listener[0]->CreateDummySocketForUDPSocketBufferSize(s); return listener[0]->CreateDummySocketForUDPSocketBufferSize(s);
return FAIL; return FAIL;

View File

@ -2626,8 +2626,8 @@ int slsReceiverTCPIPInterface::set_additional_json_header() {
int slsReceiverTCPIPInterface::set_udp_socket_buffer_size() { int slsReceiverTCPIPInterface::set_udp_socket_buffer_size() {
ret = OK; ret = OK;
memset(mess, 0, sizeof(mess)); memset(mess, 0, sizeof(mess));
int index = -1; uint64_t index = -1;
int retval = -1; uint64_t retval = -1;
// receive arguments // receive arguments
if (mySock->ReceiveDataOnly(&index,sizeof(index)) < 0 ) if (mySock->ReceiveDataOnly(&index,sizeof(index)) < 0 )
@ -2639,7 +2639,7 @@ int slsReceiverTCPIPInterface::set_udp_socket_buffer_size() {
invalidReceiverObject(); invalidReceiverObject();
else { else {
// set // set
if(index >= 0) { if((int64_t)index >= 0) {
if (mySock->differentClients && lockStatus) if (mySock->differentClients && lockStatus)
receiverlocked(); receiverlocked();
else if (receiverBase->getStatus() != IDLE) else if (receiverBase->getStatus() != IDLE)
@ -2654,9 +2654,10 @@ int slsReceiverTCPIPInterface::set_udp_socket_buffer_size() {
} }
//get //get
retval=receiverBase->getUDPSocketBufferSize(); 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; 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; FILE_LOG(logERROR) << mess;
} }
} }