/* * Copyright 2008-2015 Freescale Semiconductor Inc. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of Freescale Semiconductor nor the * names of its contributors may be used to endorse or promote products * derived from this software without specific prior written permission. * * * ALTERNATIVELY, this software may be distributed under the terms of the * GNU General Public License ("GPL") as published by the Free Software * Foundation, either version 2 of that License or (at your option) any * later version. * * THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /****************************************************************************** @File fm_macsec_secy.h @Description FM MACSEC SecY internal structures and definitions. *//***************************************************************************/ #ifndef __FM_MACSEC_SECY_H #define __FM_MACSEC_SECY_H #include "error_ext.h" #include "std_ext.h" #include "fm_macsec.h" /**************************************************************************//** @Description Exceptions *//***************************************************************************/ #define FM_MACSEC_SECY_EX_FRAME_DISCARDED 0x80000000 #define GET_EXCEPTION_FLAG(bitMask, exception) switch (exception){ \ case e_FM_MACSEC_SECY_EX_FRAME_DISCARDED: \ bitMask = FM_MACSEC_SECY_EX_FRAME_DISCARDED; break; \ default: bitMask = 0;break;} /**************************************************************************//** @Description Events *//***************************************************************************/ #define FM_MACSEC_SECY_EV_NEXT_PN 0x80000000 #define GET_EVENT_FLAG(bitMask, event) switch (event){ \ case e_FM_MACSEC_SECY_EV_NEXT_PN: \ bitMask = FM_MACSEC_SECY_EV_NEXT_PN; break; \ default: bitMask = 0;break;} /**************************************************************************//** @Description Defaults *//***************************************************************************/ #define DEFAULT_exceptions (FM_MACSEC_SECY_EX_FRAME_DISCARDED) #define DEFAULT_events (FM_MACSEC_SECY_EV_NEXT_PN) #define DEFAULT_numOfTxSc 1 #define DEFAULT_confidentialityEnable FALSE #define DEFAULT_confidentialityOffset 0 #define DEFAULT_sciInsertionMode e_FM_MACSEC_SCI_INSERTION_MODE_EXPLICIT_SECTAG #define DEFAULT_validateFrames e_FM_MACSEC_VALID_FRAME_BEHAVIOR_STRICT #define DEFAULT_replayEnable FALSE #define DEFAULT_replayWindow 0 #define DEFAULT_protectFrames TRUE #define DEFAULT_ptp FALSE /**************************************************************************//** @Description General defines *//***************************************************************************/ #define SECY_AN_FREE_VALUE MAX_NUM_OF_SA_PER_SC typedef struct { e_ScSaId saId; bool active; union { t_FmMacsecSecYRxSaStatistics rxSaStatistics; t_FmMacsecSecYTxSaStatistics txSaStatistics; }; } t_SecYSa; typedef struct { bool inUse; uint32_t scId; e_ScType type; uint8_t numOfSa; t_SecYSa sa[MAX_NUM_OF_SA_PER_SC]; union { t_FmMacsecSecYRxScStatistics rxScStatistics; t_FmMacsecSecYTxScStatistics txScStatistics; }; } t_SecYSc; typedef struct { t_FmMacsecSecYSCParams txScParams; /**< Tx SC Params */ } t_FmMacsecSecYDriverParam; typedef struct { t_Handle h_FmMacsec; bool confidentialityEnable; /**< TRUE - confidentiality protection and integrity protection FALSE - no confidentiality protection, only integrity protection*/ uint16_t confidentialityOffset; /**< The number of initial octets of each MSDU without confidentiality protection common values are 0, 30, and 50 */ bool replayProtect; /**< replay protection function mode */ uint32_t replayWindow; /**< the size of the replay window */ e_FmMacsecValidFrameBehavior validateFrames; /**< validation function mode */ e_FmMacsecSciInsertionMode sciInsertionMode; bool protectFrames; bool isPointToPoint; e_FmMacsecSecYCipherSuite cipherSuite; /**< Cipher suite to be used for this SecY */ uint32_t numOfRxSc; /**< Number of receive channels */ uint32_t numOfTxSc; /**< Number of transmit channels */ t_SecYSc *p_RxSc; t_SecYSc *p_TxSc; uint32_t events; uint32_t exceptions; t_FmMacsecSecYExceptionsCallback *f_Exception; /**< TODO */ t_FmMacsecSecYEventsCallback *f_Event; /**< TODO */ t_Handle h_App; t_FmMacsecSecYStatistics statistics; t_FmMacsecSecYDriverParam *p_FmMacsecSecYDriverParam; } t_FmMacsecSecY; #endif /* __FM_MACSEC_SECY_H */