1 /*
2  * Copyright 2008-2015 Freescale Semiconductor Inc.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are met:
6  *     * Redistributions of source code must retain the above copyright
7  *       notice, this list of conditions and the following disclaimer.
8  *     * Redistributions in binary form must reproduce the above copyright
9  *       notice, this list of conditions and the following disclaimer in the
10  *       documentation and/or other materials provided with the distribution.
11  *     * Neither the name of Freescale Semiconductor nor the
12  *       names of its contributors may be used to endorse or promote products
13  *       derived from this software without specific prior written permission.
14  *
15  *
16  * ALTERNATIVELY, this software may be distributed under the terms of the
17  * GNU General Public License ("GPL") as published by the Free Software
18  * Foundation, either version 2 of that License or (at your option) any
19  * later version.
20  *
21  * THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``AS IS'' AND ANY
22  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
23  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
24  * DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY
25  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
26  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
27  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
28  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
30  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
32 
33 /******************************************************************************
34  @File          fm_macsec_secy.h
35 
36  @Description   FM MACSEC SecY internal structures and definitions.
37 *//***************************************************************************/
38 #ifndef __FM_MACSEC_SECY_H
39 #define __FM_MACSEC_SECY_H
40 
41 #include "error_ext.h"
42 #include "std_ext.h"
43 
44 #include "fm_macsec.h"
45 
46 
47 /**************************************************************************//**
48  @Description       Exceptions
49 *//***************************************************************************/
50 
51 #define FM_MACSEC_SECY_EX_FRAME_DISCARDED           0x80000000
52 
53 #define GET_EXCEPTION_FLAG(bitMask, exception)  switch (exception){     \
54     case e_FM_MACSEC_SECY_EX_FRAME_DISCARDED:                           \
55         bitMask = FM_MACSEC_SECY_EX_FRAME_DISCARDED; break;             \
56     default: bitMask = 0;break;}
57 
58 /**************************************************************************//**
59  @Description       Events
60 *//***************************************************************************/
61 
62 #define FM_MACSEC_SECY_EV_NEXT_PN                        0x80000000
63 
64 #define GET_EVENT_FLAG(bitMask, event)          switch (event){     \
65     case e_FM_MACSEC_SECY_EV_NEXT_PN:                               \
66         bitMask = FM_MACSEC_SECY_EV_NEXT_PN; break;                 \
67     default: bitMask = 0;break;}
68 
69 /**************************************************************************//**
70  @Description       Defaults
71 *//***************************************************************************/
72 
73 #define DEFAULT_exceptions                  (FM_MACSEC_SECY_EX_FRAME_DISCARDED)
74 #define DEFAULT_events                      (FM_MACSEC_SECY_EV_NEXT_PN)
75 #define DEFAULT_numOfTxSc                   1
76 #define DEFAULT_confidentialityEnable       FALSE
77 #define DEFAULT_confidentialityOffset       0
78 #define DEFAULT_sciInsertionMode            e_FM_MACSEC_SCI_INSERTION_MODE_EXPLICIT_SECTAG
79 #define DEFAULT_validateFrames              e_FM_MACSEC_VALID_FRAME_BEHAVIOR_STRICT
80 #define DEFAULT_replayEnable                FALSE
81 #define DEFAULT_replayWindow                0
82 #define DEFAULT_protectFrames               TRUE
83 #define DEFAULT_ptp                         FALSE
84 
85 /**************************************************************************//**
86  @Description       General defines
87 *//***************************************************************************/
88 
89 #define SECY_AN_FREE_VALUE              MAX_NUM_OF_SA_PER_SC
90 
91 
92 typedef struct {
93     e_ScSaId                            saId;
94     bool                                active;
95     union {
96         t_FmMacsecSecYRxSaStatistics    rxSaStatistics;
97         t_FmMacsecSecYTxSaStatistics    txSaStatistics;
98     };
99 } t_SecYSa;
100 
101 typedef struct {
102     bool                                inUse;
103     uint32_t                            scId;
104     e_ScType                            type;
105     uint8_t                             numOfSa;
106     t_SecYSa                            sa[MAX_NUM_OF_SA_PER_SC];
107     union {
108         t_FmMacsecSecYRxScStatistics    rxScStatistics;
109         t_FmMacsecSecYTxScStatistics    txScStatistics;
110     };
111 } t_SecYSc;
112 
113 typedef struct {
114     t_FmMacsecSecYSCParams              txScParams;             /**< Tx SC Params */
115 } t_FmMacsecSecYDriverParam;
116 
117 typedef struct {
118     t_Handle                            h_FmMacsec;
119     bool                                confidentialityEnable;  /**< TRUE  - confidentiality protection and integrity protection
120                                                                      FALSE - no confidentiality protection, only integrity protection*/
121     uint16_t                            confidentialityOffset;  /**< The number of initial octets of each MSDU without confidentiality protection
122                                                                      common values are 0, 30, and 50 */
123     bool                                replayProtect;          /**< replay protection function mode */
124     uint32_t                            replayWindow;           /**< the size of the replay window */
125     e_FmMacsecValidFrameBehavior        validateFrames;         /**< validation function mode */
126     e_FmMacsecSciInsertionMode          sciInsertionMode;
127     bool                                protectFrames;
128     bool                                isPointToPoint;
129     e_FmMacsecSecYCipherSuite           cipherSuite;            /**< Cipher suite to be used for this SecY */
130     uint32_t                            numOfRxSc;              /**< Number of receive channels */
131     uint32_t                            numOfTxSc;              /**< Number of transmit channels */
132     t_SecYSc                            *p_RxSc;
133     t_SecYSc                            *p_TxSc;
134     uint32_t                            events;
135     uint32_t                            exceptions;
136     t_FmMacsecSecYExceptionsCallback    *f_Exception;           /**< TODO */
137     t_FmMacsecSecYEventsCallback        *f_Event;               /**< TODO */
138     t_Handle                            h_App;
139     t_FmMacsecSecYStatistics            statistics;
140     t_FmMacsecSecYDriverParam           *p_FmMacsecSecYDriverParam;
141 } t_FmMacsecSecY;
142 
143 
144 #endif /* __FM_MACSEC_SECY_H */
145