From cc6926c559bda00830fcc0f57f4aea9cf0d458e7 Mon Sep 17 00:00:00 2001
From: Florian Kaltenberger <florian.kaltenberger@eurecom.fr>
Date: Sun, 25 Sep 2016 16:13:58 +0200
Subject: [PATCH] removing duplicate files

---
 openair2/UTIL/queue.h                    | 592 -----------------------
 openair3/UTILS/HASHTABLE/COPYING         |   0
 openair3/UTILS/HASHTABLE/Makefile.am     |  10 -
 openair3/UTILS/HASHTABLE/Makefile.eNB    |  35 --
 openair3/UTILS/HASHTABLE/hashtable.c     | 332 -------------
 openair3/UTILS/HASHTABLE/hashtable.h     |  51 --
 openair3/UTILS/HASHTABLE/obj_hashtable.c | 291 -----------
 openair3/UTILS/HASHTABLE/obj_hashtable.h |  40 --
 8 files changed, 1351 deletions(-)
 delete mode 100644 openair2/UTIL/queue.h
 delete mode 100644 openair3/UTILS/HASHTABLE/COPYING
 delete mode 100755 openair3/UTILS/HASHTABLE/Makefile.am
 delete mode 100755 openair3/UTILS/HASHTABLE/Makefile.eNB
 delete mode 100755 openair3/UTILS/HASHTABLE/hashtable.c
 delete mode 100755 openair3/UTILS/HASHTABLE/hashtable.h
 delete mode 100644 openair3/UTILS/HASHTABLE/obj_hashtable.c
 delete mode 100644 openair3/UTILS/HASHTABLE/obj_hashtable.h

