From: Pablo Neira Ayuso <pablo(a)gnumonks.org>
This patch allows you to set different addresses for the OML and
RSL links.
You can set the RSL address anytime via line->ops->cfg.ipa.rsl.addr
before the second call to e1inp_line_update() that brings the RSL
link up.
---
include/osmocom/abis/e1_input.h | 7 ++++++-
src/input/hsl.c | 4 ++--
src/input/ipaccess.c | 4 ++--
tests/e1inp_ipa_bts_test.c | 7 ++++++-
4 files changed, 16 insertions(+), 6 deletions(-)
diff --git a/include/osmocom/abis/e1_input.h b/include/osmocom/abis/e1_input.h
index 16e7f8b..fac7bac 100644
--- a/include/osmocom/abis/e1_input.h
+++ b/include/osmocom/abis/e1_input.h
@@ -140,8 +140,13 @@ struct e1inp_line_ops {
union {
struct {
enum e1inp_line_role role; /* BSC or BTS mode. */
- const char *addr; /* IP address .*/
void *dev; /* device parameters. */
+ struct {
+ const char *addr; /* IP address .*/
+ } oml;
+ struct {
+ const char *addr;
+ } rsl;
} ipa;
struct {
const char *port; /* e.g. /dev/ttyUSB0 */
diff --git a/src/input/hsl.c b/src/input/hsl.c
index 1a60c2b..cfe7157 100644
--- a/src/input/hsl.c
+++ b/src/input/hsl.c
@@ -476,7 +476,7 @@ static int hsl_line_update(struct e1inp_line *line)
LOGP(DLINP, LOGL_NOTICE, "enabling hsl BSC mode\n");
ret = osmo_sock_init(AF_INET, SOCK_STREAM, IPPROTO_TCP,
- line->ops->cfg.ipa.addr,
+ line->ops->cfg.ipa.oml.addr,
HSL_TCP_PORT, OSMO_SOCK_F_BIND);
if (ret < 0)
return ret;
@@ -499,7 +499,7 @@ static int hsl_line_update(struct e1inp_line *line)
link = ipa_client_conn_create(tall_hsl_ctx,
&line->ts[E1INP_SIGN_OML-1],
E1INP_SIGN_OML,
- line->ops->cfg.ipa.addr,
+ line->ops->cfg.ipa.oml.addr,
HSL_TCP_PORT,
hsl_bts_connect,
hsl_bts_process,
diff --git a/src/input/ipaccess.c b/src/input/ipaccess.c
index b8c1e7a..0fce15e 100644
--- a/src/input/ipaccess.c
+++ b/src/input/ipaccess.c
@@ -901,7 +901,7 @@ static int ipaccess_bts_oml_link_up(struct e1inp_line *line)
link = ipa_client_conn_create(tall_ipa_ctx,
&line->ts[E1INP_SIGN_OML-1],
E1INP_SIGN_OML,
- line->ops->cfg.ipa.addr,
+ line->ops->cfg.ipa.oml.addr,
IPA_TCP_PORT_OML,
NULL,
ipaccess_bts_cb,
@@ -930,7 +930,7 @@ static int ipaccess_bts_rsl_link_up(struct e1inp_line *line)
rsl_link = ipa_client_conn_create(tall_ipa_ctx,
&line->ts[E1INP_SIGN_RSL-1],
E1INP_SIGN_RSL,
- line->ops->cfg.ipa.addr,
+ line->ops->cfg.ipa.rsl.addr,
IPA_TCP_PORT_RSL,
NULL,
ipaccess_bts_cb,
diff --git a/tests/e1inp_ipa_bts_test.c b/tests/e1inp_ipa_bts_test.c
index 112af65..46c6483 100644
--- a/tests/e1inp_ipa_bts_test.c
+++ b/tests/e1inp_ipa_bts_test.c
@@ -282,8 +282,13 @@ int main(void)
.cfg = {
.ipa = {
.role = E1INP_LINE_R_BTS,
- .addr = "127.0.0.1",
.dev = &bts_dev_info,
+ .oml = {
+ .addr = "127.0.0.1",
+ },
+ .rsl = {
+ .addr = "127.0.0.1",
+ },
},
},
.sign_link_up = sign_link_up,
--
1.7.10.4