亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? signaling.c

?? ARM 嵌入式 系統(tǒng) 設(shè)計(jì)與實(shí)例開(kāi)發(fā) 實(shí)驗(yàn)教材 二源碼
?? C
字號(hào):
/* net/atm/signaling.c - ATM signaling *//* Written 1995-2000 by Werner Almesberger, EPFL LRC/ICA */#include <linux/errno.h>	/* error codes */#include <linux/kernel.h>	/* printk */#include <linux/skbuff.h>#include <linux/wait.h>#include <linux/sched.h>	/* jiffies and HZ */#include <linux/atm.h>		/* ATM stuff */#include <linux/atmsap.h>#include <linux/atmsvc.h>#include <linux/atmdev.h>#include <linux/bitops.h>#include "resources.h"#include "signaling.h"#undef WAIT_FOR_DEMON		/* #define this if system calls on SVC sockets				   should block until the demon runs.				   Danger: may cause nasty hangs if the demon				   crashes. */#if 0#define DPRINTK(format,args...) printk(KERN_DEBUG format,##args)#else#define DPRINTK(format,args...)#endifstruct atm_vcc *sigd = NULL;static DECLARE_WAIT_QUEUE_HEAD(sigd_sleep);extern spinlock_t atm_dev_lock;static void sigd_put_skb(struct sk_buff *skb){#ifdef WAIT_FOR_DEMON	static unsigned long silence = 0;	DECLARE_WAITQUEUE(wait,current);	add_wait_queue(&sigd_sleep,&wait);	while (!sigd) {		set_current_state(TASK_UNINTERRUPTIBLE);		if (time_after(jiffies, silence) || silence == 0) {			printk(KERN_INFO "atmsvc: waiting for signaling demon "			    "...\n");			silence = (jiffies+30*HZ)|1;		}		schedule();	}	current->state = TASK_RUNNING;	remove_wait_queue(&sigd_sleep,&wait);#else	if (!sigd) {		printk(KERN_WARNING "atmsvc: no signaling demon\n");		kfree_skb(skb);		return;	}#endif	atm_force_charge(sigd,skb->truesize);	skb_queue_tail(&sigd->recvq,skb);	wake_up(&sigd->sleep);}static void modify_qos(struct atm_vcc *vcc,struct atmsvc_msg *msg){	struct sk_buff *skb;	if (test_bit(ATM_VF_RELEASED,&vcc->flags) ||	    !test_bit(ATM_VF_READY,&vcc->flags))		return;	msg->type = as_error;	if (!vcc->dev->ops->change_qos) msg->reply = -EOPNOTSUPP;	else {		/* should lock VCC */		msg->reply = vcc->dev->ops->change_qos(vcc,&msg->qos,		    msg->reply);		if (!msg->reply) msg->type = as_okay;	}	/*	 * Should probably just turn around the old skb. But the, the buffer	 * space accounting needs to follow the change too. Maybe later.	 */	while (!(skb = alloc_skb(sizeof(struct atmsvc_msg),GFP_KERNEL)))		schedule();	*(struct atmsvc_msg *) skb_put(skb,sizeof(struct atmsvc_msg)) = *msg;	sigd_put_skb(skb);}static int sigd_send(struct atm_vcc *vcc,struct sk_buff *skb){	struct atmsvc_msg *msg;	struct atm_vcc *session_vcc;	msg = (struct atmsvc_msg *) skb->data;	atomic_sub(skb->truesize+ATM_PDU_OVHD,&vcc->tx_inuse);	DPRINTK("sigd_send %d (0x%lx)\n",(int) msg->type,	  (unsigned long) msg->vcc);	vcc = *(struct atm_vcc **) &msg->vcc;	switch (msg->type) {		case as_okay:			vcc->reply = msg->reply;			if (!*vcc->local.sas_addr.prv &&			    !*vcc->local.sas_addr.pub) {				vcc->local.sas_family = AF_ATMSVC;				memcpy(vcc->local.sas_addr.prv,				    msg->local.sas_addr.prv,ATM_ESA_LEN);				memcpy(vcc->local.sas_addr.pub,				    msg->local.sas_addr.pub,ATM_E164_LEN+1);			}			session_vcc = vcc->session ? vcc->session : vcc;			if (session_vcc->vpi || session_vcc->vci) break;			session_vcc->itf = msg->pvc.sap_addr.itf;			session_vcc->vpi = msg->pvc.sap_addr.vpi;			session_vcc->vci = msg->pvc.sap_addr.vci;			if (session_vcc->vpi || session_vcc->vci)				session_vcc->qos = msg->qos;			break;		case as_error:			clear_bit(ATM_VF_REGIS,&vcc->flags);			clear_bit(ATM_VF_READY,&vcc->flags);			vcc->reply = msg->reply;			break;		case as_indicate:			vcc = *(struct atm_vcc **) &msg->listen_vcc;			DPRINTK("as_indicate!!!\n");			if (!vcc->backlog_quota) {				sigd_enq(0,as_reject,vcc,NULL,NULL);				return 0;			}			vcc->backlog_quota--;			skb_queue_tail(&vcc->listenq,skb);			if (vcc->callback) {				DPRINTK("waking vcc->sleep 0x%p\n",				    &vcc->sleep);				vcc->callback(vcc);			}			return 0;		case as_close:			set_bit(ATM_VF_RELEASED,&vcc->flags);			clear_bit(ATM_VF_READY,&vcc->flags);			vcc->reply = msg->reply;			break;		case as_modify:			modify_qos(vcc,msg);			break;		default:			printk(KERN_ALERT "sigd_send: bad message type %d\n",			    (int) msg->type);			return -EINVAL;	}	if (vcc->callback) vcc->callback(vcc);	dev_kfree_skb(skb);	return 0;}void sigd_enq2(struct atm_vcc *vcc,enum atmsvc_msg_type type,    struct atm_vcc *listen_vcc,const struct sockaddr_atmpvc *pvc,    const struct sockaddr_atmsvc *svc,const struct atm_qos *qos,int reply){	struct sk_buff *skb;	struct atmsvc_msg *msg;	DPRINTK("sigd_enq %d (0x%p)\n",(int) type,vcc);	while (!(skb = alloc_skb(sizeof(struct atmsvc_msg),GFP_KERNEL)))		schedule();	msg = (struct atmsvc_msg *) skb_put(skb,sizeof(struct atmsvc_msg));	memset(msg,0,sizeof(*msg));	msg->type = type;	*(struct atm_vcc **) &msg->vcc = vcc;	*(struct atm_vcc **) &msg->listen_vcc = listen_vcc;	msg->reply = reply;	if (qos) msg->qos = *qos;	if (vcc) msg->sap = vcc->sap;	if (svc) msg->svc = *svc;	if (vcc) msg->local = vcc->local;	if (pvc) msg->pvc = *pvc;	sigd_put_skb(skb);	if (vcc) set_bit(ATM_VF_REGIS,&vcc->flags);}void sigd_enq(struct atm_vcc *vcc,enum atmsvc_msg_type type,    struct atm_vcc *listen_vcc,const struct sockaddr_atmpvc *pvc,    const struct sockaddr_atmsvc *svc){	sigd_enq2(vcc,type,listen_vcc,pvc,svc,vcc ? &vcc->qos : NULL,0);	/* other ISP applications may use "reply" */}static void purge_vccs(struct atm_vcc *vcc){	while (vcc) {		if (vcc->family == PF_ATMSVC &&		    !test_bit(ATM_VF_META,&vcc->flags)) {			set_bit(ATM_VF_RELEASED,&vcc->flags);			vcc->reply = -EUNATCH;			wake_up(&vcc->sleep);		}		vcc = vcc->next;	}}static void sigd_close(struct atm_vcc *vcc){	struct atm_dev *dev;	DPRINTK("sigd_close\n");	sigd = NULL;	if (skb_peek(&vcc->recvq))		printk(KERN_ERR "sigd_close: closing with requests pending\n");	skb_queue_purge(&vcc->recvq);	purge_vccs(nodev_vccs);	spin_lock (&atm_dev_lock);	for (dev = atm_devs; dev; dev = dev->next) purge_vccs(dev->vccs);	spin_unlock (&atm_dev_lock);}static struct atmdev_ops sigd_dev_ops = {	close:	sigd_close,	send:	sigd_send};static struct atm_dev sigd_dev = {	&sigd_dev_ops,	NULL,		/* no PHY */    	"sig",		/* type */	999,		/* dummy device number */	NULL,NULL,	/* pretend not to have any VCCs */	NULL,NULL,	/* no data */	{ 0 },		/* no flags */	NULL,		/* no local address */	{ 0 }		/* no ESI, no statistics */};int sigd_attach(struct atm_vcc *vcc){	if (sigd) return -EADDRINUSE;	DPRINTK("sigd_attach\n");	sigd = vcc;	bind_vcc(vcc,&sigd_dev);	set_bit(ATM_VF_META,&vcc->flags);	set_bit(ATM_VF_READY,&vcc->flags);	wake_up(&sigd_sleep);	return 0;}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品成人免费在线| 亚洲成人资源网| 欧美激情资源网| 久久午夜免费电影| 欧美哺乳videos| 欧美一区二区三区性视频| 欧美日韩亚洲国产综合| 欧美吻胸吃奶大尺度电影 | 成人黄色电影在线 | 欧美午夜一区二区| 亚洲欧美在线aaa| 国产婷婷色一区二区三区在线| 久久精品夜夜夜夜久久| 日本一区二区综合亚洲| 国产精品久久久久三级| 亚洲图片另类小说| 亚洲综合色丁香婷婷六月图片| 亚洲精品视频在线| 亚洲成人中文在线| 免费日本视频一区| 国产精品一区在线观看乱码| 风间由美中文字幕在线看视频国产欧美| 国产精品一区二区在线播放| 国产成人久久精品77777最新版本| 成人a免费在线看| 色哦色哦哦色天天综合| 欧美电影一区二区| 久久先锋影音av| 亚洲手机成人高清视频| 日韩国产精品久久| 国产美女久久久久| 91在线观看一区二区| 欧美日韩一区二区在线观看 | 五月天国产精品| 日本中文字幕一区| 国产精品123区| 91美女视频网站| 欧美精品三级日韩久久| 精品国产一区二区亚洲人成毛片 | 国产成人精品午夜视频免费| 成人黄动漫网站免费app| 在线观看日韩一区| 欧美一区二区播放| 国产欧美日韩中文久久| 亚洲一区视频在线观看视频| 国内精品久久久久影院薰衣草 | 中文字幕一区av| 视频一区视频二区中文| 国产精品伊人色| 91国偷自产一区二区三区成为亚洲经典 | 成人av电影在线| 欧美日韩一区二区三区四区五区| 日韩欧美中文字幕一区| 国产精品久久久久久久久动漫 | 欧美二区三区的天堂| 久久久久成人黄色影片| 亚洲午夜私人影院| 国产精品羞羞答答xxdd| 精品婷婷伊人一区三区三| 国产亚洲欧美日韩在线一区| 亚洲成精国产精品女| 不卡电影一区二区三区| 日韩一区二区三区观看| 樱花草国产18久久久久| 国产高清视频一区| 3751色影院一区二区三区| 国产精品美女久久久久aⅴ | 日韩欧美中文字幕制服| 亚洲免费观看高清完整版在线| 久久精品免费看| 色8久久精品久久久久久蜜| 久久综合久久久久88| 午夜精品视频在线观看| av一本久道久久综合久久鬼色| 日韩精品在线一区二区| 一级中文字幕一区二区| 成人综合激情网| 精品播放一区二区| 日韩在线卡一卡二| 欧美在线免费观看亚洲| 亚洲欧洲美洲综合色网| 国产精品中文字幕日韩精品| 欧美一区二区三区爱爱| 亚洲电影激情视频网站| 在线观看亚洲a| 亚洲天堂精品视频| 东方aⅴ免费观看久久av| 精品日韩在线一区| 日本系列欧美系列| 欧美日韩1234| 亚洲一二三区不卡| 色av一区二区| 一区二区日韩电影| 91亚洲精品久久久蜜桃| 欧美国产日韩精品免费观看| 国产精品正在播放| 国产色产综合色产在线视频| 国内外成人在线视频| 精品国产区一区| 精品一区二区精品| 精品三级在线观看| 久久爱另类一区二区小说| 欧美一级午夜免费电影| 美腿丝袜亚洲色图| 日韩欧美亚洲一区二区| 美女mm1313爽爽久久久蜜臀| 欧美一区二区免费观在线| 日韩不卡免费视频| 欧美一区欧美二区| 伦理电影国产精品| 精品日韩成人av| 精品一区二区成人精品| 精品国产精品一区二区夜夜嗨| 另类欧美日韩国产在线| 精品国产91乱码一区二区三区| 精品亚洲成av人在线观看| 久久婷婷久久一区二区三区| 国产高清在线精品| 国产精品久久久久久妇女6080| 99久久er热在这里只有精品15| 亚洲日本丝袜连裤袜办公室| 91成人国产精品| 日日噜噜夜夜狠狠视频欧美人| 日韩一区二区三区免费看| 国产精品综合一区二区| 亚洲欧洲精品一区二区三区 | 中文字幕五月欧美| 91视频在线看| 一区二区三区四区在线| 欧美美女喷水视频| 极品少妇xxxx精品少妇偷拍| 中文成人av在线| 欧美在线一区二区| 麻豆成人久久精品二区三区红| 国产三级一区二区| 色久综合一二码| 日本欧美加勒比视频| 国产色产综合产在线视频 | 一区二区三区中文字幕电影 | 亚洲线精品一区二区三区 | 一区二区三区在线观看网站| 欧美狂野另类xxxxoooo| 国产一区二区三区最好精华液| 国产精品伦理在线| 欧美日韩一级二级| 国产美女一区二区三区| 亚洲乱码日产精品bd| 日韩亚洲电影在线| av资源网一区| 日本视频中文字幕一区二区三区| 国产午夜精品一区二区 | 亚洲女人****多毛耸耸8| 88在线观看91蜜桃国自产| 国产成人av网站| 亚洲国产精品视频| 国产午夜精品久久久久久免费视 | 宅男噜噜噜66一区二区66| 国产精品影视网| 亚洲h动漫在线| 久久久精品综合| 欧美日韩二区三区| 成人开心网精品视频| 麻豆91免费观看| 亚洲一级电影视频| 国产日韩欧美一区二区三区乱码 | 51精品秘密在线观看| 成人手机在线视频| 免费成人深夜小野草| 亚洲日本va在线观看| 久久蜜桃av一区精品变态类天堂| 欧美日韩卡一卡二| www.亚洲色图| 国产一区二区三区免费在线观看| 亚洲第一成年网| 成人欧美一区二区三区白人| 精品三级在线观看| 这里只有精品电影| 在线观看成人免费视频| 成人一级片在线观看| 久久福利资源站| 亚洲成人精品一区| 椎名由奈av一区二区三区| 久久久九九九九| 日韩精品自拍偷拍| 欧美日韩高清一区二区三区| 日本久久电影网| 91麻豆swag| 成人听书哪个软件好| 国产精品综合网| 激情五月婷婷综合| 免费成人在线网站| 视频一区国产视频| 亚洲国产精品久久一线不卡| 亚洲欧洲一区二区在线播放| 亚洲国产激情av| 国产午夜精品美女毛片视频| 久久日韩粉嫩一区二区三区| 欧美xxxx老人做受| 日韩欧美一级在线播放| 欧美一级欧美三级在线观看|