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

📄 m2pa_sdl.c

📁 No7信令,我需要交换类似的代码, 请店长审核,谢谢了,急着交换,谢谢
💻 C
📖 第 1 页 / 共 5 页
字号:
	} while(0); rare(); return m_error_reply(m2, err); /* XXX */}/* *  SDL_DAEDR_START_REQ *  --------------------------------------------- */static intsdl_daedr_start_req(m2pa_t *m2, mblk_t *mp){	int err;	size_t mlen = mp->b_wptr - mp->b_rptr;	sdl_daedr_start_req_t *p = (sdl_daedr_start_req_t *)mp->b_rptr;	do {	if ( mlen >= sizeof(*p) ) {	if ( m2->state == LMI_ENABLED ) {		/* enable the receiver section */		m2->flags |= M2PA_FLAG_RX_ENABLED;		m2->rx_status	= -1;		m2->count	= 0;		return(0);	} seldom(); err = LMI_OUTSTATE;	    break;  /* would place interface out of state */	} seldom(); err = LMI_PROTOSHORT;   break;  /* M_PROTO block too short	    */	} while(0); rare(); return m_error_reply(m2, err); /* XXX */}/* *  ========================================================================= * *  NPI User (M2PA) <- NPI Provider (SCTP) Primitives * *  ========================================================================= *//* *  N_CONN_IND *  --------------------------------------------- */static intn_conn_ind(m2pa_t *m2, mblk_t *mp){	(void)m2;	(void)mp;//	fixme(("Do something here...\n"));	return(0);	m2->state = LMI_DISABLED;	return lmi_error_ind(m2, LMI_DISC);}/* *  N_CONN_CON *  --------------------------------------------- */static intn_conn_con(m2pa_t *m2, mblk_t *mp){	(void)m2;	(void)mp;//	fixme(("Do something here...\n"));	return(0);	m2->state = LMI_DISABLED;	return lmi_error_ind(m2, LMI_DISC);}/* *  N_DISCON_IND *  --------------------------------------------- */static intn_discon_ind(m2pa_t *m2, mblk_t *mp){	(void)m2;	(void)mp;//	fixme(("Do something here...\n"));	return(0);	m2->state = LMI_DISABLED;	return lmi_error_ind(m2, LMI_DISC);}/* *  N_DATA_IND *  --------------------------------------------- */static intn_data_ind(m2pa_t *m2, mblk_t *mp){	int err;	mblk_t *dp;	size_t mlen = mp->b_wptr - mp->b_rptr;	N_data_ind_t *p = (N_data_ind_t *)mp->b_rptr;	ensure( mlen >= sizeof(*p), return(-EFAULT) );	if ( (dp = mp->b_cont) ) {	if ( m2->state == LMI_ENABLED ) {		if ( m2->flags & M2PA_FLAG_RX_ENABLED )		{			if ( (err = m2pa_recv_msg(m2, dp)) )				return(err);			mp->b_cont = NULL; /* absorbed data */		}		return(0);	} rare(); return(-EPROTO);	/* ignore data in other states	*/	} rare(); return(-EFAULT);}/* *  N_EXDATA_IND *  --------------------------------------------- */static intn_exdata_ind(m2pa_t *m2, mblk_t *mp){	int err;	mblk_t *dp;	size_t mlen = mp->b_wptr - mp->b_rptr;	N_exdata_ind_t *p = (N_exdata_ind_t *)mp->b_rptr;	ensure( mlen >= sizeof(*p), return(-EFAULT) );	if ( (dp = mp->b_cont) ) {	if ( m2->state == LMI_ENABLED ) {		if ( m2->flags & M2PA_FLAG_RX_ENABLED )		{			if ( (err = m2pa_recv_msg(m2, dp)) )				return(err);			mp->b_cont = NULL; /* absorbed data */		}		return(0);	} rare(); return(-EPROTO);	/* ignore data in other states */	} rare(); return(-EFAULT);}/* *  N_DATACK_IND *  --------------------------------------------- */static intn_datack_ind(m2pa_t *m2, mblk_t *mp){	int err;	size_t mlen = mp->b_wptr - mp->b_rptr;	N_datack_ind_t *p = (N_datack_ind_t *)mp->b_rptr;	ensure( mlen >= sizeof(*p), return(-EFAULT) );	if ( m2->version >= M2PA_VERSION_DRAFT4 ) {		if ( m2->sacks ) {			m2->sacks--;			return(0);		}		if ( m2->dacks ) {			uint bsnr = m2->bsnr;			m2->bsnr++;			if ( (err = m2pa_deliver(m2, M2PA_FISU, NULL)) ) {				m2->bsnr = bsnr;				return(err);			}			m2->dacks--;			return(0);		}	} seldom(); return(-EPROTO);}/* *  N_INFO_ACK *  --------------------------------------------- */static intn_info_ack(m2pa_t *m2, mblk_t *mp){	(void)m2;	(void)mp;//	fixme(("Do something here...\n"));	return(0);	m2->state = LMI_DISABLED;	return lmi_error_ind(m2, LMI_DISC);}/* *  N_BIND_ACK *  --------------------------------------------- */static intn_bind_ack(m2pa_t *m2, mblk_t *mp){	(void)m2;	(void)mp;//	fixme(("Do something here...\n"));	return(0);	m2->state = LMI_DISABLED;	return lmi_error_ind(m2, LMI_DISC);}/* *  N_OK_ACK *  --------------------------------------------- */static intn_ok_ack(m2pa_t *m2, mblk_t *mp){	(void)m2;	(void)mp;//	fixme(("Do something here...\n"));	return(0);	m2->state = LMI_DISABLED;	return lmi_error_ind(m2, LMI_DISC);}/* *  N_ERROR_ACK *  --------------------------------------------- */static intn_error_ack(m2pa_t *m2, mblk_t *mp){	(void)m2;	(void)mp;//	fixme(("Do something here...\n"));	return(0);	m2->state = LMI_DISABLED;	return lmi_error_ind(m2, LMI_DISC);}/* *  N_RESET_IND *  --------------------------------------------- */static intn_reset_ind(m2pa_t *m2, mblk_t *mp){	(void)m2;	(void)mp;//	fixme(("Do something here...\n"));	return(0);	m2->state = LMI_DISABLED;	return lmi_error_ind(m2, LMI_DISC);}/* *  N_RESET_CON *  --------------------------------------------- */static intn_reset_con(m2pa_t *m2, mblk_t *mp){	(void)m2;	(void)mp;//	fixme(("Do something here...\n"));	return(0);	m2->state = LMI_DISABLED;	return lmi_error_ind(m2, LMI_DISC);}/* *  ========================================================================= * *  IO Controls * *  ========================================================================= *  I have only implemented enough of these to get the Q.781 test programs *  running. *//* *  SDL_IOCGOPTIONS *  --------------------------------------------- */static intsdl_iocgoptions(queue_t *q, int cmd, void *arg){	m2pa_t *m2 = (m2pa_t *)q->q_ptr;	lmi_option_t *opt = (lmi_option_t *)arg;	*opt = m2->options;	return(0);}/* *  SDL_IOCSOPTIONS *  --------------------------------------------- */static intsdl_iocsoptions(queue_t *q, int cmd, void *arg){	m2pa_t *m2 = (m2pa_t *)q->q_ptr;	lmi_option_t *opt = (lmi_option_t *)arg;	switch ( opt->pvar )	{		case SS7_PVAR_ITUT_88:		case SS7_PVAR_ITUT_93:		case SS7_PVAR_ITUT_96:		case SS7_PVAR_ITUT_00:		case SS7_PVAR_ANSI_88:		case SS7_PVAR_ANSI_92:		case SS7_PVAR_ANSI_96:		case SS7_PVAR_ANSI_00:		case SS7_PVAR_ETSI_88:		case SS7_PVAR_ETSI_93:		case SS7_PVAR_ETSI_96:		case SS7_PVAR_ETSI_00:		case SS7_PVAR_JTTC_94:			break;		default:			rare(); return(-EINVAL);	}	if ( opt->popt & ~(SS7_POPT_MPLEV|SS7_POPT_HSL|SS7_POPT_XSN) )	{		rare(); return(-EINVAL);	}	m2->options = *opt;	return(0);}/* *  SDL_IOCGCONFIG *  --------------------------------------------- */static intsdl_iocgconfig(queue_t *q, int cmd, void *arg){	m2pa_t *m2 = (m2pa_t *)q->q_ptr;	sdl_config_t *cnf = (sdl_config_t *)arg;	*cnf = m2->config;	return(0);}/* *  SDL_IOCSCONFIG *  --------------------------------------------- */static intsdl_iocsconfig(queue_t *q, int cmd, void *arg){	m2pa_t *m2 = (m2pa_t *)q->q_ptr;	sdl_config_t *cnf = (sdl_config_t *)arg;	m2->config = *cnf;	return(0);}/* *  DEV_IOCSIFCLOCK *  --------------------------------------------- */static intdev_iocsifclock(queue_t *q, int cmd, void *arg){	m2pa_t *m2 = (m2pa_t *)q->q_ptr;	ulong *val = (ulong *)arg;	switch ( *val )	{		case DEV_CLOCK_NONE:		case DEV_CLOCK_ABR:		case DEV_CLOCK_SHAPER:		case DEV_CLOCK_TICK:			m2->ifclock = *val;			return(0);		default:		case DEV_CLOCK_INT:		case DEV_CLOCK_EXT:		case DEV_CLOCK_LOOP:		case DEV_CLOCK_MASTER:		case DEV_CLOCK_SLAVE:		case DEV_CLOCK_DPLL:			break;	}	return(-EINVAL);}/* *  DEV_IOCGIFCLOCK *  --------------------------------------------- */static intdev_iocgifclock(queue_t *q, int cmd, void *arg){	m2pa_t *m2 = (m2pa_t *)q->q_ptr;	ulong *val = (ulong *)arg;	*val = m2->ifclock;	return(0);}/* *  DEV_IOCCDISCTX *  --------------------------------------------- *  Disconnect the transmit path. */static intdev_ioccdisctx(queue_t *q, int cmd, void *arg){	return(-EOPNOTSUPP);}/* *  DEV_IOCCCONNTX *  --------------------------------------------- *  Reconnect the transmit path. */static intdev_ioccconntx(queue_t *q, int cmd, void *arg){	return(-EOPNOTSUPP);}/* *  ========================================================================= * *  STREAMS Message Handling * *  ========================================================================= *  ------------------------------------------------------------------------- * *  M_PROTO, M_PCPROTO Handling * *  ------------------------------------------------------------------------- */static intm2pa_w_proto(queue_t *q, mblk_t *mp){	int rtn;	ulong prim;	m2pa_t *m2 = (m2pa_t *)q->q_ptr;	ulong oldstate = m2->state;	switch ( (prim = *((ulong *)mp->b_rptr)) )	{		case LMI_INFO_REQ:		 rtn = lmi_info_req	   (m2, mp); break;		case LMI_ATTACH_REQ:		 rtn = lmi_attach_req	   (m2, mp); break;		case LMI_DETACH_REQ:		 rtn = lmi_detach_req	   (m2, mp); break;		case LMI_ENABLE_REQ:		 rtn = lmi_enable_req	   (m2, mp); break;		case LMI_DISABLE_REQ:		 rtn = lmi_disable_req	   (m2, mp); break;		case LMI_OPTMGMT_REQ:		 rtn = lmi_optmgmt_req	   (m2, mp); break;		case SDL_DAEDT_TRANSMISSION_REQ: rtn = sdl_daedt_xmit_req  (m2, mp); break;		case SDL_DAEDT_START_REQ:	 rtn = sdl_daedt_start_req (m2, mp); break;		case SDL_DAEDR_START_REQ:	 rtn = sdl_daedr_start_req (m2, mp); break;		default:		rtn = -EOPNOTSUPP;		  break;	}	if ( rtn < 0 ) { seldom(); m2->state = oldstate; }	return(rtn);}static intm2pa_r_proto(queue_t *q, mblk_t *mp){	int rtn;	ulong prim;	m2pa_t *m2 = (m2pa_t *)q->q_ptr;	switch ( (prim = *((ulong *)mp->b_rptr)) )	{		case N_CONN_IND:	rtn = n_conn_ind	(m2, mp); break;		case N_CONN_RES:	rtn = n_conn_con	(m2, mp); break;		case N_DISCON_IND:	rtn = n_discon_ind	(m2, mp); break;		case N_DATA_IND:	rtn = n_data_ind	(m2, mp); break;		case N_EXDATA_IND:	rtn = n_exdata_ind	(m2, mp); break;		case N_DATACK_IND:	rtn = n_datack_ind	(m2, mp); break;		case N_INFO_ACK:	rtn = n_info_ack	(m2, mp); break;		case N_BIND_ACK:	rtn = n_bind_ack	(m2, mp); break;		case N_OK_ACK:		rtn = n_ok_ack		(m2, mp); break;		case N_ERROR_ACK:	rtn = n_error_ack	(m2, mp); break;		case N_RESET_IND:	rtn = n_reset_ind	(m2, mp); break;		case N_RESET_CON:	rtn = n_reset_con	(m2, mp); break;		default:		rtn = -EOPNOTSUPP;		  break;	}	if ( rtn < 0 ) { seldom(); }	return(rtn);}/* *  ------------------------------------------------------------------------- * *  M_DATA Handling * *  ------------------------------------------------------------------------- */static intm2pa_w_data(queue_t *q, mblk_t *mp){	int err;	m2pa_t *m2 = (m2pa_t *)q->q_ptr;	if ( (err = sdl_write(m2, mp)) )		return(err);	return(1); /* message absorbed */}static intm2pa_r_data(queue_t *q, mblk_t *mp){	int err;	m2pa_t *m2 = (m2pa_t *)q->q_ptr;	if ( (err = m2pa_recv_msg(m2, mp)) )		return(err);	return(1);  /* message absorbed */}/* *  ------------------------------------------------------------------------- * *  M_CTL Handling (Events) * *  ------------------------------------------------------------------------- */static intm2pa_r_ctl(queue_t *q, mblk_t *mp){	m2pa_t *m2 = (m2pa_t *)q->q_ptr;	switch ( *mp->b_rptr )	{		case M2PA_EVENT_TX_SIB_TIMEOUT:			m2->flags &= ~M2PA_FLAG_TX_BUSY;			m2pa_send_status(m2, M2PA_STATUS_BUSY_ENDED);			return(0);		case M2PA_EVENT_RX_SIB_TIMEOUT:			m2pa_deliver(m2, M2PA_LSSU_SIB, NULL);			return(0);	}	return(-EOPNOTSUPP);}/* *  ------------------------------------------------------------------------- * *  M_IOCTL Handling * *  ------------------------------------------------------------------------- */static intm2pa_w_ioctl(queue_t *q, mblk_t *mp){	struct iocblk *iocp = (struct iocblk *)mp->b_rptr;	void *arg = mp->b_cont?mp->b_cont->b_rptr:NULL;	int cmd = iocp->ioc_cmd, count = iocp->ioc_count;	struct linkblk *lp = (struct linkblk *)arg;	int ret	    = -EINVAL;	int type    = _IOC_TYPE(cmd);	int nr	    = _IOC_NR(cmd);	int size    = _IOC_SIZE(cmd);	(void)nr;	switch ( type )

⌨️ 快捷键说明

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