diff --git a/openair2/UTIL/queue.h b/openair2/UTIL/queue.h
deleted file mode 100644
index f8665c0f1a..0000000000
--- a/openair2/UTIL/queue.h
+++ /dev/null
@@ -1,592 +0,0 @@
-/*
- * Copyright (c) 1991, 1993
- *  The Regents of the University of California.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *  @(#)queue.h 8.5 (Berkeley) 8/20/94
- */
-
-#ifndef _SYS_QUEUE_H_
-#define _SYS_QUEUE_H_
-
-/*
- * This file defines five types of data structures: singly-linked lists,
- * lists, simple queues, tail queues, and circular queues.
- *
- * A singly-linked list is headed by a single forward pointer. The
- * elements are singly linked for minimum space and pointer manipulation
- * overhead at the expense of O(n) removal for arbitrary elements. New
- * elements can be added to the list after an existing element or at the
- * head of the list.  Elements being removed from the head of the list
- * should use the explicit macro for this purpose for optimum
- * efficiency. A singly-linked list may only be traversed in the forward
- * direction.  Singly-linked lists are ideal for applications with large
- * datasets and few or no removals or for implementing a LIFO queue.
- *
- * A list is headed by a single forward pointer (or an array of forward
- * pointers for a hash table header). The elements are doubly linked
- * so that an arbitrary element can be removed without a need to
- * traverse the list. New elements can be added to the list before
- * or after an existing element or at the head of the list. A list
- * may only be traversed in the forward direction.
- *
- * A simple queue is headed by a pair of pointers, one the head of the
- * list and the other to the tail of the list. The elements are singly
- * linked to save space, so elements can only be removed from the
- * head of the list. New elements can be added to the list after
- * an existing element, at the head of the list, or at the end of the
- * list. A simple queue may only be traversed in the forward direction.
- *
- * A tail queue is headed by a pair of pointers, one to the head of the
- * list and the other to the tail of the list. The elements are doubly
- * linked so that an arbitrary element can be removed without a need to
- * traverse the list. New elements can be added to the list before or
- * after an existing element, at the head of the list, or at the end of
- * the list. A tail queue may be traversed in either direction.
- *
- * A circle queue is headed by a pair of pointers, one to the head of the
- * list and the other to the tail of the list. The elements are doubly
- * linked so that an arbitrary element can be removed without a need to
- * traverse the list. New elements can be added to the list before or after
- * an existing element, at the head of the list, or at the end of the list.
- * A circle queue may be traversed in either direction, but has a more
- * complex end of list detection.
- *
- * For details on the use of these macros, see the queue(3) manual page.
- *                      SLIST   LIST    STAILQ  TAILQ   CIRCLEQ
- * _HEAD                +       +       +       +       +
- * _HEAD_INITIALIZER    +       +       +       +       +
- * _ENTRY               +       +       +       +       +
- * _INIT                +       +       +       +       +
- * _EMPTY               +       +       +       +       +
- * _FIRST               +       +       +       +       +
- * _NEXT                +       +       +       +       +
- * _PREV                -       -       -       +       +
- * _LAST                -       -       +       +       +
- * _FOREACH             +       +       +       +       +
- * _FOREACH_REVERSE     -       -       -       +       +
- * _INSERT_HEAD         +       +       +       +       +
- * _INSERT_BEFORE       -       +       -       +       +
- * _INSERT_AFTER        +       +       +       +       +
- * _INSERT_TAIL         -       -       +       +       +
- * _REMOVE_HEAD         +       -       +       -       -
- * _REMOVE              +       +       +       +       +
- */
-
-/*
- * List definitions.
- */
-#define LIST_HEAD(name, type)           \
-struct name {               \
-  struct type *lh_first;  /* first element */     \
-}
-
-#define LIST_HEAD_INITIALIZER(head)         \
-  { NULL }
-
-#define LIST_ENTRY(type)            \
-struct {                \
-  struct type *le_next; /* next element */      \
-  struct type **le_prev;  /* address of previous next element */  \
-}
-
-/*
- * List functions.
- */
-#define LIST_INIT(head) do {            \
-  (head)->lh_first = NULL;          \
-} while (/*CONSTCOND*/0)
-
-#define LIST_INSERT_AFTER(listelm, elm, field) do {     \
-  if (((elm)->field.le_next = (listelm)->field.le_next) != NULL)  \
-    (listelm)->field.le_next->field.le_prev =   \
-        &(elm)->field.le_next;        \
-  (listelm)->field.le_next = (elm);       \
-  (elm)->field.le_prev = &(listelm)->field.le_next;   \
-} while (/*CONSTCOND*/0)
-
-#define LIST_INSERT_BEFORE(listelm, elm, field) do {      \
-  (elm)->field.le_prev = (listelm)->field.le_prev;    \
-  (elm)->field.le_next = (listelm);       \
-  *(listelm)->field.le_prev = (elm);        \
-  (listelm)->field.le_prev = &(elm)->field.le_next;   \
-} while (/*CONSTCOND*/0)
-
-#define LIST_INSERT_HEAD(head, elm, field) do {       \
-  if (((elm)->field.le_next = (head)->lh_first) != NULL)    \
-    (head)->lh_first->field.le_prev = &(elm)->field.le_next;\
-  (head)->lh_first = (elm);         \
-  (elm)->field.le_prev = &(head)->lh_first;     \
-} while (/*CONSTCOND*/0)
-
-#define LIST_REMOVE(elm, field) do {          \
-  if ((elm)->field.le_next != NULL)       \
-    (elm)->field.le_next->field.le_prev =       \
-        (elm)->field.le_prev;       \
-  *(elm)->field.le_prev = (elm)->field.le_next;     \
-} while (/*CONSTCOND*/0)
-
-#define LIST_FOREACH(var, head, field)          \
-  for ((var) = ((head)->lh_first);        \
-    (var);              \
-    (var) = ((var)->field.le_next))
-
-/*
- * List access methods.
- */
-#define LIST_EMPTY(head)    ((head)->lh_first == NULL)
-#define LIST_FIRST(head)    ((head)->lh_first)
-#define LIST_NEXT(elm, field)   ((elm)->field.le_next)
-
-
-/*
- * Singly-linked List definitions.
- */
-#define SLIST_HEAD(name, type)            \
-struct name {               \
-  struct type *slh_first; /* first element */     \
-}
-
-#define SLIST_HEAD_INITIALIZER(head)          \
-  { NULL }
-
-#define SLIST_ENTRY(type)           \
-struct {                \
-  struct type *sle_next;  /* next element */      \
-}
-
-/*
- * Singly-linked List functions.
- */
-#define SLIST_INIT(head) do {           \
-  (head)->slh_first = NULL;         \
-} while (/*CONSTCOND*/0)
-
-#define SLIST_INSERT_AFTER(slistelm, elm, field) do {     \
-  (elm)->field.sle_next = (slistelm)->field.sle_next;   \
-  (slistelm)->field.sle_next = (elm);       \
-} while (/*CONSTCOND*/0)
-
-#define SLIST_INSERT_HEAD(head, elm, field) do {      \
-  (elm)->field.sle_next = (head)->slh_first;      \
-  (head)->slh_first = (elm);          \
-} while (/*CONSTCOND*/0)
-
-#define SLIST_REMOVE_HEAD(head, field) do {       \
-  (head)->slh_first = (head)->slh_first->field.sle_next;    \
-} while (/*CONSTCOND*/0)
-
-#define SLIST_REMOVE(head, elm, type, field) do {     \
-  if ((head)->slh_first == (elm)) {       \
-    SLIST_REMOVE_HEAD((head), field);     \
-  }               \
-  else {                \
-    struct type *curelm = (head)->slh_first;    \
-    while(curelm->field.sle_next != (elm))      \
-      curelm = curelm->field.sle_next;    \
-    curelm->field.sle_next =        \
-        curelm->field.sle_next->field.sle_next;   \
-  }               \
-} while (/*CONSTCOND*/0)
-
-#define SLIST_FOREACH(var, head, field)         \
-  for((var) = (head)->slh_first; (var); (var) = (var)->field.sle_next)
-
-/*
- * Singly-linked List access methods.
- */
-#define SLIST_EMPTY(head) ((head)->slh_first == NULL)
-#define SLIST_FIRST(head) ((head)->slh_first)
-#define SLIST_NEXT(elm, field)  ((elm)->field.sle_next)
-
-
-/*
- * Singly-linked Tail queue declarations.
- */
-#define STAILQ_HEAD(name, type)         \
-struct name {               \
-  struct type *stqh_first;  /* first element */     \
-  struct type **stqh_last;  /* addr of last next element */   \
-}
-
-#define STAILQ_HEAD_INITIALIZER(head)         \
-  { NULL, &(head).stqh_first }
-
-#define STAILQ_ENTRY(type)            \
-struct {                \
-  struct type *stqe_next; /* next element */      \
-}
-
-/*
- * Singly-linked Tail queue functions.
- */
-#define STAILQ_INIT(head) do {            \
-  (head)->stqh_first = NULL;          \
-  (head)->stqh_last = &(head)->stqh_first;        \
-} while (/*CONSTCOND*/0)
-
-#define STAILQ_INSERT_HEAD(head, elm, field) do {     \
-  if (((elm)->field.stqe_next = (head)->stqh_first) == NULL)  \
-    (head)->stqh_last = &(elm)->field.stqe_next;    \
-  (head)->stqh_first = (elm);         \
-} while (/*CONSTCOND*/0)
-
-#define STAILQ_INSERT_TAIL(head, elm, field) do {     \
-  (elm)->field.stqe_next = NULL;          \
-  *(head)->stqh_last = (elm);         \
-  (head)->stqh_last = &(elm)->field.stqe_next;      \
-} while (/*CONSTCOND*/0)
-
-#define STAILQ_INSERT_AFTER(head, listelm, elm, field) do {   \
-  if (((elm)->field.stqe_next = (listelm)->field.stqe_next) == NULL)\
-    (head)->stqh_last = &(elm)->field.stqe_next;    \
-  (listelm)->field.stqe_next = (elm);       \
-} while (/*CONSTCOND*/0)
-
-#define STAILQ_REMOVE_HEAD(head, field) do {        \
-  if (((head)->stqh_first = (head)->stqh_first->field.stqe_next) == NULL) \
-    (head)->stqh_last = &(head)->stqh_first;      \
-} while (/*CONSTCOND*/0)
-
-#define STAILQ_REMOVE(head, elm, type, field) do {      \
-  if ((head)->stqh_first == (elm)) {        \
-    STAILQ_REMOVE_HEAD((head), field);      \
-  } else {              \
-    struct type *curelm = (head)->stqh_first;   \
-    while (curelm->field.stqe_next != (elm))      \
-      curelm = curelm->field.stqe_next;   \
-    if ((curelm->field.stqe_next =        \
-      curelm->field.stqe_next->field.stqe_next) == NULL) \
-          (head)->stqh_last = &(curelm)->field.stqe_next; \
-  }               \
-} while (/*CONSTCOND*/0)
-
-#define STAILQ_FOREACH(var, head, field)        \
-  for ((var) = ((head)->stqh_first);        \
-    (var);              \
-    (var) = ((var)->field.stqe_next))
-
-#define STAILQ_CONCAT(head1, head2) do {        \
-  if (!STAILQ_EMPTY((head2))) {         \
-    *(head1)->stqh_last = (head2)->stqh_first;    \
-    (head1)->stqh_last = (head2)->stqh_last;    \
-    STAILQ_INIT((head2));         \
-  }               \
-} while (/*CONSTCOND*/0)
-
-/*
- * Singly-linked Tail queue access methods.
- */
-#define STAILQ_EMPTY(head)  ((head)->stqh_first == NULL)
-#define STAILQ_FIRST(head)  ((head)->stqh_first)
-#define STAILQ_NEXT(elm, field) ((elm)->field.stqe_next)
-
-
-/*
- * Simple queue definitions.
- */
-#define SIMPLEQ_HEAD(name, type)          \
-struct name {               \
-  struct type *sqh_first; /* first element */     \
-  struct type **sqh_last; /* addr of last next element */   \
-}
-
-#define SIMPLEQ_HEAD_INITIALIZER(head)          \
-  { NULL, &(head).sqh_first }
-
-#define SIMPLEQ_ENTRY(type)           \
-struct {                \
-  struct type *sqe_next;  /* next element */      \
-}
-
-/*
- * Simple queue functions.
- */
-#define SIMPLEQ_INIT(head) do {           \
-  (head)->sqh_first = NULL;         \
-  (head)->sqh_last = &(head)->sqh_first;        \
-} while (/*CONSTCOND*/0)
-
-#define SIMPLEQ_INSERT_HEAD(head, elm, field) do {      \
-  if (((elm)->field.sqe_next = (head)->sqh_first) == NULL)  \
-    (head)->sqh_last = &(elm)->field.sqe_next;    \
-  (head)->sqh_first = (elm);          \
-} while (/*CONSTCOND*/0)
-
-#define SIMPLEQ_INSERT_TAIL(head, elm, field) do {      \
-  (elm)->field.sqe_next = NULL;         \
-  *(head)->sqh_last = (elm);          \
-  (head)->sqh_last = &(elm)->field.sqe_next;      \
-} while (/*CONSTCOND*/0)
-
-#define SIMPLEQ_INSERT_AFTER(head, listelm, elm, field) do {    \
-  if (((elm)->field.sqe_next = (listelm)->field.sqe_next) == NULL)\
-    (head)->sqh_last = &(elm)->field.sqe_next;    \
-  (listelm)->field.sqe_next = (elm);        \
-} while (/*CONSTCOND*/0)
-
-#define SIMPLEQ_REMOVE_HEAD(head, field) do {       \
-  if (((head)->sqh_first = (head)->sqh_first->field.sqe_next) == NULL) \
-    (head)->sqh_last = &(head)->sqh_first;      \
-} while (/*CONSTCOND*/0)
-
-#define SIMPLEQ_REMOVE(head, elm, type, field) do {     \
-  if ((head)->sqh_first == (elm)) {       \
-    SIMPLEQ_REMOVE_HEAD((head), field);     \
-  } else {              \
-    struct type *curelm = (head)->sqh_first;    \
-    while (curelm->field.sqe_next != (elm))     \
-      curelm = curelm->field.sqe_next;    \
-    if ((curelm->field.sqe_next =       \
-      curelm->field.sqe_next->field.sqe_next) == NULL) \
-          (head)->sqh_last = &(curelm)->field.sqe_next; \
-  }               \
-} while (/*CONSTCOND*/0)
-
-#define SIMPLEQ_FOREACH(var, head, field)       \
-  for ((var) = ((head)->sqh_first);       \
-    (var);              \
-    (var) = ((var)->field.sqe_next))
-
-/*
- * Simple queue access methods.
- */
-#define SIMPLEQ_EMPTY(head)   ((head)->sqh_first == NULL)
-#define SIMPLEQ_FIRST(head)   ((head)->sqh_first)
-#define SIMPLEQ_NEXT(elm, field)  ((elm)->field.sqe_next)
-
-
-/*
- * Tail queue definitions.
- */
-#define _TAILQ_HEAD(name, type, qual)         \
-struct name {               \
-  qual type *tqh_first;   /* first element */   \
-  qual type *qual *tqh_last;  /* addr of last next element */ \
-}
-#define TAILQ_HEAD(name, type)  _TAILQ_HEAD(name, struct type,)
-
-#define TAILQ_HEAD_INITIALIZER(head)          \
-  { NULL, &(head).tqh_first }
-
-#define _TAILQ_ENTRY(type, qual)          \
-struct {                \
-  qual type *tqe_next;    /* next element */    \
-  qual type *qual *tqe_prev;  /* address of previous next element */\
-}
-#define TAILQ_ENTRY(type) _TAILQ_ENTRY(struct type,)
-
-/*
- * Tail queue functions.
- */
-#define TAILQ_INIT(head) do {           \
-  (head)->tqh_first = NULL;         \
-  (head)->tqh_last = &(head)->tqh_first;        \
-} while (/*CONSTCOND*/0)
-
-#define TAILQ_INSERT_HEAD(head, elm, field) do {      \
-  if (((elm)->field.tqe_next = (head)->tqh_first) != NULL)  \
-    (head)->tqh_first->field.tqe_prev =     \
-        &(elm)->field.tqe_next;       \
-  else                \
-    (head)->tqh_last = &(elm)->field.tqe_next;    \
-  (head)->tqh_first = (elm);          \
-  (elm)->field.tqe_prev = &(head)->tqh_first;     \
-} while (/*CONSTCOND*/0)
-
-#define TAILQ_INSERT_TAIL(head, elm, field) do {      \
-  (elm)->field.tqe_next = NULL;         \
-  (elm)->field.tqe_prev = (head)->tqh_last;     \
-  *(head)->tqh_last = (elm);          \
-  (head)->tqh_last = &(elm)->field.tqe_next;      \
-} while (/*CONSTCOND*/0)
-
-#define TAILQ_INSERT_AFTER(head, listelm, elm, field) do {    \
-  if (((elm)->field.tqe_next = (listelm)->field.tqe_next) != NULL)\
-    (elm)->field.tqe_next->field.tqe_prev =     \
-        &(elm)->field.tqe_next;       \
-  else                \
-    (head)->tqh_last = &(elm)->field.tqe_next;    \
-  (listelm)->field.tqe_next = (elm);        \
-  (elm)->field.tqe_prev = &(listelm)->field.tqe_next;   \
-} while (/*CONSTCOND*/0)
-
-#define TAILQ_INSERT_BEFORE(listelm, elm, field) do {     \
-  (elm)->field.tqe_prev = (listelm)->field.tqe_prev;    \
-  (elm)->field.tqe_next = (listelm);        \
-  *(listelm)->field.tqe_prev = (elm);       \
-  (listelm)->field.tqe_prev = &(elm)->field.tqe_next;   \
-} while (/*CONSTCOND*/0)
-
-#define TAILQ_REMOVE(head, elm, field) do {       \
-  if (((elm)->field.tqe_next) != NULL)        \
-    (elm)->field.tqe_next->field.tqe_prev =     \
-        (elm)->field.tqe_prev;        \
-  else                \
-    (head)->tqh_last = (elm)->field.tqe_prev;   \
-  *(elm)->field.tqe_prev = (elm)->field.tqe_next;     \
-} while (/*CONSTCOND*/0)
-
-#define TAILQ_FOREACH(var, head, field)         \
-  for ((var) = ((head)->tqh_first);       \
-    (var);              \
-    (var) = ((var)->field.tqe_next))
-
-#define TAILQ_FOREACH_REVERSE(var, head, headname, field)   \
-  for ((var) = (*(((struct headname *)((head)->tqh_last))->tqh_last));  \
-    (var);              \
-    (var) = (*(((struct headname *)((var)->field.tqe_prev))->tqh_last)))
-
-#define TAILQ_CONCAT(head1, head2, field) do {        \
-  if (!TAILQ_EMPTY(head2)) {          \
-    *(head1)->tqh_last = (head2)->tqh_first;    \
-    (head2)->tqh_first->field.tqe_prev = (head1)->tqh_last; \
-    (head1)->tqh_last = (head2)->tqh_last;      \
-    TAILQ_INIT((head2));          \
-  }               \
-} while (/*CONSTCOND*/0)
-
-/*
- * Tail queue access methods.
- */
-#define TAILQ_EMPTY(head)   ((head)->tqh_first == NULL)
-#define TAILQ_FIRST(head)   ((head)->tqh_first)
-#define TAILQ_NEXT(elm, field)    ((elm)->field.tqe_next)
-
-#define TAILQ_LAST(head, headname) \
-  (*(((struct headname *)((head)->tqh_last))->tqh_last))
-#define TAILQ_PREV(elm, headname, field) \
-  (*(((struct headname *)((elm)->field.tqe_prev))->tqh_last))
-
-
-/*
- * Circular queue definitions.
- */
-#define CIRCLEQ_HEAD(name, type)          \
-struct name {               \
-  struct type *cqh_first;   /* first element */   \
-  struct type *cqh_last;    /* last element */    \
-}
-
-#define CIRCLEQ_HEAD_INITIALIZER(head)          \
-  { (void *)&head, (void *)&head }
-
-#define CIRCLEQ_ENTRY(type)           \
-struct {                \
-  struct type *cqe_next;    /* next element */    \
-  struct type *cqe_prev;    /* previous element */    \
-}
-
-/*
- * Circular queue functions.
- */
-#define CIRCLEQ_INIT(head) do {           \
-  (head)->cqh_first = (void *)(head);       \
-  (head)->cqh_last = (void *)(head);        \
-} while (/*CONSTCOND*/0)
-
-#define CIRCLEQ_INSERT_AFTER(head, listelm, elm, field) do {    \
-  (elm)->field.cqe_next = (listelm)->field.cqe_next;    \
-  (elm)->field.cqe_prev = (listelm);        \
-  if ((listelm)->field.cqe_next == (void *)(head))    \
-    (head)->cqh_last = (elm);       \
-  else                \
-    (listelm)->field.cqe_next->field.cqe_prev = (elm);  \
-  (listelm)->field.cqe_next = (elm);        \
-} while (/*CONSTCOND*/0)
-
-#define CIRCLEQ_INSERT_BEFORE(head, listelm, elm, field) do {   \
-  (elm)->field.cqe_next = (listelm);        \
-  (elm)->field.cqe_prev = (listelm)->field.cqe_prev;    \
-  if ((listelm)->field.cqe_prev == (void *)(head))    \
-    (head)->cqh_first = (elm);        \
-  else                \
-    (listelm)->field.cqe_prev->field.cqe_next = (elm);  \
-  (listelm)->field.cqe_prev = (elm);        \
-} while (/*CONSTCOND*/0)
-
-#define CIRCLEQ_INSERT_HEAD(head, elm, field) do {      \
-  (elm)->field.cqe_next = (head)->cqh_first;      \
-  (elm)->field.cqe_prev = (void *)(head);       \
-  if ((head)->cqh_last == (void *)(head))       \
-    (head)->cqh_last = (elm);       \
-  else                \
-    (head)->cqh_first->field.cqe_prev = (elm);    \
-  (head)->cqh_first = (elm);          \
-} while (/*CONSTCOND*/0)
-
-#define CIRCLEQ_INSERT_TAIL(head, elm, field) do {      \
-  (elm)->field.cqe_next = (void *)(head);       \
-  (elm)->field.cqe_prev = (head)->cqh_last;     \
-  if ((head)->cqh_first == (void *)(head))      \
-    (head)->cqh_first = (elm);        \
-  else                \
-    (head)->cqh_last->field.cqe_next = (elm);   \
-  (head)->cqh_last = (elm);         \
-} while (/*CONSTCOND*/0)
-
-#define CIRCLEQ_REMOVE(head, elm, field) do {       \
-  if ((elm)->field.cqe_next == (void *)(head))      \
-    (head)->cqh_last = (elm)->field.cqe_prev;   \
-  else                \
-    (elm)->field.cqe_next->field.cqe_prev =     \
-        (elm)->field.cqe_prev;        \
-  if ((elm)->field.cqe_prev == (void *)(head))      \
-    (head)->cqh_first = (elm)->field.cqe_next;    \
-  else                \
-    (elm)->field.cqe_prev->field.cqe_next =     \
-        (elm)->field.cqe_next;        \
-} while (/*CONSTCOND*/0)
-
-#define CIRCLEQ_FOREACH(var, head, field)       \
-  for ((var) = ((head)->cqh_first);       \
-    (var) != (const void *)(head);        \
-    (var) = ((var)->field.cqe_next))
-
-#define CIRCLEQ_FOREACH_REVERSE(var, head, field)     \
-  for ((var) = ((head)->cqh_last);        \
-    (var) != (const void *)(head);        \
-    (var) = ((var)->field.cqe_prev))
-
-/*
- * Circular queue access methods.
- */
-#define CIRCLEQ_EMPTY(head)   ((head)->cqh_first == (void *)(head))
-#define CIRCLEQ_FIRST(head)   ((head)->cqh_first)
-#define CIRCLEQ_LAST(head)    ((head)->cqh_last)
-#define CIRCLEQ_NEXT(elm, field)  ((elm)->field.cqe_next)
-#define CIRCLEQ_PREV(elm, field)  ((elm)->field.cqe_prev)
-
-#define CIRCLEQ_LOOP_NEXT(head, elm, field)       \
-  (((elm)->field.cqe_next == (void *)(head))      \
-      ? ((head)->cqh_first)         \
-      : (elm->field.cqe_next))
-#define CIRCLEQ_LOOP_PREV(head, elm, field)       \
-  (((elm)->field.cqe_prev == (void *)(head))      \
-      ? ((head)->cqh_last)          \
-      : (elm->field.cqe_prev))
-
-#endif  /* sys/queue.h */
diff --git a/openair3/UTILS/HASHTABLE/COPYING b/openair3/UTILS/HASHTABLE/COPYING
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/openair3/UTILS/HASHTABLE/Makefile.am b/openair3/UTILS/HASHTABLE/Makefile.am
deleted file mode 100755
index d6bdbbc3c8..0000000000
--- a/openair3/UTILS/HASHTABLE/Makefile.am
+++ /dev/null
@@ -1,10 +0,0 @@
-
-AM_CFLAGS = @ADD_CFLAGS@    \
-    -I$(top_srcdir)/COMMON
-
-noinst_LTLIBRARIES = libhashtable.la
-libhashtable_la_LDFLAGS = -all-static
-libhashtable_la_SOURCES = \
-    hashtable.c hashtable.h \
-    obj_hashtable.c obj_hashtable.h
-    
\ No newline at end of file
diff --git a/openair3/UTILS/HASHTABLE/Makefile.eNB b/openair3/UTILS/HASHTABLE/Makefile.eNB
deleted file mode 100755
index 2cde7da837..0000000000
--- a/openair3/UTILS/HASHTABLE/Makefile.eNB
+++ /dev/null
@@ -1,35 +0,0 @@
-
-all: libhashtable.a
-
-libhashtable_OBJECTS = \
-	hashtable.o  \
-	obj_hashtable.o  \
-
-
-CFLAGS = \
-    -DUSER_MODE     \
-    -DENABLE_USE_MME    \
-    -g          \
-    -O2         \
-    -Wall           \
-    -Werror=implicit-function-declaration
-
--include .deps/*.d
-
-$(libhashtable_OBJECTS): %.o : %.c
-	$(CC) -c $(CFLAGS) -o $@ $<
-	@if ! test -d ".deps" ; then mkdir -p .deps/; fi
-	@$(CC) -MM $(CFLAGS) $*.c > .deps/$*.d
-	@mv -f .deps/$*.d .deps/$*.d.tmp
-	@sed -e 's|.*:|$*.o:|' < .deps/$*.d.tmp > .deps/$*.d
-	@sed -e 's/.*://' -e 's/\\$$//' < .deps/$*.d.tmp | fmt -1 | \
-	sed -e 's/^ *//' -e 's/$$/:/' >> .deps/$*.d
-	@rm -f .deps/$*.d.tmp
-
-libhashtable.a: $(libhashtable_OBJECTS)
-	$(AR) rcvs $@ $(libhashtable_OBJECTS)
-
-clean:
-	rm -f libhashtable.a
-	rm -rf .deps/
-	rm -f $(libhashtable_OBJECTS)
\ No newline at end of file
diff --git a/openair3/UTILS/HASHTABLE/hashtable.c b/openair3/UTILS/HASHTABLE/hashtable.c
deleted file mode 100755
index 279eaebae8..0000000000
--- a/openair3/UTILS/HASHTABLE/hashtable.c
+++ /dev/null
@@ -1,332 +0,0 @@
-/* from: http://en.literateprograms.org/Hash_table_%28C%29#chunk%20def:node
- * Original licence Creative Commons CC0 1.0 Waiver.
- */
-#include <string.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include "hashtable.h"
-
-
-//-------------------------------------------------------------------------------------------------------------------------------
-char* hashtable_rc_code2string(hashtable_rc_t rcP)
-//-------------------------------------------------------------------------------------------------------------------------------
-{
-  switch (rcP) {
-  case HASH_TABLE_OK:
-    return "HASH_TABLE_OK";
-    break;
-
-  case HASH_TABLE_INSERT_OVERWRITTEN_DATA:
-    return "HASH_TABLE_INSERT_OVERWRITTEN_DATA";
-    break;
-
-  case HASH_TABLE_KEY_NOT_EXISTS:
-    return "HASH_TABLE_KEY_NOT_EXISTS";
-    break;
-
-  case HASH_TABLE_KEY_ALREADY_EXISTS:
-    return "HASH_TABLE_KEY_ALREADY_EXISTS";
-    break;
-
-  case HASH_TABLE_BAD_PARAMETER_HASHTABLE:
-    return "HASH_TABLE_BAD_PARAMETER_HASHTABLE";
-    break;
-
-  default:
-    return "UNKNOWN hashtable_rc_t";
-  }
-}
-//-------------------------------------------------------------------------------------------------------------------------------
-/*
- * free int function
- * hash_free_int_func() is used when this hashtable is used to store int values as data (pointer = value).
- */
-
-void hash_free_int_func(void* memoryP) {}
-
-//-------------------------------------------------------------------------------------------------------------------------------
-/*
- * Default hash function
- * def_hashfunc() is the default used by hashtable_create() when the user didn't specify one.
- * This is a simple/naive hash function which adds the key's ASCII char values. It will probably generate lots of collisions on large hash tables.
- */
-
-static hash_size_t def_hashfunc(const uint64_t keyP)
-{
-  return (hash_size_t)keyP;
-}
-
-//-------------------------------------------------------------------------------------------------------------------------------
-/*
- * Initialisation
- * hashtable_create() sets up the initial structure of the hash table. The user specified size will be allocated and initialized to NULL.
- * The user can also specify a hash function. If the hashfunc argument is NULL, a default hash function is used.
- * If an error occurred, NULL is returned. All other values in the returned hash_table_t pointer should be released with hashtable_destroy().
- */
-hash_table_t *hashtable_create(hash_size_t sizeP, hash_size_t (*hashfuncP)(const uint64_t ), void (*freefuncP)(void*))
-{
-  hash_table_t *hashtbl;
-
-  if(!(hashtbl=malloc(sizeof(hash_table_t)))) return NULL;
-
-  if(!(hashtbl->nodes=calloc(sizeP, sizeof(hash_node_t*)))) {
-    free(hashtbl);
-    return NULL;
-  }
-
-  hashtbl->size=sizeP;
-
-  if(hashfuncP) hashtbl->hashfunc=hashfuncP;
-  else hashtbl->hashfunc=def_hashfunc;
-
-  if(freefuncP) hashtbl->freefunc=freefuncP;
-  else hashtbl->freefunc=free;
-
-  return hashtbl;
-}
-//-------------------------------------------------------------------------------------------------------------------------------
-/*
- * Cleanup
- * The hashtable_destroy() walks through the linked lists for each possible hash value, and releases the elements. It also releases the nodes array and the hash_table_t.
- */
-hashtable_rc_t hashtable_destroy(hash_table_t *hashtblP)
-{
-  hash_size_t n;
-  hash_node_t *node, *oldnode;
-
-  if (hashtblP == NULL) {
-    return HASH_TABLE_BAD_PARAMETER_HASHTABLE;
-  }
-
-  for(n=0; n<hashtblP->size; ++n) {
-    node=hashtblP->nodes[n];
-
-    while(node) {
-      oldnode=node;
-      node=node->next;
-
-      if (oldnode->data) {
-        hashtblP->freefunc(oldnode->data);
-      }
-
-      free(oldnode);
-    }
-  }
-
-  free(hashtblP->nodes);
-  free(hashtblP);
-  return HASH_TABLE_OK;
-}
-//-------------------------------------------------------------------------------------------------------------------------------
-hashtable_rc_t hashtable_is_key_exists (hash_table_t *hashtblP, const uint64_t keyP)
-//-------------------------------------------------------------------------------------------------------------------------------
-{
-  hash_node_t *node;
-  hash_size_t  hash;
-
-  if (hashtblP == NULL) {
-    return HASH_TABLE_BAD_PARAMETER_HASHTABLE;
-  }
-
-  hash=hashtblP->hashfunc(keyP)%hashtblP->size;
-  node=hashtblP->nodes[hash];
-
-  while(node) {
-    if(node->key == keyP) {
-      return HASH_TABLE_OK;
-    }
-
-    node=node->next;
-  }
-
-  return HASH_TABLE_KEY_NOT_EXISTS;
-}
-//-------------------------------------------------------------------------------------------------------------------------------
-hashtable_rc_t hashtable_apply_funct_on_elements (hash_table_t *hashtblP, void functP(uint64_t keyP, void* dataP, void* parameterP), void* parameterP)
-//-------------------------------------------------------------------------------------------------------------------------------
-{
-  hash_node_t  *node         = NULL;
-  unsigned int  i            = 0;
-  unsigned int  num_elements = 0;
-
-  if (hashtblP == NULL) {
-    return HASH_TABLE_BAD_PARAMETER_HASHTABLE;
-  }
-
-  while ((num_elements < hashtblP->num_elements) && (i < hashtblP->size)) {
-    if (hashtblP->nodes[i] != NULL) {
-      node=hashtblP->nodes[i];
-
-      while(node) {
-        num_elements += 1;
-        functP(node->key, node->data, parameterP);
-        node=node->next;
-      }
-    }
-
-    i += 1;
-  }
-
-  return HASH_TABLE_OK;
-}
-//-------------------------------------------------------------------------------------------------------------------------------
-/*
- * Adding a new element
- * To make sure the hash value is not bigger than size, the result of the user provided hash function is used modulo size.
- */
-hashtable_rc_t hashtable_insert(hash_table_t *hashtblP, const uint64_t keyP, void *dataP)
-{
-  hash_node_t *node;
-  hash_size_t hash;
-
-  if (hashtblP == NULL) {
-    return HASH_TABLE_BAD_PARAMETER_HASHTABLE;
-  }
-
-  hash=hashtblP->hashfunc(keyP)%hashtblP->size;
-
-  node=hashtblP->nodes[hash];
-
-  while(node) {
-    if(node->key == keyP) {
-      if (node->data) {
-        hashtblP->freefunc(node->data);
-      }
-
-      node->data=dataP;
-      return HASH_TABLE_INSERT_OVERWRITTEN_DATA;
-    }
-
-    node=node->next;
-  }
-
-  if(!(node=malloc(sizeof(hash_node_t)))) return -1;
-
-  node->key=keyP;
-  node->data=dataP;
-
-  if (hashtblP->nodes[hash]) {
-    node->next=hashtblP->nodes[hash];
-  } else {
-    node->next = NULL;
-  }
-
-  hashtblP->nodes[hash]=node;
-  hashtblP->num_elements += 1;
-  return HASH_TABLE_OK;
-}
-//-------------------------------------------------------------------------------------------------------------------------------
-/*
- * To remove an element from the hash table, we just search for it in the linked list for that hash value,
- * and remove it if it is found. If it was not found, it is an error and -1 is returned.
- */
-hashtable_rc_t hashtable_remove(hash_table_t *hashtblP, const uint64_t keyP)
-{
-  hash_node_t *node, *prevnode=NULL;
-  hash_size_t  hash;
-
-  if (hashtblP == NULL) {
-    return HASH_TABLE_BAD_PARAMETER_HASHTABLE;
-  }
-
-  hash=hashtblP->hashfunc(keyP)%hashtblP->size;
-  node=hashtblP->nodes[hash];
-
-  while(node) {
-    if(node->key == keyP) {
-      if(prevnode) prevnode->next=node->next;
-      else hashtblP->nodes[hash]=node->next;
-
-      if (node->data) {
-        hashtblP->freefunc(node->data);
-      }
-
-      free(node);
-      hashtblP->num_elements -= 1;
-      return HASH_TABLE_OK;
-    }
-
-    prevnode=node;
-    node=node->next;
-  }
-
-  return HASH_TABLE_KEY_NOT_EXISTS;
-}
-//-------------------------------------------------------------------------------------------------------------------------------
-/*
- * Searching for an element is easy. We just search through the linked list for the corresponding hash value.
- * NULL is returned if we didn't find it.
- */
-hashtable_rc_t hashtable_get(hash_table_t *hashtblP, const uint64_t keyP, void** dataP)
-{
-  hash_node_t *node;
-  hash_size_t  hash;
-
-  if (hashtblP == NULL) {
-    *dataP = NULL;
-    return HASH_TABLE_BAD_PARAMETER_HASHTABLE;
-  }
-
-  hash=hashtblP->hashfunc(keyP)%hashtblP->size;
-  /*  fprintf(stderr, "hashtable_get() key=%s, hash=%d\n", key, hash);*/
-
-  node=hashtblP->nodes[hash];
-
-  while(node) {
-    if(node->key == keyP) {
-      *dataP = node->data;
-      return HASH_TABLE_OK;
-    }
-
-    node=node->next;
-  }
-
-  *dataP = NULL;
-  return HASH_TABLE_KEY_NOT_EXISTS;
-}
-//-------------------------------------------------------------------------------------------------------------------------------
-/*
- * Resizing
- * The number of elements in a hash table is not always known when creating the table.
- * If the number of elements grows too large, it will seriously reduce the performance of most hash table operations.
- * If the number of elements are reduced, the hash table will waste memory. That is why we provide a function for resizing the table.
- * Resizing a hash table is not as easy as a realloc(). All hash values must be recalculated and each element must be inserted into its new position.
- * We create a temporary hash_table_t object (newtbl) to be used while building the new hashes.
- * This allows us to reuse hashtable_insert() and hashtable_remove(), when moving the elements to the new table.
- * After that, we can just free the old table and copy the elements from newtbl to hashtbl.
- */
-
-hashtable_rc_t hashtable_resize(hash_table_t *hashtblP, hash_size_t sizeP)
-{
-  hash_table_t       newtbl;
-  hash_size_t        n;
-  hash_node_t       *node,*next;
-
-  if (hashtblP == NULL) {
-    return HASH_TABLE_BAD_PARAMETER_HASHTABLE;
-  }
-
-  newtbl.size     = sizeP;
-  newtbl.hashfunc = hashtblP->hashfunc;
-
-  if(!(newtbl.nodes=calloc(sizeP, sizeof(hash_node_t*)))) return -1;
-
-  for(n=0; n<hashtblP->size; ++n) {
-    for(node=hashtblP->nodes[n]; node; node=next) {
-      next = node->next;
-      hashtable_insert(&newtbl, node->key, node->data);
-      // Lionel GAUTHIER: BAD CODE TO BE REWRITTEN
-      hashtable_remove(hashtblP, node->key);
-
-    }
-  }
-
-  free(hashtblP->nodes);
-  hashtblP->size=newtbl.size;
-  hashtblP->nodes=newtbl.nodes;
-
-  return HASH_TABLE_OK;
-}
-
-
-
diff --git a/openair3/UTILS/HASHTABLE/hashtable.h b/openair3/UTILS/HASHTABLE/hashtable.h
deleted file mode 100755
index fc9b368724..0000000000
--- a/openair3/UTILS/HASHTABLE/hashtable.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/* from: http://en.literateprograms.org/Hash_table_%28C%29#chunk%20def:node
- * Original licence Creative Commons CC0 1.0 Waiver.(http://creativecommons.org/publicdomain/zero/1.0/)
- */
-#ifndef _UTILS_COLLECTION_HASH_TABLE_H_
-#define _UTILS_COLLECTION_HASH_TABLE_H_
-#include<stdlib.h>
-#include <stdint.h>
-#include <stddef.h>
-
-typedef size_t hash_size_t;
-
-typedef enum hashtable_return_code_e {
-  HASH_TABLE_OK                      = 0,
-  HASH_TABLE_INSERT_OVERWRITTEN_DATA = 1,
-  HASH_TABLE_KEY_NOT_EXISTS          = 2,
-  HASH_TABLE_KEY_ALREADY_EXISTS      = 3,
-  HASH_TABLE_BAD_PARAMETER_HASHTABLE = 4,
-  HASH_TABLE_SYSTEM_ERROR            = 5,
-  HASH_TABLE_CODE_MAX
-} hashtable_rc_t;
-
-
-typedef struct hash_node_s {
-  uint64_t            key;
-  void               *data;
-  struct hash_node_s *next;
-} hash_node_t;
-
-typedef struct hash_table_s {
-  hash_size_t         size;
-  hash_size_t         num_elements;
-  struct hash_node_s **nodes;
-  hash_size_t       (*hashfunc)(const uint64_t);
-  void              (*freefunc)(void*);
-} hash_table_t;
-
-char*           hashtable_rc_code2string(hashtable_rc_t rcP);
-void            hash_free_int_func(void* memoryP);
-hash_table_t   *hashtable_create (hash_size_t   size, hash_size_t (*hashfunc)(const uint64_t ), void (*freefunc)(void*));
-hashtable_rc_t  hashtable_destroy(hash_table_t *hashtbl);
-hashtable_rc_t  hashtable_is_key_exists (hash_table_t *hashtbl, const uint64_t key);
-hashtable_rc_t  hashtable_apply_funct_on_elements (hash_table_t *hashtblP, void funct(uint64_t keyP, void* dataP, void* parameterP), void* parameterP);
-hashtable_rc_t  hashtable_insert (hash_table_t *hashtbl, const uint64_t key, void *data);
-hashtable_rc_t  hashtable_remove (hash_table_t *hashtbl, const uint64_t key);
-hashtable_rc_t  hashtable_get    (hash_table_t *hashtbl, const uint64_t key, void **dataP);
-hashtable_rc_t  hashtable_resize (hash_table_t *hashtbl, hash_size_t size);
-
-
-
-#endif
-
diff --git a/openair3/UTILS/HASHTABLE/obj_hashtable.c b/openair3/UTILS/HASHTABLE/obj_hashtable.c
deleted file mode 100644
index 81abfe03b7..0000000000
--- a/openair3/UTILS/HASHTABLE/obj_hashtable.c
+++ /dev/null
@@ -1,291 +0,0 @@
-#include <string.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include "obj_hashtable.h"
-//-------------------------------------------------------------------------------------------------------------------------------
-/*
- * Default hash function
- * def_hashfunc() is the default used by hashtable_create() when the user didn't specify one.
- * This is a simple/naive hash function which adds the key's ASCII char values. It will probably generate lots of collisions on large hash tables.
- */
-
-static hash_size_t def_hashfunc(const void *keyP, int key_sizeP)
-{
-  hash_size_t hash=0;
-
-  while(key_sizeP) hash^=((unsigned char*)keyP)[key_sizeP --];
-
-  return hash;
-}
-
-//-------------------------------------------------------------------------------------------------------------------------------
-/*
- * Initialisation
- * hashtable_create() sets up the initial structure of the hash table. The user specified size will be allocated and initialized to NULL.
- * The user can also specify a hash function. If the hashfunc argument is NULL, a default hash function is used.
- * If an error occurred, NULL is returned. All other values in the returned obj_hash_table_t pointer should be released with hashtable_destroy().
- */
-obj_hash_table_t *obj_hashtable_create(hash_size_t sizeP, hash_size_t (*hashfuncP)(const void*, int ), void (*freekeyfuncP)(void*), void (*freedatafuncP)(void*))
-{
-  obj_hash_table_t *hashtbl;
-
-  if(!(hashtbl=malloc(sizeof(obj_hash_table_t)))) return NULL;
-
-  if(!(hashtbl->nodes=calloc(sizeP, sizeof(obj_hash_node_t*)))) {
-    free(hashtbl);
-    return NULL;
-  }
-
-  hashtbl->size=sizeP;
-
-  if(hashfuncP) hashtbl->hashfunc=hashfuncP;
-  else hashtbl->hashfunc=def_hashfunc;
-
-  if(freekeyfuncP) hashtbl->freekeyfunc=freekeyfuncP;
-  else hashtbl->freekeyfunc=free;
-
-  if(freedatafuncP) hashtbl->freedatafunc=freedatafuncP;
-  else hashtbl->freedatafunc=free;
-
-  return hashtbl;
-}
-//-------------------------------------------------------------------------------------------------------------------------------
-/*
- * Cleanup
- * The hashtable_destroy() walks through the linked lists for each possible hash value, and releases the elements. It also releases the nodes array and the obj_hash_table_t.
- */
-hashtable_rc_t obj_hashtable_destroy(obj_hash_table_t *hashtblP)
-{
-  hash_size_t n;
-  obj_hash_node_t *node, *oldnode;
-
-  for(n=0; n<hashtblP->size; ++n) {
-    node=hashtblP->nodes[n];
-
-    while(node) {
-      oldnode=node;
-      node=node->next;
-      hashtblP->freekeyfunc(oldnode->key);
-      hashtblP->freedatafunc(oldnode->data);
-      free(oldnode);
-    }
-  }
-
-  free(hashtblP->nodes);
-  free(hashtblP);
-  return HASH_TABLE_OK;
-}
-//-------------------------------------------------------------------------------------------------------------------------------
-hashtable_rc_t obj_hashtable_is_key_exists (obj_hash_table_t *hashtblP, void* keyP, int key_sizeP)
-//-------------------------------------------------------------------------------------------------------------------------------
-{
-  obj_hash_node_t *node;
-  hash_size_t      hash;
-
-  if (hashtblP == NULL) {
-    return HASH_TABLE_BAD_PARAMETER_HASHTABLE;
-  }
-
-  hash=hashtblP->hashfunc(keyP, key_sizeP)%hashtblP->size;
-  node=hashtblP->nodes[hash];
-
-  while(node) {
-    if(node->key == keyP) {
-      return HASH_TABLE_OK;
-    } else if (node->key_size == key_sizeP) {
-      if (memcmp(node->key, keyP, key_sizeP) == 0) {
-        return HASH_TABLE_OK;
-      }
-    }
-
-    node=node->next;
-  }
-
-  return HASH_TABLE_KEY_NOT_EXISTS;
-}
-//-------------------------------------------------------------------------------------------------------------------------------
-/*
- * Adding a new element
- * To make sure the hash value is not bigger than size, the result of the user provided hash function is used modulo size.
- */
-hashtable_rc_t obj_hashtable_insert(obj_hash_table_t *hashtblP, void* keyP, int key_sizeP, void *dataP)
-{
-  obj_hash_node_t *node;
-  hash_size_t      hash;
-
-  if (hashtblP == NULL) {
-    return HASH_TABLE_BAD_PARAMETER_HASHTABLE;
-  }
-
-  hash=hashtblP->hashfunc(keyP, key_sizeP)%hashtblP->size;
-  node=hashtblP->nodes[hash];
-
-  while(node) {
-    if(node->key == keyP) {
-      if (node->data) {
-        hashtblP->freedatafunc(node->data);
-      }
-
-      node->data=dataP;
-      // waste of memory here (keyP is lost) we should free it now
-      return HASH_TABLE_INSERT_OVERWRITTEN_DATA;
-    }
-
-    node=node->next;
-  }
-
-  if(!(node=malloc(sizeof(obj_hash_node_t)))) return -1;
-
-  node->key=keyP;
-  node->data=dataP;
-
-  if (hashtblP->nodes[hash]) {
-    node->next=hashtblP->nodes[hash];
-  } else {
-    node->next = NULL;
-  }
-
-  hashtblP->nodes[hash]=node;
-  return HASH_TABLE_OK;
-}
-//-------------------------------------------------------------------------------------------------------------------------------
-/*
- * To remove an element from the hash table, we just search for it in the linked list for that hash value,
- * and remove it if it is found. If it was not found, it is an error and -1 is returned.
- */
-hashtable_rc_t obj_hashtable_remove(obj_hash_table_t *hashtblP, const void* keyP, int key_sizeP)
-{
-  obj_hash_node_t *node, *prevnode=NULL;
-  hash_size_t      hash;
-
-  if (hashtblP == NULL) {
-    return HASH_TABLE_BAD_PARAMETER_HASHTABLE;
-  }
-
-  hash=hashtblP->hashfunc(keyP, key_sizeP)%hashtblP->size;
-  node=hashtblP->nodes[hash];
-
-  while(node) {
-    if ((node->key == keyP) || ((node->key_size == key_sizeP) && (memcmp(node->key, keyP, key_sizeP) == 0))) {
-      if(prevnode) {
-        prevnode->next=node->next;
-      } else {
-        hashtblP->nodes[hash]=node->next;
-      }
-
-      hashtblP->freekeyfunc(node->key);
-      hashtblP->freedatafunc(node->data);
-      free(node);
-      return HASH_TABLE_OK;
-    }
-
-    prevnode=node;
-    node=node->next;
-  }
-
-  return HASH_TABLE_KEY_NOT_EXISTS;
-}
-//-------------------------------------------------------------------------------------------------------------------------------
-/*
- * Searching for an element is easy. We just search through the linked list for the corresponding hash value.
- * NULL is returned if we didn't find it.
- */
-hashtable_rc_t obj_hashtable_get(obj_hash_table_t *hashtblP, const void* keyP, int key_sizeP, void** dataP)
-{
-  obj_hash_node_t *node;
-  hash_size_t      hash;
-
-  if (hashtblP == NULL) {
-    *dataP = NULL;
-    return HASH_TABLE_BAD_PARAMETER_HASHTABLE;
-  }
-
-  hash=hashtblP->hashfunc(keyP, key_sizeP)%hashtblP->size;
-  node=hashtblP->nodes[hash];
-
-  while(node) {
-    if(node->key == keyP) {
-      *dataP = node->data;
-      return HASH_TABLE_OK;
-    } else if (node->key_size == key_sizeP) {
-      if (memcmp(node->key, keyP, key_sizeP) == 0) {
-        *dataP = node->data;
-        return HASH_TABLE_OK;
-      }
-    }
-
-    node=node->next;
-  }
-
-  *dataP = NULL;
-  return HASH_TABLE_KEY_NOT_EXISTS;
-}
-//-------------------------------------------------------------------------------------------------------------------------------
-/*
- * Function to return all keys of an object hash table
- */
-hashtable_rc_t obj_hashtable_get_keys(obj_hash_table_t *hashtblP, void ** keysP, unsigned int *sizeP)
-{
-  size_t                 n     = 0;
-  obj_hash_node_t       *node  = NULL;
-  obj_hash_node_t       *next  = NULL;
-
-  *sizeP = 0;
-  keysP = calloc(hashtblP->num_elements, sizeof(void *));
-
-  if (keysP) {
-    for(n=0; n<hashtblP->size; ++n) {
-      for(node=hashtblP->nodes[n]; node; node=next) {
-        keysP[*sizeP++] = node->key;
-        next = node->next;
-      }
-    }
-
-    return HASH_TABLE_OK;
-  }
-
-  return HASH_TABLE_SYSTEM_ERROR;
-}
-//-------------------------------------------------------------------------------------------------------------------------------
-/*
- * Resizing
- * The number of elements in a hash table is not always known when creating the table.
- * If the number of elements grows too large, it will seriously reduce the performance of most hash table operations.
- * If the number of elements are reduced, the hash table will waste memory. That is why we provide a function for resizing the table.
- * Resizing a hash table is not as easy as a realloc(). All hash values must be recalculated and each element must be inserted into its new position.
- * We create a temporary obj_hash_table_t object (newtbl) to be used while building the new hashes.
- * This allows us to reuse hashtable_insert() and hashtable_remove(), when moving the elements to the new table.
- * After that, we can just free the old table and copy the elements from newtbl to hashtbl.
- */
-hashtable_rc_t obj_hashtable_resize(obj_hash_table_t *hashtblP, hash_size_t sizeP)
-{
-  obj_hash_table_t       newtbl;
-  hash_size_t        n;
-  obj_hash_node_t       *node,*next;
-
-  if (hashtblP == NULL) {
-    return HASH_TABLE_BAD_PARAMETER_HASHTABLE;
-  }
-
-  newtbl.size     = sizeP;
-  newtbl.hashfunc = hashtblP->hashfunc;
-
-  if(!(newtbl.nodes=calloc(sizeP, sizeof(obj_hash_node_t*)))) return HASH_TABLE_SYSTEM_ERROR;
-
-  for(n=0; n<hashtblP->size; ++n) {
-    for(node=hashtblP->nodes[n]; node; node=next) {
-      next = node->next;
-      obj_hashtable_insert(&newtbl, node->key, node->key_size, node->data);
-      obj_hashtable_remove(hashtblP, node->key, node->key_size);
-    }
-  }
-
-  free(hashtblP->nodes);
-  hashtblP->size=newtbl.size;
-  hashtblP->nodes=newtbl.nodes;
-
-  return HASH_TABLE_OK;
-}
-
-
-
diff --git a/openair3/UTILS/HASHTABLE/obj_hashtable.h b/openair3/UTILS/HASHTABLE/obj_hashtable.h
deleted file mode 100644
index d11a67e264..0000000000
--- a/openair3/UTILS/HASHTABLE/obj_hashtable.h
+++ /dev/null
@@ -1,40 +0,0 @@
-#ifndef _OBJ_HASH_TABLE_H_
-#define _OBJ_HASH_TABLE_H_
-#include<stdlib.h>
-#include <stdint.h>
-#include <stddef.h>
-
-#include "hashtable.h"
-
-typedef size_t hash_size_t;
-
-
-typedef struct obj_hash_node_s {
-  int                 key_size;
-  void               *key;
-  void               *data;
-  struct obj_hash_node_s *next;
-} obj_hash_node_t;
-
-typedef struct obj_hash_table_s {
-  hash_size_t         size;
-  hash_size_t         num_elements;
-  struct obj_hash_node_s **nodes;
-  hash_size_t       (*hashfunc)(const void*, int);
-  void              (*freekeyfunc)(void*);
-  void              (*freedatafunc)(void*);
-} obj_hash_table_t;
-
-obj_hash_table_t   *obj_hashtable_create  (hash_size_t   size, hash_size_t (*hashfunc)(const void*, int ), void (*freekeyfunc)(void*), void (*freedatafunc)(void*));
-hashtable_rc_t      obj_hashtable_destroy (obj_hash_table_t *hashtblP);
-hashtable_rc_t      obj_hashtable_is_key_exists (obj_hash_table_t *hashtblP, void* keyP, int key_sizeP);
-hashtable_rc_t      obj_hashtable_insert  (obj_hash_table_t *hashtblP,       void* keyP, int key_sizeP, void *dataP);
-hashtable_rc_t      obj_hashtable_remove  (obj_hash_table_t *hashtblP, const void* keyP, int key_sizeP);
-hashtable_rc_t      obj_hashtable_get     (obj_hash_table_t *hashtblP, const void* keyP, int key_sizeP, void ** dataP);
-hashtable_rc_t      obj_hashtable_get_keys(obj_hash_table_t *hashtblP, void ** keysP, unsigned int *sizeP);
-hashtable_rc_t      obj_hashtable_resize  (obj_hash_table_t *hashtblP, hash_size_t sizeP);
-
-
-
-#endif
-
-- 
GitLab