mirror of
https://github.com/torvalds/linux
synced 2024-10-15 07:47:34 +00:00
net/sched: avoid indirect act functions on retpoline kernels
Expose the necessary tc act functions and wire up act_api to use direct calls in retpoline kernels. Signed-off-by: Pedro Tammela <pctammela@mojatatu.com> Reviewed-by: Jamal Hadi Salim <jhs@mojatatu.com> Reviewed-by: Victor Nogueira <victor@mojatatu.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
7f0e810220
commit
871cf386dd
|
@ -23,6 +23,7 @@
|
||||||
#include <net/act_api.h>
|
#include <net/act_api.h>
|
||||||
#include <net/netlink.h>
|
#include <net/netlink.h>
|
||||||
#include <net/flow_offload.h>
|
#include <net/flow_offload.h>
|
||||||
|
#include <net/tc_wrapper.h>
|
||||||
|
|
||||||
#ifdef CONFIG_INET
|
#ifdef CONFIG_INET
|
||||||
DEFINE_STATIC_KEY_FALSE(tcf_frag_xmit_count);
|
DEFINE_STATIC_KEY_FALSE(tcf_frag_xmit_count);
|
||||||
|
@ -1080,7 +1081,7 @@ int tcf_action_exec(struct sk_buff *skb, struct tc_action **actions,
|
||||||
|
|
||||||
repeat_ttl = 32;
|
repeat_ttl = 32;
|
||||||
repeat:
|
repeat:
|
||||||
ret = a->ops->act(skb, a, res);
|
ret = tc_act(skb, a, res);
|
||||||
if (unlikely(ret == TC_ACT_REPEAT)) {
|
if (unlikely(ret == TC_ACT_REPEAT)) {
|
||||||
if (--repeat_ttl != 0)
|
if (--repeat_ttl != 0)
|
||||||
goto repeat;
|
goto repeat;
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
|
|
||||||
#include <linux/tc_act/tc_bpf.h>
|
#include <linux/tc_act/tc_bpf.h>
|
||||||
#include <net/tc_act/tc_bpf.h>
|
#include <net/tc_act/tc_bpf.h>
|
||||||
|
#include <net/tc_wrapper.h>
|
||||||
|
|
||||||
#define ACT_BPF_NAME_LEN 256
|
#define ACT_BPF_NAME_LEN 256
|
||||||
|
|
||||||
|
@ -31,8 +32,9 @@ struct tcf_bpf_cfg {
|
||||||
|
|
||||||
static struct tc_action_ops act_bpf_ops;
|
static struct tc_action_ops act_bpf_ops;
|
||||||
|
|
||||||
static int tcf_bpf_act(struct sk_buff *skb, const struct tc_action *act,
|
TC_INDIRECT_SCOPE int tcf_bpf_act(struct sk_buff *skb,
|
||||||
struct tcf_result *res)
|
const struct tc_action *act,
|
||||||
|
struct tcf_result *res)
|
||||||
{
|
{
|
||||||
bool at_ingress = skb_at_tc_ingress(skb);
|
bool at_ingress = skb_at_tc_ingress(skb);
|
||||||
struct tcf_bpf *prog = to_bpf(act);
|
struct tcf_bpf *prog = to_bpf(act);
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
#include <net/pkt_cls.h>
|
#include <net/pkt_cls.h>
|
||||||
#include <uapi/linux/tc_act/tc_connmark.h>
|
#include <uapi/linux/tc_act/tc_connmark.h>
|
||||||
#include <net/tc_act/tc_connmark.h>
|
#include <net/tc_act/tc_connmark.h>
|
||||||
|
#include <net/tc_wrapper.h>
|
||||||
|
|
||||||
#include <net/netfilter/nf_conntrack.h>
|
#include <net/netfilter/nf_conntrack.h>
|
||||||
#include <net/netfilter/nf_conntrack_core.h>
|
#include <net/netfilter/nf_conntrack_core.h>
|
||||||
|
@ -27,8 +28,9 @@
|
||||||
|
|
||||||
static struct tc_action_ops act_connmark_ops;
|
static struct tc_action_ops act_connmark_ops;
|
||||||
|
|
||||||
static int tcf_connmark_act(struct sk_buff *skb, const struct tc_action *a,
|
TC_INDIRECT_SCOPE int tcf_connmark_act(struct sk_buff *skb,
|
||||||
struct tcf_result *res)
|
const struct tc_action *a,
|
||||||
|
struct tcf_result *res)
|
||||||
{
|
{
|
||||||
const struct nf_conntrack_tuple_hash *thash;
|
const struct nf_conntrack_tuple_hash *thash;
|
||||||
struct nf_conntrack_tuple tuple;
|
struct nf_conntrack_tuple tuple;
|
||||||
|
|
|
@ -32,6 +32,7 @@
|
||||||
|
|
||||||
#include <linux/tc_act/tc_csum.h>
|
#include <linux/tc_act/tc_csum.h>
|
||||||
#include <net/tc_act/tc_csum.h>
|
#include <net/tc_act/tc_csum.h>
|
||||||
|
#include <net/tc_wrapper.h>
|
||||||
|
|
||||||
static const struct nla_policy csum_policy[TCA_CSUM_MAX + 1] = {
|
static const struct nla_policy csum_policy[TCA_CSUM_MAX + 1] = {
|
||||||
[TCA_CSUM_PARMS] = { .len = sizeof(struct tc_csum), },
|
[TCA_CSUM_PARMS] = { .len = sizeof(struct tc_csum), },
|
||||||
|
@ -563,8 +564,9 @@ static int tcf_csum_ipv6(struct sk_buff *skb, u32 update_flags)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int tcf_csum_act(struct sk_buff *skb, const struct tc_action *a,
|
TC_INDIRECT_SCOPE int tcf_csum_act(struct sk_buff *skb,
|
||||||
struct tcf_result *res)
|
const struct tc_action *a,
|
||||||
|
struct tcf_result *res)
|
||||||
{
|
{
|
||||||
struct tcf_csum *p = to_tcf_csum(a);
|
struct tcf_csum *p = to_tcf_csum(a);
|
||||||
bool orig_vlan_tag_present = false;
|
bool orig_vlan_tag_present = false;
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
#include <net/ipv6_frag.h>
|
#include <net/ipv6_frag.h>
|
||||||
#include <uapi/linux/tc_act/tc_ct.h>
|
#include <uapi/linux/tc_act/tc_ct.h>
|
||||||
#include <net/tc_act/tc_ct.h>
|
#include <net/tc_act/tc_ct.h>
|
||||||
|
#include <net/tc_wrapper.h>
|
||||||
|
|
||||||
#include <net/netfilter/nf_flow_table.h>
|
#include <net/netfilter/nf_flow_table.h>
|
||||||
#include <net/netfilter/nf_conntrack.h>
|
#include <net/netfilter/nf_conntrack.h>
|
||||||
|
@ -1038,8 +1039,8 @@ static int tcf_ct_act_nat(struct sk_buff *skb,
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static int tcf_ct_act(struct sk_buff *skb, const struct tc_action *a,
|
TC_INDIRECT_SCOPE int tcf_ct_act(struct sk_buff *skb, const struct tc_action *a,
|
||||||
struct tcf_result *res)
|
struct tcf_result *res)
|
||||||
{
|
{
|
||||||
struct net *net = dev_net(skb->dev);
|
struct net *net = dev_net(skb->dev);
|
||||||
enum ip_conntrack_info ctinfo;
|
enum ip_conntrack_info ctinfo;
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
#include <net/pkt_cls.h>
|
#include <net/pkt_cls.h>
|
||||||
#include <uapi/linux/tc_act/tc_ctinfo.h>
|
#include <uapi/linux/tc_act/tc_ctinfo.h>
|
||||||
#include <net/tc_act/tc_ctinfo.h>
|
#include <net/tc_act/tc_ctinfo.h>
|
||||||
|
#include <net/tc_wrapper.h>
|
||||||
|
|
||||||
#include <net/netfilter/nf_conntrack.h>
|
#include <net/netfilter/nf_conntrack.h>
|
||||||
#include <net/netfilter/nf_conntrack_core.h>
|
#include <net/netfilter/nf_conntrack_core.h>
|
||||||
|
@ -75,8 +76,9 @@ static void tcf_ctinfo_cpmark_set(struct nf_conn *ct, struct tcf_ctinfo *ca,
|
||||||
skb->mark = READ_ONCE(ct->mark) & cp->cpmarkmask;
|
skb->mark = READ_ONCE(ct->mark) & cp->cpmarkmask;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int tcf_ctinfo_act(struct sk_buff *skb, const struct tc_action *a,
|
TC_INDIRECT_SCOPE int tcf_ctinfo_act(struct sk_buff *skb,
|
||||||
struct tcf_result *res)
|
const struct tc_action *a,
|
||||||
|
struct tcf_result *res)
|
||||||
{
|
{
|
||||||
const struct nf_conntrack_tuple_hash *thash = NULL;
|
const struct nf_conntrack_tuple_hash *thash = NULL;
|
||||||
struct tcf_ctinfo *ca = to_ctinfo(a);
|
struct tcf_ctinfo *ca = to_ctinfo(a);
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
#include <net/pkt_cls.h>
|
#include <net/pkt_cls.h>
|
||||||
#include <linux/tc_act/tc_gact.h>
|
#include <linux/tc_act/tc_gact.h>
|
||||||
#include <net/tc_act/tc_gact.h>
|
#include <net/tc_act/tc_gact.h>
|
||||||
|
#include <net/tc_wrapper.h>
|
||||||
|
|
||||||
static struct tc_action_ops act_gact_ops;
|
static struct tc_action_ops act_gact_ops;
|
||||||
|
|
||||||
|
@ -145,8 +146,9 @@ static int tcf_gact_init(struct net *net, struct nlattr *nla,
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int tcf_gact_act(struct sk_buff *skb, const struct tc_action *a,
|
TC_INDIRECT_SCOPE int tcf_gact_act(struct sk_buff *skb,
|
||||||
struct tcf_result *res)
|
const struct tc_action *a,
|
||||||
|
struct tcf_result *res)
|
||||||
{
|
{
|
||||||
struct tcf_gact *gact = to_gact(a);
|
struct tcf_gact *gact = to_gact(a);
|
||||||
int action = READ_ONCE(gact->tcf_action);
|
int action = READ_ONCE(gact->tcf_action);
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
#include <net/netlink.h>
|
#include <net/netlink.h>
|
||||||
#include <net/pkt_cls.h>
|
#include <net/pkt_cls.h>
|
||||||
#include <net/tc_act/tc_gate.h>
|
#include <net/tc_act/tc_gate.h>
|
||||||
|
#include <net/tc_wrapper.h>
|
||||||
|
|
||||||
static struct tc_action_ops act_gate_ops;
|
static struct tc_action_ops act_gate_ops;
|
||||||
|
|
||||||
|
@ -113,8 +114,9 @@ static enum hrtimer_restart gate_timer_func(struct hrtimer *timer)
|
||||||
return HRTIMER_RESTART;
|
return HRTIMER_RESTART;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int tcf_gate_act(struct sk_buff *skb, const struct tc_action *a,
|
TC_INDIRECT_SCOPE int tcf_gate_act(struct sk_buff *skb,
|
||||||
struct tcf_result *res)
|
const struct tc_action *a,
|
||||||
|
struct tcf_result *res)
|
||||||
{
|
{
|
||||||
struct tcf_gate *gact = to_gate(a);
|
struct tcf_gate *gact = to_gate(a);
|
||||||
|
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
#include <net/tc_act/tc_ife.h>
|
#include <net/tc_act/tc_ife.h>
|
||||||
#include <linux/etherdevice.h>
|
#include <linux/etherdevice.h>
|
||||||
#include <net/ife.h>
|
#include <net/ife.h>
|
||||||
|
#include <net/tc_wrapper.h>
|
||||||
|
|
||||||
static int max_metacnt = IFE_META_MAX + 1;
|
static int max_metacnt = IFE_META_MAX + 1;
|
||||||
static struct tc_action_ops act_ife_ops;
|
static struct tc_action_ops act_ife_ops;
|
||||||
|
@ -861,8 +862,9 @@ static int tcf_ife_encode(struct sk_buff *skb, const struct tc_action *a,
|
||||||
return action;
|
return action;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int tcf_ife_act(struct sk_buff *skb, const struct tc_action *a,
|
TC_INDIRECT_SCOPE int tcf_ife_act(struct sk_buff *skb,
|
||||||
struct tcf_result *res)
|
const struct tc_action *a,
|
||||||
|
struct tcf_result *res)
|
||||||
{
|
{
|
||||||
struct tcf_ife_info *ife = to_ife(a);
|
struct tcf_ife_info *ife = to_ife(a);
|
||||||
struct tcf_ife_params *p;
|
struct tcf_ife_params *p;
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
#include <net/pkt_sched.h>
|
#include <net/pkt_sched.h>
|
||||||
#include <linux/tc_act/tc_ipt.h>
|
#include <linux/tc_act/tc_ipt.h>
|
||||||
#include <net/tc_act/tc_ipt.h>
|
#include <net/tc_act/tc_ipt.h>
|
||||||
|
#include <net/tc_wrapper.h>
|
||||||
|
|
||||||
#include <linux/netfilter_ipv4/ip_tables.h>
|
#include <linux/netfilter_ipv4/ip_tables.h>
|
||||||
|
|
||||||
|
@ -216,8 +217,9 @@ static int tcf_xt_init(struct net *net, struct nlattr *nla,
|
||||||
a, &act_xt_ops, tp, flags);
|
a, &act_xt_ops, tp, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int tcf_ipt_act(struct sk_buff *skb, const struct tc_action *a,
|
TC_INDIRECT_SCOPE int tcf_ipt_act(struct sk_buff *skb,
|
||||||
struct tcf_result *res)
|
const struct tc_action *a,
|
||||||
|
struct tcf_result *res)
|
||||||
{
|
{
|
||||||
int ret = 0, result = 0;
|
int ret = 0, result = 0;
|
||||||
struct tcf_ipt *ipt = to_ipt(a);
|
struct tcf_ipt *ipt = to_ipt(a);
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
#include <net/pkt_cls.h>
|
#include <net/pkt_cls.h>
|
||||||
#include <linux/tc_act/tc_mirred.h>
|
#include <linux/tc_act/tc_mirred.h>
|
||||||
#include <net/tc_act/tc_mirred.h>
|
#include <net/tc_act/tc_mirred.h>
|
||||||
|
#include <net/tc_wrapper.h>
|
||||||
|
|
||||||
static LIST_HEAD(mirred_list);
|
static LIST_HEAD(mirred_list);
|
||||||
static DEFINE_SPINLOCK(mirred_list_lock);
|
static DEFINE_SPINLOCK(mirred_list_lock);
|
||||||
|
@ -217,8 +218,9 @@ static int tcf_mirred_forward(bool want_ingress, struct sk_buff *skb)
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int tcf_mirred_act(struct sk_buff *skb, const struct tc_action *a,
|
TC_INDIRECT_SCOPE int tcf_mirred_act(struct sk_buff *skb,
|
||||||
struct tcf_result *res)
|
const struct tc_action *a,
|
||||||
|
struct tcf_result *res)
|
||||||
{
|
{
|
||||||
struct tcf_mirred *m = to_mirred(a);
|
struct tcf_mirred *m = to_mirred(a);
|
||||||
struct sk_buff *skb2 = skb;
|
struct sk_buff *skb2 = skb;
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
#include <net/pkt_sched.h>
|
#include <net/pkt_sched.h>
|
||||||
#include <net/pkt_cls.h>
|
#include <net/pkt_cls.h>
|
||||||
#include <net/tc_act/tc_mpls.h>
|
#include <net/tc_act/tc_mpls.h>
|
||||||
|
#include <net/tc_wrapper.h>
|
||||||
|
|
||||||
static struct tc_action_ops act_mpls_ops;
|
static struct tc_action_ops act_mpls_ops;
|
||||||
|
|
||||||
|
@ -49,8 +50,9 @@ static __be32 tcf_mpls_get_lse(struct mpls_shim_hdr *lse,
|
||||||
return cpu_to_be32(new_lse);
|
return cpu_to_be32(new_lse);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int tcf_mpls_act(struct sk_buff *skb, const struct tc_action *a,
|
TC_INDIRECT_SCOPE int tcf_mpls_act(struct sk_buff *skb,
|
||||||
struct tcf_result *res)
|
const struct tc_action *a,
|
||||||
|
struct tcf_result *res)
|
||||||
{
|
{
|
||||||
struct tcf_mpls *m = to_mpls(a);
|
struct tcf_mpls *m = to_mpls(a);
|
||||||
struct tcf_mpls_params *p;
|
struct tcf_mpls_params *p;
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
#include <net/tc_act/tc_nat.h>
|
#include <net/tc_act/tc_nat.h>
|
||||||
#include <net/tcp.h>
|
#include <net/tcp.h>
|
||||||
#include <net/udp.h>
|
#include <net/udp.h>
|
||||||
|
#include <net/tc_wrapper.h>
|
||||||
|
|
||||||
static struct tc_action_ops act_nat_ops;
|
static struct tc_action_ops act_nat_ops;
|
||||||
|
|
||||||
|
@ -98,8 +98,9 @@ static int tcf_nat_init(struct net *net, struct nlattr *nla, struct nlattr *est,
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int tcf_nat_act(struct sk_buff *skb, const struct tc_action *a,
|
TC_INDIRECT_SCOPE int tcf_nat_act(struct sk_buff *skb,
|
||||||
struct tcf_result *res)
|
const struct tc_action *a,
|
||||||
|
struct tcf_result *res)
|
||||||
{
|
{
|
||||||
struct tcf_nat *p = to_tcf_nat(a);
|
struct tcf_nat *p = to_tcf_nat(a);
|
||||||
struct iphdr *iph;
|
struct iphdr *iph;
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
#include <net/tc_act/tc_pedit.h>
|
#include <net/tc_act/tc_pedit.h>
|
||||||
#include <uapi/linux/tc_act/tc_pedit.h>
|
#include <uapi/linux/tc_act/tc_pedit.h>
|
||||||
#include <net/pkt_cls.h>
|
#include <net/pkt_cls.h>
|
||||||
|
#include <net/tc_wrapper.h>
|
||||||
|
|
||||||
static struct tc_action_ops act_pedit_ops;
|
static struct tc_action_ops act_pedit_ops;
|
||||||
|
|
||||||
|
@ -319,8 +320,9 @@ static int pedit_skb_hdr_offset(struct sk_buff *skb,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int tcf_pedit_act(struct sk_buff *skb, const struct tc_action *a,
|
TC_INDIRECT_SCOPE int tcf_pedit_act(struct sk_buff *skb,
|
||||||
struct tcf_result *res)
|
const struct tc_action *a,
|
||||||
|
struct tcf_result *res)
|
||||||
{
|
{
|
||||||
struct tcf_pedit *p = to_pedit(a);
|
struct tcf_pedit *p = to_pedit(a);
|
||||||
u32 max_offset;
|
u32 max_offset;
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
#include <net/netlink.h>
|
#include <net/netlink.h>
|
||||||
#include <net/pkt_cls.h>
|
#include <net/pkt_cls.h>
|
||||||
#include <net/tc_act/tc_police.h>
|
#include <net/tc_act/tc_police.h>
|
||||||
|
#include <net/tc_wrapper.h>
|
||||||
|
|
||||||
/* Each policer is serialized by its individual spinlock */
|
/* Each policer is serialized by its individual spinlock */
|
||||||
|
|
||||||
|
@ -242,8 +243,9 @@ static bool tcf_police_mtu_check(struct sk_buff *skb, u32 limit)
|
||||||
return len <= limit;
|
return len <= limit;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int tcf_police_act(struct sk_buff *skb, const struct tc_action *a,
|
TC_INDIRECT_SCOPE int tcf_police_act(struct sk_buff *skb,
|
||||||
struct tcf_result *res)
|
const struct tc_action *a,
|
||||||
|
struct tcf_result *res)
|
||||||
{
|
{
|
||||||
struct tcf_police *police = to_police(a);
|
struct tcf_police *police = to_police(a);
|
||||||
s64 now, toks, ppstoks = 0, ptoks = 0;
|
s64 now, toks, ppstoks = 0, ptoks = 0;
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
#include <net/tc_act/tc_sample.h>
|
#include <net/tc_act/tc_sample.h>
|
||||||
#include <net/psample.h>
|
#include <net/psample.h>
|
||||||
#include <net/pkt_cls.h>
|
#include <net/pkt_cls.h>
|
||||||
|
#include <net/tc_wrapper.h>
|
||||||
|
|
||||||
#include <linux/if_arp.h>
|
#include <linux/if_arp.h>
|
||||||
|
|
||||||
|
@ -153,8 +154,9 @@ static bool tcf_sample_dev_ok_push(struct net_device *dev)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int tcf_sample_act(struct sk_buff *skb, const struct tc_action *a,
|
TC_INDIRECT_SCOPE int tcf_sample_act(struct sk_buff *skb,
|
||||||
struct tcf_result *res)
|
const struct tc_action *a,
|
||||||
|
struct tcf_result *res)
|
||||||
{
|
{
|
||||||
struct tcf_sample *s = to_sample(a);
|
struct tcf_sample *s = to_sample(a);
|
||||||
struct psample_group *psample_group;
|
struct psample_group *psample_group;
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
#include <net/netlink.h>
|
#include <net/netlink.h>
|
||||||
#include <net/pkt_sched.h>
|
#include <net/pkt_sched.h>
|
||||||
#include <net/pkt_cls.h>
|
#include <net/pkt_cls.h>
|
||||||
|
#include <net/tc_wrapper.h>
|
||||||
|
|
||||||
#include <linux/tc_act/tc_defact.h>
|
#include <linux/tc_act/tc_defact.h>
|
||||||
#include <net/tc_act/tc_defact.h>
|
#include <net/tc_act/tc_defact.h>
|
||||||
|
@ -21,8 +22,9 @@
|
||||||
static struct tc_action_ops act_simp_ops;
|
static struct tc_action_ops act_simp_ops;
|
||||||
|
|
||||||
#define SIMP_MAX_DATA 32
|
#define SIMP_MAX_DATA 32
|
||||||
static int tcf_simp_act(struct sk_buff *skb, const struct tc_action *a,
|
TC_INDIRECT_SCOPE int tcf_simp_act(struct sk_buff *skb,
|
||||||
struct tcf_result *res)
|
const struct tc_action *a,
|
||||||
|
struct tcf_result *res)
|
||||||
{
|
{
|
||||||
struct tcf_defact *d = to_defact(a);
|
struct tcf_defact *d = to_defact(a);
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
#include <net/ipv6.h>
|
#include <net/ipv6.h>
|
||||||
#include <net/dsfield.h>
|
#include <net/dsfield.h>
|
||||||
#include <net/pkt_cls.h>
|
#include <net/pkt_cls.h>
|
||||||
|
#include <net/tc_wrapper.h>
|
||||||
|
|
||||||
#include <linux/tc_act/tc_skbedit.h>
|
#include <linux/tc_act/tc_skbedit.h>
|
||||||
#include <net/tc_act/tc_skbedit.h>
|
#include <net/tc_act/tc_skbedit.h>
|
||||||
|
@ -36,8 +37,9 @@ static u16 tcf_skbedit_hash(struct tcf_skbedit_params *params,
|
||||||
return netdev_cap_txqueue(skb->dev, queue_mapping);
|
return netdev_cap_txqueue(skb->dev, queue_mapping);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int tcf_skbedit_act(struct sk_buff *skb, const struct tc_action *a,
|
TC_INDIRECT_SCOPE int tcf_skbedit_act(struct sk_buff *skb,
|
||||||
struct tcf_result *res)
|
const struct tc_action *a,
|
||||||
|
struct tcf_result *res)
|
||||||
{
|
{
|
||||||
struct tcf_skbedit *d = to_skbedit(a);
|
struct tcf_skbedit *d = to_skbedit(a);
|
||||||
struct tcf_skbedit_params *params;
|
struct tcf_skbedit_params *params;
|
||||||
|
|
|
@ -15,14 +15,16 @@
|
||||||
#include <net/netlink.h>
|
#include <net/netlink.h>
|
||||||
#include <net/pkt_sched.h>
|
#include <net/pkt_sched.h>
|
||||||
#include <net/pkt_cls.h>
|
#include <net/pkt_cls.h>
|
||||||
|
#include <net/tc_wrapper.h>
|
||||||
|
|
||||||
#include <linux/tc_act/tc_skbmod.h>
|
#include <linux/tc_act/tc_skbmod.h>
|
||||||
#include <net/tc_act/tc_skbmod.h>
|
#include <net/tc_act/tc_skbmod.h>
|
||||||
|
|
||||||
static struct tc_action_ops act_skbmod_ops;
|
static struct tc_action_ops act_skbmod_ops;
|
||||||
|
|
||||||
static int tcf_skbmod_act(struct sk_buff *skb, const struct tc_action *a,
|
TC_INDIRECT_SCOPE int tcf_skbmod_act(struct sk_buff *skb,
|
||||||
struct tcf_result *res)
|
const struct tc_action *a,
|
||||||
|
struct tcf_result *res)
|
||||||
{
|
{
|
||||||
struct tcf_skbmod *d = to_skbmod(a);
|
struct tcf_skbmod *d = to_skbmod(a);
|
||||||
int action, max_edit_len, err;
|
int action, max_edit_len, err;
|
||||||
|
|
|
@ -16,14 +16,16 @@
|
||||||
#include <net/pkt_sched.h>
|
#include <net/pkt_sched.h>
|
||||||
#include <net/dst.h>
|
#include <net/dst.h>
|
||||||
#include <net/pkt_cls.h>
|
#include <net/pkt_cls.h>
|
||||||
|
#include <net/tc_wrapper.h>
|
||||||
|
|
||||||
#include <linux/tc_act/tc_tunnel_key.h>
|
#include <linux/tc_act/tc_tunnel_key.h>
|
||||||
#include <net/tc_act/tc_tunnel_key.h>
|
#include <net/tc_act/tc_tunnel_key.h>
|
||||||
|
|
||||||
static struct tc_action_ops act_tunnel_key_ops;
|
static struct tc_action_ops act_tunnel_key_ops;
|
||||||
|
|
||||||
static int tunnel_key_act(struct sk_buff *skb, const struct tc_action *a,
|
TC_INDIRECT_SCOPE int tunnel_key_act(struct sk_buff *skb,
|
||||||
struct tcf_result *res)
|
const struct tc_action *a,
|
||||||
|
struct tcf_result *res)
|
||||||
{
|
{
|
||||||
struct tcf_tunnel_key *t = to_tunnel_key(a);
|
struct tcf_tunnel_key *t = to_tunnel_key(a);
|
||||||
struct tcf_tunnel_key_params *params;
|
struct tcf_tunnel_key_params *params;
|
||||||
|
|
|
@ -12,14 +12,16 @@
|
||||||
#include <net/netlink.h>
|
#include <net/netlink.h>
|
||||||
#include <net/pkt_sched.h>
|
#include <net/pkt_sched.h>
|
||||||
#include <net/pkt_cls.h>
|
#include <net/pkt_cls.h>
|
||||||
|
#include <net/tc_wrapper.h>
|
||||||
|
|
||||||
#include <linux/tc_act/tc_vlan.h>
|
#include <linux/tc_act/tc_vlan.h>
|
||||||
#include <net/tc_act/tc_vlan.h>
|
#include <net/tc_act/tc_vlan.h>
|
||||||
|
|
||||||
static struct tc_action_ops act_vlan_ops;
|
static struct tc_action_ops act_vlan_ops;
|
||||||
|
|
||||||
static int tcf_vlan_act(struct sk_buff *skb, const struct tc_action *a,
|
TC_INDIRECT_SCOPE int tcf_vlan_act(struct sk_buff *skb,
|
||||||
struct tcf_result *res)
|
const struct tc_action *a,
|
||||||
|
struct tcf_result *res)
|
||||||
{
|
{
|
||||||
struct tcf_vlan *v = to_vlan(a);
|
struct tcf_vlan *v = to_vlan(a);
|
||||||
struct tcf_vlan_params *p;
|
struct tcf_vlan_params *p;
|
||||||
|
|
Loading…
Reference in a new issue