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
|
/*
* libss7: An implementation of Signalling System 7
*
* Written by Matthew Fredrickson <creslin@digium.com>
*
* scheduling routines taken from libpri by Mark Spencer <markster@digium.com>
*
* 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 /* janelle is the bombdiggity - jnizzle */
#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
/* 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
/* 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
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;
};
struct mtp2 {
int state;
unsigned char curfsn:7;
unsigned char curfib:1;
unsigned char lastfsnacked:7;
unsigned char curbib:1;
int fd;
int flags;
/* Timers */
int t1;
int t2;
int t3;
int t4;
struct mtp2_timers timers;
int slc;
int emergency;
int provingperiod;
unsigned int dpc;
int autotxsutype;
int lastsurxd;
int lastsutxd;
int sent_tra;
/* Line related stats */
unsigned int retransmissioncount;
struct ss7_msg *tx_buf;
struct ss7_msg *tx_q;
struct ss7_msg *retransmit_pos;
struct ss7 *master;
};
/* Flags for the struct mtp2 flags parameter */
#define MTP2_FLAG_ZAPMTP2 (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_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);
#endif /* _SS7_MTP_H */
|