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

📄 wpa.c

📁 mx27 f14v2 源代码。包括ADS板上诸多驱动的源码。
💻 C
📖 第 1 页 / 共 2 页
字号:
        if (bouseWECAoui)
        {
            *pu8payload++ = UMI_RSN_CIPHER_SUITE_TKIP;
        }
        else
        {
            *pu8payload++ = UMI_RSN_CIPHER_SUITE_CCMP;
        }
    }
    else if (psRsnCaps->u32CapsMap & UMI_RSN_CAPS_GROUP_CIPHER_SUITE_WEP40)     
    {
        *pu8payload++ = UMI_RSN_CIPHER_SUITE_WEP40;
    }
    else if (psRsnCaps->u32CapsMap & UMI_RSN_CAPS_GROUP_CIPHER_SUITE_TKIP)      
    {
        *pu8payload++ = UMI_RSN_CIPHER_SUITE_TKIP;
    }
    else if (psRsnCaps->u32CapsMap & UMI_RSN_CAPS_GROUP_CIPHER_SUITE_WRAP)      
    {
        *pu8payload++ = UMI_RSN_CIPHER_SUITE_WRAP;
    }
    else if (psRsnCaps->u32CapsMap & UMI_RSN_CAPS_GROUP_CIPHER_SUITE_CCMP)      
    {
        *pu8payload++ = UMI_RSN_CIPHER_SUITE_CCMP;
    }
    else if (psRsnCaps->u32CapsMap & UMI_RSN_CAPS_GROUP_CIPHER_SUITE_WEP104)    
    {
        *pu8payload++ = UMI_RSN_CIPHER_SUITE_WEP104;
    }
    else
    {
        /* Error - No Group Cipher Suite selected */
        DBG_LEV0(("ERROR: Unknown RSN IE Group Cipher Suite Type, u32CapsMap = 0x%lx.\n", psRsnCaps->u32CapsMap));

        // use the appropriate default group cipher suite
        if (bouseWECAoui)
        {   // refer to Wi-Fi Protected Access (WPA) document
            *pu8payload++ = UMI_RSN_CIPHER_SUITE_TKIP;
        }
        else
        {   // refer to IEEE 802.11i Standard
            *pu8payload++ = UMI_RSN_CIPHER_SUITE_CCMP;
        }
    }

    return pu8payload;
}

/*****************************************************************************
**
** NAME         u16WPAgetPairwiseCipherSuiteCount
**
** PARAMETERS   psRsnCaps         pointer to structure with the RsnCaps 
**                                  for this Network
**
** RETURNS      Number of Pairwise Cipher Suites this Network supports 
**
** DESCRIPTION  This function examines the RsnCaps structure and returns
**              the number of Pairwise Cipher Suites this Network supports.
**
******************************************************************************/
static uint16 u16WPAgetPairwiseCipherSuiteCount(const UMI_RSN_CAPS *psRsnCaps)
{
    return (((psRsnCaps->u32CapsMap & UMI_RSN_CAPS_PAIRWISE_CIPHER_SUITE_NONE)   ? 1:0) +
            ((psRsnCaps->u32CapsMap & UMI_RSN_CAPS_PAIRWISE_CIPHER_SUITE_WEP40)  ? 1:0) +
            ((psRsnCaps->u32CapsMap & UMI_RSN_CAPS_PAIRWISE_CIPHER_SUITE_TKIP)   ? 1:0) +
            ((psRsnCaps->u32CapsMap & UMI_RSN_CAPS_PAIRWISE_CIPHER_SUITE_WRAP)   ? 1:0) +
            ((psRsnCaps->u32CapsMap & UMI_RSN_CAPS_PAIRWISE_CIPHER_SUITE_CCMP)   ? 1:0) +
            ((psRsnCaps->u32CapsMap & UMI_RSN_CAPS_PAIRWISE_CIPHER_SUITE_WEP104) ? 1:0)); 
}

