⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ray_cs.c

📁 linux-2.6.15.6
💻 C
📖 第 1 页 / 共 5 页
字号:
        memcpy_toio(&ptx->var, data + ETH_HLEN,  len - ETH_HLEN);        return 0 - ETH_HLEN;    }    /* TBD do other frame types */} /* end translate_frame *//*===========================================================================*/static void ray_build_header(ray_dev_t *local, struct tx_msg __iomem *ptx, UCHAR msg_type,                unsigned char *data){    writeb(PROTOCOL_VER | msg_type, &ptx->mac.frame_ctl_1);/*** IEEE 802.11 Address field assignments *************                TODS FROMDS   addr_1     addr_2          addr_3   addr_4Adhoc           0    0        dest       src (terminal)  BSSID    N/AAP to Terminal  0    1        dest       AP(BSSID)       source   N/ATerminal to AP  1    0        AP(BSSID)  src (terminal)  dest     N/AAP to AP        1    1        dest AP    src AP          dest     source      *******************************************************/    if (local->net_type == ADHOC) {           writeb(0, &ptx->mac.frame_ctl_2);        memcpy_toio(ptx->mac.addr_1, ((struct ethhdr *)data)->h_dest, 2 * ADDRLEN);        memcpy_toio(ptx->mac.addr_3, local->bss_id, ADDRLEN);    }    else /* infrastructure */    {        if (local->sparm.b4.a_acting_as_ap_status)        {            writeb(FC2_FROM_DS, &ptx->mac.frame_ctl_2);            memcpy_toio(ptx->mac.addr_1, ((struct ethhdr *)data)->h_dest, ADDRLEN);            memcpy_toio(ptx->mac.addr_2, local->bss_id, 6);            memcpy_toio(ptx->mac.addr_3, ((struct ethhdr *)data)->h_source, ADDRLEN);        }        else /* Terminal */        {            writeb(FC2_TO_DS, &ptx->mac.frame_ctl_2);            memcpy_toio(ptx->mac.addr_1, local->bss_id, ADDRLEN);            memcpy_toio(ptx->mac.addr_2, ((struct ethhdr *)data)->h_source, ADDRLEN);            memcpy_toio(ptx->mac.addr_3, ((struct ethhdr *)data)->h_dest, ADDRLEN);        }    }} /* end encapsulate_frame *//*===========================================================================*/static void netdev_get_drvinfo(struct net_device *dev,			       struct ethtool_drvinfo *info){	strcpy(info->driver, "ray_cs");}static struct ethtool_ops netdev_ethtool_ops = {	.get_drvinfo		= netdev_get_drvinfo,};/*====================================================================*//*------------------------------------------------------------------*//* * Wireless Handler : get protocol name */static int ray_get_name(struct net_device *dev,			struct iw_request_info *info,			char *cwrq,			char *extra){	strcpy(cwrq, "IEEE 802.11-FH");	return 0;}/*------------------------------------------------------------------*//* * Wireless Handler : set frequency */static int ray_set_freq(struct net_device *dev,			struct iw_request_info *info,			struct iw_freq *fwrq,			char *extra){	ray_dev_t *local = (ray_dev_t *)dev->priv;	int err = -EINPROGRESS;		/* Call commit handler */	/* Reject if card is already initialised */	if(local->card_status != CARD_AWAITING_PARAM)		return -EBUSY;	/* Setting by channel number */	if ((fwrq->m > USA_HOP_MOD) || (fwrq->e > 0))		err = -EOPNOTSUPP;	else		local->sparm.b5.a_hop_pattern = fwrq->m;	return err;} /*------------------------------------------------------------------*//* * Wireless Handler : get frequency */static int ray_get_freq(struct net_device *dev,			struct iw_request_info *info,			struct iw_freq *fwrq,			char *extra){	ray_dev_t *local = (ray_dev_t *)dev->priv;	fwrq->m = local->sparm.b5.a_hop_pattern;	fwrq->e = 0;	return 0;}/*------------------------------------------------------------------*//* * Wireless Handler : set ESSID */static int ray_set_essid(struct net_device *dev,			 struct iw_request_info *info,			 struct iw_point *dwrq,			 char *extra){	ray_dev_t *local = (ray_dev_t *)dev->priv;	/* Reject if card is already initialised */	if(local->card_status != CARD_AWAITING_PARAM)		return -EBUSY;	/* Check if we asked for `any' */	if(dwrq->flags == 0) {		/* Corey : can you do that ? */		return -EOPNOTSUPP;	} else {		/* Check the size of the string */		if(dwrq->length > IW_ESSID_MAX_SIZE + 1) {			return -E2BIG;		}		/* Set the ESSID in the card */		memset(local->sparm.b5.a_current_ess_id, 0, IW_ESSID_MAX_SIZE);		memcpy(local->sparm.b5.a_current_ess_id, extra, dwrq->length);	}	return -EINPROGRESS;		/* Call commit handler */}/*------------------------------------------------------------------*//* * Wireless Handler : get ESSID */static int ray_get_essid(struct net_device *dev,			 struct iw_request_info *info,			 struct iw_point *dwrq,			 char *extra){	ray_dev_t *local = (ray_dev_t *)dev->priv;	/* Get the essid that was set */	memcpy(extra, local->sparm.b5.a_current_ess_id, IW_ESSID_MAX_SIZE);	extra[IW_ESSID_MAX_SIZE] = '\0';	/* Push it out ! */	dwrq->length = strlen(extra) + 1;	dwrq->flags = 1; /* active */	return 0;}/*------------------------------------------------------------------*//* * Wireless Handler : get AP address */static int ray_get_wap(struct net_device *dev,			struct iw_request_info *info,			struct sockaddr *awrq,			char *extra){	ray_dev_t *local = (ray_dev_t *)dev->priv;	memcpy(awrq->sa_data, local->bss_id, ETH_ALEN);	awrq->sa_family = ARPHRD_ETHER;	return 0;}/*------------------------------------------------------------------*//* * Wireless Handler : set Bit-Rate */static int ray_set_rate(struct net_device *dev,			struct iw_request_info *info,			struct iw_param *vwrq,			char *extra){	ray_dev_t *local = (ray_dev_t *)dev->priv;	/* Reject if card is already initialised */	if(local->card_status != CARD_AWAITING_PARAM)		return -EBUSY;	/* Check if rate is in range */	if((vwrq->value != 1000000) && (vwrq->value != 2000000))		return -EINVAL;	/* Hack for 1.5 Mb/s instead of 2 Mb/s */	if((local->fw_ver == 0x55) &&		/* Please check */	   (vwrq->value == 2000000))		local->net_default_tx_rate = 3;	else		local->net_default_tx_rate = vwrq->value/500000;	return 0;}/*------------------------------------------------------------------*//* * Wireless Handler : get Bit-Rate */static int ray_get_rate(struct net_device *dev,			struct iw_request_info *info,			struct iw_param *vwrq,			char *extra){	ray_dev_t *local = (ray_dev_t *)dev->priv;	if(local->net_default_tx_rate == 3)		vwrq->value = 2000000;		/* Hum... */	else		vwrq->value = local->net_default_tx_rate * 500000;	vwrq->fixed = 0;		/* We are in auto mode */	return 0;}/*------------------------------------------------------------------*//* * Wireless Handler : set RTS threshold */static int ray_set_rts(struct net_device *dev,		       struct iw_request_info *info,		       struct iw_param *vwrq,		       char *extra){	ray_dev_t *local = (ray_dev_t *)dev->priv;	int rthr = vwrq->value;	/* Reject if card is already initialised */	if(local->card_status != CARD_AWAITING_PARAM)		return -EBUSY;	/* if(wrq->u.rts.fixed == 0) we should complain */	if(vwrq->disabled)		rthr = 32767;	else {		if((rthr < 0) || (rthr > 2347)) /* What's the max packet size ??? */			return -EINVAL;	}	local->sparm.b5.a_rts_threshold[0] = (rthr >> 8) & 0xFF;	local->sparm.b5.a_rts_threshold[1] = rthr & 0xFF;	return -EINPROGRESS;		/* Call commit handler */}/*------------------------------------------------------------------*//* * Wireless Handler : get RTS threshold */static int ray_get_rts(struct net_device *dev,		       struct iw_request_info *info,		       struct iw_param *vwrq,		       char *extra){	ray_dev_t *local = (ray_dev_t *)dev->priv;	vwrq->value = (local->sparm.b5.a_rts_threshold[0] << 8)		+ local->sparm.b5.a_rts_threshold[1];	vwrq->disabled = (vwrq->value == 32767);	vwrq->fixed = 1;	return 0;}/*------------------------------------------------------------------*//* * Wireless Handler : set Fragmentation threshold */static int ray_set_frag(struct net_device *dev,			struct iw_request_info *info,			struct iw_param *vwrq,			char *extra){	ray_dev_t *local = (ray_dev_t *)dev->priv;	int fthr = vwrq->value;	/* Reject if card is already initialised */	if(local->card_status != CARD_AWAITING_PARAM)		return -EBUSY;	/* if(wrq->u.frag.fixed == 0) should complain */	if(vwrq->disabled)		fthr = 32767;	else {		if((fthr < 256) || (fthr > 2347)) /* To check out ! */			return -EINVAL;	}	local->sparm.b5.a_frag_threshold[0] = (fthr >> 8) & 0xFF;	local->sparm.b5.a_frag_threshold[1] = fthr & 0xFF;	return -EINPROGRESS;		/* Call commit handler */}/*------------------------------------------------------------------*//* * Wireless Handler : get Fragmentation threshold */static int ray_get_frag(struct net_device *dev,			struct iw_request_info *info,			struct iw_param *vwrq,			char *extra){	ray_dev_t *local = (ray_dev_t *)dev->priv;	vwrq->value = (local->sparm.b5.a_frag_threshold[0] << 8)		+ local->sparm.b5.a_frag_threshold[1];	vwrq->disabled = (vwrq->value == 32767);	vwrq->fixed = 1;	return 0;}/*------------------------------------------------------------------*//* * Wireless Handler : set Mode of Operation */static int ray_set_mode(struct net_device *dev,			struct iw_request_info *info,			__u32 *uwrq,			char *extra){	ray_dev_t *local = (ray_dev_t *)dev->priv;	int err = -EINPROGRESS;		/* Call commit handler */	char card_mode = 1;	/* Reject if card is already initialised */	if(local->card_status != CARD_AWAITING_PARAM)		return -EBUSY;	switch (*uwrq)	{	case IW_MODE_ADHOC:		card_mode = 0;		// Fall through	case IW_MODE_INFRA:		local->sparm.b5.a_network_type = card_mode;		break;	default:		err = -EINVAL;	}	return err;}/*------------------------------------------------------------------*//* * Wireless Handler : get Mode of Operation */static int ray_get_mode(struct net_device *dev,			struct iw_request_info *info,			__u32 *uwrq,			char *extra){	ray_dev_t *local = (ray_dev_t *)dev->priv;	if(local->sparm.b5.a_network_type)		*uwrq = IW_MODE_INFRA;	else		*uwrq = IW_MODE_ADHOC;	return 0;}/*------------------------------------------------------------------*//* * Wireless Handler : get range info

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -