Holger Hans Peter Freyther | 97f66e2 | 2010-07-28 03:32:52 +0800 | [diff] [blame] | 1 | /* |
Holger Hans Peter Freyther | c840569 | 2011-01-02 20:24:08 +0100 | [diff] [blame] | 2 | * (C) 2010-2011 by Holger Hans Peter Freyther <zecke@selfish.org> |
| 3 | * (C) 2010-2011 by On-Waves |
Holger Hans Peter Freyther | 97f66e2 | 2010-07-28 03:32:52 +0800 | [diff] [blame] | 4 | * All Rights Reserved |
| 5 | * |
Holger Hans Peter Freyther | de56c22 | 2011-01-16 17:45:14 +0100 | [diff] [blame] | 6 | * 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 Freyther | 97f66e2 | 2010-07-28 03:32:52 +0800 | [diff] [blame] | 9 | * (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 Freyther | de56c22 | 2011-01-16 17:45:14 +0100 | [diff] [blame] | 14 | * GNU Affero General Public License for more details. |
Holger Hans Peter Freyther | 97f66e2 | 2010-07-28 03:32:52 +0800 | [diff] [blame] | 15 | * |
Holger Hans Peter Freyther | de56c22 | 2011-01-16 17:45:14 +0100 | [diff] [blame] | 16 | * 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 Freyther | 97f66e2 | 2010-07-28 03:32:52 +0800 | [diff] [blame] | 18 | * |
| 19 | */ |
| 20 | #ifndef mtp_data_h |
| 21 | #define mtp_data_h |
| 22 | |
Holger Hans Peter Freyther | cbf7d18 | 2010-07-31 05:25:35 +0800 | [diff] [blame] | 23 | #include <osmocore/msgb.h> |
| 24 | #include <osmocore/timer.h> |
| 25 | #include <osmocore/utils.h> |
Holger Hans Peter Freyther | 97f66e2 | 2010-07-28 03:32:52 +0800 | [diff] [blame] | 26 | |
Holger Hans Peter Freyther | c840569 | 2011-01-02 20:24:08 +0100 | [diff] [blame] | 27 | struct bsc_data; |
Holger Hans Peter Freyther | 0e2f911 | 2011-01-17 11:54:39 +0100 | [diff] [blame] | 28 | struct mtp_link; |
Holger Hans Peter Freyther | c840569 | 2011-01-02 20:24:08 +0100 | [diff] [blame] | 29 | |
Holger Hans Peter Freyther | 97f66e2 | 2010-07-28 03:32:52 +0800 | [diff] [blame] | 30 | /* 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 Freyther | 569f1e1 | 2011-01-02 18:47:49 +0100 | [diff] [blame] | 40 | struct mtp_link_set { |
Holger Hans Peter Freyther | 97f66e2 | 2010-07-28 03:32:52 +0800 | [diff] [blame] | 41 | /* routing info.. */ |
Holger Hans Peter Freyther | d8a73e2 | 2011-01-17 22:37:11 +0100 | [diff] [blame] | 42 | int dpc, opc, sccp_opc, isup_opc; |
Holger Hans Peter Freyther | 4e3e28e | 2010-11-26 21:05:39 +0100 | [diff] [blame] | 43 | int ni; |
Holger Hans Peter Freyther | e976df1 | 2010-11-26 21:07:11 +0100 | [diff] [blame] | 44 | int spare; |
Holger Hans Peter Freyther | 97f66e2 | 2010-07-28 03:32:52 +0800 | [diff] [blame] | 45 | |
| 46 | /* internal state */ |
| 47 | /* the MTP1 link is up */ |
| 48 | int available; |
| 49 | int running; |
| 50 | int sccp_up; |
Holger Hans Peter Freyther | 606eae8 | 2011-01-20 14:23:10 +0100 | [diff] [blame^] | 51 | int linkset_up; |
Holger Hans Peter Freyther | 97f66e2 | 2010-07-28 03:32:52 +0800 | [diff] [blame] | 52 | |
Holger Hans Peter Freyther | 346e1c4 | 2011-01-02 18:11:37 +0100 | [diff] [blame] | 53 | int last_sls; |
| 54 | |
Holger Hans Peter Freyther | 97f66e2 | 2010-07-28 03:32:52 +0800 | [diff] [blame] | 55 | /* misc data */ |
Holger Hans Peter Freyther | 5aa1701 | 2010-07-31 04:37:26 +0800 | [diff] [blame] | 56 | uint8_t test_ptrn[14]; |
Holger Hans Peter Freyther | 97f66e2 | 2010-07-28 03:32:52 +0800 | [diff] [blame] | 57 | |
| 58 | int sltm_pending; |
Holger Hans Peter Freyther | 97f66e2 | 2010-07-28 03:32:52 +0800 | [diff] [blame] | 59 | int sltm_once; |
| 60 | int was_up; |
| 61 | |
Holger Hans Peter Freyther | 97f66e2 | 2010-07-28 03:32:52 +0800 | [diff] [blame] | 62 | 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 Freyther | c840569 | 2011-01-02 20:24:08 +0100 | [diff] [blame] | 67 | |
Holger Hans Peter Freyther | fe72c16 | 2011-01-04 13:21:52 +0100 | [diff] [blame] | 68 | struct llist_head links; |
Holger Hans Peter Freyther | 0e2f911 | 2011-01-17 11:54:39 +0100 | [diff] [blame] | 69 | struct mtp_link *slc[16]; |
Holger Hans Peter Freyther | 644aafb | 2011-01-03 23:51:07 +0100 | [diff] [blame] | 70 | |
Holger Hans Peter Freyther | efbd8c2 | 2011-01-17 20:21:45 +0100 | [diff] [blame] | 71 | /* special handling */ |
| 72 | int pass_all_isup; |
| 73 | |
Holger Hans Peter Freyther | c840569 | 2011-01-02 20:24:08 +0100 | [diff] [blame] | 74 | /* custom data */ |
| 75 | struct bsc_data *bsc; |
Holger Hans Peter Freyther | 97f66e2 | 2010-07-28 03:32:52 +0800 | [diff] [blame] | 76 | }; |
| 77 | |
Holger Hans Peter Freyther | 0e2f911 | 2011-01-17 11:54:39 +0100 | [diff] [blame] | 78 | /** |
| 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 | */ |
| 84 | struct 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 Freyther | 97f66e2 | 2010-07-28 03:32:52 +0800 | [diff] [blame] | 101 | |
Holger Hans Peter Freyther | 569f1e1 | 2011-01-02 18:47:49 +0100 | [diff] [blame] | 102 | struct mtp_link_set *mtp_link_set_alloc(void); |
| 103 | void mtp_link_set_stop(struct mtp_link_set *link); |
| 104 | void mtp_link_set_reset(struct mtp_link_set *link); |
Holger Hans Peter Freyther | bee2ed1 | 2011-01-18 13:29:42 +0100 | [diff] [blame] | 105 | int mtp_link_set_data(struct mtp_link *link, struct msgb *msg); |
Holger Hans Peter Freyther | 569f1e1 | 2011-01-02 18:47:49 +0100 | [diff] [blame] | 106 | int mtp_link_set_submit_sccp_data(struct mtp_link_set *link, int sls, const uint8_t *data, unsigned int length); |
| 107 | int mtp_link_set_submit_isup_data(struct mtp_link_set *link, int sls, const uint8_t *data, unsigned int length); |
Holger Hans Peter Freyther | 97f66e2 | 2010-07-28 03:32:52 +0800 | [diff] [blame] | 108 | |
Holger Hans Peter Freyther | 069e635 | 2011-01-04 13:01:23 +0100 | [diff] [blame] | 109 | void mtp_link_set_init_slc(struct mtp_link_set *set); |
Holger Hans Peter Freyther | 0e2f911 | 2011-01-17 11:54:39 +0100 | [diff] [blame] | 110 | void mtp_link_set_add_link(struct mtp_link_set *set, struct mtp_link *link); |
Holger Hans Peter Freyther | 069e635 | 2011-01-04 13:01:23 +0100 | [diff] [blame] | 111 | |
Holger Hans Peter Freyther | 97f66e2 | 2010-07-28 03:32:52 +0800 | [diff] [blame] | 112 | |
| 113 | /* one time init function */ |
Holger Hans Peter Freyther | 569f1e1 | 2011-01-02 18:47:49 +0100 | [diff] [blame] | 114 | void mtp_link_set_init(void); |
Holger Hans Peter Freyther | 97f66e2 | 2010-07-28 03:32:52 +0800 | [diff] [blame] | 115 | |
| 116 | /* to be implemented for MSU sending */ |
Holger Hans Peter Freyther | 0e2f911 | 2011-01-17 11:54:39 +0100 | [diff] [blame] | 117 | void mtp_link_set_submit(struct mtp_link *link, struct msgb *msg); |
Holger Hans Peter Freyther | 569f1e1 | 2011-01-02 18:47:49 +0100 | [diff] [blame] | 118 | void mtp_link_set_forward_sccp(struct mtp_link_set *link, struct msgb *msg, int sls); |
Holger Hans Peter Freyther | 1b6901e | 2011-01-17 16:13:28 +0100 | [diff] [blame] | 119 | void mtp_link_set_forward_isup(struct mtp_link_set *link, struct msgb *msg, int sls); |
Holger Hans Peter Freyther | 0e2f911 | 2011-01-17 11:54:39 +0100 | [diff] [blame] | 120 | void mtp_link_restart(struct mtp_link *link); |
Holger Hans Peter Freyther | 569f1e1 | 2011-01-02 18:47:49 +0100 | [diff] [blame] | 121 | void mtp_link_set_sccp_down(struct mtp_link_set *link); |
Holger Hans Peter Freyther | 97f66e2 | 2010-07-28 03:32:52 +0800 | [diff] [blame] | 122 | |
Holger Hans Peter Freyther | 97f66e2 | 2010-07-28 03:32:52 +0800 | [diff] [blame] | 123 | #endif |