]>
Commit | Line | Data |
---|---|---|
6a1a5031 RJ |
1 | Description: Revert "iproute: "list/flush/save default" selected all of the routes" |
2 | # ip route flush all | |
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 | |
6 | Forwarded: not-needed | |
7 | Origin: upstream | |
8 | Applied-Upstream: https://patchwork.ozlabs.org/patch/884882/ | |
9 | Author: Stephen Hemminger <stephen@networkplumber.org> | |
10 | Last-Update: 2018-03-12 | |
11 | --- a/ip/iproute.c | |
12 | +++ b/ip/iproute.c | |
13 | @@ -191,42 +191,20 @@ | |
14 | return 0; | |
15 | if ((filter.tos^r->rtm_tos)&filter.tosmask) | |
16 | return 0; | |
17 | - if (filter.rdst.family) { | |
18 | - if (r->rtm_family != filter.rdst.family || | |
19 | - filter.rdst.bitlen > r->rtm_dst_len) | |
20 | - return 0; | |
21 | - } else if (filter.rdst.flags & PREFIXLEN_SPECIFIED) { | |
22 | - if (filter.rdst.bitlen > r->rtm_dst_len) | |
23 | - return 0; | |
24 | - } | |
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)) | |
29 | - return 0; | |
30 | - } else if (filter.mdst.flags & PREFIXLEN_SPECIFIED) { | |
31 | - if (filter.mdst.bitlen >= 0 && | |
32 | - filter.mdst.bitlen < r->rtm_dst_len) | |
33 | - return 0; | |
34 | - } | |
35 | - if (filter.rsrc.family) { | |
36 | - if (r->rtm_family != filter.rsrc.family || | |
37 | - filter.rsrc.bitlen > r->rtm_src_len) | |
38 | - return 0; | |
39 | - } else if (filter.rsrc.flags & PREFIXLEN_SPECIFIED) { | |
40 | - if (filter.rsrc.bitlen > r->rtm_src_len) | |
41 | - return 0; | |
42 | - } | |
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)) | |
47 | - return 0; | |
48 | - } else if (filter.msrc.flags & PREFIXLEN_SPECIFIED) { | |
49 | - if (filter.msrc.bitlen >= 0 && | |
50 | - filter.msrc.bitlen < r->rtm_src_len) | |
51 | - return 0; | |
52 | - } | |
53 | + if (filter.rdst.family && | |
54 | + (r->rtm_family != filter.rdst.family || filter.rdst.bitlen > r->rtm_dst_len)) | |
55 | + return 0; | |
56 | + if (filter.mdst.family && | |
57 | + (r->rtm_family != filter.mdst.family || | |
58 | + (filter.mdst.bitlen >= 0 && filter.mdst.bitlen < r->rtm_dst_len))) | |
59 | + return 0; | |
60 | + if (filter.rsrc.family && | |
61 | + (r->rtm_family != filter.rsrc.family || filter.rsrc.bitlen > r->rtm_src_len)) | |
62 | + return 0; | |
63 | + if (filter.msrc.family && | |
64 | + (r->rtm_family != filter.msrc.family || | |
65 | + (filter.msrc.bitlen >= 0 && filter.msrc.bitlen < r->rtm_src_len))) | |
66 | + return 0; | |
67 | if (filter.rvia.family) { | |
68 | int family = r->rtm_family; | |
69 | ||
70 | @@ -243,9 +221,7 @@ | |
71 | ||
72 | if (tb[RTA_DST]) | |
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) { | |
78 | if (tb[RTA_SRC]) | |
79 | memcpy(&src.data, RTA_DATA(tb[RTA_SRC]), (r->rtm_src_len+7)/8); | |
80 | } | |
81 | @@ -265,18 +241,15 @@ | |
82 | memcpy(&prefsrc.data, RTA_DATA(tb[RTA_PREFSRC]), host_len/8); | |
83 | } | |
84 | ||
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)) | |
88 | return 0; | |
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)) | |
92 | return 0; | |
93 | ||
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)) | |
97 | return 0; | |
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)) | |
102 | return 0; | |
103 | ||
104 | --- a/lib/utils.c | |
105 | +++ b/lib/utils.c | |
106 | @@ -658,7 +658,6 @@ | |
107 | dst->family = family; | |
108 | dst->bytelen = 0; | |
109 | dst->bitlen = 0; | |
110 | - dst->flags |= PREFIXLEN_SPECIFIED; | |
111 | return 0; | |
112 | } | |
113 |