diff --git a/fpga/include/villas/fpga/core.hpp b/fpga/include/villas/fpga/core.hpp index 089aaf8e7..104295b86 100644 --- a/fpga/include/villas/fpga/core.hpp +++ b/fpga/include/villas/fpga/core.hpp @@ -211,6 +211,9 @@ public: using plugin::Plugin::Plugin; static std::list parseIpIdentifier(json_t *json_ips); + static std::list + filterIps(std::list allIps, + std::list ignored_ip_names); static std::list reorderIps(std::list allIps); static std::list> configureIps(std::list orderedIps, json_t *json_ips, diff --git a/fpga/lib/core.cpp b/fpga/lib/core.cpp index 0a1f8de1f..31eaa5e01 100644 --- a/fpga/lib/core.cpp +++ b/fpga/lib/core.cpp @@ -56,6 +56,28 @@ std::list CoreFactory::parseIpIdentifier(json_t *json_ips) { return allIps; } +std::list +CoreFactory::filterIps(std::list allIps, + std::list ignored_ip_names) { + std::list filteredIps; + + std::set ignored_ip_set(ignored_ip_names.begin(), + ignored_ip_names.end()); + for (const auto &ip : allIps) { + const auto &ipName = ip.getName(); + + if (ignored_ip_set.find(ipName) != ignored_ip_set.end()) { + CoreFactory::getStaticLogger()->warn( + "Ignoring Ip {} (explicitly on ignorelist)", ipName); + } else { + filteredIps.push_back( + ip); // Or use `filteredIps.emplace_back(std::move(ip));` if moving is preferred. + } + } + + return filteredIps; +} + std::list CoreFactory::reorderIps(std::list allIps) { // Pick out IPs to be initialized first. @@ -314,8 +336,11 @@ std::list> CoreFactory::make(Card *card, std::list allIps = parseIpIdentifier(json_ips); // All IPs available in config + std::list filteredIps = filterIps( + allIps, card->ignored_ip_names); // Remove ips on ignorelist in .conf + std::list orderedIps = - reorderIps(allIps); // IPs ordered in initialization order + reorderIps(filteredIps); // IPs ordered in initialization order std::list> configuredIps = configureIps(orderedIps, json_ips, card); // Successfully configured IPs