diff options
author | Micael Karlberg <bmk@erlang.org> | 2019-11-19 17:25:52 +0100 |
---|---|---|
committer | Micael Karlberg <bmk@erlang.org> | 2019-11-25 18:28:27 +0100 |
commit | 0c001ce3c707d6009a0591bbc42ffa5a031a76bd (patch) | |
tree | b9ba16f69d0664495a7e3e5a886bf7138990c7cc | |
parent | e83a4a1c6ab164c39e3d8aa353119725924ca08c (diff) | |
download | erlang-0c001ce3c707d6009a0591bbc42ffa5a031a76bd.tar.gz |
[enet] Make it possible to filter on flags in getifaddrs
Make it possible to *also* filter on flags in getifaddrs/1,2.
OTP-16212
-rw-r--r-- | lib/kernel/src/net.erl | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/lib/kernel/src/net.erl b/lib/kernel/src/net.erl index 331582c47a..1663a15e47 100644 --- a/lib/kernel/src/net.erl +++ b/lib/kernel/src/net.erl @@ -347,26 +347,34 @@ getifaddrs_filter_map(FilterMap) -> getifaddrs_filter_map_default() -> #{family => default, flags => any}. -getifaddrs_filter(#{family := FFamily}, - #{addr := #{family := Family}} = _Entry) +getifaddrs_filter(#{family := FFamily, flags := FFlags}, + #{addr := #{family := Family}, flags := Flags} = _Entry) when (FFamily =:= default) andalso ((Family =:= inet) orelse (Family =:= inet6)) -> - true; -getifaddrs_filter(#{family := FFamily}, - #{addr := #{family := Family}} = _Entry) + getifaddrs_filter_flags(FFlags, Flags); +getifaddrs_filter(#{family := FFamily, flags := FFlags}, + #{addr := #{family := Family}, flags := Flags} = _Entry) when (FFamily =:= inet) andalso (Family =:= inet) -> - true; -getifaddrs_filter(#{family := FFamily}, - #{addr := #{family := Family}} = _Entry) + getifaddrs_filter_flags(FFlags, Flags); +getifaddrs_filter(#{family := FFamily, flags := FFlags}, + #{addr := #{family := Family}, flags := Flags} = _Entry) when (FFamily =:= inet6) andalso (Family =:= inet6) -> - true; -getifaddrs_filter(#{family := FFamily}, _Entry) + getifaddrs_filter_flags(FFlags, Flags); +getifaddrs_filter(#{family := FFamily, flags := FFlags}, + #{flags := Flags} = _Entry) when (FFamily =:= all) -> - true; + getifaddrs_filter_flags(FFlags, Flags); getifaddrs_filter(_Filter, _Entry) -> false. +getifaddrs_filter_flags(any, _Flags) -> + true; +getifaddrs_filter_flags(FilterFlags, Flags) -> + [] =:= (FilterFlags -- Flags). + + + %% =========================================================================== %% %% if_name2index - Mappings between network interface names and indexes: |