/** * addEapolHeaders * * FUNCTION: * Prepends the EAPOL header to a packet. * * ASSUMPTIONS: * The packet has enough space available for prepending the EAPOL * header. * * @param packet the packet to prepend to * @param dstMac the MAC address of the destination (authenticator) * @param srcMac the MAC address of the source (supplicant) * @param eapolType the EAPOL-Type field * * @return ANI_OK if the operation succeeds */ static int addEapolHeaders(tAniPacket *packet, tAniMacAddr dstMac, tAniMacAddr srcMac, v_U8_t eapolType) { int retVal; v_U16_t len; do { retVal = aniAsfPacketGetLen(packet); if( !ANI_IS_STATUS_SUCCESS( retVal ) ) break; len = retVal; retVal = aniAsfPacketPrepend16(packet, len); retVal = aniAsfPacketPrepend8(packet, eapolType); if( !ANI_IS_STATUS_SUCCESS( retVal ) ) break; retVal = aniAsfPacketPrependBuffer(packet, EAPOL_VERSION_BYTES, 1); if( !ANI_IS_STATUS_SUCCESS( retVal ) ) break; retVal = aniAsfPacketPrependBuffer(packet, ANI_ETH_P_EAPOL_BYTES, 2); if( !ANI_IS_STATUS_SUCCESS( retVal ) ) break; //Since TL expects SNAP header in all packets we send, put it in retVal = aniAsfPacketPrependBuffer(packet, BAP_RSN_LLC_HEADER, sizeof(BAP_RSN_LLC_HEADER)); if( !ANI_IS_STATUS_SUCCESS( retVal ) ) break; //packet length len += 6/*length + eapolType+version + eth_type*/ + sizeof(BAP_RSN_LLC_HEADER); retVal = aniAsfPacketPrepend16(packet, len); if( !ANI_IS_STATUS_SUCCESS( retVal ) ) break; retVal = aniAsfPacketPrependBuffer(packet, srcMac, sizeof(tAniMacAddr)); if( !ANI_IS_STATUS_SUCCESS( retVal ) ) break; retVal = aniAsfPacketPrependBuffer(packet, dstMac, sizeof(tAniMacAddr)); if( !ANI_IS_STATUS_SUCCESS( retVal ) ) break; }while( 0 ); return retVal; }
static int addEapolHeaders(tAniPacket *packet, tAniMacAddr dstMac, tAniMacAddr srcMac, v_U8_t eapolType) { int retVal; v_U16_t len; do { retVal = aniAsfPacketGetLen(packet); if( !ANI_IS_STATUS_SUCCESS( retVal ) ) break; len = retVal; retVal = aniAsfPacketPrepend16(packet, len); retVal = aniAsfPacketPrepend8(packet, eapolType); if( !ANI_IS_STATUS_SUCCESS( retVal ) ) break; retVal = aniAsfPacketPrependBuffer(packet, EAPOL_VERSION_BYTES, 1); if( !ANI_IS_STATUS_SUCCESS( retVal ) ) break; retVal = aniAsfPacketPrependBuffer(packet, ANI_ETH_P_EAPOL_BYTES, 2); if( !ANI_IS_STATUS_SUCCESS( retVal ) ) break; retVal = aniAsfPacketPrependBuffer(packet, BAP_RSN_LLC_HEADER, sizeof(BAP_RSN_LLC_HEADER)); if( !ANI_IS_STATUS_SUCCESS( retVal ) ) break; len += 6 + sizeof(BAP_RSN_LLC_HEADER); retVal = aniAsfPacketPrepend16(packet, len); if( !ANI_IS_STATUS_SUCCESS( retVal ) ) break; retVal = aniAsfPacketPrependBuffer(packet, srcMac, sizeof(tAniMacAddr)); if( !ANI_IS_STATUS_SUCCESS( retVal ) ) break; retVal = aniAsfPacketPrependBuffer(packet, dstMac, sizeof(tAniMacAddr)); if( !ANI_IS_STATUS_SUCCESS( retVal ) ) break; }while( 0 ); return retVal; }