-
Notifications
You must be signed in to change notification settings - Fork 11
/
mtp2.h
183 lines (154 loc) · 4.53 KB
/
mtp2.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
/*
* libss7: An implementation of Signalling System 7
*
* Written by Matthew Fredrickson <[email protected]>
*
* scheduling routines taken from libpri by Mark Spencer <[email protected]>
*
* Copyright (C) 2006-2008, Digium, Inc
* All Rights Reserved.
*/
/*
* See http://www.asterisk.org for more information about
* the Asterisk project. Please do not directly contact
* any of the maintainers of this project for assistance;
* the project provides a web site, mailing lists and IRC
* channels for your use.
*
* This program is free software, distributed under the terms of
* the GNU General Public License Version 2 as published by the
* Free Software Foundation. See the LICENSE file included with
* this program for more details.
*
* In addition, when this program is distributed with Asterisk in
* any form that would qualify as a 'combined work' or as a
* 'derivative work' (but not mere aggregation), you can redistribute
* and/or modify the combination under the terms of the license
* provided with that copy of Asterisk, instead of the license
* terms granted here.
*/
#ifndef _SS7_MTP_H
#define _SS7_MTP_H
#include "ss7_internal.h"
/* Code for extended length of message, i.e. greater than 62 octects */
#define MTP2_LI_MAX 63
#define SIF_MAX_SIZE 272
#define MTP2_SU_HEAD_SIZE 3
#define MTP2_SIZE MTP2_SU_HEAD_SIZE
/* MTP2 Timers */
/* For ITU 64kbps links */
#define ITU_TIMER_T1 45000
#define ITU_TIMER_T2 50000
#define ITU_TIMER_T3 1500
#define ITU_TIMER_T4_NORMAL 8500
#define ITU_TIMER_T4_EMERGENCY 500
#define ITU_TIMER_T7 1250
/* For ANSI links */
#define ANSI_TIMER_T1 16000
#define ANSI_TIMER_T2 11500
#define ANSI_TIMER_T3 11500
#define ANSI_TIMER_T4_NORMAL 2300
#define ANSI_TIMER_T4_EMERGENCY 600
#define ANSI_TIMER_T7 1250
/* Bottom 3 bits in LSSU status field */
#define LSSU_SIO 0 /* Out of alignment */
#define LSSU_SIN 1 /* Normal alignament */
#define LSSU_SIE 2 /* Emergency alignment */
#define LSSU_SIOS 3 /* Out of Service */
#define LSSU_SIPO 4 /* MTP2 cannot reach MTP3, useless for us */
#define LSSU_SIB 5 /* MTP2 congestion */
#define FISU 6
/* More MTP2 definitions */
/* Various sizes */
#define MTP_MAX_SIZE 277 /* 276 + 1 for RSIS */
#define LSSU_SIZE 6
#define FISU_SIZE 5
/* MTP2 Link states */
#define MTP_IDLE 0
#define MTP_NOTALIGNED 1
#define MTP_ALIGNED 2
#define MTP_PROVING 3
#define MTP_ALIGNEDREADY 4
#define MTP_INSERVICE 5
#define MTP_ALARM 6
struct mtp_su_head {
/* Common header for all signaling units */
unsigned char bsn:7;
unsigned char bib:1;
unsigned char fsn:7;
unsigned char fib:1;
unsigned char li:6;
unsigned char spare:2;
unsigned char data[0];
} __attribute__((packed));
struct ss7;
struct mtp2_timers {
int t1;
int t2;
int t3;
int t4;
int t4e;
int t7;
};
struct mtp2 {
int state;
int std_test_passed;
int inhibit;
int changeover;
unsigned int got_sent_netmsg;
struct ss7_msg *co_buf;
struct ss7_msg *cb_buf;
unsigned char curfsn:7;
unsigned char curfib:1;
unsigned char lastfsnacked:7;
unsigned char co_lastfsnacked:7; /* store here before reset_mtp clear */
unsigned char curbib:1;
int fd;
int flags;
int mtp3_timer[MTP3_MAX_TIMERS];
int q707_t1_failed;
/* Timers */
int t1;
int t2;
int t3;
int t4;
int t7;
struct mtp2_timers timers;
int slc;
int net_mng_sls;
int emergency;
int provingperiod;
unsigned int dpc;
int autotxsutype;
int lastsurxd;
int lastsutxd;
/* Line related stats */
unsigned int retransmissioncount;
struct ss7_msg *tx_buf;
struct ss7_msg *tx_q;
struct ss7_msg *retransmit_pos;
struct ss7_msg *co_tx_buf; /* store here before reset_mtp flush it */
struct ss7_msg *co_tx_q;
struct adjacent_sp *adj_sp;
unsigned char cb_seq;
struct ss7 *master;
};
/* Flags for the struct mtp2 flags parameter */
#define MTP2_FLAG_DAHDIMTP2 (1 << 0)
#define MTP2_FLAG_WRITE (1 << 1)
/* Initialize MTP link */
int mtp2_start(struct mtp2 *link, int emergency);
int mtp2_stop(struct mtp2 *link);
int mtp2_alarm(struct mtp2 *link);
int mtp2_noalarm(struct mtp2 *link);
int mtp2_setstate(struct mtp2 *link, int state);
struct mtp2 * mtp2_new(int fd, unsigned int switchtype);
int mtp2_transmit(struct mtp2 *link);
int mtp2_receive(struct mtp2 *link, unsigned char *buf, int len);
int mtp2_msu(struct mtp2 *link, struct ss7_msg *m);
void mtp2_dump(struct mtp2 *link, char prefix, unsigned char *buf, int len);
char *linkstate2strext(int linkstate);
void update_txbuf(struct mtp2 *link, struct ss7_msg **buf, unsigned char upto);
int len_buf(struct ss7_msg *buf);
void flush_bufs(struct mtp2 *link);
#endif /* _SS7_MTP_H */