[PATCH] lib: Define QoS classes inside header file

  • From: Sander Vrijders <sander.vrijders@xxxxxxxx>
  • To: ouroboros@xxxxxxxxxxxxx
  • Date: Mon, 8 Oct 2018 21:41:03 +0200

The QoS classes were defined in the source file instead of in the
header file, which resulted in uninitialized structs being used which
gave rise to weird behavior in the library.

Signed-off-by: Sander Vrijders <sander.vrijders@xxxxxxxx>
---
 include/ouroboros/qos.h | 65 +++++++++++++++++++++++++++---
 src/lib/CMakeLists.txt  |  1 -
 src/lib/qos.c           | 88 -----------------------------------------
 3 files changed, 59 insertions(+), 95 deletions(-)
 delete mode 100644 src/lib/qos.c

diff --git a/include/ouroboros/qos.h b/include/ouroboros/qos.h
index 2b93f1d..3475b08 100644
--- a/include/ouroboros/qos.h
+++ b/include/ouroboros/qos.h
@@ -36,11 +36,64 @@ typedef struct qos_spec {
         uint32_t max_gap;       /* In ms */
 } qosspec_t;
 
-qosspec_t qos_raw;
-qosspec_t qos_raw_no_errors;
-qosspec_t qos_best_effort;
-qosspec_t qos_video;
-qosspec_t qos_voice;
-qosspec_t qos_data;
+static const qosspec_t qos_raw = {
+        .delay        = UINT32_MAX,
+        .bandwidth    = 0,
+        .availability = 0,
+        .loss         = 1,
+        .ber          = 1,
+        .in_order     = 0,
+        .max_gap      = UINT32_MAX
+};
+
+static const qosspec_t qos_raw_no_errors = {
+        .delay        = UINT32_MAX,
+        .bandwidth    = 0,
+        .availability = 0,
+        .loss         = 1,
+        .ber          = 0,
+        .in_order     = 0,
+        .max_gap      = UINT32_MAX
+};
+
+static const qosspec_t qos_best_effort = {
+        .delay        = UINT32_MAX,
+        .bandwidth    = 0,
+        .availability = 0,
+        .loss         = 1,
+        .ber          = 0,
+        .in_order     = 1,
+        .max_gap      = UINT32_MAX
+};
+
+static const qosspec_t qos_video   = {
+        .delay        = 100,
+        .bandwidth    = UINT64_MAX,
+        .availability = 3,
+        .loss         = 1,
+        .ber          = 0,
+        .in_order     = 1,
+        .max_gap      = 100
+};
+
+static const qosspec_t qos_voice = {
+        .delay        = 50,
+        .bandwidth    = 100000,
+        .availability = 5,
+        .loss         = 1,
+        .ber          = 0,
+        .in_order     = 1,
+        .max_gap      = 50
+};
+
+static const qosspec_t qos_data = {
+        .delay        = 1000,
+        .bandwidth    = 0,
+        .availability = 0,
+        .loss         = 0,
+        .ber          = 0,
+        .in_order     = 1,
+        .max_gap      = 2000
+};
 
 #endif /* OUROBOROS_QOS_H */
diff --git a/src/lib/CMakeLists.txt b/src/lib/CMakeLists.txt
index f66e7ab..414a720 100644
--- a/src/lib/CMakeLists.txt
+++ b/src/lib/CMakeLists.txt
@@ -201,7 +201,6 @@ set(SOURCE_FILES_COMMON
   logs.c
   md5.c
   notifier.c
-  qos.c
   qoscube.c
   random.c
   rib.c
diff --git a/src/lib/qos.c b/src/lib/qos.c
deleted file mode 100644
index 8607031..0000000
--- a/src/lib/qos.c
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Ouroboros - Copyright (C) 2016 - 2018
- *
- * Quality of Service cube specifications
- *
- *    Dimitri Staessens <dimitri.staessens@xxxxxxxx>
- *    Sander Vrijders   <sander.vrijders@xxxxxxxx>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * version 2.1 as published by the Free Software Foundation.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., http://www.fsf.org/about/contact/.
- */
-
-#include <ouroboros/qos.h>
-#include <ouroboros/errno.h>
-
-#include <stdint.h>
-#include <stddef.h>
-#include <string.h>
-
-qosspec_t qos_raw = {
-        .delay        = UINT32_MAX,
-        .bandwidth    = 0,
-        .availability = 0,
-        .loss         = 1,
-        .ber          = 1,
-        .in_order     = 0,
-        .max_gap      = UINT32_MAX
-};
-
-qosspec_t qos_raw_no_errors = {
-        .delay        = UINT32_MAX,
-        .bandwidth    = 0,
-        .availability = 0,
-        .loss         = 1,
-        .ber          = 0,
-        .in_order     = 0,
-        .max_gap      = UINT32_MAX
-};
-
-qosspec_t qos_best_effort = {
-        .delay        = UINT32_MAX,
-        .bandwidth    = 0,
-        .availability = 0,
-        .loss         = 1,
-        .ber          = 0,
-        .in_order     = 1,
-        .max_gap      = UINT32_MAX
-};
-
-qosspec_t qos_video   = {
-        .delay        = 100,
-        .bandwidth    = UINT64_MAX,
-        .availability = 3,
-        .loss         = 1,
-        .ber          = 0,
-        .in_order     = 1,
-        .max_gap      = 100
-};
-
-qosspec_t qos_voice = {
-        .delay        = 50,
-        .bandwidth    = 100000,
-        .availability = 5,
-        .loss         = 1,
-        .ber          = 0,
-        .in_order     = 1,
-        .max_gap      = 50
-};
-
-qosspec_t qos_data = {
-        .delay        = 1000,
-        .bandwidth    = 0,
-        .availability = 0,
-        .loss         = 0,
-        .ber          = 0,
-        .in_order     = 1,
-        .max_gap      = 2000
-};
-- 
2.19.1


Other related posts:

  • » [PATCH] lib: Define QoS classes inside header file - Sander Vrijders