diff options
Diffstat (limited to 'src/interface_reader.cpp')
-rw-r--r-- | src/interface_reader.cpp | 18 |
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(); +} + |