Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Ledest:erlang:26
erlang
1972-Test-input-handler-from-internal-inet_epmd...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 1972-Test-input-handler-from-internal-inet_epmd-cryptcook.patch of Package erlang
From 21dd125dfdbe06c71dcee12882931cf4cc1a891f Mon Sep 17 00:00:00 2001 From: Raimo Niskanen <raimo@erlang.org> Date: Wed, 3 May 2023 11:20:07 +0200 Subject: [PATCH 2/2] Test input handler from internal inet_epmd cryptcookie framework --- .../test/inet_epmd_cryptcookie_inet_ktls.erl | 63 ++++++++++++++++++- lib/ssl/test/ssl_dist_bench_SUITE.erl | 21 ++++++- 2 files changed, 80 insertions(+), 4 deletions(-) diff --git a/lib/ssl/test/inet_epmd_cryptcookie_inet_ktls.erl b/lib/ssl/test/inet_epmd_cryptcookie_inet_ktls.erl index d350cc8139..b2c082969c 100644 --- a/lib/ssl/test/inet_epmd_cryptcookie_inet_ktls.erl +++ b/lib/ssl/test/inet_epmd_cryptcookie_inet_ktls.erl @@ -103,7 +103,8 @@ accept_controller(_NetAddress, Controller, Socket) -> %% ------------------------------------------------------------ accepted(NetAddress, _Timer, Socket) -> - inet_epmd_dist:hs_data(NetAddress, Socket). + input_handler_setup( + inet_epmd_dist:hs_data(NetAddress, Socket)). %% ------------------------------------------------------------ connect(NetAddress, _Timer, Options) -> @@ -123,7 +124,8 @@ connect(NetAddress, _Timer, Options) -> inet_ktls_info(Socket, cryptcookie:ktls_info(CipherState)), ok ?= inet_tls_dist:set_ktls(KtlsInfo), ok ?= inet:setopts(Socket, [{packet, 2}, {mode, list}]), - inet_epmd_dist:hs_data(NetAddress, Socket) + input_handler_setup( + inet_epmd_dist:hs_data(NetAddress, Socket)) else {error, _} = Error -> Error @@ -204,6 +206,63 @@ stream_controlling_process(Stream = {_, [_ | Socket], _}, Pid) -> erlang:error({?MODULE, ?FUNCTION_NAME, Reason}) end. +%% ------------------------------------------------------------ + +input_handler_setup(#hs_data{} = HsData) -> + case init:get_argument(inet_ktls) of + {ok, [["port"]]} -> % No input_handler process + %% Just use the distribution port + HsData; + {ok, [["input_handler"]]} -> % Set up an input_handler process + %% Add an f_handshake_complete fun that spawns the input handler + %% and calls the f_setopts_post_nodeup fun + #hs_data{ + socket = Socket, + f_setopts_post_nodeup = FSetoptsPostNodeup} = HsData, + HsData#hs_data{ + f_setopts_post_nodeup = + fun (S) when S =:= Socket -> + ok + end, + f_handshake_complete = + fun (S, _Node, DHandle) when S =:= Socket -> + handshake_complete(S, FSetoptsPostNodeup, DHandle) + end} + end; +input_handler_setup({error, _} = Error) -> + Error. + +handshake_complete(Socket, FSetoptsPostNodeup, DHandle) -> + InputHandler = + spawn_link( + fun () -> + input_handler(Socket, DHandle) + end), + ok = ?DRIVER:controlling_process(Socket, InputHandler), + ok = erlang:dist_ctrl_input_handler(DHandle, InputHandler), + ok = FSetoptsPostNodeup(Socket). + +input_handler(Socket, DHandle) -> + receive + {tcp, Socket, Data} -> + erlang:dist_ctrl_put_data(DHandle, Data); + {tcp_error, Socket, _Error} = Reason -> + ?DRIVER:close(Socket), + exit(Reason); + {tcp_closed, Socket} = Reason -> + ?DRIVER:close(Socket), + exit(Reason); + Other -> + Reason = {unexpected_message, Other}, + error_report([?FUNCTION_NAME, {reason, Reason}]), + input_handler(Socket, DHandle) + end. + +%% ------------------------------------------------------------ + +error_report(Report) -> + error_logger:error_report(Report). + %% ------------------------------------------------------------ supported() -> maybe diff --git a/lib/ssl/test/ssl_dist_bench_SUITE.erl b/lib/ssl/test/ssl_dist_bench_SUITE.erl index 989007bec0..8e32e872ad 100644 --- a/lib/ssl/test/ssl_dist_bench_SUITE.erl +++ b/lib/ssl/test/ssl_dist_bench_SUITE.erl @@ -77,6 +77,7 @@ groups() -> {cryptcookie_socket_ktls, categories()}, {dist_cryptcookie_inet, categories()}, {cryptcookie_inet_ktls, categories()}, + {cryptcookie_inet_ktls_ih, categories()}, %% %% categories() {setup, [{repeat, 1}], @@ -110,7 +111,8 @@ cryptcookie_backends() -> [{group, dist_cryptcookie_socket}, {group, cryptcookie_socket_ktls}, {group, dist_cryptcookie_inet}, - {group, cryptcookie_inet_ktls}]. + {group, cryptcookie_inet_ktls}, + {group, cryptcookie_inet_ktls_ih}]. categories() -> [{group, setup}, @@ -290,7 +292,22 @@ init_per_group(cryptcookie_inet_ktls, Config) -> ok -> [{ssl_dist, false}, {ssl_dist_prefix, "Crypto-Inet-kTLS"}, {ssl_dist_args, - "-proto_dist inet_epmd -inet_epmd cryptcookie_inet_ktls"} + "-proto_dist inet_epmd -inet_epmd cryptcookie_inet_ktls " + "-inet_ktls port"} + | Config]; + Problem -> + {skip, Problem} + catch + Class : Reason : Stacktrace -> + {fail, {Class, Reason, Stacktrace}} + end; +init_per_group(cryptcookie_inet_ktls_ih, Config) -> + try inet_epmd_cryptcookie_inet_ktls:supported() of + ok -> + [{ssl_dist, false}, {ssl_dist_prefix, "Crypto-Inet-kTLS-IH"}, + {ssl_dist_args, + "-proto_dist inet_epmd -inet_epmd cryptcookie_inet_ktls " + "-inet_ktls input_handler"} | Config]; Problem -> {skip, Problem} -- 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