1 Description: Revert "iproute: "list/flush/save default" selected all of the routes"
3 No longer worked as expected which breaks user scripts and
4 expectations. It no longer flushed all IPv4 routes.
5 Bug: https://bugs.debian.og/891511
8 Applied-Upstream: https://patchwork.ozlabs.org/patch/884882/
9 Author: Stephen Hemminger <stephen@networkplumber.org>
10 Last-Update: 2018-03-12
15 if ((filter.tos^r->rtm_tos)&filter.tosmask)
17 - if (filter.rdst.family) {
18 - if (r->rtm_family != filter.rdst.family ||
19 - filter.rdst.bitlen > r->rtm_dst_len)
21 - } else if (filter.rdst.flags & PREFIXLEN_SPECIFIED) {
22 - if (filter.rdst.bitlen > r->rtm_dst_len)
25 - if (filter.mdst.family) {
26 - if (r->rtm_family != filter.mdst.family ||
27 - (filter.mdst.bitlen >= 0 &&
28 - filter.mdst.bitlen < r->rtm_dst_len))
30 - } else if (filter.mdst.flags & PREFIXLEN_SPECIFIED) {
31 - if (filter.mdst.bitlen >= 0 &&
32 - filter.mdst.bitlen < r->rtm_dst_len)
35 - if (filter.rsrc.family) {
36 - if (r->rtm_family != filter.rsrc.family ||
37 - filter.rsrc.bitlen > r->rtm_src_len)
39 - } else if (filter.rsrc.flags & PREFIXLEN_SPECIFIED) {
40 - if (filter.rsrc.bitlen > r->rtm_src_len)
43 - if (filter.msrc.family) {
44 - if (r->rtm_family != filter.msrc.family ||
45 - (filter.msrc.bitlen >= 0 &&
46 - filter.msrc.bitlen < r->rtm_src_len))
48 - } else if (filter.msrc.flags & PREFIXLEN_SPECIFIED) {
49 - if (filter.msrc.bitlen >= 0 &&
50 - filter.msrc.bitlen < r->rtm_src_len)
53 + if (filter.rdst.family &&
54 + (r->rtm_family != filter.rdst.family || filter.rdst.bitlen > r->rtm_dst_len))
56 + if (filter.mdst.family &&
57 + (r->rtm_family != filter.mdst.family ||
58 + (filter.mdst.bitlen >= 0 && filter.mdst.bitlen < r->rtm_dst_len)))
60 + if (filter.rsrc.family &&
61 + (r->rtm_family != filter.rsrc.family || filter.rsrc.bitlen > r->rtm_src_len))
63 + if (filter.msrc.family &&
64 + (r->rtm_family != filter.msrc.family ||
65 + (filter.msrc.bitlen >= 0 && filter.msrc.bitlen < r->rtm_src_len)))
67 if (filter.rvia.family) {
68 int family = r->rtm_family;
73 memcpy(&dst.data, RTA_DATA(tb[RTA_DST]), (r->rtm_dst_len+7)/8);
74 - if (filter.rsrc.family || filter.msrc.family ||
75 - filter.rsrc.flags & PREFIXLEN_SPECIFIED ||
76 - filter.msrc.flags & PREFIXLEN_SPECIFIED) {
77 + if (filter.rsrc.family || filter.msrc.family) {
79 memcpy(&src.data, RTA_DATA(tb[RTA_SRC]), (r->rtm_src_len+7)/8);
82 memcpy(&prefsrc.data, RTA_DATA(tb[RTA_PREFSRC]), host_len/8);
85 - if ((filter.rdst.family || filter.rdst.flags & PREFIXLEN_SPECIFIED) &&
86 - inet_addr_match(&dst, &filter.rdst, filter.rdst.bitlen))
87 + if (filter.rdst.family && inet_addr_match(&dst, &filter.rdst, filter.rdst.bitlen))
89 - if ((filter.mdst.family || filter.mdst.flags & PREFIXLEN_SPECIFIED) &&
90 + if (filter.mdst.family && filter.mdst.bitlen >= 0 &&
91 inet_addr_match(&dst, &filter.mdst, r->rtm_dst_len))
94 - if ((filter.rsrc.family || filter.rsrc.flags & PREFIXLEN_SPECIFIED) &&
95 - inet_addr_match(&src, &filter.rsrc, filter.rsrc.bitlen))
96 + if (filter.rsrc.family && inet_addr_match(&src, &filter.rsrc, filter.rsrc.bitlen))
98 - if ((filter.msrc.family || filter.msrc.flags & PREFIXLEN_SPECIFIED) &&
99 - filter.msrc.bitlen >= 0 &&
100 + if (filter.msrc.family && filter.msrc.bitlen >= 0 &&
101 inet_addr_match(&src, &filter.msrc, r->rtm_src_len))
107 dst->family = family;
110 - dst->flags |= PREFIXLEN_SPECIFIED;