summaryrefslogtreecommitdiffstats
path: root/src/vnet/qos
diff options
context:
space:
mode:
Diffstat (limited to 'src/vnet/qos')
-rw-r--r--src/vnet/qos/qos.api15
-rw-r--r--src/vnet/qos/qos_api.c48
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);