OpenSS7 SS7 for the Common Man |
© Copyright 1997-2004,OpenSS7 Corporation, All Rights Reserved. |
||||||||||||||||||||||||||
Home | Overview | Status | News | Documentation | Resources | About | |||||||||||||||||||||
File /code/strss7/drivers/sua/sua_ss7.c#ident "@(#) $RCSfile: sua_ss7.c,v $ $Name: $($Revision: 0.8.2.2 $) $Date: 2003/04/03 19:51:34 $" static char const ident[] = "$RCSfile: sua_ss7.c,v $ $Name: $($Revision: 0.8.2.2 $) $Date: 2003/04/03 19:51:34 $"; #define __NO_VERSION__ #include <linux/config.h> #include <linux/version.h> #ifdef MODVERSIONS #include <linux/modversions.h> #endif #include <sys/stream.h> #include <sys/stropts.h> #include <sys/cmn_err.h> #include "sua.h" #include "sua_data.h" #include "sua_ctrl.h" #include "sua_msg.h" /* * ========================================================================= * * SCCP-User --> SUA (ASP) Downstream Primitives * * ========================================================================= */ static inline ss7_error_reply(queue_t * q, mblk_t * pdu, int prim, int err) { mblk_t *mp; if ((mp = sccp_error_ack(prim, err))) { freemsg(pdu); qreply(q, mp); return (0); } return (-ENOBUFS); } static inline int ss7_uderror_reply(queue_t * q, mblk_t * pdu, int err) { mblk_t *mp; N_unitdata_req_t *p = (N_unitdata_req_t *) pdu->b_rptr; if ((mp = sccp_uderror_ind(err, p->DEST_length ? (sccp_addr_t *) (pdu->b_rptr + p->DEST_offset) : 0, p->SRC_length ? (sccp_addr_t *) (pdu->b_rptr + p->SRC_offset) : 0, pdu->b_cont))) { freeb(pdu); qreply(q, mp); return (0); } return (-ENOBUFS); } /* * N_CONN_REQ * ------------------------------------------------------------------------- */ static int ss7_conn_req(queue_t * q, mblk_t * pdu) { } /* * N_CONN_RES * ------------------------------------------------------------------------- */ static int ss7_conn_res(queue_t * q, mblk_t * pdu) { } /* * N_DISCON_REQ * ------------------------------------------------------------------------- */ static int ss7_discon_req(queue_t * q, mblk_t * pdu) { } /* * N_DATA_REQ * ------------------------------------------------------------------------- */ static int ss7_data_req(queue_t * q, mblk_t * pdu) { } static int ss7_w_data(queue_t * q, mblk_t * pdu) { } /* * N_EXDATA_REQ * ------------------------------------------------------------------------- */ static int ss7_exdata_req(queue_t * q, mblk_t * pdu) { } /* * N_INFO_REQ * ------------------------------------------------------------------------- */ static int ss7_info_req(queue_t * q, mblk_t * pdu) { } /* * N_BIND_REQ * ------------------------------------------------------------------------- */ static int ss7_bind_req(queue_t * q, mblk_t * pdu) { } /* * N_UNBIND_REQ * ------------------------------------------------------------------------- */ static int ss7_unbind_req(queue_t * q, mblk_t * pdu) { } /* * N_UNITDATA_REQ * ------------------------------------------------------------------------- */ static int ss7_unitdata_req(queue_t * q, mblk_t * pdu) { } /* * N_OPTMGMT_REQ * ------------------------------------------------------------------------- */ static int ss7_optmgmt_req(queue_t * q, mblk_t * pdu) { } /* * N_DATACK_REQ * ------------------------------------------------------------------------- */ static int ss7_datack_req(queue_t * q, mblk_t * pdu) { } /* * N_RESET_REQ * ------------------------------------------------------------------------- */ static int ss7_reset_req(queue_t * q, mblk_t * pdu) { } /* * N_RESET_RES * ------------------------------------------------------------------------- */ static int ss7_reset_res(queue_t * q, mblk_t * pdu) { } static int (*ss7_dstr_prim[]) (queue_t *, mblk_t *) = { #define SS7_DSTR_FIRST N_CONN_REQ ss7_conn_req, /* N_CONN_REQ 0 */ ss7_conn_res, /* N_CONN_RES 1 */ ss7_discon_req, /* N_DICON_REQ 2 */ ss7_data_req, /* N_DATA_REQ 3 */ ss7_exdata_req, /* N_EXDATA_REQ 4 */ ss7_info_req, /* N_INFO_REQ 5 */ ss7_bind_req, /* N_BIND_REQ 6 */ ss7_unbind_req, /* N_UNBIND_REQ 7 */ ss7_unitdata_req, /* N_UNITDATA_REQ 8 */ ss7_optmgmt_req, /* N_OPTMGMT_REQ 9 */ NULL, /* 10 */ NULL, /* N_CONN_IND 11 */ NULL, /* N_CONN_CON 12 */ NULL, /* N_DISCON_IND 13 */ NULL, /* N_DATA_IND 14 */ NULL, /* N_EXDATA_IND 15 */ NULL, /* N_INFO_ACK 16 */ NULL, /* N_BIND_ACK 17 */ NULL, /* N_ERROR_ACK 18 */ NULL, /* N_OK_ACK 19 */ NULL, /* N_UNITDATA_IND 20 */ NULL, /* N_UDERROR_IND 21 */ NULL, /* 22 */ ss7_datack_req, /* N_DATACK_REQ 23 */ NULL, /* N_DATACK_IND 24 */ ss7_reset_req, /* N_RESET_REQ 25 */ NULL, /* N_RESET_IND 26 */ ss7_reset_res, /* N_RESET_RES 27 */ #define SS7_DSTR_LAST N_RESET_RES NULL /* N_RESET_CON 28 */ }; static int ss7_w_proto(queue_t * q, mblk_t * pdu) { int prim = *((long *) mp->b_rptr); if (SS7_DSTR_FIRST <= prim && prim <= SS7_DSTR_LAST && ss7_dstr_prim[prim]) return ((*ss7_dstr_prim[prim]) (q, mp)); return (-EOPNOTSUPP); } static int ss7_w_flush(queue_t * q, mblk_t * pdu) { return ua_w_flush(q, pdu); } static int (*ss7_w_ops[]) (queue_t *, mblk_t *) = { ss7_w_data, /* M_DATA */ ss7_w_proto, /* M_PROTO */ NULL, /* M_BREAK */ NULL, /* M_CTL */ NULL, /* M_DELAY */ NULL, /* M_IOCTL */ NULL, /* M_PASSFP */ NULL, /* M_RSE */ NULL, /* M_SETOPTS */ NULL, /* M_SIG */ NULL, /* M_COPYIN */ NULL, /* M_COPYOUT */ NULL, /* M_ERROR */ ss7_w_flush, /* M_FLUSH */ NULL, /* M_HANGUP */ NULL, /* M_IOCACK */ NULL, /* M_IOCNAK */ NULL, /* M_IOCDATA */ ss7_w_proto, /* M_PCPROTO */ NULL, /* M_PCRSE */ NULL, /* M_PCSIG */ NULL, /* M_READ */ NULL, /* M_STOP */ NULL, /* M_START */ NULL, /* M_STARTI */ NULL /* M_STOPI */ }; static void ss7_u_create(lp_t * lp) { } static void ss7_u_delete(lp_t * lp) { } struct ops sua_ss7_u_ops = { &ss7_u_create, /* create priv struct */ &ss7_u_delete, /* delete priv struct */ NULL, /* read operations */ &ss7_w_ops /* write operations */ }; /* * ========================================================================= * * SCCP-Provider --> SUA (SGP) Upstream Primitives * * ========================================================================= */ /* * N_CONN_IND * ------------------------------------------------------------------------- */ static int ss7_conn_ind(queue_t * q, mblk_t * pdu) { } /* * N_CONN_CON * ------------------------------------------------------------------------- */ static int ss7_conn_con(queue_t * q, mblk_t * pdu) { } /* * N_DISCON_IND * ------------------------------------------------------------------------- */ static int ss7_discon_ind(queue_t * q, mblk_t * pdu) { } /* * N_DATA_IND * ------------------------------------------------------------------------- */ static int ss7_data_ind(queue_t * q, mblk_t * pdu) { } static int ss7_r_data(queue_t * q, mblk_t * pdu) { } /* * N_EXDATA_IND * ------------------------------------------------------------------------- */ static int ss7_exdata_ind(queue_t * q, mblk_t * pdu) { } /* * N_INFO_ACK * ------------------------------------------------------------------------- */ static int ss7_info_ack(queue_t * q, mblk_t * pdu) { } /* * N_BIND_ACK * ------------------------------------------------------------------------- */ static int ss7_bind_ack(queue_t * q, mblk_t * pdu) { } /* * N_ERROR_ACK * ------------------------------------------------------------------------- */ static int ss7_error_ack(queue_t * q, mblk_t * pdu) { } /* * N_OK_ACK * ------------------------------------------------------------------------- */ static int ss7_ok_ack(queue_t * q, mblk_t * pdu) { } /* * N_UNITDATA_IND * ------------------------------------------------------------------------- */ static int ss7_unitdata_ind(queue_t * q, mblk_t * pdu) { } /* * N_UDERROR_IND * ------------------------------------------------------------------------- */ static int ss7_uderror_ind(queue_t * q, mblk_t * pdu) { } /* * N_DATACK_IND * ------------------------------------------------------------------------- */ static int ss7_datack_ind(queue_t * q, mblk_t * pdu) { } /* * N_RESET_IND * ------------------------------------------------------------------------- */ static int ss7_reset_ind(queue_t * q, mblk_t * pdu) { } /* * N_RESET_CON * ------------------------------------------------------------------------- */ static int ss7_conn_ind(queue_t * q, mblk_t * pdu) { } static int (*ss7_ustr_prim[]) (queue_t *, mblk_t *) = { NULL, /* N_CONN_REQ 0 */ NULL, /* N_CONN_RES 1 */ NULL, /* N_DICON_REQ 2 */ NULL, /* N_DATA_REQ 3 */ NULL, /* N_EXDATA_REQ 4 */ NULL, /* N_INFO_REQ 5 */ NULL, /* N_BIND_REQ 6 */ NULL, /* N_UNBIND_REQ 7 */ NULL, /* N_UNITDATA_REQ 8 */ NULL, /* N_OPTMGMT_REQ 9 */ NULL, /* 10 */ #define SS7_USTR_FIRST N_CONN_IND ss7_conn_ind, /* N_CONN_IND 11 */ ss7_conn_con, /* N_CONN_CON 12 */ ss7_discon_ind, /* N_DISCON_IND 13 */ ss7_data_ind, /* N_DATA_IND 14 */ ss7_exdata_ind, /* N_EXDATA_IND 15 */ ss7_info_ack, /* N_INFO_ACK 16 */ ss7_bind_ack, /* N_BIND_ACK 17 */ ss7_error_ack, /* N_ERROR_ACK 18 */ ss7_ok_ack, /* N_OK_ACK 19 */ ss7_unitdata_ind, /* N_UNITDATA_IND 20 */ ss7_uderror_ind, /* N_UDERROR_IND 21 */ NULL, /* 22 */ NULL, /* N_DATACK_REQ 23 */ ss7_datack_ind, /* N_DATACK_IND 24 */ NULL, /* N_RESET_REQ 25 */ ss7_reset_ind, /* N_RESET_IND 26 */ NULL, /* N_RESET_RES 27 */ ss7_reset_con /* N_RESET_CON 28 */ #define SS7_USTR_LAST N_RESET_CON }; static int ss7_r_proto(queue_t * q, mblk_t * pdu) { } static int ss7_r_error(queue_t * q, mblk_t * pdu) { } static int ss7_r_hangup(queue_t * q, mblk_t * pdu) { } static int ss7_r_flush(queue_t * q, mblk_t * pdu) { return ua_r_flush(q, pdu); } static int (*ss7_r_ops[]) (queue_t *, mblk_t *) = { ss7_r_data, /* M_DATA */ ss7_r_proto, /* M_PROTO */ NULL, /* M_BREAK */ NULL, /* M_CTL */ NULL, /* M_DELAY */ NULL, /* M_IOCTL */ NULL, /* M_PASSFP */ NULL, /* M_RSE */ NULL, /* M_SETOPTS */ NULL, /* M_SIG */ NULL, /* M_COPYIN */ NULL, /* M_COPYOUT */ ss7_r_error, /* M_ERROR */ ss7_r_flush, /* M_FLUSH */ ss7_r_hangup, /* M_HANGUP */ NULL, /* M_IOCACK */ NULL, /* M_IOCNAK */ NULL, /* M_IOCDATA */ ss7_r_proto, /* M_PCPROTO */ NULL, /* M_PCRSE */ NULL, /* M_PCSIG */ NULL, /* M_READ */ NULL, /* M_STOP */ NULL, /* M_START */ NULL, /* M_STARTI */ NULL /* M_STOPI */ }; static void ss7_l_create(lp_t * lp) { } static void ss7_l_delete(lp_t * lp) { } struct ops sua_ss7_l_ops = { &ss7_l_create, /* create priv struct */ &ss7_l_delete, /* delete priv struct */ &ss7_r_ops, /* read operations */ NULL /* write operations */ };
|
|||||||||||||||||||||||||||
OpenSS7 SS7 for the Common Man |
Home | Overview | Status | News | Documentation | Resources | About | ||||||||||||||||||||
© Copyright 1997-2004,OpenSS7 Corporation, All Rights Reserved. |