|
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/sigtran/ua_msgs.h
#ifndef __UA_MSGS_H__
#define __UA_MSGS_H__
#ident "@(#) $RCSfile: ua_msgs.h,v $ $Name: $($Revision: 0.8.2.2 $) $Date: 2002/10/18 03:09:22 $"
/*
* =========================================================================
*
* SCTP USER ADAPTATION LAYER MESSAGE DEFINITIONS:-
*
* =========================================================================
*/
#define UA_VERSION 1
#define UA_PAD4(__len) (((__len)+3)&~0x3)
#define UA_MHDR(__version, __spare, __class, __type) \
(__constant_htonl(((__version)<<24)|((__spare)<<16)|((__class)<<8)|(__type)))
#define UA_MSG_VERS(__hdr) ((ntohl(__hdr)>>24)&0xff)
#define UA_MSG_CLAS(__hdr) ((ntohl(__hdr)>> 8)&0xff)
#define UA_MSG_TYPE(__hdr) ((ntohl(__hdr)>> 0)&0xff)
#define UA_MSG_MTAG(__hdr) ((ntohl(__hdr))&0xffff)
#define UA_MSG_CTAG(__hdr) ((ntohl(__hdr))&0xffff)
#define __UA_MSG_VERS(__hdr) ((__constant_ntohl(__hdr)>>24)&0xff)
#define __UA_MSG_CLAS(__hdr) ((__constant_ntohl(__hdr)>> 8)&0xff)
#define __UA_MSG_TYPE(__hdr) ((__constant_ntohl(__hdr)>> 0)&0xff)
#define __UA_MSG_MTAG(__hdr) ((__constant_ntohl(__hdr))&0xffff)
#define __UA_MSG_CTAG(__hdr) ((__constant_ntohl(__hdr))&0xffff)
/*
* MESSAGE CLASES:-
*/
#define UA_CLASS_MGMT 0x00 /* UA Management (MGMT) Message */
#define UA_CLASS_XFER 0x01 /* M3UA Data transfer messages */
#define UA_CLASS_SSNM 0x02 /* Signalling Network Mgmt (SNM) Msgs */
#define UA_CLASS_ASPS 0x03 /* ASP State Maint. (ASPSM) Messages */
#define UA_CLASS_ASPT 0x04 /* ASP Traffic Maint. (ASPTM) Messages */
#define UA_CLASS_Q921 0x05 /* Q.931 user part messages */
#define UA_CLASS_MAUP 0x06 /* M2UA Messages */
#define UA_CLASS_CNLS 0x07 /* SUA Connectionless Messages */
#define UA_CLASS_CONS 0x08 /* SUA Connection-Oriented Messages */
#define UA_CLASS_RKMM 0x09 /* Routing Key Management (RKM) Msgs */
#define UA_CLASS_TDHM 0x0a /* TUA Dialong Handling Message */
#define UA_CLASS_TCHM 0x0b /* TUA Component Handling Message */
#define UA_CLASS_LAST 0x0b
/*
* MESSAGES DEFINED IN EACH CLASS:-
*/
#define UA_MGMT_ERR UA_MHDR(UA_VERSION, 0, UA_CLASS_MGMT, 0x00)
#define UA_MGMT_NTFY UA_MHDR(UA_VERSION, 0, UA_CLASS_MGMT, 0x01)
#define UA_MGMT_LAST 0x01
#define UA_SSNM_DUNA UA_MHDR(UA_VERSION, 0, UA_CLASS_SSNM, 0x01)
#define UA_SSNM_DAVA UA_MHDR(UA_VERSION, 0, UA_CLASS_SSNM, 0x02)
#define UA_SSNM_DAUD UA_MHDR(UA_VERSION, 0, UA_CLASS_SSNM, 0x03)
#define UA_SSNM_SCON UA_MHDR(UA_VERSION, 0, UA_CLASS_SSNM, 0x04)
#define UA_SSNM_DUPU UA_MHDR(UA_VERSION, 0, UA_CLASS_SSNM, 0x05)
#define UA_SSNM_DRST UA_MHDR(UA_VERSION, 0, UA_CLASS_SSNM, 0x06)
#define UA_SSNM_LAST 0x06
#define UA_ASPS_ASPUP_REQ UA_MHDR(UA_VERSION, 0, UA_CLASS_ASPS, 0x01)
#define UA_ASPS_ASPDN_REQ UA_MHDR(UA_VERSION, 0, UA_CLASS_ASPS, 0x02)
#define UA_ASPS_HBEAT_REQ UA_MHDR(UA_VERSION, 0, UA_CLASS_ASPS, 0x03)
#define UA_ASPS_ASPUP_ACK UA_MHDR(UA_VERSION, 0, UA_CLASS_ASPS, 0x04)
#define UA_ASPS_ASPDN_ACK UA_MHDR(UA_VERSION, 0, UA_CLASS_ASPS, 0x05)
#define UA_ASPS_HBEAT_ACK UA_MHDR(UA_VERSION, 0, UA_CLASS_ASPS, 0x06)
#define UA_ASPS_LAST 0x06
#define UA_ASPT_ASPAC_REQ UA_MHDR(UA_VERSION, 0, UA_CLASS_ASPT, 0x01)
#define UA_ASPT_ASPIA_REQ UA_MHDR(UA_VERSION, 0, UA_CLASS_ASPT, 0x02)
#define UA_ASPT_ASPAC_ACK UA_MHDR(UA_VERSION, 0, UA_CLASS_ASPT, 0x03)
#define UA_ASPT_ASPIA_ACK UA_MHDR(UA_VERSION, 0, UA_CLASS_ASPT, 0x04)
#define UA_ASPT_LAST 0x04
#define UA_RKMM_REG_REQ UA_MHDR(UA_VERSION, 0, UA_CLASS_RKMM, 0x01)
#define UA_RKMM_REG_RSP UA_MHDR(UA_VERSION, 0, UA_CLASS_RKMM, 0x02)
#define UA_RKMM_DEREG_REQ UA_MHDR(UA_VERSION, 0, UA_CLASS_RKMM, 0x03)
#define UA_RKMM_DEREG_RSP UA_MHDR(UA_VERSION, 0, UA_CLASS_RKMM, 0x04)
#define UA_RKMM_LAST 0x04
#define UA_MHDR_SIZE (sizeof(uint32_t)*2)
#define UA_PHDR_SIZE (sizeof(uint32_t))
#define UA_MAUP_SIZE (UA_MHDR_SIZE + UA_PHDR_SIZE + sizeof(uint32_t))
#define UA_TAG(__phdr) (ntohl((__phdr))>>16)
#define UA_TAG_MASK (__constant_htonl(0xffff0000))
#define UA_LENGTH(__phdr) (ntohl(__phdr)&0xffff)
#define UA_SIZE(__phdr) (__constant_htonl(__phdr)&0xffff)
#define UA_PHDR(__phdr, __length) \
(((__phdr)&UA_TAG_MASK)|htonl((__length)+sizeof(uint32_t)))
#define UA_PARM(__tag,__length) \
__constant_htonl(((__tag)<<16)|(((__length)+sizeof(uint32_t))&0xffff))
#define UA_WORDS(_len) (((_len)+3)>>2)
/*
* COMMON PARAMETERS:-
*
* Common parameters per draft-ietf-sigtran-m2ua-11.txt
* Common parameters per draft-ietf-sigtran-m3ua-10.txt
* Common parameters per draft-ietf-sigtran-sua-09.txt
* Common parameters per rfc3057.txt
* -------------------------------------------------------------------
*/
#define UA_PARM_RESERVED UA_PARM(0x0000,0)
#define UA_PARM_IID UA_PARM(0x0001,sizeof(uint32_t))
#define UA_PARM_IID_TEXT UA_PARM(0x0003,0)
#define UA_PARM_INFO UA_PARM(0x0004,0)
#define UA_PARM_DLCI UA_PARM(0x0005,sizeof(uint32_t)) /* rfc3057 */
#define UA_PARM_RC UA_PARM(0x0006,sizeof(uint32_t))
#define UA_PARM_DIAG UA_PARM(0x0007,0)
#define UA_PARM_IID_RANGE UA_PARM(0x0008,0) /* rfc3057 */
#define UA_PARM_HBDATA UA_PARM(0x0009,0)
#define UA_PARM_REASON UA_PARM(0x000a,sizeof(uint32_t))
#define UA_PARM_TMODE UA_PARM(0x000b,sizeof(uint32_t))
#define UA_PARM_ECODE UA_PARM(0x000c,sizeof(uint32_t))
#define UA_PARM_STATUS UA_PARM(0x000d,sizeof(uint32_t))
#define UA_PARM_PROT_DATA UA_PARM(0x000e,sizeof(uint32_t)) /* rfc3057 */
#define UA_PARM_REL_REASON UA_PARM(0x000f,sizeof(uint32_t)) /* rfc3057 */
#define UA_PARM_TEI_STATUS UA_PARM(0x0010,sizeof(uint32_t)) /* rfc3057 */
#define UA_PARM_ASPID UA_PARM(0x0011,sizeof(uint32_t))
#define UA_PARM_APC UA_PARM(0x0012,sizeof(uint32_t))
#define UA_PARM_CORR_ID UA_PARM(0x0013,sizeof(uint32_t))
/*
* Extension parameters
*/
#define UA_PARM_PROTO_LIMITS UA_PARM(0x0014,5*sizeof(uint32_t)) /* draft-bidulock-sigtran-sginfo-00
*/
#define UA_PARM_ASPEXT UA_PARM(0x0015,0) /* draft-bidulock-sigtran-aspext-00 */
#define UA_PARM_LOAD_DIST UA_PARM(0x0016,sizeof(uint32_t)) /* draft-bidulock-sigtran-loadgrp-00
*/
#define UA_PARM_LOAD_SEL UA_PARM(0x0017,sizeof(uint32_t)) /* draft-bidulock-sigtran-loadsel-00
*/
#define UA_ASPEXT_NONE (0x00)
#define UA_ASPEXT_LOADSEL (0x01)
#define UA_ASPEXT_CORID (0x02)
#define UA_ASPEXT_SESSID (0x03)
#define UA_ASPEXT_LOADGRP (0x04)
#define UA_ASPEXT_REGEXT (0x05)
/*
* Somewhat common field values:
* (Updated to m2ua-12, m3ua-11, sua-10).
*/
#define UA_ECODE_INVALID_VERSION (0x01)
#define UA_ECODE_INVALID_IID (0x02)
#define UA_ECODE_UNSUPPORTED_MESSAGE_CLASS (0x03)
#define UA_ECODE_UNSUPPORTED_MESSAGE_TYPE (0x04)
#define UA_ECODE_UNSUPPORTED_TRAFFIC_MODE (0x05)
#define UA_ECODE_UNEXPECTED_MESSAGE (0x06)
#define UA_ECODE_PROTOCOL_ERROR (0x07)
#define UA_ECODE_UNSUPPORTED_IID_TYPE (0x08)
#define UA_ECODE_INVALID_STREAM_IDENTIFIER (0x09)
#define UA_ECODE_UNASSIGNED_TEI (0x0a)
#define UA_ECODE_UNRECOGNIZED_SAPI (0x0b)
#define UA_ECODE_INVALID_TEI_SAPI_COMBINATION (0x0c)
#define UA_ECODE_REFUSED_MANAGEMENT_BLOCKING (0x0d)
#define UA_ECODE_ASP_IDENTIFIER_REQUIRED (0x0e)
#define UA_ECODE_INVALID_ASP_IDENTIFIER (0x0f)
#define UA_ECODE_ASP_ACTIVE_FOR_IIDS (0x10)
#define SUA_ECODE_INVALID_ROUTING_CONTEXT (0x10)
#define UA_ECODE_INVALID_PARAMETER_VALUE (0x11)
#define UA_ECODE_PARAMETER_FIELD_ERROR (0x12)
#define UA_ECODE_UNEXPECTED_PARAMETER (0x13)
#define UA_ECODE_DESTINATION_STATUS_UNKNOWN (0x14)
#define UA_ECODE_INVALID_NETWORK_APPEARANCE (0x15)
#define UA_ECODE_MISSING_PARAMETER (0x16)
#define UA_ECODE_ROUTING_KEY_CHANGE_REFUSED (0x17)
#define UA_ECODE_INVALID_LOADSHARING_LABEL (0x18)
#define UA_ECODE_INVALID_ROUTING_CONTEXT (0x19)
#define UA_ECODE_NO_CONFIGURED_AS_FOR_ASP (0x1a)
#define UA_STATUS_AS_DOWN (0x00010001)
#define UA_STATUS_AS_INACTIVE (0x00010002)
#define UA_STATUS_AS_ACTIVE (0x00010003)
#define UA_STATUS_AS_PENDING (0x00010004)
#define UA_STATUS_AS_INSUFFICIENT_ASPS (0x00020001)
#define UA_STATUS_ALTERNATE_ASP_ACTIVE (0x00020002)
#define UA_STATUS_ASP_FAILURE (0x00020003)
#define UA_STATUS_AS_MINIMUM_ASPS (0x00020004)
#define UA_TMODE_OVERRIDE (0x1)
#define UA_TMODE_LOADSHARE (0x2)
#define UA_TMODE_BROADCAST (0x3)
#define UA_RESULT_SUCCESS (0x00)
#define UA_RESULT_FAILURE (0x01)
/*
* Stuff for generic parm decoding.
*/
typedef struct ua_parm {
union {
unsigned char *uptr; /* address pointer for strings */
caddr_t cptr; /* address pointer for strings */
uint32_t *wptr; /* word pointer for fields */
} u;
size_t num; /* occurences in messgae */
size_t len; /* length in message in bytes */
uint32_t val; /* value of first uint32_t */
} parm_t;
#define UA_PARM_BASE 0x0001
typedef struct ua_parms {
parm_t iid;
parm_t iid_range;
parm_t iid_text;
parm_t info;
parm_t apc;
parm_t rc;
parm_t diag;
parm_t iid_range1;
parm_t hbdata;
parm_t reason;
parm_t tmode;
parm_t ecode;
parm_t status;
parm_t prot_data;
parm_t rel_reason;
parm_t tei_status;
parm_t aspid;
parm_t corr_id;
#define UA_PARM_MAX 18
} ua_parms_t;
struct msg_class {
int (**farr) (queue_t *, mblk_t *);
uint last;
};
static inline int ua_find_parm(mblk_t * mp, uint32_t phdr, parm_t * parm)
{
/*
* FIXME: Write this function. Scan the message for the first
* occurence of the specified parameter.
*/
fixme(("Write this function\n"));
return (-EFAULT);
}
/*
* =========================================================================
*
* UA --> UA Peer Messages
*
* =========================================================================
* These are UA -> UA Peer send message functions. They normally take a
* queue on which to generate a bufcall if they are unsuccessful, an
* indication of the queue on which to send the message, and some of the
* extra parameter of the message as arguments. All of thsee messages
* utilize the bufcall procedures above to generate buffer calls if they
* cannot allocate the necessary buffer.
*
* Note that these messages are also appropriate for placing on SS7-U read
* queues and SS7-P write queues. The SS7-U or SS7-P read or write queue
* service routines wll translate the UA message into SS7 primitives before
* forwarding them outside the multiplexor.
*/
/*
* ERR
* -----------------------------------
*/
static inline int ua_reply_err(queue_t * q, queue_t * oq, uint ecode, uint32_t * rc, uint32_t * apc,
uint32_t * na, mblk_t * dp)
{
mblk_t *mp;
size_t dlen = dp ? min(40, dp->b_wptr - dp->b_rptr) : 0;
size_t mlen = 16 + rc ? 8 : 0 + apc ? 8 : 0 + na ? 8 : 0 + dlen ? 4 + dlen : 0;
trace();
if ((mp = ua_allocb(q, mlen, BPRI_MED))) {
mp->b_datap->db_type = M_DATA;
*((uint32_t *) mp->b_wptr)++ = UA_MGMT_ERR;
*((uint32_t *) mp->b_wptr)++ = htonl(mlen);
*((uint32_t *) mp->b_wptr)++ = UA_PARM_ECODE;
*((uint32_t *) mp->b_wptr)++ = htonl(ecode);
if (rc) {
*((uint32_t *) mp->b_wptr)++ = UA_PARM_RC;
*((uint32_t *) mp->b_wptr)++ = *rc;
}
if (apc) {
*((uint32_t *) mp->b_wptr)++ = UA_PARM_APC;
*((uint32_t *) mp->b_wptr)++ = *apc;
}
#if 0
if (na) {
*((uint32_t *) mp->b_wptr)++ = M3UA_PARM_NA;
*((uint32_t *) mp->b_wptr)++ = *na;
}
#else
(void) na;
#endif
if (dlen) {
*((uint32_t *) mp->b_wptr)++ = UA_PHDR(UA_PARM_DIAG, dlen);;
bcopy(dp->b_rptr, mp->b_wptr, dlen);
mp->b_wptr += dlen;
}
putq(oq, mp);
return (0);
}
return (-ENOBUFS);
}
/*
* NOREPLY ERR
* -----------------------------------
*/
static inline int ua_noreply_err(queue_t * q, uint ecode, uint32_t * rc, uint32_t * apc,
uint32_t * na, mblk_t * dp)
{
(void) q;
(void) ecode;
(void) rc;
(void) apc;
(void) na;
return (-EPROTO);
}
/*
* SEND NTFY
* -----------------------------------
* Sends a notification to a spcific ASP.
*/
static inline int ua_send_ntfy(queue_t * q, queue_t * oq, uint * rc, uint * aspid, uint status)
{
mblk_t *mp;
size_t mlen = 16 + (rc ? 8 : 0) + (aspid ? 8 : 0);
trace();
if ((mp = ua_allocb(q, mlen, BPRI_MED))) {
mp->b_datap->db_type = M_DATA;
*((uint32_t *) mp->b_wptr)++ = UA_MGMT_NTFY;
*((uint32_t *) mp->b_wptr)++ = __constant_htonl(mlen);
*((uint32_t *) mp->b_wptr)++ = UA_PARM_STATUS;
*((uint32_t *) mp->b_wptr)++ = htonl(status);
if (rc) {
*((uint32_t *) mp->b_wptr)++ = UA_PARM_RC;
*((uint32_t *) mp->b_wptr)++ = htonl(*rc);
}
if (aspid) {
*((uint32_t *) mp->b_wptr)++ = UA_PARM_ASPID;
*((uint32_t *) mp->b_wptr)++ = htonl(*aspid);
}
putq(oq, mp);
return (0);
}
return (-ENOBUFS);
}
/*
* NTFY AS CHANGE
* -----------------------------------
* Notifies all of the ASPs not in the ASP_DOWN (or unregistered) state with
* respect to an Application Server of an Application Server state change.
*/
static inline int ua_ntfy_as_change(queue_t * q, as_t * as, uint status)
{
int err;
gp_t *gp;
trace();
for (gp = as->gp; gp; gp = gp->xp.next) {
if ((1 << gp->state) & ~(ASM_DOWN_STATES | ASM_UREG_STATES)) {
queue_t *oq = gp->xp.xp->pp.pp->wq;
if ((err = ua_send_ntfy(q, oq, &gp->rc, NULL, status)))
return (err);
}
}
return (0);
}
/*
* SEND ASPUP REQ
* -----------------------------------
* Send an ASPUP Request to an SGP.
*
* TODO: We probably want to add the option to include UA_PARM_ASPEXT
* parameter in this message to support draft-bidulock-sigtran-aspext-00.txt.
*/
static inline int ua_send_aspup_req(queue_t * q, uint32_t aspid)
{
mblk_t *mp;
static const size_t mlen = 16;
trace();
if ((mp = ua_allocb(q, mlen, BPRI_MED))) {
mp->b_datap->db_type = M_CTL;
*((uint32_t *) mp->b_wptr)++ = UA_ASPS_ASPUP_REQ;
*((uint32_t *) mp->b_wptr)++ = __constant_htonl(mlen);
*((uint32_t *) mp->b_wptr)++ = UA_PARM_ASPID;
*((uint32_t *) mp->b_wptr)++ = htonl(aspid);
putq(q, mp);
return (0);
}
return (-ENOBUFS);
}
/*
* SEND ASPUP ACK
* -----------------------------------
* Send an ASPUP Ack to an ASP.
*
* TODO: We probably want to add the option to include UA_PARM_ASPEXT
* parameter in this message to support draft-bidulock-sigtran-aspext-00.txt.
*/
static inline int ua_send_aspup_ack(queue_t * q, uint32_t aspid)
{
mblk_t *mp;
static const size_t mlen = 16;
trace();
if ((mp = ua_allocb(q, mlen, BPRI_MED))) {
mp->b_datap->db_type = M_CTL;
*((uint32_t *) mp->b_wptr)++ = UA_ASPS_ASPUP_ACK;
*((uint32_t *) mp->b_wptr)++ = __constant_htonl(mlen);
*((uint32_t *) mp->b_wptr)++ = UA_PARM_ASPID;
*((uint32_t *) mp->b_wptr)++ = htonl(aspid);
putq(q, mp);
return (0);
}
return (-ENOBUFS);
}
/*
* SEND ASPDN REQ
* -----------------------------------
* Send an ASPDN Req to an SGP.
*/
static inline int ua_send_aspdn_req(queue_t * q)
{
mblk_t *mp;
static const size_t mlen = 8;
trace();
if ((mp = ua_allocb(q, mlen, BPRI_MED))) {
mp->b_datap->db_type = M_CTL;
*((uint32_t *) mp->b_wptr)++ = UA_ASPS_ASPDN_REQ;
*((uint32_t *) mp->b_wptr)++ = __constant_htonl(mlen);
putq(q, mp);
return (0);
}
return (-ENOBUFS);
}
/*
* SEND ASPDN ACK
* -----------------------------------
* Send an ASPDN Ack to an ASP.
*/
static inline int ua_send_aspdn_ack(queue_t * q)
{
mblk_t *mp;
static const size_t mlen = 8;
trace();
if ((mp = ua_allocb(q, mlen, BPRI_MED))) {
mp->b_datap->db_type = M_CTL;
*((uint32_t *) mp->b_wptr)++ = UA_ASPS_ASPDN_ACK;
*((uint32_t *) mp->b_wptr)++ = __constant_htonl(mlen);
putq(q, mp);
return (0);
}
return (-ENOBUFS);
}
/*
* SEND BEAT REQ
* -----------------------------------
* Send a BEAT Request to an UA peer.
*/
static inline int ua_send_hbeat_req(queue_t * q)
{
(void) q;
fixme(("SWERR: Unimplemented function\n"));
return (-EFAULT);
}
/*
* SEND HBEAT ACK
* -----------------------------------
* Send a BEAT Ack to an UA peer.
*/
static inline int ua_send_hbeat_ack(queue_t * q, caddr_t hptr, size_t hlen)
{
mblk_t *mp;
size_t mlen = 8 + hlen ? 4 + UA_PAD4(hlen) : 0;
trace();
if ((mp = ua_allocb(q, mlen, BPRI_MED))) {
mp->b_datap->db_type = M_CTL;
*((uint32_t *) mp->b_wptr)++ = UA_ASPS_HBEAT_ACK;
*((uint32_t *) mp->b_wptr)++ = htonl(mlen);
if (hlen) {
*((uint32_t *) mp->b_wptr)++ = UA_PHDR(UA_PARM_HBDATA, hlen);
bcopy(hptr, mp->b_wptr, hlen);
mp->b_wptr += hlen;
bzero(mp->b_wptr, UA_PAD4(hlen) - hlen);
mp->b_wptr += UA_PAD4(hlen) - hlen;
}
putq(q, mp);
return (0);
}
return (-ENOBUFS);
}
/*
* SEND ASPAC REQ
* -----------------------------------
* Send an ASPAC Request to an SGP.
*
* TODO: We probably want to add some optional extension paraemers to this
* message to support a number of extension drafts.
*/
static inline int ua_send_aspac_req(queue_t * q, queue_t * oq, uint32_t tmode, uint32_t rc)
{
mblk_t *mp;
static const size_t mlen = 24;
trace();
if ((mp = ua_allocb(q, mlen, BPRI_MED))) {
mp->b_datap->db_type = M_DATA;
*((uint32_t *) mp->b_wptr)++ = UA_ASPT_ASPAC_REQ;
*((uint32_t *) mp->b_wptr)++ = __constant_htonl(mlen);
*((uint32_t *) mp->b_wptr)++ = UA_PARM_TMODE;
*((uint32_t *) mp->b_wptr)++ = htonl(tmode);
*((uint32_t *) mp->b_wptr)++ = UA_PARM_RC;
*((uint32_t *) mp->b_wptr)++ = htonl(rc);
putq(oq, mp);
return (0);
}
return (-ENOBUFS);
}
/*
* SEND ASPAC ACK
* -----------------------------------
* Send an ASPAC Ack to an ASP.
*
* TODO: We probably want to add some optional extension paraemers to this
* message to support a number of extension drafts.
*/
static inline int ua_send_aspac_ack(queue_t * q, queue_t * oq, uint32_t tmode, uint32_t rc)
{
mblk_t *mp;
static const size_t mlen = 24;
trace();
if ((mp = ua_allocb(q, mlen, BPRI_MED))) {
mp->b_datap->db_type = M_DATA;
*((uint32_t *) mp->b_wptr)++ = UA_ASPT_ASPAC_ACK;
*((uint32_t *) mp->b_wptr)++ = __constant_htonl(mlen);
*((uint32_t *) mp->b_wptr)++ = UA_PARM_TMODE;
*((uint32_t *) mp->b_wptr)++ = htonl(tmode);
*((uint32_t *) mp->b_wptr)++ = UA_PARM_RC;
*((uint32_t *) mp->b_wptr)++ = htonl(rc);
putq(oq, mp);
return (0);
}
return (-ENOBUFS);
}
/*
* SEND ASPIA REQ
* -----------------------------------
* Send an ASPIA Request to an SGP.
*/
static inline int ua_send_aspia_req(queue_t * q, queue_t * oq, uint32_t rc)
{
mblk_t *mp;
static const size_t mlen = 16;
trace();
if ((mp = ua_allocb(q, mlen, BPRI_MED))) {
mp->b_datap->db_type = M_DATA;
*((uint32_t *) mp->b_wptr)++ = UA_ASPT_ASPIA_REQ;
*((uint32_t *) mp->b_wptr)++ = __constant_htonl(mlen);
*((uint32_t *) mp->b_wptr)++ = UA_PARM_RC;
*((uint32_t *) mp->b_wptr)++ = htonl(rc);
putq(oq, mp);
return (0);
}
return (-ENOBUFS);
}
/*
* SEND ASPIA ACK
* -----------------------------------
* Send an ASPIA Ack to an ASP.
*/
static inline int ua_send_aspia_ack(queue_t * q, queue_t * oq, uint32_t rc)
{
mblk_t *mp;
static const size_t mlen = 16;
trace();
if ((mp = ua_allocb(q, mlen, BPRI_MED))) {
mp->b_datap->db_type = M_DATA;
*((uint32_t *) mp->b_wptr)++ = UA_ASPT_ASPIA_ACK;
*((uint32_t *) mp->b_wptr)++ = __constant_htonl(mlen);
*((uint32_t *) mp->b_wptr)++ = UA_PARM_RC;
*((uint32_t *) mp->b_wptr)++ = htonl(rc);
putq(oq, mp);
return (0);
}
return (-ENOBUFS);
}
#if 0
/*
* SEND REG REQ
* -----------------------------------
* Send a REG Request to an SGP.
*/
static inline int ua_send_reg_req(queue_t * q, as_t * as)
{
mblk_t *mp;
mtp_addr_t *rk = as->rk;
static const size_t klen = 44;
static const size_t mlen = 8 + klen;
trace();
ensure(rk, return -EFAULT);
if ((mp = ua_allocb(q, mlen, BPRI_MED))) {
mp->b_datap->db_type = M_CTL;
*((uint32_t *) mp->b_wptr)++ = UA_RKMM_REG_REQ;
*((uint32_t *) mp->b_wptr)++ = __constant_htonl(mlen);
*((uint32_t *) mp->b_wptr)++ = UA_PHDR(M3UA_PARM_ROUTING_KEY, klen);
*((uint32_t *) mp->b_wptr)++ = M3UA_PARM_LOC_KEY_ID;
*((uint32_t *) mp->b_wptr)++ = (uint32_t) as;
*((uint32_t *) mp->b_wptr)++ = UA_PARM_TMODE;
*((uint32_t *) mp->b_wptr)++ = htonl(as->tmode);
*((uint32_t *) mp->b_wptr)++ = M3UA_PARM_DPC;
*((uint32_t *) mp->b_wptr)++ = htonl(rk->pc);
*((uint32_t *) mp->b_wptr)++ = M3UA_PARM_NA;
*((uint32_t *) mp->b_wptr)++ = htonl(rk->ni);
*((uint32_t *) mp->b_wptr)++ = UA_PHDR(M3UA_PARM_NA, 1);
*((uint32_t *) mp->b_wptr)++ = htonl(rk->si << 24);
putq(q, mp);
return (0);
}
return (-ENOBUFS);
}
#endif
/*
* SEND REG RSP
* -----------------------------------
* Send a REG Response to an ASP.
*/
static inline int ua_send_reg_rsp(queue_t * q)
{
(void) q;
fixme(("SWERR: Unimplemented function\n"));
return (-EFAULT);
}
/*
* SEND DEREG REQ
* -----------------------------------
* Send a DEREG Request to an SGP.
*/
static inline int ua_send_dereg_req(queue_t * q, uint32_t rc)
{
mblk_t *mp;
static const size_t mlen = 16;
trace();
if ((mp = ua_allocb(q, mlen, BPRI_MED))) {
mp->b_datap->db_type = M_CTL;
*((uint32_t *) mp->b_wptr)++ = UA_RKMM_DEREG_REQ;
*((uint32_t *) mp->b_wptr)++ = __constant_htonl(mlen);
*((uint32_t *) mp->b_wptr)++ = UA_PARM_RC;
*((uint32_t *) mp->b_wptr)++ = htonl(rc);
putq(q, mp);
return (0);
}
return (-ENOBUFS);
}
/*
* SEND DEREG RSP
* -----------------------------------
* Send a DEREG Response to an ASP.
*/
static inline int ua_send_dereg_rsp(queue_t * q)
{
(void) q;
fixme(("SWERR: Unimplemented function\n"));
return (-EFAULT);
}
#endif /* __UA_MSGS_H__ */
|
|||||||||||||||||||||||||||
|
OpenSS7 SS7 for the Common Man |
Home | Overview | Status | News | Documentation | Resources | About | ||||||||||||||||||||
|
© Copyright 1997-2004,OpenSS7 Corporation, All Rights Reserved. |
|||||||||||||||||||||||||||