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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? hdlc.c

?? 上傳linux-jx2410的源代碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
	reptype = skb->data[i++];	if (skb->data[i]!=	    (mode_is(hdlc, MODE_FR_CCITT) ? LMI_CCITT_ALIVE : LMI_ALIVE)) {		printk(KERN_INFO "%s: Unsupported status element=%x\n",		       hdlc_to_name(hdlc), skb->data[i]);		return 1;	}	i++;	i++;			/* Skip length field */	hdlc->lmi.rxseq = skb->data[i++]; /* TX sequence from peer */	rxseq = skb->data[i++];	/* Should confirm our sequence */	txseq = hdlc->lmi.txseq;	if (mode_is(hdlc, MODE_DCE)) {		if (reptype != LMI_FULLREP && reptype != LMI_INTEGRITY) {			printk(KERN_INFO "%s: Unsupported report type=%x\n",			       hdlc_to_name(hdlc), reptype);			return 1;		}	}	error = 0;	if (!(hdlc->lmi.state & LINK_STATE_RELIABLE))		error = 1;	if (rxseq == 0 || rxseq != txseq) {		hdlc->lmi.N391cnt = 0; /* Ask for full report next time */		error = 1;	}	if (mode_is(hdlc, MODE_DCE)) {		if ((hdlc->lmi.state & LINK_STATE_FULLREP_SENT) && !error) {/* Stop sending full report - the last one has been confirmed by DTE */			hdlc->lmi.state &= ~LINK_STATE_FULLREP_SENT;			pvc = hdlc->first_pvc;			while (pvc) {				if (pvc->state & PVC_STATE_NEW) {					pvc->state &= ~PVC_STATE_NEW;					pvc->state |= PVC_STATE_ACTIVE;					fr_log_dlci_active(pvc);/* Tell DTE that new PVC is now active */					hdlc->lmi.state |= LINK_STATE_CHANGED;				}				pvc = pvc->next;			}		}		if (hdlc->lmi.state & LINK_STATE_CHANGED) {			reptype = LMI_FULLREP;			hdlc->lmi.state |= LINK_STATE_FULLREP_SENT;			hdlc->lmi.state &= ~LINK_STATE_CHANGED;		}		fr_lmi_send(hdlc, reptype == LMI_FULLREP ? 1 : 0);		return 0;	}	/* DTE */	if (reptype != LMI_FULLREP || error)		return 0;	stat_len = 3;	pvc = hdlc->first_pvc;	while (pvc) {		pvc->newstate = 0;		pvc = pvc->next;	}	while (skb->len >= i + 2 + stat_len) {		u16 dlci;		u8 state = 0;		if (skb->data[i] != (mode_is(hdlc, MODE_FR_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, &state);		pvc = find_pvc(hdlc, dlci);		if (pvc)			pvc->newstate = state;		else if (state == PVC_STATE_NEW)			printk(KERN_INFO "%s: new PVC available, DLCI=%u\n",			       hdlc_to_name(hdlc), dlci);		i += stat_len;	}	pvc = hdlc->first_pvc;	while (pvc) {		if (pvc->newstate == PVC_STATE_NEW)			pvc->newstate = PVC_STATE_ACTIVE;		pvc->newstate |= (pvc->state &				  ~(PVC_STATE_NEW|PVC_STATE_ACTIVE));		if (pvc->state != pvc->newstate) {			pvc->state = pvc->newstate;			fr_log_dlci_active(pvc);		}		pvc = pvc->next;	}	/* Next full report after N391 polls */	hdlc->lmi.N391cnt = hdlc->lmi.N391;	return 0;}static void fr_netif(hdlc_device *hdlc, struct sk_buff *skb){	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 (data[3] == LMI_PROTO) {			if (fr_lmi_recv(hdlc, skb))				goto rx_error;			else {				/* No request pending */				hdlc->lmi.state &= ~LINK_STATE_REQUEST;				hdlc->lmi.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 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 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 & PVC_STATE_FECN) != (fh->fecn ? PVC_STATE_FECN : 0)) {#ifdef DEBUG_FECN		printk(KERN_DEBUG "%s: FECN O%s\n", pvc_to_name(pvc),		       fh->fecn ? "N" : "FF");#endif		pvc->state ^= PVC_STATE_FECN;	}	if ((pvc->state & PVC_STATE_BECN) != (fh->becn ? PVC_STATE_BECN : 0)) {#ifdef DEBUG_FECN		printk(KERN_DEBUG "%s: BECN O%s\n", pvc_to_name(pvc),		       fh->becn ? "N" : "FF");#endif		pvc->state ^= PVC_STATE_BECN;	}	if (pvc->state & PVC_STATE_BECN)		pvc->stats.rx_compressed++;	if (data[3] == NLPID_IP) {		skb_pull(skb, 4); /* Remove 4-byte header (hdr, UI, NLPID) */		skb->protocol = htons(ETH_P_IP);		skb->dev = &pvc->netdev;		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);		skb->dev = &pvc->netdev;		netif_rx(skb);		return;	}	if (data[3] == FR_PAD && data[4] == NLPID_SNAP && data[5] == FR_PAD &&	    data[6] == FR_PAD && data[7] == FR_PAD &&	    ((data[8]<<8) | data[9]) == ETH_P_ARP) {		skb_pull(skb, 10);		skb->protocol = htons(ETH_P_ARP);		skb->dev = &pvc->netdev;		netif_rx(skb);		return;	}	printk(KERN_INFO "%s: Unusupported protocol %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 void fr_cisco_open(hdlc_device *hdlc){	hdlc->lmi.state = LINK_STATE_CHANGED;	hdlc->lmi.txseq = hdlc->lmi.rxseq = 0;	hdlc->lmi.last_errors = 0xFFFFFFFF;	hdlc->lmi.N391cnt = 0;	init_timer(&hdlc->timer);	hdlc->timer.expires = jiffies + HZ; /* First poll after 1 second */	hdlc->timer.function = mode_is(hdlc, MODE_FR) ? fr_timer : cisco_timer;	hdlc->timer.data = (unsigned long)hdlc;	add_timer(&hdlc->timer);}static void fr_cisco_close(hdlc_device *hdlc){	pvc_device *pvc = hdlc->first_pvc;	del_timer_sync(&hdlc->timer);	while(pvc) {		/* NULL in Cisco mode */		dev_close(&pvc->netdev); /* Shutdown all PVCs for this FRAD */		pvc = pvc->next;	}}/****************************************************************** * *     generic HDLC routines * *****************************************************************/static int hdlc_change_mtu(struct net_device *dev, int new_mtu){	if ((new_mtu < 68) || (new_mtu > HDLC_MAX_MTU))		return -EINVAL;	dev->mtu = new_mtu;	return 0;}/******************************************************** * * PVC device routines * *******************************************************/static int pvc_open(struct net_device *dev){	pvc_device *pvc = dev_to_pvc(dev);	int result = 0;	if ((hdlc_to_dev(pvc->master)->flags & IFF_UP) == 0)		return -EIO;  /* Master must be UP in order to activate PVC */	memset(&(pvc->stats), 0, sizeof(struct net_device_stats));	pvc->state = 0;	if (!mode_is(pvc->master, MODE_SOFT) && pvc->master->open_pvc)		result = pvc->master->open_pvc(pvc);	if (result)		return result;	pvc->master->lmi.state |= LINK_STATE_CHANGED;	return 0;}static int pvc_close(struct net_device *dev){	pvc_device *pvc = dev_to_pvc(dev);	pvc->state = 0;	if (!mode_is(pvc->master, MODE_SOFT) && pvc->master->close_pvc)		pvc->master->close_pvc(pvc);	pvc->master->lmi.state |= LINK_STATE_CHANGED;	return 0;}static int pvc_xmit(struct sk_buff *skb, struct net_device *dev){	pvc_device *pvc = dev_to_pvc(dev);	if (pvc->state & PVC_STATE_ACTIVE) {		skb->dev = hdlc_to_dev(pvc->master);		pvc->stats.tx_bytes += skb->len;		pvc->stats.tx_packets++;		if (pvc->state & PVC_STATE_FECN)			pvc->stats.tx_compressed++; /* TX Congestion counter */		dev_queue_xmit(skb);	} else {		pvc->stats.tx_dropped++;		dev_kfree_skb(skb);	}	return 0;}static struct net_device_stats *pvc_get_stats(struct net_device *dev){	pvc_device *pvc = dev_to_pvc(dev);	return &pvc->stats;}static int pvc_change_mtu(struct net_device *dev, int new_mtu){	if ((new_mtu < 68) || (new_mtu > HDLC_MAX_MTU))		return -EINVAL;	dev->mtu = new_mtu;	return 0;}static void destroy_pvc_list(hdlc_device *hdlc){	pvc_device *pvc = hdlc->first_pvc;	while(pvc) {		pvc_device *next = pvc->next;		unregister_netdevice(&pvc->netdev);		kfree(pvc);		pvc = next;	}	hdlc->first_pvc = NULL;	/* All PVCs destroyed */	hdlc->pvc_count = 0;	hdlc->lmi.state |= LINK_STATE_CHANGED;}/******************************************************** * * X.25 protocol support routines * *******************************************************/#ifdef CONFIG_HDLC_X25/* These functions are callbacks called by LAPB layer */void x25_connect_disconnect(void *token, int reason, int code){	hdlc_device *hdlc = token;	struct sk_buff *skb;	unsigned char *ptr;	if ((skb = dev_alloc_skb(1)) == NULL) {		printk(KERN_ERR "%s: out of memory\n", hdlc_to_name(hdlc));		return;	}	ptr = skb_put(skb, 1);	*ptr = code;	skb->dev = hdlc_to_dev(hdlc);	skb->protocol = htons(ETH_P_X25);	skb->mac.raw = skb->data;	skb->pkt_type = PACKET_HOST;	netif_rx(skb);}void x25_connected(void *token, int reason){	x25_connect_disconnect(token, reason, 1);}void x25_disconnected(void *token, int reason){	x25_connect_disconnect(token, reason, 2);}int x25_data_indication(void *token, struct sk_buff *skb){	hdlc_device *hdlc = token;	unsigned char *ptr;	ptr = skb_push(skb, 1);	*ptr = 0;	skb->dev = hdlc_to_dev(hdlc);	skb->protocol = htons(ETH_P_X25);	skb->mac.raw = skb->data;	skb->pkt_type = PACKET_HOST;	return netif_rx(skb);}void x25_data_transmit(void *token, struct sk_buff *skb){	hdlc_device *hdlc = token;	hdlc->xmit(hdlc, skb);	/* Ignore return value :-( */}#endif /* CONFIG_HDLC_X25 *//******************************************************** * * HDLC device routines * *******************************************************/static int hdlc_open(struct net_device *dev){	hdlc_device *hdlc = dev_to_hdlc(dev);	int result;	if (hdlc->mode == MODE_NONE)		return -ENOSYS;	memset(&(hdlc->stats), 0, sizeof(struct net_device_stats));	if (mode_is(hdlc, MODE_FR | MODE_SOFT) ||	    mode_is(hdlc, MODE_CISCO | MODE_SOFT))		fr_cisco_open(hdlc);#ifdef CONFIG_HDLC_PPP	else if (mode_is(hdlc, MODE_PPP | MODE_SOFT)) {		sppp_attach(&hdlc->pppdev);		/* sppp_attach nukes them. We don't need syncppp's ioctl */		dev->do_ioctl = hdlc_ioctl;		hdlc->pppdev.sppp.pp_flags &= ~PP_CISCO;		dev->type = ARPHRD_PPP;		result = sppp_open(dev);		if (result) {			sppp_detach(dev);			return result;		}	}#endif#ifdef CONFIG_HDLC_X25

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲同性gay激情无套| 亚洲精品一区在线观看| 国产一区二区三区免费播放 | 日韩毛片在线免费观看| 国产欧美日韩不卡| 久久精品一区二区| 精品va天堂亚洲国产| 91精品国产乱| 欧美日韩精品一二三区| 欧美日韩久久一区| 91精品国产高清一区二区三区 | 在线中文字幕不卡| 色一情一乱一乱一91av| bt7086福利一区国产| 成人av网站在线观看免费| 国产盗摄精品一区二区三区在线| 国产精品66部| 床上的激情91.| 色一情一伦一子一伦一区| 日本韩国视频一区二区| 2021中文字幕一区亚洲| 精品处破学生在线二十三| 久久久久88色偷偷免费| 国产精品成人在线观看| 亚洲综合男人的天堂| 男人的j进女人的j一区| 国产成人无遮挡在线视频| eeuss鲁片一区二区三区| 欧洲一区二区av| 欧美一区二区视频观看视频| 久久免费美女视频| 一区二区三区色| 蜜桃精品视频在线| 国产白丝网站精品污在线入口| aaa亚洲精品| 欧美裸体bbwbbwbbw| 国产情人综合久久777777| 一二三四社区欧美黄| 国内精品国产三级国产a久久| caoporm超碰国产精品| 7777精品伊人久久久大香线蕉超级流畅| 日韩一区二区三区av| 中文字幕一区二区三中文字幕| 天堂av在线一区| 成人免费看的视频| 日韩欧美一区二区在线视频| 国产精品午夜春色av| 青草国产精品久久久久久| 成人app软件下载大全免费| 欧美日韩精品欧美日韩精品一 | 久久精品在这里| 亚洲尤物在线视频观看| 国产精品中文字幕日韩精品| 91麻豆视频网站| 久久久亚洲欧洲日产国码αv| 性欧美大战久久久久久久久| 国产精品自拍三区| 欧美老女人在线| 亚洲特级片在线| 国产伦精品一区二区三区在线观看| 色拍拍在线精品视频8848| 久久一区二区三区四区| 青青草成人在线观看| 欧美日韩免费不卡视频一区二区三区| 国产欧美中文在线| 国产乱理伦片在线观看夜一区| 91精品久久久久久久99蜜桃| 亚洲一区二区在线免费观看视频| av成人免费在线| 国产欧美一区二区精品忘忧草| 久久不见久久见免费视频1| 欧美日韩一二三区| 亚洲一区在线电影| 日本二三区不卡| 国产精品天干天干在线综合| 国产高清成人在线| 久久精品视频一区二区| 国产一区日韩二区欧美三区| 欧美成人激情免费网| 免费不卡在线观看| 精品国产亚洲在线| 日韩电影在线免费看| 日韩一卡二卡三卡| 麻豆精品视频在线| 欧美大片在线观看一区二区| 麻豆国产一区二区| 2020国产精品| 国产一区二区三区在线观看免费 | 久久精品国内一区二区三区| 久久久天堂av| 黑人巨大精品欧美黑白配亚洲| 精品国产一区二区三区久久久蜜月| 久久精品国产精品亚洲综合| 日韩你懂的在线观看| 国产一区二区三区四| 国产亚洲成aⅴ人片在线观看| 国产成人av一区二区| ...av二区三区久久精品| 91在线精品一区二区三区| 洋洋成人永久网站入口| 正在播放一区二区| 免费不卡在线视频| 欧美高清在线一区二区| 色哟哟国产精品免费观看| 丝袜国产日韩另类美女| 久久久国产一区二区三区四区小说 | 99re这里都是精品| 一区二区三区国产豹纹内裤在线| 欧美日韩国产高清一区| 韩国三级在线一区| 亚洲精品乱码久久久久久黑人| 欧美麻豆精品久久久久久| 国产成人午夜视频| 香蕉av福利精品导航| 久久看人人爽人人| 91豆麻精品91久久久久久| 免费成人美女在线观看.| 国产精品区一区二区三区| 欧美日韩二区三区| 国产91富婆露脸刺激对白| 亚洲1区2区3区视频| 国产三区在线成人av| 欧美在线三级电影| 成人性视频免费网站| 日韩电影在线观看电影| 亚洲婷婷综合久久一本伊一区| 日韩精品资源二区在线| 色伊人久久综合中文字幕| 国产精品一区2区| 亚洲成av人影院| 亚洲人成7777| 日本一区二区三区在线不卡| 91精品国产黑色紧身裤美女| 日本黄色一区二区| 不卡电影一区二区三区| 国产真实乱偷精品视频免| 首页国产欧美久久| 亚洲天堂福利av| 欧美国产欧美综合| 欧美tickle裸体挠脚心vk| 欧美裸体bbwbbwbbw| 欧美日韩一级大片网址| 91同城在线观看| a在线播放不卡| 成人avav影音| 国产激情视频一区二区在线观看| 蜜桃视频免费观看一区| 日韩在线观看一区二区| 亚洲福利视频导航| 亚洲一区二区三区四区在线| 亚洲色图欧美偷拍| 日韩一区在线看| 国产精品国产精品国产专区不片| 中文字幕欧美三区| 国产亚洲一区字幕| 日本一区二区成人| 国产精品久久久久aaaa| 国产精品大尺度| 亚洲天堂中文字幕| 洋洋成人永久网站入口| 亚洲男同性视频| 亚洲一区二区av电影| 午夜精品久久久久久不卡8050| 首页国产欧美久久| 奇米精品一区二区三区在线观看 | 久久电影网站中文字幕| 久久99精品久久久| 国产主播一区二区三区| 国产精品亚洲第一区在线暖暖韩国| 国产美女精品一区二区三区| 国产精品综合一区二区| 粉嫩欧美一区二区三区高清影视| www.日本不卡| 精品视频一区三区九区| 日韩欧美在线网站| 亚洲国产精品成人综合色在线婷婷| 国产精品嫩草久久久久| 一区二区三区四区视频精品免费| 一区二区三区资源| 日韩精品一二三区| 国产成人在线观看免费网站| av电影在线观看完整版一区二区| 色88888久久久久久影院按摩| 717成人午夜免费福利电影| 精品乱码亚洲一区二区不卡| 国产精品午夜在线| 婷婷一区二区三区| 国产精品一区三区| 色天使色偷偷av一区二区| 欧美精品vⅰdeose4hd| 久久精品一区四区| 亚洲无线码一区二区三区| 国产一区日韩二区欧美三区| 一本到三区不卡视频| 精品乱人伦小说| 国产精品女同互慰在线看| 蜜桃视频一区二区三区 | 欧美亚洲国产一区二区三区va| 欧美乱妇23p| 亚洲欧美怡红院|