blob: 8ba49c501d7985ad5bdf43f87e8459840754121e [file] [log] [blame]
Pablo Neira Ayuso96e81282011-06-09 15:06:11 +02001#include <stdio.h>
2#include <talloc.h>
Pablo Neira Ayusoc9c4fd32011-06-30 12:19:42 +02003#include <string.h>
Pablo Neira Ayuso96e81282011-06-09 15:06:11 +02004#include <osmocom/abis/abis.h>
5#include <osmocom/abis/e1_input.h>
6#include <osmocom/core/logging.h>
7#include <osmocom/core/application.h>
Pablo Neira Ayusoc9c4fd32011-06-30 12:19:42 +02008#include <osmocom/abis/ipaccess.h>
Pablo Neira Ayuso96e81282011-06-09 15:06:11 +02009
10static void *tall_test;
Pablo Neira Ayusoc9c4fd32011-06-30 12:19:42 +020011static struct e1inp_sign_link *oml_sign_link, *rsl_sign_link;
Pablo Neira Ayuso96e81282011-06-09 15:06:11 +020012
13#define DBTSTEST OSMO_LOG_SS_APPS
14
15struct log_info_cat bts_test_cat[] = {
16 [DBTSTEST] = {
17 .name = "DBTSTEST",
18 .description = "BTS-mode test",
19 .color = "\033[1;35m",
20 .enabled = 1, .loglevel = LOGL_NOTICE,
21 },
22};
23
24const struct log_info bts_test_log_info = {
25 .filter_fn = NULL,
26 .cat = bts_test_cat,
27 .num_cat = ARRAY_SIZE(bts_test_cat),
28};
29
Pablo Neira Ayusoc9c4fd32011-06-30 12:19:42 +020030static struct e1inp_sign_link *
31sign_link_up(void *unit, struct e1inp_line *line, enum e1inp_sign_type type)
32{
Pablo Neira Ayusoc9c4fd32011-06-30 12:19:42 +020033 struct e1inp_sign_link *sign_link = NULL;
34 void *dst = NULL;
35
36 switch(type) {
37 case E1INP_SIGN_OML:
Pablo Neira Ayuso2b352012011-07-02 17:45:42 +020038 LOGP(DBTSTEST, LOGL_NOTICE, "OML link up request received.\n");
Pablo Neira Ayusoc9c4fd32011-06-30 12:19:42 +020039
40 e1inp_ts_config_sign(&line->ts[E1INP_SIGN_OML - 1], line);
41 sign_link = oml_sign_link =
42 e1inp_sign_link_create(&line->ts[E1INP_SIGN_OML - 1],
43 E1INP_SIGN_OML, NULL, 255, 0);
Pablo Neira Ayuso2b352012011-07-02 17:45:42 +020044 if (!oml_sign_link) {
45 LOGP(DBTSTEST, LOGL_ERROR,
46 "cannot create OML sign link\n");
47 }
Pablo Neira Ayusoc9c4fd32011-06-30 12:19:42 +020048 dst = oml_sign_link;
49 break;
50 case E1INP_SIGN_RSL:
Pablo Neira Ayuso2b352012011-07-02 17:45:42 +020051 LOGP(DBTSTEST, LOGL_NOTICE, "RSL link up request received.\n");
Pablo Neira Ayusoc9c4fd32011-06-30 12:19:42 +020052
53 e1inp_ts_config_sign(&line->ts[E1INP_SIGN_RSL - 1], line);
54
55 sign_link = rsl_sign_link =
56 e1inp_sign_link_create(&line->ts[E1INP_SIGN_RSL - 1],
57 E1INP_SIGN_RSL, NULL, 0, 0);
Pablo Neira Ayuso2b352012011-07-02 17:45:42 +020058 if (!rsl_sign_link) {
59 LOGP(DBTSTEST, LOGL_ERROR,
60 "cannot create RSL sign link\n");
61 }
Pablo Neira Ayusoc9c4fd32011-06-30 12:19:42 +020062 dst = rsl_sign_link;
63 break;
64 default:
65 return NULL;
66 }
Pablo Neira Ayuso2b352012011-07-02 17:45:42 +020067 if (sign_link)
68 LOGP(DBTSTEST, LOGL_NOTICE, "signal link has been set up.\n");
69
Pablo Neira Ayusoc9c4fd32011-06-30 12:19:42 +020070 return sign_link;
71}
72
73static void sign_link_down(struct e1inp_line *line)
74{
Pablo Neira Ayuso2b352012011-07-02 17:45:42 +020075 LOGP(DBTSTEST, LOGL_NOTICE, "signal link has been closed\n");
76 e1inp_sign_link_destroy(oml_sign_link);
77 e1inp_sign_link_destroy(rsl_sign_link);
Pablo Neira Ayusoc9c4fd32011-06-30 12:19:42 +020078}
79
80static int sign_link(struct msgb *msg, struct e1inp_sign_link *link)
81{
Pablo Neira Ayuso2b352012011-07-02 17:45:42 +020082 LOGP(DBTSTEST, LOGL_NOTICE, "OML/RSL message received.\n");
Pablo Neira Ayusoc9c4fd32011-06-30 12:19:42 +020083 return 0;
84}
85
Pablo Neira Ayuso96e81282011-06-09 15:06:11 +020086int main(void)
87{
Pablo Neira Ayusodfafe682011-07-02 14:32:32 +020088 struct ipaccess_unit bts_dev_info = {
89 .site_id = 0,
90 .bts_id = 0,
91 .trx_id = 0,
92 .unit_name = "testBTS",
93 .equipvers = "0.1",
94 .swversion = "0.1",
95 .mac_addr = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
96 .location1 = "testBTS",
97 .location2 = "testBTS",
98 .serno = "",
99 };
Pablo Neira Ayuso96e81282011-06-09 15:06:11 +0200100 struct e1inp_line *line;
101
102 tall_test = talloc_named_const(NULL, 1, "e1inp_test");
103 libosmo_abis_init(tall_test);
104
105 osmo_init_logging(&bts_test_log_info);
106
107 struct e1inp_line_ops ops = {
Pablo Neira Ayusof163d232011-06-25 18:42:55 +0200108 .role = E1INP_LINE_R_BTS,
109 .addr = "127.0.0.1",
Pablo Neira Ayusodfafe682011-07-02 14:32:32 +0200110 .data = &bts_dev_info,
Pablo Neira Ayuso96e81282011-06-09 15:06:11 +0200111 .sign_link_up = sign_link_up,
Pablo Neira Ayusoc9c4fd32011-06-30 12:19:42 +0200112 .sign_link_down = sign_link_down,
Pablo Neira Ayuso96e81282011-06-09 15:06:11 +0200113 .sign_link = sign_link,
Pablo Neira Ayuso96e81282011-06-09 15:06:11 +0200114 };
115
116#define LINENR 0
117
Pablo Neira Ayusof163d232011-06-25 18:42:55 +0200118 line = e1inp_line_create(LINENR, "ipa");
Pablo Neira Ayuso96e81282011-06-09 15:06:11 +0200119 if (line == NULL) {
120 LOGP(DBTSTEST, LOGL_ERROR, "problem enabling E1 line\n");
121 exit(EXIT_FAILURE);
122 }
Pablo Neira Ayusof163d232011-06-25 18:42:55 +0200123 e1inp_line_bind_ops(line, &ops);
Pablo Neira Ayuso96e81282011-06-09 15:06:11 +0200124
Pablo Neira Ayusof163d232011-06-25 18:42:55 +0200125 if (e1inp_line_update(line) < 0) {
Pablo Neira Ayuso96e81282011-06-09 15:06:11 +0200126 LOGP(DBTSTEST, LOGL_ERROR, "problem enabling E1 line\n");
127 exit(EXIT_FAILURE);
128 }
129
130 LOGP(DBTSTEST, LOGL_NOTICE, "entering main loop\n");
131
132 while (1) {
133 osmo_select_main(0);
134 }
135 return 0;
136}