blob: 062361c4e23c8daa5f8d86e135f5cb21794b7876 [file] [log] [blame]
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +08001/*
Holger Hans Peter Freytherc8405692011-01-02 20:24:08 +01002 * (C) 2010-2011 by Holger Hans Peter Freyther <zecke@selfish.org>
3 * (C) 2010-2011 by On-Waves
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +08004 * All Rights Reserved
5 *
Holger Hans Peter Freytherde56c222011-01-16 17:45:14 +01006 * This program is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU Affero General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +08009 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
Holger Hans Peter Freytherde56c222011-01-16 17:45:14 +010014 * GNU Affero General Public License for more details.
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +080015 *
Holger Hans Peter Freytherde56c222011-01-16 17:45:14 +010016 * You should have received a copy of the GNU Affero General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +080018 *
19 */
20#ifndef mtp_data_h
21#define mtp_data_h
22
Holger Hans Peter Freythercbf7d182010-07-31 05:25:35 +080023#include <osmocore/msgb.h>
24#include <osmocore/timer.h>
25#include <osmocore/utils.h>
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +080026
Holger Hans Peter Freytherc8405692011-01-02 20:24:08 +010027struct bsc_data;
Holger Hans Peter Freyther0e2f9112011-01-17 11:54:39 +010028struct mtp_link;
Holger Hans Peter Freytherc8405692011-01-02 20:24:08 +010029
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +080030/* MTP Level3 timers */
31
32/* Timers for SS7 */
33#define MTP_T1 12, 0
34#define MTP_T2 30, 0
35#define START_DELAY 8, 0
36
37/**
38 * The state of the mtp_link in terms of layer3 and upwards
39 */
Holger Hans Peter Freyther569f1e12011-01-02 18:47:49 +010040struct mtp_link_set {
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +080041 /* routing info.. */
Holger Hans Peter Freytherd8a73e22011-01-17 22:37:11 +010042 int dpc, opc, sccp_opc, isup_opc;
Holger Hans Peter Freyther4e3e28e2010-11-26 21:05:39 +010043 int ni;
Holger Hans Peter Freythere976df12010-11-26 21:07:11 +010044 int spare;
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +080045
46 /* internal state */
47 /* the MTP1 link is up */
48 int available;
49 int running;
50 int sccp_up;
Holger Hans Peter Freyther606eae82011-01-20 14:23:10 +010051 int linkset_up;
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +080052
Holger Hans Peter Freyther346e1c42011-01-02 18:11:37 +010053 int last_sls;
54
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +080055 /* misc data */
Holger Hans Peter Freyther5aa17012010-07-31 04:37:26 +080056 uint8_t test_ptrn[14];
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +080057
58 int sltm_pending;
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +080059 int sltm_once;
60 int was_up;
61
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +080062 int slta_misses;
63 struct timer_list t1_timer;
64 struct timer_list t2_timer;
65
66 struct timer_list delay_timer;
Holger Hans Peter Freytherc8405692011-01-02 20:24:08 +010067
Holger Hans Peter Freytherfe72c162011-01-04 13:21:52 +010068 struct llist_head links;
Holger Hans Peter Freyther0e2f9112011-01-17 11:54:39 +010069 struct mtp_link *slc[16];
Holger Hans Peter Freyther644aafb2011-01-03 23:51:07 +010070
Holger Hans Peter Freytherefbd8c22011-01-17 20:21:45 +010071 /* special handling */
72 int pass_all_isup;
73
Holger Hans Peter Freytherc8405692011-01-02 20:24:08 +010074 /* custom data */
75 struct bsc_data *bsc;
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +080076};
77
Holger Hans Peter Freyther0e2f9112011-01-17 11:54:39 +010078/**
79 * One physical link to somewhere. This is the base
80 * with the interface used by the mtp_link_set. There
81 * will be specific implementations for M2UA, UDP and
82 * other transport means.
83 */
84struct mtp_link {
85 struct llist_head entry;
86
87 int pcap_fd;
88 struct mtp_link_set *the_link;
89
90 int available;
91
92 struct timer_list link_activate;
93
94 int (*start)(struct mtp_link *);
95 int (*write)(struct mtp_link *, struct msgb *msg);
96 int (*shutdown)(struct mtp_link *);
97 int (*reset)(struct mtp_link *data);
98 int (*clear_queue)(struct mtp_link *data);
99};
100
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +0800101
Holger Hans Peter Freyther569f1e12011-01-02 18:47:49 +0100102struct mtp_link_set *mtp_link_set_alloc(void);
103void mtp_link_set_stop(struct mtp_link_set *link);
104void mtp_link_set_reset(struct mtp_link_set *link);
Holger Hans Peter Freytherbee2ed12011-01-18 13:29:42 +0100105int mtp_link_set_data(struct mtp_link *link, struct msgb *msg);
Holger Hans Peter Freyther569f1e12011-01-02 18:47:49 +0100106int mtp_link_set_submit_sccp_data(struct mtp_link_set *link, int sls, const uint8_t *data, unsigned int length);
107int mtp_link_set_submit_isup_data(struct mtp_link_set *link, int sls, const uint8_t *data, unsigned int length);
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +0800108
Holger Hans Peter Freyther069e6352011-01-04 13:01:23 +0100109void mtp_link_set_init_slc(struct mtp_link_set *set);
Holger Hans Peter Freyther0e2f9112011-01-17 11:54:39 +0100110void mtp_link_set_add_link(struct mtp_link_set *set, struct mtp_link *link);
Holger Hans Peter Freyther069e6352011-01-04 13:01:23 +0100111
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +0800112
113/* one time init function */
Holger Hans Peter Freyther569f1e12011-01-02 18:47:49 +0100114void mtp_link_set_init(void);
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +0800115
116/* to be implemented for MSU sending */
Holger Hans Peter Freyther0e2f9112011-01-17 11:54:39 +0100117void mtp_link_set_submit(struct mtp_link *link, struct msgb *msg);
Holger Hans Peter Freyther569f1e12011-01-02 18:47:49 +0100118void mtp_link_set_forward_sccp(struct mtp_link_set *link, struct msgb *msg, int sls);
Holger Hans Peter Freyther1b6901e2011-01-17 16:13:28 +0100119void mtp_link_set_forward_isup(struct mtp_link_set *link, struct msgb *msg, int sls);
Holger Hans Peter Freyther0e2f9112011-01-17 11:54:39 +0100120void mtp_link_restart(struct mtp_link *link);
Holger Hans Peter Freyther569f1e12011-01-02 18:47:49 +0100121void mtp_link_set_sccp_down(struct mtp_link_set *link);
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +0800122
Holger Hans Peter Freyther97f66e22010-07-28 03:32:52 +0800123#endif