;
+ CF_ADDTO(conf, gr_opts)
+
+ gr_opts: GRACEFUL RESTART WAIT expr ';' { new_config->gr_wait = $4; } ;
+
+
/* Creation of routing tables */
-tab_sorted:
+CF_ADDTO(conf, table)
+
+table_sorted:
{ $$ = 0; }
| SORTED { $$ = 1; }
;
int rt_feed_baby(struct proto *p);
void rt_feed_baby_abort(struct proto *p);
int rt_prune_loop(void);
-struct rtable_config *rt_new_table(struct symbol *s);
+struct rtable_config *rt_new_table(struct symbol *s, int addr_type);
+static inline int rt_match(int rt, u32 rtlist) { return !rtlist || ((1 << rt) & rtlist); }
+int rt_addrsize(int addr_type); // XXXX needed?
+
+ static inline void
+ rt_mark_for_prune(rtable *tab)
+ {
+ if (tab->prune_state == RPS_RUNNING)
+ fit_get(&tab->fib, &tab->prune_fit);
+
+ tab->prune_state = RPS_SCHEDULED;
+ }
+
struct rt_show_data {
ip_addr prefix;
unsigned pxlen;
#endif
node krt_node; /* Node in krt_proto_list */
- int initialized; /* First scan has already been finished */
+ int addr_type; /* Kernel table address type */
+ byte ready; /* Initial feed has been finished */
+ byte initialized; /* First scan has been finished */
};
extern pool *krt_pool;