diff options
Diffstat (limited to 'src/vnet')
-rw-r--r-- | src/vnet/CMakeLists.txt | 5 | ||||
-rw-r--r-- | src/vnet/policer/policer.api | 70 | ||||
-rw-r--r-- | src/vnet/policer/policer_api.c | 31 | ||||
-rw-r--r-- | src/vnet/policer/policer_types.api | 62 |
4 files changed, 115 insertions, 53 deletions
diff --git a/src/vnet/CMakeLists.txt b/src/vnet/CMakeLists.txt index 5ea5f16ab84..0ae1b0a8328 100644 --- a/src/vnet/CMakeLists.txt +++ b/src/vnet/CMakeLists.txt @@ -98,7 +98,10 @@ list(APPEND VNET_HEADERS policer/xlate.h ) -list(APPEND VNET_API_FILES policer/policer.api) +list(APPEND VNET_API_FILES + policer/policer.api + policer/policer_types.api +) ############################################################################## # Cop - junk filter diff --git a/src/vnet/policer/policer.api b/src/vnet/policer/policer.api index 8ca0ffbc791..946cc357b80 100644 --- a/src/vnet/policer/policer.api +++ b/src/vnet/policer/policer.api @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015-2016 Cisco and/or its affiliates. + * Copyright (c) 2015-2020 Cisco and/or its affiliates. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at: @@ -13,7 +13,9 @@ * limitations under the License. */ -option version = "1.0.0"; +option version = "2.0.0"; + +import "vnet/policer/policer_types.api"; /** \brief Add/del policer @param client_index - opaque cookie to identify the sender @@ -28,34 +30,28 @@ option version = "1.0.0"; @param round_type - rounding type @param type - policer algorithm @param color_aware - 0=color-blind, 1=color-aware - @param conform_action_type - conform action type - @param conform_dscp - DSCP for conform mar-and-transmit action - @param exceed_action_type - exceed action type - @param exceed_dscp - DSCP for exceed mar-and-transmit action - @param violate_action_type - violate action type - @param violate_dscp - DSCP for violate mar-and-transmit action + @param conform_action - conform action + @param exceed_action - exceed action type + @param violate_action - violate action type */ define policer_add_del { u32 client_index; u32 context; - u8 is_add; - u8 name[64]; + bool is_add; + string name[64]; u32 cir; u32 eir; u64 cb; u64 eb; - u8 rate_type; - u8 round_type; - u8 type; - u8 color_aware; - u8 conform_action_type; - u8 conform_dscp; - u8 exceed_action_type; - u8 exceed_dscp; - u8 violate_action_type; - u8 violate_dscp; + vl_api_sse2_qos_rate_type_t rate_type; + vl_api_sse2_qos_round_type_t round_type; + vl_api_sse2_qos_policer_type_t type; + bool color_aware; + vl_api_sse2_qos_action_t conform_action; + vl_api_sse2_qos_action_t exceed_action; + vl_api_sse2_qos_action_t violate_action; }; /** \brief Add/del policer response @@ -81,8 +77,8 @@ define policer_dump u32 client_index; u32 context; - u8 match_name_valid; - u8 match_name[64]; + bool match_name_valid; + string match_name[64]; }; /** \brief Policer operational state response. @@ -95,12 +91,9 @@ define policer_dump @param rate_type - rate type @param round_type - rounding type @param type - policer algorithm - @param conform_action_type - conform action type - @param conform_dscp - DSCP for conform mar-and-transmit action - @param exceed_action_type - exceed action type - @param exceed_dscp - DSCP for exceed mar-and-transmit action - @param violate_action_type - violate action type - @param violate_dscp - DSCP for violate mar-and-transmit action + @param conform_action - conform action + @param exceed_action - exceed action + @param violate_action - violate action @param single_rate - 1 = single rate policer, 0 = two rate policer @param color_aware - for hierarchical policing @param scale - power-of-2 shift amount for lower rates @@ -116,22 +109,19 @@ define policer_details { u32 context; - u8 name[64]; + string name[64]; u32 cir; u32 eir; u64 cb; u64 eb; - u8 rate_type; - u8 round_type; - u8 type; - u8 conform_action_type; - u8 conform_dscp; - u8 exceed_action_type; - u8 exceed_dscp; - u8 violate_action_type; - u8 violate_dscp; - u8 single_rate; - u8 color_aware; + vl_api_sse2_qos_rate_type_t rate_type; + vl_api_sse2_qos_round_type_t round_type; + vl_api_sse2_qos_policer_type_t type; + vl_api_sse2_qos_action_t conform_action; + vl_api_sse2_qos_action_t exceed_action; + vl_api_sse2_qos_action_t violate_action; + bool single_rate; + bool color_aware; u32 scale; u32 cir_tokens_per_period; u32 pir_tokens_per_period; diff --git a/src/vnet/policer/policer_api.c b/src/vnet/policer/policer_api.c index ae57a9359ea..b543a3c2e0e 100644 --- a/src/vnet/policer/policer_api.c +++ b/src/vnet/policer/policer_api.c @@ -68,12 +68,16 @@ vl_api_policer_add_del_t_handler (vl_api_policer_add_del_t * mp) cfg.rb.kbps.eir_kbps = ntohl (mp->eir); cfg.rb.kbps.cb_bytes = clib_net_to_host_u64 (mp->cb); cfg.rb.kbps.eb_bytes = clib_net_to_host_u64 (mp->eb); - cfg.conform_action.action_type = mp->conform_action_type; - cfg.conform_action.dscp = mp->conform_dscp; - cfg.exceed_action.action_type = mp->exceed_action_type; - cfg.exceed_action.dscp = mp->exceed_dscp; - cfg.violate_action.action_type = mp->violate_action_type; - cfg.violate_action.dscp = mp->violate_dscp; + cfg.conform_action.action_type = + (sse2_qos_action_type_en) mp->conform_action.type; + cfg.conform_action.dscp = mp->conform_action.dscp; + cfg.exceed_action.action_type = + (sse2_qos_action_type_en) mp->exceed_action.type; + cfg.exceed_action.dscp = mp->exceed_action.dscp; + cfg.violate_action.action_type = + (sse2_qos_action_type_en) mp->violate_action.type; + cfg.violate_action.dscp = mp->violate_action.dscp; + cfg.color_aware = mp->color_aware; error = policer_add_del (vm, name, &cfg, &policer_index, mp->is_add); @@ -111,12 +115,15 @@ send_policer_details (u8 * name, mp->rate_type = config->rate_type; mp->round_type = config->rnd_type; mp->type = config->rfc; - mp->conform_action_type = config->conform_action.action_type; - mp->conform_dscp = config->conform_action.dscp; - mp->exceed_action_type = config->exceed_action.action_type; - mp->exceed_dscp = config->exceed_action.dscp; - mp->violate_action_type = config->violate_action.action_type; - mp->violate_dscp = config->violate_action.dscp; + mp->conform_action.type = + (vl_api_sse2_qos_action_type_t) config->conform_action.action_type; + mp->conform_action.dscp = config->conform_action.dscp; + mp->exceed_action.type = + (vl_api_sse2_qos_action_type_t) config->exceed_action.action_type; + mp->exceed_action.dscp = config->exceed_action.dscp; + mp->violate_action.type = + (vl_api_sse2_qos_action_type_t) config->violate_action.action_type; + mp->violate_action.dscp = config->violate_action.dscp; mp->single_rate = templ->single_rate ? 1 : 0; mp->color_aware = templ->color_aware ? 1 : 0; mp->scale = htonl (templ->scale); diff --git a/src/vnet/policer/policer_types.api b/src/vnet/policer/policer_types.api new file mode 100644 index 00000000000..903bb603d78 --- /dev/null +++ b/src/vnet/policer/policer_types.api @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2020 Cisco and/or its affiliates. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +enum sse2_qos_rate_type : u8 +{ + SSE2_QOS_RATE_API_KBPS = 0, + SSE2_QOS_RATE_API_PPS, + SSE2_QOS_RATE_API_INVALID, +}; + +enum sse2_qos_round_type : u8 +{ + SSE2_QOS_ROUND_API_TO_CLOSEST = 0, + SSE2_QOS_ROUND_API_TO_UP, + SSE2_QOS_ROUND_API_TO_DOWN, + SSE2_QOS_ROUND_API_INVALID, +}; + +enum sse2_qos_policer_type : u8 +{ + SSE2_QOS_POLICER_TYPE_API_1R2C = 0, + SSE2_QOS_POLICER_TYPE_API_1R3C_RFC_2697 = 1, + SSE2_QOS_POLICER_TYPE_API_2R3C_RFC_2698 = 2, + SSE2_QOS_POLICER_TYPE_API_2R3C_RFC_4115 = 3, + SSE2_QOS_POLICER_TYPE_API_2R3C_RFC_MEF5CF1 = 4, + SSE2_QOS_POLICER_TYPE_API_MAX, +}; + +enum sse2_qos_action_type : u8 +{ + SSE2_QOS_ACTION_API_DROP = 0, + SSE2_QOS_ACTION_API_TRANSMIT, + SSE2_QOS_ACTION_API_MARK_AND_TRANSMIT, +}; + +/** \brief SSE2 QOS action + @param conform_action_type - conform action type + @param conform_dscp - DSCP for conform mark-and-transmit action +*/ +typedef sse2_qos_action +{ + vl_api_sse2_qos_action_type_t type; + u8 dscp; +}; + +/* + * Local Variables: + * eval: (c-set-style "gnu") + * End: + */ |