From patchwork Sun May 8 17:16:06 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jamal Hadi Salim X-Patchwork-Id: 619672 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3r2scm2TNhz9sdm for ; Mon, 9 May 2016 03:16:40 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=mojatatu-com.20150623.gappssmtp.com header.i=@mojatatu-com.20150623.gappssmtp.com header.b=wMAFZIPD; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751033AbcEHRQh (ORCPT ); Sun, 8 May 2016 13:16:37 -0400 Received: from mail-ig0-f196.google.com ([209.85.213.196]:36499 "EHLO mail-ig0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750972AbcEHRQf (ORCPT ); Sun, 8 May 2016 13:16:35 -0400 Received: by mail-ig0-f196.google.com with SMTP id c3so9529808igl.3 for ; Sun, 08 May 2016 10:16:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mojatatu-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=zweEY6g672yl2qfpkemIsXof0ph9E2Uv8HpGFfLXeS0=; b=wMAFZIPD7LXLEANuxwA+SBFhp3oJ4dQeoFmkQRG27GtClHEg3Xk1Mmcw0f9x/o0VJq i0ZqM+boQI8a6agikaohqYBlpWOCLwLIZ+RWgdzeqKP/9bvaIcNrU3ghpNSCUSknTk1T CdW0sb1B54SqUdoLGa3omzLbOShpnel6eZd68ZL/UG3MfQmK4lfQZ+0UBT8/S3LAyFcY xeBgb1sRSGVnNJFK55+rmIe8qd16ZgYu2lRe7Hpp1XmEf1mQ9h7tP3OLTIUcF1kVLkSn e+Ze5pmZNU9bE588DGdcuYQ61e7NyuhGto0ZL0XVX5BO7/Z21+9CmfjuDAKI8myfdRKl Okaw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=zweEY6g672yl2qfpkemIsXof0ph9E2Uv8HpGFfLXeS0=; b=MtibCYwo6WXDzxzqO8mrOTksdqZJ1ckHzkmF7zBcg2/yqtoLxo1wrBz9nHBQqzjrFZ oLlgw8qnISMlmQHiCrUGQq+cu3RLOaJU7zqBWvd6O9LRe4qpRypnozrgSgHO3evRtnCg C0CXJFQNlAuZ6+mq17jIUSn0tzQIJrbv5mXQ2LSMVU5H0qcC3LkfGLmw59ZdoH47P2rO bUkOEmXqvXPG8tsWV6CJWcxBAee5fKdb2QJM0any7GDoqMEULqjJUmxFyOkR18dtKDzt ieJEYc2jHmxAjlX38Pt0B7bXTsLU2ZDH0dUD3u2HEpB9fl0sdtRuMCAGx5fNb5Pzr1mc WGbw== X-Gm-Message-State: AOPr4FWITxhukxAUwYGDc3eALTdt8SmP+Fbts5piPgroW00ZlKQk9qBNYkcL41yUhsHaxA== X-Received: by 10.50.85.15 with SMTP id d15mr7196558igz.8.1462727795009; Sun, 08 May 2016 10:16:35 -0700 (PDT) Received: from jhs-UX303LB.lan ([23.233.30.50]) by smtp.gmail.com with ESMTPSA id 39sm11770252iod.8.2016.05.08.10.16.34 (version=TLSv1/SSLv3 cipher=OTHER); Sun, 08 May 2016 10:16:34 -0700 (PDT) From: Jamal Hadi Salim X-Google-Original-From: Jamal Hadi Salim To: davem@davemloft.net Cc: netdev@vger.kernel.org, Jamal Hadi Salim Subject: [net-next PATCH 6/6] tc ife action fix late binding Date: Sun, 8 May 2016 13:16:06 -0400 Message-Id: <1462727766-28359-7-git-send-email-jhs@emojatatu.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1462727766-28359-1-git-send-email-jhs@emojatatu.com> References: <1462727766-28359-1-git-send-email-jhs@emojatatu.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Jamal Hadi Salim The process below was broken and is fixed with this patch. //add an ife action and give it an instance id of 1 sudo tc actions add action ife encode \ type 0xDEAD allow mark dst 02:15:15:15:15:15 index 1 //create a filter which binds to skbedit action id 1 sudo tc filter add dev $DEV parent ffff: protocol ip prio 1 u32\ match ip dst 17.0.0.1/32 flowid 1:11 action ife index 1 Message before fix was: RTNETLINK answers: Invalid argument We have an error talking to the kernel Signed-off-by: Jamal Hadi Salim --- net/sched/act_ife.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/net/sched/act_ife.c b/net/sched/act_ife.c index 556f44c..17520ed 100644 --- a/net/sched/act_ife.c +++ b/net/sched/act_ife.c @@ -423,7 +423,7 @@ static int tcf_ife_init(struct net *net, struct nlattr *nla, u16 ife_type = 0; u8 *daddr = NULL; u8 *saddr = NULL; - int ret = 0; + int ret = 0, aexists = 0; int err; err = nla_parse_nested(tb, TCA_IFE_MAX, nla, ife_policy); @@ -435,25 +435,29 @@ static int tcf_ife_init(struct net *net, struct nlattr *nla, parm = nla_data(tb[TCA_IFE_PARMS]); + aexists = tcf_hash_check(tn, parm->index, a, bind); + if (aexists && bind) + return 0; + if (parm->flags & IFE_ENCODE) { /* Until we get issued the ethertype, we cant have * a default.. **/ if (!tb[TCA_IFE_TYPE]) { + if (aexists) + tcf_hash_release(a, bind); pr_info("You MUST pass etherype for encoding\n"); return -EINVAL; } } - if (!tcf_hash_check(tn, parm->index, a, bind)) { + if (!aexists) { ret = tcf_hash_create(tn, parm->index, est, a, sizeof(*ife), bind, false); if (ret) return ret; ret = ACT_P_CREATED; } else { - if (bind) /* dont override defaults */ - return 0; tcf_hash_release(a, bind); if (!ovr) return -EEXIST; @@ -495,6 +499,8 @@ static int tcf_ife_init(struct net *net, struct nlattr *nla, NULL); if (err) { metadata_parse_err: + if (aexists) + tcf_hash_release(a, bind); if (ret == ACT_P_CREATED) _tcf_ife_cleanup(a, bind); @@ -689,7 +695,7 @@ static int tcf_ife_encode(struct sk_buff *skb, const struct tc_action *a, /* OUTERHDR:TOTMETALEN:{TLVHDR:Metadatum:TLVHDR..}:ORIGDATA where ORIGDATA = original ethernet header ... - */ + */ u16 metalen = ife_get_sz(skb, ife); int hdrm = metalen + skb->dev->hard_header_len + IFE_METAHDRLEN; unsigned int skboff = skb->dev->hard_header_len;