netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCHv2 ipsec-next 00/10] xfrm: support ipip and ipv6 tunnels in vti and xfrmi
@ 2020-06-30  7:36 Xin Long
  2020-06-30  7:36 ` [PATCHv2 ipsec-next 01/10] xfrm: add is_ipip to struct xfrm_input_afinfo Xin Long
  0 siblings, 1 reply; 19+ messages in thread
From: Xin Long @ 2020-06-30  7:36 UTC (permalink / raw)
  To: netdev
  Cc: Jakub Kicinski, Steffen Klassert, Herbert Xu, David S. Miller,
	Sabrina Dubroca

Now ipip and ipv6 tunnels processing is supported by xfrm4/6_tunnel,
but not in vti and xfrmi. This feature is needed by processing those
uncompressed small fragments and packets when using comp protocol.
It means vti and xfrmi won't be able to accept small fragments or
packets when using comp protocol, which is not expected.

xfrm4/6_tunnel eventually calls xfrm_input() to process ipip and ipv6
tunnels with an ipip/ipv6-proto state (a child state of comp-proto
state), and vti and xfrmi should do the same.

The extra things for vti to do is:

  - vti_input() should be called before xfrm_input() to set
    XFRM_TUNNEL_SKB_CB(skb)->tunnel.ip4/6 = tunnel. [A]

  - vti_rcv_cb() should be called after xfrm_input() to update
    the skb->dev. [B]

And the extra things for xfrmi to do is:

   - The ipip/ipv6-proto state should be assigned if_id from its
     parent's state. [C]

   - xfrmi_rcv_cb() should be called after xfrm_input() to update
     the skb->dev. [D]


Patch 4-7 does the things in [A].

To implement [B] and [D], patch 1-3 is to build a callback function
for xfrm4/6_tunnel, which can be called after xfrm_input(), similar
to xfrm4/6_protocol's .cb_handler. vti and xfrmi only needs to give
their own callback function in patch 4-7 and 9-10, which already
exists: vti_rcv_cb() and xfrmi_rcv_cb().

Patch 8 is to do the thing in [C] by assigning child tunnel's if_id
from its parent tunnel.

With the whole patch series, the segments or packets with any size
can work with ipsec comp proto on vti and xfrmi.

v1->v2:
  - See Patch 2-3.

Xin Long (10):
  xfrm: add is_ipip to struct xfrm_input_afinfo
  tunnel4: add cb_handler to struct xfrm_tunnel
  tunnel6: add tunnel6_input_afinfo for ipip and ipv6 tunnels
  ip_vti: support IPIP tunnel processing with .cb_handler
  ip_vti: support IPIP6 tunnel processing
  ip6_vti: support IP6IP6 tunnel processing with .cb_handler
  ip6_vti: support IP6IP tunnel processing
  ipcomp: assign if_id to child tunnel from parent tunnel
  xfrm: interface: support IP6IP6 and IP6IP tunnels processing with
    .cb_handler
  xfrm: interface: support IPIP and IPIP6 tunnels processing with
    .cb_handler

 include/net/xfrm.h        |  5 ++++-
 net/ipv4/ip_vti.c         | 49 +++++++++++++++++++-----------------------
 net/ipv4/ipcomp.c         |  1 +
 net/ipv4/tunnel4.c        | 35 +++++++++++++++++++++++++++++-
 net/ipv6/ip6_vti.c        | 31 +++++++++++++++++++++++++++
 net/ipv6/ipcomp6.c        |  1 +
 net/ipv6/tunnel6.c        | 34 +++++++++++++++++++++++++++++
 net/xfrm/xfrm_input.c     | 24 +++++++++++----------
 net/xfrm/xfrm_interface.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++
 9 files changed, 194 insertions(+), 40 deletions(-)

-- 
2.1.0


^ permalink raw reply	[flat|nested] 19+ messages in thread

* [PATCHv2 ipsec-next 01/10] xfrm: add is_ipip to struct xfrm_input_afinfo
  2020-06-30  7:36 [PATCHv2 ipsec-next 00/10] xfrm: support ipip and ipv6 tunnels in vti and xfrmi Xin Long
@ 2020-06-30  7:36 ` Xin Long
  2020-06-30  7:36   ` [PATCHv2 ipsec-next 02/10] tunnel4: add cb_handler to struct xfrm_tunnel Xin Long
  0 siblings, 1 reply; 19+ messages in thread
From: Xin Long @ 2020-06-30  7:36 UTC (permalink / raw)
  To: netdev
  Cc: Jakub Kicinski, Steffen Klassert, Herbert Xu, David S. Miller,
	Sabrina Dubroca

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 <lucien.xin@gmail.com>
---
 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 e20b2b2..4666bc9 100644
--- a/include/net/xfrm.h
+++ b/include/net/xfrm.h
@@ -373,7 +373,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;
 
-- 
2.1.0


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCHv2 ipsec-next 02/10] tunnel4: add cb_handler to struct xfrm_tunnel
  2020-06-30  7:36 ` [PATCHv2 ipsec-next 01/10] xfrm: add is_ipip to struct xfrm_input_afinfo Xin Long
