fixeria has submitted this change. ( https://gerrit.osmocom.org/c/erlang/osmo-s1gw/+/42352?usp=email )
Change subject: mme_registry: add backwards compat for old sctp_client config ......................................................................
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(-)
Approvals: Jenkins Builder: Verified osmith: 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/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().