blob: 70a2f8576f9e5ede2e07d099c3276882f5253258 [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
Holger Hans Peter Freytherc21c0d62011-07-22 09:00:23 +020033#include <osmocom/core/application.h>
Harald Welteff397ed2011-05-08 10:29:23 +020034#include <osmocom/core/talloc.h>
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +080035
Holger Hans Peter Freythercbf7d182010-07-31 05:25:35 +080036#include <osmocom/vty/vty.h>
Holger Hans Peter Freytherfdae5c92010-09-30 01:01:03 +080037#include <osmocom/vty/telnet_interface.h>
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +080038
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +080039#include <sys/stat.h>
40#include <sys/types.h>
41
Holger Hans Peter Freyther2d4891f2011-02-16 23:56:55 +010042char *config = "cellmgr_ng.cfg";
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +080043
Holger Hans Peter Freyther2ff47b82011-02-15 20:25:10 +010044struct bsc_data *bsc;
Holger Hans Peter Freyther7942abc2010-09-30 00:34:46 +080045extern void cell_vty_init(void);
Holger Hans Peter Freyther2d4891f2011-02-16 23:56:55 +010046extern void handle_options(int argc, char **argv);
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +080047
Holger Hans Peter Freyther84ec8712011-02-15 20:01:47 +010048static void bsc_msc_forward_init(struct msc_connection *msc)
Holger Hans Peter Freythere86c02e2011-02-10 15:32:14 +010049{
Holger Hans Peter Freyther84ec8712011-02-15 20:01:47 +010050 msc->ip = talloc_strdup(msc, "127.0.0.1");
Holger Hans Peter Freythere86c02e2011-02-10 15:32:14 +010051 msc->ping_time = 20;
52 msc->pong_time = 5;
53 msc->msc_time = 20;
54}
55
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +080056int main(int argc, char **argv)
57{
Holger Hans Peter Freytherfdae5c92010-09-30 01:01:03 +080058 int rc;
Holger Hans Peter Freyther84ec8712011-02-15 20:01:47 +010059 struct msc_connection *msc;
Holger Hans Peter Freyther89fa11a2011-02-10 18:26:07 +010060 struct mtp_link_set *set;
Holger Hans Peter Freythera7bc3aa2011-02-16 16:12:07 +010061 struct ss7_application *app;
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +080062
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +080063 thread_init();
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +080064
Holger Hans Peter Freytherc21c0d62011-07-22 09:00:23 +020065 osmo_init_logging(&log_info);
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +080066
67 /* enable filters */
Holger Hans Peter Freytherc21c0d62011-07-22 09:00:23 +020068 log_set_category_filter(osmo_stderr_target, DINP, 1, LOGL_INFO);
69 log_set_category_filter(osmo_stderr_target, DSCCP, 1, LOGL_INFO);
70 log_set_category_filter(osmo_stderr_target, DMSC, 1, LOGL_INFO);
71 log_set_category_filter(osmo_stderr_target, DMGCP, 1, LOGL_INFO);
72 log_set_print_timestamp(osmo_stderr_target, 1);
73 log_set_use_color(osmo_stderr_target, 0);
Holger Hans Peter Freythercbf7d182010-07-31 05:25:35 +080074
75 sccp_set_log_area(DSCCP);
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +080076
Holger Hans Peter Freyther2ff47b82011-02-15 20:25:10 +010077 bsc = bsc_data_create();
78 if (!bsc)
79 return -1;
Holger Hans Peter Freyther2ff47b82011-02-15 20:25:10 +010080
Holger Hans Peter Freythere86c02e2011-02-10 15:32:14 +010081 /* msc data */
Holger Hans Peter Freyther84ec8712011-02-15 20:01:47 +010082 msc = msc_connection_create(bsc, 1);
83 if (!msc) {
84 LOGP(DINP, LOGL_ERROR, "Failed to create the MSC connection.\n");
85 return -1;
86 }
87 bsc_msc_forward_init(msc);
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +080088
89 handle_options(argc, argv);
90
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +080091 srand(time(NULL));
92
93 cell_vty_init();
Holger Hans Peter Freythercfe9d712011-02-17 20:32:09 +010094
95 set = link_set_create(bsc);
96 if (!set) {
97 LOGP(DINP, LOGL_ERROR, "Failed to allocate the link.\n");
98 return -1;
99 }
100
101 app = ss7_application_alloc(bsc);
102 if (!app) {
103 LOGP(DINP, LOGL_ERROR, "Failed to create the SS7 application.\n");
104 return -1;
105 }
106
107 /* Now parse the configuration file */
Holger Hans Peter Freythercbf7d182010-07-31 05:25:35 +0800108 if (vty_read_config_file(config, NULL) < 0) {
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +0800109 fprintf(stderr, "Failed to read the VTY config.\n");
110 return -1;
111 }
112
Holger Hans Peter Freytherfdae5c92010-09-30 01:01:03 +0800113 rc = telnet_init(NULL, NULL, 4242);
114 if (rc < 0)
115 return rc;
116
Holger Hans Peter Freythercfe9d712011-02-17 20:32:09 +0100117 /* create the links and start */
118 if (link_init(bsc, set) != 0)
Holger Hans Peter Freythera99b04b2011-01-02 11:23:54 +0100119 return -1;
Holger Hans Peter Freyther89fa11a2011-02-10 18:26:07 +0100120
Holger Hans Peter Freythera7bc3aa2011-02-16 16:12:07 +0100121 ss7_application_setup(app, APP_CELLMGR,
122 SS7_SET_LINKSET, 0,
123 SS7_SET_MSC, 0);
Holger Hans Peter Freytherab7c6012011-02-16 22:23:52 +0100124 ss7_application_start(app);
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +0800125
126 while (1) {
Harald Welteff397ed2011-05-08 10:29:23 +0200127 osmo_select_main(0);
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +0800128 }
129
130 return 0;
131}
132