0
0
mirror of https://gitlab.nic.cz/labs/bird.git synced 2024-12-22 09:41:54 +00:00

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 */
} rtable;
#define NHU_CLEAN 0
#define NHU_SCHEDULED 1
#define NHU_RUNNING 2
#define NHU_DIRTY 3
typedef struct network {
struct rte *routes; /* Available routes for this network */
struct fib_node n; /* FIB flags reserved for kernel syncer */

View File

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