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

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

?? hdlc.c

?? ARM S3C2410 linux2.4 內核源碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
	else if (mode_is(hdlc, MODE_X25)) {		struct lapb_register_struct cb;		cb.connect_confirmation = x25_connected;		cb.connect_indication = x25_connected;		cb.disconnect_confirmation = x25_disconnected;		cb.disconnect_indication = x25_disconnected;		cb.data_indication = x25_data_indication;		cb.data_transmit = x25_data_transmit;		result = lapb_register(hdlc, &cb);		if (result != LAPB_OK)			return result;	}#endif	result = hdlc->open(hdlc);	if (result) {		if (mode_is(hdlc, MODE_FR | MODE_SOFT) ||		    mode_is(hdlc, MODE_CISCO | MODE_SOFT))			fr_cisco_close(hdlc);#ifdef CONFIG_HDLC_PPP		else if (mode_is(hdlc, MODE_PPP | MODE_SOFT)) {			sppp_close(dev);			sppp_detach(dev);			dev->rebuild_header = NULL;			dev->change_mtu = hdlc_change_mtu;			dev->mtu = HDLC_MAX_MTU;			dev->hard_header_len = 16;		}#endif#ifdef CONFIG_HDLC_X25		else if (mode_is(hdlc, MODE_X25))			lapb_unregister(hdlc);#endif	}	return result;}static int hdlc_close(struct net_device *dev){	hdlc_device *hdlc = dev_to_hdlc(dev);	hdlc->close(hdlc);	if (mode_is(hdlc, MODE_FR | MODE_SOFT) ||	    mode_is(hdlc, MODE_CISCO | MODE_SOFT))		fr_cisco_close(hdlc);#ifdef CONFIG_HDLC_PPP	else if (mode_is(hdlc, MODE_PPP | MODE_SOFT)) {		sppp_close(dev);		sppp_detach(dev);		dev->rebuild_header = NULL;		dev->change_mtu = hdlc_change_mtu;		dev->mtu = HDLC_MAX_MTU;		dev->hard_header_len = 16;	}#endif#ifdef CONFIG_HDLC_X25	else if (mode_is(hdlc, MODE_X25))		lapb_unregister(hdlc);#endif	return 0;}static int hdlc_xmit(struct sk_buff *skb, struct net_device *dev){	hdlc_device *hdlc = dev_to_hdlc(dev);#ifdef CONFIG_HDLC_X25	if (mode_is(hdlc, MODE_X25 | MODE_SOFT)) {		int result;		/* X.25 to LAPB */		switch (skb->data[0]) {		case 0:		/* Data to be transmitted */			skb_pull(skb, 1);			if ((result = lapb_data_request(hdlc, skb)) != LAPB_OK)				dev_kfree_skb(skb);			return 0;		case 1:			if ((result = lapb_connect_request(hdlc))!= LAPB_OK) {				if (result == LAPB_CONNECTED) {				/* Send connect confirm. msg to level 3 */					x25_connected(hdlc, 0);				} else {					printk(KERN_ERR "%s: LAPB connect "					       "request failed, error code = "					       "%i\n", hdlc_to_name(hdlc),					       result);				}			}			break;		case 2:			if ((result=lapb_disconnect_request(hdlc))!=LAPB_OK) {				if (result == LAPB_NOTCONNECTED) {				/* Send disconnect confirm. msg to level 3 */					x25_disconnected(hdlc, 0);				} else {					printk(KERN_ERR "%s: LAPB disconnect "					       "request failed, error code = "					       "%i\n", hdlc_to_name(hdlc),					       result);				}			}			break;		default:			/* to be defined */			break;		}		dev_kfree_skb(skb);		return 0;	} /* MODE_X25 */#endif /* CONFIG_HDLC_X25 */	return hdlc->xmit(hdlc, skb);}void hdlc_netif_rx(hdlc_device *hdlc, struct sk_buff *skb){/* skb contains raw HDLC frame, in both hard- and software modes */	skb->mac.raw = skb->data;	switch(hdlc->mode & MODE_MASK) {	case MODE_HDLC:		skb->protocol = htons(ETH_P_IP);		skb->dev = hdlc_to_dev(hdlc);		netif_rx(skb);		return;	case MODE_FR:		fr_netif(hdlc, skb);		return;	case MODE_CISCO:		cisco_netif(hdlc, skb);		return;#ifdef CONFIG_HDLC_PPP	case MODE_PPP:#if 0		sppp_input(hdlc_to_dev(hdlc), skb);#else		skb->protocol = htons(ETH_P_WAN_PPP);		skb->dev = hdlc_to_dev(hdlc);		netif_rx(skb);#endif		return;#endif#ifdef CONFIG_HDLC_X25	case MODE_X25:		skb->dev = hdlc_to_dev(hdlc);		if (lapb_data_received(hdlc, skb) == LAPB_OK)			return;		break;#endif	}	hdlc->stats.rx_errors++;	dev_kfree_skb_any(skb);}static struct net_device_stats *hdlc_get_stats(struct net_device *dev){	return &dev_to_hdlc(dev)->stats;}static int hdlc_set_mode(hdlc_device *hdlc, int mode){	int result = -1;	/* Default to soft modes */	struct net_device *dev = hdlc_to_dev(hdlc);	if(!capable(CAP_NET_ADMIN))		return -EPERM;	if(dev->flags & IFF_UP)		return -EBUSY;	dev->addr_len = 0;	dev->hard_header = NULL;	hdlc->mode = MODE_NONE;	if (!(mode & MODE_SOFT))		switch(mode & MODE_MASK) {		case MODE_HDLC:			result = hdlc->set_mode ?				hdlc->set_mode(hdlc, MODE_HDLC) : 0;			break;		case MODE_CISCO: /* By card */#ifdef CONFIG_HDLC_PPP		case MODE_PPP:#endif#ifdef CONFIG_HDLC_X25		case MODE_X25:#endif		case MODE_FR:			result = hdlc->set_mode ?				hdlc->set_mode(hdlc, mode) : -ENOSYS;			break;		default:			return -EINVAL;		}	if (result) {		mode |= MODE_SOFT; /* Try "host software" protocol */		switch(mode & MODE_MASK) {		case MODE_CISCO:			dev->hard_header = cisco_hard_header;			break;#ifdef CONFIG_HDLC_PPP		case MODE_PPP:			break;#endif#ifdef CONFIG_HDLC_X25		case MODE_X25:			break;#endif		case MODE_FR:			dev->hard_header = fr_hard_header;			dev->addr_len = 2;			*(u16*)dev->dev_addr = htons(LMI_DLCI);			dlci_to_q922(dev->broadcast, LMI_DLCI);			break;		default:			return -EINVAL;		}		result = hdlc->set_mode ?			hdlc->set_mode(hdlc, MODE_HDLC) : 0;	}	if (result)		return result;	hdlc->mode = mode;	switch(mode & MODE_MASK) {#ifdef CONFIG_HDLC_PPP	case MODE_PPP:   dev->type = ARPHRD_PPP;   break;#endif#ifdef CONFIG_HDLC_X25	case MODE_X25:   dev->type = ARPHRD_X25;   break;#endif	case MODE_FR:    dev->type = ARPHRD_FRAD;  break;	case MODE_CISCO: dev->type = ARPHRD_CISCO; break;	default:         dev->type = ARPHRD_RAWHDLC;	}	memset(&(hdlc->stats), 0, sizeof(struct net_device_stats));	destroy_pvc_list(hdlc);	return 0;}static int hdlc_fr_pvc(hdlc_device *hdlc, int dlci){	pvc_device **pvc_p = &hdlc->first_pvc;	pvc_device *pvc;	int result, create = 1;	/* Create or delete PVC */	if(!capable(CAP_NET_ADMIN))		return -EPERM;	if(dlci<0) {		dlci = -dlci;		create = 0;	}	if(dlci <= 0 || dlci >= 1024)		return -EINVAL;	/* Only 10 bits for DLCI, DLCI=0 is reserved */	if(!mode_is(hdlc, MODE_FR))		return -EINVAL;	/* Only meaningfull on FR */	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 "			       "hdlc_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;		pvc->netdev.irq = hdlc_to_dev(hdlc)->irq;		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;		}		if (!mode_is(hdlc, MODE_SOFT) && hdlc->create_pvc) {			result = hdlc->create_pvc(pvc);			if (result) {				unregister_netdevice(&pvc->netdev);				kfree(pvc);				*pvc_p = NULL;				return result;			}		}		hdlc->lmi.state |= LINK_STATE_CHANGED;		hdlc->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 */	if (!mode_is(hdlc, MODE_SOFT) && hdlc->destroy_pvc)		hdlc->destroy_pvc(pvc);	hdlc->lmi.state |= LINK_STATE_CHANGED;	hdlc->pvc_count--;	*pvc_p = pvc->next;	unregister_netdevice(&pvc->netdev);	kfree(pvc);	return 0;}static int hdlc_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd){	hdlc_device *hdlc = dev_to_hdlc(dev);	switch(cmd) {	case HDLCGMODE:		ifr->ifr_ifru.ifru_ivalue = hdlc->mode;		return 0;	case HDLCSMODE:		return hdlc_set_mode(hdlc, ifr->ifr_ifru.ifru_ivalue);	case HDLCPVC:		return hdlc_fr_pvc(hdlc, ifr->ifr_ifru.ifru_ivalue);	default:		if (hdlc->ioctl != NULL)			return hdlc->ioctl(hdlc, ifr, cmd);	}	return -EINVAL;}static int hdlc_init(struct net_device *dev){	hdlc_device *hdlc = dev_to_hdlc(dev);	memset(&(hdlc->stats), 0, sizeof(struct net_device_stats));	dev->get_stats = hdlc_get_stats;	dev->open = hdlc_open;	dev->stop = hdlc_close;	dev->hard_start_xmit = hdlc_xmit;	dev->do_ioctl = hdlc_ioctl;	dev->change_mtu = hdlc_change_mtu;	dev->mtu = HDLC_MAX_MTU;	dev->type = ARPHRD_RAWHDLC;	dev->hard_header_len = 16;	dev->flags = IFF_POINTOPOINT | IFF_NOARP;	return 0;}int register_hdlc_device(hdlc_device *hdlc){	int result;	struct net_device *dev = hdlc_to_dev(hdlc);	dev->init = hdlc_init;	dev->priv = &hdlc->syncppp_ptr;	hdlc->syncppp_ptr = &hdlc->pppdev;	hdlc->pppdev.dev = dev;	hdlc->mode = MODE_NONE;	hdlc->lmi.T391 = 10;	/* polling verification timer */	hdlc->lmi.T392 = 15;	/* link integrity verification polling timer */	hdlc->lmi.N391 = 6;	/* full status polling counter */	hdlc->lmi.N392 = 3;	/* error threshold */	hdlc->lmi.N393 = 4;	/* monitored events count */	result = dev_alloc_name(dev, "hdlc%d");	if (result<0)		return result;	result = register_netdev(dev);	if (result != 0)		return -EIO;	MOD_INC_USE_COUNT;	return 0;}void unregister_hdlc_device(hdlc_device *hdlc){	destroy_pvc_list(hdlc);	unregister_netdev(hdlc_to_dev(hdlc));	MOD_DEC_USE_COUNT;}MODULE_AUTHOR("Krzysztof Halasa <khc@pm.waw.pl>");MODULE_DESCRIPTION("HDLC support module");MODULE_LICENSE("GPL");EXPORT_SYMBOL(hdlc_netif_rx);EXPORT_SYMBOL(register_hdlc_device);EXPORT_SYMBOL(unregister_hdlc_device);static int __init hdlc_module_init(void){	printk(KERN_INFO "%s\n", version);	return 0;}module_init(hdlc_module_init);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区91| 成人sese在线| 国产二区国产一区在线观看| 国产精品色在线观看| 日韩欧美激情四射| 国产亚洲欧美一区在线观看| 日韩理论片网站| 午夜国产不卡在线观看视频| 另类成人小视频在线| 成人午夜视频在线| 欧美日韩一区二区三区四区| 久久久久久麻豆| 亚洲精品精品亚洲| 另类小说图片综合网| 成人在线视频一区二区| 欧美视频日韩视频在线观看| 精品成人a区在线观看| 日韩美女视频一区二区 | 国产在线看一区| 99精品视频一区| 欧美成人免费网站| 一区二区三区中文字幕| 久久99久久99小草精品免视看| 不卡的av在线| 精品久久久久一区| 亚洲一区电影777| 国产精品1024久久| 6080yy午夜一二三区久久| 欧美激情在线观看视频免费| 天天做天天摸天天爽国产一区| 丁香婷婷综合激情五月色| 欧美丰满美乳xxx高潮www| 国产精品每日更新在线播放网址| 日韩黄色免费网站| 色网综合在线观看| 久久久三级国产网站| 亚洲成av人在线观看| 播五月开心婷婷综合| 日韩欧美的一区| 亚洲一区二区成人在线观看| 国产精品一区二区在线观看网站| 欧美三区在线观看| 亚洲视频1区2区| 国产高清视频一区| 91麻豆精品国产91久久久久久 | 粉嫩高潮美女一区二区三区 | 激情综合网激情| 91精品福利在线| 欧美日韩精品系列| 日韩一区二区三区高清免费看看| 亚洲色图.com| 成人免费视频网站在线观看| 精品少妇一区二区三区视频免付费| 一级日本不卡的影视| 成人一区在线观看| 久久精品人人爽人人爽| 天堂资源在线中文精品| 色激情天天射综合网| 中文字幕一区在线观看| 国产成人在线电影| 久久九九影视网| 激情小说亚洲一区| 欧美一卡2卡三卡4卡5免费| 亚洲成人动漫av| 欧美四级电影在线观看| 一区二区三区四区不卡视频| a级精品国产片在线观看| 久久久久久97三级| 精品一区免费av| 精品伦理精品一区| 九九精品视频在线看| 欧美成人高清电影在线| 久久97超碰国产精品超碰| 日韩欧美一区在线| 激情另类小说区图片区视频区| 91精品国产91热久久久做人人| 亚洲第一精品在线| 欧美巨大另类极品videosbest | 日本一区二区三区久久久久久久久不 | 欧美一区二区三区在线看| 综合自拍亚洲综合图不卡区| 国产乱子轮精品视频| 日韩一区二区精品葵司在线| 久久国产精品99久久久久久老狼| 欧美美女一区二区| 亚洲高清中文字幕| 欧美影院一区二区三区| 一区二区国产盗摄色噜噜| 91视频国产资源| 亚洲欧美另类在线| 一本到高清视频免费精品| 亚洲欧美激情一区二区| 一本在线高清不卡dvd| 综合欧美亚洲日本| 国产高清久久久久| 综合av第一页| 在线视频中文字幕一区二区| 日韩午夜激情免费电影| 亚洲手机成人高清视频| 极品瑜伽女神91| 2023国产一二三区日本精品2022| 蜜乳av一区二区| 欧美电影免费观看高清完整版在线 | 成人午夜在线播放| 久久精品国产999大香线蕉| 欧美韩国日本不卡| 日本乱人伦一区| 日本v片在线高清不卡在线观看| 久久日韩粉嫩一区二区三区 | 久久久精品黄色| 色偷偷成人一区二区三区91| 麻豆精品视频在线观看视频| 亚洲精选视频免费看| 欧美zozozo| 欧美色国产精品| 国产一区二区在线影院| 亚洲天堂成人在线观看| www成人在线观看| 91精品婷婷国产综合久久性色 | 欧美视频在线一区| 国产成人啪免费观看软件| 日韩电影在线一区| 亚洲国产激情av| 欧美美女网站色| 色婷婷激情综合| 欧美高清视频一二三区| 亚洲精品欧美二区三区中文字幕| 久久av中文字幕片| 91福利在线播放| 日韩主播视频在线| 国产丝袜在线精品| 色哦色哦哦色天天综合| 免费在线观看成人| 日本一区二区免费在线观看视频| 91网站最新地址| 日本欧美加勒比视频| 欧美成人国产一区二区| 欧美性生活大片视频| 蜜臀久久久久久久| 国产精品激情偷乱一区二区∴| 欧美在线你懂得| 国产麻豆精品久久一二三| 一区二区高清在线| 久久你懂得1024| 91免费在线播放| 在线观看视频一区二区| 日韩写真欧美这视频| 中文字幕av一区 二区| 欧美国产一区在线| 亚洲精品videosex极品| 亚洲自拍偷拍网站| 日韩精品三区四区| 亚洲大片一区二区三区| 日韩黄色在线观看| 久久99国产精品尤物| 粉嫩一区二区三区在线看| 一本色道久久综合精品竹菊| 这里只有精品99re| 国产欧美日韩不卡免费| 一区二区三区四区乱视频| 五月天欧美精品| 狠狠色综合播放一区二区| 成人精品视频一区| 亚洲欧美日韩在线播放| 韩国成人在线视频| 中文av字幕一区| 亚洲自拍偷拍图区| 国产美女在线精品| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 久久99精品久久久久| 国产精品全国免费观看高清| 欧美一区二区在线观看| 中文一区二区在线观看| 日韩欧美高清在线| 欧美日韩美女一区二区| 日韩中文字幕不卡| 国产精品人成在线观看免费| 欧美色爱综合网| av电影天堂一区二区在线 | 91美女视频网站| 国产suv一区二区三区88区| 国产精品白丝av| 久久99国产精品麻豆| 蜜桃av一区二区在线观看| 一区二区高清视频在线观看| 一区二区三区资源| 国产精品网站在线观看| 国产+成+人+亚洲欧洲自线| 精品国产伦一区二区三区观看体验| 亚洲成av人片在线观看无码| 91丨九色丨蝌蚪富婆spa| 日韩毛片在线免费观看| 91丝袜美腿高跟国产极品老师| 日韩精品专区在线影院重磅| 国产一区二区美女| 久久精品一区八戒影视| 成人综合在线视频| 精品国产三级a在线观看| 裸体在线国模精品偷拍| 欧美日韩中文字幕一区二区|