/*****************************************************************************
**
** NAME         pu8WPAaddRsnIePairwiseCipherFields
**
** PARAMETERS   psRsnCaps         - pointer to structure with the RsnCaps 
**                                  for this Network
**              pu8OutPairwiseCipher - pointer to start of output field
**
** RETURNS      pointer to start of next field
**
** DESCRIPTION  This function inserts the Pairwise Cipher Suite Count and 
**              Pairwise Cipher Suite List fields into the RSN IE.
**
******************************************************************************/
static uint8 *pu8WPAaddRsnIePairwiseCipherFields(const UMI_RSN_CAPS *psRsnCaps, uint8 *pu8OutPairwiseCipher)
{
    bool bouseWECAoui = (psRsnCaps->u32CapsMap & UMI_RSN_CAPS_IE_TYPE_WECA) ? TRUE : FALSE;
    uint8 * pu8payload = pu8OutPairwiseCipher;

    /* Get the count of cipher suites */
    uint16 u16count = u16WPAgetPairwiseCipherSuiteCount(psRsnCaps);

    if (u16count == 0)
    {
        DBG_LEV0(("ERROR: Unknown RSN IE Pairwise Cipher Suite Type, u32CapsMap = 0x%lx.\n", psRsnCaps->u32CapsMap));

        // set count to 1
        u16count++;
        *pu8payload++ = (uint8) u16count;
        *pu8payload++ = (uint8)(u16count >> 8);

        // use default Pairwise cipher suite
        pu8payload = pu8WPAaddRsnIeOuiField(bouseWECAoui, pu8payload);

        // use the appropriate default pairwise cipher suite  
        if (bouseWECAoui)
        {   // refer to Wi-Fi Protected Access (WPA) document
            *pu8payload++ = UMI_RSN_CIPHER_SUITE_TKIP;
        }
        else
        {    // refer to IEEE 802.11i Standard 
            *pu8payload++ = UMI_RSN_CIPHER_SUITE_CCMP;
        }

        return pu8payload;
    }


    /* Fill in the count field */
    *pu8payload++ = (uint8) u16count;
    *pu8payload++ = (uint8)(u16count >> 8);

    /* Add cipher suite selectors */
    if (psRsnCaps->u32CapsMap & UMI_RSN_CAPS_PAIRWISE_CIPHER_SUITE_NONE)
    {
        pu8payload = pu8WPAaddRsnIeOuiField(bouseWECAoui, pu8payload);
        *pu8payload++ = UMI_RSN_CIPHER_SUITE_NONE;
    }
    if (psRsnCaps->u32CapsMap & UMI_RSN_CAPS_PAIRWISE_CIPHER_SUITE_WEP40)
    {
        pu8payload = pu8WPAaddRsnIeOuiField(bouseWECAoui, pu8payload);
        *pu8payload++ = UMI_RSN_CIPHER_SUITE_WEP40;
    }
    if (psRsnCaps->u32CapsMap & UMI_RSN_CAPS_PAIRWISE_CIPHER_SUITE_TKIP)
    {
        pu8payload = pu8WPAaddRsnIeOuiField(bouseWECAoui, pu8payload);
        *pu8payload++ = UMI_RSN_CIPHER_SUITE_TKIP;
    }
    if (psRsnCaps->u32CapsMap & UMI_RSN_CAPS_PAIRWISE_CIPHER_SUITE_WRAP)
    {
        pu8payload = pu8WPAaddRsnIeOuiField(bouseWECAoui, pu8payload);
        *pu8payload++ = UMI_RSN_CIPHER_SUITE_WRAP;
    }
    if (psRsnCaps->u32CapsMap & UMI_RSN_CAPS_PAIRWISE_CIPHER_SUITE_CCMP)
    {
        pu8payload = pu8WPAaddRsnIeOuiField(bouseWECAoui, pu8payload);
        *pu8payload++ = UMI_RSN_CIPHER_SUITE_CCMP;
    }
    if (psRsnCaps->u32CapsMap & UMI_RSN_CAPS_PAIRWISE_CIPHER_SUITE_WEP104)
    {
        pu8payload = pu8WPAaddRsnIeOuiField(bouseWECAoui, pu8payload);
        *pu8payload++ = UMI_RSN_CIPHER_SUITE_WEP104;
    }

    return pu8payload;

}

/*****************************************************************************
**
** NAME         u16WPAgetAkmSuiteCount
**
** PARAMETERS   psRsnCaps         pointer to structure with the RsnCaps 
**                                  for this Network
**
** RETURNS      Number of AKM Suites this Network supports 
**
** DESCRIPTION  This function examines the RsnCaps structure and returns
**              the number of AKM Suites this Network supports.
**
******************************************************************************/
static uint16 u16WPAgetAkmSuiteCount(const UMI_RSN_CAPS *psRsnCaps)
{
    return (((psRsnCaps->u32CapsMap & UMI_RSN_CAPS_AUTH_SUITE_IEEE802_1X)    ? 1:0) +
            ((psRsnCaps->u32CapsMap & UMI_RSN_CAPS_AUTH_SUITE_PRESHARED_KEY) ? 1:0)); 
}

