Loading...
Searching...
No Matches
fib.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2014 Martin Landsmann <Martin.Landsmann@HAW-Hamburg.de>
3 * SPDX-License-Identifier: LGPL-2.1-only
4 */
5
6#pragma once
7
25
26#include <stdint.h>
27
28#include "net/fib/table.h"
29#include "sched.h"
30
31#ifdef __cplusplus
32extern "C" {
33#endif
34
38typedef struct {
39 uint8_t *address;
40 uint8_t address_size;
41 uint32_t address_flags;
43
48#define FIB_MSG_RP_SIGNAL_UNREACHABLE_DESTINATION (0x99)
49
53#define FIB_MSG_RP_SIGNAL_DESTINATION_USED (0x98)
54
58#define FIB_MSG_RP_SIGNAL_SOURCE_ROUTE_CREATED (0x97)
59
67
71#define FIB_LIFETIME_NO_EXPIRE (0xFFFFFFFFffffffff)
72
76#define FIB_FLAG_RPL_ROUTE (1UL << 0)
77
81#define FIB_FLAG_NET_PREFIX_SHIFT (24)
82
86#define FIB_FLAG_NET_PREFIX_MASK (0xffUL << FIB_FLAG_NET_PREFIX_SHIFT)
87
93void fib_init(fib_table_t *table);
94
101
114int fib_register_rp(fib_table_t *table, uint8_t *prefix, size_t prefix_addr_type_size);
115
133int fib_add_entry(fib_table_t *table, kernel_pid_t iface_id, uint8_t *dst,
134 size_t dst_size, uint32_t dst_flags, uint8_t *next_hop,
135 size_t next_hop_size, uint32_t next_hop_flags,
136 uint32_t lifetime);
137
153int fib_update_entry(fib_table_t *table, uint8_t *dst, size_t dst_size,
154 uint8_t *next_hop, size_t next_hop_size,
155 uint32_t next_hop_flags, uint32_t lifetime);
156
164void fib_remove_entry(fib_table_t *table, uint8_t *dst, size_t dst_size);
165
175void fib_flush(fib_table_t *table, kernel_pid_t interface);
176
198 uint8_t *next_hop, size_t *next_hop_size,
199 uint32_t* next_hop_flags, uint8_t *dst, size_t dst_size,
200 uint32_t dst_flags);
201
221int fib_get_destination_set(fib_table_t *table, uint8_t *prefix,
222 size_t prefix_size,
224 size_t *dst_set_size);
225
239int fib_sr_create(fib_table_t *table, fib_sr_t **fib_sr, kernel_pid_t sr_iface_id,
240 uint32_t sr_flags, uint32_t sr_lifetime);
241
255int fib_sr_read_head(fib_table_t *table, fib_sr_t *fib_sr, kernel_pid_t *sr_iface_id,
256 uint32_t *sr_flags, uint32_t *sr_lifetime);
257
273 uint8_t *dst, size_t *dst_size);
274
289int fib_sr_set(fib_table_t *table, fib_sr_t *fib_sr, kernel_pid_t *sr_iface_id,
290 uint32_t *sr_flags, uint32_t *sr_lifetime);
291
301int fib_sr_delete(fib_table_t *table, fib_sr_t *fib_sr);
302
315int fib_sr_next(fib_table_t *table, fib_sr_t *fib_sr, fib_sr_entry_t **sr_path_entry);
316
331int fib_sr_search(fib_table_t *table, fib_sr_t *fib_sr, uint8_t *addr, size_t addr_size,
332 fib_sr_entry_t **sr_path_entry);
333
348 uint8_t *dst, size_t dst_size);
349
367 fib_sr_entry_t *sr_path_entry, uint8_t *addr, size_t addr_size,
368 bool keep_remaining_route);
369
384int fib_sr_entry_delete(fib_table_t *table, fib_sr_t *fib_sr, uint8_t *addr, size_t addr_size,
385 bool keep_remaining_route);
386
404 uint8_t *addr_old, size_t addr_old_size,
405 uint8_t *addr_new, size_t addr_new_size);
406
422 uint8_t *addr, size_t *addr_size);
423
453int fib_sr_get_route(fib_table_t *table, uint8_t *dst, size_t dst_size, kernel_pid_t *sr_iface_id,
454 uint32_t *sr_flags,
455 uint8_t *addr_list, size_t *addr_list_size, size_t *element_size,
456 bool reverse, fib_sr_t **fib_sr);
457
464
469
476
483
491
492#if FIB_DEVEL_HELPER
504int fib_devel_get_lifetime(fib_table_t *table, uint64_t *lifetime, uint8_t *dst,
505 size_t dst_size);
506
507#endif
508
509#ifdef __cplusplus
510}
511#endif
512
int16_t kernel_pid_t
Unique process identifier.
Definition sched.h:134
void fib_init(fib_table_t *table)
initializes all FIB entries with 0
int fib_sr_entry_overwrite(fib_table_t *table, fib_sr_t *fib_sr, uint8_t *addr_old, size_t addr_old_size, uint8_t *addr_new, size_t addr_new_size)
overwrites the address of an entry with a new address
int fib_sr_next(fib_table_t *table, fib_sr_t *fib_sr, fib_sr_entry_t **sr_path_entry)
iterates to the next entry in the sr_path
int fib_sr_entry_append(fib_table_t *table, fib_sr_t *fib_sr, uint8_t *dst, size_t dst_size)
append a new entry at the end of the source route, i.e.
void fib_print_fib_table(fib_table_t *table)
Prints the FIB content (does not print the entries)
int fib_sr_get_route(fib_table_t *table, uint8_t *dst, size_t dst_size, kernel_pid_t *sr_iface_id, uint32_t *sr_flags, uint8_t *addr_list, size_t *addr_list_size, size_t *element_size, bool reverse, fib_sr_t **fib_sr)
copies a source route to the given destination
int fib_sr_search(fib_table_t *table, fib_sr_t *fib_sr, uint8_t *addr, size_t addr_size, fib_sr_entry_t **sr_path_entry)
searches the entry containing the given address
void fib_print_sr(fib_table_t *table, fib_sr_t *sr)
Prints the given FIB sourceroute.
int fib_sr_entry_get_address(fib_table_t *table, fib_sr_t *fib_sr, fib_sr_entry_t *sr_path_entry, uint8_t *addr, size_t *addr_size)
writes the address of an entry to the given out pointers
void fib_deinit(fib_table_t *table)
de-initializes the FIB entries and source route entries
int fib_sr_set(fib_table_t *table, fib_sr_t *fib_sr, kernel_pid_t *sr_iface_id, uint32_t *sr_flags, uint32_t *sr_lifetime)
sets the provided parameters in the given sr header if a given parameter is NULL its considered not t...
void fib_print_notify_rrp(void)
Prints the kernel_pid_t for all registered RRPs.
int fib_get_destination_set(fib_table_t *table, uint8_t *prefix, size_t prefix_size, fib_destination_set_entry_t *dst_set, size_t *dst_set_size)
provides a set of destination addresses matching the given prefix If the out buffer is insufficient l...
int fib_update_entry(fib_table_t *table, uint8_t *dst, size_t dst_size, uint8_t *next_hop, size_t next_hop_size, uint32_t next_hop_flags, uint32_t lifetime)
Updates an entry in the FIB table with next hop and lifetime.
void fib_flush(fib_table_t *table, kernel_pid_t interface)
removes all entries from the corresponding FIB table and interface combination
void fib_print_routes(fib_table_t *table)
Prints the FIB content.
int fib_get_num_used_entries(fib_table_t *table)
returns the actual number of used FIB entries
int fib_register_rp(fib_table_t *table, uint8_t *prefix, size_t prefix_addr_type_size)
Registration of a routing protocol handler function.
int fib_sr_entry_add(fib_table_t *table, fib_sr_t *fib_sr, fib_sr_entry_t *sr_path_entry, uint8_t *addr, size_t addr_size, bool keep_remaining_route)
adds a new entry behind a given sr entry
int fib_sr_read_destination(fib_table_t *table, fib_sr_t *fib_sr, uint8_t *dst, size_t *dst_size)
reads the destination address from the sr head to the given location
int fib_sr_read_head(fib_table_t *table, fib_sr_t *fib_sr, kernel_pid_t *sr_iface_id, uint32_t *sr_flags, uint32_t *sr_lifetime)
reads the information from the sr head to the given locations
int fib_sr_delete(fib_table_t *table, fib_sr_t *fib_sr)
deletes the sr
int fib_add_entry(fib_table_t *table, kernel_pid_t iface_id, uint8_t *dst, size_t dst_size, uint32_t dst_flags, uint8_t *next_hop, size_t next_hop_size, uint32_t next_hop_flags, uint32_t lifetime)
Adds a new entry in the corresponding FIB table for global destination and next hop.
int fib_get_next_hop(fib_table_t *table, kernel_pid_t *iface_id, uint8_t *next_hop, size_t *next_hop_size, uint32_t *next_hop_flags, uint8_t *dst, size_t dst_size, uint32_t dst_flags)
provides a next hop for a given destination
int fib_sr_entry_delete(fib_table_t *table, fib_sr_t *fib_sr, uint8_t *addr, size_t addr_size, bool keep_remaining_route)
removes an entry from a source route
int fib_sr_create(fib_table_t *table, fib_sr_t **fib_sr, kernel_pid_t sr_iface_id, uint32_t sr_flags, uint32_t sr_lifetime)
creates a new source route
void fib_remove_entry(fib_table_t *table, uint8_t *dst, size_t dst_size)
removes an entry from the corresponding FIB table
#define UNIVERSAL_ADDRESS_SIZE
size of the used addresses in bytes
entry used to collect available destinations
Definition fib.h:63
uint8_t dest[UNIVERSAL_ADDRESS_SIZE]
The destination address.
Definition fib.h:64
size_t dest_size
The destination address size.
Definition fib.h:65
Container descriptor for a FIB source route.
Definition table.h:65
Meta information of a FIB table.
Definition table.h:104
Routing Protocol (RP) message content to request/reply notification.
Definition fib.h:38
uint8_t address_size
The address size.
Definition fib.h:40
uint8_t * address
The pointer to the address.
Definition fib.h:39
uint32_t address_flags
The flags for the given address.
Definition fib.h:41
Types and functions for operating fib tables.
struct fib_sr_entry fib_sr_entry_t
Container descriptor for a FIB source route entry.