11#if PC_ENABLE_LINK_MANAGER
13int pc_link_select(
const LinkManager *m)
20 for (
size_t i = 0; i < m->n; i++)
27 if (best < 0 || m->ifaces[i].priority > m->ifaces[best].priority)
35void pc_link_init(LinkManager *m, LinkIface *ifaces,
size_t n)
42 m->n = ifaces ? n : 0;
43 m->active = pc_link_select(m);
46int pc_link_active(
const LinkManager *m)
48 return m ? m->active : -1;
51bool pc_link_set(LinkManager *m,
size_t idx,
bool up,
int *from,
int *to)
53 if (!m || !m->ifaces || idx >= m->n)
57 *from = m ? m->active : -1;
61 *to = m ? m->active : -1;
66 m->ifaces[idx].up = up;
67 m->active = pc_link_select(m);
76 return m->active != prev;
Multi-interface egress selection + graceful escalation/failover (PC_ENABLE_LINK_MANAGER).