From patchwork Fri Nov 24 02:12:06 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 840929 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; dkim=pass (2048-bit key; unprotected) header.d=netronome-com.20150623.gappssmtp.com header.i=@netronome-com.20150623.gappssmtp.com header.b="fULkpRm4"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3yjfpy2mWMz9s9Y for ; Fri, 24 Nov 2017 13:12:42 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752721AbdKXCMl (ORCPT ); Thu, 23 Nov 2017 21:12:41 -0500 Received: from mail-pl0-f68.google.com ([209.85.160.68]:38992 "EHLO mail-pl0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752318AbdKXCM0 (ORCPT ); Thu, 23 Nov 2017 21:12:26 -0500 Received: by mail-pl0-f68.google.com with SMTP id l16so3564759pli.6 for ; Thu, 23 Nov 2017 18:12:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=netronome-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=J/dB0c/go0zazHlZxr0qVACNJlWtEcDR+IeFLi3HFPg=; b=fULkpRm4H2JABL10Gha4UwHYHW/htq9yXwNXx4wEn/4jzTYZnG6HZ43T5sxiwrhC2Z +JbOar/AgNq0XDYyoFKFLyuTAOPQ8pzIslSrv3dqezczV3YV3RUcbNhmJxmT+Vey9DEB 96rhYTTEulJ1BteT9O0l5bWJ/rvB+/8kfXyhJLctZL5N0/ZVSgvW3bso2awGkUMUIaOO EGVKHIJ7yerqTw5OI4wZhQ9wpgDMowLBYX33jFGQ33cAMEkEMDN2DFzPWycffeeoOMZ/ FIArnZ/YpYNYbWhEiPl9BsLx1zgeGySvLbvNIFrE5s7MxyDc3tbE26ehVHO02v2JGeuW 0joQ== 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:in-reply-to :references; bh=J/dB0c/go0zazHlZxr0qVACNJlWtEcDR+IeFLi3HFPg=; b=TlpzZ+fDTk+Mw2u0QXSE+g/w//tK2GBz6e0deYB2t52qKxwNIHMB5jncRk+HodHZ9i oqLLelS4Xfqp/N4R0jETOZYx0ALsIOP3wUHLfg5dmwSyCtjsmhdNNx4cDNtKaaEprGDB YP3bmotrFnZtS7QAPZgy7UZd5ZBPvhuirRXL+O3mR1GKvpY7AI9P+QCK+rOgVRgkS2hB wZLNye1Obug7rg2e7rP51mqBMs40z9dIZgnNilbOpiLzmYcv0nrgr23ZKx9figP5G0me Ffenm+CVFnz2M0n1LP91qkXcwiftGk+3kc61f7oBLTNc6mI5LiBDncF77AQ6C2xdM2iw FzNQ== X-Gm-Message-State: AJaThX6AiYUQqykb1uh7d7jQiDpjb0oc6YYqHIUCFGok6QgZ92UW+RPB OWyNqYIhpnCVUviBR628RY77Shp9 X-Google-Smtp-Source: AGs4zMY/N6VnqGR3nr0GtMEIEUzgfY79y4odINSGEi47jtaj/28aLC15uopz3yOZ+MEVJ39CbgSg7A== X-Received: by 10.84.170.132 with SMTP id j4mr22602717plb.316.1511489545436; Thu, 23 Nov 2017 18:12:25 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([75.53.12.129]) by smtp.gmail.com with ESMTPSA id q12sm29400889pgn.56.2017.11.23.18.12.24 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 23 Nov 2017 18:12:25 -0800 (PST) From: Jakub Kicinski To: netdev@vger.kernel.org Cc: oss-drivers@netronome.com, daniel@iogearbox.net, Jakub Kicinski Subject: [PATCH iproute2/master 09/11] tc_filter: resolve device name before parsing filter Date: Thu, 23 Nov 2017 18:12:06 -0800 Message-Id: <20171124021208.13419-10-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20171124021208.13419-1-jakub.kicinski@netronome.com> References: <20171124021208.13419-1-jakub.kicinski@netronome.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Move resolving device name into an ifindex before calling filter specific callbacks. This way if filters need the ifindex, they can read it from the request. Signed-off-by: Jakub Kicinski Reviewed-by: Quentin Monnet Acked-by: Daniel Borkmann --- tc/tc_filter.c | 50 ++++++++++++++++++++++++-------------------------- 1 file changed, 24 insertions(+), 26 deletions(-) diff --git a/tc/tc_filter.c b/tc/tc_filter.c index d0c967a9633a..0a3f7e696af8 100644 --- a/tc/tc_filter.c +++ b/tc/tc_filter.c @@ -160,6 +160,16 @@ static int tc_filter_modify(int cmd, unsigned int flags, int argc, char **argv) if (k[0]) addattr_l(&req.n, sizeof(req), TCA_KIND, k, strlen(k)+1); + if (d[0]) { + ll_init_map(&rth); + + req.t.tcm_ifindex = ll_name_to_index(d); + if (req.t.tcm_ifindex == 0) { + fprintf(stderr, "Cannot find device \"%s\"\n", d); + return 1; + } + } + if (q) { if (q->parse_fopt(q, fhandle, argc, argv, &req.n)) return 1; @@ -182,17 +192,6 @@ static int tc_filter_modify(int cmd, unsigned int flags, int argc, char **argv) if (est.ewma_log) addattr_l(&req.n, sizeof(req), TCA_RATE, &est, sizeof(est)); - - if (d[0]) { - ll_init_map(&rth); - - req.t.tcm_ifindex = ll_name_to_index(d); - if (req.t.tcm_ifindex == 0) { - fprintf(stderr, "Cannot find device \"%s\"\n", d); - return 1; - } - } - if (rtnl_talk(&rth, &req.n, NULL) < 0) { fprintf(stderr, "We have an error talking to the kernel\n"); return 2; @@ -452,10 +451,23 @@ static int tc_filter_get(int cmd, unsigned int flags, int argc, char **argv) return -1; } + if (d[0]) { + ll_init_map(&rth); + + req.t.tcm_ifindex = ll_name_to_index(d); + if (req.t.tcm_ifindex == 0) { + fprintf(stderr, "Cannot find device \"%s\"\n", d); + return 1; + } + filter_ifindex = req.t.tcm_ifindex; + } else { + fprintf(stderr, "Must specify netdevice \"dev\"\n"); + return -1; + } + if (q->parse_fopt(q, fhandle, argc, argv, &req.n)) return 1; - if (!fhandle) { fprintf(stderr, "Must specify filter \"handle\"\n"); return -1; @@ -470,20 +482,6 @@ static int tc_filter_get(int cmd, unsigned int flags, int argc, char **argv) return -1; } - if (d[0]) { - ll_init_map(&rth); - - req.t.tcm_ifindex = ll_name_to_index(d); - if (req.t.tcm_ifindex == 0) { - fprintf(stderr, "Cannot find device \"%s\"\n", d); - return 1; - } - filter_ifindex = req.t.tcm_ifindex; - } else { - fprintf(stderr, "Must specify netdevice \"dev\"\n"); - return -1; - } - if (rtnl_talk(&rth, &req.n, &answer) < 0) { fprintf(stderr, "We have an error talking to the kernel\n"); return 2;