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

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

?? rndis.c

?? 優龍2410linux2.6.8內核源代碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
		if (rndis_per_dev_params [configNr].ack)	    rndis_per_dev_params [configNr].ack (	    		rndis_per_dev_params [configNr].dev);	return 0;}static int rndis_keepalive_response (int configNr,				     rndis_keepalive_msg_type *buf){	rndis_keepalive_cmplt_type	*resp;	rndis_resp_t			*r;	/* host "should" check only in RNDIS_DATA_INITIALIZED state */	r = rndis_add_response (configNr, sizeof (rndis_keepalive_cmplt_type));	resp = (rndis_keepalive_cmplt_type *) r->buf;	if (!resp) return -ENOMEM;			resp->MessageType = REMOTE_NDIS_KEEPALIVE_CMPLT;	resp->MessageLength = 16;	resp->RequestID = buf->RequestID;	resp->Status = RNDIS_STATUS_SUCCESS;		if (rndis_per_dev_params [configNr].ack)	    rndis_per_dev_params [configNr].ack (	    		rndis_per_dev_params [configNr].dev);		return 0;}/*  * Device to Host Comunication  */static int rndis_indicate_status_msg (int configNr, u32 status){	rndis_indicate_status_msg_type	*resp;		rndis_resp_t			*r;		if (rndis_per_dev_params [configNr].state == RNDIS_UNINITIALIZED)	    return -ENOTSUPP;		r = rndis_add_response (configNr, 				sizeof (rndis_indicate_status_msg_type));	if (!r) return -ENOMEM;		resp = (rndis_indicate_status_msg_type *) r->buf;	if (!resp) return -ENOMEM;		resp->MessageType = REMOTE_NDIS_INDICATE_STATUS_MSG;	resp->MessageLength = 20;	resp->Status = status;	resp->StatusBufferLength = 0;	resp->StatusBufferOffset = 0;		if (rndis_per_dev_params [configNr].ack) 	    rndis_per_dev_params [configNr].ack (	    		rndis_per_dev_params [configNr].dev);	return 0;}int rndis_signal_connect (int configNr){	rndis_per_dev_params [configNr].media_state			= NDIS_MEDIA_STATE_CONNECTED;	return rndis_indicate_status_msg (configNr, 					  RNDIS_STATUS_MEDIA_CONNECT);}int rndis_signal_disconnect (int configNr){	rndis_per_dev_params [configNr].media_state			= NDIS_MEDIA_STATE_DISCONNECTED;	return rndis_indicate_status_msg (configNr,					  RNDIS_STATUS_MEDIA_DISCONNECT);}void rndis_set_host_mac (int configNr, const u8 *addr){	rndis_per_dev_params [configNr].host_mac = addr;}/*  * Message Parser  */int rndis_msg_parser (u8 configNr, u8 *buf){	u32 MsgType, MsgLength, *tmp;	struct rndis_params		*params;		if (!buf)		return -ENOMEM;		tmp = (u32 *) buf; 	MsgType = *tmp;	MsgLength = *(tmp + 1);		if (configNr >= RNDIS_MAX_CONFIGS)		return -ENOTSUPP;	params = &rndis_per_dev_params [configNr];		/* For USB: responses may take up to 10 seconds */	switch (MsgType)	{	case REMOTE_NDIS_INITIALIZE_MSG:		DEBUG(KERN_INFO "%s: REMOTE_NDIS_INITIALIZE_MSG\n", 			__FUNCTION__ );		params->state = RNDIS_INITIALIZED;		return  rndis_init_response (configNr,					     (rndis_init_msg_type *) buf);			case REMOTE_NDIS_HALT_MSG:		DEBUG(KERN_INFO "%s: REMOTE_NDIS_HALT_MSG\n",			__FUNCTION__ );		params->state = RNDIS_UNINITIALIZED;		if (params->dev) {			netif_carrier_off (params->dev);			netif_stop_queue (params->dev);		}		return 0;			case REMOTE_NDIS_QUERY_MSG:		DEBUG(KERN_INFO "%s: REMOTE_NDIS_QUERY_MSG\n", 			__FUNCTION__ );		return rndis_query_response (configNr, 					     (rndis_query_msg_type *) buf);			case REMOTE_NDIS_SET_MSG:		DEBUG(KERN_INFO "%s: REMOTE_NDIS_SET_MSG\n", 			__FUNCTION__ );		return rndis_set_response (configNr, 					   (rndis_set_msg_type *) buf);			case REMOTE_NDIS_RESET_MSG:		DEBUG(KERN_INFO "%s: REMOTE_NDIS_RESET_MSG\n", 			__FUNCTION__ );		return rndis_reset_response (configNr,					     (rndis_reset_msg_type *) buf);	case REMOTE_NDIS_KEEPALIVE_MSG:		/* For USB: host does this every 5 seconds */		DEBUG(KERN_INFO "%s: REMOTE_NDIS_KEEPALIVE_MSG\n", 			__FUNCTION__ );		return rndis_keepalive_response (configNr,						 (rndis_keepalive_msg_type *) 						 buf);			default: 		printk (KERN_ERR "%s: unknown RNDIS Message Type 0x%08X\n", 			__FUNCTION__ , MsgType);		break;	}		return -ENOTSUPP;}int rndis_register (int (* rndis_control_ack) (struct net_device *)){	u8 i;	DEBUG("%s: ", __FUNCTION__ );		for (i = 0; i < RNDIS_MAX_CONFIGS; i++) {		if (!rndis_per_dev_params [i].used) {			rndis_per_dev_params [i].used = 1;			rndis_per_dev_params [i].ack = rndis_control_ack;			DEBUG("configNr = %d\n", i);			return i;		}	}	DEBUG("failed\n");		return -1;}void rndis_deregister (int configNr){	DEBUG("%s: \n", __FUNCTION__ );		if (configNr >= RNDIS_MAX_CONFIGS) return;	rndis_per_dev_params [configNr].used = 0;		return;}int rndis_set_param_dev (u8 configNr, struct net_device *dev, 			 struct net_device_stats *stats){	DEBUG("%s:\n", __FUNCTION__ );	if (!dev || !stats) return -1;	if (configNr >= RNDIS_MAX_CONFIGS) return -1;		rndis_per_dev_params [configNr].dev = dev;	rndis_per_dev_params [configNr].stats = stats;		return 0;}int rndis_set_param_vendor (u8 configNr, u32 vendorID, const char *vendorDescr){	DEBUG("%s:\n", __FUNCTION__ );	if (!vendorDescr) return -1;	if (configNr >= RNDIS_MAX_CONFIGS) return -1;		rndis_per_dev_params [configNr].vendorID = vendorID;	rndis_per_dev_params [configNr].vendorDescr = vendorDescr;		return 0;}int rndis_set_param_medium (u8 configNr, u32 medium, u32 speed){	DEBUG("%s:\n", __FUNCTION__ );	if (configNr >= RNDIS_MAX_CONFIGS) return -1;		rndis_per_dev_params [configNr].medium = medium;	rndis_per_dev_params [configNr].speed = speed;		return 0;}void rndis_add_hdr (struct sk_buff *skb){	if (!skb) return;	skb_push (skb, sizeof (struct rndis_packet_msg_type));	memset (skb->data, 0, sizeof (struct rndis_packet_msg_type));	*((u32 *) skb->data) = 1;	*((u32 *) skb->data + 1) = skb->len;	*((u32 *) skb->data + 2) = 36;	*((u32 *) skb->data + 3) = skb->len - 44;		return;}void rndis_free_response (int configNr, u8 *buf){	rndis_resp_t		*r;	struct list_head	*act, *tmp;		list_for_each_safe (act, tmp, 			    &(rndis_per_dev_params [configNr].resp_queue))	{		r = list_entry (act, rndis_resp_t, list);		if (r && r->buf == buf) {			list_del (&r->list);			kfree (r);		}	}}u8 *rndis_get_next_response (int configNr, u32 *length){	rndis_resp_t		*r;	struct list_head 	*act, *tmp;		if (!length) return NULL;		list_for_each_safe (act, tmp, 			    &(rndis_per_dev_params [configNr].resp_queue))	{		r = list_entry (act, rndis_resp_t, list);		if (!r->send) {			r->send = 1;			*length = r->length;			return r->buf;		}	}		return NULL;}static rndis_resp_t *rndis_add_response (int configNr, u32 length){	rndis_resp_t	*r;		r = kmalloc (sizeof (rndis_resp_t) + length, GFP_ATOMIC);	if (!r) return NULL;		r->buf = (u8 *) (r + 1);	r->length = length;	r->send = 0;		list_add_tail (&r->list, 		       &(rndis_per_dev_params [configNr].resp_queue));	return r;}int rndis_rm_hdr (u8 *buf, u32 *length){	u32 i, messageLen, dataOffset;		if (!buf || !length) return -1;	if (*((u32 *) buf) != 1) return -1;		messageLen = *((u32 *) buf + 1);		dataOffset = *((u32 *) buf + 2) + 8;	if (messageLen < dataOffset || messageLen > *length) return -1;		for (i = dataOffset; i < messageLen; i++)		buf [i - dataOffset] = buf [i];			*length = messageLen - dataOffset;		return 0;}int rndis_proc_read (char *page, char **start, off_t off, int count, int *eof, 		     void *data){	char *out = page;	int len;	rndis_params *param = (rndis_params *) data;		out += snprintf (out, count, 			 "Config Nr. %d\n"			 "used      : %s\n"			 "state     : %s\n"			 "medium    : 0x%08X\n"			 "speed     : %d\n"			 "cable     : %s\n"			 "vendor ID : 0x%08X\n"			 "vendor    : %s\n", 			 param->confignr, (param->used) ? "y" : "n", 			 ({ char *s = "?";			 switch (param->state) {			 case RNDIS_UNINITIALIZED:				s = "RNDIS_UNINITIALIZED"; break;			 case RNDIS_INITIALIZED:				s = "RNDIS_INITIALIZED"; break;			 case RNDIS_DATA_INITIALIZED:				s = "RNDIS_DATA_INITIALIZED"; break;			}; s; }),			 param->medium, 			 (param->media_state) ? 0 : param->speed*100, 			 (param->media_state) ? "disconnected" : "connected",			 param->vendorID, param->vendorDescr);      		len = out - page;	len -= off;		if (len < count) {		*eof = 1;		if (len <= 0)			return 0;	} else		len = count;		*start = page + off;	return len;}int rndis_proc_write (struct file *file, const char *buffer, 		      unsigned long count, void *data){	u32 speed = 0;	int i, fl_speed = 0;		for (i = 0; i < count; i++) {		switch (*buffer) {		case '0':		case '1':		case '2':		case '3':		case '4':		case '5':		case '6':		case '7':		case '8':		case '9':			fl_speed = 1;			speed = speed*10 + *buffer - '0';			break;		case 'C':		case 'c':			rndis_signal_connect (((rndis_params *) data)				->confignr);			break;		case 'D':		case 'd':			rndis_signal_disconnect (((rndis_params *) data)				->confignr);			break;		default: 			if (fl_speed) ((rndis_params *) data)->speed = speed;			else DEBUG ("%c is not valid\n", *buffer);			break;		}				buffer++;	}		return count;}int __init rndis_init (void){	u8 i;	char name [4];	/* FIXME this should probably be /proc/driver/rndis,	 * and only if debugging is enabled	 */		if (!(rndis_connect_dir =  proc_mkdir ("rndis", NULL))) {		printk (KERN_ERR "%s: couldn't create /proc/rndis entry", 			__FUNCTION__);		return -EIO;	}		for (i = 0; i < RNDIS_MAX_CONFIGS; i++) {		sprintf (name, "%03d", i);		if (!(rndis_connect_state [i]				= create_proc_entry (name, 0660,						rndis_connect_dir))) 		{			DEBUG ("%s :remove entries", __FUNCTION__);			for (i--; i > 0; i--) {				sprintf (name, "%03d", i);				remove_proc_entry (name, rndis_connect_dir);			}			DEBUG ("\n");						remove_proc_entry ("000", rndis_connect_dir);			remove_proc_entry ("rndis", NULL);			return -EIO;		}		rndis_connect_state [i]->nlink = 1;		rndis_connect_state [i]->write_proc = rndis_proc_write;		rndis_connect_state [i]->read_proc = rndis_proc_read;		rndis_connect_state [i]->data = (void *)				(rndis_per_dev_params + i);		rndis_per_dev_params [i].confignr = i;		rndis_per_dev_params [i].used = 0;		rndis_per_dev_params [i].state = RNDIS_UNINITIALIZED;		rndis_per_dev_params [i].media_state				= NDIS_MEDIA_STATE_DISCONNECTED;		INIT_LIST_HEAD (&(rndis_per_dev_params [i].resp_queue));	}		return 0;}void rndis_exit (void){	u8 i;	char name [4];		for (i = 0; i < RNDIS_MAX_CONFIGS; i++) {		sprintf (name, "%03d", i);		remove_proc_entry (name, rndis_connect_dir);	}	remove_proc_entry ("rndis", NULL);	return;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区大片| 91精品国产一区二区三区蜜臀 | 91影视在线播放| 成人性生交大片免费看中文| 国产精品一区二区久久精品爱涩| 日日夜夜精品视频天天综合网| 亚洲成av人片在线观看无码| 亚洲成av人片一区二区| 日韩av电影免费观看高清完整版 | 欧美影院一区二区三区| 欧美亚洲一区二区在线| 欧美精品日韩精品| 日韩欧美成人一区二区| 久久久久久久久一| 中文字幕亚洲欧美在线不卡| 亚洲制服欧美中文字幕中文字幕| 偷拍一区二区三区四区| 韩国成人精品a∨在线观看| 国产精品一品视频| 99精品欧美一区| 欧美日韩在线播放一区| 欧美成人三级在线| 国产精品第五页| 亚洲国产成人精品视频| 欧美96一区二区免费视频| 国产精品影视网| 色先锋aa成人| 久久人人97超碰com| 亚洲码国产岛国毛片在线| 午夜在线成人av| 国产精品亚洲视频| 精品视频在线免费观看| 2欧美一区二区三区在线观看视频| 国产精品乱人伦一区二区| 亚洲电影中文字幕在线观看| 狠狠色丁香久久婷婷综合丁香| 一本到三区不卡视频| 久久综合丝袜日本网| 尤物在线观看一区| 久久99国产乱子伦精品免费| 在线视频一区二区三区| 久久这里都是精品| 天天综合色天天| 91久久线看在观草草青青| 精品福利一区二区三区免费视频| 亚洲美女一区二区三区| 成人午夜av在线| 日韩精品一区二区三区在线播放| 亚洲视频狠狠干| 成人黄色软件下载| 国产喂奶挤奶一区二区三区| 青青青伊人色综合久久| 欧美伊人精品成人久久综合97| 亚洲国产精品成人综合色在线婷婷| 日韩精品国产欧美| 日本高清成人免费播放| 国产精品电影一区二区三区| 国产一区高清在线| 日韩免费一区二区| 日本亚洲三级在线| 欧美人牲a欧美精品| 亚洲男人的天堂网| 成人av资源下载| 国产精品天干天干在观线| 精久久久久久久久久久| 精品美女一区二区三区| 青青青爽久久午夜综合久久午夜 | 久久国产日韩欧美精品| 欧美日韩亚洲综合| 亚洲图片一区二区| 欧美日韩卡一卡二| 亚洲不卡在线观看| 欧美性色aⅴ视频一区日韩精品| 成人免费一区二区三区在线观看| 国产精品一区二区在线看| 国产亚洲一二三区| 国产精品91一区二区| 欧美国产日韩一二三区| 波多野结衣中文字幕一区 | 日韩精品电影在线| 欧美日韩国产综合草草| 五月天丁香久久| 欧美一区二区三区思思人| 美女看a上一区| 久久奇米777| 99久久99久久综合| 亚洲国产精品久久久久秋霞影院| 91精品国产综合久久精品| 久久精品99国产国产精| 欧美激情一区二区三区四区| 成人h动漫精品| 亚洲成人自拍网| 精品伦理精品一区| 91在线小视频| 免费在线看成人av| 国产清纯白嫩初高生在线观看91| 成人高清伦理免费影院在线观看| 亚洲视频在线观看一区| 欧美伦理影视网| 福利一区在线观看| 亚洲精品视频在线| 欧美大肚乱孕交hd孕妇| 成人高清免费观看| 五月激情六月综合| 国产精品人成在线观看免费| 欧美亚日韩国产aⅴ精品中极品| 久久精品国产澳门| 亚洲日本青草视频在线怡红院| 欧美一级日韩不卡播放免费| 国产91清纯白嫩初高中在线观看 | 97久久精品人人爽人人爽蜜臀 | 国产精品高清亚洲| 欧美精选一区二区| 国产电影一区二区三区| 亚洲夂夂婷婷色拍ww47| 久久免费精品国产久精品久久久久 | 一区二区三区精品视频| 欧美精品一卡两卡| 99re成人在线| 国产成人精品一区二| 亚洲成av人片一区二区三区| 国产精品久久免费看| 日韩午夜在线影院| 99re热这里只有精品免费视频| 蜜桃视频在线观看一区| 亚洲欧美日韩国产手机在线| 欧美xxx久久| 欧美视频在线一区二区三区| 国产成人超碰人人澡人人澡| 秋霞午夜鲁丝一区二区老狼| 一区二区三区日本| 国产精品你懂的在线| 日韩欧美国产精品一区| 欧美日韩在线亚洲一区蜜芽| 91日韩精品一区| 高清beeg欧美| 国产精品夜夜嗨| 久久99精品国产麻豆婷婷洗澡| 性做久久久久久免费观看| 亚洲图片另类小说| 亚洲人成网站影音先锋播放| 337p日本欧洲亚洲大胆色噜噜| 在线电影院国产精品| 91国产免费看| 欧美色综合网站| 色狠狠色噜噜噜综合网| 99精品欧美一区二区三区综合在线| 国产黄人亚洲片| 成人av免费在线| 91小视频免费观看| 99国产精品久久久久久久久久| 福利一区二区在线| www.亚洲免费av| 91香蕉视频污| 色噜噜狠狠色综合欧洲selulu| 欧美在线观看视频在线| 欧美唯美清纯偷拍| 777a∨成人精品桃花网| 91精品国产欧美一区二区18| 91免费看片在线观看| 91在线视频播放地址| 欧洲激情一区二区| 91精品在线免费| 精品99一区二区三区| 国产精品久99| 亚洲欧美日韩中文播放| 无码av免费一区二区三区试看| 亚洲一区二区三区四区不卡| 婷婷综合五月天| 国产美女精品人人做人人爽| 大陆成人av片| 欧美中文一区二区三区| 91精品福利在线一区二区三区| 欧美福利电影网| 久久久久久一级片| 亚洲日本在线看| 久久99日本精品| 色综合一区二区| 精品国产一区a| 亚洲精品视频自拍| 国产尤物一区二区| 在线欧美小视频| 欧美成人bangbros| 亚洲欧美日韩国产另类专区 | 国产欧美一区二区三区在线看蜜臀 | 精品成人私密视频| 国产精品久久久久三级| 一个色妞综合视频在线观看| 蜜乳av一区二区| 91伊人久久大香线蕉| 日韩午夜av电影| 亚洲青青青在线视频| 精品一区二区综合| 日本精品视频一区二区| 久久久久亚洲蜜桃| 五月天亚洲精品| 91麻豆国产福利在线观看| 2024国产精品| 香蕉久久夜色精品国产使用方法| 成人一区二区三区视频|