X-Git-Url: https://git.enpas.org/?a=blobdiff_plain;ds=sidebyside;f=vw-nm-tools.h;h=7d3c32681e0d1435270f1911cb40ce46ba997e7e;hb=619746cf21fadd0bddc675083c7899e88fbc0774;hp=44d5a1b39c1c7cd39878e0695d69fd7d0a9889f7;hpb=93a111710a794d7c602d2b31387e4f882df4a7cd;p=revag-nm.git diff --git a/vw-nm-tools.h b/vw-nm-tools.h index 44d5a1b..7d3c326 100644 --- a/vw-nm-tools.h +++ b/vw-nm-tools.h @@ -137,19 +137,38 @@ static void nm_reset(struct NM_Main *nm) { unsigned id; + if (nm->nodes[nm->my_id].next == nm->my_id) { + nm->lonely_resets++; + } + for (id = 0; id < nm->max_nodes; id++) { nm->nodes[id].next = 0xff; nm->nodes[id].state = NM_MAIN_OFF; } nm->nodes[nm->my_id].next = nm->my_id; - nm->nodes[nm->my_id].state = NM_MAIN_LOGIN; + if (nm->lonely_resets >= 5) { + printf("Limp home detected :(\n"); + + nm->nodes[nm->my_id].state = NM_MAIN_LIMPHOME; + nm_set_timer_limphome(nm); + } else { + nm->nodes[nm->my_id].state = NM_MAIN_LOGIN; + nm_set_timer_now(nm); + } +} + - nm_set_timer_now(nm); +static void nm_initreset(struct NM_Main *nm) +{ + nm_reset(nm); + + nm->lonely_resets = 0; } + static struct NM_Main* nm_alloc(unsigned node_bits, NM_ID my_id, canid_t can_base) { struct NM_Main *nm; @@ -173,7 +192,7 @@ static struct NM_Main* nm_alloc(unsigned node_bits, NM_ID my_id, canid_t can_bas nm->my_id = my_id; nm->can_base = can_base; - nm_reset(nm); + nm_initreset(nm); return nm; }