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

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

?? hdlc.c

?? 內核linux2.4.20,可跟rtlinux3.2打補丁 組成實時linux系統,編譯內核
?? 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一区二区三区免费野_久草精品视频
欧美日韩国产三级| 久久蜜桃av一区精品变态类天堂| 老司机免费视频一区二区| 国产精品久久久久久久久免费樱桃| 欧美日韩另类一区| 国产成人精品免费网站| 老司机一区二区| 亚洲高清在线视频| 国产精品久久久久三级| 精品国产一区二区三区久久久蜜月 | 国产成人啪免费观看软件| 亚洲午夜激情网页| 亚洲你懂的在线视频| 国产日韩欧美精品在线| 91麻豆精品国产| 欧美日韩国产成人在线91| 91影院在线观看| 成人一级片网址| 国产一区欧美二区| 久久er99热精品一区二区| 日韩av一级电影| 午夜精品视频在线观看| 久久精品国产一区二区| 日韩国产精品91| 亚洲精品欧美在线| 亚洲女女做受ⅹxx高潮| 亚洲欧美视频一区| 国产精品女同一区二区三区| 国产视频一区不卡| 国产欧美一区二区在线观看| 国产日韩精品一区二区三区在线| 欧美不卡一区二区三区| 精品国产乱码久久久久久蜜臀 | 国产亚洲视频系列| 久久综合久久综合久久| 26uuu国产一区二区三区| 久久综合狠狠综合久久综合88| 日韩欧美国产三级| 欧美xfplay| 久久影音资源网| 久久久亚洲高清| 国产网站一区二区三区| 国产精品色一区二区三区| 国产精品国产成人国产三级 | 国产精品污www在线观看| 亚洲国产成人自拍| 日韩码欧中文字| 亚洲美女屁股眼交| 亚洲第一福利一区| 日韩av高清在线观看| 久久99精品国产麻豆婷婷洗澡| 激情国产一区二区| 国产精品自拍毛片| 波多野结衣91| 欧美三区在线观看| 日韩欧美专区在线| 欧美激情中文字幕一区二区| 亚洲视频精选在线| 亚洲成人动漫av| 九九国产精品视频| 成人黄页毛片网站| 欧美三级韩国三级日本一级| 欧美激情一区三区| 亚洲国产高清不卡| 天堂av在线一区| 青青草精品视频| 亚洲成人自拍网| 久久精品国产999大香线蕉| 国产一区二区按摩在线观看| 久久久亚洲午夜电影| 一本大道av一区二区在线播放| 中文一区一区三区高中清不卡| 婷婷中文字幕综合| 国产一区视频在线看| 91久久精品网| 亚洲精品精品亚洲| 色哟哟日韩精品| 国产精品第一页第二页第三页| 一区二区三区四区五区视频在线观看| 国产精品国产精品国产专区不蜜| 国产精品女上位| 亚洲最大成人网4388xx| 成人欧美一区二区三区1314 | 91美女福利视频| 国产精品99久久久久久宅男| 99视频精品免费视频| 99re亚洲国产精品| 日韩久久免费av| 久久天堂av综合合色蜜桃网| 亚洲精品国产一区二区精华液| 狠狠色丁香久久婷婷综合_中| 91超碰这里只有精品国产| 亚洲国产视频网站| 国内成人免费视频| 在线观看日产精品| 日韩午夜激情视频| 亚洲夂夂婷婷色拍ww47| 国产一区欧美一区| 欧美成人国产一区二区| 亚洲福利一区二区| 国产91露脸合集magnet| 国产丝袜欧美中文另类| 亚洲欧美日韩国产一区二区三区| 国产福利91精品一区| 欧美日本一区二区三区四区| 精品久久久影院| 五月天婷婷综合| 99久久精品免费| 欧美在线免费视屏| 国产精品私房写真福利视频| 欧美优质美女网站| 日韩av电影免费观看高清完整版在线观看| 精品免费国产一区二区三区四区| 樱花草国产18久久久久| 福利电影一区二区| 亚洲色图欧洲色图婷婷| 97超碰欧美中文字幕| 国产欧美精品在线观看| 久久99热99| 欧美videos大乳护士334| 精品一区二区三区视频在线观看| 欧美一级一级性生活免费录像| 日韩精品一区二| 日本精品免费观看高清观看| 日韩精品三区四区| 久久久久久免费网| 欧美国产综合一区二区| 久久99国内精品| 日韩欧美色综合网站| 热久久一区二区| 欧美一二三四在线| 蜜臀av性久久久久蜜臀aⅴ四虎| 欧美精品粉嫩高潮一区二区| 亚洲午夜激情av| 欧美日韩成人综合天天影院 | 亚洲尤物在线视频观看| 99re8在线精品视频免费播放| 中文字幕一区二区三区不卡 | 国产精品系列在线观看| 久久久不卡影院| 处破女av一区二区| 最新国产の精品合集bt伙计| av中文字幕亚洲| 亚洲麻豆国产自偷在线| 欧美日韩一二三区| 蜜臀国产一区二区三区在线播放| 精品国产麻豆免费人成网站| 国产伦精品一区二区三区免费迷 | av日韩在线网站| 亚洲精品高清在线| 欧美美女直播网站| 久久精品99久久久| 久久久久久久综合狠狠综合| 成人在线视频一区二区| 亚洲欧美日韩小说| 欧美日本国产一区| 国模少妇一区二区三区| 日本一区二区三区视频视频| 波多野结衣在线一区| 亚洲精品视频在线观看网站| 欧美美女直播网站| 国产主播一区二区| 亚洲女同一区二区| 这里只有精品电影| 国产成人在线影院| 亚洲日本欧美天堂| 日韩欧美国产电影| 99久久综合国产精品| 天天操天天干天天综合网| 久久久噜噜噜久噜久久综合| 99国产精品久久久久久久久久久| 日韩高清在线不卡| 国产日韩欧美激情| 欧美大肚乱孕交hd孕妇| 成人动漫在线一区| 日本不卡高清视频| 国产精品盗摄一区二区三区| 欧美精品一二三区| 成人一级片在线观看| 午夜欧美电影在线观看| 欧美国产精品v| 日韩一级二级三级| 99re视频精品| 国产毛片精品视频| 亚洲一区在线观看视频| 久久九九全国免费| 555www色欧美视频| 成人久久18免费网站麻豆| 奇米亚洲午夜久久精品| 亚洲视频小说图片| 久久久久成人黄色影片| 欧美日韩一区二区三区四区| 国产精品99久久久久| 日韩精品色哟哟| 樱桃国产成人精品视频| 中文字幕精品三区| 久久综合九色综合久久久精品综合| 欧美日韩一区二区三区视频| 91丝袜美腿高跟国产极品老师 | 国产麻豆日韩欧美久久|