diff options
| author | David S. Miller <davem@davemloft.net> | 2016-07-25 09:12:00 +0300 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2016-07-25 09:12:00 +0300 |
| commit | bc0c419e0b4398424ccc9a92e2db6960413d1559 (patch) | |
| tree | 37141c0835336fa9894b2a0ab30bde01b4088a69 /include | |
| parent | bfe9b9d2df669a57a95d641ed46eb018e204c6ce (diff) | |
| parent | 763b4b70afcd3289fedfba6fb681e192a2291a95 (diff) | |
| download | linux-bc0c419e0b4398424ccc9a92e2db6960413d1559.tar.xz | |
Merge branch 'mlxsw-port-mirroring'
Jiri Pirko says:
====================
mlxsw: implement port mirroring offload
This patchset introduces tc matchall classifier and its offload
to Spectrum hardware. In combination with mirred action, defined port mirroring
setup is offloaded by mlxsw/spectrum driver.
The commands used for creating mirror ports:
tc qdisc add dev eth25 handle ffff: ingress
tc filter add dev eth25 parent ffff: \
matchall skip_sw \
action mirred egress mirror \
dev eth27
tc qdisc add dev eth25 handle 1: root prio
tc filter add dev eth25 parent 1: \
matchall skip_sw \
action mirred egress mirror \
dev eth27
These patches contain:
- Resource query implementation
- Hardware port mirorring support for spectrum.
- Definition of the matchall traffic classifier.
- General support for hw-offloading for that classifier.
- Specific spectrum implementaion for matchall offloading.
====================
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include')
| -rw-r--r-- | include/linux/netdevice.h | 2 | ||||
| -rw-r--r-- | include/net/pkt_cls.h | 11 | ||||
| -rw-r--r-- | include/net/tc_act/tc_mirred.h | 9 | ||||
| -rw-r--r-- | include/uapi/linux/pkt_cls.h | 12 |
4 files changed, 34 insertions, 0 deletions
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index 43c749b1b619..076df5360ba5 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h @@ -787,6 +787,7 @@ enum { TC_SETUP_MQPRIO, TC_SETUP_CLSU32, TC_SETUP_CLSFLOWER, + TC_SETUP_MATCHALL, }; struct tc_cls_u32_offload; @@ -797,6 +798,7 @@ struct tc_to_netdev { u8 tc; struct tc_cls_u32_offload *cls_u32; struct tc_cls_flower_offload *cls_flower; + struct tc_cls_matchall_offload *cls_mall; }; }; diff --git a/include/net/pkt_cls.h b/include/net/pkt_cls.h index 3722dda0199d..6f8d65342d3a 100644 --- a/include/net/pkt_cls.h +++ b/include/net/pkt_cls.h @@ -442,4 +442,15 @@ struct tc_cls_flower_offload { struct tcf_exts *exts; }; +enum tc_matchall_command { + TC_CLSMATCHALL_REPLACE, + TC_CLSMATCHALL_DESTROY, +}; + +struct tc_cls_matchall_offload { + enum tc_matchall_command command; + struct tcf_exts *exts; + unsigned long cookie; +}; + #endif diff --git a/include/net/tc_act/tc_mirred.h b/include/net/tc_act/tc_mirred.h index e891835eb74e..6a13a7c74e0c 100644 --- a/include/net/tc_act/tc_mirred.h +++ b/include/net/tc_act/tc_mirred.h @@ -24,6 +24,15 @@ static inline bool is_tcf_mirred_redirect(const struct tc_action *a) return false; } +static inline bool is_tcf_mirred_mirror(const struct tc_action *a) +{ +#ifdef CONFIG_NET_CLS_ACT + if (a->ops && a->ops->type == TCA_ACT_MIRRED) + return to_mirred(a)->tcfm_eaction == TCA_EGRESS_MIRROR; +#endif + return false; +} + static inline int tcf_mirred_ifindex(const struct tc_action *a) { return to_mirred(a)->tcfm_ifindex; diff --git a/include/uapi/linux/pkt_cls.h b/include/uapi/linux/pkt_cls.h index 5702e933dc07..d1c1ccaba787 100644 --- a/include/uapi/linux/pkt_cls.h +++ b/include/uapi/linux/pkt_cls.h @@ -433,6 +433,18 @@ enum { #define TCA_FLOWER_MAX (__TCA_FLOWER_MAX - 1) +/* Match-all classifier */ + +enum { + TCA_MATCHALL_UNSPEC, + TCA_MATCHALL_CLASSID, + TCA_MATCHALL_ACT, + TCA_MATCHALL_FLAGS, + __TCA_MATCHALL_MAX, +}; + +#define TCA_MATCHALL_MAX (__TCA_MATCHALL_MAX - 1) + /* Extended Matches */ struct tcf_ematch_tree_hdr { |
