summaryrefslogtreecommitdiff
path: root/include/ouroboros/fqueue.h
diff options
context:
space:
mode:
authordimitri staessens <dimitri.staessens@intec.ugent.be>2016-10-19 22:25:46 +0200
committerdimitri staessens <dimitri.staessens@intec.ugent.be>2016-10-21 14:17:51 +0200
commitf516b51169020ea1957010fbd1005d746f01b1d9 (patch)
tree03d19b0dfb6eab68f8ee5a3ecac5300c7bef2f4b /include/ouroboros/fqueue.h
parentc79ab46894053312f80390bf13a52c238a7d4704 (diff)
downloadouroboros-f516b51169020ea1957010fbd1005d746f01b1d9.tar.gz
ouroboros-f516b51169020ea1957010fbd1005d746f01b1d9.zip
lib: Demultiplex the fast path
The fast path will now use an incoming ring buffer per flow per process. This necessitated the development of a new method for the asynchronous io call, which is now based on an event queue system for scalability (fqueue). The ipcpd's and tools have been updated to this API.
Diffstat (limited to 'include/ouroboros/fqueue.h')
-rw-r--r--include/ouroboros/fqueue.h62
1 files changed, 62 insertions, 0 deletions
diff --git a/include/ouroboros/fqueue.h b/include/ouroboros/fqueue.h
new file mode 100644
index 00000000..943d6510
--- /dev/null
+++ b/include/ouroboros/fqueue.h
@@ -0,0 +1,62 @@
+/*
+ * Ouroboros - Copyright (C) 2016
+ *
+ * Flow queues
+ *
+ * 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_FQUEUE_H
+#define OUROBOROS_FQUEUE_H
+
+#include <stdbool.h>
+#include <time.h>
+
+struct flow_set;
+
+struct fqueue;
+
+typedef struct flow_set flow_set_t;
+typedef struct fqueue fqueue_t;
+
+flow_set_t * flow_set_create();
+
+void flow_set_destroy(flow_set_t * set);
+
+fqueue_t * fqueue_create();
+
+void fqueue_destroy(struct fqueue * fq);
+
+void flow_set_zero(flow_set_t * set);
+
+int flow_set_add(flow_set_t * set,
+ int fd);
+
+bool flow_set_has(flow_set_t * set,
+ int fd);
+
+void flow_set_del(flow_set_t * set,
+ int fd);
+
+int fqueue_next(fqueue_t * fq);
+
+int flow_event_wait(flow_set_t * set,
+ fqueue_t * fq,
+ const struct timespec * timeout);
+
+#endif /* OUROBOROS_SELECT_H */