summaryrefslogtreecommitdiff
path: root/src/ipcpd/normal/frct.c
Commit message (Collapse)AuthorAgeFilesLines
* ipcpd: Remove FRCT from normal IPCPdimitri staessens2017-05-101-340/+0
| | | | | | | In order to ensure 100% reliable transfer, the protocol state machine that takes care of retransmission and SDU ordering has to be in the application. Flow allocation in the normal now uses fds. The PDU_type field was deprecated and AE's within the DIF can use reserved fds.
* ipcpd: Fix some bugs for the normal splitdimitri staessens2017-04-281-5/+10
|
* ipcpd: normal: Split connection establishmentSander Vrijders2017-04-281-205/+100
| | | | | | Connection establishment was done at the same time as flow allocation. This splits it more cleanly, and allows to re-use the DT AE for other purposes.
* lib: Add call to reserve blocks in rdrbuffdimitri staessens2017-04-261-5/+5
| | | | | | | This adds a call ipcp_sdb_reserve to reserve memory in the rdrbuff without directly writing to a flow. The ipcp_flow_del function was renamed to ipcp_sdb_release. The functions operating on sdbs are moved to their own header.
* ipcpd: normal: Split flow manager into DT and FASander Vrijders2017-04-211-14/+15
| | | | | | 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: Change assert to NULL checkSander Vrijders2017-04-061-1/+5
| | | | | | An assertion was done instead of NULL check, where the FRCT instance could legitimately be NULL, resulting in the IPCP dying when it shouldn't.
* ipcpd: normal: Fix cleanup of FRCT instanceSander Vrijders2017-03-301-9/+14
| | | | | The FRCT instance was not properly cleaned when the PFF could not find the next hop.
* ipcpd: Correctly read MGMT type PDUs from rdrbuffdimitri staessens2017-03-281-35/+36
| | | | They were not consumed upon reading, causing the rdrbuff to fill up.
* ipcpd: Fix use-after-free in frctdimitri staessens2017-03-281-1/+2
|
* ipcpd: normal: Fix invalid free of pciSander Vrijders2017-03-281-5/+0
| | | | | The PCI was being freed by frct, but it was stack memory which was created in the fmgr, resulting in an illegal free.
* ipcpd: normal: Avoid double freeSander Vrijders2017-03-251-0/+1
| | | | | The flow manager should clean up the buffer after the call to frct create instance has either failed or succeeded.
* 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-8/+8
| | | | | | | | | | | | | | | | | | | | 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-4/+4
| | | | | | | 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: Log to the logging systemdimitri staessens2017-02-081-9/+9
| | | | | | | | | | 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, lib: Revise normal IPCPdimitri staessens2017-02-061-8/+8
| | | | | | | | | | 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: Refactor of normal IPCPdimitri staessens2017-01-041-37/+86
| | | | | | | | | | | | | | 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.
* ipcpd: Use qoscube_t instead of enum qos_cubedimitri staessens2016-12-271-7/+7
|
* 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: normal: Fix bugs in connection establishmentSander Vrijders2016-10-271-1/+23
| | | | This fixes some bugs in connection establishment over the normal IPCP.
* build: Compile with strict conversiondimitri staessens2016-10-221-6/+13
| | | | | This has the code checked with -Wcast-qual and -Wconversion flags. These flags were removed because SWIG generated code fails.
* ipcpd: normal: Improve upon the internal designSander Vrijders2016-10-121-18/+15
| | | | | | | | This commit will remove the RMT component from the normal IPCP, as some of its functionality would else be duplicated in the FMGR. Now all reading from flows, either N-1 or N+1 is done in the FMGR, then either passed to the FRCT or a lookup is performed in the PFF (not there yet) and the PDU is forwarded.
* ipcpd: normal: First version of the fast path bootstrapSander Vrijders2016-10-111-89/+211
| | | | | | | This is the first version of the fast path bootstrap in the normal IPCP. It sets up a connection with the other end, and creates the appropriate data structures. N+1 and N-1 SDUs are read and written and passed through the right components.
* ipcpd: normal: Add operations to get and set the PCISander Vrijders2016-09-071-0/+8
| | | | | | | | | This adds the operations needed in the normal IPCP to get and set the Protocol Control Information. It allows to allocate or release space in the current DU. The struct pci can be serialized into newly allocate space. Vice versa, a struct pci can be deserialized given a DU. It allows for decreasing the TTL in the DU and for calculating the CRC32. The TTL and CRC32 can now be selected when creating a new DIF.
* ipcpd: normal: Add initial steps for N+1 flow allocationSander Vrijders2016-08-231-10/+155
| | | | | | | | | | | This adds the initial framework for flow allocation between two N+1 endpoints. The FMGR will receive flow allocation requests and will create a connection as a result, addressed to the right address, it will also pass a flow allocation message to this address. Upon receipt on the other side, the FMGR will be receive a flow allocation message and a pointer to a new connection. The FMGR can then accept or destroy the connection. This commit also introduces the RMT function, which is needed by the FRCT to forward its SDUs on the right file descriptor.
* ipcpd: normal: Allow exchange of static DIF informationSander Vrijders2016-08-081-2/+5
| | | | | | This adds the functionality of exchanging the static DIF information between 2 DIF members. After exchange the enrollment is stopped, and the IPCP that initiated enrollment transitions to the enrolled state.
* ipcpd: normal: Allow initiating enrollmentSander Vrijders2016-08-011-4/+1
| | | | | | | This will add more functionality for enrolling two normal IPCPs with each other. Some bugs were fixed in CDAP. Now on enrolling, an IPCP will send a START message to the other IPCP. Next step is syncing the RIBs.
* ipcpd: normal: Provide initial steps for enrollmentSander Vrijders2016-07-271-3/+18
| | | | | | This provides the normal IPCP with bootstrapping and the initial steps for enrollment. Next step is actually reacting to an enrollment request and sending the data transfer constants.
* ipcpd: normal: Add main loop to normal IPCPSander Vrijders2016-07-151-2/+2
| | | | | | This adds the main loop to the normal IPCP, just like it is present in the shim IPCPs. So in essence, the normal IPCP now reacts to all operations from ipcp.h.
* ipcpd: normal: Establish N-1 management flowsSander Vrijders2016-07-141-0/+67
This adds the intial implementation of establishing management N-1 flows between normal IPCPs. On calling fmgr_mgmt_flow, a management flow will be setup to a certain destination IPCP. After flow allocation, the fd is handed to the RIB manager. The flow manager also listens for incoming flow requests. In case they are management flows, they are handed to the RIB manager, otherwise to the FRCT.