@ 2020-06-30  7:36   ` Xin Long
  2020-06-30  7:36     ` [PATCHv2 ipsec-next 03/10] tunnel6: add tunnel6_input_afinfo for ipip and ipv6 tunnels Xin Long
                       ` (2 more replies)
  0 siblings, 3 replies; 19+ messages in thread
From: Xin Long @ 2020-06-30  7:36 UTC (permalink / raw)
  To: netdev
  Cc: Jakub Kicinski, Steffen Klassert, Herbert Xu, David S. Miller,
	Sabrina Dubroca

This patch is to register a callback function tunnel4_rcv_cb with
is_ipip set in a xfrm_input_afinfo object for tunnel4 and tunnel64.

It will be called by xfrm_rcv_cb() from xfrm_input() when family
is AF_INET and proto is IPPROTO_IPIP or IPPROTO_IPV6.

v1->v2:
  - Fix a sparse warning caused by the missing "__rcu", as Jakub
    noticed.
  - Handle the err returned by xfrm_input_register_afinfo() in
    tunnel4_init/fini(), as Sabrina noticed.

Signed-off-by: Xin Long <lucien.xin@gmail.com>
---
 include/net/xfrm.h |  1 +
 net/ipv4/tunnel4.c | 35 ++++++++++++++++++++++++++++++++++-
 2 files changed, 35 insertions(+), 1 deletion(-)

diff --git a/include/net/xfrm.h b/include/net/xfrm.h
index 4666bc9..c1ec629 100644
--- a/include/net/xfrm.h
+++ b/include/net/xfrm.h
@@ -1416,6 +1416,7 @@ struct xfrm6_protocol {
 /* XFRM tunnel handlers.  */
 struct xfrm_tunnel {
 	int (*handler)(struct sk_buff *skb);
+	int (*cb_handler)(struct sk_buff *skb, int err);
 	int (*err_handler)(struct sk_buff *skb, u32 info);
 
 	struct xfrm_tunnel __rcu *next;
diff --git a/net/ipv4/tunnel4.c b/net/ipv4/tunnel4.c
index c4b2ccb..5d98f49 100644
--- a/net/ipv4/tunnel4.c
+++ b/net/ipv4/tunnel4.c
@@ -110,6 +110,31 @@ static int tunnel4_rcv(struct sk_buff *skb)
 	return 0;
 }
 
+static int tunnel4_rcv_cb(struct sk_buff *skb, u8 proto, int err)
+{
+	struct xfrm_tunnel __rcu *head;
+	struct xfrm_tunnel *handler;
+	int ret;
+
+	head = (proto == IPPROTO_IPIP) ? tunnel4_handlers : tunnel64_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 tunnel4_input_afinfo = {
+	.family		=	AF_INET,
+	.is_ipip	=	true,
+	.callback	=	tunnel4_rcv_cb,
+};
+
 #if IS_ENABLED(CONFIG_IPV6)
 static int tunnel64_rcv(struct sk_buff *skb)
 {
@@ -214,16 +239,22 @@ static const struct net_protocol tunnelmpls4_protocol = {
 
 static int __init tunnel4_init(void)
 {
-	if (inet_add_protocol(&tunnel4_protocol, IPPROTO_IPIP))
+	if (xfrm_input_register_afinfo(&tunnel4_input_afinfo))
+		goto err;
+	if (inet_add_protocol(&tunnel4_protocol, IPPROTO_IPIP)) {
+		xfrm_input_unregister_afinfo(&tunnel4_input_afinfo);
 		goto err;
+	}
 #if IS_ENABLED(CONFIG_IPV6)
 	if (inet_add_protocol(&tunnel64_protocol, IPPROTO_IPV6)) {
+		xfrm_input_unregister_afinfo(&tunnel4_input_afinfo);
 		inet_del_protocol(&tunnel4_protocol, IPPROTO_IPIP);
 		goto err;
 	}
 #endif
 #if IS_ENABLED(CONFIG_MPLS)
 	if (inet_add_protocol(&tunnelmpls4_protocol, IPPROTO_MPLS)) {
+		xfrm_input_unregister_afinfo(&tunnel4_input_afinfo);
 		inet_del_protocol(&tunnel4_protocol, IPPROTO_IPIP);
 #if IS_ENABLED(CONFIG_IPV6)
 		inet_del_protocol(&tunnel64_protocol, IPPROTO_IPV6);
@@ -250,6 +281,8 @@ static void __exit tunnel4_fini(void)
 #endif
 	if (inet_del_protocol(&tunnel4_protocol, IPPROTO_IPIP))
 		pr_err("tunnel4 close: can't remove protocol\n");
+	if (xfrm_input_unregister_afinfo(&tunnel4_input_afinfo))
+		pr_err("tunnel4 close: can't remove input afinfo\n");
 }
 
 module_init(tunnel4_init);
-- 
2.1.0


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCHv2 ipsec-next 03/10] tunnel6: add tunnel6_input_afinfo for ipip and ipv6 tunnels
  2020-06-30  7:36   ` [PATCHv2 ipsec-next 02/10] tunnel4: add cb_handler to struct xfrm_tunnel Xin Long
@ 2020-06-30  7:36     ` Xin Long
  2020-06-30  7:36       ` [PATCHv2 ipsec-next 04/10] ip_vti: support IPIP tunnel processing with .cb_handler Xin Long
  2020-07-02 20:46     ` [PATCHv2 ipsec-next 02/10] tunnel4: add cb_handler to struct xfrm_tunnel kernel test robot
  2020-07-02 20:53     ` kernel test robot
  2 siblings, 1 reply; 19+ messages in thread
From: Xin Long @ 2020-06-30  7:36 UTC (permalink / raw)
  To: netdev
  Cc: Jakub Kicinski, Steffen Klassert, Herbert Xu, David S. Miller,
	Sabrina Dubroca

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.

v1->v2:
  - Fix a sparse warning caused by the missing "__rcu", as Jakub
    noticed.
  - Handle the err returned by xfrm_input_register_afinfo() in
    tunnel6_init/fini(), as Sabrina noticed.

Signed-off-by: Xin Long <lucien.xin@gmail.com>
---
 include/net/xfrm.h |  1 +
 net/ipv6/tunnel6.c | 34 ++++++++++++++++++++++++++++++++++
 2 files changed, 35 insertions(+)

