policer: use ip dscp
[vpp.git] / src / vnet / policer / xlate.h
1 /*
2  * Copyright (c) 2015 Cisco and/or its affiliates.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at:
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 /*---------------------------------------------------------------------------
16  * from gdp_logical_qos.h
17  *---------------------------------------------------------------------------
18  */
19
20 #ifndef __included_xlate_h__
21 #define __included_xlate_h__
22
23 #include <vnet/ip/ip_packet.h>
24 #include <vnet/policer/police.h>
25
26 /*
27  * edt: * enum sse2_qos_policer_type_en
28  *  Defines type of policer to be allocated
29  */
30 typedef enum sse2_qos_policer_type_en_
31 {
32   SSE2_QOS_POLICER_TYPE_1R2C = 0,
33   SSE2_QOS_POLICER_TYPE_1R3C_RFC_2697 = 1,
34   SSE2_QOS_POLICER_TYPE_2R3C_RFC_2698 = 2,
35   SSE2_QOS_POLICER_TYPE_2R3C_RFC_4115 = 3,
36   SSE2_QOS_POLICER_TYPE_2R3C_RFC_MEF5CF1 = 4,
37   SSE2_QOS_POLICER_TYPE_MAX
38 } sse2_qos_policer_type_en;
39
40 /*
41  * edt: * enum
42  *  Enum used to define type of rounding used when calculating policer values
43  */
44 typedef enum
45 {
46   SSE2_QOS_ROUND_TO_CLOSEST = 0,
47   SSE2_QOS_ROUND_TO_UP,
48   SSE2_QOS_ROUND_TO_DOWN,
49   SSE2_QOS_ROUND_INVALID
50 } sse2_qos_round_type_en;
51
52 /*
53  * edt: * enum
54  *  Enum used to define type of rate for configuration, either pps or kbps.
55  *  If kbps, then burst is in bytes, if pps, then burst is in ms.
56  *
57  *  Default of zero is kbps, which is inline with how it is programmed
58  *  in actual hardware.  However, the warning is that this is reverse logic
59  *  of units_in_bits field in sse2_static_policer_parameters_st, which is
60  *  inline with sse_punt_drop.h.
61  */
62 typedef enum
63 {
64   SSE2_QOS_RATE_KBPS = 0,
65   SSE2_QOS_RATE_PPS,
66   SSE2_QOS_RATE_INVALID
67 } sse2_qos_rate_type_en;
68
69 /*
70  * edt: * enum
71  * Defines type of policer actions.
72  */
73 typedef enum
74 {
75   SSE2_QOS_ACTION_DROP = 0,
76   SSE2_QOS_ACTION_TRANSMIT,
77   SSE2_QOS_ACTION_MARK_AND_TRANSMIT
78 } sse2_qos_action_type_en;
79
80 /*
81  * edt * struct sse2_qos_pol_action_params_st
82  * This structure is used to hold user configured police action parameters.
83  *
84  * element: action_type
85  *      Action type (see sse2_qos_action_type_en).
86  * element: dscp
87  *      DSCP value to set when action is SSE2_QOS_ACTION_MARK_AND_TRANSMIT.
88  */
89 typedef struct sse2_qos_pol_action_params_st_
90 {
91   u8 action_type;
92   ip_dscp_t dscp;
93 } sse2_qos_pol_action_params_st;
94
95 /*
96  * edt: * struct sse2_qos_pol_cfg_params_st
97  *
98  * Description:
99  * This structure is used to hold user configured policing parameters.
100  *
101  * element: cir_kbps
102  *      CIR in kbps.
103  * element: eir_kbps
104  *      EIR or PIR in kbps.
105  * element: cb_bytes
106  *      Committed Burst in bytes.
107  * element: eb_bytes
108  *      Excess or Peak Burst in bytes.
109  * element: cir_pps
110  *      CIR in pps.
111  * element: eir_pps
112  *      EIR or PIR in pps.
113  * element: cb_ms
114  *      Committed Burst in milliseconds.
115  * element: eb_ms
116  *      Excess or Peak Burst in milliseconds.
117  * element: rate_type
118  *      Indicates the union if in kbps/bytes or pps/ms.
119  * element: rfc
120  *      Policer algorithm - 1R2C, 1R3C (2697), 2R3C (2698) or 2R3C (4115). See
121  *      sse_qos_policer_type_en
122  * element: rnd_type
123  *      Rounding type (see sse_qos_round_type_en). Needed when policer values
124  *      need to be rounded. Caller can decide on type of rounding used
125  */
126 typedef struct sse2_qos_pol_cfg_params_st_
127 {
128   union
129   {
130     struct
131     {
132       u32 cir_kbps;
133       u32 eir_kbps;
134       u64 cb_bytes;
135       u64 eb_bytes;
136     } kbps;
137     struct
138     {
139       u32 cir_pps;
140       u32 eir_pps;
141       u64 cb_ms;
142       u64 eb_ms;
143     } pps;
144   } rb;                         /* rate burst config */
145   u8 rate_type;                 /* sse2_qos_rate_type_en */
146   u8 rnd_type;                  /* sse2_qos_round_type_en */
147   u8 rfc;                       /* sse2_qos_policer_type_en */
148   u8 color_aware;
149   u8 overwrite_bucket;          /* for debugging purposes */
150   u32 current_bucket;           /* for debugging purposes */
151   u32 extended_bucket;          /* for debugging purposes */
152   sse2_qos_pol_action_params_st conform_action;
153   sse2_qos_pol_action_params_st exceed_action;
154   sse2_qos_pol_action_params_st violate_action;
155 } sse2_qos_pol_cfg_params_st;
156
157
158 typedef struct sse2_qos_pol_hw_params_st_
159 {
160   u8 rfc;
161   u8 allow_negative;
162   u8 rate_exp;
163   u16 avg_rate_man;
164   u16 peak_rate_man;
165   u8 comm_bkt_limit_exp;
166   u8 comm_bkt_limit_man;
167   u8 extd_bkt_limit_exp;
168   u8 extd_bkt_limit_man;
169   u32 comm_bkt;
170   u32 extd_bkt;
171 } sse2_qos_pol_hw_params_st;
172
173
174 int
175 sse2_pol_logical_2_physical (sse2_qos_pol_cfg_params_st * cfg,
176                              policer_read_response_type_st * phys);
177
178
179 #endif /* __included_xlate_h__ */
180
181 /*
182  * fd.io coding-style-patch-verification: ON
183  *
184  * Local Variables:
185  * eval: (c-set-style "gnu")
186  * End:
187  */