mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-04-24 23:30:03 +02:00
slsReceiver bug fix affecting 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:
parent
8939e23622
commit
08bd2378f4
@ -2002,7 +2002,7 @@ int multiSlsDetector::setDetectorMode(detectorModeType value, int detPos) {
|
||||
return getDetectorModeType(result);
|
||||
}
|
||||
|
||||
int multiSlsDetector::setReceiverUDPSocketBufferSize(int udpsockbufsize, int detPos) {
|
||||
uint64_t multiSlsDetector::setReceiverUDPSocketBufferSize(uint64_t udpsockbufsize, int detPos) {
|
||||
// single
|
||||
if (detPos >= 0) {
|
||||
return detectors[detPos]->setReceiverUDPSocketBufferSize(udpsockbufsize);
|
||||
@ -2013,7 +2013,7 @@ int multiSlsDetector::setReceiverUDPSocketBufferSize(int udpsockbufsize, int det
|
||||
return sls::minusOneIfDifferent(r);
|
||||
}
|
||||
|
||||
int multiSlsDetector::getReceiverUDPSocketBufferSize(int detPos) {
|
||||
uint64_t multiSlsDetector::getReceiverUDPSocketBufferSize(int detPos) {
|
||||
// single
|
||||
if (detPos >= 0) {
|
||||
return detectors[detPos]->getReceiverUDPSocketBufferSize();
|
||||
@ -2024,7 +2024,7 @@ int multiSlsDetector::getReceiverUDPSocketBufferSize(int detPos) {
|
||||
return sls::minusOneIfDifferent(r);
|
||||
}
|
||||
|
||||
int multiSlsDetector::getReceiverRealUDPSocketBufferSize(int detPos) {
|
||||
uint64_t multiSlsDetector::getReceiverRealUDPSocketBufferSize(int detPos) {
|
||||
// single
|
||||
if (detPos >= 0) {
|
||||
return detectors[detPos]->getReceiverRealUDPSocketBufferSize();
|
||||
|
@ -1117,21 +1117,21 @@ class multiSlsDetector : public virtual slsDetectorDefs,
|
||||
* @param detPos -1 for all detectors in list or specific detector position
|
||||
* @returns receiver udp socket buffer size
|
||||
*/
|
||||
int setReceiverUDPSocketBufferSize(int udpsockbufsize=-1, int detPos = -1);
|
||||
uint64_t setReceiverUDPSocketBufferSize(uint64_t udpsockbufsize=-1, int detPos = -1);
|
||||
|
||||
/**
|
||||
* Returns the receiver UDP socket buffer size
|
||||
* @param detPos -1 for all detectors in list or specific detector position
|
||||
* @returns the receiver UDP socket buffer size
|
||||
*/
|
||||
int getReceiverUDPSocketBufferSize(int detPos = -1) ;
|
||||
uint64_t getReceiverUDPSocketBufferSize(int detPos = -1) ;
|
||||
|
||||
/**
|
||||
* Returns the receiver real UDP socket buffer size
|
||||
* @param detPos -1 for all detectors in list or specific detector position
|
||||
* @returns the receiver real UDP socket buffer size
|
||||
*/
|
||||
int getReceiverRealUDPSocketBufferSize(int detPos = -1);
|
||||
uint64_t getReceiverRealUDPSocketBufferSize(int detPos = -1);
|
||||
|
||||
/** (users only)
|
||||
* Set 10GbE Flow Control (Eiger)
|
||||
|
@ -2842,11 +2842,11 @@ std::string slsDetector::getAdditionalJsonParameter(const std::string& key) {
|
||||
return std::string("");
|
||||
}
|
||||
|
||||
int slsDetector::setReceiverUDPSocketBufferSize(int udpsockbufsize) {
|
||||
uint64_t slsDetector::setReceiverUDPSocketBufferSize(uint64_t udpsockbufsize) {
|
||||
int fnum = F_RECEIVER_UDP_SOCK_BUF_SIZE;
|
||||
int ret = FAIL;
|
||||
int arg = udpsockbufsize;
|
||||
int retval = -1;
|
||||
uint64_t arg = udpsockbufsize;
|
||||
uint64_t retval = -1;
|
||||
FILE_LOG(logDEBUG1) << "Sending UDP Socket Buffer size to receiver: " << arg;
|
||||
|
||||
if (thisDetector->receiverOnlineFlag == ONLINE_FLAG) {
|
||||
@ -2865,14 +2865,14 @@ int slsDetector::setReceiverUDPSocketBufferSize(int udpsockbufsize) {
|
||||
return retval;
|
||||
}
|
||||
|
||||
int slsDetector::getReceiverUDPSocketBufferSize() {
|
||||
uint64_t slsDetector::getReceiverUDPSocketBufferSize() {
|
||||
return setReceiverUDPSocketBufferSize();
|
||||
}
|
||||
|
||||
int slsDetector::getReceiverRealUDPSocketBufferSize() {
|
||||
uint64_t slsDetector::getReceiverRealUDPSocketBufferSize() {
|
||||
int fnum = F_RECEIVER_REAL_UDP_SOCK_BUF_SIZE;
|
||||
int ret = FAIL;
|
||||
int retval = -1;
|
||||
uint64_t retval = -1;
|
||||
FILE_LOG(logDEBUG1) << "Getting real UDP Socket Buffer size to receiver";
|
||||
|
||||
if (thisDetector->receiverOnlineFlag == ONLINE_FLAG) {
|
||||
|
@ -999,19 +999,19 @@ public:
|
||||
* @param udpsockbufsize additional json header
|
||||
* @returns receiver udp socket buffer size
|
||||
*/
|
||||
int setReceiverUDPSocketBufferSize(int udpsockbufsize=-1);
|
||||
uint64_t setReceiverUDPSocketBufferSize(uint64_t udpsockbufsize=-1);
|
||||
|
||||
/**
|
||||
* Returns the receiver UDP socket buffer size\sa sharedSlsDetector
|
||||
* @returns the receiver UDP socket buffer size
|
||||
*/
|
||||
int getReceiverUDPSocketBufferSize() ;
|
||||
uint64_t getReceiverUDPSocketBufferSize() ;
|
||||
|
||||
/**
|
||||
* Returns the receiver real UDP socket buffer size\sa sharedSlsDetector
|
||||
* @returns the receiver real UDP socket buffer size
|
||||
*/
|
||||
int getReceiverRealUDPSocketBufferSize();
|
||||
uint64_t getReceiverRealUDPSocketBufferSize();
|
||||
|
||||
/**
|
||||
* Execute a digital test (Gotthard, Mythen)
|
||||
|
@ -2829,18 +2829,19 @@ std::string slsDetectorCommand::cmdNetworkParameter(int narg, char *args[], int
|
||||
return ans;
|
||||
} else if (cmd == "rx_udpsocksize") {
|
||||
if (action == PUT_ACTION) {
|
||||
if (!(sscanf(args[1], "%d", &i))) {
|
||||
uint64_t ival = -1;
|
||||
if (!(sscanf(args[1], "%ld", &ival))) {
|
||||
return ("cannot parse argument") + std::string(args[1]);
|
||||
}
|
||||
myDet->setReceiverUDPSocketBufferSize(i, detPos);
|
||||
myDet->setReceiverUDPSocketBufferSize(ival, detPos);
|
||||
}
|
||||
sprintf(ans, "%d", myDet->getReceiverUDPSocketBufferSize(detPos));
|
||||
sprintf(ans, "%ld", myDet->getReceiverUDPSocketBufferSize(detPos));
|
||||
return ans;
|
||||
} else if (cmd == "rx_realudpsocksize") {
|
||||
if (action == PUT_ACTION) {
|
||||
return ("cannot put!");
|
||||
}
|
||||
sprintf(ans, "%d", myDet->getReceiverRealUDPSocketBufferSize(detPos));
|
||||
sprintf(ans, "%ld", myDet->getReceiverRealUDPSocketBufferSize(detPos));
|
||||
return ans;
|
||||
} else if (cmd == "txndelay_left") {
|
||||
networkParameter t = DETECTOR_TXN_DELAY_LEFT;
|
||||
|
@ -39,7 +39,7 @@ class Listener : private virtual slsDetectorDefs, 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 slsDetectorDefs, 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 slsDetectorDefs, 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;
|
||||
|
@ -308,14 +308,14 @@ class slsReceiverImplementation: private virtual slsDetectorDefs {
|
||||
* 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 ***************************************************************
|
||||
@ -438,7 +438,7 @@ class slsReceiverImplementation: private virtual slsDetectorDefs {
|
||||
* @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);
|
||||
|
||||
|
||||
//***acquisition parameters***
|
||||
@ -805,9 +805,9 @@ private:
|
||||
/** 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 */
|
||||
|
@ -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
|
||||
|
@ -373,12 +373,12 @@ std::string slsReceiverImplementation::getAdditionalJsonHeader() const{
|
||||
return std::string(additionalJsonHeader);
|
||||
}
|
||||
|
||||
uint32_t slsReceiverImplementation::getUDPSocketBufferSize() const {
|
||||
uint64_t slsReceiverImplementation::getUDPSocketBufferSize() const {
|
||||
FILE_LOG(logDEBUG3) << __SHORT_AT__ << " called";
|
||||
return udpSocketBufferSize;
|
||||
}
|
||||
|
||||
uint32_t slsReceiverImplementation::getActualUDPSocketBufferSize() const {
|
||||
uint64_t slsReceiverImplementation::getActualUDPSocketBufferSize() const {
|
||||
FILE_LOG(logDEBUG3) << __SHORT_AT__ << " called";
|
||||
return actualUDPSocketBufferSize;
|
||||
}
|
||||
@ -607,7 +607,7 @@ void slsReceiverImplementation::setEthernetInterface(const char* c) {
|
||||
FILE_LOG(logINFO) << "Ethernet Interface: " << eth;
|
||||
}
|
||||
|
||||
int slsReceiverImplementation::setUDPSocketBufferSize(const uint32_t s) {
|
||||
int slsReceiverImplementation::setUDPSocketBufferSize(const uint64_t s) {
|
||||
if (listener.size())
|
||||
return listener[0]->CreateDummySocketForUDPSocketBufferSize(s);
|
||||
return FAIL;
|
||||
|
@ -1726,8 +1726,8 @@ int slsReceiverTCPIPInterface::get_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;
|
||||
|
||||
// get args, return if socket crashed, ret is fail if receiver is not null
|
||||
if (interface->Server_ReceiveArg(ret, mess, &index, sizeof(index), true, receiver) == FAIL)
|
||||
@ -1760,7 +1760,7 @@ int slsReceiverTCPIPInterface::set_udp_socket_buffer_size() {
|
||||
int slsReceiverTCPIPInterface::get_real_udp_socket_buffer_size(){
|
||||
ret = OK;
|
||||
memset(mess, 0, sizeof(mess));
|
||||
int retval = -1;
|
||||
uint64_t retval = -1;
|
||||
|
||||
// no arg, check receiver is null
|
||||
interface->Server_ReceiveArg(ret, mess, nullptr, 0, true, receiver);
|
||||
|
@ -112,7 +112,7 @@ public:
|
||||
*/
|
||||
genericSocket(unsigned short int const port_number, communicationProtocol p,
|
||||
int ps = DEFAULT_PACKET_SIZE, const char *eth=NULL, int hsize=0,
|
||||
uint32_t buf_size=SOCKET_BUFFER_SIZE):
|
||||
uint64_t buf_size=SOCKET_BUFFER_SIZE):
|
||||
portno(port_number),
|
||||
protocol(p),
|
||||
is_a_server(1),
|
||||
@ -181,10 +181,10 @@ public:
|
||||
|
||||
//increase socket buffer size if its udp
|
||||
if (p == UDP) {
|
||||
uint32_t desired_size = buf_size;
|
||||
uint32_t real_size = desired_size * 2; // kernel doubles this value for bookkeeping overhead
|
||||
uint32_t ret_size = -1;
|
||||
socklen_t optlen = sizeof(int);
|
||||
uint64_t desired_size = buf_size;
|
||||
uint64_t real_size = desired_size * 2; // kernel doubles this value for bookkeeping overhead
|
||||
uint64_t ret_size = -1;
|
||||
socklen_t optlen = sizeof(uint64_t);
|
||||
|
||||
// confirm if sufficient
|
||||
if (getsockopt(sockfd.fd, SOL_SOCKET, SO_RCVBUF, &ret_size, &optlen) == -1) {
|
||||
@ -266,7 +266,7 @@ public:
|
||||
* Halving is because of kernel book keeping
|
||||
* @returns actual udp socket buffer size/2
|
||||
*/
|
||||
int getActualUDPSocketBufferSize(){return actual_udp_socket_buffer_size;};
|
||||
uint64_t getActualUDPSocketBufferSize(){return actual_udp_socket_buffer_size;};
|
||||
|
||||
/**
|
||||
* Get protocol TCP or UDP
|
||||
@ -817,5 +817,5 @@ private:
|
||||
int nsent;
|
||||
int total_sent;
|
||||
int header_packet_size;
|
||||
int actual_udp_socket_buffer_size;
|
||||
uint64_t actual_udp_socket_buffer_size;
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user