OpenSS7
SS7 for the
Common Man

© Copyright 1997-2004,OpenSS7 Corporation, All Rights Reserved.
Last modified:

Home Overview Status News Documentation Resources About
   
 Overview
 Status
 News
 Documentation
 Resources
 About

   
Home Index Prev Next More Download Info FAQ Mail   Home -> Resources -> Browse Source -> strss7/drivers/sscop/sscop_send.h


File /code/strss7/drivers/sscop/sscop_send.h



#ifndef __SSCOP_SEND_H__
#define __SSCOP_SEND_H__

#ident "@(#) $RCSfile: sscop_send.h,v $ $Name:  $($Revision: 0.8.2.1 $) $Date: 2002/10/18 02:37:53 $"

/*
 *  =========================================================================
 *
 *  SSCOP --> SSCOP Peer Primitives (Send Messages)
 *
 *  =========================================================================
 */
/*
 *  SEND BGN.request N(W), N(SQ), N(S), SSCOP-UU
 *  -------------------------------------------------------------------------
 */
static __inline__ int sscop_send_bgn(sp, uu_ptr, uu_len)
	const struct sscop *sp;
	const caddr_t uu_ptr;
	const size_t uu_len;
{
	mblk_t *mp;
	const size_t plen = (4 - (uu_len & 0x3)) & 0x3;
	const size_t blen = 4 + uu_len + plen;
	const uint32_t ptype = (plen << 6) | SSCOP_BGN;
	if ((mp = allocb(blen, BPRI_MED))) {
		mp->b_datap->db_type = M_DATA;
		bcopy(uu_ptr, mp->b_wptr, uu_len);
		mp->b_wptr += uu_len;
		bzero(mp->b_wptr, plen);
		mp->b_wptr += plen;
		*((uint32_t *) mp->b_wptr)++ = (((plen << 6) | SSCOP_BGN) << 24) | ns;
		sscop_send_msg(sp, mp);
		return (0);
	}
	return (-ENOBUFS);
}

/*
 *  SEND BGAK.request N(W), N(SQ), N(S), SSCOP-UU
 *  -------------------------------------------------------------------------
 */
static __inline__ int sscop_send_bgak(sp, uu_ptr, uu_len)
	const struct sscop *sp;
	const caddr_t uu_ptr;
	const size_t uu_len;
{
	mblk_t *mp;
	struct sscop_bgak *m;
	const size_t plen = (4 - (uu_len & 0x3)) & 0x3;
	const size_t blen = sizeof(*m) + uu_len + plen;
	const u8 ptype = (plen << 6) | SSCOP_BGAK;
	if ((mp = allocb(blen, BPRI_MED))) {
		mp->b_datap->db_type = M_DATA;
		bcopy(uu_ptr, mp->b_wptr, uu_len);
		mp->b_wptr += uu_len;
		bzero(mp->b_wptr, plen);
		mp->b_wptr += plen;

		m = (struct sscop_bgak *) mp->b_wptr;
		/* 
		 *  TODO: more
		 */
		mp->b_wptr += sizeof(*m);

		sscop_send_msg(sp, mp);
		return (0);
	}
	return (-ENOBUFS);
}

/*
 *  SEND BGREJ.request SSCOP-UU
 *  -------------------------------------------------------------------------
 */
static __inline__ int sscop_send_bgrej(sp, uu_ptr, uu_len)
	const struct sscop *sp;
	const caddr_t uu_ptr;
	const size_t uu_len;
{
	mblk_t *mp;
	struct sscop_bgrej *m;
	const size_t plen = (4 - (uu_len & 0x3)) & 0x3;
	const size_t blen = sizeof(*m) + uu_len + plen;
	const u8 ptype = (plen << 6) | SSCOP_BGREJ;
	if ((mp = allocb(blen, BPRI_MED))) {
		mp->b_datap->db_type = M_DATA;
		bcopy(uu_ptr, mp->b_wptr, uu_len);
		mp->b_wptr += uu_len;
		bzero(mp->b_wptr, plen);
		mp->b_wptr += plen;
		m = (struct sscop_bgrej *) mp->b_wptr;
		/* 
		 *  TODO: more
		 */
		mp->b_wptr += sizeof(*m);
		sscop_send_msg(sp, mp);
		return (0);
	}
	return (-ENOBUFS);
}

/*
 *  SEND END.request [src] SSCOP-UU
 *  -------------------------------------------------------------------------
 */
