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

📄 spm.c

📁 OpenSS7 This the fourth public release of the OpenSS7 Master Package. See README in the release for
💻 C
📖 第 1 页 / 共 3 页
字号:
{	mblk_t *mp;	lmi_disable_con_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_CON;		p->lmi_state = state;		qreply(q, mp);		return (QR_DONE);	}	rare();	return (-ENOBUFS);}/* *  LMI_OPTMGMT_ACK *  ----------------------------------- */#if 0STATIC INLINE intlmi_optmgmt_ack(queue_t *q, ulong flags, caddr_t opt_ptr, size_t opt_len){	mblk_t *mp;	lmi_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)++;		p->lmi_primitive = LMI_OPTMGMT_ACK;		p->lmi_opt_length = opt_len;		p->lmi_opt_offset = opt_len ? sizeof(*p) : 0;		p->lmi_flags = flags;		bcopy(opt_ptr, mp->b_wptr, opt_len);		mp->b_wptr += opt_len;		qreply(q, mp);		return (QR_DONE);	}	rare();	return (-ENOBUFS);}/* *  LMI_ERROR_IND *  ----------------------------------- */STATIC INLINE intlmi_error_ind(queue_t *q, long state, long error, long reason){	mblk_t *mp;	lmi_error_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->lmi_primitive = LMI_ERROR_IND;		p->lmi_errno = error;		p->lmi_reason = reason;		p->lmi_state = state;		qreply(q, mp);		return (QR_DONE);	}	rare();	return (-ENOBUFS);}/* *  LMI_STATS_IND *  ----------------------------------- */STATIC INLINE intlmi_stats_ind(queue_t *q){	mblk_t *mp;	lmi_stats_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->lmi_primitive = LMI_STATS_IND;		p->lmi_interval = 0;		p->lmi_timestamp = jiffies;		qreply(q, mp);		return (QR_DONE);	}	rare();	return (-ENOBUFS);}/* *  LMI_EVENT_IND *  ----------------------------------- */STATIC INLINE intlmi_event_ind(queue_t *q, 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_PCPROTO;		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;		qreply(q, mp);		return (QR_DONE);	}	rare();	return (-ENOBUFS);}#endif/* *  ======================================================================== * *  EVENTS from above or below * *  ======================================================================== * *  MESSAGES from above or below * *  ------------------------------------------------------------------------- *//* *  SDL_BITS_FOR_TRANSMISSION_REQ *  ----------------------------------- */STATIC INLINE intsdl_bits_for_transmission_req(queue_t *q, mblk_t *mp){	(void) q;	(void) mp;	/* 	   strip to M_DATA */	return (QR_STRIP);}/* *  SDL_CONNECT_REQ *  ----------------------------------- */STATIC INLINE intsdl_connect_req(queue_t *q, mblk_t *mp){	(void) q;	(void) mp;	/* 	   ignore */	return (QR_DONE);}/* *  SDL_DISCONNECT_REQ *  ----------------------------------- */STATIC INLINE intsdl_disconnect_req(queue_t *q, mblk_t *mp){	/* 	   translated to indication */	return sdl_disconnect_ind(q, mp);}/* *  LMI_INFO_REQ *  ----------------------------------- */STATIC INLINE intlmi_info_req(queue_t *q, mblk_t *mp){	(void) mp;	return lmi_info_ack(q, 0, NULL, 0);}/* *  LMI_ATTACH_REQ *  ----------------------------------- */STATIC INLINE intlmi_attach_req(queue_t *q, mblk_t *mp){	(void) mp;	return lmi_ok_ack(q, LMI_DISABLED, LMI_ATTACH_REQ);}/* *  LMI_DETACH_REQ *  ----------------------------------- */STATIC INLINE intlmi_detach_req(queue_t *q, mblk_t *mp){	(void) mp;	return lmi_ok_ack(q, LMI_UNATTACHED, LMI_DETACH_REQ);}/* *  LMI_ENABLE_REQ *  ----------------------------------- */STATIC INLINE intlmi_enable_req(queue_t *q, mblk_t *mp){	(void) mp;	return lmi_enable_con(q, LMI_ENABLED);}/* *  LMI_DISABLE_REQ *  ----------------------------------- */STATIC INLINE intlmi_disable_req(queue_t *q, mblk_t *mp){	(void) mp;	return lmi_disable_con(q, LMI_DISABLED);}/* *  LMI_OPTMGMT_REQ *  ----------------------------------- */STATIC INLINE intlmi_optmgmt_req(queue_t *q, mblk_t *mp){	(void) mp;	return lmi_error_ack(q, 0, LMI_OPTMGMT_REQ, EOPNOTSUPP, 0);}/* *  ------------------------------------------------------------------------- * *  IO CONTROLS from above or below * *  ------------------------------------------------------------------------- *//* *  SDL_IOCGOPTIONS *  ----------------------------------- */STATIC intsdl_iocgoptions(queue_t *q, mblk_t *mp){	spm_t *s = PRIV(q);	void *arg = mp->b_cont ? mp->b_cont->b_rptr : NULL;	*(lmi_option_t *) arg = s->option;	return (0);}/* *  SDL_IOCSOPTIONS *  ----------------------------------- */STATIC intsdl_iocsoptions(queue_t *q, mblk_t *mp){	spm_t *s = PRIV(q);	void *arg = mp->b_cont ? mp->b_cont->b_rptr : NULL;	s->option = *(lmi_option_t *) arg;	return (0);}/* *  SDL_IOCGCONFIG *  ----------------------------------- */STATIC intsdl_iocgconfig(queue_t *q, mblk_t *mp){	spm_t *s = PRIV(q);	void *arg = mp->b_cont ? mp->b_cont->b_rptr : NULL;	*(sdl_config_t *) arg = s->config;	return (0);}/* *  SDL_IOCSCONFIG *  ----------------------------------- */STATIC intsdl_iocsconfig(queue_t *q, mblk_t *mp){	spm_t *s = PRIV(q);	void *arg = mp->b_cont ? mp->b_cont->b_rptr : NULL;	s->config = *(sdl_config_t *) arg;	return (0);}/* *  SDL_IOCTCONFIG *  ----------------------------------- */STATIC intsdl_ioctconfig(queue_t *q, mblk_t *mp){	spm_t *s = PRIV(q);	void *arg = mp->b_cont ? mp->b_cont->b_rptr : NULL;	(void) s;	(void) arg;	fixme(("Test the configuration\n"));	return (-EOPNOTSUPP);}/* *  SDL_IOCCCONFIG *  ----------------------------------- */STATIC intsdl_ioccconfig(queue_t *q, mblk_t *mp){	spm_t *s = PRIV(q);	void *arg = mp->b_cont ? mp->b_cont->b_rptr : NULL;	(void) s;	(void) arg;	fixme(("Commit the configuration\n"));	return (-EOPNOTSUPP);}/* *  SDL_IOCGSTATEM *  ----------------------------------- */STATIC intsdl_iocgstatem(queue_t *q, mblk_t *mp){	spm_t *s = PRIV(q);	void *arg = mp->b_cont ? mp->b_cont->b_rptr : NULL;	*(sdl_statem_t *) arg = s->statem;	return (0);}/* *  SDL_IOCCMRESET *  ----------------------------------- */STATIC intsdl_ioccmreset(queue_t *q, mblk_t *mp){	spm_t *s = PRIV(q);	void *arg = mp->b_cont ? mp->b_cont->b_rptr : NULL;	(void) s;	(void) arg;	fixme(("Master reset\n"));	return (-EOPNOTSUPP);}/* *  SDL_IOCGSTATSP *  ----------------------------------- */STATIC intsdl_iocgstatsp(queue_t *q, mblk_t *mp){	spm_t *s = PRIV(q);	void *arg = mp->b_cont ? mp->b_cont->b_rptr : NULL;	*(sdl_stats_t *) arg = s->statsp;	return (0);}/* *  SDL_IOCSSTATSP *  ----------------------------------- */STATIC intsdl_iocsstatsp(queue_t *q, mblk_t *mp){	spm_t *s = PRIV(q);	void *arg = mp->b_cont ? mp->b_cont->b_rptr : NULL;	s->statsp = *(sdl_stats_t *) arg;	return (0);}/* *  SDL_IOCGSTATS *  ----------------------------------- */STATIC intsdl_iocgstats(queue_t *q, mblk_t *mp){	spm_t *s = PRIV(q);	void *arg = mp->b_cont ? mp->b_cont->b_rptr : NULL;	*(sdl_stats_t *) arg = s->stats;	return (0);}/* *  SDL_IOCCSTATS *  ----------------------------------- */STATIC intsdl_ioccstats(queue_t *q, mblk_t *mp){	spm_t *s = PRIV(q);	void *arg = mp->b_cont ? mp->b_cont->b_rptr : NULL;	(void) arg;	bzero(&s->stats, sizeof(s->stats));	return (0);}/* *  SDL_IOCGNOTIFY *  ----------------------------------- */STATIC intsdl_iocgnotify(queue_t *q, mblk_t *mp){	spm_t *s = PRIV(q);	void *arg = mp->b_cont ? mp->b_cont->b_rptr : NULL;	*(sdl_notify_t *) arg = s->notify;	return (0);}/* *  SDL_IOCSNOTIFY *  ----------------------------------- */STATIC intsdl_iocsnotify(queue_t *q, mblk_t *mp){	spm_t *s = PRIV(q);	void *arg = mp->b_cont ? mp->b_cont->b_rptr : NULL;	s->notify = *(sdl_notify_t *) arg;	return (0);}/* *  SDL_IOCCNOTIFY *  ----------------------------------- */STATIC intsdl_ioccnotify(queue_t *q, mblk_t *mp){	spm_t *s = PRIV(q);	void *arg = mp->b_cont ? mp->b_cont->b_rptr : NULL;	s->notify.events &= ~((sdl_notify_t *) arg)->events;	return (0);}/* *  ======================================================================== * *  STREAMS Message Handling * *  ======================================================================== * *  M_IOCTL Handling *  ----------------------------------------------------------------------- */STATIC intspm_m_ioctl(queue_t *q, mblk_t *mp){	int ret;	struct iocblk *iocp = (struct iocblk *) mp->b_rptr;	int cmd = iocp->ioc_cmd, count = iocp->ioc_count;	int type = _IOC_TYPE(cmd), nr = _IOC_NR(cmd), size = _IOC_SIZE(cmd);	(void) nr;	switch (type) {	case __SID:	{		switch (cmd) {		default:			ptrace(("spm: ERROR: Unknown IOCTL %d\n", cmd));			ret = -EINVAL;			break;		case I_STR:		case I_LINK:		case I_PLINK:		case I_UNLINK:		case I_PUNLINK:		{			void *arg = mp->b_cont ? mp->b_cont->b_rptr : NULL;			struct linkblk *lp = (struct linkblk *) arg;			rare();			(void) lp;			ret = -EINVAL;			break;		}		}		ret = -EFAULT;		break;

⌨️ 快捷键说明

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