| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
|
| |
This will let the link state policy react to flow up and down events
by notifying the PFFs of the routing instances of this event so they
can take an appropriate action.
|
|
|
|
|
|
| |
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.
|
|\
| |
| |
| | |
Be routing
|
| |
| |
| |
| |
| | |
This adds a refcount to the graph edges so that it is only included in
the calculation if both sides announced it.
|
| |
| |
| |
| |
| | |
This keeps the index in the vertex struct so that is more easily
available during Dijkstra.
|
| |
| |
| |
| |
| |
| | |
This simplifies the Dijkstra implementation by immediately setting the
correct next hop during Dijkstra instead of looping through the list
of predecessors afterwards.
|
| |
| |
| |
| |
| | |
This simplifies several internal graph functions by passing an array
of bools instead of an array of vertices.
|
| |
| |
| |
| |
| |
| | |
This returns a list as routing table instead of a pointer to a pointer
to a pointer, which simplifies the looping through the routing table
and makes it more extensible for future additions.
|
|\ \
| | |
| | |
| | | |
ipcpd: normal: Set clock to realtime clock
|
| |/
| |
| |
| |
| |
| | |
A pthread_cond_wait was using the pthread_cond_clock and thereby
timing out constantly, consuming 100% CPU. This changes it to use the
realtime clock.
|
|/ |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The lookup_update was waiting for the LU_INIT state to resolve under
dht->lock which prevented that update.
This PR fixes this bug, but leaves a (very rare) bug when the
lookup_destroy is called while the lookup_update is waiting for the
LU_INIT state to resolve. The solution also is a (harmless) lock
inversion, but this is also not the best.
Fixes #51
Fixes #52
|
|
|
|
|
|
|
|
|
|
|
| |
This adds a threadpool manager to the DHT. This was needed because the
detached thread could cause a data race on shutdown.
The threadpool manager is revised to allow multiple instances in a
single program.
The irmd and ipcp now store commands in a buffer (list) instead of a
single buffer before passing it to handler threads.
|
|\
| |
| |
| | |
Some bugfixes
|
| | |
|
|\|
| |
| |
| | |
Some bugfixes
|
| | |
|
|/ |
|
| |
|
|\
| |
| |
| | |
ipcpd: normal: Add alternate hop PFF
|
| |
| |
| |
| |
| | |
This adds a PFF that returns an alternate hop as next hop in case the
hop that would have been returned is down.
|
|/
|
|
|
|
|
|
|
| |
This revises the sdu_scheduler of the normal IPCP to create a
scheduler thread per QoS cube and let the kernel scheduler schedule
them based on a priority. Priorities can be set at build time in a
range of 0-100, which will be mapped onto a suitable priority for the
kernel scheduler. The current scheduler policy is fixed to SCHED_RR
since it is the most suitable scheduler defined by POSIX.
|
|
|
|
| |
This avoids potential data races on rib.fuse.
|
|\
| |
| |
| | |
ipcpd: Handle DHT SDUs in different thread
|
| |
| |
| |
| |
| |
| |
| | |
The DHT will now spawn a thread when receiving SDUs to avoid
starvation of sdu scheduler threads.
Also fixes some locking issues.
|
|/
|
|
|
| |
This turns the PDU Forwarding Function of the IPCP into a policy. For
now only the simple PFF policy is available.
|
|\
| |
| |
| | |
ipcpd: Refuse query when DHT not in running state
|
| | |
|
|/ |
|
|
|
|
|
|
|
|
|
| |
The DHT will now enroll or sync when a data transfer connection is
added. This avoids the need to create a temporary data transfer
connection during enrollment (and speeds it up considerably).
The notifier system was modified to take an opaque pointer to the
object that registers as a parameter.
|
|
|
|
|
|
|
|
| |
This adds the flow down event to Ouroboros. In the shim-eth-llc, a
netlink socket is opened which listens to device up/down events. For
each event the flow is then adjusted with fccntl to notify the user
the flow is down or back up again. In the normal IPCP an event is
thrown if a write reports that the flow is down.
|
| |
|
|
|
|
|
|
|
| |
This adds a virtual RIB that is accessible as a filesystem that is
accessed through a fuse mountpoint (configurable , default is
/tmp/ouroboros). Currently, each IPCP will export its link state
database.
|
|
|
|
|
|
|
|
| |
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: Shutdown DHT work thread first at destroy
|
| |
| |
| |
| | |
This prevents a potential deadlock on the wrlock.
|
|/
|
|
|
| |
When enroll or bootstrap failed, finalize_components could be called
twice, resulting in double frees or use-after-free.
|
|
|
|
|
| |
This avoids a redefinition of a typedef which is a C11 feature, and
thus not supported by clang when the c89 switch is enabled.
|
|
|
|
|
|
|
| |
This will remove the dst parameter from enroll_boot, since it was only
being used in logging. It also turns some other debug logs into info
logs, and makes the component names as they are used in logs all
lowercase.
|
| |
|
| |
|
|\
| |
| |
| | |
ipcpd: Fix state in dht lookup at lookup_wait
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The correct state was returned but not set internally in the
lookup_struct, causing lookup_wait to return a lookup in LU_PENDING if
the wait timedout.
This also unlocks the IRMd during register calls and fixes some
cleanup if lookup_wait gets interrupted.
Fixes #48
|
|\ \
| |/
|/|
| | |
lib, ipcpd: Fix e-mail addresses in protobuf files
|
| |
| |
| |
| | |
This fixes the wrong e-mail addresses in the protobuf files.
|
|/ |
|
|
|
|
| |
This fixes several bugs as reported by the clang static analyzer.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
This enables user-written tools to instruct IPCPs to establish and
tear down connections (a.k.a. adjacencies) between its internal
components (Management and Data Transfer).
For more info, do "irm ipcp connect" or "irm ipcp disconnect" on the
command line.
This commit exposes a deletion bug in the RIB where FSO's fail to
unpack/parse. This will be fixed when the RIB is deprecated.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|