fixeria has submitted this change. ( https://gerrit.osmocom.org/c/erlang/osmo-s1gw/+/38791?usp=email )
Change subject: sctp_server: add fetch_conn_list/0 for state introspection ......................................................................
sctp_server: add fetch_conn_list/0 for state introspection
This API will be used by the upcoming interactive VTY interface.
Change-Id: Ia673d6d57bbc3decf2c8038c1ee9573937702520 --- M src/sctp_server.erl 1 file changed, 28 insertions(+), 0 deletions(-)
Approvals: Jenkins Builder: Verified laforge: Looks good to me, but someone else must approve fixeria: Looks good to me, approved pespin: Looks good to me, but someone else must approve
diff --git a/src/sctp_server.erl b/src/sctp_server.erl index 68d1799..9b10bbe 100644 --- a/src/sctp_server.erl +++ b/src/sctp_server.erl @@ -42,6 +42,7 @@ terminate/2]). -export([start_link/4, send_data/2, + fetch_conn_list/0, shutdown/0]).
-include_lib("kernel/include/logger.hrl"). @@ -54,6 +55,13 @@ -type addr_port() :: {inet:ip_address(), inet:port_number()}.
+-type conn_info() :: #{pid => pid(), + aid => gen_sctp:assoc_id(), + addr => inet:ip_address(), + port => inet:port_number() + }. + + -record(server_state, {sock :: gen_sctp:sctp_socket(), clients :: dict:dict(), handler :: module(), @@ -80,6 +88,11 @@ gen_server:cast(?MODULE, {?FUNCTION_NAME, Aid, Data}).
+-spec fetch_conn_list() -> [conn_info()]. +fetch_conn_list() -> + gen_server:call(?MODULE, ?FUNCTION_NAME). + + shutdown() -> gen_server:stop(?MODULE).
@@ -107,6 +120,12 @@ priv = Priv}}.
+handle_call(fetch_conn_list, _From, + #server_state{clients = Clients} = S) -> + Reply = lists:map(fun gen_conn_info/1, + dict:to_list(Clients)), + {reply, Reply, S}; + handle_call(Info, From, S) -> ?LOG_ERROR("unknown ~p() from ~p: ~p", [?FUNCTION_NAME, From, Info]), {reply, {error, not_implemented}, S}. @@ -268,4 +287,13 @@ close_conns(_Sock, _Handler, []) -> ok.
+ +-spec gen_conn_info(tuple()) -> conn_info(). +gen_conn_info({Aid, #client_state{pid = Pid, + addr_port = {Addr, Port}}}) -> + #{pid => Pid, + aid => Aid, + addr => Addr, + port => Port}. + %% vim:set ts=4 sw=4 et: