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

📄 sdl_sctp.c

📁 No7信令,我需要交换类似的代码, 请店长审核,谢谢了,急着交换,谢谢
💻 C
📖 第 1 页 / 共 4 页
字号:
		return(0);	} seldom(); return(-EBUSY);	/* flow controlled */	} seldom(); return(0);		/* ignore unless enabled */	} rare(); return(-EPROTO);	/* ignore data in other states */	} rare(); return(-EFAULT);	} rare(); return(-EMSGSIZE);}/* *  N_DATACK_IND *  --------------------------------------------- */static intn_datack_ind(sdl_t *sp, mblk_t *mp){	ensure( sp , return(-EFAULT) );	ensure( mp , return(-EFAULT) );	(void)sp; (void)mp; rare(); return(0);}/* *  N_INFO_ACK *  --------------------------------------------- */static intn_info_ack(sdl_t *sp, mblk_t *mp){	ensure( sp , return(-EFAULT) );	ensure( mp , return(-EFAULT) );	(void)sp; (void)mp; rare(); return(0);}/* *  N_BIND_ACK *  --------------------------------------------- */static intn_bind_ack(sdl_t *sp, mblk_t *mp){	ensure( sp , return(-EFAULT) );	ensure( mp , return(-EFAULT) );	(void)sp; (void)mp; rare(); return(0);}/* *  N_OK_ACK *  --------------------------------------------- */static intn_ok_ack(sdl_t *sp, mblk_t *mp){	ensure( sp , return(-EFAULT) );	ensure( mp , return(-EFAULT) );	(void)sp; (void)mp; rare(); return(0);}/* *  N_ERROR_ACK *  --------------------------------------------- */static intn_error_ack(sdl_t *sp, mblk_t *mp){	ensure( sp , return(-EFAULT) );	ensure( mp , return(-EFAULT) );	(void)sp; (void)mp; rare(); return(0);}/* *  N_RESET_IND *  --------------------------------------------- */static intn_reset_ind(sdl_t *sp, mblk_t *mp){	ensure( sp , return(-EFAULT) );	ensure( mp , return(-EFAULT) );	(void)sp; (void)mp; rare(); return(0);}/* *  N_RESET_CON *  --------------------------------------------- */static intn_reset_con(sdl_t *sp, mblk_t *mp){	ensure( sp , return(-EFAULT) );	ensure( mp , return(-EFAULT) );	(void)sp; (void)mp; rare(); return(0);}/* *  ========================================================================= * *  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){	sdl_t *sp;	lmi_option_t *opt = (lmi_option_t *)arg;	ensure( q  , return(-EFAULT) );	sp = (sdl_t *)q->q_ptr;	ensure( sp , return(-EFAULT) );	ensure( arg, return(-EFAULT) );	*opt = sp->lmi_conf;	return(0);}/* *  SDL_IOCSOPTIONS *  --------------------------------------------- */static intsdl_iocsoptions(queue_t *q, int cmd, void *arg){	sdl_t *sp;	lmi_option_t *opt = (lmi_option_t *)arg;	ensure( q  , return(-EFAULT) );	sp = (sdl_t *)q->q_ptr;	ensure( sp , return(-EFAULT) );	ensure( arg, return(-EFAULT) );	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);	}	sp->lmi_conf = *opt;	return(0);}/* *  SDL_IOCGCONFIG *  --------------------------------------------- */static intsdl_iocgconfig(queue_t *q, int cmd, void *arg){	sdl_t *sp;	sdl_config_t *cnf = (sdl_config_t *)arg;	ensure( q  , return(-EFAULT) );	sp = (sdl_t *)q->q_ptr;	ensure( sp , return(-EFAULT) );	ensure( arg, return(-EFAULT) );	*cnf = sp->sdl_conf;	return(0);}/* *  SDL_IOCSCONFIG *  --------------------------------------------- */static intsdl_iocsconfig(queue_t *q, int cmd, void *arg){	sdl_t *sp;	sdl_config_t *cnf = (sdl_config_t *)arg;	ensure( q  , return(-EFAULT) );	sp = (sdl_t *)q->q_ptr;	ensure( sp , return(-EFAULT) );	ensure( arg, return(-EFAULT) );	sp->sdl_conf = *cnf;	return(0);}/* *  DEV_IOCSIFCLOCK *  --------------------------------------------- */static intdev_iocsifclock(queue_t *q, int cmd, void *arg){	sdl_t *sp;	ulong *val = (ulong *)arg;	ensure( q  , return(-EFAULT) );	sp = (sdl_t *)q->q_ptr;	ensure( sp , return(-EFAULT) );	ensure( arg, return(-EFAULT) );	switch ( *val )	{		case DEV_CLOCK_NONE:		case DEV_CLOCK_ABR:		case DEV_CLOCK_SHAPER:		case DEV_CLOCK_TICK:			sp->dev_conf.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){	sdl_t *sp;	ulong *val = (ulong *)arg;	ensure( q  , return(-EFAULT) );	sp = (sdl_t *)q->q_ptr;	ensure( sp , return(-EFAULT) );	ensure( arg, return(-EFAULT) );	*val = sp->dev_conf.ifclock;	return(0);}/* *  DEV_IOCCDISCTX *  --------------------------------------------- *  Disconnect the transmit path. */static intdev_ioccdisctx(queue_t *q, int cmd, void *arg){	ensure( q  , return(-EFAULT) );	ensure( arg, return(-EFAULT) );	return(-EOPNOTSUPP);}/* *  DEV_IOCCCONNTX *  --------------------------------------------- *  Reconnect the transmit path. */static intdev_ioccconntx(queue_t *q, int cmd, void *arg){	ensure( q  , return(-EFAULT) );	ensure( arg, return(-EFAULT) );	return(-EOPNOTSUPP);}/* *  ========================================================================= * *  STREAMS Message Handling * *  ========================================================================= *  ------------------------------------------------------------------------- * *  M_PROTO, M_PCPROTO Handling * *  ------------------------------------------------------------------------- */static intsdl_w_proto(queue_t *q, mblk_t *mp){	int rtn;	ulong prim;	sdl_t *sp;	ulong oldstate;	ensure( q,  return(-EFAULT) );	sp = (sdl_t *)q->q_ptr;	oldstate = sp->state;	ensure( sp, return(-EFAULT) );	ensure( mp, return(-EFAULT) );	switch ( (prim = *((ulong *)mp->b_rptr)) )	{		case LMI_INFO_REQ:		 rtn = lmi_info_req	   (sp, mp); break;		case LMI_ATTACH_REQ:		 rtn = lmi_attach_req	   (sp, mp); break;		case LMI_DETACH_REQ:		 rtn = lmi_detach_req	   (sp, mp); break;		case LMI_ENABLE_REQ:		 rtn = lmi_enable_req	   (sp, mp); break;		case LMI_DISABLE_REQ:		 rtn = lmi_disable_req	   (sp, mp); break;		case LMI_OPTMGMT_REQ:		 rtn = lmi_optmgmt_req	   (sp, mp); break;		case SDL_DAEDT_TRANSMISSION_REQ: rtn = sdl_daedt_xmit_req  (sp, mp); break;		case SDL_DAEDT_START_REQ:	 rtn = sdl_daedt_start_req (sp, mp); break;		case SDL_DAEDR_START_REQ:	 rtn = sdl_daedr_start_req (sp, mp); break;		default:		rtn = -EOPNOTSUPP;		  break;	}	if ( rtn < 0 ) { seldom(); sp->state = oldstate; }	return(rtn);}static intsdl_r_proto(queue_t *q, mblk_t *mp){	int rtn;	ulong prim;	sdl_t *sp;	ensure( q,  return(-EFAULT) );	sp = (sdl_t *)q->q_ptr;	ensure( sp, return(-EFAULT) );	ensure( mp, return(-EFAULT) );	switch ( (prim = *((ulong *)mp->b_rptr)) )	{		case N_CONN_IND:	rtn = n_conn_ind	(sp, mp); break;		case N_CONN_RES:	rtn = n_conn_con	(sp, mp); break;		case N_DISCON_IND:	rtn = n_discon_ind	(sp, mp); break;		case N_DATA_IND:	rtn = n_data_ind	(sp, mp); break;		case N_EXDATA_IND:	rtn = n_exdata_ind	(sp, mp); break;		case N_DATACK_IND:	rtn = n_datack_ind	(sp, mp); break;		case N_INFO_ACK:	rtn = n_info_ack	(sp, mp); break;		case N_BIND_ACK:	rtn = n_bind_ack	(sp, mp); break;		case N_OK_ACK:		rtn = n_ok_ack		(sp, mp); break;		case N_ERROR_ACK:	rtn = n_error_ack	(sp, mp); break;		case N_RESET_IND:	rtn = n_reset_ind	(sp, mp); break;		case N_RESET_CON:	rtn = n_reset_con	(sp, mp); break;		default:		rtn = -EOPNOTSUPP;		  break;	}	if ( rtn < 0 ) { seldom(); }	return(rtn);}/* *  ------------------------------------------------------------------------- * *  M_DATA Handling * *  ------------------------------------------------------------------------- */static intsdl_w_data(queue_t *q, mblk_t *mp){	int err;	sdl_t *sp;	ensure( q,  return(-EFAULT) );	sp = (sdl_t *)q->q_ptr;	ensure( sp, return(-EFAULT) );	ensure( mp, return(-EFAULT) );	if ( (err = sdl_write(sp, mp)) )		return err;	return(1);  /* absorbed mblk */}static intsdl_r_data(queue_t *q, mblk_t *mp){	int err;	sdl_t *sp;	ensure( q,  return(-EFAULT) );	sp = (sdl_t *)q->q_ptr;	ensure( sp, return(-EFAULT) );	ensure( mp, return(-EFAULT) );	if ( (err = sdl_read(sp, mp)) )		return err;	return(1);  /* absorbed mblk */}/* *  ------------------------------------------------------------------------- * *  M_CTL Handling (Events) * *  ------------------------------------------------------------------------- */#if 0static intsdl_r_ctl(queue_t *q, mblk_t *mp){	sdl_t *sp;	ensure( q,  return(-EFAULT) );	sp = (sdl_t *)q->q_ptr;	ensure( sp, return(-EFAULT) );	ensure( mp, return(-EFAULT) );	switch ( *mp->b_rptr )	{		case SDL_EVENT_TX_WAKEUP:			sdl_tx_wakeup(sp);			return(0);	}	return(-EOPNOTSUPP);}#endif/* *  ------------------------------------------------------------------------- * *  M_IOCTL Handling * *  ------------------------------------------------------------------------- */static intsdl_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;	ensure( q,  return(-EFAULT) );	ensure( mp, return(-EFAULT) );	switch ( type )	{	case __SID:		switch ( cmd )		{		default:			ptrace(("Unknown IOCTL %x\n",cmd));		case I_STR:		case I_LINK:		case I_PLINK:		case I_UNLINK:		case I_PUNLINK:			rare();			(void)lp;			ret = -EINVAL;			break;		}		ret = -EOPNOTSUPP;		break;	case SDL_IOC_MAGIC:		if ( count >= size )		{		switch ( cmd )		{		case SDL_IOCGOPTIONS:	ret = sdl_iocgoptions(q, cmd, arg); break;		case SDL_IOCSOPTIONS:	ret = sdl_iocsoptions(q, cmd, arg); break;		case SDL_IOCGCONFIG:	ret = sdl_iocgconfig (q, cmd, arg); break;		case SDL_IOCSCONFIG:	ret = sdl_iocsconfig (q, cmd, arg); break;		default:		case SDL_IOCTCONFIG:		case SDL_IOCCCONFIG:		case SDL_IOCGSTATEM:		case SDL_IOCCMRESET:		case SDL_IOCGSTATSP:		case SDL_IOCSSTATSP:		case SDL_IOCGSTATS:		case SDL_IOCCSTATS:		case SDL_IOCGNOTIFY:		case SDL_IOCSNOTIFY:		case SDL_IOCCNOTIFY:	ret = -EOPNOTSUPP; break;		}		} else ret = -EINVAL;		break;	case DEV_IOC_MAGIC:		if ( count >= size )		{		switch ( cmd )		{		case DEV_IOCSIFCLOCK:	ret = dev_iocsifclock(q, cmd, arg); break;		case DEV_IOCGIFCLOCK:	ret = dev_iocgifclock(q, cmd, arg); break;		case DEV_IOCCDISCTX:	ret = dev_ioccdisctx (q, cmd, arg); break;		case DEV_IOCCCONNTX:	ret = dev_ioccconntx (q, cmd, arg); break;		default:		case DEV_IOCCIFRESET:		case DEV_IOCGIFFLAGS:		case DEV_IOCSIFFLAGS:		case DEV_IOCGIFTYPE:		case DEV_IOCSIFTYPE:		case DEV_IOCGGRPTYPE:		case DEV_IOCSGRPTYPE:		case DEV_IOCGIFMODE:		case DEV_IOCSIFMODE:		case DEV_IOCGIFRATE:		case DEV_IOCSIFRATE:		case DEV_IOCGIFCODING:		case DEV_IOCSIFCODING:		case DEV_IOCGIFLEADS:		case DEV_IOCSIFLEADS:

⌨️ 快捷键说明

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