aboutsummaryrefslogtreecommitdiffstats
path: root/src/e1_config.c
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2009-04-30 15:53:07 +0000
committerHarald Welte <laforge@gnumonks.org>2009-04-30 15:53:07 +0000
commit25de99170fd44d7d5606a8c34a89c4fdf1019e8e (patch)
tree70144ab934bb002bc63079dde3a71083edcd8e92 /src/e1_config.c
parent193fefc68322d5ed0cf7f545d1ba2f09c9c879f4 (diff)
add new 'ipaccess-config' program to set Unit ID and primary OML NVRAM parameters of ip.access BTS
Diffstat (limited to 'src/e1_config.c')
-rw-r--r--src/e1_config.c34
1 files changed, 32 insertions, 2 deletions
diff --git a/src/e1_config.c b/src/e1_config.c
index 4110d489e..02fdb5d83 100644
--- a/src/e1_config.c
+++ b/src/e1_config.c
@@ -1,6 +1,8 @@
#include <string.h>
#include <errno.h>
+#include <netinet/in.h>
+
#include <openbsc/gsm_data.h>
#include <openbsc/e1_input.h>
#include <openbsc/trau_mux.h>
@@ -70,7 +72,7 @@ int e1_config(struct gsm_bts *bts, int cardnr, int release_l2)
}
/* do some compiled-in configuration for our BTS/E1 setup */
-int ia_config(struct gsm_bts *bts)
+static struct e1inp_line *__ia_config(struct gsm_bts *bts)
{
struct e1inp_line *line;
struct e1inp_ts *sign_ts, *rsl_ts;
@@ -78,7 +80,7 @@ int ia_config(struct gsm_bts *bts)
line = malloc(sizeof(*line));
if (!line)
- return -ENOMEM;
+ return NULL;
memset(line, 0, sizeof(*line));
/* create E1 timeslots for signalling and TRAU frames */
@@ -97,5 +99,33 @@ int ia_config(struct gsm_bts *bts)
bts->oml_link = oml_link;
bts->c0->rsl_link = rsl_link;
+ return line;
+}
+
+/* configure pseudo E1 line in ip.access style and create listening socket */
+int ia_config(struct gsm_bts *bts)
+{
+ struct e1inp_line *line;
+
+ line = __ia_config(bts);
+ if (!line)
+ return -ENOMEM;
+
return ipaccess_setup(line);
}
+
+/* configure pseudo E1 line in ip.access style and connect to BTS */
+int ia_config_connect(struct gsm_bts *bts, struct sockaddr_in *sin)
+{
+ struct e1inp_line *line;
+
+ line = __ia_config(bts);
+ if (!line)
+ return -ENOMEM;
+
+ /* default port at BTS for incoming connections is 3006 */
+ if (sin->sin_port == 0)
+ sin->sin_port = htons(3006);
+
+ return ipaccess_connect(line, sin);
+}