Exemplo n.º 1
0
int r8712_generate_ie(struct registry_priv *pregistrypriv)
{
	int sz = 0, rateLen;
	struct wlan_bssid_ex *pdev_network = &pregistrypriv->dev_network;
	u8 *ie = pdev_network->IEs;

	/*timestamp will be inserted by hardware*/
	sz += 8;
	ie += sz;
	/*beacon interval : 2bytes*/
	*(u16 *)ie = cpu_to_le16((u16)pdev_network->Configuration.BeaconPeriod);
	sz += 2;
	ie += 2;
	/*capability info*/
	*(u16 *)ie = 0;
	*(u16 *)ie |= cpu_to_le16(cap_IBSS);
	if (pregistrypriv->preamble == PREAMBLE_SHORT)
		*(u16 *)ie |= cpu_to_le16(cap_ShortPremble);
	if (pdev_network->Privacy)
		*(u16 *)ie |= cpu_to_le16(cap_Privacy);
	sz += 2;
	ie += 2;
	/*SSID*/
	ie = r8712_set_ie(ie, _SSID_IE_, pdev_network->Ssid.SsidLength,
		    pdev_network->Ssid.Ssid, &sz);
	/*supported rates*/
	set_supported_rate(pdev_network->SupportedRates,
			   pregistrypriv->wireless_mode);
	rateLen = r8712_get_rateset_len(pdev_network->SupportedRates);
	if (rateLen > 8) {
		ie = r8712_set_ie(ie, _SUPPORTEDRATES_IE_, 8,
			    pdev_network->SupportedRates, &sz);
		ie = r8712_set_ie(ie, _EXT_SUPPORTEDRATES_IE_, (rateLen - 8),
			    (pdev_network->SupportedRates + 8), &sz);
	} else
		ie = r8712_set_ie(ie, _SUPPORTEDRATES_IE_,
			    rateLen, pdev_network->SupportedRates, &sz);
	/*DS parameter set*/
	ie = r8712_set_ie(ie, _DSSET_IE_, 1,
		    (u8 *)&(pdev_network->Configuration.DSConfig), &sz);
	/*IBSS Parameter Set*/
	ie = r8712_set_ie(ie, _IBSS_PARA_IE_, 2,
		    (u8 *)&(pdev_network->Configuration.ATIMWindow), &sz);
	return sz;
}
Exemplo n.º 2
0
int generate_ie(struct registry_priv *pregistrypriv)
{
	int 	sz = 0, rateLen;
	WLAN_BSSID_EX*	pdev_network = &pregistrypriv->dev_network;
	u8*	ie = pdev_network->IEs;
	
_func_enter_;		

	//timestamp will be inserted by hardware
	sz += 8;	
	ie += sz;
	
	//beacon interval : 2bytes
	*(u16*)ie = cpu_to_le16((u16)pdev_network->Configuration.BeaconPeriod);//BCN_INTERVAL;
	sz += 2; 
	ie += 2;
	
	//capability info
	*(u16*)ie = 0;
	
	*(u16*)ie |= cpu_to_le16(cap_IBSS);

	if(pregistrypriv->preamble == PREAMBLE_SHORT)
		*(u16*)ie |= cpu_to_le16(cap_ShortPremble);
	
	if (pdev_network->Privacy)
		*(u16*)ie |= cpu_to_le16(cap_Privacy);
	
	sz += 2;
	ie += 2;
	
	//SSID
	ie = set_ie(ie, _SSID_IE_, pdev_network->Ssid.SsidLength, pdev_network->Ssid.Ssid, &sz);
	
	//supported rates
	set_supported_rate(pdev_network->SupportedRates, pregistrypriv->wireless_mode) ;
	
	rateLen = get_rateset_len(pdev_network->SupportedRates);

	if (rateLen > 8)
	{
		ie = set_ie(ie, _SUPPORTEDRATES_IE_, 8, pdev_network->SupportedRates, &sz);
		ie = set_ie(ie, _EXT_SUPPORTEDRATES_IE_, (rateLen - 8), (pdev_network->SupportedRates + 8), &sz);
	}
	else
	{
		ie = set_ie(ie, _SUPPORTEDRATES_IE_, rateLen, pdev_network->SupportedRates, &sz);
	}

	//DS parameter set
	ie = set_ie(ie, _DSSET_IE_, 1, (u8 *)&(pdev_network->Configuration.DSConfig), &sz);


	//IBSS Parameter Set
	
	ie = set_ie(ie, _IBSS_PARA_IE_, 2, (u8 *)&(pdev_network->Configuration.ATIMWindow), &sz);

	//pdev_network->IELength =  sz; //update IELength

_func_exit_;		

	//return _SUCCESS;
	return sz;
	
}