summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authordimitri staessens <dimitri.staessens@intec.ugent.be>2016-08-29 19:49:39 +0200
committerdimitri staessens <dimitri.staessens@intec.ugent.be>2016-08-29 20:32:54 +0200
commit2cc89f6da424ab503af563e0cc92dda43b8f8432 (patch)
tree303d3d61717d4d3018b8025a9825ff799da01c08 /include
parentcaeefb4d96331d24b38e845c99d0517913a71671 (diff)
downloadouroboros-2cc89f6da424ab503af563e0cc92dda43b8f8432.tar.gz
ouroboros-2cc89f6da424ab503af563e0cc92dda43b8f8432.zip
lib: Refactor shm_du_map to shm_rdrbuff
The shm_du_map is renamed to shm_rdrbuff to reflect the Random Deletion Ringbuffer used in the implementation. The close_on_exit call is removed and SDUs are cleaned up by the application in the ap_fini() call. This required a non-blocking peek() operation in the shm_ap_rbuff. Some initial implementation for future support of qos cubes has been added to the shm_rdrbuff.
Diffstat (limited to 'include')
-rw-r--r--include/ouroboros/config.h.in6
-rw-r--r--include/ouroboros/shared.h3
-rw-r--r--include/ouroboros/shm_ap_rbuff.h5
-rw-r--r--include/ouroboros/shm_du_map.h72
-rw-r--r--include/ouroboros/shm_rdrbuff.h84
5 files changed, 92 insertions, 78 deletions
diff --git a/include/ouroboros/config.h.in b/include/ouroboros/config.h.in
index 3a246235..143ae7c8 100644
--- a/include/ouroboros/config.h.in
+++ b/include/ouroboros/config.h.in
@@ -36,9 +36,9 @@
#define IPCP_NORMAL_EXEC "@IPCP_NORMAL_TARGET@"
#define IPCP_LOCAL_EXEC "@IPCP_LOCAL_TARGET@"
#define AP_MAX_FLOWS 256
-#define SHM_DU_BUFF_BLOCK_SIZE sysconf(_SC_PAGESIZE)
-#define SHM_DU_MAP_MULTI_BLOCK
-#define SHM_DU_MAP_FILENAME "/ouroboros.shm"
+#define SHM_RDRB_BLOCK_SIZE sysconf(_SC_PAGESIZE)
+#define SHM_RDRB_MULTI_BLOCK
+#define SHM_RDRB_PREFIX "/ouroboros.rdrb."
#define LOCKFILE_NAME "/ouroboros.lockfile"
#define SHM_BUFFER_SIZE (1 << 14)
#define DU_BUFF_HEADSPACE 128
diff --git a/include/ouroboros/shared.h b/include/ouroboros/shared.h
index 9ee9df21..bfd99eb0 100644
--- a/include/ouroboros/shared.h
+++ b/include/ouroboros/shared.h
@@ -26,7 +26,8 @@
/* FIXME: To be decided which QoS cubes we support */
enum qos_cube {
QOS_CUBE_BE = 0,
- QOS_CUBE_VIDEO
+ QOS_CUBE_VIDEO,
+ QOS_MAX
};
enum flow_state {
diff --git a/include/ouroboros/shm_ap_rbuff.h b/include/ouroboros/shm_ap_rbuff.h
index a1949122..9dad0863 100644
--- a/include/ouroboros/shm_ap_rbuff.h
+++ b/include/ouroboros/shm_ap_rbuff.h
@@ -42,8 +42,9 @@ void shm_ap_rbuff_destroy(struct shm_ap_rbuff * rb);
int shm_ap_rbuff_write(struct shm_ap_rbuff * rb,
struct rb_entry * e);
struct rb_entry * shm_ap_rbuff_read(struct shm_ap_rbuff * rb);
-int shm_ap_rbuff_peek(struct shm_ap_rbuff * rb,
- const struct timespec * timeout);
+int shm_ap_rbuff_peek_idx(struct shm_ap_rbuff * rb);
+int shm_ap_rbuff_peek_b(struct shm_ap_rbuff * rb,
+ const struct timespec * timeout);
ssize_t shm_ap_rbuff_read_port(struct shm_ap_rbuff * rb,
int port_id);
ssize_t shm_ap_rbuff_read_port_b(struct shm_ap_rbuff * rb,
diff --git a/include/ouroboros/shm_du_map.h b/include/ouroboros/shm_du_map.h
deleted file mode 100644
index 98013fc9..00000000
--- a/include/ouroboros/shm_du_map.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Ouroboros - Copyright (C) 2016
- *
- * Shared memory map for data units
- *
- * Dimitri Staessens <dimitri.staessens@intec.ugent.be>
- * Sander Vrijders <sander.vrijders@intec.ugent.be>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#ifndef OUROBOROS_SHM_DU_MAP_H
-#define OUROBOROS_SHM_DU_MAP_H
-
-#include <stdint.h>
-#include <pthread.h>
-#include <sys/types.h>
-
-struct shm_du_buff;
-struct shm_du_map;
-
-struct shm_du_map * shm_du_map_create();
-struct shm_du_map * shm_du_map_open();
-void shm_du_map_close(struct shm_du_map * dum);
-void shm_du_map_close_on_exit(struct shm_du_map * dum);
-void shm_du_map_destroy(struct shm_du_map * dum);
-void * shm_du_map_sanitize(void * o);
-
-/* returns the index of the buffer in the DU map */
-ssize_t shm_du_map_write(struct shm_du_map * dum,
- pid_t dst_api,
- size_t headspace,
- size_t tailspace,
- uint8_t * data,
- size_t data_len);
-ssize_t shm_du_map_write_b(struct shm_du_map * dum,
- pid_t dst_api,
- size_t headspace,
- size_t tailspace,
- uint8_t * data,
- size_t data_len);
-int shm_du_map_read(uint8_t ** dst,
- struct shm_du_map * dum,
- ssize_t idx);
-int shm_du_map_remove(struct shm_du_map * dum,
- ssize_t idx);
-
-uint8_t * shm_du_buff_head_alloc(struct shm_du_map * dum,
- int idx,
- ssize_t size);
-uint8_t * shm_du_buff_tail_alloc(struct shm_du_map * dum,
- int idx,
- ssize_t size);
-int shm_du_buff_head_release(struct shm_du_map * dum,
- int idx,
- ssize_t size);
-int shm_du_buff_tail_release(struct shm_du_map * dum,
- int idx,
- ssize_t size);
-#endif /* OUROBOROS_SHM_DU_MAP_H */
diff --git a/include/ouroboros/shm_rdrbuff.h b/include/ouroboros/shm_rdrbuff.h
new file mode 100644
index 00000000..09256c56
--- /dev/null
+++ b/include/ouroboros/shm_rdrbuff.h
@@ -0,0 +1,84 @@
+/*
+ * Ouroboros - Copyright (C) 2016
+ *
+ * Random Deletion Ring Buffer for Data Units
+ *
+ * Dimitri Staessens <dimitri.staessens@intec.ugent.be>
+ * Sander Vrijders <sander.vrijders@intec.ugent.be>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#ifndef OUROBOROS_SHM_RDRBUFF_H
+#define OUROBOROS_SHM_RDRBUFF_H
+
+#include <ouroboros/shared.h>
+
+#include <stdint.h>
+#include <pthread.h>
+#include <sys/types.h>
+
+struct shm_du_buff;
+struct shm_rdrbuff;
+
+struct shm_rdrbuff * shm_rdrbuff_create();
+
+struct shm_rdrbuff * shm_rdrbuff_open();
+
+void shm_rdrbuff_close(struct shm_rdrbuff * rdrb);
+
+void shm_rdrbuff_destroy(struct shm_rdrbuff * rdrb);
+
+void * shm_rdrbuff_sanitize(void * o);
+
+/* returns the index of the buffer in the DU map */
+ssize_t shm_rdrbuff_write(struct shm_rdrbuff * rdrb,
+ pid_t dst_api,
+ size_t headspace,
+ size_t tailspace,
+ uint8_t * data,
+ size_t data_len);
+
+ssize_t shm_rdrbuff_write_b(struct shm_rdrbuff * rdrb,
+ pid_t dst_api,
+ size_t headspace,
+ size_t tailspace,
+ uint8_t * data,
+ size_t data_len);
+
+int shm_rdrbuff_read(uint8_t ** dst,
+ struct shm_rdrbuff * rdrb,
+ ssize_t idx);
+
+int shm_rdrbuff_remove(struct shm_rdrbuff * rdrb,
+ ssize_t idx);
+
+
+uint8_t * shm_du_buff_head_alloc(struct shm_rdrbuff * rdrb,
+ int idx,
+ ssize_t size);
+
+uint8_t * shm_du_buff_tail_alloc(struct shm_rdrbuff * rdrb,
+ int idx,
+ ssize_t size);
+
+int shm_du_buff_head_release(struct shm_rdrbuff * rdrb,
+ int idx,
+ ssize_t size);
+
+int shm_du_buff_tail_release(struct shm_rdrbuff * rdrb,
+ int idx,
+ ssize_t size);
+#endif /* OUROBOROS_SHM_RDRBUFF_H */