#include <linux/module.h>
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/skbuff.h>
#include <linux/rtnetlink.h>
#include <net/geneve.h>
#include <net/vxlan.h>
#include <net/erspan.h>
#include <net/netlink.h>
#include <net/pkt_sched.h>
#include <net/dst.h>
#include <net/pkt_cls.h>
#include <net/tc_wrapper.h>
#include <linux/tc_act/tc_tunnel_key.h>
#include <net/tc_act/tc_tunnel_key.h>
static struct tc_action_ops act_tunnel_key_ops;
TC_INDIRECT_SCOPE int tunnel_key_act(struct sk_buff *skb,
const struct tc_action *a,
struct tcf_result *res)
{ … }
static const struct nla_policy
enc_opts_policy[TCA_TUNNEL_KEY_ENC_OPTS_MAX + 1] = …;
static const struct nla_policy
geneve_opt_policy[TCA_TUNNEL_KEY_ENC_OPT_GENEVE_MAX + 1] = …;
static const struct nla_policy
vxlan_opt_policy[TCA_TUNNEL_KEY_ENC_OPT_VXLAN_MAX + 1] = …;
static const struct nla_policy
erspan_opt_policy[TCA_TUNNEL_KEY_ENC_OPT_ERSPAN_MAX + 1] = …;
static int
tunnel_key_copy_geneve_opt(const struct nlattr *nla, void *dst, int dst_len,
struct netlink_ext_ack *extack)
{ … }
static int
tunnel_key_copy_vxlan_opt(const struct nlattr *nla, void *dst, int dst_len,
struct netlink_ext_ack *extack)
{ … }
static int
tunnel_key_copy_erspan_opt(const struct nlattr *nla, void *dst, int dst_len,
struct netlink_ext_ack *extack)
{ … }
static int tunnel_key_copy_opts(const struct nlattr *nla, u8 *dst,
int dst_len, struct netlink_ext_ack *extack)
{ … }
static int tunnel_key_get_opts_len(struct nlattr *nla,
struct netlink_ext_ack *extack)
{ … }
static int tunnel_key_opts_set(struct nlattr *nla, struct ip_tunnel_info *info,
int opts_len, struct netlink_ext_ack *extack)
{ … }
static const struct nla_policy tunnel_key_policy[TCA_TUNNEL_KEY_MAX + 1] = …;
static void tunnel_key_release_params(struct tcf_tunnel_key_params *p)
{ … }
static int tunnel_key_init(struct net *net, struct nlattr *nla,
struct nlattr *est, struct tc_action **a,
struct tcf_proto *tp, u32 act_flags,
struct netlink_ext_ack *extack)
{ … }
static void tunnel_key_release(struct tc_action *a)
{ … }
static int tunnel_key_geneve_opts_dump(struct sk_buff *skb,
const struct ip_tunnel_info *info)
{ … }
static int tunnel_key_vxlan_opts_dump(struct sk_buff *skb,
const struct ip_tunnel_info *info)
{ … }
static int tunnel_key_erspan_opts_dump(struct sk_buff *skb,
const struct ip_tunnel_info *info)
{ … }
static int tunnel_key_opts_dump(struct sk_buff *skb,
const struct ip_tunnel_info *info)
{ … }
static int tunnel_key_dump_addresses(struct sk_buff *skb,
const struct ip_tunnel_info *info)
{ … }
static int tunnel_key_dump(struct sk_buff *skb, struct tc_action *a,
int bind, int ref)
{ … }
static void tcf_tunnel_encap_put_tunnel(void *priv)
{ … }
static int tcf_tunnel_encap_get_tunnel(struct flow_action_entry *entry,
const struct tc_action *act)
{ … }
static int tcf_tunnel_key_offload_act_setup(struct tc_action *act,
void *entry_data,
u32 *index_inc,
bool bind,
struct netlink_ext_ack *extack)
{ … }
static struct tc_action_ops act_tunnel_key_ops = …;
MODULE_ALIAS_NET_ACT(…) …;
static __net_init int tunnel_key_init_net(struct net *net)
{ … }
static void __net_exit tunnel_key_exit_net(struct list_head *net_list)
{ … }
static struct pernet_operations tunnel_key_net_ops = …;
static int __init tunnel_key_init_module(void)
{ … }
static void __exit tunnel_key_cleanup_module(void)
{ … }
module_init(…) …;
module_exit(tunnel_key_cleanup_module);
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;