summaryrefslogtreecommitdiff
path: root/src/ipcpd/normal/fmgr.c
Commit message (Collapse)AuthorAgeFilesLines
* ipcpd: normal: Split flow manager into DT and FASander Vrijders2017-04-211-748/+0
| | | | | | This splits the flow manager into the Data Transfer AE, which is in charge of routing SDUs, and the Flow Allocator AE, which handles flow allocations.
* ipcpd: normal: Extract SDU scheduling componentSander Vrijders2017-04-191-127/+66
| | | | | | This extracts the SDU scheduling component out of the Flow Manager since the functionality was duplicated. For both the N-1 and N+1 flow sets an SDU scheduling component is now created.
* ipcpd: Allow specifying the hash algorithm to usedimitri staessens2017-04-161-3/+3
| | | | Currently CRC32, MD5, and SHA3 (224, 256, 384 and 512 bit) are supported.
* lib, ipcpd, irmd: Register hash instead of namedimitri staessens2017-04-131-10/+21
| | | | | | | | | All information passed over the IRMd/IPCP boundary for using IPC services (flow allocation, registration) is now hashed. This effectively fixes the shared namespace between DIFs and the IRMDs. This PR also fixes some API issues (adding const identifiers), shuffles the include headers a bit and some small bugs.
* ipcpd: Fix race condition with concurrent allocsdimitri staessens2017-04-061-3/+41
|
* ipcpd: normal: Add missing else clauseSander Vrijders2017-04-051-9/+6
| | | | | A missing else clause was missing in the fast path, causing the PCI to be shrunk when it should not be. A double free has also been fixed.
* ipcpd: Add lock for allocation requestsSander Vrijders2017-04-051-0/+3
| | | | | This adds a lock to prevent a race condition between flow_req_arr and flow_alloc_resp.
* ipcpd: Revert timeout in fmgrdimitri staessens2017-04-011-6/+1
| | | | | | | Since there are no SDUs on most QoS cubes, the fmgr was always timing out on most QoS cubes, causing considerable delays in most SDUs. The timeout was reset to a very small value (so the bug in glibc 2.25 will cause lockups again).
* ipcpd: normal: Fix logsSander Vrijders2017-03-311-3/+6
| | | | | This removes some logs in the graph component and replaces prints of uin64_t variables with an architecture agnostic variant.
* ipcpd: Fix memleaks in fmgrdimitri staessens2017-03-281-0/+4
|
* ipcpd: normal: Call shm_pci_init on fmgr initSander Vrijders2017-03-281-0/+6
| | | | | | The shm PCI was never initialized during flow manager init. This commit will do that, and initialize the pdu length correctly as well, since it was not being written into the RIB, nor read in shm_pci_init.
* ipcpd: normal: Fix locking of PFFSander Vrijders2017-03-281-0/+9
| | | | | | This adds fixes the locking of the PFF which was externalized, but not yet correctly updated within the PFF component itself and within the flow manager.
* ipcpd: normal: Fix compilation issueSander Vrijders2017-03-281-1/+1
|
* ipcpd: normal: Avoid double freeSander Vrijders2017-03-251-3/+3
| | | | | The flow manager should clean up the buffer after the call to frct create instance has either failed or succeeded.
* Merged in dstaesse/ouroboros/be-fmgr (pull request #417)dimitri staessens2017-03-231-1/+5
|\ | | | | | | ipcpd: Increase update timeout in fmgr
| * ipcpd: Increase update timeout in fmgrdimitri staessens2017-03-231-1/+5
| | | | | | | | This works around a possible bug in glibc 2.25.
* | ipcpd: normal: Add memset of conn_infoSander Vrijders2017-03-221-0/+2
|/ | | | | This initializes conn_info in the ribmgr and fmgr before it is passed to cacep.
* ipcpd: normal: Several bugfixesSander Vrijders2017-03-211-1/+0
| | | | These solve several bugfixes in the normal.
* ipcpd: normal: Split fmgr init into init and startSander Vrijders2017-03-211-40/+42
| | | | | | This split the initialization of the flow manager into an init part and a start part. This avoids the usage of data structures that have not been properly initialized yet.
* ipcpd: normal: Add Flow State Objects to RIBSander Vrijders2017-03-131-4/+19
| | | | | | | This makes the routing component create a Flow State Database (FSDB). An FSDB contains Flow State Objects (FSOs). An FSO is created when a neighbor is added, it is deleted when a neighbor is removed and its QoS is updated when a neighbor's QoS changes.
* Change email addresses to ugent.beSander Vrijders2017-03-031-1/+2
| | | | | | | Our mailserver was migrated from intec.ugent.be to the central ugent.be emailserver. This PR updates the header files to reflect this change as well. Some header files were also homogenized if the parameters within the functions were badly aligned.
* ipcpd: normal: Refactor application entities and add neighbors structSander Vrijders2017-03-031-112/+171
| | | | | | | | | | | | | | | | | | | | This refactors the different Application Entities of the normal IPCP. They all listen to and use the connection manager to establish new application connections. This commit also adds a neighbors struct to the normal IPCP. It contains neighbor structs that contain application connection. Notifiers can be registered in case a neighbor changes (added, removed, QoS changed). The flow manager has an instance of this neighbors struct and listens to these events to update its flow set. The routing component also listens to these events so that it can update the FSDB if needed. The flow manager now also creates the PFF instances and the routing instances per QoS cube. The RIB manager also uses this an instance of the neighbors struct and listens to neighbor events as well.
* ipcpd: normal: Add connection managerSander Vrijders2017-03-021-1/+1
| | | | | | | This adds the connection manager which allows the different AEs of the normal IPCP to register with it. An AE can then use the connection manager to allocate a flow to a neighbor, or to wait for a new connection from a neighbor.
* lib: Split authentication from CACEPdimitri staessens2017-02-271-11/+0
| | | | | | | By removing authentication as part of CACEP, all policies disappear. CACEP becomes a policy-free connection establishment protocol between Application Entities. Authentication can later be added cleanly as a pure policy function when needed.
* lib: Remove application entity nameSander Vrijders2017-02-241-4/+1
| | | | | The AE name should not be passed over the layer boundaries. If an application has more than one AE it should exchange this in CACEP.
* Revise CACEP APIdimitri staessens2017-02-241-9/+9
| | | | | | The information passed to CACEP is split between the information about the connection and the information to be used during the authentication exchange.
* ipcpd: Move RIB configuration to common headerdimitri staessens2017-02-171-3/+4
| | | | | Moves the definitions of paths in the RIB for the normal IPCP to a header ribconfig.h to avoid repetition.
* ipcpd: Fix leaking name in cacep_infodimitri staessens2017-02-101-0/+1
|
* lib: Log to the logging systemdimitri staessens2017-02-081-21/+21
| | | | | | | | | | This removes the logfile and outputs log messages to the logging system. The creation of the logfiles (as well as the ap_init() call) were moved into ipcp_init() to simplify the IPCP creation and shutdown. Fixes #25 Fixes #27
* ipcpd: Revise PCI manipulation in normaldimitri staessens2017-02-071-31/+11
| | | | | | | | | | | The pci function will store offsets to avoid having to recalculate them every time. TTL handling is removed from the fmgr, the TTL is automatically decreased when deserializing the PCI (or set to 1 if there is no TTL present so the PDU will be forwarded). The deserialisation function now takes a pointer to a struct pci as input to avoid memory allocation and release each time a PDU is processed. Some checks have been replaced with assert() and return values replaced with void where it makes sense.
* ipcpd, lib: Revise normal IPCPdimitri staessens2017-02-061-39/+61
| | | | | | | | | | This PR updates the normal IPCP to use the new RIB. The old ribmgr is removed and replaced by a stub that needs to be implemented. All components (dir, fmgr, frct) were adapted to the new RIB API. A lot of functionality was moved outside of the ribmgr, such as the addr_auth, which is now a component of the IPCP. The address is also stored to the ipcpi struct. The irm tool has an option to set the gam policy of the rib manager.
* ipcpd: normal: Create policies for GAMSander Vrijders2017-01-121-2/+2
| | | | | This allows the selection of a policy for the graph adjacency manager. Currently we only support constructing a complete graph.
* ipcpd: normal: Use new list APISander Vrijders2017-01-111-3/+3
| | | | | After a previous commit the API of the linked list was changed. This updates the files that were not yet merged upstream.
* ipcpd: normal: Add graph adjacency managerSander Vrijders2017-01-091-73/+124
| | | | | This commit adds the graph adjacency manager to the normal IPCP, which sets up N-1 flows to other members.
* ipcpd: normal: Fix bad unlockSander Vrijders2017-01-041-2/+0
| | | | This removes a bad unlock in the flow manager.
* Merged in dstaesse/ouroboros/be-normal-refactor (pull request #333)Sander Vrijders2017-01-041-2/+2
|\ | | | | | | ipcpd: Fix uninitialized variables in ribmgr
| * ipcpd: Fix bug in fmgrdimitri staessens2017-01-041-2/+2
| |
* | Merged in dstaesse/ouroboros/be-normal-refactor (pull request #331)Sander Vrijders2017-01-041-92/+10
|\| | | | | | | ipcpd: Refactor normal ipcp, initial commit
| * ipcpd: Refactor of normal IPCPdimitri staessens2017-01-041-92/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Reorganizes the normal IPCP a bit to make sure internal components do not need to access the state of the IPCP. The IPCP has now a thread calling accept and delegating it to the correct component based on the AE name (this used to be in the fmgr). Internal components are initialized upon enrollment or bootstrap of the IPCP. If a step fails, the IPCP goes back to the INIT state, if all components boot correctly, it goes to the operational state. RIB synchronization is still done by sending a CDAP start/stop and syncing with a ribmgr state, but needs revision later on.
* | lib, ipcpd, irmd: Proof of concept QoSdimitri staessens2017-01-031-5/+6
|/ | | | | | | | | | Now correctly relays the qoscube end-to-end in the stack. A simple function specifying the cube in the spec is used for initial testing. The translation is now done in dev.c, but it could be moved elsewhere when qos cabability matures and the need arises.
* ipcpd: Wait for operational state to start fmgrdimitri staessens2016-12-281-13/+3
| | | | | | The main thread will wait for the IPCP_OPERATIONAL state before starting the fmgr main thread by calling fmgr_init(), instead of the fmgr itself waiting for that state.
* ipcpd: Rename normal/path to normal/pathnamedimitri staessens2016-12-281-1/+1
|
* ouroboros: Correct license statementsdimitri staessens2016-12-241-3/+2
| | | | | This corrects the license statements on all files. Installed headers are LGPLv2.1, the rest of the code is GPLv2.
* ipcpd, lib: Refactor normal ipcp and cdapdimitri staessens2016-12-241-238/+152
| | | | | Refactors the normal IPCP fmgr and ribmgr, and modifies the API for cdap so that no callbacks are needed.
* src, tools: Set/get timeout and get qos for flowsdimitri staessens2016-12-121-3/+3
| | | | | | | | | | | | | | | | Receiver timeouts can now be set on a flow using the flow_set_timeout function. Specifying NULL disables the timeout. The flow_get_timeout function gets the value for the timeout. This commit also deprecates fcntl in favor of flow_get_flags and flow_set_flags functions. struct qos_spec is typedef'd as a qosspec_t. The tools and cdap.c are updated to use the new API. Fixes a bug in operf client where the client's writer thread wouldn't cancel on SIGINT.
* Merged in sandervrijders/ouroboros/be-operational-state (pull request #319)dimitri staessens2016-12-061-2/+2
|\ | | | | | | ipcpd: Change IPCP_RUNNING to IPCP_OPERATIONAL
| * ipcpd: Change IPCP_RUNNING to IPCP_OPERATIONALSander Vrijders2016-12-061-2/+2
| | | | | | | | Changes a state of the IPCP to a more correct terminology.
* | ipcpd: normal: Fix errors on IPCP shutdownSander Vrijders2016-12-061-3/+3
|/ | | | | This fixes several bad cleanups in the normal IPCP when it is shutting down.
* ipcpd: normal: Provide directory for registered namesSander Vrijders2016-12-021-19/+50
| | | | | This adds a directory to the normal IPCP that maps names on IPCP addresses.
* ipcpd: Split IPCP state PENDING_ENROLSander Vrijders2016-11-301-2/+2
| | | | | | | | This will split the IPCP state PENDING_ENROL into IPCP_CONFIG and IPCP_BOOTING. IPCP_CONFIG is concerned only with configuring the IPCP with the bare essence. When in IPCP_BOOTING, the IPCP will complete its configuration by starting its policies, and thus making the IPCP completely functioning.