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
92typedef struct {
93    e_ScSaId                            saId;
94    bool                                active;
95    union {
96        t_FmMacsecSecYRxSaStatistics    rxSaStatistics;
97        t_FmMacsecSecYTxSaStatistics    txSaStatistics;
98    };
99} t_SecYSa;
100
101typedef 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
113typedef struct {
114    t_FmMacsecSecYSCParams              txScParams;             /**< Tx SC Params */
115} t_FmMacsecSecYDriverParam;
116
117typedef 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