blob: 4da629405770a77a46b6188ef347ab42c2e2c567 [file] [log] [blame]
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +08001/* Bloated main routine, refactor */
2/*
Holger Hans Peter Freytherc8405692011-01-02 20:24:08 +01003 * (C) 2010-2011 by Holger Hans Peter Freyther <zecke@selfish.org>
4 * (C) 2010-2011 by On-Waves
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +08005 * All Rights Reserved
6 *
Holger Hans Peter Freytherde56c222011-01-16 17:45:14 +01007 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU Affero General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +080010 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
Holger Hans Peter Freytherde56c222011-01-16 17:45:14 +010015 * GNU Affero General Public License for more details.
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +080016 *
Holger Hans Peter Freytherde56c222011-01-16 17:45:14 +010017 * You should have received a copy of the GNU Affero General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +080019 *
20 */
21
22#include <mtp_data.h>
Holger Hans Peter Freyther84ec8712011-02-15 20:01:47 +010023#include <msc_connection.h>
Holger Hans Peter Freytherb38b33b2010-11-26 21:21:04 +010024#include <mtp_level3.h>
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +080025#include <thread.h>
26#include <bss_patch.h>
27#include <bssap_sccp.h>
28#include <bsc_data.h>
Holger Hans Peter Freythercbf7d182010-07-31 05:25:35 +080029#include <cellmgr_debug.h>
Holger Hans Peter Freytherb3e10682010-09-30 01:57:45 +080030#include <bsc_sccp.h>
Holger Hans Peter Freythera7bc3aa2011-02-16 16:12:07 +010031#include <ss7_application.h>
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +080032
Harald Welteff397ed2011-05-08 10:29:23 +020033#include <osmocom/core/talloc.h>
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +080034
Holger Hans Peter Freythercbf7d182010-07-31 05:25:35 +080035#include <osmocom/vty/vty.h>
Holger Hans Peter Freytherfdae5c92010-09-30 01:01:03 +080036#include <osmocom/vty/telnet_interface.h>
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +080037
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +080038#include <sys/stat.h>
39#include <sys/types.h>
40
Holger Hans Peter Freythercbf7d182010-07-31 05:25:35 +080041static struct log_target *stderr_target;
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +080042
Holger Hans Peter Freyther2d4891f2011-02-16 23:56:55 +010043char *config = "cellmgr_ng.cfg";
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +080044
Holger Hans Peter Freyther2ff47b82011-02-15 20:25:10 +010045struct bsc_data *bsc;
Holger Hans Peter Freyther7942abc2010-09-30 00:34:46 +080046extern void cell_vty_init(void);
Holger Hans Peter Freyther2d4891f2011-02-16 23:56:55 +010047extern void handle_options(int argc, char **argv);
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +080048
Holger Hans Peter Freyther84ec8712011-02-15 20:01:47 +010049static void bsc_msc_forward_init(struct msc_connection *msc)
Holger Hans Peter Freythere86c02e2011-02-10 15:32:14 +010050{
Holger Hans Peter Freyther84ec8712011-02-15 20:01:47 +010051 msc->ip = talloc_strdup(msc, "127.0.0.1");
Holger Hans Peter Freythere86c02e2011-02-10 15:32:14 +010052 msc->ping_time = 20;
53 msc->pong_time = 5;
54 msc->msc_time = 20;
55}
56
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +080057int main(int argc, char **argv)
58{
Holger Hans Peter Freytherfdae5c92010-09-30 01:01:03 +080059 int rc;
Holger Hans Peter Freyther84ec8712011-02-15 20:01:47 +010060 struct msc_connection *msc;
Holger Hans Peter Freyther89fa11a2011-02-10 18:26:07 +010061 struct mtp_link_set *set;
Holger Hans Peter Freythera7bc3aa2011-02-16 16:12:07 +010062 struct ss7_application *app;
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +080063
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +080064 thread_init();
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +080065
Holger Hans Peter Freythercbf7d182010-07-31 05:25:35 +080066 log_init(&log_info);
67 stderr_target = log_target_create_stderr();
68 log_add_target(stderr_target);
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +080069
70 /* enable filters */
Holger Hans Peter Freythercbf7d182010-07-31 05:25:35 +080071 log_set_all_filter(stderr_target, 1);
72 log_set_category_filter(stderr_target, DINP, 1, LOGL_INFO);
73 log_set_category_filter(stderr_target, DSCCP, 1, LOGL_INFO);
74 log_set_category_filter(stderr_target, DMSC, 1, LOGL_INFO);
75 log_set_category_filter(stderr_target, DMGCP, 1, LOGL_INFO);
76 log_set_print_timestamp(stderr_target, 1);
77 log_set_use_color(stderr_target, 0);
78
79 sccp_set_log_area(DSCCP);
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +080080
Holger Hans Peter Freyther2ff47b82011-02-15 20:25:10 +010081 bsc = bsc_data_create();
82 if (!bsc)
83 return -1;
Holger Hans Peter Freyther2ff47b82011-02-15 20:25:10 +010084
Holger Hans Peter Freythere86c02e2011-02-10 15:32:14 +010085 /* msc data */
Holger Hans Peter Freyther84ec8712011-02-15 20:01:47 +010086 msc = msc_connection_create(bsc, 1);
87 if (!msc) {
88 LOGP(DINP, LOGL_ERROR, "Failed to create the MSC connection.\n");
89 return -1;
90 }
91 bsc_msc_forward_init(msc);
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +080092
93 handle_options(argc, argv);
94
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +080095 srand(time(NULL));
96
97 cell_vty_init();
Holger Hans Peter Freythercfe9d712011-02-17 20:32:09 +010098
99 set = link_set_create(bsc);
100 if (!set) {
101 LOGP(DINP, LOGL_ERROR, "Failed to allocate the link.\n");
102 return -1;
103 }
104
105 app = ss7_application_alloc(bsc);
106 if (!app) {
107 LOGP(DINP, LOGL_ERROR, "Failed to create the SS7 application.\n");
108 return -1;
109 }
110
111 /* Now parse the configuration file */
Holger Hans Peter Freythercbf7d182010-07-31 05:25:35 +0800112 if (vty_read_config_file(config, NULL) < 0) {
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +0800113 fprintf(stderr, "Failed to read the VTY config.\n");
114 return -1;
115 }
116
Holger Hans Peter Freytherfdae5c92010-09-30 01:01:03 +0800117 rc = telnet_init(NULL, NULL, 4242);
118 if (rc < 0)
119 return rc;
120
Holger Hans Peter Freythercfe9d712011-02-17 20:32:09 +0100121 /* create the links and start */
122 if (link_init(bsc, set) != 0)
Holger Hans Peter Freythera99b04b2011-01-02 11:23:54 +0100123 return -1;
Holger Hans Peter Freyther89fa11a2011-02-10 18:26:07 +0100124
Holger Hans Peter Freythera7bc3aa2011-02-16 16:12:07 +0100125 ss7_application_setup(app, APP_CELLMGR,
126 SS7_SET_LINKSET, 0,
127 SS7_SET_MSC, 0);
Holger Hans Peter Freytherab7c6012011-02-16 22:23:52 +0100128 ss7_application_start(app);
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +0800129
130 while (1) {
Harald Welteff397ed2011-05-08 10:29:23 +0200131 osmo_select_main(0);
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +0800132 }
133
134 return 0;
135}
136