⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mtp.h

📁 asterisk1.4.6版本下 7#信令驱动 源码
💻 H
字号:
/* mtp.h - MTP2 and MTP3 functionality.
 *
 * Copyright (C) 2005-2006, Sifira A/S.
 *
 * Author: Kristian Nielsen <kn@sifira.dk>
 *         Anders Baekgaard <ab@sifira.dk>
 *         Anders Baekgaard <ab@dicea.dk>
 *
 * This file is part of chan_ss7.
 *
 * chan_ss7 is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * chan_ss7 is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with chan_ss7; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 */


#define SS7_PROTO_ISUP 5
#define SS7_PROTO_SCCP 3

/* Max. MTP2 packet size, including sequence numbers, CRC, and two flags. */
#define MTP_MAX_PCK_SIZE 280

/* Structure used to send requests to the MTP thread. */
#define MTP_REQ_MAX_SIZE (sizeof(struct mtp_req) + MTP_MAX_PCK_SIZE)

struct mtp_req {
  /* The "typ" fiend determines which element in the union is used. */
  enum {
    MTP_REQ_ISUP,               /* Queue ISUP MSU for sending on link */
    MTP_REQ_SCCP,               /* Queue SCCP MSU for sending on link */
    MTP_REQ_ISUP_FORWARD,       /* ISUP event to be sent on MTP */
    MTP_REQ_LINK_DOWN,          /* Take link out of service */
    MTP_REQ_LINK_UP,            /* Start initial alignment procedure */
    MTP_REQ_REGISTER_L4,	/* Register layer 4 protocol */
  } typ;

  unsigned long seq_no;

  union {
    struct {
      struct link* slink;
      struct link* link;
      int slinkix;
    } isup;
    struct {
      struct link* slink;
      int slinkix;
    } sccp;
    struct {
      int link_ix;
    } link;
    struct {
      int ss7_protocol;
      int host_ix;
      int linkix;
      union {
	struct {
	  int subsystem;
	} sccp;
      };
    } regist;
  };

  int len;
  unsigned char buf[0];
};

/* Structure used to return events from the MTP thread. */
#define MTP_EVENT_MAX_SIZE (sizeof(struct mtp_event) + 1000)
struct mtp_event {
  /* The "typ" field determines which element in the union is used. */
  enum {
    MTP_EVENT_ALIVE = 10,       /* Enum value above this indicate MTP_EVENT_... */
    MTP_EVENT_ISUP,             /* ISUP MSU received on link */
    MTP_EVENT_SCCP,             /* SCCP MSU received on link */
    MTP_EVENT_REQ_REGISTER,	/* Require register */
    MTP_EVENT_LOG,              /* Log message for ast_log() */
    MTP_EVENT_DUMP,             /* Link data for frame-level debug dump */
    MTP_EVENT_STATUS,           /* F.ex. "link down". */
    MTP_EVENT_LAST,             /* Placeholder, Must be last in enumeration */
  } typ;

  unsigned long seq_no;

  union {
    struct {
      struct link* slink;
      struct link* link;
      int slinkix;
    } isup;
    struct {
      struct link* slink;
      int slinkix;
    } sccp;

    struct {
      int ss7_protocol;
      int host_ix;
      union {
	struct {
	  int slinkix;
	} isup;
      };
    } regist;

    struct {
      int level;
      const char *file;
      int line;
      const char *function;
    } log;

    struct {
      int out;                  /* True if sent packet, false if received */
      struct timeval stamp;        /* Timestamp */
      int slinkno;		/* Signalling link no */
    } dump;

    struct {
      enum {
	MTP_EVENT_STATUS_LINK_UP,
	MTP_EVENT_STATUS_LINK_DOWN,
	MTP_EVENT_STATUS_INSERVICE
      } link_state;
      struct link* link;
    } status;
  };

  int len;
  unsigned char buf[0];
};

/* Must be called once to initialize MTP, before starting the MTP thread.
   Returns 0 on ok, -1 on error. */
int mtp_init(void);

void mtp_cleanup(void);
void *mtp_thread_main(void *data);
void mtp_thread_signal_stop(void);
struct lffifo *mtp_get_receive_fifo(void);
struct lffifo **mtp_get_send_fifo(void);
struct lffifo *mtp_get_control_fifo(void);
void mtp3_put_label(int sls, ss7_variant variant, int opc, int dpc, unsigned char *buf);	/* by lin.miao@openvox.cn */
int mtp_has_inservice_schannels(struct link*);
int mtp2_slink_inservice(int linkix);
int mtp_cmd_linkstatus(char* buff, int timeslot);
int mtp_cmd_data(int fd, int argc, char *argv[]);
int cmd_testfailover(int fd, int argc, char *argv[]);

int get_receive_pipe(void);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -