diff --git a/lib/ssl/src/dtls_connection.erl b/lib/ssl/src/dtls_connection.erl index aa93b5482abc..cedcd334ac43 100644 --- a/lib/ssl/src/dtls_connection.erl +++ b/lib/ssl/src/dtls_connection.erl @@ -165,7 +165,6 @@ %% Setup %%==================================================================== init([Role, Host, Port, Socket, Options, User, CbInfo]) -> - process_flag(trap_exit, true), State0 = initial_state(Role, Host, Port, Socket, Options, User, CbInfo), try State = ssl_gen_statem:init_ssl_config(State0#state.ssl_options, diff --git a/lib/ssl/src/dtls_packet_demux.erl b/lib/ssl/src/dtls_packet_demux.erl index 86282d9e5466..4a861b9619fc 100644 --- a/lib/ssl/src/dtls_packet_demux.erl +++ b/lib/ssl/src/dtls_packet_demux.erl @@ -113,6 +113,7 @@ getstat(PacketSocket, Opts) -> init([Port0, TransportInfo, EmOpts, DTLSOptions, Socket]) -> InternalActiveN = get_internal_active_n(), {ok, SessionIdHandle} = session_id_tracker(Socket, DTLSOptions), + proc_lib:set_label({dtls_server_packet_demultiplexer, Port0}), {ok, #state{active_n = InternalActiveN, port = Port0, first = true, diff --git a/lib/ssl/src/ssl_gen_statem.erl b/lib/ssl/src/ssl_gen_statem.erl index 8d4e383f2fa9..8e90c0a23e29 100644 --- a/lib/ssl/src/ssl_gen_statem.erl +++ b/lib/ssl/src/ssl_gen_statem.erl @@ -135,26 +135,67 @@ start_link(Role, Host, Port, Socket, {SslOpts, _, _} = Options, User, CbInfo) -> -spec init(list()) -> no_return(). %% Description: Initialization %%-------------------------------------------------------------------- -init([Role, _Sender, _Host, _Port, _Socket, {TLSOpts, _, _}, _User, _CbInfo] = InitArgs) -> +init([Role, _Sender, Host, Port, _Socket, {TLSOpts, _, _}, _User, _CbInfo] = InitArgs) -> process_flag(trap_exit, true), + case maps:get(erl_dist, TLSOpts, false) of true -> process_flag(priority, max); _ -> ok - end, - case {Role, TLSOpts} of - {?CLIENT_ROLE, #{versions := [?TLS_1_3]}} -> - tls_client_connection_1_3:init(InitArgs); - {?SERVER_ROLE, #{versions := [?TLS_1_3]}} -> - tls_server_connection_1_3:init(InitArgs); - {_,_} -> - tls_connection:init(InitArgs) + end, + + init_label(Role, Host, Port, TLSOpts), + + case Role of + ?CLIENT_ROLE -> + case TLSOpts of + #{versions := [?TLS_1_3]} -> + tls_client_connection_1_3:init(InitArgs); + _ -> + tls_connection:init(InitArgs) + end; + ?SERVER_ROLE -> + case TLSOpts of + #{versions := [?TLS_1_3]} -> + tls_server_connection_1_3:init(InitArgs); + _ -> + tls_connection:init(InitArgs) + end end; -init([_Role, _Host, _Port, _Socket, _TLSOpts, _User, _CbInfo] = InitArgs) -> +init([Role, Host, Port, _Socket, {DTLSOpts,_,_}, _User, _CbInfo] = InitArgs) -> process_flag(trap_exit, true), + case Role of + ?CLIENT_ROLE -> + init_label(Role, Host, Port, DTLSOpts); + ?SERVER_ROLE -> + init_label(Role, Host, Port, DTLSOpts) + end, dtls_connection:init(InitArgs). +init_label(?CLIENT_ROLE = Role, Host, _, Options) -> + Protocol = maps:get(protocol, Options), + SNIStr = + case maps:get(server_name_indication, Options, undefined) of + undefined -> + host_str(Host); + SNIOpt -> + host_str(SNIOpt) + end, + SNI = erlang:iolist_to_binary(SNIStr), + proc_lib:set_label({Protocol, Role, SNI}); +init_label(?SERVER_ROLE = Role, _, Port, Options) -> + Protocol = maps:get(protocol, Options), + proc_lib:set_label({Protocol, Role, Port}). + +host_str(Host) when is_list(Host) -> + Host; +host_str(Host) when is_tuple(Host) -> + IPStrs = [erlang:integer_to_list(I) || I <- tuple_to_list(Host)], + lists:join(".", IPStrs); +host_str(Host) when is_atom(Host) -> + atom_to_list(Host). + %%==================================================================== %% TLS connection setup %%==================================================================== @@ -454,9 +495,12 @@ dist_handshake_complete(ConnectionPid, DHandle) -> handle_sni_extension(undefined, State) -> {ok, State}; -handle_sni_extension(#sni{hostname = Hostname}, State0) -> +handle_sni_extension(#sni{hostname = Hostname}, #state{static_env = #static_env{port = Port}, + ssl_options = #{protocol := Protocol}} = State0) -> case check_hostname(Hostname) of ok -> + + proc_lib:set_label({Protocol, ?SERVER_ROLE, erlang:iolist_to_binary(Hostname), Port}), {ok, handle_sni_hostname(Hostname, State0)}; #alert{} = Alert -> {error, Alert} diff --git a/lib/ssl/src/ssl_server_session_cache.erl b/lib/ssl/src/ssl_server_session_cache.erl index 314a84135151..46e052cdec0b 100644 --- a/lib/ssl/src/ssl_server_session_cache.erl +++ b/lib/ssl/src/ssl_server_session_cache.erl @@ -114,6 +114,7 @@ init([Listener, #{lifetime := Lifetime, max := Max }]) -> process_flag(trap_exit, true), + proc_lib:set_label({pre_tls_13_server_session_cache, Listener}), Monitor = monitor_listener(Listener), DbRef = init(Cb, [{role, server} | InitArgs]), State = #state{store_cb = Cb, diff --git a/lib/ssl/src/tls_sender.erl b/lib/ssl/src/tls_sender.erl index 455684bd87aa..9348b720b1cb 100644 --- a/lib/ssl/src/tls_sender.erl +++ b/lib/ssl/src/tls_sender.erl @@ -251,6 +251,7 @@ init({call, From}, {Pid, #{current_write := WriteState, bytes_sent = 0, log_level = LogLevel, hibernate_after = HibernateAfter}}, + proc_lib:set_label({tls_sender, Role, {connection, Pid}}), {next_state, handshake, StateData, [{reply, From, ok}]}; init(info = Type, Msg, StateData) -> handle_common(?FUNCTION_NAME, Type, Msg, StateData); diff --git a/lib/ssl/src/tls_server_session_ticket.erl b/lib/ssl/src/tls_server_session_ticket.erl index a2e5c327a017..74e668d7722a 100644 --- a/lib/ssl/src/tls_server_session_ticket.erl +++ b/lib/ssl/src/tls_server_session_ticket.erl @@ -87,6 +87,7 @@ use(Pid, Identifiers, Prf, HandshakeHist) -> -spec init(Args :: term()) -> {ok, State :: term()}. init([Listener | Args]) -> process_flag(trap_exit, true), + proc_lib:set_label({tls_13_server_session_tickets, Listener}), Monitor = inet:monitor(Listener), State = initial_state(Args), {ok, State#state{listen_monitor = Monitor}}. diff --git a/lib/ssl/src/tls_socket.erl b/lib/ssl/src/tls_socket.erl index fd919f7356fb..4ffc17c20a4b 100644 --- a/lib/ssl/src/tls_socket.erl +++ b/lib/ssl/src/tls_socket.erl @@ -318,6 +318,7 @@ start_link(Port, SockOpts, SslOpts) -> %%-------------------------------------------------------------------- init([Listen, Opts, SslOpts]) -> process_flag(trap_exit, true), + proc_lib:set_label({tls_listen_tracker, Listen}), Monitor = inet:monitor(Listen), {ok, #state{emulated_opts = do_set_emulated_opts(Opts, []), listen_monitor = Monitor,