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

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

?? hdlc_fr.c

?? 一個(gè)2.4.21版本的嵌入式linux內(nèi)核
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
		if (hdlc->state.fr.changed) {			reptype = LMI_FULLREP;			hdlc->state.fr.fullrep_sent = 1;			hdlc->state.fr.changed = 0;		}		fr_lmi_send(hdlc, reptype == LMI_FULLREP ? 1 : 0);		return 0;	}	/* DTE */	if (reptype != LMI_FULLREP || error)		return 0;	stat_len = 3;	pvc = hdlc->state.fr.first_pvc;	while (pvc) {		pvc->state.deleted = pvc->state.active; /* mark active PVCs */		pvc = pvc->next;	}	while (skb->len >= i + 2 + stat_len) {		u16 dlci;		int active, new;		if (skb->data[i] != ((hdlc->state.fr.settings.lmi == LMI_CCITT)				     ? LMI_CCITT_PVCSTAT : LMI_PVCSTAT)) {			printk(KERN_WARNING "%s: Invalid PVCSTAT ID: %x\n",			       hdlc_to_name(hdlc), skb->data[i]);			return 1;		}		i++;		if (skb->data[i] != stat_len) {			printk(KERN_WARNING "%s: Invalid PVCSTAT length: %x\n",			       hdlc_to_name(hdlc), skb->data[i]);			return 1;		}		i++;		dlci = status_to_dlci(hdlc, skb->data + i, &active, &new);		pvc = find_pvc(hdlc, dlci);		active |= new;		if (pvc) {			if (active && !pvc->state.active &&			    (pvc->netdev.flags & IFF_UP)) {				pvc->state.active = active;				fr_log_dlci_active(pvc);			}			pvc->state.deleted = 0;		}		else if (new)			printk(KERN_INFO "%s: new PVC available, DLCI=%u\n",			       hdlc_to_name(hdlc), dlci);		i += stat_len;	}	pvc = hdlc->state.fr.first_pvc;	while (pvc) {		if (pvc->state.deleted) {			pvc->state.active = pvc->state.new = 0;			fr_log_dlci_active(pvc);			pvc->state.deleted = 0;		}		pvc = pvc->next;	}	/* Next full report after N391 polls */	hdlc->state.fr.n391cnt = hdlc->state.fr.settings.n391;	return 0;}static void fr_rx(struct sk_buff *skb){	hdlc_device *hdlc = dev_to_hdlc(skb->dev);	fr_hdr *fh = (fr_hdr*)skb->data;	u8 *data = skb->data;	u16 dlci;	pvc_device *pvc;	if (skb->len<4 || fh->ea1 || data[2] != FR_UI)		goto rx_error;	dlci = q922_to_dlci(skb->data);	if (dlci == LMI_DLCI) {		if (hdlc->state.fr.settings.lmi == LMI_NONE)			goto rx_error; /* LMI packet with no LMI? */		if (data[3] == LMI_PROTO) {			if (fr_lmi_recv(hdlc, skb))				goto rx_error;			else {				/* No request pending */				hdlc->state.fr.request = 0;				hdlc->state.fr.last_poll = jiffies;				dev_kfree_skb_any(skb);				return;			}		}		printk(KERN_INFO "%s: Received non-LMI frame with LMI DLCI\n",		       hdlc_to_name(hdlc));		goto rx_error;	}	pvc = find_pvc(hdlc, dlci);	if (!pvc) {#ifdef CONFIG_HDLC_DEBUG_PKT		printk(KERN_INFO "%s: No PVC for received frame's DLCI %d\n",		       hdlc_to_name(hdlc), dlci);#endif		goto rx_error;	}	if ((pvc->netdev.flags & IFF_UP) == 0) {#ifdef CONFIG_HDLC_DEBUG_PKT		printk(KERN_INFO "%s: PVC for received frame's DLCI %d is down\n",		       hdlc_to_name(hdlc), dlci);#endif		goto rx_error;	}	pvc->stats.rx_packets++; /* PVC traffic */	pvc->stats.rx_bytes += skb->len;	if (pvc->state.fecn != (fh->fecn ? PVC_STATE_FECN : 0)) {#ifdef CONFIG_HDLC_DEBUG_ECN		printk(KERN_DEBUG "%s: FECN O%s\n", pvc_to_name(pvc),		       fh->fecn ? "N" : "FF");#endif		pvc->state.fecn ^= 1;	}	if (pvc->state.becn != (fh->becn ? PVC_STATE_BECN : 0)) {#ifdef CONFIG_HDLC_DEBUG_ECN		printk(KERN_DEBUG "%s: BECN O%s\n", pvc_to_name(pvc),		       fh->becn ? "N" : "FF");#endif		pvc->state.becn ^= 1;	}	if (pvc->state.becn)		pvc->stats.rx_compressed++;	skb->dev = &pvc->netdev;	if (data[3] == NLPID_IP) {		skb_pull(skb, 4); /* Remove 4-byte header (hdr, UI, NLPID) */		skb->protocol = htons(ETH_P_IP);		netif_rx(skb);		return;	}	if (data[3] == NLPID_IPV6) {		skb_pull(skb, 4); /* Remove 4-byte header (hdr, UI, NLPID) */		skb->protocol = htons(ETH_P_IPV6);		netif_rx(skb);		return;	}	if (data[3] == FR_PAD && data[4] == NLPID_SNAP && data[5] == FR_PAD) {		u16 oui = ntohs(*(u16*)(data + 6));		u16 pid = ntohs(*(u16*)(data + 8));		skb_pull(skb, 10);		switch ((((u32)oui) << 16) | pid) {		case ETH_P_ARP: /* routed frame with SNAP */		case ETH_P_IPX:		case ETH_P_IP:	/* a long variant */		case ETH_P_IPV6:			skb->protocol = htons(pid);			break;		default:			printk(KERN_INFO "%s: Unsupported protocol, OUI=%x "			       "PID=%x\n", hdlc_to_name(hdlc), oui, pid);			dev_kfree_skb_any(skb);			return;		}		netif_rx(skb);		return;	}	printk(KERN_INFO "%s: Unsupported protocol, NLPID=%x\n",	       hdlc_to_name(hdlc), data[3]);	dev_kfree_skb_any(skb);	return; rx_error:	hdlc->stats.rx_errors++; /* Mark error */	dev_kfree_skb_any(skb);}static int fr_open(hdlc_device *hdlc){	if (hdlc->state.fr.settings.lmi != LMI_NONE) {		hdlc->state.fr.last_poll = 0;		hdlc->state.fr.reliable = 0;		hdlc->state.fr.changed = 1;		hdlc->state.fr.request = 0;		hdlc->state.fr.fullrep_sent = 0;		hdlc->state.fr.last_errors = 0xFFFFFFFF;		hdlc->state.fr.n391cnt = 0;		hdlc->state.fr.txseq = hdlc->state.fr.rxseq = 0;		init_timer(&hdlc->state.fr.timer);		/* First poll after 1 s */		hdlc->state.fr.timer.expires = jiffies + HZ;		hdlc->state.fr.timer.function = fr_timer;		hdlc->state.fr.timer.data = (unsigned long)hdlc;		add_timer(&hdlc->state.fr.timer);	} else		hdlc->state.fr.reliable = 1;	return 0;}static void fr_close(hdlc_device *hdlc){	pvc_device *pvc = hdlc->state.fr.first_pvc;	if (hdlc->state.fr.settings.lmi != LMI_NONE)		del_timer_sync(&hdlc->state.fr.timer);	while(pvc) {		dev_close(&pvc->netdev); /* Shutdown all PVCs for this FRAD */		pvc = pvc->next;	}}static int fr_pvc(hdlc_device *hdlc, unsigned int dlci, int create){	pvc_device **pvc_p = &hdlc->state.fr.first_pvc;	pvc_device *pvc;	int result;	if(dlci <= 0 || dlci >= 1024)		return -EINVAL;	/* Only 10 bits for DLCI, DLCI 0 reserved */	while(*pvc_p) {		if (netdev_dlci(&(*pvc_p)->netdev) == dlci)			break;		pvc_p = &(*pvc_p)->next;	}	if (create) {		/* Create PVC */		if (*pvc_p != NULL)			return -EEXIST;		pvc = *pvc_p = kmalloc(sizeof(pvc_device), GFP_KERNEL);		if (!pvc) {			printk(KERN_WARNING "%s: Memory squeeze on fr_pvc()\n",			       hdlc_to_name(hdlc));			return -ENOBUFS;		}		memset(pvc, 0, sizeof(pvc_device));		pvc->netdev.hard_start_xmit = pvc_xmit;		pvc->netdev.get_stats = pvc_get_stats;		pvc->netdev.open = pvc_open;		pvc->netdev.stop = pvc_close;		pvc->netdev.change_mtu = pvc_change_mtu;		pvc->netdev.mtu = HDLC_MAX_MTU;		pvc->netdev.type = ARPHRD_DLCI;		pvc->netdev.hard_header_len = 16;		pvc->netdev.hard_header = fr_hard_header;		pvc->netdev.tx_queue_len = 0;		pvc->netdev.flags = IFF_POINTOPOINT;		pvc->master = hdlc;		*(u16*)pvc->netdev.dev_addr = htons(dlci);		dlci_to_q922(pvc->netdev.broadcast, dlci);		pvc->netdev.addr_len = 2;		result = dev_alloc_name(&pvc->netdev, "pvc%d");		if (result < 0) {			kfree(pvc);			*pvc_p = NULL;			return result;		}		if (register_netdevice(&pvc->netdev) != 0) {			kfree(pvc);			*pvc_p = NULL;			return -EIO;		}		hdlc->state.fr.changed = 1;		hdlc->state.fr.pvc_count++;		return 0;	}	if (*pvc_p == NULL)		/* Delete PVC */		return -ENOENT;	pvc = *pvc_p;	if (pvc->netdev.flags & IFF_UP)		return -EBUSY;		/* PVC in use */	hdlc->state.fr.changed = 1;	hdlc->state.fr.pvc_count--;	*pvc_p = pvc->next;	unregister_netdevice(&pvc->netdev);	kfree(pvc);	return 0;}static void fr_destroy(hdlc_device *hdlc){	pvc_device *pvc = hdlc->state.fr.first_pvc;	while(pvc) {		pvc_device *next = pvc->next;		unregister_netdev(&pvc->netdev);		kfree(pvc);		pvc = next;	}	hdlc->state.fr.first_pvc = NULL; /* All PVCs destroyed */	hdlc->state.fr.pvc_count = 0;	hdlc->state.fr.changed = 1;}int hdlc_fr_ioctl(hdlc_device *hdlc, struct ifreq *ifr){	fr_proto *fr_s = ifr->ifr_settings.ifs_ifsu.fr;	const size_t size = sizeof(fr_proto);	fr_proto new_settings;	struct net_device *dev = hdlc_to_dev(hdlc);	fr_proto_pvc pvc;	int result;	switch (ifr->ifr_settings.type) {	case IF_GET_PROTO:		ifr->ifr_settings.type = IF_PROTO_FR;		if (ifr->ifr_settings.size < size) {			ifr->ifr_settings.size = size; /* data size wanted */			return -ENOBUFS;		}		if (copy_to_user(fr_s, &hdlc->state.fr.settings, size))			return -EFAULT;		return 0;	case IF_PROTO_FR:		if(!capable(CAP_NET_ADMIN))			return -EPERM;		if(dev->flags & IFF_UP)			return -EBUSY;		if (copy_from_user(&new_settings, fr_s, size))			return -EFAULT;		if (new_settings.lmi == LMI_DEFAULT)			new_settings.lmi = LMI_ANSI;		if ((new_settings.lmi != LMI_NONE &&		     new_settings.lmi != LMI_ANSI &&		     new_settings.lmi != LMI_CCITT) ||		    new_settings.t391 < 1 ||		    new_settings.t392 < 2 ||		    new_settings.n391 < 1 ||		    new_settings.n392 < 1 ||		    new_settings.n393 < new_settings.n392 ||		    new_settings.n393 > 32 ||		    (new_settings.dce != 0 &&		     new_settings.dce != 1))			return -EINVAL;		result=hdlc->attach(hdlc, ENCODING_NRZ,PARITY_CRC16_PR1_CCITT);		if (result)			return result;		if (hdlc->proto != IF_PROTO_FR) {			hdlc_proto_detach(hdlc);			hdlc->state.fr.first_pvc = NULL;			hdlc->state.fr.pvc_count = 0;		}		memcpy(&hdlc->state.fr.settings, &new_settings, size);		hdlc->open = fr_open;		hdlc->stop = fr_close;		hdlc->netif_rx = fr_rx;		hdlc->proto_detach = fr_destroy;		hdlc->proto = IF_PROTO_FR;		dev->hard_start_xmit = hdlc->xmit;		dev->hard_header = fr_hard_header;		dev->type = ARPHRD_FRAD;		dev->addr_len = 2;		*(u16*)dev->dev_addr = htons(LMI_DLCI);		dlci_to_q922(dev->broadcast, LMI_DLCI);		return 0;	case IF_PROTO_FR_ADD_PVC:	case IF_PROTO_FR_DEL_PVC:		if(!capable(CAP_NET_ADMIN))			return -EPERM;		if (copy_from_user(&pvc, ifr->ifr_settings.ifs_ifsu.fr_pvc,				   sizeof(fr_proto_pvc)))			return -EFAULT;		return fr_pvc(hdlc, pvc.dlci,			      ifr->ifr_settings.type == IF_PROTO_FR_ADD_PVC);	}	return -EINVAL;}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区资源| 色综合天天综合狠狠| 三级久久三级久久久| 一卡二卡三卡日韩欧美| 亚洲乱码国产乱码精品精的特点| 日韩码欧中文字| 亚洲日本中文字幕区| 一区二区三区中文字幕精品精品| 亚洲欧美国产毛片在线| 亚洲女性喷水在线观看一区| 亚洲另类在线制服丝袜| 亚洲综合男人的天堂| 亚洲高清久久久| 日韩精品一二三| 久久精品国产亚洲aⅴ| 国内精品国产成人国产三级粉色| 国产一区二区免费看| 成人美女在线视频| 91首页免费视频| www一区二区| 精品国产露脸精彩对白| 久久免费偷拍视频| 国产精品理论在线观看| √…a在线天堂一区| 亚洲自拍偷拍欧美| 爽好久久久欧美精品| 久久精品国产久精国产| 国产jizzjizz一区二区| 97久久超碰国产精品| 7799精品视频| 久久精品综合网| 亚洲免费三区一区二区| 日韩在线卡一卡二| 国产成人综合自拍| 色综合色综合色综合色综合色综合| 在线观看成人免费视频| 日韩美女在线视频| 国产精品国产三级国产三级人妇| 亚洲一区二区三区中文字幕在线| 免费久久99精品国产| 国产成人午夜精品影院观看视频| 一本色道亚洲精品aⅴ| 91精品国产品国语在线不卡| 欧美韩国一区二区| 亚洲成a人在线观看| 国产风韵犹存在线视精品| 在线免费av一区| 精品国产亚洲一区二区三区在线观看| 国产精品乱码一区二三区小蝌蚪| 日本大胆欧美人术艺术动态| 高清beeg欧美| 欧美日本一区二区三区| 国产女主播视频一区二区| 午夜欧美一区二区三区在线播放| 国产精品一区三区| 欧美日韩一区三区| 亚洲国产精品成人综合| 偷拍日韩校园综合在线| 国产91丝袜在线播放| 欧美一区二区三区视频免费 | 欧美日韩国产精品成人| 久久青草欧美一区二区三区| 伊人婷婷欧美激情| 国产精品资源网站| 91精品国产综合久久香蕉的特点| 中文字幕日本不卡| 91小视频在线观看| 久久久一区二区三区| 丝袜美腿亚洲色图| 一本色道久久综合狠狠躁的推荐| 久久综合久色欧美综合狠狠| 亚洲风情在线资源站| 91啪在线观看| 国产午夜精品一区二区三区视频| 日本一不卡视频| 欧美午夜电影网| 一区在线播放视频| 国产福利精品一区| 日韩美女一区二区三区| 图片区小说区区亚洲影院| 91麻豆国产香蕉久久精品| 久久久精品黄色| 久久 天天综合| 制服丝袜亚洲色图| 婷婷一区二区三区| 欧美视频中文字幕| 亚洲欧美日韩在线不卡| 成人黄色综合网站| 国产日韩欧美电影| 国产伦精一区二区三区| 精品精品国产高清a毛片牛牛| 日韩精品一级二级 | 精品国产乱码久久久久久1区2区 | 精品一区二区三区蜜桃| 欧美一级黄色大片| 视频在线观看一区二区三区| 精品污污网站免费看| 亚洲精品你懂的| 色偷偷久久人人79超碰人人澡| 中文字幕一区二区三区四区| 国产a精品视频| 欧美国产1区2区| 成人蜜臀av电影| 一色屋精品亚洲香蕉网站| 99久久精品免费精品国产| 亚洲视频在线观看三级| 91浏览器在线视频| 一区二区三区中文字幕在线观看| 在线观看av一区| 亚洲国产精品久久久久婷婷884| 欧美日韩精品一区二区| 丝袜美腿一区二区三区| 日韩欧美激情一区| 久久超碰97中文字幕| 亚洲777理论| 欧美精品xxxxbbbb| 免费观看在线综合| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 99久久精品情趣| 有码一区二区三区| 欧美精品免费视频| 久久91精品久久久久久秒播| 久久久久久久综合日本| 成人夜色视频网站在线观看| ...xxx性欧美| 欧美日韩一区三区| 国产一区二区三区蝌蚪| 国产精品高潮呻吟| 欧美在线色视频| 午夜私人影院久久久久| 亚洲精品一区二区三区99| 成人激情综合网站| 亚洲高清三级视频| 精品免费一区二区三区| 国产91精品露脸国语对白| 亚洲精品中文字幕乱码三区| 777xxx欧美| 国产成人av影院| 亚洲国产成人av好男人在线观看| 日韩午夜中文字幕| 成+人+亚洲+综合天堂| 亚洲国产你懂的| 久久亚洲一区二区三区四区| 91色在线porny| 日韩福利视频导航| 国产精品久久久久久福利一牛影视 | 不卡一区中文字幕| 日韩av一级片| 国产精品家庭影院| 日韩一卡二卡三卡四卡| 成+人+亚洲+综合天堂| 男男成人高潮片免费网站| 国产精品久久久久久久久免费桃花| 欧美高清hd18日本| 成人永久aaa| 五月婷婷另类国产| 国产精品萝li| 日韩精品一区二区三区视频播放| 99re亚洲国产精品| 久久国产精品99精品国产| 综合色中文字幕| 久久伊99综合婷婷久久伊| 欧美亚洲日本国产| 国产99久久久国产精品| 免费的成人av| 一区二区三区中文字幕| 亚洲国产经典视频| 精品美女在线播放| 91福利社在线观看| 成人免费av在线| 九一久久久久久| 亚洲一区二区三区影院| 国产精品视频yy9299一区| 日韩精品一区二区三区老鸭窝| 色综合天天做天天爱| 国产一区二区三区最好精华液| 亚洲mv大片欧洲mv大片精品| 国产精品久久久久久久久免费樱桃 | 天天影视网天天综合色在线播放| 国产精品久久久久影院| 26uuu精品一区二区在线观看| 欧美日韩精品一区视频| av一区二区三区四区| 国产麻豆日韩欧美久久| 另类小说视频一区二区| 懂色av一区二区夜夜嗨| 老司机精品视频导航| 日日夜夜免费精品| 亚洲免费在线播放| 国产精品二区一区二区aⅴ污介绍| 欧美精品一区视频| 日韩精品中文字幕在线一区| 91精品国产一区二区三区香蕉| 欧美在线观看视频一区二区 | 欧美综合一区二区| 99久久综合狠狠综合久久| 国内外精品视频| 久久国产夜色精品鲁鲁99| 免费亚洲电影在线| 日韩电影在线免费|