From patchwork Tue Jun 16 17:36:26 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xin Long X-Patchwork-Id: 217700 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.6 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, SIGNED_OFF_BY, SPF_HELO_NONE, SPF_PASS, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 383F0C433E0 for ; Tue, 16 Jun 2020 17:36:54 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 174B5214D8 for ; Tue, 16 Jun 2020 17:36:54 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="LDWYgVpo" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731105AbgFPRgx (ORCPT ); Tue, 16 Jun 2020 13:36:53 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35290 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729113AbgFPRgw (ORCPT ); Tue, 16 Jun 2020 13:36:52 -0400 Received: from mail-pj1-x1042.google.com (mail-pj1-x1042.google.com [IPv6:2607:f8b0:4864:20::1042]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A500CC061573 for ; Tue, 16 Jun 2020 10:36:52 -0700 (PDT) Received: by mail-pj1-x1042.google.com with SMTP id u8so1739848pje.4 for ; Tue, 16 Jun 2020 10:36:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=B9hXhRsmOU2I2Ul+h5EHdpmY0NsRHpe4vaSlkGqUhFM=; b=LDWYgVpoZO0d2AYfMKbFLhxl535s5ghFsrparPJ2Nd1qCYnCmfPCha44rILFZI7oyN 57/Mj6MRHcZ5oA68P3rXm7Pz57EAz5duvlgHtivBbHffrwA8P5R35n2l+nih6fo744gc 0K9zAeqjfwsJi/np5VbWxhxvglCsXKQKgQkgWjK+7N/c9iHZFpo8zIzhbGrsme8p9pNQ KUl6+PNQnm567z1cqaVyquVCknyq8tzC2m2b6XDXycGDnfWMt5/Q5SNhsfXUlflhw5nX /Wlz2S9V9UDeiYgNz2hfVcAzkHOj6VtWlHjzTS4OO1U8PJ6KgtZZXXTx/ONgote7wKDr 8FgQ== 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:in-reply-to:references; bh=B9hXhRsmOU2I2Ul+h5EHdpmY0NsRHpe4vaSlkGqUhFM=; b=WdLpVtcd0dX/PpAF/7nuPklqBBf84e71vo0DSckLiAmuVfLgNz2IKzsQ8eP9fJ/+DE 2a9sPjsQ7GrLS/yaOyDuNpuIFzkarwCAOKKjKZH9xg65Cit6XnpRB5gIC1YMIXsB6Ywb FK7DKR5LP0RfKvmuYXXT7IdN+U/l759GTFnF6QojtGOTRKmBDaj0LVLLV1gwHMUsAGH0 TKRfepTJOf118C3BAHHjDSTvOn477bkNtymp8DOsuv4hmbSdmiYI/SEJbs9LGhjH8UDx n0P0zH4Tlf7m/YQ8RBh5SPc0hO5p/zAaYGlVQ74fmlzadWrY68BynFXNTKJi2Rje82SB pWJA== X-Gm-Message-State: AOAM532M0mppR7eFDI2zhWW9344Ntvzu1hk/YMuz9UzAeBrfT5cMsnFH OG5jBV8eU2mCwqoLdAkgcQvTkPQ07Tk= X-Google-Smtp-Source: ABdhPJwNnqezddQZhMOH7Q3jr3bItjwneG1GqIKJ0AEh7872oSbGPJ5Kfc4ryvooUfUhy9lNxmuiiA== X-Received: by 2002:a17:90a:297:: with SMTP id w23mr4039008pja.140.1592329011894; Tue, 16 Jun 2020 10:36:51 -0700 (PDT) Received: from localhost ([209.132.188.80]) by smtp.gmail.com with ESMTPSA id y136sm17364363pfg.55.2020.06.16.10.36.50 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 16 Jun 2020 10:36:51 -0700 (PDT) From: Xin Long To: netdev@vger.kernel.org Cc: Steffen Klassert , Herbert Xu , "David S. Miller" , Sabrina Dubroca Subject: [PATCH ipsec-next 01/10] xfrm: add is_ipip to struct xfrm_input_afinfo Date: Wed, 17 Jun 2020 01:36:26 +0800 Message-Id: <84bcb772ea1b68f3b150106b9db1825b65742cef.1592328814.git.lucien.xin@gmail.com> X-Mailer: git-send-email 2.1.0 In-Reply-To: References: In-Reply-To: References: Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This patch is to add a new member is_ipip to struct xfrm_input_afinfo, to allow another group family of callback functions to be registered with is_ipip set. This will be used for doing a callback for struct xfrm(6)_tunnel of ipip/ipv6 tunnels in xfrm_input() by calling xfrm_rcv_cb(), which is needed by ipip/ipv6 tunnels' support in ip(6)_vti and xfrm interface in the next patches. Signed-off-by: Xin Long --- include/net/xfrm.h | 3 ++- net/xfrm/xfrm_input.c | 24 +++++++++++++----------- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/include/net/xfrm.h b/include/net/xfrm.h index 094fe68..4aa118d 100644 --- a/include/net/xfrm.h +++ b/include/net/xfrm.h @@ -372,7 +372,8 @@ struct xfrm_state_afinfo *xfrm_state_get_afinfo(unsigned int family); struct xfrm_state_afinfo *xfrm_state_afinfo_get_rcu(unsigned int family); struct xfrm_input_afinfo { - unsigned int family; + u8 family; + bool is_ipip; int (*callback)(struct sk_buff *skb, u8 protocol, int err); }; diff --git a/net/xfrm/xfrm_input.c b/net/xfrm/xfrm_input.c index bd984ff..37456d0 100644 --- a/net/xfrm/xfrm_input.c +++ b/net/xfrm/xfrm_input.c @@ -42,7 +42,7 @@ struct xfrm_trans_cb { #define XFRM_TRANS_SKB_CB(__skb) ((struct xfrm_trans_cb *)&((__skb)->cb[0])) static DEFINE_SPINLOCK(xfrm_input_afinfo_lock); -static struct xfrm_input_afinfo const __rcu *xfrm_input_afinfo[AF_INET6 + 1]; +static struct xfrm_input_afinfo const __rcu *xfrm_input_afinfo[2][AF_INET6 + 1]; static struct gro_cells gro_cells; static struct net_device xfrm_napi_dev; @@ -53,14 +53,14 @@ int xfrm_input_register_afinfo(const struct xfrm_input_afinfo *afinfo) { int err = 0; - if (WARN_ON(afinfo->family >= ARRAY_SIZE(xfrm_input_afinfo))) + if (WARN_ON(afinfo->family > AF_INET6)) return -EAFNOSUPPORT; spin_lock_bh(&xfrm_input_afinfo_lock); - if (unlikely(xfrm_input_afinfo[afinfo->family] != NULL)) + if (unlikely(xfrm_input_afinfo[afinfo->is_ipip][afinfo->family])) err = -EEXIST; else - rcu_assign_pointer(xfrm_input_afinfo[afinfo->family], afinfo); + rcu_assign_pointer(xfrm_input_afinfo[afinfo->is_ipip][afinfo->family], afinfo); spin_unlock_bh(&xfrm_input_afinfo_lock); return err; } @@ -71,11 +71,11 @@ int xfrm_input_unregister_afinfo(const struct xfrm_input_afinfo *afinfo) int err = 0; spin_lock_bh(&xfrm_input_afinfo_lock); - if (likely(xfrm_input_afinfo[afinfo->family] != NULL)) { - if (unlikely(xfrm_input_afinfo[afinfo->family] != afinfo)) + if (likely(xfrm_input_afinfo[afinfo->is_ipip][afinfo->family])) { + if (unlikely(xfrm_input_afinfo[afinfo->is_ipip][afinfo->family] != afinfo)) err = -EINVAL; else - RCU_INIT_POINTER(xfrm_input_afinfo[afinfo->family], NULL); + RCU_INIT_POINTER(xfrm_input_afinfo[afinfo->is_ipip][afinfo->family], NULL); } spin_unlock_bh(&xfrm_input_afinfo_lock); synchronize_rcu(); @@ -83,15 +83,15 @@ int xfrm_input_unregister_afinfo(const struct xfrm_input_afinfo *afinfo) } EXPORT_SYMBOL(xfrm_input_unregister_afinfo); -static const struct xfrm_input_afinfo *xfrm_input_get_afinfo(unsigned int family) +static const struct xfrm_input_afinfo *xfrm_input_get_afinfo(u8 family, bool is_ipip) { const struct xfrm_input_afinfo *afinfo; - if (WARN_ON_ONCE(family >= ARRAY_SIZE(xfrm_input_afinfo))) + if (WARN_ON_ONCE(family > AF_INET6)) return NULL; rcu_read_lock(); - afinfo = rcu_dereference(xfrm_input_afinfo[family]); + afinfo = rcu_dereference(xfrm_input_afinfo[is_ipip][family]); if (unlikely(!afinfo)) rcu_read_unlock(); return afinfo; @@ -100,9 +100,11 @@ static const struct xfrm_input_afinfo *xfrm_input_get_afinfo(unsigned int family static int xfrm_rcv_cb(struct sk_buff *skb, unsigned int family, u8 protocol, int err) { + bool is_ipip = (protocol == IPPROTO_IPIP || protocol == IPPROTO_IPV6); + const struct xfrm_input_afinfo *afinfo; int ret; - const struct xfrm_input_afinfo *afinfo = xfrm_input_get_afinfo(family); + afinfo = xfrm_input_get_afinfo(family, is_ipip); if (!afinfo) return -EAFNOSUPPORT; From patchwork Tue Jun 16 17:36:28 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xin Long X-Patchwork-Id: 217699 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, SIGNED_OFF_BY, SPF_HELO_NONE, SPF_PASS, UNWANTED_LANGUAGE_BODY, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5E91BC433E0 for ; Tue, 16 Jun 2020 17:37:11 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 3E11321475 for ; Tue, 16 Jun 2020 17:37:11 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="H/v5gQun" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731238AbgFPRhK (ORCPT ); Tue, 16 Jun 2020 13:37:10 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35334 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729113AbgFPRhJ (ORCPT ); Tue, 16 Jun 2020 13:37:09 -0400 Received: from mail-pl1-x643.google.com (mail-pl1-x643.google.com [IPv6:2607:f8b0:4864:20::643]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A36BFC061573 for ; Tue, 16 Jun 2020 10:37:09 -0700 (PDT) Received: by mail-pl1-x643.google.com with SMTP id m7so8691975plt.5 for ; Tue, 16 Jun 2020 10:37:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=Eh83GUpnDgPrW8AEnAz5rGdUZzVxlMeurdTlsjxiVUU=; b=H/v5gQunPk3Yi7JYyY8ZiTJNBAlexSQQe/Ggkvf+OBROazyy6U2yI+1g+C48hc+3D9 ZSyG8oWekuKAIGfZtgzMatikO5AwmgHuWAeHw2dE1R6eiV00yYdEicqlJWZGHqpiuhwU mtyQjao2yTNflpo+xBhRPCGQ3hAZEpOk8fqLEC+LYNr8lddtTGJPkUYnhNdX2/Ie8Q06 auwgXch2+Hh65tm90NeNnfWlyjeKKs9IEvWve/PzqWW72CwtIXGBYVfAnU9hiUJfm23+ YRYgnFVxl4fL/MrBn01KeTAL/ZDfnfW3+LYy4vLCaNXSU7LXhBcZESjY6hQfKEoUSqTf 8+Vg== 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:in-reply-to:references; bh=Eh83GUpnDgPrW8AEnAz5rGdUZzVxlMeurdTlsjxiVUU=; b=uUA+XPv9bpuqWOikrK8tysvMbKrytn6k5xt2jCtJxBnYtVEafAD8MxqEkSqrG1/kPh 8d4+eExKZaPaAXDzv+Z2TMjOAS0UIcubKpWcKz8uvsLLM8228/ORBKHHf+PhVDGo7sYZ O+Yq6MGbMIOypn4Wbk6rY/JI9uwDFwqEqZ27sDwwwStElULAWit1d3B+QCPeY/i81N9+ wJx6fnSZxfeobH8gcSr9KjYqf3QZ5rgRMEkE5KOZYm/GvJy2uEdXtBB3/XoXiW+zgq/n 2c6zVO1DpDEloPkmYwvm2RMsN6AdfhJwfgI1p5ZFuWbT+rvKuPjNGT5wf5njnEzs/waq XbAA== X-Gm-Message-State: AOAM530azh7hGIu7ax15p2xBsSIhCoNECq1wqQ45mITvrcUiqXn5LQpo u0vDh2GZPSGnucRQATT9y031sAd7dfo= X-Google-Smtp-Source: ABdhPJyqR73neyzyBEk6RwllwiVSIxswjBRtRvcGP7mR009sdohgIp29L+5b/ieh9Mhj7JPJxw8j/w== X-Received: by 2002:a17:902:599a:: with SMTP id p26mr3138328pli.322.1592329028886; Tue, 16 Jun 2020 10:37:08 -0700 (PDT) Received: from localhost ([209.132.188.80]) by smtp.gmail.com with ESMTPSA id oc6sm3379009pjb.43.2020.06.16.10.37.07 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 16 Jun 2020 10:37:08 -0700 (PDT) From: Xin Long To: netdev@vger.kernel.org Cc: Steffen Klassert , Herbert Xu , "David S. Miller" , Sabrina Dubroca Subject: [PATCH ipsec-next 03/10] tunnel6: add tunnel6_input_afinfo for ipip and ipv6 tunnels Date: Wed, 17 Jun 2020 01:36:28 +0800 Message-Id: X-Mailer: git-send-email 2.1.0 In-Reply-To: <5a63a0c47cc71476786873cbd32db8db3c0f7d1e.1592328814.git.lucien.xin@gmail.com> References: <84bcb772ea1b68f3b150106b9db1825b65742cef.1592328814.git.lucien.xin@gmail.com> <5a63a0c47cc71476786873cbd32db8db3c0f7d1e.1592328814.git.lucien.xin@gmail.com> In-Reply-To: References: Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This patch is to register a callback function tunnel6_rcv_cb with is_ipip set in a xfrm_input_afinfo object for tunnel6 and tunnel46. It will be called by xfrm_rcv_cb() from xfrm_input() when family is AF_INET6 and proto is IPPROTO_IPIP or IPPROTO_IPV6. Signed-off-by: Xin Long --- include/net/xfrm.h | 1 + net/ipv6/tunnel6.c | 26 ++++++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/include/net/xfrm.h b/include/net/xfrm.h index c69410d..ffee126 100644 --- a/include/net/xfrm.h +++ b/include/net/xfrm.h @@ -1424,6 +1424,7 @@ struct xfrm_tunnel { struct xfrm6_tunnel { int (*handler)(struct sk_buff *skb); + int (*cb_handler)(struct sk_buff *skb, int err); int (*err_handler)(struct sk_buff *skb, struct inet6_skb_parm *opt, u8 type, u8 code, int offset, __be32 info); struct xfrm6_tunnel __rcu *next; diff --git a/net/ipv6/tunnel6.c b/net/ipv6/tunnel6.c index 06c02eb..7bf4c27 100644 --- a/net/ipv6/tunnel6.c +++ b/net/ipv6/tunnel6.c @@ -155,6 +155,30 @@ static int tunnel6_rcv(struct sk_buff *skb) return 0; } +static int tunnel6_rcv_cb(struct sk_buff *skb, u8 proto, int err) +{ + struct xfrm6_tunnel *head, *handler; + int ret; + + head = (proto == IPPROTO_IPV6) ? tunnel6_handlers : tunnel46_handlers; + + for_each_tunnel_rcu(head, handler) { + if (handler->cb_handler) { + ret = handler->cb_handler(skb, err); + if (ret <= 0) + return ret; + } + } + + return 0; +} + +static const struct xfrm_input_afinfo tunnel6_input_afinfo = { + .family = AF_INET6, + .is_ipip = true, + .callback = tunnel6_rcv_cb, +}; + static int tunnel46_rcv(struct sk_buff *skb) { struct xfrm6_tunnel *handler; @@ -245,11 +269,13 @@ static int __init tunnel6_init(void) inet6_del_protocol(&tunnel46_protocol, IPPROTO_IPIP); return -EAGAIN; } + xfrm_input_register_afinfo(&tunnel6_input_afinfo); return 0; } static void __exit tunnel6_fini(void) { + xfrm_input_unregister_afinfo(&tunnel6_input_afinfo); if (inet6_del_protocol(&tunnel46_protocol, IPPROTO_IPIP)) pr_err("%s: can't remove protocol\n", __func__); if (inet6_del_protocol(&tunnel6_protocol, IPPROTO_IPV6)) From patchwork Tue Jun 16 17:36:30 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xin Long X-Patchwork-Id: 217698 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, SIGNED_OFF_BY, SPF_HELO_NONE, SPF_PASS, UNWANTED_LANGUAGE_BODY, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1B783C433DF for ; Tue, 16 Jun 2020 17:37:30 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 00355214D8 for ; Tue, 16 Jun 2020 17:37:29 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="UJa56e8F" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731293AbgFPRh2 (ORCPT ); Tue, 16 Jun 2020 13:37:28 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35380 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729090AbgFPRh1 (ORCPT ); Tue, 16 Jun 2020 13:37:27 -0400 Received: from mail-pj1-x1042.google.com (mail-pj1-x1042.google.com [IPv6:2607:f8b0:4864:20::1042]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6F37DC06174E for ; Tue, 16 Jun 2020 10:37:26 -0700 (PDT) Received: by mail-pj1-x1042.google.com with SMTP id jz3so1752139pjb.0 for ; Tue, 16 Jun 2020 10:37:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=z1pyPjFm65QRVkTKyaRq57FstZhZwmJ/r6lGSnbsdZY=; b=UJa56e8FV19GK3aLScMSOBGCAwfvNeAQiwJioOtloyJYjPX11AtJsD7weteXID0OwF 20CbKl1DwlvboaYiRsy9TaKOpsNvtXXdFNsf5tFccwntjXlpU9hgacNlecOkJSK+NVlG pxQHxnov0+c6061LWGcn/7Bc9GZ8bTRc1j1UWGu85FUFpNEN3PgukDjmB2x+S63guEmS U/u6/Dro6bEQbIwyk7b5FVW/ifc40btHYbFUS8s1OWLWL0gFyilLl2J9thJ58oE3otYO kk08DkKd0LxXXmF0qKU6lyPAW9a2zo+4f2oifKXwuO2c5S5NQDw0qgzCho05dnaTL0T+ U1+A== 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:in-reply-to:references; bh=z1pyPjFm65QRVkTKyaRq57FstZhZwmJ/r6lGSnbsdZY=; b=acSfOs3FP7kTr0+21Tq5CjdQncJsgoV0zHDrha6xgYKrHgh4c7+nHCnmzcxsVBdX2/ cZZtBi2NyDBGVNA1RgUSuAHKS4YyEqDIKfjoDp/Y9JipNGZtcAPO9tahTLNJj45jbD3F Ou0bPtzPVyoYtb9AO8ZYNVOB1qiMgmshRJ4Is1M4IiTQDlRIlpZJ5AMOenRknPbxh4RU y9XdMhJeY0+OotmcYlFWJz7e8b7NjrL3FtXiexGx3MwE5FjnObm2motimSo02ZQBY65U 9ijRmJXkq+Tr8Ka+ZTwcn7B8sOpq2vIc7pliwKcZMr8xbO2Ray+uNDFVWKFt9Ou3jwQX lTog== X-Gm-Message-State: AOAM532Vyj33n/guWAHIbA6eRUfXET9ByQSi3GanluX0b7Hm6nE8PwGA Oy5+yrNWTcneannPkccaCUdfwZPQk+8= X-Google-Smtp-Source: ABdhPJzPkgrB5z3on4k7ZVnheGvON5cSCI50VOe8MN8tmkfauMyRJnLG34657romvdM57OrxR7X5qA== X-Received: by 2002:a17:90b:3691:: with SMTP id mj17mr3478331pjb.152.1592329045663; Tue, 16 Jun 2020 10:37:25 -0700 (PDT) Received: from localhost ([209.132.188.80]) by smtp.gmail.com with ESMTPSA id l63sm18210303pfd.122.2020.06.16.10.37.24 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 16 Jun 2020 10:37:25 -0700 (PDT) From: Xin Long To: netdev@vger.kernel.org Cc: Steffen Klassert , Herbert Xu , "David S. Miller" , Sabrina Dubroca Subject: [PATCH ipsec-next 05/10] ip_vti: support IPIP6 tunnel processing Date: Wed, 17 Jun 2020 01:36:30 +0800 Message-Id: X-Mailer: git-send-email 2.1.0 In-Reply-To: <4ad2ff7658148645d2e1947d659d11061013c336.1592328814.git.lucien.xin@gmail.com> References: <84bcb772ea1b68f3b150106b9db1825b65742cef.1592328814.git.lucien.xin@gmail.com> <5a63a0c47cc71476786873cbd32db8db3c0f7d1e.1592328814.git.lucien.xin@gmail.com> <4ad2ff7658148645d2e1947d659d11061013c336.1592328814.git.lucien.xin@gmail.com> In-Reply-To: References: Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org For IPIP6 tunnel processing, the functions called will be the same as that for IPIP tunnel's. So reuse it and register it with family == AF_INET6. Signed-off-by: Xin Long --- net/ipv4/ip_vti.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/net/ipv4/ip_vti.c b/net/ipv4/ip_vti.c index fd762d9..f0bd680 100644 --- a/net/ipv4/ip_vti.c +++ b/net/ipv4/ip_vti.c @@ -655,7 +655,12 @@ static int __init vti_init(void) msg = "ipip tunnel"; err = xfrm4_tunnel_register(&vti_ipip_handler, AF_INET); if (err < 0) - goto xfrm_tunnel_failed; + goto xfrm_tunnel_ipip_failed; +#if IS_ENABLED(CONFIG_IPV6) + err = xfrm4_tunnel_register(&vti_ipip_handler, AF_INET6); + if (err < 0) + goto xfrm_tunnel_ipip6_failed; +#endif msg = "netlink interface"; err = rtnl_link_register(&vti_link_ops); @@ -665,8 +670,12 @@ static int __init vti_init(void) return err; rtnl_link_failed: +#if IS_ENABLED(CONFIG_IPV6) + xfrm4_tunnel_deregister(&vti_ipip_handler, AF_INET6); +xfrm_tunnel_ipip6_failed: +#endif xfrm4_tunnel_deregister(&vti_ipip_handler, AF_INET); -xfrm_tunnel_failed: +xfrm_tunnel_ipip_failed: xfrm4_protocol_deregister(&vti_ipcomp4_protocol, IPPROTO_COMP); xfrm_proto_comp_failed: xfrm4_protocol_deregister(&vti_ah4_protocol, IPPROTO_AH); @@ -682,6 +691,9 @@ static int __init vti_init(void) static void __exit vti_fini(void) { rtnl_link_unregister(&vti_link_ops); +#if IS_ENABLED(CONFIG_IPV6) + xfrm4_tunnel_deregister(&vti_ipip_handler, AF_INET6); +#endif xfrm4_tunnel_deregister(&vti_ipip_handler, AF_INET); xfrm4_protocol_deregister(&vti_ipcomp4_protocol, IPPROTO_COMP); xfrm4_protocol_deregister(&vti_ah4_protocol, IPPROTO_AH); From patchwork Tue Jun 16 17:36:32 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xin Long X-Patchwork-Id: 217697 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, SIGNED_OFF_BY, SPF_HELO_NONE, SPF_PASS, UNWANTED_LANGUAGE_BODY, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 05575C433DF for ; Tue, 16 Jun 2020 17:37:46 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id D7E56214DB for ; Tue, 16 Jun 2020 17:37:45 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="jzohcR9t" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731319AbgFPRhp (ORCPT ); Tue, 16 Jun 2020 13:37:45 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35430 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730621AbgFPRhn (ORCPT ); Tue, 16 Jun 2020 13:37:43 -0400 Received: from mail-pg1-x544.google.com (mail-pg1-x544.google.com [IPv6:2607:f8b0:4864:20::544]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A3820C061573 for ; Tue, 16 Jun 2020 10:37:43 -0700 (PDT) Received: by mail-pg1-x544.google.com with SMTP id l63so7283767pge.12 for ; Tue, 16 Jun 2020 10:37:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=fan5/UZFCRvRboBAzk0Rni+XwLaisLnJjgBMZbBtGnU=; b=jzohcR9t3+Snb/y2Ko3iftSNbajiTIf4zbOU8oj8+bNXzYnl1I/Mk5w1wOjAYDERzG 1wDl0qlmbxib7X2I15G9PRn3TKLmOO5hr0Ui9v6ua5B/WSfjBq6D13oJDro1haLXErZ7 8J9YdrFip9wBWQPq3/Eu3whUeX9DXiAwcLNPjauzCionzTYyMZ25U2bRQ5E6waBt81hN nsKS2c9h/BFlPncIQH+jNqn1GBZReTo5IcA+PaFwmX4qb1P421aarAg2Ft0zxoMuJ5P0 7j/2JEhEPV5f3nXOmddkIcuHYFVAbpBSQFI1kbpus9O1jRFfwK4/nUxpC77BvKKfWhu1 6icw== 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:in-reply-to:references; bh=fan5/UZFCRvRboBAzk0Rni+XwLaisLnJjgBMZbBtGnU=; b=bpPXGoa6zn6sCvFOnjn3YlUpeQ2d5ByvA/hNPPg5PoLXR3zl42A01W8j5vd1mHYgDP InITFq/eE8V8r9OVXMTcT7p3fV3bDzk1iyEMs8kidCViz51Aza7j7VOjDmFr7y0swFAa Y525+Cs/bp1GrKFAnnlKeEito1HAmxCI2+Wdga6JykpH8LhtN77D/lBX/QmJnVlqYU6D VedJA3QgUFngOC3etynXRRB5PxUMX0xgdIHixWSiUA5CP76UvCd+cYcpA0iLHuMPJzud 68FAa0DaULSWjafxF/4/Yg5ktx6UeDOPa5Yfbnzg5uAER55JJrO86aAcD6vy73eCIgFH rHkQ== X-Gm-Message-State: AOAM53321VvnG1T41sYd61EC9F1iPmmcSydDMouwPLnkYl6gY4WRPGz3 wCmwhMDspnHAAj6oMWW1OOpd3D5rDYU= X-Google-Smtp-Source: ABdhPJwuPLcWZdAygmV2AFIa0ySUF86xE2EEnkP60uXGBT68HiWNNw+822FMTqLVvUSI97dOSXEKDg== X-Received: by 2002:a63:3d85:: with SMTP id k127mr2711561pga.29.1592329062490; Tue, 16 Jun 2020 10:37:42 -0700 (PDT) Received: from localhost ([209.132.188.80]) by smtp.gmail.com with ESMTPSA id d15sm17509144pfh.175.2020.06.16.10.37.41 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 16 Jun 2020 10:37:41 -0700 (PDT) From: Xin Long To: netdev@vger.kernel.org Cc: Steffen Klassert , Herbert Xu , "David S. Miller" , Sabrina Dubroca Subject: [PATCH ipsec-next 07/10] ip6_vti: support IP6IP tunnel processing Date: Wed, 17 Jun 2020 01:36:32 +0800 Message-Id: <870c43283bd6bd6c3b583c05ebc757879676edcd.1592328814.git.lucien.xin@gmail.com> X-Mailer: git-send-email 2.1.0 In-Reply-To: References: <84bcb772ea1b68f3b150106b9db1825b65742cef.1592328814.git.lucien.xin@gmail.com> <5a63a0c47cc71476786873cbd32db8db3c0f7d1e.1592328814.git.lucien.xin@gmail.com> <4ad2ff7658148645d2e1947d659d11061013c336.1592328814.git.lucien.xin@gmail.com> In-Reply-To: References: Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org For IP6IP tunnel processing, the functions called will be the same as that for IP6IP6 tunnel's. So reuse it and register it with family == AF_INET. Signed-off-by: Xin Long --- net/ipv6/ip6_vti.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/net/ipv6/ip6_vti.c b/net/ipv6/ip6_vti.c index 2161648..d45111d 100644 --- a/net/ipv6/ip6_vti.c +++ b/net/ipv6/ip6_vti.c @@ -1264,7 +1264,10 @@ static int __init vti6_tunnel_init(void) msg = "ipv6 tunnel"; err = xfrm6_tunnel_register(&vti_ipv6_handler, AF_INET6); if (err < 0) - goto vti_tunnel_failed; + goto vti_tunnel_ipv6_failed; + err = xfrm6_tunnel_register(&vti_ipv6_handler, AF_INET); + if (err < 0) + goto vti_tunnel_ip6ip_failed; msg = "netlink interface"; err = rtnl_link_register(&vti6_link_ops); @@ -1274,8 +1277,10 @@ static int __init vti6_tunnel_init(void) return 0; rtnl_link_failed: + err = xfrm6_tunnel_deregister(&vti_ipv6_handler, AF_INET); +vti_tunnel_ip6ip_failed: err = xfrm6_tunnel_deregister(&vti_ipv6_handler, AF_INET6); -vti_tunnel_failed: +vti_tunnel_ipv6_failed: xfrm6_protocol_deregister(&vti_ipcomp6_protocol, IPPROTO_COMP); xfrm_proto_comp_failed: xfrm6_protocol_deregister(&vti_ah6_protocol, IPPROTO_AH); @@ -1294,6 +1299,7 @@ static int __init vti6_tunnel_init(void) static void __exit vti6_tunnel_cleanup(void) { rtnl_link_unregister(&vti6_link_ops); + xfrm6_tunnel_deregister(&vti_ipv6_handler, AF_INET); xfrm6_tunnel_deregister(&vti_ipv6_handler, AF_INET6); xfrm6_protocol_deregister(&vti_ipcomp6_protocol, IPPROTO_COMP); xfrm6_protocol_deregister(&vti_ah6_protocol, IPPROTO_AH); From patchwork Tue Jun 16 17:36:34 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xin Long X-Patchwork-Id: 217696 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.6 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, SIGNED_OFF_BY, SPF_HELO_NONE, SPF_PASS, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0C278C433DF for ; Tue, 16 Jun 2020 17:38:03 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id DC8E7214DB for ; Tue, 16 Jun 2020 17:38:02 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="a7txWt3X" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731328AbgFPRiC (ORCPT ); Tue, 16 Jun 2020 13:38:02 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35474 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728561AbgFPRiA (ORCPT ); Tue, 16 Jun 2020 13:38:00 -0400 Received: from mail-pj1-x1043.google.com (mail-pj1-x1043.google.com [IPv6:2607:f8b0:4864:20::1043]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6D765C061573 for ; Tue, 16 Jun 2020 10:38:00 -0700 (PDT) Received: by mail-pj1-x1043.google.com with SMTP id jz3so1752744pjb.0 for ; Tue, 16 Jun 2020 10:38:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=fFbwu3WnOzX8ze6qDG9nzUYaHNDx6hz0Hk1ubojYqiE=; b=a7txWt3X+Dhrk5wOoM8Ei2dAVUkL/kW0HR4/p4Pok+K02osqyZzWIwj1HmY06pVjd5 GObhIVDhYH0mWTMCfRbaJazYybZgMvgoTlMctFdAaz+ZFdTc1pvRNF7p6buGYAcCLOkj 5xh8YyNvp5V9Er8yH6cMIquy/pQ1kbiP7rB3gn3GIPMIL/JQ9Qoz6ENyh2p4wmlesaxo vltczcydUPriuA/rf7D+GUMwuXuPqZlHMDiPZjaE2u528acDgXayNNtmqrWRKBS3/3Bf xNvSzoPMQbG9cr6Y7Jflcq4P/FwFTEa69klsHMlRdt28ud2v5kcxXVUSvTwNNoga4Aun XQ5g== 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:in-reply-to:references; bh=fFbwu3WnOzX8ze6qDG9nzUYaHNDx6hz0Hk1ubojYqiE=; b=CKyvAoH+UogMXnMActXxTNvsRQvlzDG2MZ4tULKWsNMdwhWlMG8jRyrbrFZ0iJNAUN sCxdvDVmAOxFVkERywVzeCEgF2PTfVeYGEovNkMkbUabC0VI2gRCtWEehlsQuriabfoB ssICfUrSigxtNkFQnOFeZxee16y4uy5w3BGNbCGGp5spwaoybLIAncea0QZa18JPiqjU 4ccfPRnsrUzpqJ2z7h2J7xAVGLbl1C3RqM/Ssj/M1Sude9ZZuXaDWF0H7czGuv8o9qeV UhwVxqknPIn44g/5NEaAyVHrbh+cCp3T6AQl+YKwnTaqfK/U4vXfCOM2yAu3Y92a60eM BYWw== X-Gm-Message-State: AOAM53100Og3lAQGHsGKn6xENG4+na2Q3nGYltRjc3kEv7nrOM5XbZlo NVBo6NfQrn8/rgC+0xnKb5WB0ICCitk= X-Google-Smtp-Source: ABdhPJwNmTWFfbSNtU622euLEdPvtKMjhcUdgcr6Rn58q9OavcYZF9V1hVZEXU6LSe/5kY7KyBHkDA== X-Received: by 2002:a17:902:d902:: with SMTP id c2mr3199019plz.194.1592329079583; Tue, 16 Jun 2020 10:37:59 -0700 (PDT) Received: from localhost ([209.132.188.80]) by smtp.gmail.com with ESMTPSA id a3sm17608683pfi.77.2020.06.16.10.37.58 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 16 Jun 2020 10:37:59 -0700 (PDT) From: Xin Long To: netdev@vger.kernel.org Cc: Steffen Klassert , Herbert Xu , "David S. Miller" , Sabrina Dubroca Subject: [PATCH ipsec-next 09/10] xfrm: interface: support IP6IP6 and IP6IP tunnels processing with .cb_handler Date: Wed, 17 Jun 2020 01:36:34 +0800 Message-Id: <4fce36d122e92ab4165d5b7a380c231e9abda598.1592328814.git.lucien.xin@gmail.com> X-Mailer: git-send-email 2.1.0 In-Reply-To: <8edff44e79a29474a82406d2f2f395c1229f0993.1592328814.git.lucien.xin@gmail.com> References: <84bcb772ea1b68f3b150106b9db1825b65742cef.1592328814.git.lucien.xin@gmail.com> <5a63a0c47cc71476786873cbd32db8db3c0f7d1e.1592328814.git.lucien.xin@gmail.com> <4ad2ff7658148645d2e1947d659d11061013c336.1592328814.git.lucien.xin@gmail.com> <870c43283bd6bd6c3b583c05ebc757879676edcd.1592328814.git.lucien.xin@gmail.com> <8edff44e79a29474a82406d2f2f395c1229f0993.1592328814.git.lucien.xin@gmail.com> In-Reply-To: References: Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Similar to ip6_vti, IP6IP6 and IP6IP tunnels processing can easily be done with .cb_handler for xfrm interface. Signed-off-by: Xin Long --- net/xfrm/xfrm_interface.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/net/xfrm/xfrm_interface.c b/net/xfrm/xfrm_interface.c index c407ecb..7be4d0d 100644 --- a/net/xfrm/xfrm_interface.c +++ b/net/xfrm/xfrm_interface.c @@ -798,6 +798,24 @@ static struct xfrm6_protocol xfrmi_ipcomp6_protocol __read_mostly = { .priority = 10, }; +static int xfrmi6_rcv_tunnel(struct sk_buff *skb) +{ + const xfrm_address_t *saddr; + __be32 spi; + + saddr = (const xfrm_address_t *)&ipv6_hdr(skb)->saddr; + spi = xfrm6_tunnel_spi_lookup(dev_net(skb->dev), saddr); + + return xfrm6_rcv_spi(skb, IPPROTO_IPV6, spi, NULL); +} + +static struct xfrm6_tunnel xfrmi_ipv6_handler __read_mostly = { + .handler = xfrmi6_rcv_tunnel, + .cb_handler = xfrmi_rcv_cb, + .err_handler = xfrmi6_err, + .priority = -1, +}; + static struct xfrm4_protocol xfrmi_esp4_protocol __read_mostly = { .handler = xfrm4_rcv, .input_handler = xfrm_input, @@ -866,9 +884,19 @@ static int __init xfrmi6_init(void) err = xfrm6_protocol_register(&xfrmi_ipcomp6_protocol, IPPROTO_COMP); if (err < 0) goto xfrm_proto_comp_failed; + err = xfrm6_tunnel_register(&xfrmi_ipv6_handler, AF_INET6); + if (err < 0) + goto xfrm_tunnel_ipv6_failed; + err = xfrm6_tunnel_register(&xfrmi_ipv6_handler, AF_INET); + if (err < 0) + goto xfrm_tunnel_ip6ip_failed; return 0; +xfrm_tunnel_ip6ip_failed: + xfrm6_tunnel_deregister(&xfrmi_ipv6_handler, AF_INET6); +xfrm_tunnel_ipv6_failed: + xfrm6_protocol_deregister(&xfrmi_ipcomp6_protocol, IPPROTO_COMP); xfrm_proto_comp_failed: xfrm6_protocol_deregister(&xfrmi_ah6_protocol, IPPROTO_AH); xfrm_proto_ah_failed: @@ -879,6 +907,8 @@ static int __init xfrmi6_init(void) static void xfrmi6_fini(void) { + xfrm6_tunnel_deregister(&xfrmi_ipv6_handler, AF_INET); + xfrm6_tunnel_deregister(&xfrmi_ipv6_handler, AF_INET6); xfrm6_protocol_deregister(&xfrmi_ipcomp6_protocol, IPPROTO_COMP); xfrm6_protocol_deregister(&xfrmi_ah6_protocol, IPPROTO_AH); xfrm6_protocol_deregister(&xfrmi_esp6_protocol, IPPROTO_ESP);