Merge branch 'revert'
This commit is contained in:
commit
00b31a6b2e
65
ip/iproute.c
65
ip/iproute.c
|
|
@ -191,42 +191,20 @@ static int filter_nlmsg(struct nlmsghdr *n, struct rtattr **tb, int host_len)
|
||||||
return 0;
|
return 0;
|
||||||
if ((filter.tos^r->rtm_tos)&filter.tosmask)
|
if ((filter.tos^r->rtm_tos)&filter.tosmask)
|
||||||
return 0;
|
return 0;
|
||||||
if (filter.rdst.family) {
|
if (filter.rdst.family &&
|
||||||
if (r->rtm_family != filter.rdst.family ||
|
(r->rtm_family != filter.rdst.family || filter.rdst.bitlen > r->rtm_dst_len))
|
||||||
filter.rdst.bitlen > r->rtm_dst_len)
|
return 0;
|
||||||
return 0;
|
if (filter.mdst.family &&
|
||||||
} else if (filter.rdst.flags & PREFIXLEN_SPECIFIED) {
|
(r->rtm_family != filter.mdst.family ||
|
||||||
if (filter.rdst.bitlen > r->rtm_dst_len)
|
(filter.mdst.bitlen >= 0 && filter.mdst.bitlen < r->rtm_dst_len)))
|
||||||
return 0;
|
return 0;
|
||||||
}
|
if (filter.rsrc.family &&
|
||||||
if (filter.mdst.family) {
|
(r->rtm_family != filter.rsrc.family || filter.rsrc.bitlen > r->rtm_src_len))
|
||||||
if (r->rtm_family != filter.mdst.family ||
|
return 0;
|
||||||
(filter.mdst.bitlen >= 0 &&
|
if (filter.msrc.family &&
|
||||||
filter.mdst.bitlen < r->rtm_dst_len))
|
(r->rtm_family != filter.msrc.family ||
|
||||||
return 0;
|
(filter.msrc.bitlen >= 0 && filter.msrc.bitlen < r->rtm_src_len)))
|
||||||
} else if (filter.mdst.flags & PREFIXLEN_SPECIFIED) {
|
return 0;
|
||||||
if (filter.mdst.bitlen >= 0 &&
|
|
||||||
filter.mdst.bitlen < r->rtm_dst_len)
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
if (filter.rsrc.family) {
|
|
||||||
if (r->rtm_family != filter.rsrc.family ||
|
|
||||||
filter.rsrc.bitlen > r->rtm_src_len)
|
|
||||||
return 0;
|
|
||||||
} else if (filter.rsrc.flags & PREFIXLEN_SPECIFIED) {
|
|
||||||
if (filter.rsrc.bitlen > r->rtm_src_len)
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
if (filter.msrc.family) {
|
|
||||||
if (r->rtm_family != filter.msrc.family ||
|
|
||||||
(filter.msrc.bitlen >= 0 &&
|
|
||||||
filter.msrc.bitlen < r->rtm_src_len))
|
|
||||||
return 0;
|
|
||||||
} else if (filter.msrc.flags & PREFIXLEN_SPECIFIED) {
|
|
||||||
if (filter.msrc.bitlen >= 0 &&
|
|
||||||
filter.msrc.bitlen < r->rtm_src_len)
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
if (filter.rvia.family) {
|
if (filter.rvia.family) {
|
||||||
int family = r->rtm_family;
|
int family = r->rtm_family;
|
||||||
|
|
||||||
|
|
@ -243,9 +221,7 @@ static int filter_nlmsg(struct nlmsghdr *n, struct rtattr **tb, int host_len)
|
||||||
|
|
||||||
if (tb[RTA_DST])
|
if (tb[RTA_DST])
|
||||||
memcpy(&dst.data, RTA_DATA(tb[RTA_DST]), (r->rtm_dst_len+7)/8);
|
memcpy(&dst.data, RTA_DATA(tb[RTA_DST]), (r->rtm_dst_len+7)/8);
|
||||||
if (filter.rsrc.family || filter.msrc.family ||
|
if (filter.rsrc.family || filter.msrc.family) {
|
||||||
filter.rsrc.flags & PREFIXLEN_SPECIFIED ||
|
|
||||||
filter.msrc.flags & PREFIXLEN_SPECIFIED) {
|
|
||||||
if (tb[RTA_SRC])
|
if (tb[RTA_SRC])
|
||||||
memcpy(&src.data, RTA_DATA(tb[RTA_SRC]), (r->rtm_src_len+7)/8);
|
memcpy(&src.data, RTA_DATA(tb[RTA_SRC]), (r->rtm_src_len+7)/8);
|
||||||
}
|
}
|
||||||
|
|
@ -265,18 +241,15 @@ static int filter_nlmsg(struct nlmsghdr *n, struct rtattr **tb, int host_len)
|
||||||
memcpy(&prefsrc.data, RTA_DATA(tb[RTA_PREFSRC]), host_len/8);
|
memcpy(&prefsrc.data, RTA_DATA(tb[RTA_PREFSRC]), host_len/8);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((filter.rdst.family || filter.rdst.flags & PREFIXLEN_SPECIFIED) &&
|
if (filter.rdst.family && inet_addr_match(&dst, &filter.rdst, filter.rdst.bitlen))
|
||||||
inet_addr_match(&dst, &filter.rdst, filter.rdst.bitlen))
|
|
||||||
return 0;
|
return 0;
|
||||||
if ((filter.mdst.family || filter.mdst.flags & PREFIXLEN_SPECIFIED) &&
|
if (filter.mdst.family && filter.mdst.bitlen >= 0 &&
|
||||||
inet_addr_match(&dst, &filter.mdst, r->rtm_dst_len))
|
inet_addr_match(&dst, &filter.mdst, r->rtm_dst_len))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if ((filter.rsrc.family || filter.rsrc.flags & PREFIXLEN_SPECIFIED) &&
|
if (filter.rsrc.family && inet_addr_match(&src, &filter.rsrc, filter.rsrc.bitlen))
|
||||||
inet_addr_match(&src, &filter.rsrc, filter.rsrc.bitlen))
|
|
||||||
return 0;
|
return 0;
|
||||||
if ((filter.msrc.family || filter.msrc.flags & PREFIXLEN_SPECIFIED) &&
|
if (filter.msrc.family && filter.msrc.bitlen >= 0 &&
|
||||||
filter.msrc.bitlen >= 0 &&
|
|
||||||
inet_addr_match(&src, &filter.msrc, r->rtm_src_len))
|
inet_addr_match(&src, &filter.msrc, r->rtm_src_len))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
|
|
||||||
13
lib/utils.c
13
lib/utils.c
|
|
@ -690,6 +690,19 @@ int get_prefix_1(inet_prefix *dst, char *arg, int family)
|
||||||
char *slash;
|
char *slash;
|
||||||
int err, bitlen, flags;
|
int err, bitlen, flags;
|
||||||
|
|
||||||
|
memset(dst, 0, sizeof(*dst));
|
||||||
|
|
||||||
|
if (strcmp(arg, "default") == 0 ||
|
||||||
|
strcmp(arg, "any") == 0 ||
|
||||||
|
strcmp(arg, "all") == 0) {
|
||||||
|
if ((family == AF_DECnet) || (family == AF_MPLS))
|
||||||
|
return -1;
|
||||||
|
dst->family = family;
|
||||||
|
dst->bytelen = 0;
|
||||||
|
dst->bitlen = 0;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
slash = strchr(arg, '/');
|
slash = strchr(arg, '/');
|
||||||
if (slash)
|
if (slash)
|
||||||
*slash = 0;
|
*slash = 0;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue