From a4cd4fd14a9cbda1d5d6959b15b2b6d8d3f0e0b3 Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Mon, 31 Jan 2022 12:02:09 +0100 Subject: [PATCH 01/21] test for rx_arping --- .../tests/test-CmdProxy-rx.cpp | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/slsDetectorSoftware/tests/test-CmdProxy-rx.cpp b/slsDetectorSoftware/tests/test-CmdProxy-rx.cpp index ca7cecfe7..ca3c94a95 100644 --- a/slsDetectorSoftware/tests/test-CmdProxy-rx.cpp +++ b/slsDetectorSoftware/tests/test-CmdProxy-rx.cpp @@ -385,6 +385,30 @@ TEST_CASE("rx_threads", "[.cmd][.rx]") { REQUIRE_NOTHROW(proxy.Call("rx_threads", {}, -1, GET, oss)); } +TEST_CASE("rx_arping", "[.cmd][.rx]") { + Detector det; + CmdProxy proxy(&det); + auto prev_val = det.getRxArping(); + { + std::ostringstream oss; + proxy.Call("rx_arping", {"1"}, -1, PUT, oss); + REQUIRE(oss.str() == "rx_arping 1\n"); + } + { + std::ostringstream oss; + proxy.Call("rx_arping", {}, -1, GET, oss); + REQUIRE(oss.str() == "rx_arping 1\n"); + } + { + std::ostringstream oss; + proxy.Call("rx_arping", {"0"}, -1, PUT, oss); + REQUIRE(oss.str() == "rx_arping 0\n"); + } + for (int i = 0; i != det.size(); ++i) { + det.setRxArping(prev_val[i], {i}); + } +} + /* File */ TEST_CASE("fformat", "[.cmd]") { From ca8a1c046abd8df501550f2b41646829147f39c1 Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Mon, 31 Jan 2022 17:12:32 +0100 Subject: [PATCH 02/21] wip, thread to start arping --- RELEASE.txt | 2 +- slsDetectorSoftware/include/sls/Detector.h | 7 ++ slsDetectorSoftware/src/CmdProxy.h | 6 ++ slsDetectorSoftware/src/Detector.cpp | 8 ++ slsDetectorSoftware/src/Module.cpp | 8 ++ slsDetectorSoftware/src/Module.h | 2 + slsReceiverSoftware/CMakeLists.txt | 1 + slsReceiverSoftware/src/ClientInterface.cpp | 20 ++++- slsReceiverSoftware/src/ClientInterface.h | 2 + slsReceiverSoftware/src/Implementation.cpp | 19 +++++ slsReceiverSoftware/src/Implementation.h | 4 + slsReceiverSoftware/src/ThreadArping.cpp | 79 +++++++++++++++++++ slsReceiverSoftware/src/ThreadArping.h | 45 +++++++++++ .../include/sls/sls_detector_funcs.h | 4 + 14 files changed, 205 insertions(+), 2 deletions(-) create mode 100644 slsReceiverSoftware/src/ThreadArping.cpp create mode 100644 slsReceiverSoftware/src/ThreadArping.h diff --git a/RELEASE.txt b/RELEASE.txt index 8a9e9d611..371bb4494 100755 --- a/RELEASE.txt +++ b/RELEASE.txt @@ -28,7 +28,7 @@ This document describes the differences between v6.1.0 and v6.0.0. - changed default vref of adc9257 to 2V for moench (from 1.33V) - moench and ctb - can set the starting frame number of next acquisition - mythen server kernel check incompatible (cet timezone) - +- rx_arping 2. Resolved Issues diff --git a/slsDetectorSoftware/include/sls/Detector.h b/slsDetectorSoftware/include/sls/Detector.h index bc62319e8..da0a37cb3 100644 --- a/slsDetectorSoftware/include/sls/Detector.h +++ b/slsDetectorSoftware/include/sls/Detector.h @@ -882,6 +882,13 @@ class Detector { * streamer yet or there is no second interface, it gives 0 in its place. */ Result> getRxThreadIds(Positions pos = {}) const; + + Result getRxArping(Positions pos = {}) const; + + /** Starts a thread in slsReceiver to ping the interface it is listening. + * Useful in 10G mode. */ + void setRxArping(bool value, Positions pos = {}); + ///@} /** @name File */ diff --git a/slsDetectorSoftware/src/CmdProxy.h b/slsDetectorSoftware/src/CmdProxy.h index 673fd5fd8..82a745cc8 100644 --- a/slsDetectorSoftware/src/CmdProxy.h +++ b/slsDetectorSoftware/src/CmdProxy.h @@ -903,6 +903,7 @@ class CmdProxy { {"rx_lock", &CmdProxy::rx_lock}, {"rx_lastclient", &CmdProxy::rx_lastclient}, {"rx_threads", &CmdProxy::rx_threads}, + {"rx_arping", &CmdProxy::rx_arping}, /* File */ {"fformat", &CmdProxy::fformat}, @@ -1746,6 +1747,11 @@ class CmdProxy { "streamer yet or there is no second interface, it gives 0 in its " "place."); + INTEGER_COMMAND_VEC_ID( + rx_arping, getRxArping, setRxArping, StringTo, + "[0, 1]\n\tStarts a thread in slsReceiver to ping the interface it is " + "listening to. Useful in 10G mode."); + /* File */ INTEGER_COMMAND_VEC_ID( diff --git a/slsDetectorSoftware/src/Detector.cpp b/slsDetectorSoftware/src/Detector.cpp index f9335a195..801193e78 100644 --- a/slsDetectorSoftware/src/Detector.cpp +++ b/slsDetectorSoftware/src/Detector.cpp @@ -1170,6 +1170,14 @@ Detector::getRxThreadIds(Positions pos) const { return pimpl->Parallel(&Module::getReceiverThreadIds, pos); } +Result Detector::getRxArping(Positions pos) const { + return pimpl->Parallel(&Module::getRxArping, pos); +} + +void Detector::setRxArping(bool value, Positions pos) { + pimpl->Parallel(&Module::setRxArping, pos, value); +} + // File Result Detector::getFileFormat(Positions pos) const { diff --git a/slsDetectorSoftware/src/Module.cpp b/slsDetectorSoftware/src/Module.cpp index 79515b29a..0dc88b9ae 100644 --- a/slsDetectorSoftware/src/Module.cpp +++ b/slsDetectorSoftware/src/Module.cpp @@ -1318,6 +1318,14 @@ std::array Module::getReceiverThreadIds() const { F_GET_RECEIVER_THREAD_IDS); } +bool Module::getRxArping() const { + return sendToReceiver(F_GET_RECEIVER_ARPING); +} + +void Module::setRxArping(bool enable) { + sendToReceiver(F_SET_RECEIVER_ARPING, static_cast(enable), nullptr); +} + // File slsDetectorDefs::fileFormat Module::getFileFormat() const { return sendToReceiver(F_GET_RECEIVER_FILE_FORMAT); diff --git a/slsDetectorSoftware/src/Module.h b/slsDetectorSoftware/src/Module.h index ed553378d..22ea7b030 100644 --- a/slsDetectorSoftware/src/Module.h +++ b/slsDetectorSoftware/src/Module.h @@ -283,6 +283,8 @@ class Module : public virtual slsDetectorDefs { void setReceiverLock(bool lock); sls::IpAddr getReceiverLastClientIP() const; std::array getReceiverThreadIds() const; + bool getRxArping() const; + void setRxArping(bool enable); /************************************************** * * diff --git a/slsReceiverSoftware/CMakeLists.txt b/slsReceiverSoftware/CMakeLists.txt index 14efab277..df7a3f175 100755 --- a/slsReceiverSoftware/CMakeLists.txt +++ b/slsReceiverSoftware/CMakeLists.txt @@ -12,6 +12,7 @@ set(SOURCES src/DataProcessor.cpp src/DataStreamer.cpp src/Fifo.cpp + src/ThreadArping.cpp ) set(PUBLICHEADERS diff --git a/slsReceiverSoftware/src/ClientInterface.cpp b/slsReceiverSoftware/src/ClientInterface.cpp index 5dbc4b3a9..ab4023a5b 100644 --- a/slsReceiverSoftware/src/ClientInterface.cpp +++ b/slsReceiverSoftware/src/ClientInterface.cpp @@ -210,7 +210,8 @@ int ClientInterface::functionTable(){ flist[F_SET_RECEIVER_STREAMING_HWM] = &ClientInterface::set_streaming_hwm; flist[F_RECEIVER_SET_ALL_THRESHOLD] = &ClientInterface::set_all_threshold; flist[F_RECEIVER_SET_DATASTREAM] = &ClientInterface::set_detector_datastream; - + flist[F_GET_RECEIVER_ARPING] = &ClientInterface::get_arping; + flist[F_SET_RECEIVER_ARPING] = &ClientInterface::set_arping; for (int i = NUM_DET_FUNCTIONS + 1; i < NUM_REC_FUNCTIONS ; i++) { LOG(logDEBUG1) << "function fnum: " << i << " (" << @@ -1697,3 +1698,20 @@ int ClientInterface::set_detector_datastream(Interface &socket) { impl()->setDetectorDataStream(port, enable); return socket.Send(OK); } + +int ClientInterface::get_arping(Interface &socket) { + auto retval = static_cast(impl()->getArping()); + LOG(logDEBUG1) << "arping thread status:" << retval; + return socket.sendResult(retval); +} + +int ClientInterface::set_arping(Interface &socket) { + auto value = socket.Receive(); + if (value < 0) { + throw RuntimeError("Invalid arping value: " + std::to_string(value)); + } + verifyIdle(socket); + LOG(logDEBUG1) << "Starting/ Killing arping thread:" << value; + impl()->setArping(value); + return socket.Send(OK); +} diff --git a/slsReceiverSoftware/src/ClientInterface.h b/slsReceiverSoftware/src/ClientInterface.h index 6fd30cb98..fb478cd59 100644 --- a/slsReceiverSoftware/src/ClientInterface.h +++ b/slsReceiverSoftware/src/ClientInterface.h @@ -163,6 +163,8 @@ class ClientInterface : private virtual slsDetectorDefs { int set_streaming_hwm(sls::ServerInterface &socket); int set_all_threshold(sls::ServerInterface &socket); int set_detector_datastream(sls::ServerInterface &socket); + int get_arping(sls::ServerInterface &socket); + int set_arping(sls::ServerInterface &socket); Implementation *impl() { if (receiver != nullptr) { diff --git a/slsReceiverSoftware/src/Implementation.cpp b/slsReceiverSoftware/src/Implementation.cpp index 92c4cae00..99fe27f3a 100644 --- a/slsReceiverSoftware/src/Implementation.cpp +++ b/slsReceiverSoftware/src/Implementation.cpp @@ -7,6 +7,7 @@ #include "GeneralData.h" #include "Listener.h" #include "MasterAttributes.h" +#include "ThreadArping.h" #include "sls/ToString.h" #include "sls/ZmqSocket.h" //just for the zmq port define #include "sls/file_utils.h" @@ -107,6 +108,10 @@ void Implementation::SetupFifoStructure() { * ************************************************/ void Implementation::setDetectorType(const detectorType d) { + + // object to create threads to arping + threadArping = sls::make_unique(); + detType = d; switch (detType) { case GOTTHARD: @@ -323,6 +328,20 @@ std::array Implementation::getThreadIds() const { return retval; } +bool Implementation::getArping() const { return threadArping->IsRunning(); } + +void Implementation::setArping(const bool i) { + if (i != threadArping->IsRunning()) { + if (!i) { + threadArping->StopRunning(); + } else { + threadArping->ClearIpsAndInterfaces(); + threadArping->AddIpsAndInterfaces(eth[0], "10.0.0.1"); + threadArping->StartRunning(); + } + } +} + /************************************************** * * * File Parameters * diff --git a/slsReceiverSoftware/src/Implementation.h b/slsReceiverSoftware/src/Implementation.h index 4b80a0012..e4da56383 100644 --- a/slsReceiverSoftware/src/Implementation.h +++ b/slsReceiverSoftware/src/Implementation.h @@ -11,6 +11,7 @@ class DataProcessor; class DataStreamer; class Fifo; class slsDetectorDefs; +class ThreadArping; #include #include @@ -49,6 +50,8 @@ class Implementation : private virtual slsDetectorDefs { void setFramePaddingEnable(const bool i); void setThreadIds(const pid_t parentTid, const pid_t tcpTid); std::array getThreadIds() const; + bool getArping() const; + void setArping(const bool i); /************************************************** * * @@ -379,6 +382,7 @@ class Implementation : private virtual slsDetectorDefs { std::vector> dataProcessor; std::vector> dataStreamer; std::vector> fifo; + std::unique_ptr threadArping; std::mutex hdf5Lib; }; diff --git a/slsReceiverSoftware/src/ThreadArping.cpp b/slsReceiverSoftware/src/ThreadArping.cpp new file mode 100644 index 000000000..17e6d8824 --- /dev/null +++ b/slsReceiverSoftware/src/ThreadArping.cpp @@ -0,0 +1,79 @@ +// SPDX-License-Identifier: LGPL-3.0-or-other +// Copyright (C) 2021 Contributors to the SLS Detector Package + +#include "ThreadArping.h" +#include "sls/container_utils.h" +#include +#include +#include + +ThreadArping::ThreadArping() {} + +ThreadArping::~ThreadArping() { StopRunning(); } + +bool ThreadArping::IsRunning() const { return runningFlag; } + +void ThreadArping::StartRunning() { + if (!runningFlag) { + if (arpInterfaceIp.size() == 0) { + throw sls::RuntimeError("No Interface added to Arping"); + } + threads.clear(); + threadIds.clear(); + runningFlag = true; + + // create threadss + for (auto arp : arpInterfaceIp) { + try { + std::thread temp = + std::thread(&ThreadArping::RunningThread, this, + threads.size(), arp.first, arp.second); + threads.push_back(temp.native_handle()); + temp.detach(); + } catch (...) { + StopRunning(); + throw sls::RuntimeError("Could not create arping thread [" + + arp.first + ", " + arp.second + "]"); + } + } + } +} + +void ThreadArping::StopRunning() { + int i = 0; + for (auto t : threads) { + pthread_cancel(t); + LOG(logINFOBLUE) << "Killing [ Arping Thread " << i << ": (" + << arpInterfaceIp[i].first << ", " + << arpInterfaceIp[i].second << ")]"; + ++i; + } + threads.clear(); + runningFlag = false; +} + +void ThreadArping::ClearIpsAndInterfaces() { arpInterfaceIp.clear(); } + +void ThreadArping::AddIpsAndInterfaces(std::string interface, std::string ip) { + arpInterfaceIp.push_back(std::make_pair(interface, ip)); +} + +void ThreadArping::RunningThread(int index, std::string interface, + std::string ip) { + pid_t threadId = syscall(SYS_gettid); + LOG(logINFOBLUE) << "Created [ Arping Thread " << index << ": (" + << interface << ", " << ip << ") Tid: " << threadId << "]"; + { + std::lock_guard lock(&mutexIds); + threadIds.push_back(threadId); + } + + while (IsRunning()) { + LOG(logINFOBLUE) << "Going to sleep apring id " << threadId; + // wait for 60s + usleep(60 * 1000 * 1000); + } + + LOG(logINFOBLUE) << "Exiting [ Arping Thread " << index << ": (" + << interface << ", " << ip << ") Tid: " << threadId << "]"; +} \ No newline at end of file diff --git a/slsReceiverSoftware/src/ThreadArping.h b/slsReceiverSoftware/src/ThreadArping.h new file mode 100644 index 000000000..9441497c1 --- /dev/null +++ b/slsReceiverSoftware/src/ThreadArping.h @@ -0,0 +1,45 @@ +// SPDX-License-Identifier: LGPL-3.0-or-other +// Copyright (C) 2021 Contributors to the SLS Detector Package +#pragma once +/** + *@short creates/destroys an ARPing thread to ping the interfaces slsReceiver is +listening to. + */ + +#include "sls/logger.h" +#include "sls/sls_detector_defs.h" + +#include +#include +#include +#include +#include // pair, make_pair + +class ThreadArping : private virtual slsDetectorDefs { + + private: + std::atomic killThread{false}; + std::atomic runningFlag{false}; + + std::vector threads; + std::vector> arpInterfaceIp; + std::vector threadIds; + std::mutex mutexIds; + + public: + ThreadArping(); + virtual ~ThreadArping(); + bool IsRunning() const; + void StartRunning(); + void StopRunning(); + void ClearIpsAndInterfaces(); + void AddIpsAndInterfaces(std::string interface, std::string ip); + + private: + /** + * Thread called: An infinite while loop that runs arping as long as + * RunningMask is satisfied Then it exits the thread on its own if + * killThread is true + */ + void RunningThread(int index, std::string interface, std::string ip); +}; diff --git a/slsSupportLib/include/sls/sls_detector_funcs.h b/slsSupportLib/include/sls/sls_detector_funcs.h index a0b3f71cb..ca7a19de2 100755 --- a/slsSupportLib/include/sls/sls_detector_funcs.h +++ b/slsSupportLib/include/sls/sls_detector_funcs.h @@ -361,6 +361,8 @@ enum detFuncs { F_SET_RECEIVER_STREAMING_HWM, F_RECEIVER_SET_ALL_THRESHOLD, F_RECEIVER_SET_DATASTREAM, + F_GET_RECEIVER_ARPING, + F_SET_RECEIVER_ARPING, NUM_REC_FUNCTIONS }; @@ -720,6 +722,8 @@ const char* getFunctionNameFromEnum(enum detFuncs func) { case F_SET_RECEIVER_STREAMING_HWM: return "F_SET_RECEIVER_STREAMING_HWM"; case F_RECEIVER_SET_ALL_THRESHOLD: return "F_RECEIVER_SET_ALL_THRESHOLD"; case F_RECEIVER_SET_DATASTREAM: return "F_RECEIVER_SET_DATASTREAM"; + case F_GET_RECEIVER_ARPING: return "F_GET_RECEIVER_ARPING"; + case F_SET_RECEIVER_ARPING: return "F_SET_RECEIVER_ARPING"; case NUM_REC_FUNCTIONS: return "NUM_REC_FUNCTIONS"; default: return "Unknown Function"; From c236cbf17b01f8cb1b152737454492ee0b6b9862 Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Tue, 1 Feb 2022 12:23:57 +0100 Subject: [PATCH 03/21] one therad is enough --- slsReceiverSoftware/src/ThreadArping.cpp | 55 ++++++++---------------- slsReceiverSoftware/src/ThreadArping.h | 8 ++-- 2 files changed, 21 insertions(+), 42 deletions(-) diff --git a/slsReceiverSoftware/src/ThreadArping.cpp b/slsReceiverSoftware/src/ThreadArping.cpp index 17e6d8824..674d12e4e 100644 --- a/slsReceiverSoftware/src/ThreadArping.cpp +++ b/slsReceiverSoftware/src/ThreadArping.cpp @@ -18,38 +18,24 @@ void ThreadArping::StartRunning() { if (arpInterfaceIp.size() == 0) { throw sls::RuntimeError("No Interface added to Arping"); } - threads.clear(); - threadIds.clear(); runningFlag = true; - // create threadss - for (auto arp : arpInterfaceIp) { - try { - std::thread temp = - std::thread(&ThreadArping::RunningThread, this, - threads.size(), arp.first, arp.second); - threads.push_back(temp.native_handle()); - temp.detach(); - } catch (...) { - StopRunning(); - throw sls::RuntimeError("Could not create arping thread [" + - arp.first + ", " + arp.second + "]"); - } + // create thread + try { + std::thread temp = std::thread(&ThreadArping::RunningThread, this); + threadObject = temp.native_handle(); + temp.detach(); + } catch (...) { + throw sls::RuntimeError("Could not create arping thread"); } } } void ThreadArping::StopRunning() { - int i = 0; - for (auto t : threads) { - pthread_cancel(t); - LOG(logINFOBLUE) << "Killing [ Arping Thread " << i << ": (" - << arpInterfaceIp[i].first << ", " - << arpInterfaceIp[i].second << ")]"; - ++i; - } - threads.clear(); - runningFlag = false; + pthread_cancel(threadObject); + LOG(logINFOBLUE) << "Killing [ Arping Thread, Tid: " << threadId << "]"; +} +runningFlag = false; } void ThreadArping::ClearIpsAndInterfaces() { arpInterfaceIp.clear(); } @@ -58,22 +44,17 @@ void ThreadArping::AddIpsAndInterfaces(std::string interface, std::string ip) { arpInterfaceIp.push_back(std::make_pair(interface, ip)); } -void ThreadArping::RunningThread(int index, std::string interface, - std::string ip) { - pid_t threadId = syscall(SYS_gettid); - LOG(logINFOBLUE) << "Created [ Arping Thread " << index << ": (" - << interface << ", " << ip << ") Tid: " << threadId << "]"; - { - std::lock_guard lock(&mutexIds); - threadIds.push_back(threadId); - } +void ThreadArping::RunningThread() { + + threadId = syscall(SYS_gettid); + LOG(logINFOBLUE) << "Created [ Arping Thread, Tid: " << threadId << "]"; while (IsRunning()) { - LOG(logINFOBLUE) << "Going to sleep apring id " << threadId; + LOG(logINFOBLUE) << "Going to sleep"; + // wait for 60s usleep(60 * 1000 * 1000); } - LOG(logINFOBLUE) << "Exiting [ Arping Thread " << index << ": (" - << interface << ", " << ip << ") Tid: " << threadId << "]"; + LOG(logINFOBLUE) << "Exiting [ Arping Thread, Tid: " << threadId << "]"; } \ No newline at end of file diff --git a/slsReceiverSoftware/src/ThreadArping.h b/slsReceiverSoftware/src/ThreadArping.h index 9441497c1..f9595a725 100644 --- a/slsReceiverSoftware/src/ThreadArping.h +++ b/slsReceiverSoftware/src/ThreadArping.h @@ -10,7 +10,6 @@ listening to. #include "sls/sls_detector_defs.h" #include -#include #include #include #include // pair, make_pair @@ -21,10 +20,9 @@ class ThreadArping : private virtual slsDetectorDefs { std::atomic killThread{false}; std::atomic runningFlag{false}; - std::vector threads; + pthread_t threadObject; std::vector> arpInterfaceIp; - std::vector threadIds; - std::mutex mutexIds; + pid_t threadIds; public: ThreadArping(); @@ -41,5 +39,5 @@ class ThreadArping : private virtual slsDetectorDefs { * RunningMask is satisfied Then it exits the thread on its own if * killThread is true */ - void RunningThread(int index, std::string interface, std::string ip); + void RunningThread(std::string interface, std::string ip); }; From bf83c9b3e23bd389ab06a460b62ec79d9cfcd08c Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Tue, 1 Feb 2022 14:03:48 +0100 Subject: [PATCH 04/21] arping ip and interface from client interface --- slsReceiverSoftware/src/ClientInterface.cpp | 10 ++++- slsReceiverSoftware/src/ClientInterface.h | 1 + slsReceiverSoftware/src/Implementation.cpp | 12 +++++- slsReceiverSoftware/src/Implementation.h | 3 +- slsReceiverSoftware/src/ThreadArping.cpp | 47 ++++++++++++++++++--- slsReceiverSoftware/src/ThreadArping.h | 6 ++- 6 files changed, 67 insertions(+), 12 deletions(-) diff --git a/slsReceiverSoftware/src/ClientInterface.cpp b/slsReceiverSoftware/src/ClientInterface.cpp index ab4023a5b..4e2cbc12a 100644 --- a/slsReceiverSoftware/src/ClientInterface.cpp +++ b/slsReceiverSoftware/src/ClientInterface.cpp @@ -1399,6 +1399,11 @@ sls::MacAddr ClientInterface::setUdpIp(sls::IpAddr arg) { if (detType == EIGER) { impl()->setEthernetInterface2(eth); } + + // update locally to use for arping + udpips.clear(); + udpips.push_back(arg.str()); + // get mac address auto retval = sls::InterfaceNameToMac(eth); if (retval == 0) { @@ -1431,6 +1436,9 @@ sls::MacAddr ClientInterface::setUdpIp2(sls::IpAddr arg) { } impl()->setEthernetInterface2(eth); + // update locally to use for arping + udpips.push_back(arg.str()); + // get mac address auto retval = sls::InterfaceNameToMac(eth); if (retval == 0) { @@ -1712,6 +1720,6 @@ int ClientInterface::set_arping(Interface &socket) { } verifyIdle(socket); LOG(logDEBUG1) << "Starting/ Killing arping thread:" << value; - impl()->setArping(value); + impl()->setArping(value, udpips); return socket.Send(OK); } diff --git a/slsReceiverSoftware/src/ClientInterface.h b/slsReceiverSoftware/src/ClientInterface.h index fb478cd59..ad7ebc668 100644 --- a/slsReceiverSoftware/src/ClientInterface.h +++ b/slsReceiverSoftware/src/ClientInterface.h @@ -192,4 +192,5 @@ class ClientInterface : private virtual slsDetectorDefs { pid_t parentThreadId{0}; pid_t tcpThreadId{0}; + std::vector udpips; }; diff --git a/slsReceiverSoftware/src/Implementation.cpp b/slsReceiverSoftware/src/Implementation.cpp index 99fe27f3a..3fbb4c0a4 100644 --- a/slsReceiverSoftware/src/Implementation.cpp +++ b/slsReceiverSoftware/src/Implementation.cpp @@ -330,13 +330,21 @@ std::array Implementation::getThreadIds() const { bool Implementation::getArping() const { return threadArping->IsRunning(); } -void Implementation::setArping(const bool i) { +pid_t Implementation::getArpingThreadId() const { + return threadArping->GetThreadId(); +} + +void Implementation::setArping(const bool i, + const std::vector ips) { if (i != threadArping->IsRunning()) { if (!i) { threadArping->StopRunning(); } else { threadArping->ClearIpsAndInterfaces(); - threadArping->AddIpsAndInterfaces(eth[0], "10.0.0.1"); + threadArping->AddIpsAndInterfaces(eth[0], ips[0]); + if (numUDPInterfaces == 2) { + threadArping->AddIpsAndInterfaces(eth[1], ips[1]); + } threadArping->StartRunning(); } } diff --git a/slsReceiverSoftware/src/Implementation.h b/slsReceiverSoftware/src/Implementation.h index e4da56383..df71aa78c 100644 --- a/slsReceiverSoftware/src/Implementation.h +++ b/slsReceiverSoftware/src/Implementation.h @@ -51,7 +51,8 @@ class Implementation : private virtual slsDetectorDefs { void setThreadIds(const pid_t parentTid, const pid_t tcpTid); std::array getThreadIds() const; bool getArping() const; - void setArping(const bool i); + pid_t getArpingThreadId() const; + void setArping(const bool i, const std::vector ips); /************************************************** * * diff --git a/slsReceiverSoftware/src/ThreadArping.cpp b/slsReceiverSoftware/src/ThreadArping.cpp index 674d12e4e..6af8e86ac 100644 --- a/slsReceiverSoftware/src/ThreadArping.cpp +++ b/slsReceiverSoftware/src/ThreadArping.cpp @@ -11,6 +11,8 @@ ThreadArping::ThreadArping() {} ThreadArping::~ThreadArping() { StopRunning(); } +pid_t ThreadArping::GetThreadId() const { return threadId; } + bool ThreadArping::IsRunning() const { return runningFlag; } void ThreadArping::StartRunning() { @@ -33,9 +35,8 @@ void ThreadArping::StartRunning() { void ThreadArping::StopRunning() { pthread_cancel(threadObject); - LOG(logINFOBLUE) << "Killing [ Arping Thread, Tid: " << threadId << "]"; -} -runningFlag = false; + LOG(logINFOBLUE) << "Killing [ Arping Thread, Tid: " << threadId << " ]"; + runningFlag = false; } void ThreadArping::ClearIpsAndInterfaces() { arpInterfaceIp.clear(); } @@ -47,14 +48,48 @@ void ThreadArping::AddIpsAndInterfaces(std::string interface, std::string ip) { void ThreadArping::RunningThread() { threadId = syscall(SYS_gettid); - LOG(logINFOBLUE) << "Created [ Arping Thread, Tid: " << threadId << "]"; + { + std::ostringstream os; + os << "Created [ Arping Thread, Tid: " << threadId << " ] for "; + for (auto ethip : arpInterfaceIp) { + os << "\n\t[ " << ethip.first << ", " << ethip.second << " ]"; + } + LOG(logINFOBLUE) << os.str(); + } + + // create the commands to ping necessary interfaces + std::vector commands; + for (auto ethip : arpInterfaceIp) { + std::ostringstream os; + os << "arping -c 1 -U -I " << ethip.first << " " << ethip.second; + // to read error messages + os << " 2>&1"; + std::string cmd = os.str(); + commands.push_back(cmd); + } while (IsRunning()) { - LOG(logINFOBLUE) << "Going to sleep"; + + // arping + for (auto cmd : commands) { + LOG(logDEBUG) << "Executing Arping Command: " << cmd; + + // execute command and check for errors + FILE *sysFile = popen(cmd.c_str(), "r"); + char output[MAX_STR_LENGTH] = {0}; + fgets(output, sizeof(output), sysFile); + output[sizeof(output) - 1] = '\0'; + if (pclose(sysFile)) { + LOG(logERROR) << "Executing cmd[" << cmd + << "]\n\tError Message : " << output; + } else { + LOG(logDEBUG) << output; + } + } // wait for 60s usleep(60 * 1000 * 1000); } - LOG(logINFOBLUE) << "Exiting [ Arping Thread, Tid: " << threadId << "]"; + LOG(logINFOBLUE) << "Exiting [ Arping Thread, Tid: " << threadId << " ]"; } \ No newline at end of file diff --git a/slsReceiverSoftware/src/ThreadArping.h b/slsReceiverSoftware/src/ThreadArping.h index f9595a725..9f41041f9 100644 --- a/slsReceiverSoftware/src/ThreadArping.h +++ b/slsReceiverSoftware/src/ThreadArping.h @@ -22,11 +22,13 @@ class ThreadArping : private virtual slsDetectorDefs { pthread_t threadObject; std::vector> arpInterfaceIp; - pid_t threadIds; + std::vector commands; + pid_t threadId; public: ThreadArping(); virtual ~ThreadArping(); + pid_t GetThreadId() const; bool IsRunning() const; void StartRunning(); void StopRunning(); @@ -39,5 +41,5 @@ class ThreadArping : private virtual slsDetectorDefs { * RunningMask is satisfied Then it exits the thread on its own if * killThread is true */ - void RunningThread(std::string interface, std::string ip); + void RunningThread(); }; From 2a63548f40f4d93b853cb430a28ff3fbe76a8912 Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Tue, 1 Feb 2022 15:28:32 +0100 Subject: [PATCH 05/21] apring thread added to thread ids --- RELEASE.txt | 1 + python/slsdet/detector.py | 13 ++++++++++++- python/src/detector.cpp | 7 +++++++ slsDetectorSoftware/include/sls/Detector.h | 9 +++++---- slsDetectorSoftware/src/CmdProxy.h | 14 ++++++-------- slsReceiverSoftware/src/Implementation.cpp | 3 +++ slsSupportLib/include/sls/sls_detector_defs.h | 2 +- 7 files changed, 35 insertions(+), 14 deletions(-) diff --git a/RELEASE.txt b/RELEASE.txt index 371bb4494..e3fa1752c 100755 --- a/RELEASE.txt +++ b/RELEASE.txt @@ -29,6 +29,7 @@ This document describes the differences between v6.1.0 and v6.0.0. - moench and ctb - can set the starting frame number of next acquisition - mythen server kernel check incompatible (cet timezone) - rx_arping +- rx_threadsids max is now 9 (breaking api) 2. Resolved Issues diff --git a/python/slsdet/detector.py b/python/slsdet/detector.py index 0a16ab8b0..91e81e90c 100755 --- a/python/slsdet/detector.py +++ b/python/slsdet/detector.py @@ -258,7 +258,7 @@ class Detector(CppDetectorApi): @element def rx_threads(self): """ - Get thread ids from the receiver in order of [parent, tcp, listener 0, processor 0, streamer 0, listener 1, processor 1, streamer 1]. + Get thread ids from the receiver in order of [parent, tcp, listener 0, processor 0, streamer 0, listener 1, processor 1, streamer 1, arping]. Note ----- @@ -268,6 +268,17 @@ class Detector(CppDetectorApi): """ return self.getRxThreadIds() + @property + @element + def rx_arping(self): + """Starts a thread in slsReceiver to ping the interface it is listening every minute. Useful in 10G mode. """ + return self.getRxArping() + + @rx_arping.setter + def rx_arping(self, value): + ut.set_using_dict(self.setRxArping, value) + + @property @element def dr(self): diff --git a/python/src/detector.cpp b/python/src/detector.cpp index 7677fbae4..9f1d6937c 100644 --- a/python/src/detector.cpp +++ b/python/src/detector.cpp @@ -768,6 +768,13 @@ void init_det(py::module &m) { (Result>(Detector::*)(sls::Positions) const) & Detector::getRxThreadIds, py::arg() = Positions{}) + .def("getRxArping", + (Result(Detector::*)(sls::Positions) const) & + Detector::getRxArping, + py::arg() = Positions{}) + .def("setRxArping", + (void (Detector::*)(bool, sls::Positions)) & Detector::setRxArping, + py::arg(), py::arg() = Positions{}) .def("getFileFormat", (Result(Detector::*)(sls::Positions) const) & Detector::getFileFormat, diff --git a/slsDetectorSoftware/include/sls/Detector.h b/slsDetectorSoftware/include/sls/Detector.h index da0a37cb3..a842dd92f 100644 --- a/slsDetectorSoftware/include/sls/Detector.h +++ b/slsDetectorSoftware/include/sls/Detector.h @@ -878,15 +878,16 @@ class Detector { Result getRxLastClientIP(Positions pos = {}) const; /** Get thread ids from the receiver in order of [parent, tcp, listener 0, - * processor 0, streamer 0, listener 1, processor 1, streamer 1]. If no - * streamer yet or there is no second interface, it gives 0 in its place. */ + * processor 0, streamer 0, listener 1, processor 1, streamer 1, arping]. If + * no streamer yet or there is no second interface, it gives 0 in its place. + */ Result> getRxThreadIds(Positions pos = {}) const; Result getRxArping(Positions pos = {}) const; - /** Starts a thread in slsReceiver to ping the interface it is listening. - * Useful in 10G mode. */ + /** Starts a thread in slsReceiver to ping the interface it is listening + * every minute. Useful in 10G mode. */ void setRxArping(bool value, Positions pos = {}); ///@} diff --git a/slsDetectorSoftware/src/CmdProxy.h b/slsDetectorSoftware/src/CmdProxy.h index 82a745cc8..7674eb53d 100644 --- a/slsDetectorSoftware/src/CmdProxy.h +++ b/slsDetectorSoftware/src/CmdProxy.h @@ -1739,18 +1739,16 @@ class CmdProxy { rx_lastclient, getRxLastClientIP, "\n\tClient IP Address that last communicated with the receiver."); - GET_COMMAND( - rx_threads, getRxThreadIds, - "\n\tGet thread ids from the receiver in order of [parent, tcp, " - "listener 0, " - "processor 0, streamer 0, listener 1, processor 1, streamer 1]. If no " - "streamer yet or there is no second interface, it gives 0 in its " - "place."); + GET_COMMAND(rx_threads, getRxThreadIds, + "\n\tGet thread ids from the receiver in order of [parent, " + "tcp, listener 0, processor 0, streamer 0, listener 1, " + "processor 1, streamer 1, arping]. If no streamer yet or there " + "is no second interface, it gives 0 in its place."); INTEGER_COMMAND_VEC_ID( rx_arping, getRxArping, setRxArping, StringTo, "[0, 1]\n\tStarts a thread in slsReceiver to ping the interface it is " - "listening to. Useful in 10G mode."); + "listening to every minute. Useful in 10G mode."); /* File */ diff --git a/slsReceiverSoftware/src/Implementation.cpp b/slsReceiverSoftware/src/Implementation.cpp index 3fbb4c0a4..36bda4160 100644 --- a/slsReceiverSoftware/src/Implementation.cpp +++ b/slsReceiverSoftware/src/Implementation.cpp @@ -325,6 +325,9 @@ std::array Implementation::getThreadIds() const { retval[id++] = 0; } } + if (threadArping->IsRunning()) { + retval[NUM_RX_THREAD_IDS - 1] = threadArping->GetThreadId(); + } return retval; } diff --git a/slsSupportLib/include/sls/sls_detector_defs.h b/slsSupportLib/include/sls/sls_detector_defs.h index 6feb18c23..4dd5d3f48 100644 --- a/slsSupportLib/include/sls/sls_detector_defs.h +++ b/slsSupportLib/include/sls/sls_detector_defs.h @@ -73,7 +73,7 @@ #define DEFAULT_STREAMING_TIMER_IN_MS 500 -#define NUM_RX_THREAD_IDS 8 +#define NUM_RX_THREAD_IDS 9 #ifdef __cplusplus class slsDetectorDefs { From 158719e325bec8a6e78ecbc3bbaa0b9e8f738994 Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Tue, 1 Feb 2022 15:38:15 +0100 Subject: [PATCH 06/21] eiger and 2 udpinterfaces --- slsReceiverSoftware/src/Implementation.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/slsReceiverSoftware/src/Implementation.cpp b/slsReceiverSoftware/src/Implementation.cpp index 36bda4160..60dbd54d9 100644 --- a/slsReceiverSoftware/src/Implementation.cpp +++ b/slsReceiverSoftware/src/Implementation.cpp @@ -345,7 +345,7 @@ void Implementation::setArping(const bool i, } else { threadArping->ClearIpsAndInterfaces(); threadArping->AddIpsAndInterfaces(eth[0], ips[0]); - if (numUDPInterfaces == 2) { + if (numUDPInterfaces == 2 && detType != EIGER) { threadArping->AddIpsAndInterfaces(eth[1], ips[1]); } threadArping->StartRunning(); From 9168bc3ec982787fc7f7fee5193bdb42f40e79a5 Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Wed, 2 Feb 2022 15:12:35 +0100 Subject: [PATCH 07/21] eiger server: fix for datastream enabling wrong ports for bottom half module --- slsDetectorServers/eigerDetectorServer/Beb.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/slsDetectorServers/eigerDetectorServer/Beb.c b/slsDetectorServers/eigerDetectorServer/Beb.c index 57fcd5a9a..073bed91e 100644 --- a/slsDetectorServers/eigerDetectorServer/Beb.c +++ b/slsDetectorServers/eigerDetectorServer/Beb.c @@ -492,6 +492,11 @@ int Beb_SetDataStream(enum portPosition port, int enable) { u_int32_t reg = XPAR_GPIO_P15_STREAMING_REG; u_int32_t mask = (port == LEFT ? XPAR_GPIO_LFT_STRM_DSBL_MSK : XPAR_GPIO_RGHT_STRM_DSBL_MSK); + // invert mask if bottom + if (!Beb_top) { + mask = (port == LEFT ? XPAR_GPIO_RGHT_STRM_DSBL_MSK + : XPAR_GPIO_LFT_STRM_DSBL_MSK); + } u_int32_t value = Beb_Read32(csp0base, reg); // disabling in firmware @@ -529,6 +534,11 @@ int Beb_GetDataStream(enum portPosition port, int *retval) { u_int32_t reg = XPAR_GPIO_P15_STREAMING_REG; u_int32_t mask = (port == LEFT ? XPAR_GPIO_LFT_STRM_DSBL_MSK : XPAR_GPIO_RGHT_STRM_DSBL_MSK); + // invert mask if bottom + if (!Beb_top) { + mask = (port == LEFT ? XPAR_GPIO_RGHT_STRM_DSBL_MSK + : XPAR_GPIO_LFT_STRM_DSBL_MSK); + } u_int32_t value = Beb_Read32(csp0base, reg); // disabling in firmware From 0ed7d1e9b10aae98116adc2c8e6d3815184606ed Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Wed, 2 Feb 2022 15:27:37 +0100 Subject: [PATCH 08/21] receiver suimmary print out more clear when it is deactivated and exception when trying to disable data stream in 10g mode --- .../src/slsDetectorServer_funcs.c | 6 ++++ slsReceiverSoftware/src/Implementation.cpp | 34 +++++++++---------- 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c b/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c index a72de966d..dcea5b951 100644 --- a/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c +++ b/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c @@ -8312,6 +8312,12 @@ int set_datastream(int file_des) { ret = FAIL; sprintf(mess, "Could not %s. Invalid enable %d. \n", msg, enable); LOG(logERROR, (mess)); + } else if (enableTenGigabitEthernet(GET_FLAG) == 0) { + ret = FAIL; + sprintf(mess, + "Could not %s. Disabling is only enabled in 10g mode.\n", + enable); + LOG(logERROR, (mess)); } else { ret = setDataStream(port, enable); if (ret == FAIL) { diff --git a/slsReceiverSoftware/src/Implementation.cpp b/slsReceiverSoftware/src/Implementation.cpp index 60dbd54d9..6901a8a33 100644 --- a/slsReceiverSoftware/src/Implementation.cpp +++ b/slsReceiverSoftware/src/Implementation.cpp @@ -640,25 +640,25 @@ void Implementation::stopReceiver() { std::to_string(std::abs(mp[i])) + std::string(" (Extra)"); } + std::string summary; + if (!activated) { + summary = "\n\tDeactivated Receiver"; + } else if (!detectorDataStream[i]) { + summary = (i == 0 ? "\n\tDeactivated Left Port" + : "\n\tDeactivated Right Port"); + } else { + std::ostringstream os; + os << "\n\tMissing Packets\t\t: " << mpMessage + << "\n\tComplete Frames\t\t: " << nf + << "\n\tLast Frame Caught\t: " + << listener[i]->GetLastFrameIndexCaught(); + summary = os.str(); + } + TLogLevel lev = ((mp[i]) > 0) ? logINFORED : logINFOGREEN; - LOG(lev) << - // udp port number could be the second if selected interface is - // 2 for jungfrau - "Summary of Port " << udpPortNum[i] - << "\n\tMissing Packets\t\t: " << mpMessage - << "\n\tComplete Frames\t\t: " << nf - << "\n\tLast Frame Caught\t: " - << listener[i]->GetLastFrameIndexCaught(); - } - if (!activated) { - LOG(logINFORED) << "Deactivated Receiver"; - } - if (!detectorDataStream[0]) { - LOG(logINFORED) << "Deactivated Left Port"; - } - if (!detectorDataStream[1]) { - LOG(logINFORED) << "Deactivated Right Port"; + LOG(lev) << "Summary of Port " << udpPortNum[i] << summary; } + // callback if (acquisitionFinishedCallBack) { try { From 5825428779b5d58e2d4a9b58f87d4ff5d1c4858b Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Wed, 2 Feb 2022 15:28:12 +0100 Subject: [PATCH 09/21] receiver suimmary print out more clear when it is deactivated and exception when trying to disable data stream in 10g mode --- RELEASE.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RELEASE.txt b/RELEASE.txt index e3fa1752c..866a6f653 100755 --- a/RELEASE.txt +++ b/RELEASE.txt @@ -30,7 +30,7 @@ This document describes the differences between v6.1.0 and v6.0.0. - mythen server kernel check incompatible (cet timezone) - rx_arping - rx_threadsids max is now 9 (breaking api) - +- fixed datastream disabling for eiger. Its only available in 10g mode. 2. Resolved Issues ================== From d0f761b2adcb4b16c8837a2143ba3141760c59a5 Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Wed, 2 Feb 2022 15:30:32 +0100 Subject: [PATCH 10/21] binaries in --- .../bin/eigerDetectorServer_developer | Bin 413415 -> 413415 bytes slsSupportLib/include/sls/versionAPI.h | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/slsDetectorServers/eigerDetectorServer/bin/eigerDetectorServer_developer b/slsDetectorServers/eigerDetectorServer/bin/eigerDetectorServer_developer index 2ad97aa5733b6ee1d025d41f8f1797e2d1886e18..890ff68e6979d54b913d8e256c2820c63707963b 100755 GIT binary patch delta 65837 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[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 delta 66211 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

f0!yt3CHWp$T|4=n{BxRW<}@Y>VlrHLa=_w?Ic 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 i^y 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 diff --git a/slsSupportLib/include/sls/versionAPI.h b/slsSupportLib/include/sls/versionAPI.h index 06340984d..5550fce37 100644 --- a/slsSupportLib/include/sls/versionAPI.h +++ b/slsSupportLib/include/sls/versionAPI.h @@ -12,4 +12,4 @@ #define APIJUNGFRAU 0x220131 #define APIMYTHEN3 0x220131 #define APIMOENCH 0x220131 -#define APIEIGER 0x220131 +#define APIEIGER 0x220202 From ef1e41fc1216da20959821e8acb266f045f0a30c Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Wed, 2 Feb 2022 16:16:14 +0100 Subject: [PATCH 11/21] typo fix --- .../slsDetectorServer/src/slsDetectorServer_funcs.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c b/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c index dcea5b951..131db9f7e 100644 --- a/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c +++ b/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c @@ -2932,7 +2932,7 @@ int enable_ten_giga(int file_des) { if (receiveData(file_des, &arg, sizeof(arg), INT32) < 0) return printSocketReadError(); - LOG(logINFOBLUE, ("Setting 10GbE: %d\n", arg)); + LOG(logDEBUG, ("Setting 10GbE: %d\n", arg)); #if defined(JUNGFRAUD) || defined(GOTTHARDD) || defined(GOTTHARD2D) functionNotImplemented(); @@ -8316,7 +8316,7 @@ int set_datastream(int file_des) { ret = FAIL; sprintf(mess, "Could not %s. Disabling is only enabled in 10g mode.\n", - enable); + msg); LOG(logERROR, (mess)); } else { ret = setDataStream(port, enable); From 8f30394f6301b3732653214f89dc8265bc9e38ee Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Wed, 2 Feb 2022 16:18:19 +0100 Subject: [PATCH 12/21] datastream enabled allowed for 1g mode --- .../slsDetectorServer/src/slsDetectorServer_funcs.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c b/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c index 131db9f7e..5f95d2030 100644 --- a/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c +++ b/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c @@ -8312,7 +8312,7 @@ int set_datastream(int file_des) { ret = FAIL; sprintf(mess, "Could not %s. Invalid enable %d. \n", msg, enable); LOG(logERROR, (mess)); - } else if (enableTenGigabitEthernet(GET_FLAG) == 0) { + } else if (enableTenGigabitEthernet(GET_FLAG) == 0 && enable == 0) { ret = FAIL; sprintf(mess, "Could not %s. Disabling is only enabled in 10g mode.\n", From 59085f7dc3edd75627b0091c2668b510d41065a9 Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Wed, 2 Feb 2022 16:32:35 +0100 Subject: [PATCH 13/21] allow to get datastream and enable data stream for 1g --- .../slsDetectorServer/src/slsDetectorServer_funcs.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c b/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c index 5f95d2030..519080e97 100644 --- a/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c +++ b/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c @@ -8266,6 +8266,9 @@ int get_datastream(int file_des) { "Only left and right allowed\n", arg); LOG(logERROR, (mess)); + } else if (enableTenGigabitEthernet(GET_FLAG) == 0) { + retval = 1; + LOG(logINFO, ("Datastream always enabled for 1g\n")); } else { ret = getDataStream(arg, &retval); LOG(logDEBUG1, ("datastream (%s) retval: %u\n", @@ -8318,6 +8321,8 @@ int set_datastream(int file_des) { "Could not %s. Disabling is only enabled in 10g mode.\n", msg); LOG(logERROR, (mess)); + } else if (enableTenGigabitEthernet(GET_FLAG) == 0 && enable == 1) { + LOG(logINFO, ("Datastream always enabled for 1g\n")); } else { ret = setDataStream(port, enable); if (ret == FAIL) { From 1a1533cad86aa8f832de7706e84c39527c322507 Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Wed, 2 Feb 2022 16:35:41 +0100 Subject: [PATCH 14/21] binaries in --- .../bin/eigerDetectorServer_developer | Bin 413415 -> 413415 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/slsDetectorServers/eigerDetectorServer/bin/eigerDetectorServer_developer b/slsDetectorServers/eigerDetectorServer/bin/eigerDetectorServer_developer index 890ff68e6979d54b913d8e256c2820c63707963b..cd82afbdcb8fc61fc30149d7f8a9001f6ab9132d 100755 GIT binary patch delta 55969 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 delta 55697 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 Date: Thu, 3 Feb 2022 10:59:52 +0100 Subject: [PATCH 15/21] using ThreadObject, waiting for 1 sec --- python/slsdet/detector.py | 2 +- slsDetectorSoftware/include/sls/Detector.h | 2 +- slsDetectorSoftware/src/CmdProxy.h | 8 +- slsReceiverSoftware/src/Arping.cpp | 63 ++++++++++++++ slsReceiverSoftware/src/Arping.h | 29 +++++++ slsReceiverSoftware/src/Implementation.cpp | 4 +- slsReceiverSoftware/src/ThreadArping.cpp | 95 ---------------------- slsReceiverSoftware/src/ThreadArping.h | 45 ---------- slsReceiverSoftware/src/ThreadObject.h | 4 +- 9 files changed, 103 insertions(+), 149 deletions(-) create mode 100644 slsReceiverSoftware/src/Arping.cpp create mode 100644 slsReceiverSoftware/src/Arping.h delete mode 100644 slsReceiverSoftware/src/ThreadArping.cpp delete mode 100644 slsReceiverSoftware/src/ThreadArping.h diff --git a/python/slsdet/detector.py b/python/slsdet/detector.py index 91e81e90c..1efa837e5 100755 --- a/python/slsdet/detector.py +++ b/python/slsdet/detector.py @@ -271,7 +271,7 @@ class Detector(CppDetectorApi): @property @element def rx_arping(self): - """Starts a thread in slsReceiver to ping the interface it is listening every minute. Useful in 10G mode. """ + """Starts a thread in slsReceiver to arping the interface it is listening every minute. Useful in 10G mode. """ return self.getRxArping() @rx_arping.setter diff --git a/slsDetectorSoftware/include/sls/Detector.h b/slsDetectorSoftware/include/sls/Detector.h index a842dd92f..1f16b7269 100644 --- a/slsDetectorSoftware/include/sls/Detector.h +++ b/slsDetectorSoftware/include/sls/Detector.h @@ -886,7 +886,7 @@ class Detector { Result getRxArping(Positions pos = {}) const; - /** Starts a thread in slsReceiver to ping the interface it is listening + /** Starts a thread in slsReceiver to arping the interface it is listening * every minute. Useful in 10G mode. */ void setRxArping(bool value, Positions pos = {}); diff --git a/slsDetectorSoftware/src/CmdProxy.h b/slsDetectorSoftware/src/CmdProxy.h index 7674eb53d..ac1afb4ad 100644 --- a/slsDetectorSoftware/src/CmdProxy.h +++ b/slsDetectorSoftware/src/CmdProxy.h @@ -1745,10 +1745,10 @@ class CmdProxy { "processor 1, streamer 1, arping]. If no streamer yet or there " "is no second interface, it gives 0 in its place."); - INTEGER_COMMAND_VEC_ID( - rx_arping, getRxArping, setRxArping, StringTo, - "[0, 1]\n\tStarts a thread in slsReceiver to ping the interface it is " - "listening to every minute. Useful in 10G mode."); + INTEGER_COMMAND_VEC_ID(rx_arping, getRxArping, setRxArping, StringTo, + "[0, 1]\n\tStarts a thread in slsReceiver to arping " + "the interface it is " + "listening to every minute. Useful in 10G mode."); /* File */ diff --git a/slsReceiverSoftware/src/Arping.cpp b/slsReceiverSoftware/src/Arping.cpp new file mode 100644 index 000000000..6b7bfd3eb --- /dev/null +++ b/slsReceiverSoftware/src/Arping.cpp @@ -0,0 +1,63 @@ +// SPDX-License-Identifier: LGPL-3.0-or-other +// Copyright (C) 2021 Contributors to the SLS Detector Package + +#include "Arping.h" + +#include + +const std::string Arping::ThreadType = "Arping"; + +Arping::Arping(nt ind) : ThreadObject(ind, ThreadType) {} + +Arping::~Arping() = default; + +void Arping::ClearIpsAndInterfaces() { + arpInterfaceIp.clear(); + commands.clear(); +} + +void Arping::AddInterfacesAndIps(std::string interface, std::string ip) { + // create commands to arping + std::ostringstream os; + os << "arping -c 1 -U -I " << interface << " " << ip; + // to read error messages + os << " 2>&1"; + std::string cmd = os.str(); + arpingCommands.push_back(cmd); +} + +void Arping::ThreadExecution() { + // arping + + // wait for 60s + usleep(60 * 1000 * 1000); +} + +LOG(logINFOBLUE) << "Exiting [ Arping Thread, Tid: " << threadId << " ]"; +} + +void Arping::ExecuteCommands() { + for (auto cmd : commands) { + LOG(logDEBUG) << "Executing Arping Command: " << cmd; + + // execute command + FILE *sysFile = popen(cmd.c_str(), "r"); + if (sysFile == NULL) { + LOG(logERROR) << "Executing cmd [" cmd << " ] Fail:" + << "\n\t Popen fail"; + continue; + } + + // check for errors + char output[MAX_STR_LENGTH] = {0}; + fgets(output, sizeof(output), sysFile); + output[sizeof(output) - 1] = '\0'; + + if (pclose(sysFile)) { + LOG(logERROR) << "Executing cmd[" << cmd + << "]\n\tError Message : " << output; + } else { + LOG(logDEBUG) << output; + } + } +} \ No newline at end of file diff --git a/slsReceiverSoftware/src/Arping.h b/slsReceiverSoftware/src/Arping.h new file mode 100644 index 000000000..b32af3240 --- /dev/null +++ b/slsReceiverSoftware/src/Arping.h @@ -0,0 +1,29 @@ +// SPDX-License-Identifier: LGPL-3.0-or-other +// Copyright (C) 2021 Contributors to the SLS Detector Package +#pragma once +/** + *@short creates/destroys an ARPing thread to arping the interfaces slsReceiver +is listening to. + */ + +#include "ThreadObject.h" + +class Arping : private virtual slsDetectorDefs, public ThreadObject { + + public: + Arping(int ind); + ~Arping(); + void ClearIpsAndInterfaces(); + void AddInterfacesAndIps(std::string interface, std::string ip); + + private: + /** + * Thread Execution for Arping Class + * Arping interfaces and wait 60 seconds + */ + void ThreadExecution() override; + void ExecuteCommands(); + + static const std::string ThreadType; + std::vector arpingCommands; +}; diff --git a/slsReceiverSoftware/src/Implementation.cpp b/slsReceiverSoftware/src/Implementation.cpp index 60dbd54d9..70730a5fa 100644 --- a/slsReceiverSoftware/src/Implementation.cpp +++ b/slsReceiverSoftware/src/Implementation.cpp @@ -344,9 +344,9 @@ void Implementation::setArping(const bool i, threadArping->StopRunning(); } else { threadArping->ClearIpsAndInterfaces(); - threadArping->AddIpsAndInterfaces(eth[0], ips[0]); + threadArping->AddInterfacesAndIps(eth[0], ips[0]); if (numUDPInterfaces == 2 && detType != EIGER) { - threadArping->AddIpsAndInterfaces(eth[1], ips[1]); + threadArping->AddInterfacesAndIps(eth[1], ips[1]); } threadArping->StartRunning(); } diff --git a/slsReceiverSoftware/src/ThreadArping.cpp b/slsReceiverSoftware/src/ThreadArping.cpp deleted file mode 100644 index 6af8e86ac..000000000 --- a/slsReceiverSoftware/src/ThreadArping.cpp +++ /dev/null @@ -1,95 +0,0 @@ -// SPDX-License-Identifier: LGPL-3.0-or-other -// Copyright (C) 2021 Contributors to the SLS Detector Package - -#include "ThreadArping.h" -#include "sls/container_utils.h" -#include -#include -#include - -ThreadArping::ThreadArping() {} - -ThreadArping::~ThreadArping() { StopRunning(); } - -pid_t ThreadArping::GetThreadId() const { return threadId; } - -bool ThreadArping::IsRunning() const { return runningFlag; } - -void ThreadArping::StartRunning() { - if (!runningFlag) { - if (arpInterfaceIp.size() == 0) { - throw sls::RuntimeError("No Interface added to Arping"); - } - runningFlag = true; - - // create thread - try { - std::thread temp = std::thread(&ThreadArping::RunningThread, this); - threadObject = temp.native_handle(); - temp.detach(); - } catch (...) { - throw sls::RuntimeError("Could not create arping thread"); - } - } -} - -void ThreadArping::StopRunning() { - pthread_cancel(threadObject); - LOG(logINFOBLUE) << "Killing [ Arping Thread, Tid: " << threadId << " ]"; - runningFlag = false; -} - -void ThreadArping::ClearIpsAndInterfaces() { arpInterfaceIp.clear(); } - -void ThreadArping::AddIpsAndInterfaces(std::string interface, std::string ip) { - arpInterfaceIp.push_back(std::make_pair(interface, ip)); -} - -void ThreadArping::RunningThread() { - - threadId = syscall(SYS_gettid); - { - std::ostringstream os; - os << "Created [ Arping Thread, Tid: " << threadId << " ] for "; - for (auto ethip : arpInterfaceIp) { - os << "\n\t[ " << ethip.first << ", " << ethip.second << " ]"; - } - LOG(logINFOBLUE) << os.str(); - } - - // create the commands to ping necessary interfaces - std::vector commands; - for (auto ethip : arpInterfaceIp) { - std::ostringstream os; - os << "arping -c 1 -U -I " << ethip.first << " " << ethip.second; - // to read error messages - os << " 2>&1"; - std::string cmd = os.str(); - commands.push_back(cmd); - } - - while (IsRunning()) { - - // arping - for (auto cmd : commands) { - LOG(logDEBUG) << "Executing Arping Command: " << cmd; - - // execute command and check for errors - FILE *sysFile = popen(cmd.c_str(), "r"); - char output[MAX_STR_LENGTH] = {0}; - fgets(output, sizeof(output), sysFile); - output[sizeof(output) - 1] = '\0'; - if (pclose(sysFile)) { - LOG(logERROR) << "Executing cmd[" << cmd - << "]\n\tError Message : " << output; - } else { - LOG(logDEBUG) << output; - } - } - - // wait for 60s - usleep(60 * 1000 * 1000); - } - - LOG(logINFOBLUE) << "Exiting [ Arping Thread, Tid: " << threadId << " ]"; -} \ No newline at end of file diff --git a/slsReceiverSoftware/src/ThreadArping.h b/slsReceiverSoftware/src/ThreadArping.h deleted file mode 100644 index 9f41041f9..000000000 --- a/slsReceiverSoftware/src/ThreadArping.h +++ /dev/null @@ -1,45 +0,0 @@ -// SPDX-License-Identifier: LGPL-3.0-or-other -// Copyright (C) 2021 Contributors to the SLS Detector Package -#pragma once -/** - *@short creates/destroys an ARPing thread to ping the interfaces slsReceiver is -listening to. - */ - -#include "sls/logger.h" -#include "sls/sls_detector_defs.h" - -#include -#include -#include -#include // pair, make_pair - -class ThreadArping : private virtual slsDetectorDefs { - - private: - std::atomic killThread{false}; - std::atomic runningFlag{false}; - - pthread_t threadObject; - std::vector> arpInterfaceIp; - std::vector commands; - pid_t threadId; - - public: - ThreadArping(); - virtual ~ThreadArping(); - pid_t GetThreadId() const; - bool IsRunning() const; - void StartRunning(); - void StopRunning(); - void ClearIpsAndInterfaces(); - void AddIpsAndInterfaces(std::string interface, std::string ip); - - private: - /** - * Thread called: An infinite while loop that runs arping as long as - * RunningMask is satisfied Then it exits the thread on its own if - * killThread is true - */ - void RunningThread(); -}; diff --git a/slsReceiverSoftware/src/ThreadObject.h b/slsReceiverSoftware/src/ThreadObject.h index d57857548..61bdd92ab 100644 --- a/slsReceiverSoftware/src/ThreadObject.h +++ b/slsReceiverSoftware/src/ThreadObject.h @@ -21,8 +21,10 @@ class ThreadObject : private virtual slsDetectorDefs { protected: const int index{0}; - private: + protected: std::atomic killThread{false}; + + private: std::atomic runningFlag{false}; std::thread threadObject; sem_t semaphore; From 47c6954044ea69ceb95c276e57a08c073414a4a5 Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Thu, 3 Feb 2022 12:14:29 +0100 Subject: [PATCH 16/21] clean code for thread for arping --- slsReceiverSoftware/CMakeLists.txt | 2 +- slsReceiverSoftware/src/Arping.cpp | 85 ++++++++++++++++------ slsReceiverSoftware/src/Arping.h | 32 ++++---- slsReceiverSoftware/src/Implementation.cpp | 26 +++---- slsReceiverSoftware/src/Implementation.h | 4 +- slsReceiverSoftware/src/ThreadObject.h | 17 ++--- 6 files changed, 102 insertions(+), 64 deletions(-) diff --git a/slsReceiverSoftware/CMakeLists.txt b/slsReceiverSoftware/CMakeLists.txt index df7a3f175..d93a2c027 100755 --- a/slsReceiverSoftware/CMakeLists.txt +++ b/slsReceiverSoftware/CMakeLists.txt @@ -12,7 +12,7 @@ set(SOURCES src/DataProcessor.cpp src/DataStreamer.cpp src/Fifo.cpp - src/ThreadArping.cpp + src/Arping.cpp ) set(PUBLICHEADERS diff --git a/slsReceiverSoftware/src/Arping.cpp b/slsReceiverSoftware/src/Arping.cpp index 6b7bfd3eb..a4fe233a2 100644 --- a/slsReceiverSoftware/src/Arping.cpp +++ b/slsReceiverSoftware/src/Arping.cpp @@ -3,61 +3,98 @@ #include "Arping.h" -#include +#include +#include +#include -const std::string Arping::ThreadType = "Arping"; +void Arping::ClearIpsAndInterfaces() { commands.clear(); } -Arping::Arping(nt ind) : ThreadObject(ind, ThreadType) {} - -Arping::~Arping() = default; - -void Arping::ClearIpsAndInterfaces() { - arpInterfaceIp.clear(); - commands.clear(); -} - -void Arping::AddInterfacesAndIps(std::string interface, std::string ip) { +void Arping::AddInterfacesAndIps(const std::string &interface, + const std::string &ip) { // create commands to arping std::ostringstream os; os << "arping -c 1 -U -I " << interface << " " << ip; // to read error messages os << " 2>&1"; std::string cmd = os.str(); - arpingCommands.push_back(cmd); + commands.push_back(cmd); +} + +pid_t Arping::GetThreadId() const { return threadId; } + +bool Arping::IsRunning() const { return runningFlag; } + +void Arping::StartThread() { + TestCommands(); + try { + t = std::thread(&Arping::ThreadExecution, this); + } catch (...) { + throw sls::RuntimeError("Could not start arping thread"); + } + runningFlag = true; +} + +void Arping::StopThread() { + runningFlag = false; + t.join(); } void Arping::ThreadExecution() { - // arping + threadId = syscall(SYS_gettid); + LOG(logINFOBLUE) << "Created [ Arping Thread, Tid: " << threadId << "]"; - // wait for 60s - usleep(60 * 1000 * 1000); + while (runningFlag) { + std::string error = ExecuteCommands(); + // just print (was already tested at thread start) + if (!error.empty()) { + LOG(logERROR) << error; + } + + // wait for 60s as long as thread not killed + int nsecs = 0; + while (runningFlag && nsecs != 60) { + std::this_thread::sleep_for(std::chrono::seconds(1)); + ++nsecs; + } + } + + LOG(logINFOBLUE) << "Exiting [ Arping Thread, Tid: " << threadId << " ]"; + threadId = 0; } -LOG(logINFOBLUE) << "Exiting [ Arping Thread, Tid: " << threadId << " ]"; +void Arping::TestCommands() { + std::string error = ExecuteCommands(); + if (!error.empty()) { + throw sls::RuntimeError(error); + } } -void Arping::ExecuteCommands() { +std::string Arping::ExecuteCommands() { for (auto cmd : commands) { LOG(logDEBUG) << "Executing Arping Command: " << cmd; // execute command FILE *sysFile = popen(cmd.c_str(), "r"); if (sysFile == NULL) { - LOG(logERROR) << "Executing cmd [" cmd << " ] Fail:" - << "\n\t Popen fail"; - continue; + std::ostringstream os; + os << "Could not Arping [" << cmd << " ] : Popen fail"; + return os.str(); } - // check for errors + // copy output char output[MAX_STR_LENGTH] = {0}; fgets(output, sizeof(output), sysFile); output[sizeof(output) - 1] = '\0'; + // check exit status of command if (pclose(sysFile)) { - LOG(logERROR) << "Executing cmd[" << cmd - << "]\n\tError Message : " << output; + std::ostringstream os; + os << "Could not arping[" << cmd << "] : " << output; + return os.str(); } else { LOG(logDEBUG) << output; } } + + return std::string(); } \ No newline at end of file diff --git a/slsReceiverSoftware/src/Arping.h b/slsReceiverSoftware/src/Arping.h index b32af3240..7c509b48a 100644 --- a/slsReceiverSoftware/src/Arping.h +++ b/slsReceiverSoftware/src/Arping.h @@ -6,24 +6,30 @@ is listening to. */ -#include "ThreadObject.h" +#include "sls/logger.h" +#include "sls/sls_detector_defs.h" -class Arping : private virtual slsDetectorDefs, public ThreadObject { +#include +#include + +class Arping : private virtual slsDetectorDefs { public: - Arping(int ind); - ~Arping(); void ClearIpsAndInterfaces(); - void AddInterfacesAndIps(std::string interface, std::string ip); + void AddInterfacesAndIps(const std::string &interface, + const std::string &ip); + pid_t GetThreadId() const; + bool IsRunning() const; + void StartThread(); + void StopThread(); private: - /** - * Thread Execution for Arping Class - * Arping interfaces and wait 60 seconds - */ - void ThreadExecution() override; - void ExecuteCommands(); + void TestCommands(); + std::string ExecuteCommands(); + void ThreadExecution(); - static const std::string ThreadType; - std::vector arpingCommands; + std::vector commands; + std::atomic runningFlag{false}; + std::thread t; + pid_t threadId{0}; }; diff --git a/slsReceiverSoftware/src/Implementation.cpp b/slsReceiverSoftware/src/Implementation.cpp index 70730a5fa..427ca6a3c 100644 --- a/slsReceiverSoftware/src/Implementation.cpp +++ b/slsReceiverSoftware/src/Implementation.cpp @@ -1,13 +1,13 @@ // SPDX-License-Identifier: LGPL-3.0-or-other // Copyright (C) 2021 Contributors to the SLS Detector Package #include "Implementation.h" +#include "Arping.h" #include "DataProcessor.h" #include "DataStreamer.h" #include "Fifo.h" #include "GeneralData.h" #include "Listener.h" #include "MasterAttributes.h" -#include "ThreadArping.h" #include "sls/ToString.h" #include "sls/ZmqSocket.h" //just for the zmq port define #include "sls/file_utils.h" @@ -109,8 +109,8 @@ void Implementation::SetupFifoStructure() { void Implementation::setDetectorType(const detectorType d) { - // object to create threads to arping - threadArping = sls::make_unique(); + // object to create thread for arping + arping = sls::make_unique(); detType = d; switch (detType) { @@ -325,30 +325,28 @@ std::array Implementation::getThreadIds() const { retval[id++] = 0; } } - if (threadArping->IsRunning()) { - retval[NUM_RX_THREAD_IDS - 1] = threadArping->GetThreadId(); - } + retval[NUM_RX_THREAD_IDS - 1] = arping->GetThreadId(); return retval; } -bool Implementation::getArping() const { return threadArping->IsRunning(); } +bool Implementation::getArping() const { return arping->IsRunning(); } pid_t Implementation::getArpingThreadId() const { - return threadArping->GetThreadId(); + return arping->GetThreadId(); } void Implementation::setArping(const bool i, const std::vector ips) { - if (i != threadArping->IsRunning()) { + if (i != arping->IsRunning()) { if (!i) { - threadArping->StopRunning(); + arping->StopThread(); } else { - threadArping->ClearIpsAndInterfaces(); - threadArping->AddInterfacesAndIps(eth[0], ips[0]); + arping->ClearIpsAndInterfaces(); + arping->AddInterfacesAndIps(eth[0], ips[0]); if (numUDPInterfaces == 2 && detType != EIGER) { - threadArping->AddInterfacesAndIps(eth[1], ips[1]); + arping->AddInterfacesAndIps(eth[1], ips[1]); } - threadArping->StartRunning(); + arping->StartThread(); } } } diff --git a/slsReceiverSoftware/src/Implementation.h b/slsReceiverSoftware/src/Implementation.h index df71aa78c..0caf3dc72 100644 --- a/slsReceiverSoftware/src/Implementation.h +++ b/slsReceiverSoftware/src/Implementation.h @@ -11,7 +11,7 @@ class DataProcessor; class DataStreamer; class Fifo; class slsDetectorDefs; -class ThreadArping; +class Arping; #include #include @@ -383,7 +383,7 @@ class Implementation : private virtual slsDetectorDefs { std::vector> dataProcessor; std::vector> dataStreamer; std::vector> fifo; - std::unique_ptr threadArping; + std::unique_ptr arping; std::mutex hdf5Lib; }; diff --git a/slsReceiverSoftware/src/ThreadObject.h b/slsReceiverSoftware/src/ThreadObject.h index 61bdd92ab..8b42538a8 100644 --- a/slsReceiverSoftware/src/ThreadObject.h +++ b/slsReceiverSoftware/src/ThreadObject.h @@ -21,16 +21,6 @@ class ThreadObject : private virtual slsDetectorDefs { protected: const int index{0}; - protected: - std::atomic killThread{false}; - - private: - std::atomic runningFlag{false}; - std::thread threadObject; - sem_t semaphore; - const std::string type; - pid_t threadId{0}; - public: ThreadObject(int threadIndex, std::string threadType); virtual ~ThreadObject(); @@ -49,4 +39,11 @@ class ThreadObject : private virtual slsDetectorDefs { * Then it exits the thread on its own if killThread is true */ void RunningThread(); + + std::atomic killThread{false}; + std::atomic runningFlag{false}; + std::thread threadObject; + sem_t semaphore; + const std::string type; + pid_t threadId{0}; }; From 97417737b675ff9bb38e57d66429e176238446a8 Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Thu, 3 Feb 2022 12:53:07 +0100 Subject: [PATCH 17/21] removing the assumption that udpip1 fill be updated along with udpip2 --- slsReceiverSoftware/src/Arping.cpp | 25 ++++++++++++++++----- slsReceiverSoftware/src/Arping.h | 8 +++---- slsReceiverSoftware/src/ClientInterface.cpp | 5 ++--- slsReceiverSoftware/src/ClientInterface.h | 3 ++- slsReceiverSoftware/src/Implementation.cpp | 11 +++++---- 5 files changed, 35 insertions(+), 17 deletions(-) diff --git a/slsReceiverSoftware/src/Arping.cpp b/slsReceiverSoftware/src/Arping.cpp index a4fe233a2..72281faf0 100644 --- a/slsReceiverSoftware/src/Arping.cpp +++ b/slsReceiverSoftware/src/Arping.cpp @@ -7,17 +7,21 @@ #include #include -void Arping::ClearIpsAndInterfaces() { commands.clear(); } - -void Arping::AddInterfacesAndIps(const std::string &interface, +void Arping::SetInterfacesAndIps(const int index, const std::string &interface, const std::string &ip) { + + if (interface.empty() || ip.empty()) { + throw sls::RuntimeError("Could not arping. Interface name and ip not " + "set up for interface " + + std::to_string(index)); + } // create commands to arping std::ostringstream os; os << "arping -c 1 -U -I " << interface << " " << ip; // to read error messages os << " 2>&1"; std::string cmd = os.str(); - commands.push_back(cmd); + commands[index] = cmd; } pid_t Arping::GetThreadId() const { return threadId; } @@ -41,7 +45,7 @@ void Arping::StopThread() { void Arping::ThreadExecution() { threadId = syscall(SYS_gettid); - LOG(logINFOBLUE) << "Created [ Arping Thread, Tid: " << threadId << "]"; + LOG(logINFOBLUE) << "Created [ Arping Thread, Tid: " << threadId << " ]"; while (runningFlag) { std::string error = ExecuteCommands(); @@ -63,6 +67,12 @@ void Arping::ThreadExecution() { } void Arping::TestCommands() { + // atleast one interface must be set up + if (commands[0].empty()) { + throw sls::RuntimeError( + "Could not arping. Interface not set up in apring thread"); + } + // test if arping commands throw an error std::string error = ExecuteCommands(); if (!error.empty()) { throw sls::RuntimeError(error); @@ -71,6 +81,11 @@ void Arping::TestCommands() { std::string Arping::ExecuteCommands() { for (auto cmd : commands) { + + // empty if 2nd interface not enabled + if (cmd.empty()) + continue; + LOG(logDEBUG) << "Executing Arping Command: " << cmd; // execute command diff --git a/slsReceiverSoftware/src/Arping.h b/slsReceiverSoftware/src/Arping.h index 7c509b48a..af25815f9 100644 --- a/slsReceiverSoftware/src/Arping.h +++ b/slsReceiverSoftware/src/Arping.h @@ -6,8 +6,8 @@ is listening to. */ +#include "receiver_defs.h" #include "sls/logger.h" -#include "sls/sls_detector_defs.h" #include #include @@ -15,8 +15,7 @@ is listening to. class Arping : private virtual slsDetectorDefs { public: - void ClearIpsAndInterfaces(); - void AddInterfacesAndIps(const std::string &interface, + void SetInterfacesAndIps(const int index, const std::string &interface, const std::string &ip); pid_t GetThreadId() const; bool IsRunning() const; @@ -28,7 +27,8 @@ class Arping : private virtual slsDetectorDefs { std::string ExecuteCommands(); void ThreadExecution(); - std::vector commands; + std::vector commands = + std::vector(MAX_NUMBER_OF_LISTENING_THREADS); std::atomic runningFlag{false}; std::thread t; pid_t threadId{0}; diff --git a/slsReceiverSoftware/src/ClientInterface.cpp b/slsReceiverSoftware/src/ClientInterface.cpp index 4e2cbc12a..e7fc4cdcd 100644 --- a/slsReceiverSoftware/src/ClientInterface.cpp +++ b/slsReceiverSoftware/src/ClientInterface.cpp @@ -1401,8 +1401,7 @@ sls::MacAddr ClientInterface::setUdpIp(sls::IpAddr arg) { } // update locally to use for arping - udpips.clear(); - udpips.push_back(arg.str()); + udpips[0] = arg.str(); // get mac address auto retval = sls::InterfaceNameToMac(eth); @@ -1437,7 +1436,7 @@ sls::MacAddr ClientInterface::setUdpIp2(sls::IpAddr arg) { impl()->setEthernetInterface2(eth); // update locally to use for arping - udpips.push_back(arg.str()); + udpips[1] = arg.str(); // get mac address auto retval = sls::InterfaceNameToMac(eth); diff --git a/slsReceiverSoftware/src/ClientInterface.h b/slsReceiverSoftware/src/ClientInterface.h index ad7ebc668..6671c4592 100644 --- a/slsReceiverSoftware/src/ClientInterface.h +++ b/slsReceiverSoftware/src/ClientInterface.h @@ -192,5 +192,6 @@ class ClientInterface : private virtual slsDetectorDefs { pid_t parentThreadId{0}; pid_t tcpThreadId{0}; - std::vector udpips; + std::vector udpips = + std::vector(MAX_NUMBER_OF_LISTENING_THREADS); }; diff --git a/slsReceiverSoftware/src/Implementation.cpp b/slsReceiverSoftware/src/Implementation.cpp index 427ca6a3c..1336eed2e 100644 --- a/slsReceiverSoftware/src/Implementation.cpp +++ b/slsReceiverSoftware/src/Implementation.cpp @@ -341,10 +341,13 @@ void Implementation::setArping(const bool i, if (!i) { arping->StopThread(); } else { - arping->ClearIpsAndInterfaces(); - arping->AddInterfacesAndIps(eth[0], ips[0]); - if (numUDPInterfaces == 2 && detType != EIGER) { - arping->AddInterfacesAndIps(eth[1], ips[1]); + // setup interface + for (int i = 0; i != numUDPInterfaces; ++i) { + // ignore eiger with 2 interfaces (only udp port) + if (i == 1 && (numUDPInterfaces == 1 || detType == EIGER)) { + break; + } + arping->SetInterfacesAndIps(i, eth[i], ips[i]); } arping->StartThread(); } From 3350e3997e2bcd4e5c1d943b940edd286bcb03ab Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Fri, 4 Feb 2022 08:19:46 +0100 Subject: [PATCH 18/21] fixes fromreview --- slsReceiverSoftware/src/Arping.h | 4 ++-- slsReceiverSoftware/src/Implementation.cpp | 20 +++++++------------- slsReceiverSoftware/src/Implementation.h | 4 ++-- slsReceiverSoftware/src/ThreadObject.h | 2 +- 4 files changed, 12 insertions(+), 18 deletions(-) diff --git a/slsReceiverSoftware/src/Arping.h b/slsReceiverSoftware/src/Arping.h index af25815f9..3c84a398b 100644 --- a/slsReceiverSoftware/src/Arping.h +++ b/slsReceiverSoftware/src/Arping.h @@ -12,7 +12,7 @@ is listening to. #include #include -class Arping : private virtual slsDetectorDefs { +class Arping { public: void SetInterfacesAndIps(const int index, const std::string &interface, @@ -31,5 +31,5 @@ class Arping : private virtual slsDetectorDefs { std::vector(MAX_NUMBER_OF_LISTENING_THREADS); std::atomic runningFlag{false}; std::thread t; - pid_t threadId{0}; + std::atomic threadId{0}; }; diff --git a/slsReceiverSoftware/src/Implementation.cpp b/slsReceiverSoftware/src/Implementation.cpp index 1336eed2e..6a7b7d896 100644 --- a/slsReceiverSoftware/src/Implementation.cpp +++ b/slsReceiverSoftware/src/Implementation.cpp @@ -1,7 +1,6 @@ // SPDX-License-Identifier: LGPL-3.0-or-other // Copyright (C) 2021 Contributors to the SLS Detector Package #include "Implementation.h" -#include "Arping.h" #include "DataProcessor.h" #include "DataStreamer.h" #include "Fifo.h" @@ -109,9 +108,6 @@ void Implementation::SetupFifoStructure() { void Implementation::setDetectorType(const detectorType d) { - // object to create thread for arping - arping = sls::make_unique(); - detType = d; switch (detType) { case GOTTHARD: @@ -325,21 +321,19 @@ std::array Implementation::getThreadIds() const { retval[id++] = 0; } } - retval[NUM_RX_THREAD_IDS - 1] = arping->GetThreadId(); + retval[NUM_RX_THREAD_IDS - 1] = arping.GetThreadId(); return retval; } -bool Implementation::getArping() const { return arping->IsRunning(); } +bool Implementation::getArping() const { return arping.IsRunning(); } -pid_t Implementation::getArpingThreadId() const { - return arping->GetThreadId(); -} +pid_t Implementation::getArpingThreadId() const { return arping.GetThreadId(); } void Implementation::setArping(const bool i, const std::vector ips) { - if (i != arping->IsRunning()) { + if (i != arping.IsRunning()) { if (!i) { - arping->StopThread(); + arping.StopThread(); } else { // setup interface for (int i = 0; i != numUDPInterfaces; ++i) { @@ -347,9 +341,9 @@ void Implementation::setArping(const bool i, if (i == 1 && (numUDPInterfaces == 1 || detType == EIGER)) { break; } - arping->SetInterfacesAndIps(i, eth[i], ips[i]); + arping.SetInterfacesAndIps(i, eth[i], ips[i]); } - arping->StartThread(); + arping.StartThread(); } } } diff --git a/slsReceiverSoftware/src/Implementation.h b/slsReceiverSoftware/src/Implementation.h index 0caf3dc72..442f1b4db 100644 --- a/slsReceiverSoftware/src/Implementation.h +++ b/slsReceiverSoftware/src/Implementation.h @@ -1,6 +1,7 @@ // SPDX-License-Identifier: LGPL-3.0-or-other // Copyright (C) 2021 Contributors to the SLS Detector Package #pragma once +#include "Arping.h" #include "receiver_defs.h" #include "sls/container_utils.h" #include "sls/logger.h" @@ -11,7 +12,6 @@ class DataProcessor; class DataStreamer; class Fifo; class slsDetectorDefs; -class Arping; #include #include @@ -383,7 +383,7 @@ class Implementation : private virtual slsDetectorDefs { std::vector> dataProcessor; std::vector> dataStreamer; std::vector> fifo; - std::unique_ptr arping; + Arping arping; std::mutex hdf5Lib; }; diff --git a/slsReceiverSoftware/src/ThreadObject.h b/slsReceiverSoftware/src/ThreadObject.h index 8b42538a8..c708b960b 100644 --- a/slsReceiverSoftware/src/ThreadObject.h +++ b/slsReceiverSoftware/src/ThreadObject.h @@ -45,5 +45,5 @@ class ThreadObject : private virtual slsDetectorDefs { std::thread threadObject; sem_t semaphore; const std::string type; - pid_t threadId{0}; + std::atomic threadId{0}; }; From e8cf3666169da515a957daedc947ecaa3b28b31d Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Fri, 4 Feb 2022 09:51:49 +0100 Subject: [PATCH 19/21] review, replacing syscall(sys_gettid) with gettid() --- slsReceiverSoftware/src/Arping.cpp | 3 +-- slsReceiverSoftware/src/ClientInterface.cpp | 5 ++--- slsReceiverSoftware/src/MultiReceiverApp.cpp | 12 ++++-------- slsReceiverSoftware/src/Receiver.cpp | 4 +--- slsReceiverSoftware/src/ReceiverApp.cpp | 5 ++--- slsReceiverSoftware/src/ThreadObject.cpp | 3 +-- 6 files changed, 11 insertions(+), 21 deletions(-) diff --git a/slsReceiverSoftware/src/Arping.cpp b/slsReceiverSoftware/src/Arping.cpp index 72281faf0..ca78f11c1 100644 --- a/slsReceiverSoftware/src/Arping.cpp +++ b/slsReceiverSoftware/src/Arping.cpp @@ -4,7 +4,6 @@ #include "Arping.h" #include -#include #include void Arping::SetInterfacesAndIps(const int index, const std::string &interface, @@ -44,7 +43,7 @@ void Arping::StopThread() { } void Arping::ThreadExecution() { - threadId = syscall(SYS_gettid); + threadId = gettid(); LOG(logINFOBLUE) << "Created [ Arping Thread, Tid: " << threadId << " ]"; while (runningFlag) { diff --git a/slsReceiverSoftware/src/ClientInterface.cpp b/slsReceiverSoftware/src/ClientInterface.cpp index e7fc4cdcd..600b00d70 100644 --- a/slsReceiverSoftware/src/ClientInterface.cpp +++ b/slsReceiverSoftware/src/ClientInterface.cpp @@ -19,7 +19,6 @@ #include #include #include -#include #include #include @@ -41,7 +40,7 @@ ClientInterface::ClientInterface(int portNumber) portNumber(portNumber > 0 ? portNumber : DEFAULT_PORTNO + 2), server(portNumber) { functionTable(); - parentThreadId = syscall(SYS_gettid); + parentThreadId = gettid(); tcpThread = sls::make_unique(&ClientInterface::startTCPServer, this); } @@ -76,7 +75,7 @@ void ClientInterface::registerCallBackRawDataModifyReady( } void ClientInterface::startTCPServer() { - tcpThreadId = syscall(SYS_gettid); + tcpThreadId = gettid(); LOG(logINFOBLUE) << "Created [ TCP server Tid: " << tcpThreadId << "]"; LOG(logINFO) << "SLS Receiver starting TCP Server on port " << portNumber << '\n'; diff --git a/slsReceiverSoftware/src/MultiReceiverApp.cpp b/slsReceiverSoftware/src/MultiReceiverApp.cpp index 991555ffc..10a059a14 100644 --- a/slsReceiverSoftware/src/MultiReceiverApp.cpp +++ b/slsReceiverSoftware/src/MultiReceiverApp.cpp @@ -11,7 +11,6 @@ #include #include #include -#include #include //wait #include @@ -172,8 +171,7 @@ int main(int argc, char *argv[]) { (!sscanf(argv[3], "%d", &withCallback)))) printHelp(); - cprintf(BLUE, "Parent Process Created [ Tid: %ld ]\n", - (long)syscall(SYS_gettid)); + cprintf(BLUE, "Parent Process Created [ Tid: %ld ]\n", (long)gettid()); cprintf(RESET, "Number of Receivers: %d\n", numReceivers); cprintf(RESET, "Start TCP Port: %d\n", startTCPPort); cprintf(RESET, "Callback Enable: %d\n", withCallback); @@ -215,16 +213,14 @@ int main(int argc, char *argv[]) { /** - if child process */ else if (pid == 0) { - cprintf(BLUE, "Child process %d [ Tid: %ld ]\n", i, - (long)syscall(SYS_gettid)); + cprintf(BLUE, "Child process %d [ Tid: %ld ]\n", i, (long)gettid()); std::unique_ptr receiver = nullptr; try { receiver = sls::make_unique(startTCPPort + i); } catch (...) { LOG(logINFOBLUE) - << "Exiting Child Process [ Tid: " << syscall(SYS_gettid) - << " ]"; + << "Exiting Child Process [ Tid: " << gettid() << " ]"; throw; } /** - register callbacks. remember to set file write enable to 0 @@ -254,7 +250,7 @@ int main(int argc, char *argv[]) { sem_wait(&semaphore); sem_destroy(&semaphore); cprintf(BLUE, "Exiting Child Process [ Tid: %ld ]\n", - (long)syscall(SYS_gettid)); + (long)gettid()); exit(EXIT_SUCCESS); break; } diff --git a/slsReceiverSoftware/src/Receiver.cpp b/slsReceiverSoftware/src/Receiver.cpp index ea140981d..08f01d421 100644 --- a/slsReceiverSoftware/src/Receiver.cpp +++ b/slsReceiverSoftware/src/Receiver.cpp @@ -14,7 +14,6 @@ #include #include #include -#include #include namespace sls { @@ -68,8 +67,7 @@ Receiver::Receiver(int argc, char *argv[]) : tcpipInterface(nullptr) { case 'v': std::cout << "SLS Receiver Version: " << GITBRANCH << " (0x" << std::hex << APIRECEIVER << ")" << std::endl; - LOG(logINFOBLUE) - << "Exiting [ Tid: " << syscall(SYS_gettid) << " ]"; + LOG(logINFOBLUE) << "Exiting [ Tid: " << gettid() << " ]"; exit(EXIT_SUCCESS); case 'h': diff --git a/slsReceiverSoftware/src/ReceiverApp.cpp b/slsReceiverSoftware/src/ReceiverApp.cpp index 3980b01a1..6fe2884c6 100644 --- a/slsReceiverSoftware/src/ReceiverApp.cpp +++ b/slsReceiverSoftware/src/ReceiverApp.cpp @@ -8,7 +8,6 @@ #include //SIGINT #include -#include #include sem_t semaphore; @@ -19,7 +18,7 @@ int main(int argc, char *argv[]) { sem_init(&semaphore, 1, 0); - LOG(logINFOBLUE) << "Created [ Tid: " << syscall(SYS_gettid) << " ]"; + LOG(logINFOBLUE) << "Created [ Tid: " << gettid() << " ]"; // Catch signal SIGINT to close files and call destructors properly struct sigaction sa; @@ -50,7 +49,7 @@ int main(int argc, char *argv[]) { } catch (...) { // pass } - LOG(logINFOBLUE) << "Exiting [ Tid: " << syscall(SYS_gettid) << " ]"; + LOG(logINFOBLUE) << "Exiting [ Tid: " << gettid() << " ]"; LOG(logINFO) << "Exiting Receiver"; return 0; } diff --git a/slsReceiverSoftware/src/ThreadObject.cpp b/slsReceiverSoftware/src/ThreadObject.cpp index 16d17eaf9..8a4516c0c 100644 --- a/slsReceiverSoftware/src/ThreadObject.cpp +++ b/slsReceiverSoftware/src/ThreadObject.cpp @@ -8,7 +8,6 @@ #include "ThreadObject.h" #include "sls/container_utils.h" #include -#include #include ThreadObject::ThreadObject(int threadIndex, std::string threadType) @@ -39,7 +38,7 @@ void ThreadObject::StartRunning() { runningFlag = true; } void ThreadObject::StopRunning() { runningFlag = false; } void ThreadObject::RunningThread() { - threadId = syscall(SYS_gettid); + threadId = gettid(); LOG(logINFOBLUE) << "Created [ " << type << "Thread " << index << ", Tid: " << threadId << "]"; while (!killThread) { From ac5d60155d4b1e6ae1c6d0948a45050c4ff86892 Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Fri, 4 Feb 2022 10:49:28 +0100 Subject: [PATCH 20/21] swapping left and right for trasnmission delay to correspond to left and right of top --- slsDetectorServers/eigerDetectorServer/Beb.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/slsDetectorServers/eigerDetectorServer/Beb.c b/slsDetectorServers/eigerDetectorServer/Beb.c index 073bed91e..90512c7b1 100644 --- a/slsDetectorServers/eigerDetectorServer/Beb.c +++ b/slsDetectorServers/eigerDetectorServer/Beb.c @@ -492,7 +492,7 @@ int Beb_SetDataStream(enum portPosition port, int enable) { u_int32_t reg = XPAR_GPIO_P15_STREAMING_REG; u_int32_t mask = (port == LEFT ? XPAR_GPIO_LFT_STRM_DSBL_MSK : XPAR_GPIO_RGHT_STRM_DSBL_MSK); - // invert mask if bottom + // invert left/right if bottom if (!Beb_top) { mask = (port == LEFT ? XPAR_GPIO_RGHT_STRM_DSBL_MSK : XPAR_GPIO_LFT_STRM_DSBL_MSK); @@ -534,7 +534,7 @@ int Beb_GetDataStream(enum portPosition port, int *retval) { u_int32_t reg = XPAR_GPIO_P15_STREAMING_REG; u_int32_t mask = (port == LEFT ? XPAR_GPIO_LFT_STRM_DSBL_MSK : XPAR_GPIO_RGHT_STRM_DSBL_MSK); - // invert mask if bottom + // invert left/right if bottom if (!Beb_top) { mask = (port == LEFT ? XPAR_GPIO_RGHT_STRM_DSBL_MSK : XPAR_GPIO_LFT_STRM_DSBL_MSK); @@ -692,6 +692,10 @@ int Beb_GetTransmissionDelayLeft() { return Beb_deactivated_transmission_delay_left; } u_int32_t offset = TXM_DELAY_LEFT_OFFSET; + // invert left/right if bottom + if (!Beb_top) { + offset = TXM_DELAY_RIGHT_OFFSET; + } u_int32_t *csp0base = 0; int fd = Beb_open(&csp0base, XPAR_PLB_GPIO_SYS_BASEADDR); if (fd <= 0) { @@ -716,6 +720,10 @@ int Beb_SetTransmissionDelayLeft(int value) { return 1; } u_int32_t offset = TXM_DELAY_LEFT_OFFSET; + // invert left/right if bottom + if (!Beb_top) { + offset = TXM_DELAY_RIGHT_OFFSET; + } u_int32_t *csp0base = 0; int fd = Beb_open(&csp0base, XPAR_PLB_GPIO_SYS_BASEADDR); if (fd <= 0) { @@ -736,6 +744,10 @@ int Beb_GetTransmissionDelayRight() { } u_int32_t offset = TXM_DELAY_RIGHT_OFFSET; + // invert left/right if bottom + if (!Beb_top) { + offset = TXM_DELAY_LEFT_OFFSET; + } u_int32_t *csp0base = 0; int fd = Beb_open(&csp0base, XPAR_PLB_GPIO_SYS_BASEADDR); if (fd <= 0) { @@ -760,6 +772,10 @@ int Beb_SetTransmissionDelayRight(int value) { return 1; } u_int32_t offset = TXM_DELAY_RIGHT_OFFSET; + // invert left/right if bottom + if (!Beb_top) { + offset = TXM_DELAY_LEFT_OFFSET; + } u_int32_t *csp0base = 0; int fd = Beb_open(&csp0base, XPAR_PLB_GPIO_SYS_BASEADDR); if (fd <= 0) { From b8de1955e33f01fd3a1d82dc0e4036333c24fa16 Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Fri, 4 Feb 2022 10:50:44 +0100 Subject: [PATCH 21/21] binaries in --- .../bin/eigerDetectorServer_developer | Bin 413415 -> 413439 bytes slsSupportLib/include/sls/versionAPI.h | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/slsDetectorServers/eigerDetectorServer/bin/eigerDetectorServer_developer b/slsDetectorServers/eigerDetectorServer/bin/eigerDetectorServer_developer index 707faac8037ae891563d56268b84611063fb3ce3..d180ff497edd6eed93e4f5dd401613b4999b7b18 100755 GIT binary patch delta 89337 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 diff --git a/slsSupportLib/include/sls/versionAPI.h b/slsSupportLib/include/sls/versionAPI.h index db13aef16..9b9902df8 100644 --- a/slsSupportLib/include/sls/versionAPI.h +++ b/slsSupportLib/include/sls/versionAPI.h @@ -12,4 +12,4 @@ #define APIJUNGFRAU 0x220203 #define APIMYTHEN3 0x220203 #define APIMOENCH 0x220203 -#define APIEIGER 0x220203 +#define APIEIGER 0x220204