diff --git a/include/net/xfrm.h b/include/net/xfrm.h
index c1ec629..83a532d 100644
--- a/include/net/xfrm.h
+++ b/include/net/xfrm.h
@@ -1425,6 +1425,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..58348c9 100644
--- a/net/ipv6/tunnel6.c
+++ b/net/ipv6/tunnel6.c
@@ -155,6 +155,31 @@ 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 __rcu *head;
+	struct xfrm6_tunnel *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;
@@ -229,18 +254,25 @@ static const struct inet6_protocol tunnelmpls6_protocol = {
 
 static int __init tunnel6_init(void)
 {
+	if (xfrm_input_register_afinfo(&tunnel6_input_afinfo)) {
+		pr_err("%s: can't add input afinfo\n", __func__);
+		return -EAGAIN;
+	}
 	if (inet6_add_protocol(&tunnel6_protocol, IPPROTO_IPV6)) {
 		pr_err("%s: can't add protocol\n", __func__);
+		xfrm_input_unregister_afinfo(&tunnel6_input_afinfo);
 		return -EAGAIN;
 	}
 	if (inet6_add_protocol(&tunnel46_protocol, IPPROTO_IPIP)) {
 		pr_err("%s: can't add protocol\n", __func__);
+		xfrm_input_unregister_afinfo(&tunnel6_input_afinfo);
 		inet6_del_protocol(&tunnel6_protocol, IPPROTO_IPV6);
 		return -EAGAIN;
 	}
 	if (xfrm6_tunnel_mpls_supported() &&
 	    inet6_add_protocol(&tunnelmpls6_protocol, IPPROTO_MPLS)) {
 		pr_err("%s: can't add protocol\n", __func__);
+		xfrm_input_unregister_afinfo(&tunnel6_input_afinfo);
 		inet6_del_protocol(&tunnel6_protocol, IPPROTO_IPV6);
 		inet6_del_protocol(&tunnel46_protocol, IPPROTO_IPIP);
 		return -EAGAIN;
@@ -257,6 +289,8 @@ static void __exit tunnel6_fini(void)
 	if (xfrm6_tunnel_mpls_supported() &&
 	    inet6_del_protocol(&tunnelmpls6_protocol, IPPROTO_MPLS))
 		pr_err("%s: can't remove protocol\n", __func__);
+	if (xfrm_input_unregister_afinfo(&tunnel6_input_afinfo))
+		pr_err("%s: can't remove input afinfo\n", __func__);
 }
 
 module_init(tunnel6_init);
-- 
2.1.0


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCHv2 ipsec-next 04/10] ip_vti: support IPIP tunnel processing with .cb_handler
  2020-06-30  7:36     ` [PATCHv2 ipsec-next 03/10] tunnel6: add tunnel6_input_afinfo for ipip and ipv6 tunnels Xin Long
@ 2020-06-30  7:36       ` Xin Long
  2020-06-30  7:36         ` [PATCHv2 ipsec-next 05/10] ip_vti: support IPIP6 tunnel processing Xin Long
  0 siblings, 1 reply; 19+ messages in thread
From: Xin Long @ 2020-06-30  7:36 UTC (permalink / raw)
  To: netdev
  Cc: Jakub Kicinski, Steffen Klassert, Herbert Xu, David S. Miller,
	Sabrina Dubroca

With tunnel4_input_afinfo added, IPIP tunnel processing in
ip_vti can be easily done with .cb_handler. So replace the
processing by calling ip_tunnel_rcv() with it.

Signed-off-by: Xin Long <lucien.xin@gmail.com>
---
 net/ipv4/ip_vti.c | 33 ++++++++-------------------------
 1 file changed, 8 insertions(+), 25 deletions(-)

diff --git a/net/ipv4/ip_vti.c b/net/ipv4/ip_vti.c
index 1d9c8cf..fd762d9 100644
--- a/net/ipv4/ip_vti.c
+++ b/net/ipv4/ip_vti.c
@@ -93,28 +93,10 @@ static int vti_rcv_proto(struct sk_buff *skb)
 
 static int vti_rcv_tunnel(struct sk_buff *skb)
 {
-	struct ip_tunnel_net *itn = net_generic(dev_net(skb->dev), vti_net_id);
-	const struct iphdr *iph = ip_hdr(skb);
-	struct ip_tunnel *tunnel;
-
-	tunnel = ip_tunnel_lookup(itn, skb->dev->ifindex, TUNNEL_NO_KEY,
-				  iph->saddr, iph->daddr, 0);
-	if (tunnel) {
-		struct tnl_ptk_info tpi = {
-			.proto = htons(ETH_P_IP),
-		};
-
-		if (!xfrm4_policy_check(NULL, XFRM_POLICY_IN, skb))
-			goto drop;
-		if (iptunnel_pull_header(skb, 0, tpi.proto, false))
-			goto drop;
-		return ip_tunnel_rcv(tunnel, skb, &tpi, NULL, false);
-	}
+	XFRM_SPI_SKB_CB(skb)->family = AF_INET;
+	XFRM_SPI_SKB_CB(skb)->daddroff = offsetof(struct iphdr, daddr);
 
-	return -EINVAL;
-drop:
-	kfree_skb(skb);
-	return 0;
+	return vti_input(skb, IPPROTO_IPIP, ip_hdr(skb)->saddr, 0, false);
 }
 
 static int vti_rcv_cb(struct sk_buff *skb, int err)
@@ -495,8 +477,9 @@ static struct xfrm4_protocol vti_ipcomp4_protocol __read_mostly = {
 	.priority	=	100,
 };
 
-static struct xfrm_tunnel ipip_handler __read_mostly = {
+static struct xfrm_tunnel vti_ipip_handler __read_mostly = {
 	.handler	=	vti_rcv_tunnel,
+	.cb_handler	=	vti_rcv_cb,
 	.err_handler	=	vti4_err,
 	.priority	=	0,
 };
@@ -670,7 +653,7 @@ static int __init vti_init(void)
 		goto xfrm_proto_comp_failed;
 
 	msg = "ipip tunnel";
-	err = xfrm4_tunnel_register(&ipip_handler, AF_INET);
+	err = xfrm4_tunnel_register(&vti_ipip_handler, AF_INET);
 	if (err < 0)
 		goto xfrm_tunnel_failed;
 
@@ -682,7 +665,7 @@ static int __init vti_init(void)
 	return err;
 
 rtnl_link_failed:
-	xfrm4_tunnel_deregister(&ipip_handler, AF_INET);
+	xfrm4_tunnel_deregister(&vti_ipip_handler, AF_INET);
 xfrm_tunnel_failed:
 	xfrm4_protocol_deregister(&vti_ipcomp4_protocol, IPPROTO_COMP);
 xfrm_proto_comp_failed:
@@ -699,7 +682,7 @@ static int __init vti_init(void)
 static void __exit vti_fini(void)
 {
 	rtnl_link_unregister(&vti_link_ops);
-	xfrm4_tunnel_deregister(&ipip_handler, AF_INET);
+	xfrm4_tunnel_deregister(&vti_ipip_handler, AF_INET);
 	xfrm4_protocol_deregister(&vti_ipcomp4_protocol, IPPROTO_COMP);
 	xfrm4_protocol_deregister(&vti_ah4_protocol, IPPROTO_AH);
 	xfrm4_protocol_deregister(&vti_esp4_protocol, IPPROTO_ESP);
-- 
2.1.0


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCHv2 ipsec-next 05/10] ip_vti: support IPIP6 tunnel processing
  2020-06-30  7:36       ` [PATCHv2 ipsec-next 04/10] ip_vti: support IPIP tunnel processing with .cb_handler Xin Long
@ 2020-06-30  7:36         ` Xin Long
  2020-06-30  7:36           ` [PATCHv2 ipsec-next 06/10] ip6_vti: support IP6IP6 tunnel processing with .cb_handler Xin Long
  0 siblings, 1 reply; 19+ messages in thread
From: Xin Long @ 2020-06-30  7:36 UTC (permalink / raw)
  To: netdev
  Cc: Jakub Kicinski, Steffen Klassert, Herbert Xu, David S. Miller,
	Sabrina Dubroca

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 <lucien.xin@gmail.com>
---
 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);
