summaryrefslogtreecommitdiffstats
path: root/src/interface_reader.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/interface_reader.cpp')
-rw-r--r--src/interface_reader.cpp18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/interface_reader.cpp b/src/interface_reader.cpp
index 9b0bf14..cb80053 100644
--- a/src/interface_reader.cpp
+++ b/src/interface_reader.cpp
@@ -45,6 +45,12 @@ interface_reader::read_interfaces(void)
std::string interface_name = ifa->ifa_name;
+ // If we do not have any interface names to filter for, we use them all.
+ // If we have any, we filter
+ if (this->do_filter() && !this->interface_whitelisted(interface_name)) {
+ continue;
+ }
+
std::optional<std::string> address;
int family = ifa->ifa_addr->sa_family;
if (family == AF_INET || family == AF_INET6) {
@@ -76,3 +82,15 @@ interface_reader::get_interfaces(void) const
return this->interfaces;
}
+bool
+interface_reader::do_filter(void) const
+{
+ return !this->interface_names.empty();
+}
+
+bool
+interface_reader::interface_whitelisted(std::string const& if_name) const
+{
+ return std::find(this->interface_names.begin(), this->interface_names.end(), if_name) != this->interface_names.end();
+}
+