|
|
|
|
@ -98,6 +98,7 @@ static int tgc_load(struct TOPO_GROUP_CONNECT* gc) {
|
|
|
|
|
int self_super = 0; |
|
|
|
|
for (size_t i = 0; i < count; i++) { |
|
|
|
|
if (peers[i].node_id == group->instance->node_id) { self_super = peers[i].supernode; continue; } |
|
|
|
|
size_t previous_count = gc->count; |
|
|
|
|
struct tgc_candidate* c = tgc_add(gc, peers[i].node_id); |
|
|
|
|
if (!c) { u_free(peers); return -1; } |
|
|
|
|
uint8_t device = peers[i].client_type; |
|
|
|
|
@ -105,6 +106,9 @@ static int tgc_load(struct TOPO_GROUP_CONNECT* gc) {
|
|
|
|
|
if (node && node->timestamp) device = node->client_type; |
|
|
|
|
uint8_t kind = peers[i].supernode ? TGC_SUPER : device == CLIENT_TYPE_DESKTOP ? TGC_DESKTOP : |
|
|
|
|
device == CLIENT_TYPE_MOBILE ? TGC_MOBILE : TGC_UNKNOWN; |
|
|
|
|
if (kind == TGC_UNKNOWN && gc->count != previous_count) |
|
|
|
|
DEBUG_WARN(DEBUG_CATEGORY_BGP, "group candidate skipped: group=%016llx node=%016llx device=%u no supernode role", |
|
|
|
|
(unsigned long long)group->group_id, (unsigned long long)c->node_id, device); |
|
|
|
|
if (c->kind != kind) { |
|
|
|
|
DEBUG_INFO(DEBUG_CATEGORY_BGP, "group candidate class: group=%016llx node=%016llx %s->%s device=%u", |
|
|
|
|
(unsigned long long)group->group_id, (unsigned long long)c->node_id, |
|
|
|
|
@ -165,11 +169,13 @@ static void tgc_cancel_pause(struct TOPO_GROUP_CONNECT* gc) {
|
|
|
|
|
gc->pause_wait = NULL; gc->paused = 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#ifdef UTUN_HAVE_STANDBY |
|
|
|
|
static void tgc_resume(void* arg) { |
|
|
|
|
struct TOPO_GROUP_CONNECT* gc = arg; |
|
|
|
|
gc->pause_wait = NULL; gc->paused = 0; |
|
|
|
|
topo_group_connect_changed(gc->group); |
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
static int tgc_pause(struct TOPO_GROUP_CONNECT* gc) { |
|
|
|
|
#ifdef UTUN_HAVE_STANDBY |
|
|
|
|
@ -179,6 +185,7 @@ static int tgc_pause(struct TOPO_GROUP_CONNECT* gc) {
|
|
|
|
|
DEBUG_WARN(DEBUG_CATEGORY_BGP, "cannot wait for standby; using group retry timer"); |
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
|
(void)gc; |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|