/*****************************************************************************
**
** NAME         pu8WPAaddRsnIeAkmFields
**
** PARAMETERS   psRsnCaps         - pointer to structure with the RsnCaps 
**                                  for this Network
**              pu8OutPairwiseCipher - pointer to start of output field
**
** RETURNS      pointer to start of next field
**
** DESCRIPTION  This function inserts the AKM Suite Count and AKM Suite
**              List fields into the RSN IE.
**
******************************************************************************/
static uint8 *pu8WPAaddRsnIeAkmFields(const UMI_RSN_CAPS *psRsnCaps, uint8 *pu8OutAkm)
{
    bool bouseWECAoui = (psRsnCaps->u32CapsMap & UMI_RSN_CAPS_IE_TYPE_WECA) ? TRUE : FALSE;
    uint8 * pu8payload = pu8OutAkm;

    /* Get the count of AKM suites */
    uint16 u16count = u16WPAgetAkmSuiteCount(psRsnCaps);

    if (u16count == 0)
    {
        DBG_LEV0(("ERROR: Unknown RSN IE AKM Suite Type, u32CapsMap = 0x%lx.\n", psRsnCaps->u32CapsMap));

        // set count to 1
        u16count++;
        *pu8payload++ = (uint8) u16count;
        *pu8payload++ = (uint8)(u16count >> 8);

        // use default AKM suite as defined in 802.11i.
        pu8payload = pu8WPAaddRsnIeOuiField(bouseWECAoui, pu8payload);
        *pu8payload++ = UMI_RSN_KEY_MGMT_SUITE_802_1X;
        return pu8payload;
    }


    /* Fill in the count field */
    *pu8payload++ = (uint8) u16count;
    *pu8payload++ = (uint8)(u16count >> 8);

    /* Add auth suite selectors */
    if (psRsnCaps->u32CapsMap & UMI_RSN_CAPS_AUTH_SUITE_IEEE802_1X)
    {
        pu8payload = pu8WPAaddRsnIeOuiField(bouseWECAoui, pu8payload);
        *pu8payload++ = UMI_RSN_KEY_MGMT_SUITE_802_1X;
    }
    if (psRsnCaps->u32CapsMap & UMI_RSN_CAPS_AUTH_SUITE_PRESHARED_KEY)
    {
        pu8payload = pu8WPAaddRsnIeOuiField(bouseWECAoui, pu8payload);
        *pu8payload++ = UMI_RSN_KEY_MGMT_SUITE_PRESHARED;
    }

    return pu8payload;

}

/*****************************************************************************
**
** NAME         pu8WPAaddRsnIeRsnCapField
**
** PARAMETERS   psRsnCaps         - pointer to structure with the RsnCaps 
**                                  for this Network
**              pu8OutPairwiseCipher - pointer to start of output field
**
** RETURNS      pointer to start of next field
**
** DESCRIPTION  This function inserts the RSN Capabilities Field into the
**              RSN IE.
**
******************************************************************************/
static uint8 *pu8WPAaddRsnIeRsnCapField(const UMI_RSN_CAPS *psRsnCaps, uint8 *pu8OutRsnCap)
{
    /* Clear all bits */
    pu8OutRsnCap[0] = 0;
    pu8OutRsnCap[1] = 0;   // currently not used

    /* Preauthentication supported? */
    if (psRsnCaps->u32CapsMap & UMI_RSN_CAPS_PRE_AUTH_SUPPORTED)
    {
        pu8OutRsnCap[0] |= UMI_RSN_CAPS_PREAUTH_SUPPORTED;
    }

    /* Use default pairwise keys? */
    if (psRsnCaps->u32CapsMap & UMI_RSN_CAPS_USE_DEFAULT_PAIRWISE_KEY)
    {
        pu8OutRsnCap[0] |= UMI_RSN_CAPS_DEFAULT_PAIWISE_KEY;
    }

    /* Number of replay counters? */
    pu8OutRsnCap[0] |= ((psRsnCaps->u32CapsMap & UMI_RSN_CAPS_REPLAY_CNT_PW_MASK) >>
                       UMI_RSN_CAPS_REPLAY_CNT_PW_SHIFT) << UMI_RSN_CAPS_PTKSA_REPLAY_SHIFT;
    pu8OutRsnCap[0] |= ((psRsnCaps->u32CapsMap & UMI_RSN_CAPS_REPLAY_CNT_GP_MASK) >>
                       UMI_RSN_CAPS_REPLAY_CNT_GP_SHIFT) << UMI_RSN_CAPS_GTKSA_REPLAY_SHIFT;

    pu8OutRsnCap += UMI_RSN_IE_CAPABILITIES_LEN;

    return pu8OutRsnCap;

}

⌨️ 快捷键说明

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