fixeria submitted this change.
mme_registry: add backwards compat for old sctp_client config
When 'mme_pool' is absent from the config, automatically populate the
MME pool with a single 'default' entry derived from the 'sctp_client'
section (including legacy mme_loc_addr/mme_rem_addr params), and emit
a deprecation warning. osmo_s1gw_sup:init/1 normalises 'sctp_client'
in the app env (with all defaults applied) before children start, so
mme_registry can safely read it without duplicating the parsing logic.
Change-Id: Ia97fb61bbb5ace6f43d1a6768fb5fb6883158532
Related: SYS#7052
---
M src/mme_registry.erl
M src/osmo_s1gw_sup.erl
2 files changed, 33 insertions(+), 6 deletions(-)
diff --git a/src/mme_registry.erl b/src/mme_registry.erl
index 291c767..d9ca43a 100644
--- a/src/mme_registry.erl
+++ b/src/mme_registry.erl
@@ -270,8 +270,13 @@
-spec mme_list_from_env() -> mme_list().
mme_list_from_env() ->
- MMEs = osmo_s1gw:get_env(mme_pool, []),
- lists:foldl(fun mme_add_from_env/2, [], MMEs).
+ case application:get_env(osmo_s1gw, mme_pool) of
+ {ok, MMEs} ->
+ lists:foldl(fun mme_add_from_env/2, [], MMEs);
+ undefined ->
+ %% no mme_pool configured, fall back to sctp_client for compat
+ mme_list_from_sctp_client()
+ end.
-spec mme_add_from_env(mme_info(), mme_list()) -> mme_list().
@@ -280,4 +285,18 @@
MMEs1.
+-spec mme_list_from_sctp_client() -> mme_list().
+mme_list_from_sctp_client() ->
+ %% osmo_s1gw_sup:init/1 sets 'sctp_client' with all fields populated
+ Cfg = osmo_s1gw:get_env(sctp_client, #{ }),
+ ?LOG_WARNING("'mme_pool' is not configured; falling back to 'sctp_client' "
+ "{laddr, raddr, rport} (deprecated, please use 'mme_pool' instead)"),
+ MmeInfo = #{name => "default",
+ laddr => maps:get(laddr, Cfg),
+ raddr => maps:get(raddr, Cfg),
+ rport => maps:get(rport, Cfg)},
+ {ok, MMEs} = mme_add(MmeInfo, []),
+ MMEs.
+
+
%% vim:set ts=4 sw=4 et:
diff --git a/src/osmo_s1gw_sup.erl b/src/osmo_s1gw_sup.erl
index d661af6..875e19b 100644
--- a/src/osmo_s1gw_sup.erl
+++ b/src/osmo_s1gw_sup.erl
@@ -66,6 +66,14 @@
PfcpLocAddr = osmo_s1gw:get_env(pfcp_loc_addr, ?ENV_DEFAULT_PFCP_LOC_ADDR),
PfcpRemAddr = osmo_s1gw:get_env(pfcp_rem_addr, ?ENV_DEFAULT_PFCP_REM_ADDR),
+ ClientCfg = client_cfg(),
+ ServerCfg = server_cfg(ClientCfg),
+
+ %% Set a complete 'sctp_client' section with all fields populated.
+ %% This may be used by mme_registry:mme_list_from_sctp_client/0
+ %% if the 'mme_pool' is missing in the configuration file.
+ osmo_s1gw:set_env(sctp_client, ClientCfg),
+
EnbRegistry = {enb_registry, {enb_registry, start_link, []},
permanent,
5000,
@@ -76,7 +84,7 @@
5000,
worker,
[mme_registry]},
- SctpServer = {sctp_server, {sctp_server, start_link, [server_cfg()]},
+ SctpServer = {sctp_server, {sctp_server, start_link, [ServerCfg]},
permanent,
5000,
worker,
@@ -136,8 +144,8 @@
sockopts => sctp_common:gen_sockopts(SockOpts)}.
--spec server_cfg() -> sctp_server:cfg().
-server_cfg() ->
+-spec server_cfg(term()) -> sctp_server:cfg().
+server_cfg(Priv) ->
%% parse old/legacy environment options, if any
DefCfg = parse_env_map(#{laddr => s1gw_bind_addr,
lport => s1gw_bind_port}),
@@ -151,7 +159,7 @@
lport => maps:get(lport, Cfg, ?ENV_DEFAULT_S1GW_BIND_PORT),
sockopts => sctp_common:gen_sockopts(SockOpts),
handler => enb_proxy,
- priv => client_cfg()}.
+ priv => Priv}.
-spec gtpu_kpi_cfg() -> gtpu_kpi:cfg().
To view, visit change 42352. To unsubscribe, or for help writing mail filters, visit settings.