📄 sl_x100p.c
字号:
*mp->b_wptr++ = err < 0 ? -err : err; ss7_oput(xp->oq, mp); return (QR_DONE); } rare(); return (-ENOBUFS);}/* * SL_PDU_IND * ----------------------------------- * We don't actually use SL_PDU_INDs, we pass along M_DATA messages. */STATIC INLINE intsl_pdu_ind(queue_t *q, struct xp *xp, mblk_t *dp){ mblk_t *mp; sl_pdu_ind_t *p; if ((mp = ss7_allocb(q, sizeof(*p), BPRI_MED))) { mp->b_datap->db_type = M_PROTO; p = (typeof(p)) mp->b_wptr; mp->b_wptr += sizeof(*p); p->sl_primitive = SL_PDU_IND; mp->b_cont = dp; ss7_oput(xp->oq, mp); return (QR_ABSORBED); } rare(); return (-ENOBUFS);}/* * SL_LINK_CONGESTED_IND * ----------------------------------- */STATIC INLINE intsl_link_congested_ind(queue_t *q, struct xp *xp, ulong cong, ulong disc){ mblk_t *mp; sl_link_cong_ind_t *p; if ((mp = ss7_allocb(q, sizeof(*p), BPRI_MED))) { mp->b_datap->db_type = M_PCPROTO; p = (typeof(p)) mp->b_wptr; mp->b_wptr += sizeof(*p); p->sl_primitive = SL_LINK_CONGESTED_IND; p->sl_cong_status = cong; p->sl_disc_status = disc; ss7_oput(xp->oq, mp); return (QR_DONE); } rare(); return (-ENOBUFS);}/* * SL_LINK_CONGESTION_CEASED_IND * ----------------------------------- */STATIC INLINE intsl_link_congestion_ceased_ind(queue_t *q, struct xp *xp, ulong cong, ulong disc){ mblk_t *mp; sl_link_cong_ceased_ind_t *p; if ((mp = ss7_allocb(q, sizeof(*p), BPRI_MED))) { mp->b_datap->db_type = M_PCPROTO; p = (typeof(p)) mp->b_wptr; mp->b_wptr += sizeof(*p); p->sl_primitive = SL_LINK_CONGESTION_CEASED_IND; p->sl_timestamp = jiffies; p->sl_cong_status = cong; p->sl_disc_status = disc; ss7_oput(xp->oq, mp); return (QR_DONE); } rare(); return (-ENOBUFS);}/* * SL_RETRIEVED_MESSAGE_IND * ----------------------------------- */STATIC INLINE intsl_retrieved_message_ind(queue_t *q, struct xp *xp, mblk_t *dp){ mblk_t *mp; sl_retrieved_msg_ind_t *p; if ((mp = ss7_allocb(q, sizeof(*p), BPRI_MED))) { mp->b_datap->db_type = M_PROTO; p = (typeof(p)) mp->b_wptr; mp->b_wptr += sizeof(*p); p->sl_primitive = SL_RETRIEVED_MESSAGE_IND; mp->b_cont = dp; ss7_oput(xp->oq, mp); return (QR_DONE); } rare(); return (-ENOBUFS);}/* * SL_RETRIEVAL_COMPLETE_IND * ----------------------------------- */STATIC INLINE intsl_retrieval_complete_ind(queue_t *q, struct xp *xp){ mblk_t *mp; sl_retrieval_comp_ind_t *p; if ((mp = ss7_allocb(q, sizeof(*p), BPRI_MED))) { mp->b_datap->db_type = M_PROTO; p = (typeof(p)) mp->b_wptr; mp->b_wptr += sizeof(*p); p->sl_primitive = SL_RETRIEVAL_COMPLETE_IND; ss7_oput(xp->oq, mp); return (QR_DONE); } rare(); return (-ENOBUFS);}/* * SL_RB_CLEARED_IND * ----------------------------------- */STATIC INLINE intsl_rb_cleared_ind(queue_t *q, struct xp *xp){ mblk_t *mp; sl_rb_cleared_ind_t *p; if ((mp = ss7_allocb(q, sizeof(*p), BPRI_MED))) { mp->b_datap->db_type = M_PROTO; p = (typeof(p)) mp->b_wptr; mp->b_wptr += sizeof(*p); p->sl_primitive = SL_RB_CLEARED_IND; ss7_oput(xp->oq, mp); return (QR_DONE); } rare(); return (-ENOBUFS);}/* * SL_BSNT_IND * ----------------------------------- */STATIC INLINE intsl_bsnt_ind(queue_t *q, struct xp *xp, ulong bsnt){ mblk_t *mp; sl_bsnt_ind_t *p; if ((mp = ss7_allocb(q, sizeof(*p), BPRI_MED))) { mp->b_datap->db_type = M_PROTO; p = (typeof(p)) mp->b_wptr; mp->b_wptr += sizeof(*p); p->sl_primitive = SL_BSNT_IND; p->sl_bsnt = bsnt; ss7_oput(xp->oq, mp); return (QR_DONE); } rare(); return (-ENOBUFS);}/* * SL_IN_SERVICE_IND * ----------------------------------- */STATIC INLINE intsl_in_service_ind(queue_t *q, struct xp *xp){ mblk_t *mp; sl_in_service_ind_t *p; if ((mp = ss7_allocb(q, sizeof(*p), BPRI_MED))) { mp->b_datap->db_type = M_PROTO; p = (typeof(p)) mp->b_wptr; mp->b_wptr += sizeof(*p); p->sl_primitive = SL_IN_SERVICE_IND; ss7_oput(xp->oq, mp); return (QR_DONE); } rare(); return (-ENOBUFS);}/* * SL_OUT_OF_SERVICE_IND * ----------------------------------- */STATIC INLINE intsl_out_of_service_ind(queue_t *q, struct xp *xp, ulong reason){ mblk_t *mp; sl_out_of_service_ind_t *p; if ((mp = ss7_allocb(q, sizeof(*p), BPRI_MED))) { mp->b_datap->db_type = M_PCPROTO; p = (typeof(p)) mp->b_wptr; mp->b_wptr += sizeof(*p); p->sl_primitive = SL_OUT_OF_SERVICE_IND; p->sl_timestamp = jiffies; p->sl_reason = reason; ss7_oput(xp->oq, mp); return (QR_DONE); } rare(); return (-ENOBUFS);}/* * SL_REMOTE_PROCESSOR_OUTAGE_IND * ----------------------------------- */STATIC INLINE intsl_remote_processor_outage_ind(queue_t *q, struct xp *xp){ mblk_t *mp; sl_rem_proc_out_ind_t *p; if ((mp = ss7_allocb(q, sizeof(*p), BPRI_MED))) { mp->b_datap->db_type = M_PCPROTO; p = (typeof(p)) mp->b_wptr; mp->b_wptr += sizeof(*p); p->sl_primitive = SL_REMOTE_PROCESSOR_OUTAGE_IND; p->sl_timestamp = jiffies; ss7_oput(xp->oq, mp); return (QR_DONE); } rare(); return (-ENOBUFS);}/* * SL_REMOTE_PROCESSOR_RECOVERED_IND * ----------------------------------- */STATIC INLINE intsl_remote_processor_recovered_ind(queue_t *q, struct xp *xp){ mblk_t *mp; sl_rem_proc_recovered_ind_t *p; if ((mp = ss7_allocb(q, sizeof(*p), BPRI_MED))) { mp->b_datap->db_type = M_PCPROTO; p = (typeof(p)) mp->b_wptr; mp->b_wptr += sizeof(*p); p->sl_primitive = SL_REMOTE_PROCESSOR_RECOVERED_IND; p->sl_timestamp = jiffies; ss7_oput(xp->oq, mp); return (QR_DONE); } rare(); return (-ENOBUFS);}/* * SL_RTB_CLEARED_IND * ----------------------------------- */STATIC INLINE intsl_rtb_cleared_ind(queue_t *q, struct xp *xp){ mblk_t *mp; sl_rtb_cleared_ind_t *p; if ((mp = ss7_allocb(q, sizeof(*p), BPRI_MED))) { mp->b_datap->db_type = M_PROTO; p = (typeof(p)) mp->b_wptr; mp->b_wptr += sizeof(*p); p->sl_primitive = SL_RTB_CLEARED_IND; ss7_oput(xp->oq, mp); return (QR_DONE); } rare(); return (-ENOBUFS);}/* * SL_RETRIEVAL_NOT_POSSIBLE_IND * ----------------------------------- */STATIC INLINE intsl_retrieval_not_possible_ind(queue_t *q, struct xp *xp){ mblk_t *mp; sl_retrieval_not_poss_ind_t *p; if ((mp = ss7_allocb(q, sizeof(*p), BPRI_MED))) { mp->b_datap->db_type = M_PROTO; p = (typeof(p)) mp->b_wptr; mp->b_wptr += sizeof(*p); p->sl_primitive = SL_RETRIEVAL_NOT_POSSIBLE_IND; ss7_oput(xp->oq, mp); return (QR_DONE); } rare(); return (-ENOBUFS);}/* * SL_BSNT_NOT_RETRIEVABLE_IND * ----------------------------------- */STATIC INLINE intsl_bsnt_not_retrievable_ind(queue_t *q, struct xp *xp, ulong bsnt){ mblk_t *mp; sl_bsnt_not_retr_ind_t *p; if ((mp = ss7_allocb(q, sizeof(*p), BPRI_MED))) { mp->b_datap->db_type = M_PROTO; p = (typeof(p)) mp->b_wptr; mp->b_wptr += sizeof(*p); p->sl_primitive = SL_BSNT_NOT_RETRIEVABLE_IND; p->sl_bsnt = bsnt; ss7_oput(xp->oq, mp); return (QR_DONE); } rare(); return (-ENOBUFS);}#if 0/* * SL_OPTMGMT_ACK * ----------------------------------- */STATIC INLINE intsl_optmgmt_ack(queue_t *q, struct xp *xp, caddr_t opt_ptr, size_t opt_len, ulong flags){ mblk_t *mp; sl_optmgmt_ack_t *p; if ((mp = ss7_allocb(q, sizeof(*p) + opt_len, BPRI_MED))) { mp->b_datap->db_type = M_PCPROTO; p = (typeof(p)) mp->b_wptr; mp->b_wptr += sizeof(*p); p->sl_primitive = SL_OPTMGMT_ACK; p->opt_length = opt_len; p->opt_offset = opt_len ? sizeof(*p) : 0; p->mgmt_flags = flags; bcopy(opt_ptr, mp->b_wptr, opt_len); mp->b_wptr += opt_len; ss7_oput(xp->oq, mp); return (QR_DONE); } rare(); return (-ENOBUFS);}/* * SL_NOTIFY_IND * ----------------------------------- */STATIC INLINE intsl_notify_ind(queue_t *q, struct xp *xp){ mblk_t *mp; sl_notify_ind_t *p; if ((mp = ss7_allocb(q, sizeof(*p), BPRI_MED))) { mp->b_datap->db_type = M_PCPROTO; p = (typeof(p)) mp->b_wptr; mp->b_wptr += sizeof(*p); p->sl_primitive = SL_NOTIFY_IND; ss7_oput(xp->oq, mp); return (QR_DONE); } rare(); return (-ENOBUFS);}#endif/* * LMI_INFO_ACK * ----------------------------------- */STATIC INLINE intlmi_info_ack(queue_t *q, struct xp *xp, caddr_t ppa_ptr, size_t ppa_len){ mblk_t *mp; lmi_info_ack_t *p; if ((mp = ss7_allocb(q, sizeof(*p) + ppa_len, BPRI_MED))) { mp->b_datap->db_type = M_PCPROTO; p = (typeof(p)) mp->b_wptr; mp->b_wptr += sizeof(*p); p->lmi_primitive = LMI_INFO_ACK; p->lmi_version = 1; p->lmi_state = xp->i_state; p->lmi_max_sdu = xp->sdt.config.m + 1 + ((xp->option.popt & SS7_POPT_XSN) ? 6 : 3); p->lmi_min_sdu = ((xp->option.popt & SS7_POPT_XSN) ? 6 : 3); p->lmi_header_len = 0; p->lmi_ppa_style = LMI_STYLE2; bcopy(ppa_ptr, mp->b_wptr, ppa_len); mp->b_wptr += ppa_len; ss7_oput(xp->oq, mp); return (QR_DONE); } rare(); return (-ENOBUFS);}/* * SDT_RC_SIGNAL_UNIT_IND * ----------------------------------- * We prefer to send M_DATA blocks. When the count is 1, we simply send * M_DATA. When the count is greater than one, we send an * SDT_RC_SIGNAL_UNIT_IND which also includes the count. This is so that * upper layer modules can collect SU statistics. * * Can't user buffer service. */STATIC INLINE intsdt_rc_signal_unit_ind(queue_t *q, struct xp *xp, mblk_t *dp, ulong count){ if (count) { if (canput(xp->oq)) { // if (count > 1) { mblk_t *mp; sdt_rc_signal_unit_ind_t *p; if ((mp = allocb(sizeof(*p), BPRI_MED))) { mp->b_datap->db_type = M_PROTO; p = (typeof(p)) mp->b_wptr; mp->b_wptr += sizeof(*p); p->sdt_primitive = SDT_RC_SIGNAL_UNIT_IND; p->sdt_count = count; mp->b_cont = dp; ss7_oput(xp->oq, mp); return (QR_ABSORBED); } rare(); return (-ENOBUFS); // } // ss7_oput(xp->oq, dp); // return (QR_ABSORBED); } rare(); return (-EBUSY); } swerr(); return (-EFAULT);}/* * SDT_RC_CONGESTION_ACCEPT_IND * ----------------------------------- */STATIC INLINE intsdt_rc_congestion_accept_ind(queue_t *q, struct xp *xp){ mblk_t *mp; sdt_rc_congestion_accept_ind_t *p; if ((mp = allocb(sizeof(*p), BPRI_MED))) { mp->b_datap->db_type = M_PCPROTO; p = (typeof(p)) mp->b_wptr; mp->b_wptr += sizeof(*p); p->sdt_primitive = SDT_RC_CONGESTION_ACCEPT_IND; ss7_oput(xp->oq, mp); return (QR_DONE); } rare(); return (-ENOBUFS);}/* * SDT_RC_CONGESTION_DISCARD_IND * ----------------------------------- */STATIC INLINE intsdt_rc_congestion_discard_ind(queue_t *q, struct xp *xp){ mblk_t *mp; sdt_rc_congestion_discard_ind_t *p; if ((mp = allocb(sizeof(*p), BPRI_MED))) { mp->b_datap->db_type = M_PCPROTO; p = (typeof(p)) mp->b_wptr; mp->b_wptr += sizeof(*p); p->sdt_primitive = SDT_RC_CONGESTION_DISCARD_IND; ss7_oput(xp->oq, mp); return (QR_DONE); } rare(); return (-ENOBUFS);}/* * SDT_RC_NO_CONGESTION_IND * ----------------------------------- */STATIC INLINE intsdt_rc_no_congestion_ind(queue_t *q, struct xp *xp){ mblk_t *mp; sdt_rc_no_congestion_ind_t *p; if ((mp = allocb(sizeof(*p), BPRI_MED))) { mp->b_datap->db_type = M_PCPROTO; p = (typeof(p)) mp->b_wptr; mp->b_wptr += sizeof(*p); p->sdt_primitive = SDT_RC_NO_CONGESTION_IND; ss7_oput(xp->oq, mp); return (QR_DONE); } rare(); return (-ENOBUFS);}/* * SDT_IAC_CORRECT_SU_IND * ----------------------------------- */STATIC INLINE intsdt_iac_correct_su_ind(queue_t *q, struct xp *xp){ if (canput(xp->oq)) { mblk_t *mp; sdt_iac_correct_su_ind_t *p; if ((mp = allocb(sizeof(*p), BPRI_MED))) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -