Got it. Thanks. -----Original Message----- From: Maria Jan Matějka <jan.matejka@nic.cz> Sent: Monday, March 11, 2019 6:19 PM To: bird-users@network.cz; Derek Pan <DPan@advaoptical.com>; bird-users@network.cz Subject: Re: maybe it is a bug in nexthop__same function On March 11, 2019 10:57:06 AM GMT+01:00, Derek Pan <DPan@advaoptical.com> wrote:
Hi
I think below function should be used by comparing two netxhop object with different pointer. If this function is called, the X and Y always have different pointer values, but if their values are same, they also can be treated as the same. I think the "return x== y;" should be replaced by "return 1;". Please have a look. Thank.
int nexthop__same(struct nexthop *x, struct nexthop *y) { for (; x && y; x = x->next, y = y->next) { if (!ipa_equal(x->gw, y->gw) || (x->iface != y->iface) || (x->flags != y->flags) || (x->weight != y->weight) || (x->labels_orig != y->labels_orig) || (x->labels != y->labels)) return 0;
for (int i = 0; i < x->labels; i++) if (x->label[i] != y->label[i]) return 0; }
return x == y; }
The next hop object is a linked list. This function compares it nodewise. The loop condition is x && y, meaning that both are not null, and the third expression in the for-header retrieves the next nodes. When the loop ends without returning 0, it is sure that x or y is null. If the other is also null, the lists are same, if not, there are some more next hop in one of the lists and they are obviously not same. The return x == y is precisely what we want there. Or do I miss something looking into this only on my phone in the underground? Maria