/** * 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; }
/** * aniAsfPacketPrependHdr * * FUNCTION: * Prepends a tAniHdr at the start of the packet. All host to network * byte order translation is also taken care of. * * @param packet the packet to write to * @param msgType the message type to write as part of the header * * @return ANI_OK if the operation succeeds */ int aniAsfPacketPrependHdr(tAniPacket *packet, v_U16_t msgType) { int retVal; int length; if (packet == NULL) return ANI_E_NULL_VALUE; length = 4; length = 2 + 2 + packet->len; retVal = aniAsfPacketPrepend16(packet, length); if (retVal < 0) return retVal; retVal = aniAsfPacketPrepend16(packet, msgType); if (retVal < 0) return retVal; return ANI_OK; }