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

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

?? hdlc.c

?? ARM S3C2410 linux2.4 內核源碼
?? 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一区二区三区免费野_久草精品视频
欧美成人女星排名| 久草在线在线精品观看| 99re成人精品视频| 1000精品久久久久久久久| 波多野结衣中文字幕一区二区三区 | 久久狠狠亚洲综合| www精品美女久久久tv| 国产一区二区三区在线观看免费| ww亚洲ww在线观看国产| 成人综合激情网| 亚洲一区视频在线| 日韩欧美aaaaaa| 成人一区二区视频| 一区二区三区中文字幕| 67194成人在线观看| 国产中文字幕精品| 亚洲欧美在线观看| 欧美巨大另类极品videosbest | 丁香桃色午夜亚洲一区二区三区| 中文字幕不卡在线观看| 欧美视频完全免费看| 青草国产精品久久久久久| 久久综合久久久久88| 成人h精品动漫一区二区三区| 亚洲免费观看在线视频| 欧美日韩国产一二三| 国产精品自拍网站| 一区二区三国产精华液| 日韩欧美在线1卡| 白白色亚洲国产精品| 日韩国产一二三区| 日韩一区在线看| 日韩一区和二区| 99re热这里只有精品免费视频 | 国产精品久久久久久久浪潮网站| 在线影院国内精品| 激情综合五月天| 日韩理论片在线| 亚洲精品一区二区三区福利| 色综合视频在线观看| 国产原创一区二区| 五月天一区二区三区| 国产精品视频一区二区三区不卡| 56国语精品自产拍在线观看| 成人激情文学综合网| 青娱乐精品视频| 亚洲美女淫视频| 国产欧美一区二区在线| 欧美一级免费观看| 在线精品亚洲一区二区不卡| 懂色av中文字幕一区二区三区 | 欧美中文字幕一区| 成人一区在线观看| 国产又黄又大久久| 另类欧美日韩国产在线| 亚洲大尺度视频在线观看| 亚洲视频你懂的| 中文一区一区三区高中清不卡| 日韩三级中文字幕| 欧美日韩精品欧美日韩精品一综合| 成人免费看视频| 久草精品在线观看| 免费人成黄页网站在线一区二区 | 精品国产一区二区三区久久久蜜月| 色婷婷综合激情| 成人免费av在线| 国产.欧美.日韩| 国产在线一区二区| 精品一区在线看| 另类调教123区| 秋霞午夜av一区二区三区| 日韩精品福利网| 午夜精品免费在线| 午夜伊人狠狠久久| 亚洲第一久久影院| 日韩高清在线电影| 蜜桃久久精品一区二区| 蜜桃在线一区二区三区| 蜜桃视频在线观看一区| 久久aⅴ国产欧美74aaa| 麻豆91在线观看| 狠狠色综合日日| 国内一区二区视频| 国产精品一卡二| 国产成人av电影在线播放| 国产激情视频一区二区三区欧美| 国产一区二区三区香蕉| 国产精品综合在线视频| 丁香啪啪综合成人亚洲小说| gogogo免费视频观看亚洲一| 成人高清免费在线播放| 91麻豆产精品久久久久久| 91麻豆swag| 欧美一区二区三区视频免费播放| 91精品欧美综合在线观看最新 | 国产精品无遮挡| 国产精品久久久久精k8| 亚洲精品一卡二卡| 亚洲国产精品一区二区久久| 蜜臀av国产精品久久久久| 国产精品影视网| 91色在线porny| 欧美群妇大交群中文字幕| 日韩欧美一二三| 国产日韩欧美综合在线| 亚洲欧美偷拍三级| 日韩综合在线视频| 国产精品一区二区你懂的| 99久久国产综合精品麻豆| 欧美日韩国产综合一区二区| 日韩精品一区二区三区在线| 日本一区二区三区国色天香| 一区二区三区日韩精品视频| 视频一区视频二区在线观看| 国产99久久久国产精品潘金| 欧美在线不卡一区| 久久久久久久久97黄色工厂| 一区二区三区在线观看视频| 麻豆精品国产91久久久久久| 99精品国产99久久久久久白柏| 欧美三级中文字幕在线观看| 久久久99精品免费观看不卡| 国产精品毛片a∨一区二区三区| 午夜精品久久久久久久久| 国产精品亚洲综合一区在线观看| 在线亚洲免费视频| 久久综合狠狠综合久久综合88| 亚洲欧美日韩在线不卡| 精品一区二区三区在线播放| 91福利国产精品| wwwwxxxxx欧美| 亚洲成a天堂v人片| 97久久超碰国产精品| 日韩欧美国产小视频| 一区二区三区丝袜| 成人午夜精品在线| 精品久久久久久久人人人人传媒 | 五月婷婷色综合| 一本大道久久a久久综合| 26uuu国产电影一区二区| 亚洲一区在线观看免费观看电影高清| 国产精品18久久久久久久久| 91精品婷婷国产综合久久| 亚洲综合精品自拍| 成人免费视频播放| 久久久精品综合| 久久99精品久久久久久| 91 com成人网| 亚洲在线视频免费观看| 欧美亚洲禁片免费| 国产精品欧美久久久久一区二区| 免费观看一级特黄欧美大片| 欧美在线观看你懂的| 日韩一区欧美一区| caoporm超碰国产精品| 精品999在线播放| 久久精品国产999大香线蕉| 欧美日韩一级视频| 亚洲福利视频一区| 一本大道久久a久久综合| 最新不卡av在线| 99久久夜色精品国产网站| 国产免费成人在线视频| 国产精品1区2区| 国产欧美日韩麻豆91| 国产成人亚洲综合色影视| 精品国产伦一区二区三区观看方式 | 国产不卡免费视频| 久久精品亚洲麻豆av一区二区| 极品少妇xxxx精品少妇偷拍| 久久影院午夜片一区| 国内成人自拍视频| 久久久久久一级片| 国产成人av电影在线观看| 国产亚洲短视频| 国产高清无密码一区二区三区| 欧美高清在线一区| 91亚洲午夜精品久久久久久| 亚洲一区二区在线观看视频| 色综合激情五月| 亚洲成人免费av| 91精品在线免费观看| 国内精品在线播放| 国产日韩欧美精品在线| 成人sese在线| 亚洲最快最全在线视频| 欧美精品一二三四| 国模少妇一区二区三区| 欧美韩国日本综合| 色综合久久88色综合天天6 | 亚洲欧洲在线观看av| 日本精品视频一区二区| 日韩主播视频在线| 欧美mv和日韩mv国产网站| 波多野结衣一区二区三区| 中文字幕在线不卡一区| 欧美高清dvd| 国产成人自拍在线| 一区二区三区 在线观看视频| 日韩亚洲欧美综合|