-- 
2.1.0


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCHv2 ipsec-next 06/10] ip6_vti: support IP6IP6 tunnel processing with .cb_handler
  2020-06-30  7:36         ` [PATCHv2 ipsec-next 05/10] ip_vti: support IPIP6 tunnel processing Xin Long
@ 2020-06-30  7:36           ` Xin Long
  2020-06-30  7:36             ` [PATCHv2 ipsec-next 07/10] ip6_vti: support IP6IP tunnel processing Xin Long
                               ` (2 more replies)
  0 siblings, 3 replies; 19+ messages in thread
From: Xin Long @ 2020-06-30  7:36 UTC (permalink / raw)
  To: netdev
  Cc: Jakub Kicinski, Steffen Klassert, Herbert Xu, David S. Miller,
	Sabrina Dubroca

Similar to IPIP tunnel's processing, this patch is to support
IP6IP6 tunnel processing with .cb_handler.

Signed-off-by: Xin Long <lucien.xin@gmail.com>
---
 net/ipv6/ip6_vti.c | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/net/ipv6/ip6_vti.c b/net/ipv6/ip6_vti.c
index 1147f64..2161648 100644
--- a/net/ipv6/ip6_vti.c
+++ b/net/ipv6/ip6_vti.c
@@ -343,6 +343,17 @@ static int vti6_rcv(struct sk_buff *skb)
 	return vti6_input_proto(skb, nexthdr, 0, 0);
 }
 
