From patchwork Wed Oct 11 14:35:21 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adrien Mazarguil X-Patchwork-Id: 30140 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id E3D821B285; Wed, 11 Oct 2017 16:36:54 +0200 (CEST) Received: from mail-wm0-f44.google.com (mail-wm0-f44.google.com [74.125.82.44]) by dpdk.org (Postfix) with ESMTP id 630FD1B227 for ; Wed, 11 Oct 2017 16:36:41 +0200 (CEST) Received: by mail-wm0-f44.google.com with SMTP id b189so5313637wmd.4 for ; Wed, 11 Oct 2017 07:36:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=6wind-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=0jef5WifFCfLlRjJdP/KUGcy0d8StH1VktQ/MDWqC+I=; b=ujynEUljthIQWevt5Oh1MhKZO/0EZAaCcLCwIbocMnJymyutfjvNshTqxwvhjejYTK 5HWptyfgQDCjgXRJpRmJ4GbtCu6HTLw0lnwKWgjUjOR6zR3bFGfsflg4chalv2GGG1Wb DGrEexap9DdvEK7tBrLLIRaXGYVntiudfDkyiEbaLNQqdy+5H5BxkiblG5dJwc2slBcM FbhhFjPmGZbDr1ika+CcI71iN+AmW3sbBuzLHqn8gPvVYFGL18A3b0/X06csAgPX6M33 KQNm1WJD42tpjW0ksQsqFX4BR/lXgqYqRb8dSfn8nbujGOLSiTm2SJGKsQEa0gTx2eoR el6g== 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=0jef5WifFCfLlRjJdP/KUGcy0d8StH1VktQ/MDWqC+I=; b=HTI3SSKgOOP4tD49gCYlpeCUZEef50gAQweP2lus7rZj6aTQZuVGww8ZKuMSG+3NIs EV7hsr7K+XmhYyK3ScGihPBeYIcNT8ROH0u2DK4uH+tDYxwBZY/UJjcCAs7k8WeYyHJL UP8rAlnigtre0wtQ+uqMDP7k4c6qExUkSt75nq8tIVh82PPY/H5t9b7gu/cUjcRW8xdY pMckr8O7A0Pv8QUvC2xQhD5aEWCX92660Pfk5bxSCdyzKFg0n9aw5yiSCK+qp4TAuChp KoKYhSJvg3bsnViqHjZI04hJc+05zLiGG6qfQ1qz7AiFmBNTrG9iNOv9L09U+dMB8gCT zJwA== X-Gm-Message-State: AMCzsaUqd6o1K5+TQKW6yNaxKHIkJoLMCr1QqxjwspRvn/LZ+jFtPCqU x9m6wnBy3v+I//VggSlzheVs8w== X-Google-Smtp-Source: AOwi7QCT1nRRieyAgfbk6PgolPUukrhIhczXR8IG8jl7OKj674z5P/XskR7bI8ZnXYVV4NudVTtyag== X-Received: by 10.28.145.72 with SMTP id t69mr13707081wmd.113.1507732601045; Wed, 11 Oct 2017 07:36:41 -0700 (PDT) Received: from 6wind.com (host.78.145.23.62.rev.coltfrance.com. [62.23.145.78]) by smtp.gmail.com with ESMTPSA id k9sm22607037wrk.27.2017.10.11.07.36.39 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 11 Oct 2017 07:36:39 -0700 (PDT) From: Adrien Mazarguil To: Ferruh Yigit Cc: dev@dpdk.org Date: Wed, 11 Oct 2017 16:35:21 +0200 Message-Id: <41404bf2c0c8e9752ad1b50a6eeb95bc1b6fa6f1.1507730496.git.adrien.mazarguil@6wind.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: References: Subject: [dpdk-dev] [PATCH v1 19/29] net/mlx4: add flow support for multicast traffic X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Give users the ability to create flow rules that match all multicast traffic. Like promiscuous flow rules, they come with restrictions such as not allowing additional matching criteria. Signed-off-by: Adrien Mazarguil Acked-by: Nelio Laranjeiro --- doc/guides/nics/features/mlx4.ini | 1 + drivers/net/mlx4/mlx4_flow.c | 17 +++++++++++++++-- drivers/net/mlx4/mlx4_flow.h | 1 + 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/doc/guides/nics/features/mlx4.ini b/doc/guides/nics/features/mlx4.ini index bfe0eb1..9e3ba34 100644 --- a/doc/guides/nics/features/mlx4.ini +++ b/doc/guides/nics/features/mlx4.ini @@ -13,6 +13,7 @@ Queue start/stop = Y MTU update = Y Jumbo frame = Y Unicast MAC filter = Y +Multicast MAC filter = Y SR-IOV = Y VLAN filter = Y Basic stats = Y diff --git a/drivers/net/mlx4/mlx4_flow.c b/drivers/net/mlx4/mlx4_flow.c index 47a6a6a..2ff1c69 100644 --- a/drivers/net/mlx4/mlx4_flow.c +++ b/drivers/net/mlx4/mlx4_flow.c @@ -107,7 +107,9 @@ struct mlx4_drop { * * Additional mlx4-specific constraints on supported fields: * - * - No support for partial masks. + * - No support for partial masks, except in the specific case of matching + * all multicast traffic (@p spec->dst and @p mask->dst equal to + * 01:00:00:00:00:00). * - Not providing @p item->spec or providing an empty @p mask->dst is * *only* supported if the rule doesn't specify additional matching * criteria (i.e. rule is promiscuous-like). @@ -152,6 +154,13 @@ mlx4_flow_merge_eth(struct rte_flow *flow, goto error; } else if (!sum_dst) { flow->promisc = 1; + } else if (sum_dst == 1 && mask->dst.addr_bytes[0] == 1) { + if (!(spec->dst.addr_bytes[0] & 1)) { + msg = "mlx4 does not support the explicit" + " exclusion of all multicast traffic"; + goto error; + } + flow->allmulti = 1; } else if (sum_dst != (UINT8_C(0xff) * ETHER_ADDR_LEN)) { msg = "mlx4 does not support matching partial" " Ethernet fields"; @@ -164,6 +173,10 @@ mlx4_flow_merge_eth(struct rte_flow *flow, flow->ibv_attr->type = IBV_FLOW_ATTR_ALL_DEFAULT; return 0; } + if (flow->allmulti) { + flow->ibv_attr->type = IBV_FLOW_ATTR_MC_DEFAULT; + return 0; + } ++flow->ibv_attr->num_of_specs; eth = (void *)((uintptr_t)flow->ibv_attr + flow->ibv_attr_size); *eth = (struct ibv_flow_spec_eth) { @@ -615,7 +628,7 @@ mlx4_flow_prepare(struct priv *priv, flow->internal = 1; continue; } - if (flow->promisc) { + if (flow->promisc || flow->allmulti) { msg = "mlx4 does not support additional matching" " criteria combined with indiscriminate" " matching on Ethernet headers"; diff --git a/drivers/net/mlx4/mlx4_flow.h b/drivers/net/mlx4/mlx4_flow.h index fcdf461..134e14d 100644 --- a/drivers/net/mlx4/mlx4_flow.h +++ b/drivers/net/mlx4/mlx4_flow.h @@ -68,6 +68,7 @@ struct rte_flow { uint32_t internal:1; /**< Internal flow rule outside isolated mode. */ uint32_t mac:1; /**< Rule associated with a configured MAC address. */ uint32_t promisc:1; /**< This rule matches everything. */ + uint32_t allmulti:1; /**< This rule matches all multicast traffic. */ uint32_t drop:1; /**< This rule drops packets. */ uint32_t queue:1; /**< Target is a receive queue. */ uint16_t queue_id; /**< Target queue. */