summaryrefslogtreecommitdiff
path: root/src/ipcpd/normal/routing.c
Commit message (Collapse)AuthorAgeFilesLines
* ipcpd: normal: Add Loop-Free Alternates routingSander Vrijders2017-09-291-1/+2
| | | | | | This adds the Loop-Free Alternates (LFA) policy. In case a link goes down a LFA may be selected to route the SDUs on without causing loops instead of the main hop that just went down.
* ipcpd: normal: Add alternate hop PFFSander Vrijders2017-09-211-1/+1
| | | | | This adds a PFF that returns an alternate hop as next hop in case the hop that would have been returned is down.
* ipcpd: Revise internals of normal IPCPdimitri staessens2017-09-121-9/+4
| | | | | | | | This removes the RIB as a datastructure and CDAP as the protocol between IPCPs. CDAP, the rib and related sources are deprecated. The link-state protocol policy is udpated to use its own protocol based on a simple broadcast strategy along a tree. The neighbors struct is deprecated and moved to the library as a generic notifier component.
* ipcpd: Deprecate gam as autonomous componentdimitri staessens2017-08-281-8/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | The graph adjacency manager has been deprecated in favor of providing an external interface into the connectivity manager so that adjacencies can be controlled from the command line, user scripts or user applications. The gam and its associated policies were removed from the normal IPCP and the IRM configuration tools. The "/members" part of the RIB was deprecated. Removal of the gam means that initial connectivity based on changes in the RIB can't be provided, so some changes were required throughout the normal IPCP. The enrollment procedure was revised to establish its own connectivity. First, it gets boot information from a peer by establishing a connection to the remote enrollment component and downloading the IPCP configuratoin. This is now done using its own protocol buffers message in anticipation of deprecation of the RIB and CDAP for communication within a DIF. After the boot information is downloaded, it establishes a data transfer flow for enrolling the directory (DHT). After the DHT has enrolled, it signals the peer to that enrollment is done, and the data transfer connection is torn down. Signaling connections is done via the nbs struct, which is now passed to the connmgr, which enables control of the connectivity graph from external sources.
* build: Revise the build systemdimitri staessens2017-08-211-1/+2
| | | | | | | | | | This revises the build system to have configuration per system component. System settings can now be set using cmake. The standard compliance defines were removed from configuration header and are set in the sources where needed. Also some small code refactors, such as moving the data for shims out of the ipcp structure to the respective shims were performed.
* build: Replace fsf snail mail with contact URLdimitri staessens2017-08-131-1/+1
|
* ipcpd: normal: Make routing a policySander Vrijders2017-05-151-311/+14
| | | | | | This makes the routing component into a policy since different approaches may exist to do this, depending on how high the rank of the DIF is.
* ipcpd: normal: Add graph regression testSander Vrijders2017-03-291-1/+1
| | | | | This adds a regression test for the graph component to test the routing table.
* ipcpd: normal: Make graph undirectedSander Vrijders2017-03-291-0/+4
| | | | | | This turns the directed graph into an undirected one. Only one side of the flow creates an FSDB entry. The graph structure creates an edge object for every vertex involved when an edge is updated or removed.
* ipcpd: normal: Remove graph_add_edge operationSander Vrijders2017-03-281-12/+3
| | | | | | This removes the graph_add_edge operation of the graph component. The routing component now only listens to RO_MODIFY events, and updates the graph accordingly.
* lib, ipcpd: Fix bugs in ro setsSander Vrijders2017-03-281-2/+2
| | | | | This fixes several bugs in the ro sets, rib. And it fixes several bugs in the graph and routing component of the normal IPCP.
* ipcpd: normal: Fill in forwarding tableSander Vrijders2017-03-241-6/+36
| | | | | | The routing now takes the results of the routing table to fill in the forwarding table, by going through the neighbors and filling in the right fd.
* ipcpd: normal: Fix bad freeSander Vrijders2017-03-241-12/+12
| | | | | This fixes a bad free. The table was only freed if it was NULL, instead of the other way around.
* ipcpd: normal: Add routing table calculationSander Vrijders2017-03-231-6/+36
| | | | | | This adds routing table calculation to the graph component. The routing instances can then periodically ask the graph component for the routing table, and update their PFFs accordingly.
* ipcpd: normal: Initialize qosspecSander Vrijders2017-03-221-0/+2
| | | | | The QoS spec was not being initialized before being added to the graph structure, resulting in an error when compiled with clang.
* ipcpd: normal: Several bugfixesSander Vrijders2017-03-211-2/+3
| | | | These solve several bugfixes in the normal.
* ipcpd: normal: Split fmgr init into init and startSander Vrijders2017-03-211-0/+4
| | | | | | 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: routing: Listen to RIB eventsSander Vrijders2017-03-201-33/+151
| | | | | | This lets the routing component listen to RIB events. It listens to /fsdb which is populated with FSOs. The graph that is kept within the routing component is updated depending on the event that was received.
* ipcpd: normal: Add graph structureSander Vrijders2017-03-141-37/+20
| | | | | | This adds a graph structure which will be updated by routing when it is notified about a new RIB event. The routing can then use this graph as input for calculating the shortest path to a destination.
* ipcpd: normal: Add Flow State Objects to RIBSander Vrijders2017-03-131-41/+106
| | | | | | | 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-2/+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-0/+132
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.