static __inline__ int sscop_send_end(sp, uu_ptr, uu_len)
	const struct sscop *sp;
	const caddr_t uu_ptr;
	const size_t uu_len;
{
	mblk_t *mp;
	struct sscop_end *m;
	const size_t plen = (4 - (uu_len & 0x3)) & 0x3;
	const size_t blen = sizeof(*m) + uu_len + plen;
	const u8 ptype = (plen << 6) | SSCOP_END;
	if ((mp = allocb(blen, BPRI_MED))) {
		mp->b_datap->db_type = M_DATA;
		bcopy(uu_ptr, mp->b_wptr, uu_len);
		mp->b_wptr += uu_len;
		bzero(mp->b_wptr, plen);
		mp->b_wptr += plen;
		m = (struct sscop_end *) mp->b_wptr;
		/* 
		 *  TODO: more
		 */
		mp->b_wptr += sizeof(*m);
		sscop_send_msg(sp, mp);
		return (0);
	}
	return (-ENOBUFS);
}

/*
 *  SEND ENDAK.request ()
 *  -------------------------------------------------------------------------
 */
static __inline__ int sscop_send_endak(sp, uu_ptr, uu_len)
	const struct sscop *sp;
	const caddr_t uu_ptr;
	const size_t uu_len;
{
	mblk_t *mp;
	struct sscop_endak *m;
	const size_t plen = (4 - (uu_len & 0x3)) & 0x3;
	const size_t blen = sizeof(*m) + uu_len + plen;
	const u8 ptype = (plen << 6) | SSCOP_ENDAK;
	if ((mp = allocb(blen, BPRI_MED))) {
		mp->b_datap->db_type = M_DATA;
		bcopy(uu_ptr, mp->b_wptr, uu_len);
		mp->b_wptr += uu_len;
		bzero(mp->b_wptr, plen);
		mp->b_wptr += plen;
		m = (struct sscop_endak *) mp->b_wptr;
		/* 
		 *  TODO: more
		 */
		mp->b_wptr += sizeof(*m);
		sscop_send_msg(sp, mp);
		return (0);
	}
	return (-ENOBUFS);
}

/*
 *  SEND RS.request N(W), N(SQ), N(S), SSCOP-UU
 *  -------------------------------------------------------------------------
 */
static __inline__ int sscop_send_rs(sp, uu_ptr, uu_len)
	const struct sscop *sp;
	const caddr_t uu_ptr;
	const size_t uu_len;
{
	mblk_t *mp;
	struct sscop_rs *m;
	const size_t plen = (4 - (uu_len & 0x3)) & 0x3;
	const size_t blen = sizeof(*m) + uu_len + plen;
	const u8 ptype = (plen << 6) | SSCOP_RS;
	if ((mp = allocb(blen, BPRI_MED))) {
		mp->b_datap->db_type = M_DATA;
		bcopy(uu_ptr, mp->b_wptr, uu_len);
		mp->b_wptr += uu_len;
		bzero(mp->b_wptr, plen);
		mp->b_wptr += plen;
		m = (struct sscop_rs *) mp->b_wptr;
		/* 
		 *  TODO: more
		 */
		mp->b_wptr += sizeof(*m);
		sscop_send_msg(sp, mp);
		return (0);
	}
	return (-ENOBUFS);
}

/*
 *  SEND RSAK.request N(W), N(SQ), N(S)
 *  -------------------------------------------------------------------------
 */
static __inline__ int sscop_send_rsak(sp, uu_ptr, uu_len)
	const struct sscop *sp;
	const caddr_t uu_ptr;
	const size_t uu_len;
{
	mblk_t *mp;
	struct sscop_rsak *m;
	const size_t plen = (4 - (uu_len & 0x3)) & 0x3;
	const size_t blen = sizeof(*m) + uu_len + plen;
	const u8 ptype = (plen << 6) | SSCOP_RSAK;
	if ((mp = allocb(blen, BPRI_MED))) {
		mp->b_datap->db_type = M_DATA;
		bcopy(uu_ptr, mp->b_wptr, uu_len);
		mp->b_wptr += uu_len;
		bzero(mp->b_wptr, plen);
		mp->b_wptr += plen;
		m = (struct sscop_rsak *) mp->b_wptr;
		/* 
		 *  TODO: more
		 */
		mp->b_wptr += sizeof(*m);
		sscop_send_msg(sp, mp);
		return (0);
	}
	return (-ENOBUFS);
}

