⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sl_x100p.c

📁 OpenSS7 This the fourth public release of the OpenSS7 Master Package. See README in the release for
💻 C
📖 第 1 页 / 共 5 页
字号:
		*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 + -