fixeria has submitted this change. ( https://gerrit.osmocom.org/c/erlang/osmo-s1gw/+/38786?usp=email )
Change subject: sctp_server: pass MME addr/port to sctp_proxy as opaque data ......................................................................
sctp_server: pass MME addr/port to sctp_proxy as opaque data
This is the first step towards the goal of making the sctp_server module more generic and abstract from the client module's API.
Change-Id: I1bd5f17d940173c4ec2d8d7a1d48778098008c84 --- M src/sctp_proxy.erl M src/sctp_server.erl 2 files changed, 25 insertions(+), 14 deletions(-)
Approvals: fixeria: Looks good to me, approved laforge: Looks good to me, but someone else must approve Jenkins Builder: Verified pespin: Looks good to me, but someone else must approve
diff --git a/src/sctp_proxy.erl b/src/sctp_proxy.erl index 6503a9e..72f7980 100644 --- a/src/sctp_proxy.erl +++ b/src/sctp_proxy.erl @@ -41,7 +41,8 @@ connected/3, code_change/4, terminate/3]). --export([start_link/3, +-export([start_link/2, + start_link/3, send_data/2, shutdown/1]).
@@ -55,9 +56,19 @@ %% public API %% ------------------------------------------------------------------
--spec start_link(gen_sctp:assoc_id(), - sctp_client:loc_rem_addr(), - inet:port_number()) -> gen_statem:start_ret(). +-spec start_link(Aid, {MmeAddr, MmePort}) -> Result + when Aid :: gen_sctp:assoc_id(), + MmeAddr :: sctp_client:loc_rem_addr(), + MmePort :: inet:port_number(), + Result :: gen_statem:start_ret(). +start_link(Aid, {MmeAddr, MmePort}) -> + start_link(Aid, MmeAddr, MmePort). + +-spec start_link(Aid, MmeAddr, MmePort) -> Result + when Aid :: gen_sctp:assoc_id(), + MmeAddr :: sctp_client:loc_rem_addr(), + MmePort :: inet:port_number(), + Result :: gen_statem:start_ret(). start_link(Aid, MmeAddr, MmePort) -> gen_statem:start_link(?MODULE, [Aid, MmeAddr, MmePort], []).
diff --git a/src/sctp_server.erl b/src/sctp_server.erl index 0b741ad..7722436 100644 --- a/src/sctp_server.erl +++ b/src/sctp_server.erl @@ -56,7 +56,7 @@
-record(server_state, {sock :: gen_sctp:sctp_socket(), clients :: dict:dict(), - mme_addr_port :: term() + priv :: term() }).
-record(client_state, {addr_port :: addr_port(), @@ -68,9 +68,9 @@ %% public API %% ------------------------------------------------------------------
-start_link(BindAddr, BindPort, MmeAddrPort) -> +start_link(BindAddr, BindPort, Priv) -> gen_server:start_link({local, ?MODULE}, ?MODULE, - [BindAddr, BindPort, MmeAddrPort], + [BindAddr, BindPort, Priv], []).
@@ -86,11 +86,11 @@ %% gen_server API %% ------------------------------------------------------------------
-init([BindAddrStr, BindPort, MmeAddrPort]) when is_list(BindAddrStr) -> +init([BindAddrStr, BindPort, Priv]) when is_list(BindAddrStr) -> {ok, BindAddr} = inet:parse_address(BindAddrStr), - init([BindAddr, BindPort, MmeAddrPort]); + init([BindAddr, BindPort, Priv]);
-init([BindAddr, BindPort, MmeAddrPort]) -> +init([BindAddr, BindPort, Priv]) -> process_flag(trap_exit, true), {ok, Sock} = gen_sctp:open([{ip, BindAddr}, {port, BindPort}, @@ -101,7 +101,7 @@ ok = gen_sctp:listen(Sock, true), {ok, #server_state{sock = Sock, clients = dict:new(), - mme_addr_port = MmeAddrPort}}. + priv = Priv}}.
handle_call(Info, From, State) -> @@ -163,7 +163,7 @@ comm_up -> ?LOG_NOTICE("eNB connection (id=~p, ~p:~p) established", [Aid, FromAddr, FromPort]), Clients = client_add(State#server_state.clients, Aid, FromAddr, FromPort, - State#server_state.mme_addr_port); + State#server_state.priv); shutdown_comp -> ?LOG_NOTICE("eNB connection (id=~p, ~p:~p) closed", [Aid, FromAddr, FromPort]), Clients = client_del(State#server_state.clients, Aid); @@ -200,8 +200,8 @@
%% Add a new client to the list, spawning a proxy process -client_add(Clients, Aid, FromAddr, FromPort, {MmeAddr, MmePort}) -> - {ok, Pid} = sctp_proxy:start_link(Aid, MmeAddr, MmePort), +client_add(Clients, Aid, FromAddr, FromPort, Priv) -> + {ok, Pid} = sctp_proxy:start_link(Aid, Priv), NewClient = #client_state{addr_port = {FromAddr, FromPort}, pid = Pid}, s1gw_metrics:gauge_inc(?S1GW_GAUGE_S1AP_ENB_NUM_SCTP_CONNECTIONS), dict:store(Aid, NewClient, Clients).