Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/812868/?format=api
{ "id": 812868, "url": "http://patchwork.ozlabs.org/api/patches/812868/?format=api", "web_url": "http://patchwork.ozlabs.org/project/netdev/patch/1505226037-2758-3-git-send-email-simon.horman@netronome.com/", "project": { "id": 7, "url": "http://patchwork.ozlabs.org/api/projects/7/?format=api", "name": "Linux network development", "link_name": "netdev", "list_id": "netdev.vger.kernel.org", "list_email": "netdev@vger.kernel.org", "web_url": null, "scm_url": null, "webscm_url": null, "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<1505226037-2758-3-git-send-email-simon.horman@netronome.com>", "list_archive_url": null, "date": "2017-09-12T14:20:37", "name": "[PATCH/RFC,net-next,2/2] net/sched: allow flower to match tunnel options", "commit_ref": null, "pull_url": null, "state": "rfc", "archived": true, "hash": "d49d93766c3118f2253880af93d1a5970a87ae27", "submitter": { "id": 64714, "url": "http://patchwork.ozlabs.org/api/people/64714/?format=api", "name": "Simon Horman", "email": "simon.horman@netronome.com" }, "delegate": { "id": 34, "url": "http://patchwork.ozlabs.org/api/users/34/?format=api", "username": "davem", "first_name": "David", "last_name": "Miller", "email": "davem@davemloft.net" }, "mbox": "http://patchwork.ozlabs.org/project/netdev/patch/1505226037-2758-3-git-send-email-simon.horman@netronome.com/mbox/", "series": [ { "id": 2713, "url": "http://patchwork.ozlabs.org/api/series/2713/?format=api", "web_url": "http://patchwork.ozlabs.org/project/netdev/list/?series=2713", "date": "2017-09-12T14:20:35", "name": "net/sched: support tunnel options in cls_flower and act_tunnel_key", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/2713/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/812868/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/812868/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<netdev-owner@vger.kernel.org>", "X-Original-To": "patchwork-incoming@ozlabs.org", "Delivered-To": "patchwork-incoming@ozlabs.org", "Authentication-Results": [ "ozlabs.org;\n\tspf=none (mailfrom) smtp.mailfrom=vger.kernel.org\n\t(client-ip=209.132.180.67; helo=vger.kernel.org;\n\tenvelope-from=netdev-owner@vger.kernel.org;\n\treceiver=<UNKNOWN>)", "ozlabs.org; dkim=pass (2048-bit key;\n\tunprotected) header.d=netronome-com.20150623.gappssmtp.com\n\theader.i=@netronome-com.20150623.gappssmtp.com\n\theader.b=\"c5fCOILT\"; dkim-atps=neutral" ], "Received": [ "from vger.kernel.org (vger.kernel.org [209.132.180.67])\n\tby ozlabs.org (Postfix) with ESMTP id 3xs6SR03dvz9s0Z\n\tfor <patchwork-incoming@ozlabs.org>;\n\tWed, 13 Sep 2017 00:22:15 +1000 (AEST)", "(majordomo@vger.kernel.org) by vger.kernel.org via listexpand\n\tid S1751520AbdILOWA (ORCPT <rfc822;patchwork-incoming@ozlabs.org>);\n\tTue, 12 Sep 2017 10:22:00 -0400", "from mail-wm0-f51.google.com ([74.125.82.51]:44845 \"EHLO\n\tmail-wm0-f51.google.com\" rhost-flags-OK-OK-OK-OK) by vger.kernel.org\n\twith ESMTP id S1751460AbdILOVs (ORCPT\n\t<rfc822;netdev@vger.kernel.org>); Tue, 12 Sep 2017 10:21:48 -0400", "by mail-wm0-f51.google.com with SMTP id 189so8825wmh.1\n\tfor <netdev@vger.kernel.org>; Tue, 12 Sep 2017 07:21:47 -0700 (PDT)", "from reginn.horms.nl (52D9BC73.cm-11-1c.dynamic.ziggo.nl.\n\t[82.217.188.115]) by smtp.gmail.com with ESMTPSA id\n\tx29sm708851eda.51.2017.09.12.07.21.45\n\t(version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128);\n\tTue, 12 Sep 2017 07:21:46 -0700 (PDT)" ], "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=netronome-com.20150623.gappssmtp.com; s=20150623;\n\th=from:to:cc:subject:date:message-id:in-reply-to:references;\n\tbh=bIQ6nu8+9nSd4ErksojjN2jmdfb/b8EB30i+gg86GAY=;\n\tb=c5fCOILTcaNT4TzvUUiC2rfsJpVvuKpSWMxXoPdqRqkRh3AASKsUF50c9bJRFRndbY\n\t+I8ofLUdCNWskLsshZ62HN0ja/J8AoFaxvOboqt616l6EWbnIxChqJ1BGqSi8aGScmma\n\tUg6srUk5crdvSrWEp1YeSa0Hm20+O0w0s+5KOrSW74a4ZFqHXIkOw5xHSpXXeVqlaaty\n\tWY+Q3u9VxAAqHx/7KLKT7Xoq/I1ON8efskA7sxBZgS1BHh5QxA5VTQi6uxGCcx+OVcrR\n\twer0J/ypGP9AIFN8LdrwNj8LdQzyifmpelns3GLLuTI+rcmjGOQcjk1528rKslSi23tm\n\tZtig==", "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to\n\t:references;\n\tbh=bIQ6nu8+9nSd4ErksojjN2jmdfb/b8EB30i+gg86GAY=;\n\tb=TWL1tfb4EHmYYarFwgg4HZ69Idjom14wi+JhRX61zUhFW0rkVDYjVCshm/bj0B5O2Q\n\tHNs2CHGZtLGoF+0wHKc7J3GePV63spOGcD99DmeNuDJAzn9I1WlwpILgvr61taY9g5us\n\t3VNEQWrBuaZZ10nBxM1ZgKv7Mve+g2sl2o6sEQK63xV5wJSkPHrye+3G/gfC6sBVwOqj\n\tp4NXlOoCWNxd5DQ6nw7CP1jZktRQuMI7H9/uI1/xVZ1JckqmIxer4KMWsp2eoDbXRLLT\n\t/b7MfyzZj4QEKVPFmrZzGjJWBmUwhTX7Uztb2MOb7Y+DFVpp1f2VL31yg0OyF1bi0tYG\n\tKBVA==", "X-Gm-Message-State": "AHPjjUiviyjsYhmE1JJCXkkeUBuy6jZc9IWAdMa7ic1mLNVuBzV0xrV0\n\tFgJo6h1OTyaNy39Y", "X-Google-Smtp-Source": "ADKCNb7tblXiLaptT+rsM5W6PbBMo+O1kEcrk3gHxBq+6iuIHUbQnr8AbbtVkaQjFKOlAeaL8QPWBA==", "X-Received": "by 10.80.144.163 with SMTP id c32mr13377165eda.30.1505226106955; \n\tTue, 12 Sep 2017 07:21:46 -0700 (PDT)", "From": "Simon Horman <simon.horman@netronome.com>", "To": "Jiri Pirko <jiri@mellanox.com>, Jamal Hadi Salim <jhs@mojatatu.com>,\n\tCong Wang <xiyou.wangcong@gmail.com>", "Cc": "netdev@vger.kernel.org, oss-drivers@netronome.com,\n\tSimon Horman <simon.horman@netronome.com>", "Subject": "[PATCH/RFC net-next 2/2] net/sched: allow flower to match tunnel\n\toptions", "Date": "Tue, 12 Sep 2017 16:20:37 +0200", "Message-Id": "<1505226037-2758-3-git-send-email-simon.horman@netronome.com>", "X-Mailer": "git-send-email 2.1.4", "In-Reply-To": "<1505226037-2758-1-git-send-email-simon.horman@netronome.com>", "References": "<1505226037-2758-1-git-send-email-simon.horman@netronome.com>", "Sender": "netdev-owner@vger.kernel.org", "Precedence": "bulk", "List-ID": "<netdev.vger.kernel.org>", "X-Mailing-List": "netdev@vger.kernel.org" }, "content": "Allow matching on options in tunnel headers.\nThis makes use of existing tunnel metadata support.\n\nOptions are a bytestring of up to 256 bytes.\nTunnel implementations may support less or more options,\nor no options at all.\n\n # ip link add name geneve0 type geneve dstport 0 external\n # tc qdisc add dev eth0 ingress\n # tc qdisc del dev eth0 ingress; tc qdisc add dev eth0 ingress\n # tc filter add dev eth0 protocol ip parent ffff: \\\n flower indev eth0 \\\n ip_proto udp \\\n action tunnel_key \\\n set src_ip 10.0.99.192 \\\n dst_ip 10.0.99.193 \\\n dst_port 4789 \\\n id 11 \\\n opts 0102800100800022 \\\n action mirred egress redirect dev geneve0\n\nSigned-off-by: Simon Horman <simon.horman@netronome.com>\nReviewed-by: Jakub Kicinski <jakub.kicinski@netronome.com>\n---\n include/net/flow_dissector.h | 13 +++++++++++++\n include/uapi/linux/pkt_cls.h | 3 +++\n net/sched/cls_flower.c | 35 ++++++++++++++++++++++++++++++++++-\n 3 files changed, 50 insertions(+), 1 deletion(-)", "diff": "diff --git a/include/net/flow_dissector.h b/include/net/flow_dissector.h\nindex fc3dce730a6b..43f98bf0b349 100644\n--- a/include/net/flow_dissector.h\n+++ b/include/net/flow_dissector.h\n@@ -183,6 +183,18 @@ struct flow_dissector_key_ip {\n \t__u8\tttl;\n };\n \n+/**\n+ * struct flow_dissector_key_enc_opts:\n+ * @data: data\n+ * @len: len\n+ */\n+struct flow_dissector_key_enc_opts {\n+\tu8 data[256];\t/* Using IP_TUNNEL_OPTS_MAX is desired here\n+\t\t\t * but seems difficult to #include\n+\t\t\t */\n+\tu8 len;\n+};\n+\n enum flow_dissector_key_id {\n \tFLOW_DISSECTOR_KEY_CONTROL, /* struct flow_dissector_key_control */\n \tFLOW_DISSECTOR_KEY_BASIC, /* struct flow_dissector_key_basic */\n@@ -205,6 +217,7 @@ enum flow_dissector_key_id {\n \tFLOW_DISSECTOR_KEY_MPLS, /* struct flow_dissector_key_mpls */\n \tFLOW_DISSECTOR_KEY_TCP, /* struct flow_dissector_key_tcp */\n \tFLOW_DISSECTOR_KEY_IP, /* struct flow_dissector_key_ip */\n+\tFLOW_DISSECTOR_KEY_ENC_OPTS, /* struct flow_dissector_key_enc_opts */\n \n \tFLOW_DISSECTOR_KEY_MAX,\n };\ndiff --git a/include/uapi/linux/pkt_cls.h b/include/uapi/linux/pkt_cls.h\nindex d5e2bf68d0d4..7a09a28f21e0 100644\n--- a/include/uapi/linux/pkt_cls.h\n+++ b/include/uapi/linux/pkt_cls.h\n@@ -467,6 +467,9 @@ enum {\n \tTCA_FLOWER_KEY_IP_TTL,\t\t/* u8 */\n \tTCA_FLOWER_KEY_IP_TTL_MASK,\t/* u8 */\n \n+\tTCA_FLOWER_KEY_ENC_OPTS,\n+\tTCA_FLOWER_KEY_ENC_OPTS_MASK,\n+\n \t__TCA_FLOWER_MAX,\n };\n \ndiff --git a/net/sched/cls_flower.c b/net/sched/cls_flower.c\nindex 1a267e77c6de..2a8364ef4fd5 100644\n--- a/net/sched/cls_flower.c\n+++ b/net/sched/cls_flower.c\n@@ -51,6 +51,7 @@ struct fl_flow_key {\n \tstruct flow_dissector_key_mpls mpls;\n \tstruct flow_dissector_key_tcp tcp;\n \tstruct flow_dissector_key_ip ip;\n+\tstruct flow_dissector_key_enc_opts enc_opts;\n } __aligned(BITS_PER_LONG / 8); /* Ensure that we can do comparisons as longs. */\n \n struct fl_flow_mask_range {\n@@ -181,6 +182,11 @@ static int fl_classify(struct sk_buff *skb, const struct tcf_proto *tp,\n \t\tskb_key.enc_key_id.keyid = tunnel_id_to_key32(key->tun_id);\n \t\tskb_key.enc_tp.src = key->tp_src;\n \t\tskb_key.enc_tp.dst = key->tp_dst;\n+\n+\t\tif (info->options_len) {\n+\t\t\tskb_key.enc_opts.len = info->options_len;\n+\t\t\tip_tunnel_info_opts_get(skb_key.enc_opts.data, info);\n+\t\t}\n \t}\n \n \tskb_key.indev_ifindex = skb->skb_iif;\n@@ -421,6 +427,8 @@ static const struct nla_policy fl_policy[TCA_FLOWER_MAX + 1] = {\n \t[TCA_FLOWER_KEY_IP_TOS_MASK]\t= { .type = NLA_U8 },\n \t[TCA_FLOWER_KEY_IP_TTL]\t\t= { .type = NLA_U8 },\n \t[TCA_FLOWER_KEY_IP_TTL_MASK]\t= { .type = NLA_U8 },\n+\t[TCA_FLOWER_KEY_ENC_OPTS]\t= { .type = NLA_BINARY },\n+\t[TCA_FLOWER_KEY_ENC_OPTS_MASK]\t= { .type = NLA_BINARY },\n };\n \n static void fl_set_key_val(struct nlattr **tb,\n@@ -712,6 +720,26 @@ static int fl_set_key(struct net *net, struct nlattr **tb,\n \t\t &mask->enc_tp.dst, TCA_FLOWER_KEY_ENC_UDP_DST_PORT_MASK,\n \t\t sizeof(key->enc_tp.dst));\n \n+\tif (tb[TCA_FLOWER_KEY_ENC_OPTS]) {\n+\t\tkey->enc_opts.len = nla_len(tb[TCA_FLOWER_KEY_ENC_OPTS]);\n+\n+\t\tif (key->enc_opts.len > sizeof(key->enc_opts.data))\n+\t\t\treturn -EINVAL;\n+\n+\t\t/* enc_opts is variable length.\n+\t\t * If present ensure the value and mask are the same length.\n+\t\t */\n+\t\tif (tb[TCA_FLOWER_KEY_ENC_OPTS_MASK] &&\n+\t\t nla_len(tb[TCA_FLOWER_KEY_ENC_OPTS_MASK]) != key->enc_opts.len)\n+\t\t\treturn -EINVAL;\n+\n+\t\tmask->enc_opts.len = key->enc_opts.len;\n+\t\tfl_set_key_val(tb, key->enc_opts.data, TCA_FLOWER_KEY_ENC_OPTS,\n+\t\t\t mask->enc_opts.data,\n+\t\t\t TCA_FLOWER_KEY_ENC_OPTS_MASK,\n+\t\t\t key->enc_opts.len);\n+\t}\n+\n \tif (tb[TCA_FLOWER_KEY_FLAGS])\n \t\tret = fl_set_key_flags(tb, &key->control.flags, &mask->control.flags);\n \n@@ -804,6 +832,8 @@ static void fl_init_dissector(struct cls_fl_head *head,\n \t\t\t enc_control);\n \tFL_KEY_SET_IF_MASKED(&mask->key, keys, cnt,\n \t\t\t FLOW_DISSECTOR_KEY_ENC_PORTS, enc_tp);\n+\tFL_KEY_SET_IF_MASKED(&mask->key, keys, cnt,\n+\t\t\t FLOW_DISSECTOR_KEY_ENC_OPTS, enc_opts);\n \n \tskb_flow_dissector_init(&head->dissector, keys, cnt);\n }\n@@ -1327,7 +1357,10 @@ static int fl_dump(struct net *net, struct tcf_proto *tp, void *fh,\n \t\t\t TCA_FLOWER_KEY_ENC_UDP_DST_PORT,\n \t\t\t &mask->enc_tp.dst,\n \t\t\t TCA_FLOWER_KEY_ENC_UDP_DST_PORT_MASK,\n-\t\t\t sizeof(key->enc_tp.dst)))\n+\t\t\t sizeof(key->enc_tp.dst)) ||\n+\t fl_dump_key_val(skb, key->enc_opts.data, TCA_FLOWER_KEY_ENC_OPTS,\n+\t\t\t mask->enc_opts.data, TCA_FLOWER_KEY_ENC_OPTS_MASK,\n+\t\t\t key->enc_opts.len))\n \t\tgoto nla_put_failure;\n \n \tif (fl_dump_key_flags(skb, key->control.flags, mask->control.flags))\n", "prefixes": [ "PATCH/RFC", "net-next", "2/2" ] }