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

📄 sdt.c

📁 OpenSS7 This the fourth public release of the OpenSS7 Master Package. See README in the release for
💻 C
📖 第 1 页 / 共 5 页
字号:
 *  LMI_EVENT_IND *  ----------------------------------- */STATIC INLINE intlmi_event_ind(queue_t *q, struct sdt *s, ulong oid, ulong level, caddr_t inf_ptr, size_t inf_len){	mblk_t *mp;	lmi_event_ind_t *p;	if ((mp = ss7_allocb(q, sizeof(*p) + inf_len, BPRI_MED))) {		mp->b_datap->db_type = M_PROTO;		p = (typeof(p)) mp->b_wptr;		mp->b_wptr += sizeof(*p);		p->lmi_primitive = LMI_EVENT_IND;		p->lmi_objectid = oid;		p->lmi_timestamp = jiffies;		p->lmi_severity = level;		bcopy(inf_ptr, mp->b_wptr, inf_len);		mp->b_wptr += inf_len;		printd(("%s: %p: <- LMI_EVENT_IND\n", MOD_NAME, s));		putnext(s->oq, mp);		return (QR_DONE);	}	rare();	return (-ENOBUFS);}#endif/* *  SDT_RC_SIGNAL_UNIT_IND *  ----------------------------------- */STATIC INLINE intsdt_rc_signal_unit_ind(queue_t *q, struct sdt *s, mblk_t *dp, ulong count){	if (count == 1) {		printd(("%s: %p: <- M_DATA [%d]\n", MOD_NAME, s, msgdsize(dp)));		putnext(s->oq, dp);		return (QR_DONE);	} else if (count > 1) {		mblk_t *mp;		sdt_rc_signal_unit_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->sdt_primitive = SDT_RC_SIGNAL_UNIT_IND;			p->sdt_count = count;			mp->b_cont = dp;			printd(("%s: %p: <- SDT_RC_SIGNAL_UNIT_IND [%lu x %d]\n", MOD_NAME, s,				count, msgdsize(dp)));			putnext(s->oq, mp);			return (QR_DONE);		}		rare();		return (-ENOBUFS);	}	swerr();	return (-EFAULT);}/* *  SDT_RC_CONGESTION_ACCEPT_IND *  ----------------------------------- */STATIC INLINE intsdt_rc_congestion_accept_ind(queue_t *q, struct sdt *s){	mblk_t *mp;	sdt_rc_congestion_accept_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->sdt_primitive = SDT_RC_CONGESTION_ACCEPT_IND;		printd(("%s: %p: <- SDT_RC_CONGESTION_ACCEPT_IND\n", MOD_NAME, s));		putnext(s->oq, mp);		return (QR_DONE);	}	rare();	return (-ENOBUFS);}#if 0/* *  SDT_RC_CONGESTION_DISCARD_IND *  ----------------------------------- */STATIC INLINE intsdt_rc_congestion_discard_ind(queue_t *q, struct sdt *s){	mblk_t *mp;	sdt_rc_congestion_discard_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->sdt_primitive = SDT_RC_CONGESTION_DISCARD_IND;		printd(("%s: %p: <- SDT_RC_CONGESTION_DISCARD_IND\n", MOD_NAME, s));		putnext(s->oq, mp);		return (QR_DONE);	}	rare();	return (-ENOBUFS);}#endif/* *  SDT_RC_NO_CONGESTION_IND *  ----------------------------------- */STATIC INLINE intsdt_rc_no_congestion_ind(queue_t *q, struct sdt *s){	mblk_t *mp;	sdt_rc_no_congestion_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->sdt_primitive = SDT_RC_NO_CONGESTION_IND;		printd(("%s: %p: <- SDT_RC_NO_CONGESTION_IND\n", MOD_NAME, s));		putnext(s->oq, mp);		return (QR_DONE);	}	rare();	return (-ENOBUFS);}/* *  SDT_IAC_CORRECT_SU_IND *  ----------------------------------- */STATIC INLINE intsdt_iac_correct_su_ind(queue_t *q, struct sdt *s){	mblk_t *mp;	sdt_iac_correct_su_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->sdt_primitive = SDT_IAC_CORRECT_SU_IND;		printd(("%s: %p: <- SDT_IAC_CORRECT_SU_IND\n", MOD_NAME, s));		putnext(s->oq, mp);		return (QR_DONE);	}	rare();	return (-ENOBUFS);}/* *  SDT_IAC_ABORT_PROVING_IND *  ----------------------------------- */STATIC INLINE intsdt_iac_abort_proving_ind(queue_t *q, struct sdt *s){	mblk_t *mp;	sdt_iac_abort_proving_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->sdt_primitive = SDT_IAC_ABORT_PROVING_IND;		printd(("%s: %p: <- SDT_IAC_ABORT_PROVING_IND\n", MOD_NAME, s));		putnext(s->oq, mp);		return (QR_DONE);	}	rare();	return (-ENOBUFS);}/* *  SDT_LSC_LINK_FAILURE_IND *  ----------------------------------- */STATIC INLINE intsdt_lsc_link_failure_ind(queue_t *q, struct sdt *s){	mblk_t *mp;	sdt_lsc_link_failure_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->sdt_primitive = SDT_LSC_LINK_FAILURE_IND;		printd(("%s: %p: <- SDT_LSC_LINK_FAILURE_IND\n", MOD_NAME, s));		putnext(s->oq, mp);		return (QR_DONE);	}	rare();	return (-ENOBUFS);}#if 0/*   We let back-enabling do this for us  *//* *  SDT_TXC_TRANSMISSION_REQUEST_IND *  ----------------------------------- */STATIC INLINE intsdt_txc_transmission_request_ind(queue_t *q, struct sdt *s){	mblk_t *mp;	sdt_txc_transmission_request_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->sdt_primitive = SDT_TXC_TRANSMISSION_REQUEST_IND;		printd(("%s: %p: <- SDT_TXC_TRANSMISSION_REQUEST_IND\n", MOD_NAME, s));		putnext(s->oq, mp);		return (QR_DONE);	}	rare();	return (-ENOBUFS);}#endif/* *  ======================================================================== * *  PRIMITIVES Sent Downstream * *  ======================================================================== *//* *  LMI_INFO_REQ *  ----------------------------------- */STATIC INLINE intsdl_info_req(queue_t *q, struct sdt *s){	mblk_t *mp;	lmi_info_req_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->lmi_primitive = LMI_INFO_REQ;		printd(("%s: %p: LMI_INFO_REQ ->\n", MOD_NAME, s));		putnext(s->iq, mp);		return (QR_DONE);	}	rare();	return (-ENOBUFS);}#if 0/*   We don't need any of these because these are just passed along.  *//* *  LMI_ATTACH_REQ *  ----------------------------------- */STATIC INLINE intsdl_attach_req(queue_t *q, struct sdt *s, caddr_t ppa_ptr, size_t ppa_len){	mblk_t *mp;	lmi_attach_req_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_ATTACH_REQ;		bcopy(ppa_ptr, mp->b_wptr, ppa_len);		mp->b_wptr += ppa_len;		printd(("%s: %p: LMI_ATTACH_REQ ->\n", MOD_NAME, s));		putnext(s->iq, mp);		return (QR_DONE);	}	rare();	return (-ENOBUFS);}/* *  LMI_DETACH_REQ *  ----------------------------------- */STATIC INLINE intsdl_detach_req(queue_t *q, struct sdt *s){	mblk_t *mp;	lmi_detach_req_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->lmi_primitive = LMI_DETACH_REQ;		printd(("%s: %p: LMI_DETACH_REQ ->\n", MOD_NAME, s));		putnext(s->iq, mp);		return (QR_DONE);	}	rare();	return (-ENOBUFS);}/* *  LMI_ENABLE_REQ *  ----------------------------------- */STATIC INLINE intsdl_enable_req(queue_t *q, struct sdt *s){	mblk_t *mp;	lmi_enable_req_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->lmi_primitive = LMI_ENABLE_REQ;		printd(("%s: %p: LMI_ENABLE_REQ ->\n", MOD_NAME, s));		putnext(s->iq, mp);		return (QR_DONE);	}	rare();	return (-ENOBUFS);}/* *  LMI_DISABLE_REQ *  ----------------------------------- */STATIC INLINE intsdl_disable_req(queue_t *q, struct sdt *s){	mblk_t *mp;	lmi_disable_req_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->lmi_primitive = LMI_DISABLE_REQ;		printd(("%s: %p: LMI_DISABLE_REQ ->\n", MOD_NAME, s));		putnext(s->iq, mp);		return (QR_DONE);	}	rare();	return (-ENOBUFS);}/* *  LMI_OPTMGMT_REQ *  ----------------------------------- */STATIC INLINE intsdl_optmgmt_req(queue_t *q, struct sdt *s, long flags, caddr_t opt_ptr, size_t opt_len){	mblk_t *mp;	lmi_optmgmt_req_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 = (typeof(p)) mp->b_wptr;		mp->b_wptr += sizeof(*p);		p->lmi_primitive = LMI_OPTMGMT_REQ;		p->lmi_opt_length = opt_len;		p->lmi_opt_offset = opt_len ? sizeof(*p) : 0;		p->lmi_mgmt_flags = flags;		bcopy(opt_ptr, mp->b_wptr, opt_len);		mp->b_wptr += opt_len;		printd(("%s: %p: LMI_OPTMGMT_REQ ->\n", MOD_NAME, s));		putnext(s->iq, mp);		return (QR_DONE);	}	rare();	return (-ENOBUFS);}#endif#if 0/* *  SDL_BITS_FOR_TRANSMISSION_REQ *  ----------------------------------- *  This is the non-prefferred method for sending transmitted bits.  The *  preferred method is to send just an M_DATA block. */STATIC INLINE intsdl_bits_for_transmission_req(queue_t *q, struct sdt *s, mblk_t *dp){	mblk_t *mp;	sdl_bits_for_transmission_req_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->sdl_primitive = SDL_BITS_FOR_TRANSMISSION_REQ;		mp->b_cont = dp;		printd(("%s: %p: SDL_BITS_FOR_TRANSMISSION [%d] ->\n", MOD_NAME, s, msgdsize(dp)));		putnext(s->iq, mp);		return (QR_DONE);	}	rare();	return (-ENOBUFS);}/* *  SDL_CONNECT_REQ *  ----------------------------------- */STATIC INLINE intsdl_connect_req(queue_t *q, struct sdt *s){	mblk_t *mp;	sdl_connect_req_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->sdl_primitive = SDL_CONNECT_REQ;		printd(("%s: %p: SDL_CONNECT_REQ ->\n", MOD_NAME, s));		putnext(s->iq, mp);		return (QR_DONE);	}	rare();	return (-ENOBUFS);}/* *  SDL_DISCONNECT_REQ *  ----------------------------------- */STATIC INLINE intsdl_disconnect_req(queue_t *q, struct sdt *s){	mblk_t *mp;	sdl_disconnect_req_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->sdl_primitive = SDL_DISCONNECT_REQ;		printd(("%s: %p: SDL_DISCONNECT_REQ ->\n", MOD_NAME, s));		putnext(s->iq, mp);		return (QR_DONE);	}	rare();	return (-ENOBUFS);}#endif/* *  ========================================================================= * *  PROTOCOL STATE MACHINE FUNCTIONS * *  ========================================================================= *//* *  ------------------------------------------------------------------------- * *  Timers * *  ------------------------------------------------------------------------- */enum { tall, t8 };SS7_DECLARE_TIMER(MOD_NAME, sdt, t8, config);STATIC INLINE void__sdt_timer_stop(struct sdt *s, const uint t){	int single = 1;	switch (t) {	case tall:		single = 0;		/* 		   fall through */	case t8:		sdt_stop_timer_t8(s);		if (single)			break;		/* 		   fall through */		break;	default:		swerr();		break;	}}STATIC INLINE voidsdt_timer_stop(struct sdt *s, const uint t){	psw_t flags;	spin_lock_irqsave(&s->lock, flags);	{		__sdt_timer_stop(s, t);	}	spin_unlock_irqrestore(&s->lock, flags);}STATIC INLINE voidsdt_timer_start(struct sdt *s, const uint t){	psw_t flags;	spin_lock_irqsave(&s->lock, flags);	{		__sdt_timer_stop(s, t);		switch (t) {		case t8:			sdt_start_timer_t8(s);			break;		default:			swerr();			break;		}	}	spin_unlock_irqrestore(&s->lock, flags);}/*

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -