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/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__ */
|
|||||||||||||||||||||||||||
OpenSS7 SS7 for the Common Man |
Home | Overview | Status | News | Documentation | Resources | About | ||||||||||||||||||||
© Copyright 1997-2004,OpenSS7 Corporation, All Rights Reserved. |