/*
 *  SEND ER.request N(W), N(SQ), N(S)
 *  -------------------------------------------------------------------------
 */
static __inline__ int sscop_send_er(sp, uu_ptr, uu_len)
	const struct sscop *sp;
	const caddr_t uu_ptr;
	const size_t uu_len;
{
	mblk_t *mp;
	struct sscop_er *m;
	const size_t plen = (4 - (uu_len & 0x3)) & 0x3;
	const size_t blen = sizeof(*m) + uu_len + plen;
	const u8 ptype = (plen << 6) | SSCOP_ER;
	if ((mp = allocb(blen, BPRI_MED))) {
		mp->b_datap->db_type = M_DATA;
		bcopy(uu_ptr, mp->b_wptr, uu_len);
		mp->b_wptr += uu_len;
		bzero(mp->b_wptr, plen);
		mp->b_wptr += plen;
		m = (struct sscop_er *) mp->b_wptr;
		/* 
		 *  TODO: more
		 */
		mp->b_wptr += sizeof(*m);
		sscop_send_msg(sp, mp);
		return (0);
	}
	return (-ENOBUFS);
}

/*
 *  SEND ERAK.request N(W), N(SQ), N(S)
 *  -------------------------------------------------------------------------
 */
static __inline__ int sscop_send_erak(sp, uu_ptr, uu_len)
	const struct sscop *sp;
	const caddr_t uu_ptr;
	const size_t uu_len;
{
	mblk_t *mp;
	struct sscop_erak *m;
	const size_t plen = (4 - (uu_len & 0x3)) & 0x3;
	const size_t blen = sizeof(*m) + uu_len + plen;
	const u8 ptype = (plen << 6) | SSCOP_ERAK;
	if ((mp = allocb(blen, BPRI_MED))) {
		mp->b_datap->db_type = M_DATA;
		bcopy(uu_ptr, mp->b_wptr, uu_len);
		mp->b_wptr += uu_len;
		bzero(mp->b_wptr, plen);
		mp->b_wptr += plen;
		m = (struct sscop_erak *) mp->b_wptr;
		/* 
		 *  TODO: more
		 */
		mp->b_wptr += sizeof(*m);
		sscop_send_msg(sp, mp);
		return (0);
	}
	return (-ENOBUFS);
}

/*
 *  SEND SD.request N(S), OOS, MU
 *  -------------------------------------------------------------------------
 */
static __inline__ int sscop_send_sd(sp, uu_ptr, uu_len)
	const struct sscop *sp;
	const caddr_t uu_ptr;
	const size_t uu_len;
{
	mblk_t *mp;
	const size_t plen = (4 - (uu_len & 0x3)) & 0x3;
	const size_t blen = 4 + uu_len + plen;
	const u8 ptype = (plen << 6) | SSCOP_SD;
	if ((mp = allocb(blen, BPRI_MED))) {
		mp->b_datap->db_type = M_DATA;
		bcopy(uu_ptr, mp->b_wptr, uu_len);
		mp->b_wptr += uu_len;
		bzero(mp->b_wptr, plen);
		mp->b_wptr += plen;
		*((uint32_t *) mp->b_wptr)++ =
		    htonl((((plen << 6) | SSCOP_SD) << 24) | (sp->ns & 0xffffff));
		sscop_send_msg(sp, mp);
		return (0);
	}
	return (-ENOBUFS);
}

/*
 *  SEND POLL.request N(S), N(PS), N(SQ)
 *  -------------------------------------------------------------------------
 */
static __inline__ int sscop_send_poll(sp)
	const struct sscop *sp;
{
	mblk_t *mp;
	static const size_t blen = 8;
	if ((mp = allocb(blen, BPRI_MED))) {
		mp->b_datap->db_type = M_DATA;
		*((uint32_t *) mp->b_wptr)++ = htonl(sp->nps & 0xffffff);
		*((uint32_t *) mp->b_wptr)++ = htonl((SSCOP_POLL << 24) | (sp->ns & 0xffffff));
		sscop_send_msg(sp, mp);
		return (0);
	}
	return (-ENOBUFS);
}

/*
 *  SEND STAT.indicaiton N(R), N(MR), N(PS), N(SQ), N(SS), [list]
 *  -------------------------------------------------------------------------
 */
