osmith has submitted this change. ( 
https://gerrit.osmocom.org/c/osmo-s1gw/+/37048?usp=email )

Change subject: sctp_client: support explicitly setting local address
......................................................................

sctp_client: support explicitly setting local address

Change-Id: I96c0cecb855d11066cbb1f7e43f70fb532e473f3
---
M config/sys.config
M src/osmo_s1gw_sup.erl
M src/sctp_client.erl
M src/sctp_proxy.erl
4 files changed, 44 insertions(+), 20 deletions(-)

Approvals:
  osmith: Looks good to me, approved; Verified




diff --git a/config/sys.config b/config/sys.config
index 8055631..6904d65 100644
--- a/config/sys.config
+++ b/config/sys.config
@@ -1,15 +1,23 @@
 %% -*- erlang -*-

-[%% ===========================================
+[%% 
================================================================================
  %% application config
- %% ===========================================
+ %%
+ %%   eNB              S1GW
+ %% +-----+     +----------------+
+ %% | ... | --> | s1gw_bind_addr |             MME
+ %% +-----+     +----------------+     +-----------------+
+ %%             |  mme_loc_addr  | --> |  mme_rem_addr   |
+ %%             +----------------+     +-----------------+
+ %% 
================================================================================
  {osmo_s1gw,
   [{s1gw_bind_addr, "127.0.1.1"}, %% S1GW bind address for incoming eNB 
connections
-   {mme_addr, "127.0.2.1"} %% MME address for outgoing connections
+   {mme_loc_addr, "127.0.2.1"}, %% local address for outgoing connections to 
the MME
+   {mme_rem_addr, "127.0.2.10"} %% remote address for outgoing connections to 
the MME
   ]},
- %% ===========================================
+ %% 
================================================================================
  %% kernel config
- %% ===========================================
+ %% 
================================================================================
  {kernel,
   [{logger_level, info},
    {logger,
diff --git a/src/osmo_s1gw_sup.erl b/src/osmo_s1gw_sup.erl
index 4c93756..87ec9bf 100644
--- a/src/osmo_s1gw_sup.erl
+++ b/src/osmo_s1gw_sup.erl
@@ -10,8 +10,9 @@
 -define(ENV_APP_NAME, osmo_s1gw).
 -define(ENV_DEFAULT_S1GW_BIND_ADDR, "127.0.1.1").
 -define(ENV_DEFAULT_S1GW_BIND_PORT, ?S1AP_PORT).
--define(ENV_DEFAULT_MME_ADDR, "127.0.2.1").
--define(ENV_DEFAULT_MME_PORT, ?S1AP_PORT).
+-define(ENV_DEFAULT_MME_LOC_ADDR, "127.0.2.1").
+-define(ENV_DEFAULT_MME_REM_ADDR, "127.0.2.10").
+-define(ENV_DEFAULT_MME_REM_PORT, ?S1AP_PORT).

 %% ------------------------------------------------------------------
 %% supervisor API
@@ -24,11 +25,12 @@
 init([]) ->
     S1GWBindAddr = get_env(s1gw_bind_addr, ?ENV_DEFAULT_S1GW_BIND_ADDR),
     S1GWBindPort = get_env(s1gw_bind_port, ?ENV_DEFAULT_S1GW_BIND_PORT),
-    MmeAddr = get_env(mme_addr, ?ENV_DEFAULT_MME_ADDR),
-    MmePort = get_env(mme_port, ?ENV_DEFAULT_MME_PORT),
+    MmeLocAddr = get_env(mme_loc_addr, ?ENV_DEFAULT_MME_LOC_ADDR),
+    MmeRemAddr = get_env(mme_rem_addr, ?ENV_DEFAULT_MME_REM_ADDR),
+    MmeRemPort = get_env(mme_rem_port, ?ENV_DEFAULT_MME_REM_PORT),
     SctpServer = {sctp_server, {sctp_server, start_link,
                                 [S1GWBindAddr, S1GWBindPort,
-                                 {MmeAddr, MmePort}]},
+                                 {{MmeLocAddr, MmeRemAddr}, MmeRemPort}]},
                   permanent,
                   5000,
                   worker,
diff --git a/src/sctp_client.erl b/src/sctp_client.erl
index 908afcd..fe96f30 100644
--- a/src/sctp_client.erl
+++ b/src/sctp_client.erl
@@ -16,15 +16,24 @@
 %% ------------------------------------------------------------------

 connect() ->
-    connect(localhost).
+    connect({any, localhost}).

-connect(Host) ->
-    connect(Host, ?S1AP_PORT).
+connect(LocRemAddr) ->
+    connect(LocRemAddr, ?S1AP_PORT).

-connect(Host, Port) ->
-    {ok, Sock} = gen_sctp:open([{type, seqpacket},
+connect({LocAddrStr, RemAddr}, Port) when is_list(LocAddrStr) ->
+    {ok, LocAddr} = inet:parse_address(LocAddrStr),
+    connect({LocAddr, RemAddr}, Port);
+
+connect({LocAddr, RemAddrStr}, Port) when is_list(RemAddrStr) ->
+    {ok, RemAddr} = inet:parse_address(RemAddrStr),
+    connect({LocAddr, RemAddr}, Port);
+
+connect({LocAddr, RemAddr}, Port) ->
+    {ok, Sock} = gen_sctp:open([{ip, LocAddr},
+                                {type, seqpacket},
                                 {active, true}]),
-    gen_sctp:connect_init(Sock, Host, Port, []),
+    gen_sctp:connect_init(Sock, RemAddr, Port, []),
     {ok, Sock}.


diff --git a/src/sctp_proxy.erl b/src/sctp_proxy.erl
index 43cb081..2cc6165 100644
--- a/src/sctp_proxy.erl
+++ b/src/sctp_proxy.erl
@@ -34,10 +34,6 @@
 %% gen_statem API
 %% ------------------------------------------------------------------

-init([Aid, MmeAddrStr, MmePort]) when is_list(MmeAddrStr) ->
-    {ok, MmeAddr} = inet:parse_address(MmeAddrStr),
-    init([Aid, MmeAddr, MmePort]);
-
 init([Aid, MmeAddr, MmePort]) ->
     {ok, connecting,
      #{enb_aid => Aid,

--
To view, visit https://gerrit.osmocom.org/c/osmo-s1gw/+/37048?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-s1gw
Gerrit-Branch: master
Gerrit-Change-Id: I96c0cecb855d11066cbb1f7e43f70fb532e473f3
Gerrit-Change-Number: 37048
Gerrit-PatchSet: 1
Gerrit-Owner: osmith <osm...@sysmocom.de>
Gerrit-Reviewer: osmith <osm...@sysmocom.de>
Gerrit-CC: fixeria <vyanits...@sysmocom.de>
Gerrit-MessageType: merged

Reply via email to