summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMicael Karlberg <bmk@erlang.org>2019-11-19 17:25:52 +0100
committerMicael Karlberg <bmk@erlang.org>2019-11-25 18:28:27 +0100
commit0c001ce3c707d6009a0591bbc42ffa5a031a76bd (patch)
treeb9ba16f69d0664495a7e3e5a886bf7138990c7cc
parente83a4a1c6ab164c39e3d8aa353119725924ca08c (diff)
downloaderlang-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.erl30
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: