Nest: names for nhu_state values

It took too much time to analyze what's the meaning of nhu_state values
so I spent less than the same amount of time documenting it.
This commit is contained in:
Jan Moskyto Matejka 2017-02-22 14:02:03 +01:00
parent b2b84359ab
commit 93f50ca317
2 changed files with 19 additions and 8 deletions

View file

@ -168,6 +168,11 @@ typedef struct rtable {
struct fib_iterator nhu_fit; /* Next Hop Update FIB iterator */ struct fib_iterator nhu_fit; /* Next Hop Update FIB iterator */
} rtable; } rtable;
#define NHU_CLEAN 0
#define NHU_SCHEDULED 1
#define NHU_RUNNING 2
#define NHU_DIRTY 3
typedef struct network { typedef struct network {
struct rte *routes; /* Available routes for this network */ struct rte *routes; /* Available routes for this network */
struct fib_node n; /* FIB flags reserved for kernel syncer */ struct fib_node n; /* FIB flags reserved for kernel syncer */

View file

@ -1561,11 +1561,14 @@ rt_schedule_hcu(rtable *tab)
static inline void static inline void
rt_schedule_nhu(rtable *tab) rt_schedule_nhu(rtable *tab)
{ {
if (tab->nhu_state == 0) if (tab->nhu_state == NHU_CLEAN)
ev_schedule(tab->rt_event); ev_schedule(tab->rt_event);
/* state change 0->1, 2->3 */ /* state change:
tab->nhu_state |= 1; * NHU_CLEAN -> NHU_SCHEDULED
* NHU_RUNNING -> NHU_DIRTY
*/
tab->nhu_state |= NHU_SCHEDULED;
} }
void void
@ -1897,13 +1900,13 @@ rt_next_hop_update(rtable *tab)
struct fib_iterator *fit = &tab->nhu_fit; struct fib_iterator *fit = &tab->nhu_fit;
int max_feed = 32; int max_feed = 32;
if (tab->nhu_state == 0) if (tab->nhu_state == NHU_CLEAN)
return; return;
if (tab->nhu_state == 1) if (tab->nhu_state == NHU_SCHEDULED)
{ {
FIB_ITERATE_INIT(fit, &tab->fib); FIB_ITERATE_INIT(fit, &tab->fib);
tab->nhu_state = 2; tab->nhu_state = NHU_RUNNING;
} }
FIB_ITERATE_START(&tab->fib, fit, net, n) FIB_ITERATE_START(&tab->fib, fit, net, n)
@ -1918,10 +1921,13 @@ rt_next_hop_update(rtable *tab)
} }
FIB_ITERATE_END; FIB_ITERATE_END;
/* state change 2->0, 3->1 */ /* State change:
* NHU_DIRTY -> NHU_SCHEDULED
* NHU_RUNNING -> NHU_CLEAN
*/
tab->nhu_state &= 1; tab->nhu_state &= 1;
if (tab->nhu_state > 0) if (tab->nhu_state != NHU_CLEAN)
ev_schedule(tab->rt_event); ev_schedule(tab->rt_event);
} }