diff options
Diffstat (limited to 'src/vnet/qos')
-rw-r--r-- | src/vnet/qos/qos.api | 15 | ||||
-rw-r--r-- | src/vnet/qos/qos_api.c | 48 |
2 files changed, 49 insertions, 14 deletions
diff --git a/src/vnet/qos/qos.api b/src/vnet/qos/qos.api index a7bd19acc9e..720c41789bd 100644 --- a/src/vnet/qos/qos.api +++ b/src/vnet/qos/qos.api @@ -1,5 +1,6 @@ +/* Hey Emacs use -*- mode: C -*- */ /* - * Copyright (c) 2016 Cisco and/or its affiliates. + * Copyright (c) 2018 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: @@ -21,6 +22,14 @@ option version = "1.0.0"; +enum qos_source +{ + QOS_API_SOURCE_EXT = 0, + QOS_API_SOURCE_VLAN = 1, + QOS_API_SOURCE_MPLS = 2, + QOS_API_SOURCE_IP = 3, +}; + /** \brief Enable/Disable QoS recording The QoS bits from the packet at the specified input layer are copied into the packet. Recording should be used in conjunction with marking @@ -34,7 +43,7 @@ autoreply define qos_record_enable_disable u32 client_index; u32 context; u32 sw_if_index; - u8 input_source; + vl_api_qos_source_t input_source; u8 enable; }; @@ -89,7 +98,7 @@ autoreply define qos_mark_enable_disable u32 context; u32 map_id; u32 sw_if_index; - u8 output_source; + vl_api_qos_source_t output_source; u8 enable; }; diff --git a/src/vnet/qos/qos_api.c b/src/vnet/qos/qos_api.c index e2393137d15..6297c24a843 100644 --- a/src/vnet/qos/qos_api.c +++ b/src/vnet/qos/qos_api.c @@ -48,21 +48,46 @@ _(QOS_EGRESS_MAP_UPDATE, qos_egress_map_update) \ _(QOS_MARK_ENABLE_DISABLE, qos_mark_enable_disable) +static int +qos_source_decode (vl_api_qos_source_t v, qos_source_t * q) +{ + v = ntohl (v); + + switch (v) + { + case QOS_API_SOURCE_EXT: + *q = QOS_SOURCE_EXT; + return 0; + case QOS_API_SOURCE_VLAN: + *q = QOS_SOURCE_VLAN; + return 0; + case QOS_API_SOURCE_MPLS: + *q = QOS_SOURCE_MPLS; + return 0; + case QOS_API_SOURCE_IP: + *q = QOS_SOURCE_IP; + return 0; + } + + return (VNET_API_ERROR_INVALID_VALUE); +} + void vl_api_qos_record_enable_disable_t_handler (vl_api_qos_record_enable_disable_t * mp) { vl_api_qos_record_enable_disable_reply_t *rmp; + qos_source_t qs; int rv = 0; - if (mp->input_source >= QOS_N_SOURCES) - rv = VNET_API_ERROR_INVALID_VALUE; - else + rv = qos_source_decode (mp->input_source, &qs); + + if (0 == rv) { if (mp->enable) - rv = qos_record_enable (ntohl (mp->sw_if_index), mp->input_source); + rv = qos_record_enable (ntohl (mp->sw_if_index), qs); else - rv = qos_record_disable (ntohl (mp->sw_if_index), mp->input_source); + rv = qos_record_disable (ntohl (mp->sw_if_index), qs); } REPLY_MACRO (VL_API_QOS_RECORD_ENABLE_DISABLE_REPLY); @@ -99,17 +124,18 @@ void (vl_api_qos_mark_enable_disable_t * mp) { vl_api_qos_mark_enable_disable_reply_t *rmp; + qos_source_t qs; int rv = 0; - if (mp->output_source >= QOS_N_SOURCES) - rv = VNET_API_ERROR_INVALID_VALUE; - else + rv = qos_source_decode (mp->output_source, &qs); + + if (0 == rv) { if (mp->enable) - rv = qos_mark_enable (ntohl (mp->sw_if_index), - mp->output_source, ntohl (mp->map_id)); + rv = + qos_mark_enable (ntohl (mp->sw_if_index), qs, ntohl (mp->map_id)); else - rv = qos_mark_disable (ntohl (mp->sw_if_index), mp->output_source); + rv = qos_mark_disable (ntohl (mp->sw_if_index), qs); } REPLY_MACRO (VL_API_QOS_MARK_ENABLE_DISABLE_REPLY); |