static __inline__ int sscop_send_stat(sp)
	const struct sscop *sp;
{
	mblk_t *mp;
	const size_t blen = 12 + 4 * lnum;
	if ((mp = allocb(blen, BPRI_MED))) {
		int i;
		mp->b_datap->db_type = M_DATA;
		for (i = 0; i < lnum; i++)
			*((uint32_t *) mp->b_wptr)++ = htonl(sp->le[i] & 0xffffff);
		*((uint32_t *) mp->b_wptr)++ = htonl(sp->nps & 0xffffff);
		*((uint32_t *) mp->b_wptr)++ = htonl(sp->nmr & 0xffffff);
		*((uint32_t *) mp->b_wptr)++ = htonl((SSCOP_STAT << 24) | (sp->nr & 0xffffff));
		sscop_send_msg(sp, mp);
		return (0);
	}
	return (-ENOBUFS);
}

/*
 *  SEND USTAT.request N(R), N(MR), N(PS), N(SQ), N(SS), [list]
 *  -------------------------------------------------------------------------
 */
static __inline__ int sscop_send_ustat(sp)
	const struct sscop *sp;
{
	mblk_t *mp;
	static const size_t blen = 16;
	if ((mp = allocb(blen, BPRI_MED))) {
		mp->b_datap->db_type = M_DATA;
		bzero(mp->b_wptr, plen);
		mp->b_wptr += plen;
		*((uint32_t *) mp->b_wptr)++ = htonl(sp->le[0] & 0xffffff);
		*((uint32_t *) mp->b_wptr)++ = htonl(sp->le[1] & 0xffffff);
		*((uint32_t *) mp->b_wptr)++ = htonl(sp->nmr & 0xffffff);
		*((uint32_t *) mp->b_wptr)++ = htonl((SSCOP_USTAT << 24) | (sp->nr & 0xffffff));
		m = (struct sscop_ustat *) mp->b_wptr;
		/* 
		 *  TODO: more
		 */
		mp->b_wptr += sizeof(*m);
		sscop_send_msg(sp, mp);
		return (0);
	}
	return (-ENOBUFS);
}

/*
 *  SEND UD.request MU
 *  -------------------------------------------------------------------------
 */
static __inline__ int sscop_send_ud(sp, uu_ptr, uu_len)
	const struct sscop *sp;
	const caddr_t uu_ptr;
	const size_t uu_len;
{
	mblk_t *mp;
	struct sscop_ud *m;
	const size_t plen = (4 - (uu_len & 0x3)) & 0x3;
	const size_t blen = sizeof(*m) + uu_len + plen;
	const u8 ptype = (plen << 6) | SSCOP_UD;
	if ((mp = allocb(blen, BPRI_MED))) {
		mp->b_datap->db_type = M_DATA;
		bcopy(uu_ptr, mp->b_wptr, uu_len);
		mp->b_wptr += uu_len;
		bzero(mp->b_wptr, plen);
		mp->b_wptr += plen;
		m = (struct sscop_ud *) mp->b_wptr;
		/* 
		 *  TODO: more
		 */
		mp->b_wptr += sizeof(*m);
		sscop_send_msg(sp, mp);
		return (0);
	}
	return (-ENOBUFS);
}

/*
 *  SEND MD.request MU
 *  -------------------------------------------------------------------------
 */
static __inline__ int sscop_send_md(sp, uu_ptr, uu_len)
	const struct sscop *sp;
	const caddr_t uu_ptr;
	const size_t uu_len;
{
	mblk_t *mp;
	struct sscop_md *m;
	const size_t plen = (4 - (uu_len & 0x3)) & 0x3;
	const size_t blen = sizeof(*m) + uu_len + plen;
	const u8 ptype = (plen << 6) | SSCOP_MD;
	if ((mp = allocb(blen, BPRI_MED))) {
		mp->b_datap->db_type = M_DATA;
		bcopy(uu_ptr, mp->b_wptr, uu_len);
		mp->b_wptr += uu_len;
		bzero(mp->b_wptr, plen);
		mp->b_wptr += plen;
		m = (struct sscop_md *) mp->b_wptr;
		/* 
		 *  TODO: more
		 */
		mp->b_wptr += sizeof(*m);
		sscop_send_msg(sp, mp);
		return (0);
	}
	return (-ENOBUFS);
}

#endif				/* __SSCOP_SEND_H__ */


Home Index Prev Next More Download Info FAQ Mail   Home -> Resources -> Browse Source -> strss7/drivers/sscop/sscop_send.h

OpenSS7
SS7 for the
Common Man
Home Overview Status News Documentation Resources About

© Copyright 1997-2004,OpenSS7 Corporation, All Rights Reserved.
Last modified: