int pico_address_compare(union pico_address *a, union pico_address *b, uint16_t proto) { #ifdef PICO_SUPPORT_IPV6 if (proto == PICO_PROTO_IPV6) { return pico_ipv6_compare(&a->ip6, &b->ip6); } #endif #ifdef PICO_SUPPORT_IPV4 if (proto == PICO_PROTO_IPV4) { return pico_ipv4_compare(&a->ip4, &b->ip4); } #endif return 0; }
static int ipv4_link_compare(void *ka, void *kb) { struct pico_ipv4_link *a = ka, *b = kb; int cmp = pico_ipv4_compare(&a->address, &b->address); if (cmp) return cmp; /* zero can be assigned multiple times (e.g. for DHCP) */ if (a->dev != NULL && b->dev != NULL && a->address.addr == PICO_IP4_ANY && b->address.addr == PICO_IP4_ANY) { if (a->dev < b->dev) return -1; if (a->dev > b->dev) return 1; } return 0; }
static int dns_ns_cmp(void *ka, void *kb) { struct pico_dns_ns *a = ka, *b = kb; return pico_ipv4_compare(&a->ns, &b->ns); }