From 4060efec26115dbb9e68da67bc482a12b4f80ea8 Mon Sep 17 00:00:00 2001 From: dimitri staessens Date: Wed, 30 Aug 2017 17:11:22 +0200 Subject: lib: Add fccntl configuration command This replaces the flow_set_* commands with a single fccntl command that can configure flows and the FRCT instance. For more details, see "man 3 fccntl". --- include/ouroboros/CMakeLists.txt | 2 +- include/ouroboros/fccntl.h | 67 +++++++++++++++++++++++++++++++++++ include/ouroboros/fcntl.h | 59 ------------------------------ include/ouroboros/frct_pci.h | 10 +----- include/ouroboros/qos.h | 13 ++++--- include/ouroboros/wrap/CMakeLists.txt | 2 ++ include/ouroboros/wrap/ouroboros.i | 4 +-- 7 files changed, 79 insertions(+), 78 deletions(-) create mode 100644 include/ouroboros/fccntl.h delete mode 100644 include/ouroboros/fcntl.h (limited to 'include') diff --git a/include/ouroboros/CMakeLists.txt b/include/ouroboros/CMakeLists.txt index e39759fd..b6edac53 100644 --- a/include/ouroboros/CMakeLists.txt +++ b/include/ouroboros/CMakeLists.txt @@ -4,7 +4,7 @@ set(HEADER_FILES cdefs.h dev.h errno.h - fcntl.h + fccntl.h fqueue.h ipcp.h irm.h diff --git a/include/ouroboros/fccntl.h b/include/ouroboros/fccntl.h new file mode 100644 index 00000000..d938439f --- /dev/null +++ b/include/ouroboros/fccntl.h @@ -0,0 +1,67 @@ +/* + * Ouroboros - Copyright (C) 2016 - 2017 + * + * Flow and FRCT connection control + * + * Dimitri Staessens + * Sander Vrijders + * + * 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/. + */ + +#ifndef OUROBOROS_FCCNTL_H +#define OUROBOROS_FCCNTL_H + +#include + +#include + +/* Flow flags, same values as fcntl.h */ +#define FLOWFRDONLY 00000000 /* Read-only flow */ +#define FLOWFWRONLY 00000001 /* Write-only flow */ +#define FLOWFRDWR 00000002 /* Read-write flow */ +#define FLOWFACCMODE 00000003 /* Access mask */ + +#define FLOWFNONBLOCK 00004000 /* Non-blocking flow */ +#define FLOWFDEFAULT 00000002 /* Default, blocking, rw */ + +#define FLOWFINVALID (FLOWFWRONLY | FLOWFRDWR) + +/* FRCT flags */ +#define FRCTFRESCNTRL 00000001 /* Feedback from receiver */ +#define FRCTFRTX 00000002 /* Reliable flow */ +#define FRCTFERRCHCK 00000004 /* Check for errors */ +#define FRCTFORDERING 00000010 /* Ordered delivery */ +#define FRCTFPARTIAL 00000020 /* Allow partial delivery */ + +/* Operations */ +#define FLOWSRCVTIMEO 00000001 /* Set read timeout */ +#define FLOWGRCVTIMEO 00000002 /* Get read timeout */ +#define FLOWSSNDTIMEO 00000003 /* Set send timeout */ +#define FLOWGSNDTIMEO 00000004 /* Get send timeout */ +#define FLOWGQOSSPEC 00000005 /* Get qosspec_t */ +#define FLOWSFLAGS 00000006 /* Set flags for flow */ +#define FLOWGFLAGS 00000007 /* Get flags for flow */ +#define FRCTSFLAGS 00000010 /* Set flags for FRCT */ +#define FRCTGFLAGS 00000011 /* Get flags for FRCT */ + +__BEGIN_DECLS + +int fccntl(int fd, + int cmd, + ...); + +__END_DECLS + +#endif /* OUROBOROS_FCCNTL_H */ diff --git a/include/ouroboros/fcntl.h b/include/ouroboros/fcntl.h deleted file mode 100644 index 655a0a03..00000000 --- a/include/ouroboros/fcntl.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Ouroboros - Copyright (C) 2016 - 2017 - * - * Flows - * - * Dimitri Staessens - * Sander Vrijders - * - * 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/. - */ - -#ifndef OUROBOROS_FCNTL_H -#define OUROBOROS_FCNTL_H - -#include - -#include - -/* same values as fcntl.h */ -#define FLOW_O_RDONLY 00000000 -#define FLOW_O_WRONLY 00000001 -#define FLOW_O_RDWR 00000002 -#define FLOW_O_ACCMODE 00000003 - -#define FLOW_O_NONBLOCK 00004000 -#define FLOW_O_DEFAULT 00000002 - -#define FLOW_O_INVALID (FLOW_O_WRONLY | FLOW_O_RDWR) - -__BEGIN_DECLS - -int flow_set_flags(int fd, - int flags); - -int flow_get_flags(int fd); - -int flow_set_timeout(int fd, - const struct timespec * to); - -int flow_get_timeout(int fd, - struct timespec * to); - -int flow_get_qosspec(int fd, - qosspec_t * qs); - -__END_DECLS - -#endif /* OUROBOROS_FCNTL_H */ diff --git a/include/ouroboros/frct_pci.h b/include/ouroboros/frct_pci.h index 601c0ce4..a919bc60 100644 --- a/include/ouroboros/frct_pci.h +++ b/include/ouroboros/frct_pci.h @@ -35,7 +35,7 @@ struct frct_pci { uint64_t seqno; /* Present in config PDU. */ - uint8_t conf_flags; + uint16_t conf_flags; /* Present in flow control PDU. */ uint64_t lwe; @@ -51,14 +51,6 @@ enum pdu_types { PDU_TYPE_RENDEZ_VOUS = 0x10 }; -enum config_flags { - CONF_RESOURCE_CONTROL = 0x01, - CONF_RELIABLE = 0x02, - CONF_ERROR_CHECK = 0x04, - CONF_ORDERED = 0x08, - CONF_PARTIAL = 0x10 -}; - enum data_flags { FLAG_DATA_RUN = 0x01, FLAG_MORE_FRAGMENTS = 0x02 diff --git a/include/ouroboros/qos.h b/include/ouroboros/qos.h index f68df911..3d43dc31 100644 --- a/include/ouroboros/qos.h +++ b/include/ouroboros/qos.h @@ -31,15 +31,14 @@ typedef struct qos_spec { uint64_t bandwidth; /* In bits/s */ uint8_t availability; /* Class of 9s */ uint32_t maximum_interruption; /* In ms */ - - bool resource_control; /* Feedback from receiver */ - bool reliable; /* Reliable flow */ - bool error_check; /* Check for errors */ - bool ordered; /* Ordered delivery */ - bool partial; /* Allow partial delivery */ } qosspec_t; +__BEGIN_DECLS + int qosspec_init(qosspec_t * qs); + int qosspec_fini(qosspec_t * qs); -#endif +__END_DECLS + +#endif /* OUROBOROS_QOS_H */ diff --git a/include/ouroboros/wrap/CMakeLists.txt b/include/ouroboros/wrap/CMakeLists.txt index 435b3b70..44c652d5 100644 --- a/include/ouroboros/wrap/CMakeLists.txt +++ b/include/ouroboros/wrap/CMakeLists.txt @@ -17,6 +17,8 @@ else () # Python assumes C99 since Python 3.6 test_and_set_c_compiler_flag_global(-std=c99) + # SWIG generates code for varargs with an unused parameter + test_and_set_c_compiler_flag_global(-Wno-unused-parameter) # CMake > 3.8 deprecates swig_add_module if (${CMAKE_VERSION} VERSION_LESS 3.8.0) diff --git a/include/ouroboros/wrap/ouroboros.i b/include/ouroboros/wrap/ouroboros.i index 4bf343b9..ebda2453 100644 --- a/include/ouroboros/wrap/ouroboros.i +++ b/include/ouroboros/wrap/ouroboros.i @@ -26,7 +26,7 @@ #include "ouroboros/cdap.h" #include "ouroboros/dev.h" #include "ouroboros/errno.h" -#include "ouroboros/fcntl.h" +#include "ouroboros/fccntl.h" #include "ouroboros/fqueue.h" #include "ouroboros/irm.h" #include "ouroboros/ipcp.h" @@ -41,7 +41,7 @@ typedef int pid_t; %include "ouroboros/cdap.h" %include "ouroboros/dev.h" %include "ouroboros/errno.h" -%include "ouroboros/fcntl.h" +%include "ouroboros/fccntl.h" %include "ouroboros/fqueue.h" %include "ouroboros/irm.h" %include "ouroboros/ipcp.h" -- cgit v1.2.3