Tue, Mar 01, 2016 at 03:24:49PM CET, [email protected] wrote:
>Parse tc_cls_flower_offload into device specific commands and program
>the hardware to classify and act accordingly.
>
>For example, to drop ICMP (ip_proto 1) packets from specific smac, dmac,
>src_ip, src_ip, arriving to interface ens9:
>
> # tc qdisc add dev ens9 ingress
>
> # tc filter add dev ens9 protocol ip parent ffff: \
> flower ip_proto 1 \
> dst_mac 7c:fe:90:69:81:62 src_mac 7c:fe:90:69:81:56 \
> dst_ip 11.11.11.11 src_ip 11.11.11.12 indev ens9 \
> action drop
>
<snip>
>+static int parse_tc_actions(struct mlx5e_priv *priv, struct tcf_exts *exts,
>+ u32 *action, u32 *flow_tag)
>+{
>+#ifdef CONFIG_NET_CLS_ACT
>+ const struct tc_action *a;
>+
>+ *flow_tag = MLX5_FS_DEFAULT_FLOW_TAG;
>+ *action = 0;
>+
>+ if (list_empty(&exts->actions))
>+ return -EINVAL;
>+
>+ list_for_each_entry(a, &exts->actions, list) {
I think it would make sense to make this a macro "tc_for_each_action"
and "tc_no_action" for empty list and you can loose ugly
CONFIG_NET_CLS_ACT ifdef