Holger Hans Peter Freyther | 97f66e2 | 2010-07-28 03:32:52 +0800 | [diff] [blame] | 1 | /* Bloated main routine, refactor */ |
| 2 | /* |
Holger Hans Peter Freyther | c840569 | 2011-01-02 20:24:08 +0100 | [diff] [blame] | 3 | * (C) 2010-2011 by Holger Hans Peter Freyther <zecke@selfish.org> |
| 4 | * (C) 2010-2011 by On-Waves |
Holger Hans Peter Freyther | 97f66e2 | 2010-07-28 03:32:52 +0800 | [diff] [blame] | 5 | * All Rights Reserved |
| 6 | * |
Holger Hans Peter Freyther | de56c22 | 2011-01-16 17:45:14 +0100 | [diff] [blame] | 7 | * 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 Freyther | 97f66e2 | 2010-07-28 03:32:52 +0800 | [diff] [blame] | 10 | * (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 Freyther | de56c22 | 2011-01-16 17:45:14 +0100 | [diff] [blame] | 15 | * GNU Affero General Public License for more details. |
Holger Hans Peter Freyther | 97f66e2 | 2010-07-28 03:32:52 +0800 | [diff] [blame] | 16 | * |
Holger Hans Peter Freyther | de56c22 | 2011-01-16 17:45:14 +0100 | [diff] [blame] | 17 | * 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 Freyther | 97f66e2 | 2010-07-28 03:32:52 +0800 | [diff] [blame] | 19 | * |
| 20 | */ |
| 21 | |
| 22 | #include <mtp_data.h> |
Holger Hans Peter Freyther | 84ec871 | 2011-02-15 20:01:47 +0100 | [diff] [blame] | 23 | #include <msc_connection.h> |
Holger Hans Peter Freyther | b38b33b | 2010-11-26 21:21:04 +0100 | [diff] [blame] | 24 | #include <mtp_level3.h> |
Holger Hans Peter Freyther | 97f66e2 | 2010-07-28 03:32:52 +0800 | [diff] [blame] | 25 | #include <thread.h> |
| 26 | #include <bss_patch.h> |
| 27 | #include <bssap_sccp.h> |
| 28 | #include <bsc_data.h> |
Holger Hans Peter Freyther | cbf7d18 | 2010-07-31 05:25:35 +0800 | [diff] [blame] | 29 | #include <cellmgr_debug.h> |
Holger Hans Peter Freyther | b3e1068 | 2010-09-30 01:57:45 +0800 | [diff] [blame] | 30 | #include <bsc_sccp.h> |
Holger Hans Peter Freyther | a7bc3aa | 2011-02-16 16:12:07 +0100 | [diff] [blame] | 31 | #include <ss7_application.h> |
Holger Hans Peter Freyther | 97f66e2 | 2010-07-28 03:32:52 +0800 | [diff] [blame] | 32 | |
Holger Hans Peter Freyther | c21c0d6 | 2011-07-22 09:00:23 +0200 | [diff] [blame^] | 33 | #include <osmocom/core/application.h> |
Harald Welte | ff397ed | 2011-05-08 10:29:23 +0200 | [diff] [blame] | 34 | #include <osmocom/core/talloc.h> |
Holger Hans Peter Freyther | 97f66e2 | 2010-07-28 03:32:52 +0800 | [diff] [blame] | 35 | |
Holger Hans Peter Freyther | cbf7d18 | 2010-07-31 05:25:35 +0800 | [diff] [blame] | 36 | #include <osmocom/vty/vty.h> |
Holger Hans Peter Freyther | fdae5c9 | 2010-09-30 01:01:03 +0800 | [diff] [blame] | 37 | #include <osmocom/vty/telnet_interface.h> |
Holger Hans Peter Freyther | 97f66e2 | 2010-07-28 03:32:52 +0800 | [diff] [blame] | 38 | |
Holger Hans Peter Freyther | 97f66e2 | 2010-07-28 03:32:52 +0800 | [diff] [blame] | 39 | #include <sys/stat.h> |
| 40 | #include <sys/types.h> |
| 41 | |
Holger Hans Peter Freyther | 2d4891f | 2011-02-16 23:56:55 +0100 | [diff] [blame] | 42 | char *config = "cellmgr_ng.cfg"; |
Holger Hans Peter Freyther | 97f66e2 | 2010-07-28 03:32:52 +0800 | [diff] [blame] | 43 | |
Holger Hans Peter Freyther | 2ff47b8 | 2011-02-15 20:25:10 +0100 | [diff] [blame] | 44 | struct bsc_data *bsc; |
Holger Hans Peter Freyther | 7942abc | 2010-09-30 00:34:46 +0800 | [diff] [blame] | 45 | extern void cell_vty_init(void); |
Holger Hans Peter Freyther | 2d4891f | 2011-02-16 23:56:55 +0100 | [diff] [blame] | 46 | extern void handle_options(int argc, char **argv); |
Holger Hans Peter Freyther | 97f66e2 | 2010-07-28 03:32:52 +0800 | [diff] [blame] | 47 | |
Holger Hans Peter Freyther | 84ec871 | 2011-02-15 20:01:47 +0100 | [diff] [blame] | 48 | static void bsc_msc_forward_init(struct msc_connection *msc) |
Holger Hans Peter Freyther | e86c02e | 2011-02-10 15:32:14 +0100 | [diff] [blame] | 49 | { |
Holger Hans Peter Freyther | 84ec871 | 2011-02-15 20:01:47 +0100 | [diff] [blame] | 50 | msc->ip = talloc_strdup(msc, "127.0.0.1"); |
Holger Hans Peter Freyther | e86c02e | 2011-02-10 15:32:14 +0100 | [diff] [blame] | 51 | msc->ping_time = 20; |
| 52 | msc->pong_time = 5; |
| 53 | msc->msc_time = 20; |
| 54 | } |
| 55 | |
Holger Hans Peter Freyther | 97f66e2 | 2010-07-28 03:32:52 +0800 | [diff] [blame] | 56 | int main(int argc, char **argv) |
| 57 | { |
Holger Hans Peter Freyther | fdae5c9 | 2010-09-30 01:01:03 +0800 | [diff] [blame] | 58 | int rc; |
Holger Hans Peter Freyther | 84ec871 | 2011-02-15 20:01:47 +0100 | [diff] [blame] | 59 | struct msc_connection *msc; |
Holger Hans Peter Freyther | 89fa11a | 2011-02-10 18:26:07 +0100 | [diff] [blame] | 60 | struct mtp_link_set *set; |
Holger Hans Peter Freyther | a7bc3aa | 2011-02-16 16:12:07 +0100 | [diff] [blame] | 61 | struct ss7_application *app; |
Holger Hans Peter Freyther | 97f66e2 | 2010-07-28 03:32:52 +0800 | [diff] [blame] | 62 | |
Holger Hans Peter Freyther | 97f66e2 | 2010-07-28 03:32:52 +0800 | [diff] [blame] | 63 | thread_init(); |
Holger Hans Peter Freyther | 97f66e2 | 2010-07-28 03:32:52 +0800 | [diff] [blame] | 64 | |
Holger Hans Peter Freyther | c21c0d6 | 2011-07-22 09:00:23 +0200 | [diff] [blame^] | 65 | osmo_init_logging(&log_info); |
Holger Hans Peter Freyther | 97f66e2 | 2010-07-28 03:32:52 +0800 | [diff] [blame] | 66 | |
| 67 | /* enable filters */ |
Holger Hans Peter Freyther | c21c0d6 | 2011-07-22 09:00:23 +0200 | [diff] [blame^] | 68 | 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 Freyther | cbf7d18 | 2010-07-31 05:25:35 +0800 | [diff] [blame] | 74 | |
| 75 | sccp_set_log_area(DSCCP); |
Holger Hans Peter Freyther | 97f66e2 | 2010-07-28 03:32:52 +0800 | [diff] [blame] | 76 | |
Holger Hans Peter Freyther | 2ff47b8 | 2011-02-15 20:25:10 +0100 | [diff] [blame] | 77 | bsc = bsc_data_create(); |
| 78 | if (!bsc) |
| 79 | return -1; |
Holger Hans Peter Freyther | 2ff47b8 | 2011-02-15 20:25:10 +0100 | [diff] [blame] | 80 | |
Holger Hans Peter Freyther | e86c02e | 2011-02-10 15:32:14 +0100 | [diff] [blame] | 81 | /* msc data */ |
Holger Hans Peter Freyther | 84ec871 | 2011-02-15 20:01:47 +0100 | [diff] [blame] | 82 | 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 Freyther | 97f66e2 | 2010-07-28 03:32:52 +0800 | [diff] [blame] | 88 | |
| 89 | handle_options(argc, argv); |
| 90 | |
Holger Hans Peter Freyther | 97f66e2 | 2010-07-28 03:32:52 +0800 | [diff] [blame] | 91 | srand(time(NULL)); |
| 92 | |
| 93 | cell_vty_init(); |
Holger Hans Peter Freyther | cfe9d71 | 2011-02-17 20:32:09 +0100 | [diff] [blame] | 94 | |
| 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 Freyther | cbf7d18 | 2010-07-31 05:25:35 +0800 | [diff] [blame] | 108 | if (vty_read_config_file(config, NULL) < 0) { |
Holger Hans Peter Freyther | 97f66e2 | 2010-07-28 03:32:52 +0800 | [diff] [blame] | 109 | fprintf(stderr, "Failed to read the VTY config.\n"); |
| 110 | return -1; |
| 111 | } |
| 112 | |
Holger Hans Peter Freyther | fdae5c9 | 2010-09-30 01:01:03 +0800 | [diff] [blame] | 113 | rc = telnet_init(NULL, NULL, 4242); |
| 114 | if (rc < 0) |
| 115 | return rc; |
| 116 | |
Holger Hans Peter Freyther | cfe9d71 | 2011-02-17 20:32:09 +0100 | [diff] [blame] | 117 | /* create the links and start */ |
| 118 | if (link_init(bsc, set) != 0) |
Holger Hans Peter Freyther | a99b04b | 2011-01-02 11:23:54 +0100 | [diff] [blame] | 119 | return -1; |
Holger Hans Peter Freyther | 89fa11a | 2011-02-10 18:26:07 +0100 | [diff] [blame] | 120 | |
Holger Hans Peter Freyther | a7bc3aa | 2011-02-16 16:12:07 +0100 | [diff] [blame] | 121 | ss7_application_setup(app, APP_CELLMGR, |
| 122 | SS7_SET_LINKSET, 0, |
| 123 | SS7_SET_MSC, 0); |
Holger Hans Peter Freyther | ab7c601 | 2011-02-16 22:23:52 +0100 | [diff] [blame] | 124 | ss7_application_start(app); |
Holger Hans Peter Freyther | 97f66e2 | 2010-07-28 03:32:52 +0800 | [diff] [blame] | 125 | |
| 126 | while (1) { |
Harald Welte | ff397ed | 2011-05-08 10:29:23 +0200 | [diff] [blame] | 127 | osmo_select_main(0); |
Holger Hans Peter Freyther | 97f66e2 | 2010-07-28 03:32:52 +0800 | [diff] [blame] | 128 | } |
| 129 | |
| 130 | return 0; |
| 131 | } |
| 132 | |