Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Ledest:erlang:24
erlang
7715-kernel-Add-membership-types-and-handling-o...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 7715-kernel-Add-membership-types-and-handling-of-said-typ.patch of Package erlang
From f52357fb06bbce6020e2b7912ce23ccef7b35731 Mon Sep 17 00:00:00 2001 From: Micael Karlberg <bmk@erlang.org> Date: Fri, 13 May 2022 16:30:21 +0200 Subject: [PATCH 05/11] [kernel] Add membership types and handling of said types OTP-18091 --- lib/kernel/src/gen_udp.erl | 21 ++++++++++++++++++--- lib/kernel/src/inet.erl | 10 ++++++++++ 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/lib/kernel/src/gen_udp.erl b/lib/kernel/src/gen_udp.erl index e3c1996bbc..b30c13d062 100644 --- a/lib/kernel/src/gen_udp.erl +++ b/lib/kernel/src/gen_udp.erl @@ -31,13 +31,13 @@ -type option() :: {active, true | false | once | -32768..32767} | - {add_membership, {inet:ip_address(), inet:ip_address()}} | + {add_membership, membership()} | {broadcast, boolean()} | {buffer, non_neg_integer()} | {debug, boolean()} | {deliver, port | term} | {dontroute, boolean()} | - {drop_membership, {inet:ip_address(), inet:ip_address()}} | + {drop_membership, membership()} | {header, non_neg_integer()} | {high_msgq_watermark, pos_integer()} | {low_msgq_watermark, pos_integer()} | @@ -109,8 +109,23 @@ -type ip6_multicast_if() :: integer(). % interface index -type multicast_if() :: ip_multicast_if() | ip6_multicast_if(). + +%% Note that for IPv4, the tuple with size 3 is *not* +%% supported on all platforms. +%% 'ifindex' defaults to zero (0) on platforms that +%% supports the 3-tuple variant. +-type ip_membership() :: {MultiAddress :: inet:ip4_address(), % multiaddr + Interface :: inet:ip4_address()} | % local addr + {MultiAddress :: inet:ip4_address(), % multiaddr + Address :: inet:ip4_address(), % local addr + IfIndex :: integer()}. % ifindex +-type ip6_membership() :: {MultiAddress :: inet:ip6_address(), % multiaddr + IfIndex :: integer()}. % ifindex +-type membership() :: ip_membership() | ip6_membership(). + -export_type([option/0, open_option/0, option_name/0, socket/0, - multicast_if/0, ip_multicast_if/0, ip6_multicast_if/0]). + multicast_if/0, ip_multicast_if/0, ip6_multicast_if/0, + membership/0, ip_membership/0, ip6_membership/0]). %% -- open ------------------------------------------------------------------ diff --git a/lib/kernel/src/inet.erl b/lib/kernel/src/inet.erl index a15c203245..37f1706fb2 100644 --- a/lib/kernel/src/inet.erl +++ b/lib/kernel/src/inet.erl @@ -1205,7 +1205,17 @@ udp_opt([Opt | Opts], #udp_opts{ifaddr = IfAddr} = R, As) -> {active,N} when is_integer(N), N < 32768, N >= -32768 -> NOpts = lists:keydelete(active, 1, R#udp_opts.opts), udp_opt(Opts, R#udp_opts { opts = [{active,N}|NOpts] }, As); + + {Membership, {MAddr, If}} + when ((Membership =:= add_membership) orelse + (Membership =:= drop_membership)) andalso + (tuple_size(MAddr) =:= 4) andalso + ((If =:= any) orelse (tuple_size(If) =:= 4)) -> + MembershipOpt = {Membership, {MAddr, If, 0}}, + udp_opt(Opts, R#udp_opts{opts = [MembershipOpt|Opts]}, As); + {Name,Val} when is_atom(Name) -> udp_add(Name, Val, R, Opts, As); + _ -> {error, badarg} end; udp_opt([], #udp_opts{} = R, _SockOpts) -> -- 2.35.3
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor