#include <linux/etherdevice.h>
#include <linux/if_ether.h>
#include <linux/if_vlan.h>
+#include <linux/static_key.h>
#include <net/ip.h>
#include <net/icmp.h>
.get_encap_size = ip_tun_encap_nlsize,
};
-static int __init ip_tunnel_core_init(void)
+void __init ip_tunnel_core_init(void)
{
lwtunnel_encap_add_ops(&ip_tun_lwt_ops, LWTUNNEL_ENCAP_IP);
+}
- return 0;
+struct static_key ip_tunnel_metadata_cnt = STATIC_KEY_INIT_FALSE;
+EXPORT_SYMBOL(ip_tunnel_metadata_cnt);
+
+void ip_tunnel_need_metadata(void)
+{
+ static_key_slow_inc(&ip_tunnel_metadata_cnt);
}
-module_init(ip_tunnel_core_init);
+EXPORT_SYMBOL_GPL(ip_tunnel_need_metadata);
-static void __exit ip_tunnel_core_exit(void)
+void ip_tunnel_unneed_metadata(void)
{
- lwtunnel_encap_del_ops(&ip_tun_lwt_ops, LWTUNNEL_ENCAP_IP);
+ static_key_slow_dec(&ip_tunnel_metadata_cnt);
}
-module_exit(ip_tunnel_core_exit);
+EXPORT_SYMBOL_GPL(ip_tunnel_unneed_metadata);