/* ****************************************************************************** * INTERPEAK SOURCE FILE * * Document no: @(#) $Name: VXWORKS_ITER40_2019102207 $ $RCSfile: ip8021x_rsn_ie.c,v $ $Revision: 1.3 $ * $Source: /home/interpeak/CVSRoot/ip8021x/src/ip8021x_rsn_ie.c,v $ * $Author: krosenfe $ * $State: Exp $ $Locker: $ * * INTERPEAK_COPYRIGHT_STRING * Design and implementation by Roger Boden ****************************************************************************** */ /* **************************************************************************** * 1 DESCRIPTION **************************************************************************** */ /* **************************************************************************** * 2 CONFIGURATION **************************************************************************** */ #include "ip8021x_config.h" /* **************************************************************************** * 3 INCLUDE FILES **************************************************************************** */ #define IPCOM_USE_CLIB_PROTO #include #include #include #include #include #include "ip8021x.h" #include "ip8021x_h.h" #include "ip8021x_rsn_ie.h" /* **************************************************************************** * 4 DEFINES **************************************************************************** */ /* **************************************************************************** * 5 TYPES **************************************************************************** */ /* **************************************************************************** * 6 EXTERN PROTOTYPES **************************************************************************** */ /* **************************************************************************** * 7 LOCAL PROTOTYPES **************************************************************************** */ /* **************************************************************************** * 8 DATA **************************************************************************** */ Ip_u8 IP8021x_RSN_IE_TKIP[] = { 0x00, 0x0f, 0xac, 0x02 }; Ip_u8 IP8021x_RSN_IE_PSK[] = { 0x00, 0x0f, 0xac, 0x02 }; /* **************************************************************************** * 9 STATIC FUNCTIONS **************************************************************************** */ /* **************************************************************************** * 10 GLOBAL FUNCTIONS **************************************************************************** */ IP_GLOBAL Ip_err ip8021x_pkt_put_rsn_ie(Ip8021x_pkt* pkt, Ip8021x_rsn_ie* rsn_ie) { int space_left; int rsn_ie_size; Ip_u8* ptr; space_left = pkt->len-pkt->end; rsn_ie_size = 1+1+2+4+2+(rsn_ie->pairwise_cipher_suite_len)*4+2 +(rsn_ie->auth_key_mgnt_len)*4+2+(rsn_ie->pmkid_len)*16; /* is packet large enough to hold rsn_ie? */ if(space_leftpairwise_cipher_suite_len<=0 || rsn_ie->pairwise_cipher_suite_len<=0) { IPCOM_LOG2(ERR, "ip8021x_pkt_put_rsn_ie :: invalid rsn_ie: cipher_len: %d, akm_len: %d", rsn_ie->pairwise_cipher_suite_len, rsn_ie->pairwise_cipher_suite_len); return IPCOM_ERR_INVALID_ARG; } ptr = &pkt->buf[pkt->end]; *ptr++ = rsn_ie->id; *ptr++ = rsn_ie_size-2; /* id and length fields not included rsn ie length count */ ipcom_memcpy(ptr, rsn_ie->version, 6); /* version and group cipher fields */ ptr += 6; IP_SET_HTONS(ptr, rsn_ie->pairwise_cipher_suite_len); ptr += 2; ipcom_memcpy(ptr, rsn_ie->pairwise_cipher_suite, (rsn_ie->pairwise_cipher_suite_len)*4); ptr += 4*rsn_ie->pairwise_cipher_suite_len; IP_SET_HTONS(ptr, rsn_ie->auth_key_mgnt_len); ptr += 2; ipcom_memcpy(ptr, rsn_ie->auth_key_mgnt, 4*(rsn_ie->auth_key_mgnt_len)); ptr += 4*rsn_ie->auth_key_mgnt_len; IP_SET_HTONS(ptr, rsn_ie->pmkid_len); ptr += 2; if(rsn_ie->pmkid_len != 0) ipcom_memcpy(ptr, rsn_ie->pmkid, 16*(rsn_ie->pmkid_len)); pkt->end += rsn_ie_size; return IPCOM_SUCCESS; } /* *=========================================================================== * ip8021x_rsn_ie_set_default *=========================================================================== * Description: * Parameters: * Returns: * */ IP_GLOBAL void ip8021x_rsn_ie_set_default(Ip8021x_rsn_ie* rsn_ie) { ipcom_memset(rsn_ie, 0, sizeof(Ip8021x_rsn_ie)); rsn_ie->id = 0x30; rsn_ie->version[0] = 1; rsn_ie->version[1] = 0; ipcom_memcpy(rsn_ie->grp_cipher_suite, IP8021x_RSN_IE_TKIP, sizeof(IP8021x_RSN_IE_TKIP)); (Ip_u16)rsn_ie->pairwise_cipher_suite_len = 1; ipcom_memcpy(rsn_ie->pairwise_cipher_suite, IP8021x_RSN_IE_TKIP, sizeof(IP8021x_RSN_IE_TKIP)); (Ip_u16)rsn_ie->auth_key_mgnt_len = 1; ipcom_memcpy(rsn_ie->auth_key_mgnt, IP8021x_RSN_IE_PSK, sizeof(IP8021x_RSN_IE_PSK)); (Ip_u16)rsn_ie->rsn_cap = 0; (Ip_u16)rsn_ie->pmkid_len = 0; } /* **************************************************************************** * 11 PUBLIC FUNCTIONS **************************************************************************** */ /* **************************************************************************** * END OF FILE **************************************************************************** */