blob: fc1dcdfbf57baa30fdd0604e698784e3d6928404 [file] [log] [blame]
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +08001/* Everything related to the BSC connection */
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#ifndef BSC_DATA_H
23#define BSC_DATA_H
24
Holger Hans Peter Freyther0e2f9112011-01-17 11:54:39 +010025#include "mtp_data.h"
26
Holger Hans Peter Freythercbf7d182010-07-31 05:25:35 +080027#include <osmocore/linuxlist.h>
28#include <osmocore/select.h>
29#include <osmocore/timer.h>
30#include <osmocore/write_queue.h>
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +080031
Holger Hans Peter Freyther0e4e35f2010-09-30 03:04:28 +080032#include <osmocore/protocol/gsm_04_08.h>
33
Holger Hans Peter Freythercf381e22010-08-04 18:39:26 +080034#include <osmocom/sccp/sccp.h>
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +080035
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +080036
37#include <netinet/in.h>
38#include <arpa/inet.h>
39
40struct bsc_data;
41struct snmp_mtp_session;
Holger Hans Peter Freyther84ec8712011-02-15 20:01:47 +010042struct msc_connection;
Holger Hans Peter Freytherf7ce2c62011-02-15 15:45:32 +010043struct mtp_m2ua_transport;
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +080044
Holger Hans Peter Freytherf38114e2011-01-20 21:11:13 +010045struct mtp_udp_data {
46 struct write_queue write_queue;
Holger Hans Peter Freyther083a30b2011-01-21 12:57:12 +010047 struct timer_list snmp_poll;
Holger Hans Peter Freytherf38114e2011-01-20 21:11:13 +010048
49 struct llist_head links;
50};
51
Holger Hans Peter Freyther0e2f9112011-01-17 11:54:39 +010052struct mtp_udp_link {
53 /* subclass */
54 struct mtp_link base;
Holger Hans Peter Freytherfe72c162011-01-04 13:21:52 +010055
Holger Hans Peter Freyther0e2f9112011-01-17 11:54:39 +010056 /* UDP specific stuff */
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +080057 struct bsc_data *bsc;
Holger Hans Peter Freyther0e2f9112011-01-17 11:54:39 +010058 int link_index;
59 int reset_timeout;
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +080060
Holger Hans Peter Freytherf38114e2011-01-20 21:11:13 +010061 struct sockaddr_in remote;
62
63 struct mtp_udp_data *data;
64 struct llist_head entry;
Holger Hans Peter Freyther3a1c0af2011-01-24 20:21:11 +010065
66 /* snmp for controlling the link */
67 struct snmp_mtp_session *session;
Holger Hans Peter Freytherf38114e2011-01-20 21:11:13 +010068};
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +080069
70struct bsc_data {
Holger Hans Peter Freythera310e532011-01-22 16:34:16 +010071 int app;
72
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +080073 struct timer_list start_timer;
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +080074 int setup;
Holger Hans Peter Freyther644aafb2011-01-03 23:51:07 +010075 int pcap_fd;
76 int udp_reset_timeout;
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +080077
Holger Hans Peter Freytherf38114e2011-01-20 21:11:13 +010078 /* udp code */
79 struct mtp_udp_data udp_data;
80
Holger Hans Peter Freyther7942abc2010-09-30 00:34:46 +080081 int dpc;
82 int opc;
Holger Hans Peter Freyther7a725562011-01-01 13:34:58 +010083 int sccp_opc;
Holger Hans Peter Freytherd8a73e22011-01-17 22:37:11 +010084 int isup_opc;
Holger Hans Peter Freyther7942abc2010-09-30 00:34:46 +080085 int src_port;
86 int udp_port;
87 char *udp_ip;
Holger Hans Peter Freytherc6bfa272011-01-22 17:06:34 +010088 int udp_nr_links;
Holger Hans Peter Freyther7942abc2010-09-30 00:34:46 +080089 int once;
Holger Hans Peter Freyther0e4e35f2010-09-30 03:04:28 +080090
Holger Hans Peter Freytherb38b33b2010-11-26 21:21:04 +010091 /* the network header to use */
92 int ni_ni;
93 int ni_spare;
94
Holger Hans Peter Freytherf603f282011-01-30 00:24:15 +010095 /* isup handling */
96 int isup_pass;
97
Holger Hans Peter Freyther599c9a42011-02-15 11:18:38 +010098 /* MTP Links */
99 struct llist_head linksets;
100 int num_linksets;
Holger Hans Peter Freyther0452f222011-02-03 13:35:42 +0100101
102 /* inject */
Holger Hans Peter Freytheree63d7d2011-02-10 12:39:05 +0100103 int allow_inject;
Holger Hans Peter Freyther0452f222011-02-03 13:35:42 +0100104 struct bsc_fd inject_fd;
105 struct llist_head inject_list;
Holger Hans Peter Freythere86c02e2011-02-10 15:32:14 +0100106
Holger Hans Peter Freytherf7ce2c62011-02-15 15:45:32 +0100107 /* m2ua code */
108 struct sctp_m2ua_transport *m2ua_trans;
Holger Hans Peter Freyther84ec8712011-02-15 20:01:47 +0100109
110 /* MSCs */
111 struct llist_head mscs;
112 int num_mscs;
Holger Hans Peter Freythera7bc3aa2011-02-16 16:12:07 +0100113
114 /* application */
115 struct llist_head apps;
116 int num_apps;
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +0800117};
118
119/* bsc related functions */
Holger Hans Peter Freyther84ec8712011-02-15 20:01:47 +0100120void release_bsc_resources(struct msc_connection *fw);
Holger Hans Peter Freytherc8405692011-01-02 20:24:08 +0100121
122void mtp_linkset_down(struct mtp_link_set *);
123void mtp_linkset_up(struct mtp_link_set *);
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +0800124
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +0800125/* connection tracking and action */
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +0800126
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +0800127/* udp init */
Holger Hans Peter Freyther3a1c0af2011-01-24 20:21:11 +0100128int link_global_init(struct mtp_udp_data *data, int src_port);
129int link_udp_init(struct mtp_udp_link *data, char *dest_ip, int port);
Holger Hans Peter Freyther89fa11a2011-02-10 18:26:07 +0100130struct mtp_link_set *link_init(struct bsc_data *bsc);
Holger Hans Peter Freytherfe72c162011-01-04 13:21:52 +0100131int link_shutdown_all(struct mtp_link_set *);
132int link_reset_all(struct mtp_link_set *);
133int link_clear_all(struct mtp_link_set *);
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +0800134
Holger Hans Peter Freytherddf8eae2011-01-22 17:36:01 +0100135/* pcap */
Holger Hans Peter Freyther36260e92011-01-22 17:37:56 +0100136enum {
137 NET_IN,
138 NET_OUT,
139};
140int mtp_handle_pcap(struct mtp_link *, int dir, const uint8_t *data, int length);
Holger Hans Peter Freytherddf8eae2011-01-22 17:36:01 +0100141
Holger Hans Peter Freyther2ff47b82011-02-15 20:25:10 +0100142struct bsc_data *bsc_data_create();
143
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +0800144#endif