xfrm: expose local_rxpmtu via ipv6_stubs
authorFlorian Westphal <fw@strlen.de>
Mon, 4 May 2020 08:06:06 +0000 (10:06 +0200)
committerSteffen Klassert <steffen.klassert@secunet.com>
Wed, 6 May 2020 07:40:08 +0000 (09:40 +0200)
We cannot call this function from the core kernel unless we would force
CONFIG_IPV6=y.

Therefore expose this via ipv6_stubs so we can call it from net/xfrm
in the followup patch.

Since the call is expected to be unlikely, no extra code for the IPV6=y
case is added and we will always eat the indirection cost.

Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
include/net/ipv6_stubs.h
include/net/xfrm.h
net/ipv6/af_inet6.c
net/ipv6/xfrm6_output.c

index 1e9e0cf..d8ab387 100644 (file)
@@ -57,6 +57,7 @@ struct ipv6_stub {
                              const struct in6_addr *solicited_addr,
                              bool router, bool solicited, bool override, bool inc_opt);
 #if IS_ENABLED(CONFIG_XFRM)
+       void (*xfrm6_local_rxpmtu)(struct sk_buff *skb, u32 mtu);
        int (*xfrm6_udp_encap_rcv)(struct sock *sk, struct sk_buff *skb);
        int (*xfrm6_rcv_encap)(struct sk_buff *skb, int nexthdr, __be32 spi,
                               int encap_type);
index 8b95652..10295ab 100644 (file)
@@ -1608,6 +1608,7 @@ int xfrm6_find_1stfragopt(struct xfrm_state *x, struct sk_buff *skb,
                          u8 **prevhdr);
 
 #ifdef CONFIG_XFRM
+void xfrm6_local_rxpmtu(struct sk_buff *skb, u32 mtu);
 int xfrm4_udp_encap_rcv(struct sock *sk, struct sk_buff *skb);
 int xfrm6_udp_encap_rcv(struct sock *sk, struct sk_buff *skb);
 int xfrm_user_policy(struct sock *sk, int optname,
index cbbb00b..aa48829 100644 (file)
@@ -963,6 +963,7 @@ static const struct ipv6_stub ipv6_stub_impl = {
        .udpv6_encap_enable = udpv6_encap_enable,
        .ndisc_send_na = ndisc_send_na,
 #if IS_ENABLED(CONFIG_XFRM)
+       .xfrm6_local_rxpmtu = xfrm6_local_rxpmtu,
        .xfrm6_udp_encap_rcv = xfrm6_udp_encap_rcv,
        .xfrm6_rcv_encap = xfrm6_rcv_encap,
 #endif
index 855078a..23e2b52 100644 (file)
@@ -40,7 +40,7 @@ static int xfrm6_local_dontfrag(struct sk_buff *skb)
        return 0;
 }
 
-static void xfrm6_local_rxpmtu(struct sk_buff *skb, u32 mtu)
+void xfrm6_local_rxpmtu(struct sk_buff *skb, u32 mtu)
 {
        struct flowi6 fl6;
        struct sock *sk = skb->sk;