From a09cfee57bc49390b7ed8249a4d33c64db00e4ae Mon Sep 17 00:00:00 2001 From: SimonCqk Date: Wed, 11 Jun 2025 18:12:34 +0800 Subject: [PATCH] feat(config): parse ib device filter by simplified regex syntax. --- src/common/net/ib/IBDevice.cc | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/common/net/ib/IBDevice.cc b/src/common/net/ib/IBDevice.cc index a8f061b..3637b59 100644 --- a/src/common/net/ib/IBDevice.cc +++ b/src/common/net/ib/IBDevice.cc @@ -292,7 +292,20 @@ Result IBDevice::open(ibv_device *dev, } auto filter = [&filter = config.device_filter()](std::string name) { - return filter.empty() || std::find(filter.begin(), filter.end(), name) != filter.end(); + if (filter.empty()) return true; + + bool matched = false; + std::for_each(filter.begin(), filter.end(), [](const std::string &f) { + if (f.empty()) return; + if (f[0] == '^') { + matched |= !name.start_with(f.substr(1)); + } else if (f.back() == '*') { + matched |= name.start_with(f.substr(0, f.size() - 1)); + } else { + matched |= (name == f); + } + }); + return matched; }; std::set ports;