+static int vti6_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 vti6_input_proto(skb, IPPROTO_IPV6, spi, 0);
+}
+
 static int vti6_rcv_cb(struct sk_buff *skb, int err)
 {
 	unsigned short family;
@@ -1218,6 +1229,13 @@ static struct xfrm6_protocol vti_ipcomp6_protocol __read_mostly = {
 	.priority	=	100,
 };
 
+static struct xfrm6_tunnel vti_ipv6_handler __read_mostly = {
+	.handler	=	vti6_rcv_tunnel,
+	.cb_handler	=	vti6_rcv_cb,
+	.err_handler	=	vti6_err,
+	.priority	=	0,
+};
+
 /**
  * vti6_tunnel_init - register protocol and reserve needed resources
  *
@@ -1243,6 +1261,10 @@ static int __init vti6_tunnel_init(void)
 	err = xfrm6_protocol_register(&vti_ipcomp6_protocol, IPPROTO_COMP);
 	if (err < 0)
 		goto xfrm_proto_comp_failed;
+	msg = "ipv6 tunnel";
+	err = xfrm6_tunnel_register(&vti_ipv6_handler, AF_INET6);
+	if (err < 0)
+		goto vti_tunnel_failed;
 
 	msg = "netlink interface";
 	err = rtnl_link_register(&vti6_link_ops);
@@ -1252,6 +1274,8 @@ static int __init vti6_tunnel_init(void)
 	return 0;
 
 rtnl_link_failed:
+	err = xfrm6_tunnel_deregister(&vti_ipv6_handler, AF_INET6);
+vti_tunnel_failed:
 	xfrm6_protocol_deregister(&vti_ipcomp6_protocol, IPPROTO_COMP);
 xfrm_proto_comp_failed:
 	xfrm6_protocol_deregister(&vti_ah6_protocol, IPPROTO_AH);
@@ -1270,6 +1294,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_INET6);
 	xfrm6_protocol_deregister(&vti_ipcomp6_protocol, IPPROTO_COMP);
 	xfrm6_protocol_deregister(&vti_ah6_protocol, IPPROTO_AH);
 	xfrm6_protocol_deregister(&vti_esp6_protocol, IPPROTO_ESP);
-- 
2.1.0


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCHv2 ipsec-next 07/10] ip6_vti: support IP6IP tunnel processing
  2020-06-30  7:36           ` [PATCHv2 ipsec-next 06/10] ip6_vti: support IP6IP6 tunnel processing with .cb_handler Xin Long
@ 2020-06-30  7:36             ` Xin Long
  2020-06-30  7:36               ` [PATCHv2 ipsec-next 08/10] ipcomp: assign if_id to child tunnel from parent tunnel Xin Long
  2020-07-02 22:20             ` [PATCHv2 ipsec-next 06/10] ip6_vti: support IP6IP6 tunnel " kernel test robot
  2020-07-02 23:33             ` kernel test robot
  2 siblings, 1 reply; 19+ messages in thread
From: Xin Long @ 2020-06-30  7:36 UTC (permalink / raw)
  To: netdev
  Cc: Jakub Kicinski, Steffen Klassert, Herbert Xu, David S. Miller,
	Sabrina Dubroca

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 <lucien.xin@gmail.com>
---
 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);
-- 
2.1.0


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCHv2 ipsec-next 08/10] ipcomp: assign if_id to child tunnel from parent tunnel
  2020-06-30  7:36             ` [PATCHv2 ipsec-next 07/10] ip6_vti: support IP6IP tunnel processing Xin Long
@ 2020-06-30  7:36               ` Xin Long
  2020-06-30  7:36                 ` [PATCHv2 ipsec-next 09/10] xfrm: interface: support IP6IP6 and IP6IP tunnels processing with .cb_handler Xin Long
  0 siblings, 1 reply; 19+ messages in thread
From: Xin Long @ 2020-06-30  7:36 UTC (permalink / raw)
  To: netdev
  Cc: Jakub Kicinski, Steffen Klassert, Herbert Xu, David S. Miller,
	Sabrina Dubroca

The child tunnel if_id will be used for xfrm interface's lookup
when processing the IP(6)IP(6) packets in the next patches.

Signed-off-by: Xin Long <lucien.xin@gmail.com>
---
 net/ipv4/ipcomp.c  | 1 +
 net/ipv6/ipcomp6.c | 1 +
 2 files changed, 2 insertions(+)

diff --git a/net/ipv4/ipcomp.c b/net/ipv4/ipcomp.c
index 59bfa38..b426832 100644
--- a/net/ipv4/ipcomp.c
+++ b/net/ipv4/ipcomp.c
@@ -72,6 +72,7 @@ static struct xfrm_state *ipcomp_tunnel_create(struct xfrm_state *x)
 	t->props.flags = x->props.flags;
 	t->props.extra_flags = x->props.extra_flags;
 	memcpy(&t->mark, &x->mark, sizeof(t->mark));
+	t->if_id = x->if_id;
 
 	if (xfrm_init_state(t))
 		goto error;
diff --git a/net/ipv6/ipcomp6.c b/net/ipv6/ipcomp6.c
index 99668bf..daef890 100644
--- a/net/ipv6/ipcomp6.c
+++ b/net/ipv6/ipcomp6.c
@@ -91,6 +91,7 @@ static struct xfrm_state *ipcomp6_tunnel_create(struct xfrm_state *x)
 	t->props.mode = x->props.mode;
 	memcpy(t->props.saddr.a6, x->props.saddr.a6, sizeof(struct in6_addr));
 	memcpy(&t->mark, &x->mark, sizeof(t->mark));
+	t->if_id = x->if_id;
 
 	if (xfrm_init_state(t))
 		goto error;
-- 
2.1.0


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCHv2 ipsec-next 09/10] xfrm: interface: support IP6IP6 and IP6IP tunnels processing with .cb_handler
  2020-06-30  7:36               ` [PATCHv2 ipsec-next 08/10] ipcomp: assign if_id to child tunnel from parent tunnel Xin Long
@ 2020-06-30  7:36                 ` Xin Long
  2020-06-30  7:36                   ` [PATCHv2 ipsec-next 10/10] xfrm: interface: support IPIP and IPIP6 " Xin Long
  2020-07-02 23:54                   ` [PATCHv2 ipsec-next 09/10] xfrm: interface: support IP6IP6 and IP6IP " kernel test robot
  0 siblings, 2 replies; 19+ messages in thread
From: Xin Long @ 2020-06-30  7:36 UTC (permalink / raw)
  To: netdev
  Cc: Jakub Kicinski, Steffen Klassert, Herbert Xu, David S. Miller,
	Sabrina Dubroca

Similar to ip6_vti, IP6IP6 and IP6IP tunnels processing can easily
be done with .cb_handler for xfrm interface.

Signed-off-by: Xin Long <lucien.xin@gmail.com>
---
 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);
-- 
2.1.0


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCHv2 ipsec-next 10/10] xfrm: interface: support IPIP and IPIP6 tunnels processing with .cb_handler
  2020-06-30  7:36                 ` [PATCHv2 ipsec-next 09/10] xfrm: interface: support IP6IP6 and IP6IP tunnels processing with .cb_handler Xin Long
@ 2020-06-30  7:36                   ` Xin Long
  2020-07-02 23:54                   ` [PATCHv2 ipsec-next 09/10] xfrm: interface: support IP6IP6 and IP6IP " kernel test robot
  1 sibling, 0 replies; 19+ messages in thread
From: Xin Long @ 2020-06-30  7:36 UTC (permalink / raw)
  To: netdev
  Cc: Jakub Kicinski, Steffen Klassert, Herbert Xu, David S. Miller,
	Sabrina Dubroca

Similar to ip_vti, IPIP and IPIP6 tunnels processing can easily
be done with .cb_handler for xfrm interface.

Signed-off-by: Xin Long <lucien.xin@gmail.com>
---
 net/xfrm/xfrm_interface.c | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/net/xfrm/xfrm_interface.c b/net/xfrm/xfrm_interface.c
index 7be4d0d..0ddcd57 100644
--- a/net/xfrm/xfrm_interface.c
+++ b/net/xfrm/xfrm_interface.c
@@ -840,6 +840,18 @@ static struct xfrm4_protocol xfrmi_ipcomp4_protocol __read_mostly = {
 	.priority	=	10,
 };
 
+static int xfrmi4_rcv_tunnel(struct sk_buff *skb)
+{
+	return xfrm4_rcv_spi(skb, IPPROTO_IPIP, ip_hdr(skb)->saddr);
+}
+
+static struct xfrm_tunnel xfrmi_ipip_handler __read_mostly = {
+	.handler	=	xfrmi4_rcv_tunnel,
+	.cb_handler	=	xfrmi_rcv_cb,
+	.err_handler	=	xfrmi4_err,
+	.priority	=	-1,
+};
+
 static int __init xfrmi4_init(void)
 {
 	int err;
@@ -853,9 +865,19 @@ static int __init xfrmi4_init(void)
 	err = xfrm4_protocol_register(&xfrmi_ipcomp4_protocol, IPPROTO_COMP);
 	if (err < 0)
 		goto xfrm_proto_comp_failed;
+	err = xfrm4_tunnel_register(&xfrmi_ipip_handler, AF_INET);
+	if (err < 0)
+		goto xfrm_tunnel_ipip_failed;
+	err = xfrm4_tunnel_register(&xfrmi_ipip_handler, AF_INET6);
+	if (err < 0)
+		goto xfrm_tunnel_ipip6_failed;
 
 	return 0;
 
+xfrm_tunnel_ipip6_failed:
+	xfrm4_tunnel_deregister(&xfrmi_ipip_handler, AF_INET);
+xfrm_tunnel_ipip_failed:
+	xfrm4_protocol_deregister(&xfrmi_ipcomp4_protocol, IPPROTO_COMP);
 xfrm_proto_comp_failed:
 	xfrm4_protocol_deregister(&xfrmi_ah4_protocol, IPPROTO_AH);
 xfrm_proto_ah_failed:
@@ -866,6 +888,8 @@ static int __init xfrmi4_init(void)
 
 static void xfrmi4_fini(void)
 {
+	xfrm4_tunnel_deregister(&xfrmi_ipip_handler, AF_INET6);
+	xfrm4_tunnel_deregister(&xfrmi_ipip_handler, AF_INET);
 	xfrm4_protocol_deregister(&xfrmi_ipcomp4_protocol, IPPROTO_COMP);
 	xfrm4_protocol_deregister(&xfrmi_ah4_protocol, IPPROTO_AH);
 	xfrm4_protocol_deregister(&xfrmi_esp4_protocol, IPPROTO_ESP);
-- 
2.1.0


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* Re: [PATCHv2 ipsec-next 02/10] tunnel4: add cb_handler to struct xfrm_tunnel
  2020-06-30  7:36   ` [PATCHv2 ipsec-next 02/10] tunnel4: add cb_handler to struct xfrm_tunnel Xin Long
  2020-06-30  7:36     ` [PATCHv2 ipsec-next 03/10] tunnel6: add tunnel6_input_afinfo for ipip and ipv6 tunnels Xin Long
@ 2020-07-02 20:46     ` kernel test robot
  2020-07-02 20:53     ` kernel test robot
  2 siblings, 0 replies; 19+ messages in thread
From: kernel test robot @ 2020-07-02 20:46 UTC (permalink / raw)
  To: Xin Long, netdev
  Cc: kbuild-all, Jakub Kicinski, Steffen Klassert, Herbert Xu,
	Sabrina Dubroca

[-- Attachment #1: Type: text/plain, Size: 1569 bytes --]

Hi Xin,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on ipsec-next/master]

url:    https://github.com/0day-ci/linux/commits/Xin-Long/xfrm-support-ipip-and-ipv6-tunnels-in-vti-and-xfrmi/20200630-154042
base:   https://git.kernel.org/pub/scm/linux/kernel/git/klassert/ipsec-next.git master
config: csky-defconfig (attached as .config)
compiler: csky-linux-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=csky 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

   csky-linux-ld: net/ipv4/tunnel4.o: in function `tunnel4_init':
   tunnel4.c:(.init.text+0x4): undefined reference to `xfrm_input_register_afinfo'
>> csky-linux-ld: tunnel4.c:(.init.text+0x1a): undefined reference to `xfrm_input_unregister_afinfo'
   csky-linux-ld: tunnel4.c:(.init.text+0x2e): undefined reference to `xfrm_input_unregister_afinfo'
   csky-linux-ld: net/ipv4/tunnel4.o: in function `$d':
   tunnel4.c:(.init.text+0x4c): undefined reference to `xfrm_input_register_afinfo'
   csky-linux-ld: tunnel4.c:(.init.text+0x58): undefined reference to `xfrm_input_unregister_afinfo'

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 10047 bytes --]

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCHv2 ipsec-next 02/10] tunnel4: add cb_handler to struct xfrm_tunnel
  2020-06-30  7:36   ` [PATCHv2 ipsec-next 02/10] tunnel4: add cb_handler to struct xfrm_tunnel Xin Long
  2020-06-30  7:36     ` [PATCHv2 ipsec-next 03/10] tunnel6: add tunnel6_input_afinfo for ipip and ipv6 tunnels Xin Long
  2020-07-02 20:46     ` [PATCHv2 ipsec-next 02/10] tunnel4: add cb_handler to struct xfrm_tunnel kernel test robot
@ 2020-07-02 20:53     ` kernel test robot
  2020-07-05 18:30       ` Xin Long
  2 siblings, 1 reply; 19+ messages in thread
From: kernel test robot @ 2020-07-02 20:53 UTC (permalink / raw)
  To: Xin Long, netdev
  Cc: kbuild-all, Jakub Kicinski, Steffen Klassert, Herbert Xu,
	Sabrina Dubroca

[-- Attachment #1: Type: text/plain, Size: 1335 bytes --]

Hi Xin,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on ipsec-next/master]

url:    https://github.com/0day-ci/linux/commits/Xin-Long/xfrm-support-ipip-and-ipv6-tunnels-in-vti-and-xfrmi/20200630-154042
base:   https://git.kernel.org/pub/scm/linux/kernel/git/klassert/ipsec-next.git master
config: h8300-randconfig-r001-20200701 (attached as .config)
compiler: h8300-linux-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=h8300 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

   h8300-linux-ld: net/ipv4/tunnel4.o: in function `tunnel4_init':
   net/ipv4/tunnel4.c:242: undefined reference to `xfrm_input_register_afinfo'
>> h8300-linux-ld: net/ipv4/tunnel4.c:245: undefined reference to `xfrm_input_unregister_afinfo'
   h8300-linux-ld: net/ipv4/tunnel4.c:250: undefined reference to `xfrm_input_unregister_afinfo'

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 24270 bytes --]

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCHv2 ipsec-next 06/10] ip6_vti: support IP6IP6 tunnel processing with .cb_handler
  2020-06-30  7:36           ` [PATCHv2 ipsec-next 06/10] ip6_vti: support IP6IP6 tunnel processing with .cb_handler Xin Long
  2020-06-30  7:36             ` [PATCHv2 ipsec-next 07/10] ip6_vti: support IP6IP tunnel processing Xin Long
@ 2020-07-02 22:20             ` kernel test robot
  2020-07-02 23:33             ` kernel test robot
  2 siblings, 0 replies; 19+ messages in thread
From: kernel test robot @ 2020-07-02 22:20 UTC (permalink / raw)
  To: Xin Long, netdev
  Cc: kbuild-all, Jakub Kicinski, Steffen Klassert, Herbert Xu,
	Sabrina Dubroca

[-- Attachment #1: Type: text/plain, Size: 937 bytes --]

Hi Xin,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on ipsec-next/master]

url:    https://github.com/0day-ci/linux/commits/Xin-Long/xfrm-support-ipip-and-ipv6-tunnels-in-vti-and-xfrmi/20200630-154042
base:   https://git.kernel.org/pub/scm/linux/kernel/git/klassert/ipsec-next.git master
config: i386-randconfig-a006-20200701 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-14) 9.3.0
reproduce (this is a W=1 build):
        # save the attached .config to linux build tree
        make W=1 ARCH=i386 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

   ld: net/ipv6/ip6_vti.o: in function `vti6_rcv_tunnel':
>> ip6_vti.c:(.text+0x1220): undefined reference to `xfrm6_tunnel_spi_lookup'

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 36273 bytes --]

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCHv2 ipsec-next 06/10] ip6_vti: support IP6IP6 tunnel processing with .cb_handler
  2020-06-30  7:36           ` [PATCHv2 ipsec-next 06/10] ip6_vti: support IP6IP6 tunnel processing with .cb_handler Xin Long
  2020-06-30  7:36             ` [PATCHv2 ipsec-next 07/10] ip6_vti: support IP6IP tunnel processing Xin Long
  2020-07-02 22:20             ` [PATCHv2 ipsec-next 06/10] ip6_vti: support IP6IP6 tunnel " kernel test robot
@ 2020-07-02 23:33             ` kernel test robot
  2020-07-05 16:57               ` Xin Long
  2 siblings, 1 reply; 19+ messages in thread
From: kernel test robot @ 2020-07-02 23:33 UTC (permalink / raw)
  To: Xin Long, netdev
  Cc: kbuild-all, Jakub Kicinski, Steffen Klassert, Herbert Xu,
	Sabrina Dubroca

[-- Attachment #1: Type: text/plain, Size: 887 bytes --]

Hi Xin,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on ipsec-next/master]

url:    https://github.com/0day-ci/linux/commits/Xin-Long/xfrm-support-ipip-and-ipv6-tunnels-in-vti-and-xfrmi/20200630-154042
base:   https://git.kernel.org/pub/scm/linux/kernel/git/klassert/ipsec-next.git master
config: x86_64-lkp (attached as .config)
compiler: gcc-9 (Debian 9.3.0-14) 9.3.0
reproduce (this is a W=1 build):
        # save the attached .config to linux build tree
        make W=1 ARCH=x86_64 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All errors (new ones prefixed by >>, old ones prefixed by <<):

>> ERROR: modpost: "xfrm6_tunnel_spi_lookup" [net/ipv6/ip6_vti.ko] undefined!

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 28578 bytes --]

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCHv2 ipsec-next 09/10] xfrm: interface: support IP6IP6 and IP6IP tunnels processing with .cb_handler
  2020-06-30  7:36                 ` [PATCHv2 ipsec-next 09/10] xfrm: interface: support IP6IP6 and IP6IP tunnels processing with .cb_handler Xin Long
  2020-06-30  7:36                   ` [PATCHv2 ipsec-next 10/10] xfrm: interface: support IPIP and IPIP6 " Xin Long
@ 2020-07-02 23:54                   ` kernel test robot
  2020-07-05 16:57                     ` Xin Long
  1 sibling, 1 reply; 19+ messages in thread
From: kernel test robot @ 2020-07-02 23:54 UTC (permalink / raw)
  To: Xin Long, netdev
  Cc: kbuild-all, Jakub Kicinski, Steffen Klassert, Herbert Xu,
	Sabrina Dubroca

[-- Attachment #1: Type: text/plain, Size: 1350 bytes --]

Hi Xin,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on ipsec-next/master]

url:    https://github.com/0day-ci/linux/commits/Xin-Long/xfrm-support-ipip-and-ipv6-tunnels-in-vti-and-xfrmi/20200630-154042
base:   https://git.kernel.org/pub/scm/linux/kernel/git/klassert/ipsec-next.git master
config: x86_64-randconfig-a012-20200701 (attached as .config)
compiler: gcc-7 (Ubuntu 7.5.0-6ubuntu2) 7.5.0
reproduce (this is a W=1 build):
        # save the attached .config to linux build tree
        make W=1 ARCH=x86_64 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

   ld: net/xfrm/xfrm_interface.o: in function `xfrmi6_rcv_tunnel':
>> net/xfrm/xfrm_interface.c:807: undefined reference to `xfrm6_tunnel_spi_lookup'

vim +807 net/xfrm/xfrm_interface.c

   800	
   801	static int xfrmi6_rcv_tunnel(struct sk_buff *skb)
   802	{
   803		const xfrm_address_t *saddr;
   804		__be32 spi;
   805	
   806		saddr = (const xfrm_address_t *)&ipv6_hdr(skb)->saddr;
 > 807		spi = xfrm6_tunnel_spi_lookup(dev_net(skb->dev), saddr);
   808	
   809		return xfrm6_rcv_spi(skb, IPPROTO_IPV6, spi, NULL);
   810	}
   811	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 35197 bytes --]

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCHv2 ipsec-next 06/10] ip6_vti: support IP6IP6 tunnel processing with .cb_handler
  2020-07-02 23:33             ` kernel test robot
@ 2020-07-05 16:57               ` Xin Long
  0 siblings, 0 replies; 19+ messages in thread
From: Xin Long @ 2020-07-05 16:57 UTC (permalink / raw)
  To: kernel test robot
  Cc: network dev, kbuild-all, Jakub Kicinski, Steffen Klassert,
	Herbert Xu, Sabrina Dubroca

On Fri, Jul 3, 2020 at 7:33 AM kernel test robot <lkp@intel.com> wrote:
>
> Hi Xin,
>
> Thank you for the patch! Yet something to improve:
>
> [auto build test ERROR on ipsec-next/master]
>
> url:    https://github.com/0day-ci/linux/commits/Xin-Long/xfrm-support-ipip-and-ipv6-tunnels-in-vti-and-xfrmi/20200630-154042
> base:   https://git.kernel.org/pub/scm/linux/kernel/git/klassert/ipsec-next.git master
> config: x86_64-lkp (attached as .config)
> compiler: gcc-9 (Debian 9.3.0-14) 9.3.0
> reproduce (this is a W=1 build):
>         # save the attached .config to linux build tree
>         make W=1 ARCH=x86_64
>
> If you fix the issue, kindly add following tag as appropriate
> Reported-by: kernel test robot <lkp@intel.com>
>
> All errors (new ones prefixed by >>, old ones prefixed by <<):
>
> >> ERROR: modpost: "xfrm6_tunnel_spi_lookup" [net/ipv6/ip6_vti.ko] undefined!
That's right, I will add "#ifdef CONFIG_INET6_XFRM_TUNNEL" to fix this.
Actually, for ipv4 one, we also need "#ifdef CONFIG_INET_XFRM_TUNNEL".
It is because in vti(6) and xfrmi this feature is also for  IPComp(6),
 the same as xfrm(6)_tunnel in xfrm route.

Thanks for the report.

>
> ---
> 0-DAY CI Kernel Test Service, Intel Corporation
> https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCHv2 ipsec-next 09/10] xfrm: interface: support IP6IP6 and IP6IP tunnels processing with .cb_handler
  2020-07-02 23:54                   ` [PATCHv2 ipsec-next 09/10] xfrm: interface: support IP6IP6 and IP6IP " kernel test robot
@ 2020-07-05 16:57                     ` Xin Long
  0 siblings, 0 replies; 19+ messages in thread
From: Xin Long @ 2020-07-05 16:57 UTC (permalink / raw)
  To: kernel test robot
  Cc: network dev, kbuild-all, Jakub Kicinski, Steffen Klassert,
	Herbert Xu, Sabrina Dubroca

On Fri, Jul 3, 2020 at 7:55 AM kernel test robot <lkp@intel.com> wrote:
>
> Hi Xin,
>
> Thank you for the patch! Yet something to improve:
>
> [auto build test ERROR on ipsec-next/master]
>
> url:    https://github.com/0day-ci/linux/commits/Xin-Long/xfrm-support-ipip-and-ipv6-tunnels-in-vti-and-xfrmi/20200630-154042
> base:   https://git.kernel.org/pub/scm/linux/kernel/git/klassert/ipsec-next.git master
> config: x86_64-randconfig-a012-20200701 (attached as .config)
> compiler: gcc-7 (Ubuntu 7.5.0-6ubuntu2) 7.5.0
> reproduce (this is a W=1 build):
>         # save the attached .config to linux build tree
>         make W=1 ARCH=x86_64
>
> If you fix the issue, kindly add following tag as appropriate
> Reported-by: kernel test robot <lkp@intel.com>
>
> All errors (new ones prefixed by >>):
>
>    ld: net/xfrm/xfrm_interface.o: in function `xfrmi6_rcv_tunnel':
> >> net/xfrm/xfrm_interface.c:807: undefined reference to `xfrm6_tunnel_spi_lookup'
I will add  "#ifdef CONFIG_INET(6)_XFRM_TUNNEL" to fix it in v3.

Thanks.

>
> vim +807 net/xfrm/xfrm_interface.c
>
>    800
>    801  static int xfrmi6_rcv_tunnel(struct sk_buff *skb)
>    802  {
>    803          const xfrm_address_t *saddr;
>    804          __be32 spi;
>    805
>    806          saddr = (const xfrm_address_t *)&ipv6_hdr(skb)->saddr;
>  > 807          spi = xfrm6_tunnel_spi_lookup(dev_net(skb->dev), saddr);
>    808
>    809          return xfrm6_rcv_spi(skb, IPPROTO_IPV6, spi, NULL);
>    810  }
>    811
>
> ---
> 0-DAY CI Kernel Test Service, Intel Corporation
> https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCHv2 ipsec-next 02/10] tunnel4: add cb_handler to struct xfrm_tunnel
  2020-07-02 20:53     ` kernel test robot
@ 2020-07-05 18:30       ` Xin Long
  0 siblings, 0 replies; 19+ messages in thread
From: Xin Long @ 2020-07-05 18:30 UTC (permalink / raw)
  To: kernel test robot
  Cc: network dev, kbuild-all, Jakub Kicinski, Steffen Klassert,
	Herbert Xu, Sabrina Dubroca

On Fri, Jul 3, 2020 at 4:54 AM kernel test robot <lkp@intel.com> wrote:
>
> Hi Xin,
>
> Thank you for the patch! Yet something to improve:
>
> [auto build test ERROR on ipsec-next/master]
>
> url:    https://github.com/0day-ci/linux/commits/Xin-Long/xfrm-support-ipip-and-ipv6-tunnels-in-vti-and-xfrmi/20200630-154042
> base:   https://git.kernel.org/pub/scm/linux/kernel/git/klassert/ipsec-next.git master
> config: h8300-randconfig-r001-20200701 (attached as .config)
> compiler: h8300-linux-gcc (GCC) 9.3.0
> reproduce (this is a W=1 build):
>         wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
>         chmod +x ~/bin/make.cross
>         # save the attached .config to linux build tree
>         COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=h8300
>
> If you fix the issue, kindly add following tag as appropriate
> Reported-by: kernel test robot <lkp@intel.com>
>
> All errors (new ones prefixed by >>):
>
>    h8300-linux-ld: net/ipv4/tunnel4.o: in function `tunnel4_init':
>    net/ipv4/tunnel4.c:242: undefined reference to `xfrm_input_register_afinfo'
> >> h8300-linux-ld: net/ipv4/tunnel4.c:245: undefined reference to `xfrm_input_unregister_afinfo'
>    h8300-linux-ld: net/ipv4/tunnel4.c:250: undefined reference to `xfrm_input_unregister_afinfo'
I will add "#ifdef CONFIG_INET(6)_XFRM_TUNNEL" for this one too.

Thanks.
>
> ---
> 0-DAY CI Kernel Test Service, Intel Corporation
> https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

^ permalink raw reply	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2020-07-05 18:21 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-06-30  7:36 [PATCHv2 ipsec-next 00/10] xfrm: support ipip and ipv6 tunnels in vti and xfrmi Xin Long
2020-06-30  7:36 ` [PATCHv2 ipsec-next 01/10] xfrm: add is_ipip to struct xfrm_input_afinfo Xin Long
2020-06-30  7:36   ` [PATCHv2 ipsec-next 02/10] tunnel4: add cb_handler to struct xfrm_tunnel Xin Long
2020-06-30  7:36     ` [PATCHv2 ipsec-next 03/10] tunnel6: add tunnel6_input_afinfo for ipip and ipv6 tunnels Xin Long
2020-06-30  7:36       ` [PATCHv2 ipsec-next 04/10] ip_vti: support IPIP tunnel processing with .cb_handler Xin Long
2020-06-30  7:36         ` [PATCHv2 ipsec-next 05/10] ip_vti: support IPIP6 tunnel processing Xin Long
2020-06-30  7:36           ` [PATCHv2 ipsec-next 06/10] ip6_vti: support IP6IP6 tunnel processing with .cb_handler Xin Long
2020-06-30  7:36             ` [PATCHv2 ipsec-next 07/10] ip6_vti: support IP6IP tunnel processing Xin Long
2020-06-30  7:36               ` [PATCHv2 ipsec-next 08/10] ipcomp: assign if_id to child tunnel from parent tunnel Xin Long
2020-06-30  7:36                 ` [PATCHv2 ipsec-next 09/10] xfrm: interface: support IP6IP6 and IP6IP tunnels processing with .cb_handler Xin Long
2020-06-30  7:36                   ` [PATCHv2 ipsec-next 10/10] xfrm: interface: support IPIP and IPIP6 " Xin Long
2020-07-02 23:54                   ` [PATCHv2 ipsec-next 09/10] xfrm: interface: support IP6IP6 and IP6IP " kernel test robot
2020-07-05 16:57                     ` Xin Long
2020-07-02 22:20             ` [PATCHv2 ipsec-next 06/10] ip6_vti: support IP6IP6 tunnel " kernel test robot
2020-07-02 23:33             ` kernel test robot
2020-07-05 16:57               ` Xin Long
2020-07-02 20:46     ` [PATCHv2 ipsec-next 02/10] tunnel4: add cb_handler to struct xfrm_tunnel kernel test robot
2020-07-02 20:53     ` kernel test robot
2020-07-05 18:30       ` Xin Long

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).