11#if DETWS_ENABLE_LINK_MANAGER
13int detws_link_select(
const LinkManager *m)
18 for (
size_t i = 0; i < m->n; i++)
23 if (best < 0 || m->ifaces[i].priority > m->ifaces[best].priority)
29void detws_link_init(LinkManager *m, LinkIface *ifaces,
size_t n)
34 m->n = ifaces ? n : 0;
35 m->active = detws_link_select(m);
38int detws_link_active(
const LinkManager *m)
40 return m ? m->active : -1;
43bool detws_link_set(LinkManager *m,
size_t idx,
bool up,
int *from,
int *to)
45 if (!m || !m->ifaces || idx >= m->n)
48 *from = m ? m->active : -1;
50 *to = m ? m->active : -1;
54 m->ifaces[idx].up = up;
55 m->active = detws_link_select(m);
60 return m->active != prev;
Multi-interface egress selection + graceful escalation/failover (DETWS_ENABLE_LINK_MANAGER).