Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/811346/?format=api
{ "id": 811346, "url": "http://patchwork.ozlabs.org/api/patches/811346/?format=api", "web_url": "http://patchwork.ozlabs.org/project/ubuntu-kernel/patch/20170908070142.4440-6-daniel.axtens@canonical.com/", "project": { "id": 15, "url": "http://patchwork.ozlabs.org/api/projects/15/?format=api", "name": "Ubuntu Kernel", "link_name": "ubuntu-kernel", "list_id": "kernel-team.lists.ubuntu.com", "list_email": "kernel-team@lists.ubuntu.com", "web_url": null, "scm_url": null, "webscm_url": null, "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<20170908070142.4440-6-daniel.axtens@canonical.com>", "list_archive_url": null, "date": "2017-09-08T07:01:40", "name": "[SRU,Xenial,5/7] net: add confirm_neigh method to dst_ops", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "0e3938baaf0d5f48c158f32b82c1af709dafcb51", "submitter": { "id": 71548, "url": "http://patchwork.ozlabs.org/api/people/71548/?format=api", "name": "Daniel Axtens", "email": "daniel.axtens@canonical.com" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/ubuntu-kernel/patch/20170908070142.4440-6-daniel.axtens@canonical.com/mbox/", "series": [ { "id": 2112, "url": "http://patchwork.ozlabs.org/api/series/2112/?format=api", "web_url": "http://patchwork.ozlabs.org/project/ubuntu-kernel/list/?series=2112", "date": "2017-09-08T07:01:35", "name": "Fixes for LP#1715812", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/2112/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/811346/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/811346/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<kernel-team-bounces@lists.ubuntu.com>", "X-Original-To": "incoming@patchwork.ozlabs.org", "Delivered-To": "patchwork-incoming@bilbo.ozlabs.org", "Authentication-Results": "ozlabs.org;\n\tspf=none (mailfrom) smtp.mailfrom=lists.ubuntu.com\n\t(client-ip=91.189.94.19; helo=huckleberry.canonical.com;\n\tenvelope-from=kernel-team-bounces@lists.ubuntu.com;\n\treceiver=<UNKNOWN>)", "Received": [ "from huckleberry.canonical.com (huckleberry.canonical.com\n\t[91.189.94.19])\n\tby ozlabs.org (Postfix) with ESMTP id 3xpStS11YCz9s83;\n\tFri, 8 Sep 2017 17:02:08 +1000 (AEST)", "from localhost ([127.0.0.1] helo=huckleberry.canonical.com)\n\tby huckleberry.canonical.com with esmtp (Exim 4.86_2)\n\t(envelope-from <kernel-team-bounces@lists.ubuntu.com>)\n\tid 1dqDIj-0001Kn-8B; Fri, 08 Sep 2017 07:02:05 +0000", "from youngberry.canonical.com ([91.189.89.112])\n\tby huckleberry.canonical.com with esmtps\n\t(TLS1.0:DHE_RSA_AES_128_CBC_SHA1:128)\n\t(Exim 4.86_2) (envelope-from <daniel.axtens@canonical.com>)\n\tid 1dqDIh-0001Iu-2p\n\tfor kernel-team@lists.canonical.com; Fri, 08 Sep 2017 07:02:03 +0000", "from mail-pg0-f71.google.com ([74.125.83.71])\n\tby youngberry.canonical.com with esmtps\n\t(TLS1.0:RSA_AES_128_CBC_SHA1:16)\n\t(Exim 4.76) (envelope-from <daniel.axtens@canonical.com>)\n\tid 1dqDIg-0003DZ-DX\n\tfor kernel-team@lists.canonical.com; Fri, 08 Sep 2017 07:02:02 +0000", "by mail-pg0-f71.google.com with SMTP id 188so3660586pgb.3\n\tfor <kernel-team@lists.canonical.com>;\n\tFri, 08 Sep 2017 00:02:02 -0700 (PDT)", "from localhost.localdomain (124-171-202-56.dyn.iinet.net.au.\n\t[124.171.202.56]) by smtp.gmail.com with ESMTPSA id\n\th1sm2255518pfg.153.2017.09.08.00.01.58\n\tfor <kernel-team@lists.canonical.com>\n\t(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);\n\tFri, 08 Sep 2017 00:01:59 -0700 (PDT)" ], "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:subject:date:message-id:in-reply-to\n\t:references;\n\tbh=3dKqVvDiiCp0fkc7ULy7Dbg7HmF5BEfBvgeDNwbTZJo=;\n\tb=i7MWJNoP8RLgCr/+9tXSAgXfBcEly3U8gyI57hI5LpmZDntcWPVzG27QvypTgTcWAv\n\tZayiFBORON/56VkioRLT1JxKRkYNK4GT7KxUBDzTU2L73s/ey891QMON/4xO21Mbj5BR\n\t3d81iUkMAvdLmVcEV65KbNU0qVjFHrXtf9tNwxk+Dv910tbDGokuWJLm3pXmKS+pJ8v7\n\tPVH/dbgnkRqu2oGB8I6Ioy7le0dqjRjFP9OR3jCU22mb1DrNyXRn98Bi9lxkWQyWd8UV\n\tURfOPAP6q9K/dJ75iNvtGHzCF2+d57+vHfEWwA23g+7aWMt2tTO429UlwKYwNJcRxEzf\n\txP2w==", "X-Gm-Message-State": "AHPjjUi17WNtrUirunaelmJibj+1vIsHtXgkNeiByq4dFQRrmPFJulAP\n\tGviXiMfHnUs+sTnIgxBiqOJskHvEtBSUVpplb5RUkQLVmrFQwjTEcim0IwMwSs8eIoou+9Y6x3V\n\tPdV53cmPUXp9ZMpWC/Xb3N+IiRG0F2abdmX6Lwb8=", "X-Received": [ "by 10.98.248.71 with SMTP id c7mr2061320pfm.129.1504854120852;\n\tFri, 08 Sep 2017 00:02:00 -0700 (PDT)", "by 10.98.248.71 with SMTP id c7mr2061291pfm.129.1504854120383;\n\tFri, 08 Sep 2017 00:02:00 -0700 (PDT)" ], "X-Google-Smtp-Source": "ADKCNb4ccqjfpj2zBU/UIX+pX6sdpnrnYxgalUSPQoOQGiyrouNiQTZC0arxLmJDF2CtiKEx2cq0KQ==", "From": "Daniel Axtens <daniel.axtens@canonical.com>", "To": "kernel-team@lists.canonical.com", "Subject": "[SRU][Xenial][PATCH 5/7] net: add confirm_neigh method to dst_ops", "Date": "Fri, 8 Sep 2017 17:01:40 +1000", "Message-Id": "<20170908070142.4440-6-daniel.axtens@canonical.com>", "X-Mailer": "git-send-email 2.11.0", "In-Reply-To": "<20170908070142.4440-1-daniel.axtens@canonical.com>", "References": "<20170908070142.4440-1-daniel.axtens@canonical.com>", "X-BeenThere": "kernel-team@lists.ubuntu.com", "X-Mailman-Version": "2.1.20", "Precedence": "list", "List-Id": "Kernel team discussions <kernel-team.lists.ubuntu.com>", "List-Unsubscribe": "<https://lists.ubuntu.com/mailman/options/kernel-team>,\n\t<mailto:kernel-team-request@lists.ubuntu.com?subject=unsubscribe>", "List-Archive": "<https://lists.ubuntu.com/archives/kernel-team>", "List-Post": "<mailto:kernel-team@lists.ubuntu.com>", "List-Help": "<mailto:kernel-team-request@lists.ubuntu.com?subject=help>", "List-Subscribe": "<https://lists.ubuntu.com/mailman/listinfo/kernel-team>,\n\t<mailto:kernel-team-request@lists.ubuntu.com?subject=subscribe>", "MIME-Version": "1.0", "Content-Type": "text/plain; charset=\"utf-8\"", "Content-Transfer-Encoding": "base64", "Errors-To": "kernel-team-bounces@lists.ubuntu.com", "Sender": "\"kernel-team\" <kernel-team-bounces@lists.ubuntu.com>" }, "content": "From: Julian Anastasov <ja@ssi.bg>\n\nBugLink: https://bugs.launchpad.net/bugs/1715812\n\nAdd confirm_neigh method to dst_ops and use it from IPv4 and IPv6\nto lookup and confirm the neighbour. Its usage via the new helper\ndst_confirm_neigh() should be restricted to MSG_PROBE users for\nperformance reasons.\n\nFor XFRM prefer the last tunnel address, if present. With help\nfrom Steffen Klassert.\n\nSigned-off-by: Julian Anastasov <ja@ssi.bg>\nAcked-by: Steffen Klassert <steffen.klassert@secunet.com>\nSigned-off-by: David S. Miller <davem@davemloft.net>\n(cherry picked from commit 63fca65d08632fbec9d9b655f671cf08aa1aeeb8)\nSigned-off-by: Daniel Axtens <daniel.axtens@canonical.com>\n---\n include/net/arp.h | 16 ++++++++++++++++\n include/net/dst.h | 7 +++++++\n include/net/dst_ops.h | 2 ++\n include/net/ndisc.h | 17 +++++++++++++++++\n net/ipv4/route.c | 19 +++++++++++++++++++\n net/ipv6/route.c | 16 ++++++++++++++++\n net/xfrm/xfrm_policy.c | 19 +++++++++++++++++++\n 7 files changed, 96 insertions(+)", "diff": "diff --git a/include/net/arp.h b/include/net/arp.h\nindex 5e0f891d476c..65619a2de6f4 100644\n--- a/include/net/arp.h\n+++ b/include/net/arp.h\n@@ -35,6 +35,22 @@ static inline struct neighbour *__ipv4_neigh_lookup(struct net_device *dev, u32\n \treturn n;\n }\n \n+static inline void __ipv4_confirm_neigh(struct net_device *dev, u32 key)\n+{\n+\tstruct neighbour *n;\n+\n+\trcu_read_lock_bh();\n+\tn = __ipv4_neigh_lookup_noref(dev, key);\n+\tif (n) {\n+\t\tunsigned long now = jiffies;\n+\n+\t\t/* avoid dirtying neighbour */\n+\t\tif (n->confirmed != now)\n+\t\t\tn->confirmed = now;\n+\t}\n+\trcu_read_unlock_bh();\n+}\n+\n void arp_init(void);\n int arp_ioctl(struct net *net, unsigned int cmd, void __user *arg);\n void arp_send(int type, int ptype, __be32 dest_ip,\ndiff --git a/include/net/dst.h b/include/net/dst.h\nindex e4f450617919..4d97bd8a8c92 100644\n--- a/include/net/dst.h\n+++ b/include/net/dst.h\n@@ -474,6 +474,13 @@ static inline struct neighbour *dst_neigh_lookup_skb(const struct dst_entry *dst\n \treturn IS_ERR(n) ? NULL : n;\n }\n \n+static inline void dst_confirm_neigh(const struct dst_entry *dst,\n+\t\t\t\t const void *daddr)\n+{\n+\tif (dst->ops->confirm_neigh)\n+\t\tdst->ops->confirm_neigh(dst, daddr);\n+}\n+\n static inline void dst_link_failure(struct sk_buff *skb)\n {\n \tstruct dst_entry *dst = skb_dst(skb);\ndiff --git a/include/net/dst_ops.h b/include/net/dst_ops.h\nindex a0d443ca16fc..0d0481827098 100644\n--- a/include/net/dst_ops.h\n+++ b/include/net/dst_ops.h\n@@ -33,6 +33,8 @@ struct dst_ops {\n \tstruct neighbour *\t(*neigh_lookup)(const struct dst_entry *dst,\n \t\t\t\t\t\tstruct sk_buff *skb,\n \t\t\t\t\t\tconst void *daddr);\n+\tvoid\t\t\t(*confirm_neigh)(const struct dst_entry *dst,\n+\t\t\t\t\t\t const void *daddr);\n \n \tstruct kmem_cache\t*kmem_cachep;\n \ndiff --git a/include/net/ndisc.h b/include/net/ndisc.h\nindex 2d8edaad29cb..618223cddb9a 100644\n--- a/include/net/ndisc.h\n+++ b/include/net/ndisc.h\n@@ -172,6 +172,23 @@ static inline struct neighbour *__ipv6_neigh_lookup(struct net_device *dev, cons\n \treturn n;\n }\n \n+static inline void __ipv6_confirm_neigh(struct net_device *dev,\n+\t\t\t\t\tconst void *pkey)\n+{\n+\tstruct neighbour *n;\n+\n+\trcu_read_lock_bh();\n+\tn = __ipv6_neigh_lookup_noref(dev, pkey);\n+\tif (n) {\n+\t\tunsigned long now = jiffies;\n+\n+\t\t/* avoid dirtying neighbour */\n+\t\tif (n->confirmed != now)\n+\t\t\tn->confirmed = now;\n+\t}\n+\trcu_read_unlock_bh();\n+}\n+\n int ndisc_init(void);\n int ndisc_late_init(void);\n \ndiff --git a/net/ipv4/route.c b/net/ipv4/route.c\nindex c295d882c6e0..f20bf6f17b60 100644\n--- a/net/ipv4/route.c\n+++ b/net/ipv4/route.c\n@@ -154,6 +154,7 @@ static u32 *ipv4_cow_metrics(struct dst_entry *dst, unsigned long old)\n static struct neighbour *ipv4_neigh_lookup(const struct dst_entry *dst,\n \t\t\t\t\t struct sk_buff *skb,\n \t\t\t\t\t const void *daddr);\n+static void ipv4_confirm_neigh(const struct dst_entry *dst, const void *daddr);\n \n static struct dst_ops ipv4_dst_ops = {\n \t.family =\t\tAF_INET,\n@@ -168,6 +169,7 @@ static struct dst_ops ipv4_dst_ops = {\n \t.redirect =\t\tip_do_redirect,\n \t.local_out =\t\t__ip_local_out,\n \t.neigh_lookup =\t\tipv4_neigh_lookup,\n+\t.confirm_neigh =\tipv4_confirm_neigh,\n };\n \n #define ECN_OR_COST(class)\tTC_PRIO_##class\n@@ -461,6 +463,23 @@ static struct neighbour *ipv4_neigh_lookup(const struct dst_entry *dst,\n \treturn neigh_create(&arp_tbl, pkey, dev);\n }\n \n+static void ipv4_confirm_neigh(const struct dst_entry *dst, const void *daddr)\n+{\n+\tstruct net_device *dev = dst->dev;\n+\tconst __be32 *pkey = daddr;\n+\tconst struct rtable *rt;\n+\n+\trt = (const struct rtable *)dst;\n+\tif (rt->rt_gateway)\n+\t\tpkey = (const __be32 *)&rt->rt_gateway;\n+\telse if (!daddr ||\n+\t\t (rt->rt_flags &\n+\t\t (RTCF_MULTICAST | RTCF_BROADCAST | RTCF_LOCAL)))\n+\t\treturn;\n+\n+\t__ipv4_confirm_neigh(dev, *(__force u32 *)pkey);\n+}\n+\n #define IP_IDENTS_SZ 2048u\n \n static atomic_t *ip_idents __read_mostly;\ndiff --git a/net/ipv6/route.c b/net/ipv6/route.c\nindex ef335070e98a..bba100e85114 100644\n--- a/net/ipv6/route.c\n+++ b/net/ipv6/route.c\n@@ -214,6 +214,21 @@ static struct neighbour *ip6_neigh_lookup(const struct dst_entry *dst,\n \treturn neigh_create(&nd_tbl, daddr, dst->dev);\n }\n \n+static void ip6_confirm_neigh(const struct dst_entry *dst, const void *daddr)\n+{\n+\tstruct net_device *dev = dst->dev;\n+\tstruct rt6_info *rt = (struct rt6_info *)dst;\n+\n+\tdaddr = choose_neigh_daddr(rt, NULL, daddr);\n+\tif (!daddr)\n+\t\treturn;\n+\tif (dev->flags & (IFF_NOARP | IFF_LOOPBACK))\n+\t\treturn;\n+\tif (ipv6_addr_is_multicast((const struct in6_addr *)daddr))\n+\t\treturn;\n+\t__ipv6_confirm_neigh(dev, daddr);\n+}\n+\n static struct dst_ops ip6_dst_ops_template = {\n \t.family\t\t\t=\tAF_INET6,\n \t.gc\t\t\t=\tip6_dst_gc,\n@@ -230,6 +245,7 @@ static struct dst_ops ip6_dst_ops_template = {\n \t.redirect\t\t=\trt6_do_redirect,\n \t.local_out\t\t=\t__ip6_local_out,\n \t.neigh_lookup\t\t=\tip6_neigh_lookup,\n+\t.confirm_neigh\t\t=\tip6_confirm_neigh,\n };\n \n static unsigned int ip6_blackhole_mtu(const struct dst_entry *dst)\ndiff --git a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c\nindex 47eaaf3fd44f..1ab1debfcd44 100644\n--- a/net/xfrm/xfrm_policy.c\n+++ b/net/xfrm/xfrm_policy.c\n@@ -2781,6 +2781,23 @@ static struct neighbour *xfrm_neigh_lookup(const struct dst_entry *dst,\n \treturn dst->path->ops->neigh_lookup(dst, skb, daddr);\n }\n \n+static void xfrm_confirm_neigh(const struct dst_entry *dst, const void *daddr)\n+{\n+\tconst struct dst_entry *path = dst->path;\n+\n+\tfor (; dst != path; dst = dst->child) {\n+\t\tconst struct xfrm_state *xfrm = dst->xfrm;\n+\n+\t\tif (xfrm->props.mode == XFRM_MODE_TRANSPORT)\n+\t\t\tcontinue;\n+\t\tif (xfrm->type->flags & XFRM_TYPE_REMOTE_COADDR)\n+\t\t\tdaddr = xfrm->coaddr;\n+\t\telse if (!(xfrm->type->flags & XFRM_TYPE_LOCAL_COADDR))\n+\t\t\tdaddr = &xfrm->id.daddr;\n+\t}\n+\tpath->ops->confirm_neigh(path, daddr);\n+}\n+\n int xfrm_policy_register_afinfo(struct xfrm_policy_afinfo *afinfo)\n {\n \tint err = 0;\n@@ -2807,6 +2824,8 @@ int xfrm_policy_register_afinfo(struct xfrm_policy_afinfo *afinfo)\n \t\t\tdst_ops->link_failure = xfrm_link_failure;\n \t\tif (likely(dst_ops->neigh_lookup == NULL))\n \t\t\tdst_ops->neigh_lookup = xfrm_neigh_lookup;\n+\t\tif (likely(!dst_ops->confirm_neigh))\n+\t\t\tdst_ops->confirm_neigh = xfrm_confirm_neigh;\n \t\tif (likely(afinfo->garbage_collect == NULL))\n \t\t\tafinfo->garbage_collect = xfrm_garbage_collect_deferred;\n \t\trcu_assign_pointer(xfrm_policy_afinfo[afinfo->family], afinfo);\n", "prefixes": [ "SRU", "Xenial", "5/7" ] }