summaryrefslogtreecommitdiff
path: root/nest/route.h
diff options
context:
space:
mode:
authorMaria Matejka <mq@ucw.cz>2022-03-09 13:49:31 +0100
committerMaria Matejka <mq@ucw.cz>2022-03-09 13:49:31 +0100
commit4eeae48214bde9807e8b3312f5a7a5de9f2f1b42 (patch)
treec855923f61954acdc8e9785951e7478df8c65e41 /nest/route.h
parent01c9f3d78e596336434fd313e4ed8bdc8db248b6 (diff)
parent56c8f2f03a8631417dc3b730625c08ffca42ead2 (diff)
Merge commit '56c8f2f0' into haugesund
Conflicts: nest/route.h nest/rt-table.c
Diffstat (limited to 'nest/route.h')
-rw-r--r--nest/route.h8
1 files changed, 6 insertions, 2 deletions
diff --git a/nest/route.h b/nest/route.h
index c7fb67aa..98d030a9 100644
--- a/nest/route.h
+++ b/nest/route.h
@@ -167,7 +167,6 @@ typedef struct rtable {
char *name; /* Name of this table */
list channels; /* List of attached channels (struct channel) */
uint addr_type; /* Type of address data stored in table (NET_*) */
- int pipe_busy; /* Pipe loop detection */
int use_count; /* Number of protocols using this table */
u32 rt_count; /* Number of routes in the table */
@@ -195,6 +194,7 @@ typedef struct rtable {
struct f_trie *trie_old; /* Old prefix trie waiting to be freed */
u32 trie_lock_count; /* Prefix trie locked by walks */
u32 trie_old_lock_count; /* Old prefix trie locked by walks */
+ struct tbf rl_pipe; /* Rate limiting token buffer for pipe collisions */
list subscribers; /* Subscribers for notifications */
struct timer *settle_timer; /* Settle time for notifications */
@@ -262,6 +262,9 @@ typedef struct rte {
u32 id; /* Table specific route id */
byte flags; /* Table-specific flags */
byte pflags; /* Protocol-specific flags */
+ u8 generation; /* If this route import is based on other previously exported route,
+ this value should be 1 + MAX(generation of the parent routes).
+ Otherwise the route is independent and this value is zero. */
} rte;
struct rte_storage {
@@ -373,8 +376,9 @@ int rt_feed_channel(struct channel *c);
void rt_feed_channel_abort(struct channel *c);
int rt_reload_channel(struct channel *c);
void rt_reload_channel_abort(struct channel *c);
+void rt_refeed_channel(struct channel *c);
void rt_prune_sync(rtable *t, int all);
-int rte_update_out(struct channel *c, const net_addr *n, rte *new, rte *old, struct rte_storage **old_exported, int refeed);
+int rte_update_out(struct channel *c, const net_addr *n, rte *new, rte *old, struct rte_storage **old_exported);
struct rtable_config *rt_new_table(struct symbol *s, uint addr_type);
static inline int rt_is_ip(rtable *tab)