diff options
Diffstat (limited to 'lib/kernel/src/net.erl')
-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: |