From patchwork Mon Mar 12 21:03:01 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stephen Hemminger X-Patchwork-Id: 884882 X-Patchwork-Delegate: shemminger@vyatta.com Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=networkplumber.org Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=networkplumber-org.20150623.gappssmtp.com header.i=@networkplumber-org.20150623.gappssmtp.com header.b="olby7hcX"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 400VnZ64X1z9sSl for ; Tue, 13 Mar 2018 08:03:14 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932593AbeCLVDM (ORCPT ); Mon, 12 Mar 2018 17:03:12 -0400 Received: from mail-pg0-f65.google.com ([74.125.83.65]:40529 "EHLO mail-pg0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932408AbeCLVDK (ORCPT ); Mon, 12 Mar 2018 17:03:10 -0400 Received: by mail-pg0-f65.google.com with SMTP id g8so7029867pgv.7 for ; Mon, 12 Mar 2018 14:03:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=networkplumber-org.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id; bh=1Y55FN3UxNf1zrAOOVK3TFqIK/mpa6VdIJa4q+m/vLI=; b=olby7hcXxksAJyPIh42YCiGHqMeZkjektiRC506UEZ9DFaIm3HHkecbMyaWzUl60I6 yFesVNGn7GTRVu75goCnx2JIJcNBs9ECDQBCKJ1Av3qnijuW19EmZ+q+LNDceJutM45G oKUW+HLR8Lsh0zDtVFdG3bujjNLX0JOl6mWn9wXFmbDfBj+e1rchOjvj8HO1fBT/uYQ+ p6VGYe8xhXnr/KebpTeJvY2+A3RmVx65vus4SsvjK7aC9DOSyTo/w1p3E28qSjbrFAie tMw1MYheV3eBBQVEWX8Z1oN+ydeSKwhp/nAu+ISdMoog7pV6i6Sq3vWa+n5YrHjhq5H1 QQOg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=1Y55FN3UxNf1zrAOOVK3TFqIK/mpa6VdIJa4q+m/vLI=; b=tKik9sLMYjMCsFnp+cZrz4Asda9CeQ0dp0ZF9cGiSnG9lAYPMLskWlRircpMbvTTOn kiwcjvA7efXn6HIB4nnikODtpOcTMup/MZchY70rQeGD8usKgHCaVpQKd4AfkhG6MnZq knGYMquMOVbo03h6IG/Rx77tu5P2dE51oCx9p+0gqU5IS6mkaM5P3t51W2lrW/EQyR1p v/3C1J6TFjzrUX1r7pKP2y1kBpubKppQFfyYnXDr8F502HKKbAsu+ClDSZTrkW4O+uC9 o9zftvzXprA1Z3NQJtCaDgHsQ5i4nx2anwUCXU/tvLL+Etp1jrhOjyvIJj6C7CmA8c10 v/qQ== X-Gm-Message-State: AElRT7GDv2icFd0nGRx6Zpv9Cei1J+34jV5yc1SUHoT0t5nvNmYLHcE7 ZM4YioNI17DmZoxvUVzlh+N1zOUyEUs= X-Google-Smtp-Source: AG47ELuQd0vhoK7htGE/wJx7OVuxzuNhZlKiPSmRC463m/C3E1jy/AIROjbgZKBxzi6W/86VW0Tkbw== X-Received: by 10.99.115.3 with SMTP id o3mr7660764pgc.428.1520888589067; Mon, 12 Mar 2018 14:03:09 -0700 (PDT) Received: from xeon-e3.lan (204-195-71-95.wavecable.com. [204.195.71.95]) by smtp.gmail.com with ESMTPSA id w10sm14706194pgr.57.2018.03.12.14.03.08 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 12 Mar 2018 14:03:08 -0700 (PDT) From: Stephen Hemminger To: bluca@debian.org, green@msu.ru Cc: netdev@vger.kernel.org, Stephen Hemminger Subject: [PATCH iproute2] Revert "iproute: "list/flush/save default" selected all of the routes" Date: Mon, 12 Mar 2018 14:03:01 -0700 Message-Id: <20180312210301.12757-1-stephen@networkplumber.org> X-Mailer: git-send-email 2.16.1 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This reverts commit 9135c4d6037ff9f1818507bac0049fc44db8c3d2. Debian maintainer found that basic command: # ip route flush all No longer worked as expected which breaks user scripts and expectations. It no longer flushed all IPv4 routes. Reported-by: Luca Boccassi Signed-off-by: Stephen Hemminger Tested-by: Luca Boccassi --- ip/iproute.c | 65 ++++++++++++++++++------------------------------------------ lib/utils.c | 13 ++++++++++++ 2 files changed, 32 insertions(+), 46 deletions(-) diff --git a/ip/iproute.c b/ip/iproute.c index bf886fda9d76..32c93ed5abd9 100644 --- a/ip/iproute.c +++ b/ip/iproute.c @@ -191,42 +191,20 @@ static int filter_nlmsg(struct nlmsghdr *n, struct rtattr **tb, int host_len) return 0; if ((filter.tos^r->rtm_tos)&filter.tosmask) return 0; - if (filter.rdst.family) { - if (r->rtm_family != filter.rdst.family || - filter.rdst.bitlen > r->rtm_dst_len) - return 0; - } else if (filter.rdst.flags & PREFIXLEN_SPECIFIED) { - if (filter.rdst.bitlen > r->rtm_dst_len) - return 0; - } - if (filter.mdst.family) { - if (r->rtm_family != filter.mdst.family || - (filter.mdst.bitlen >= 0 && - filter.mdst.bitlen < r->rtm_dst_len)) - return 0; - } else if (filter.mdst.flags & PREFIXLEN_SPECIFIED) { - 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.rdst.family && + (r->rtm_family != filter.rdst.family || filter.rdst.bitlen > r->rtm_dst_len)) + return 0; + if (filter.mdst.family && + (r->rtm_family != filter.mdst.family || + (filter.mdst.bitlen >= 0 && filter.mdst.bitlen < r->rtm_dst_len))) + return 0; + if (filter.rsrc.family && + (r->rtm_family != filter.rsrc.family || filter.rsrc.bitlen > r->rtm_src_len)) + return 0; + if (filter.msrc.family && + (r->rtm_family != filter.msrc.family || + (filter.msrc.bitlen >= 0 && filter.msrc.bitlen < r->rtm_src_len))) + return 0; if (filter.rvia.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]) memcpy(&dst.data, RTA_DATA(tb[RTA_DST]), (r->rtm_dst_len+7)/8); - if (filter.rsrc.family || filter.msrc.family || - filter.rsrc.flags & PREFIXLEN_SPECIFIED || - filter.msrc.flags & PREFIXLEN_SPECIFIED) { + if (filter.rsrc.family || filter.msrc.family) { if (tb[RTA_SRC]) 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); } - if ((filter.rdst.family || filter.rdst.flags & PREFIXLEN_SPECIFIED) && - inet_addr_match(&dst, &filter.rdst, filter.rdst.bitlen)) + if (filter.rdst.family && inet_addr_match(&dst, &filter.rdst, filter.rdst.bitlen)) 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)) return 0; - if ((filter.rsrc.family || filter.rsrc.flags & PREFIXLEN_SPECIFIED) && - inet_addr_match(&src, &filter.rsrc, filter.rsrc.bitlen)) + if (filter.rsrc.family && inet_addr_match(&src, &filter.rsrc, filter.rsrc.bitlen)) return 0; - if ((filter.msrc.family || filter.msrc.flags & PREFIXLEN_SPECIFIED) && - filter.msrc.bitlen >= 0 && + if (filter.msrc.family && filter.msrc.bitlen >= 0 && inet_addr_match(&src, &filter.msrc, r->rtm_src_len)) return 0; diff --git a/lib/utils.c b/lib/utils.c index 379739d61246..87b609f2a6bc 100644 --- a/lib/utils.c +++ b/lib/utils.c @@ -681,6 +681,19 @@ int get_prefix_1(inet_prefix *dst, char *arg, int family) char *slash; 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, '/'); if (slash) *slash = 0;