On 1/22/18 10:26 AM, Serhey Popovych wrote: > diff --git a/ip/ipaddress.c b/ip/ipaddress.c > index ba60125..38d994e 100644 > --- a/ip/ipaddress.c > +++ b/ip/ipaddress.c > @@ -1523,19 +1523,20 @@ int print_addrinfo(const struct sockaddr_nl *who, > struct nlmsghdr *n, > if (fnmatch(filter.label, label, 0) != 0) > return 0; > } > - if (filter.pfx.family) { > - if (rta_tb[IFA_LOCAL]) { > - inet_prefix dst = { .family = ifa->ifa_family }; > - > - memcpy(&dst.data, RTA_DATA(rta_tb[IFA_LOCAL]), > RTA_PAYLOAD(rta_tb[IFA_LOCAL])); > - if (inet_addr_match(&dst, &filter.pfx, > filter.pfx.bitlen)) > - return 0; > - } > - } > > if (filter.family && filter.family != ifa->ifa_family) > return 0; > > + if (filter.pfx.family && rta_tb[IFA_LOCAL]) { > + struct rtattr *rta = rta_tb[IFA_LOCAL]; > + inet_prefix dst, *f_pfx = &filter.pfx; > + > + if (get_addr_rta(&dst, rta, f_pfx->family)) > + return 0; > + if (inet_addr_match(&dst, f_pfx, f_pfx->bitlen)) > + return 0; > + } > +
Those 2 checks are a consistent them throughout the patches. Given that why not create a helper that takes an rta and an inet_prefix and returns the result of both checks?