Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d0b3fbb2 authored by David S. Miller's avatar David S. Miller
Browse files

Merge branch 'ingress-actions'



Shmulik Ladkani says:

====================
act_mirred: Ingress actions support

This patch series implements action mirred 'ingress' actions
TCA_INGRESS_REDIR and TCA_INGRESS_MIRROR.

This allows attaching filters whose target is to hand matching skbs into
the rx processing of a specified device.

v4:
  in 4/4, check ret code of netif_receive_skb, as suggested by Cong Wang
v3:
  in 4/4, addressed non coherency due to reading m->tcfm_eaction multiple
  times, as spotted by Eric Dumazet
v2:
  in 1/4, declare tcfm_mac_header_xmit as bool instead of int
====================

Acked-by: default avatarCong Wang <xiyou.wangcong@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 4f58e6dc 53592b36
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -113,7 +113,7 @@ static int fill_action_fields(struct adapter *adap,
		}

		/* Re-direct to specified port in hardware. */
		if (is_tcf_mirred_redirect(a)) {
		if (is_tcf_mirred_egress_redirect(a)) {
			struct net_device *n_dev;
			unsigned int i, index;
			bool found = false;
+1 −1
Original line number Diff line number Diff line
@@ -8410,7 +8410,7 @@ static int parse_tc_actions(struct ixgbe_adapter *adapter,
		}

		/* Redirect to a VF or a offloaded macvlan */
		if (is_tcf_mirred_redirect(a)) {
		if (is_tcf_mirred_egress_redirect(a)) {
			int ifindex = tcf_mirred_ifindex(a);

			err = handle_redirect_action(adapter, ifindex, queue,
+1 −1
Original line number Diff line number Diff line
@@ -404,7 +404,7 @@ static int parse_tc_fdb_actions(struct mlx5e_priv *priv, struct tcf_exts *exts,
			continue;
		}

		if (is_tcf_mirred_redirect(a)) {
		if (is_tcf_mirred_egress_redirect(a)) {
			int ifindex = tcf_mirred_ifindex(a);
			struct net_device *out_dev;
			struct mlx5e_priv *out_priv;
+3 −1
Original line number Diff line number Diff line
@@ -1237,8 +1237,10 @@ static int mlxsw_sp_port_add_cls_matchall(struct mlxsw_sp_port *mlxsw_sp_port,

	tcf_exts_to_list(cls->exts, &actions);
	list_for_each_entry(a, &actions, list) {
		if (!is_tcf_mirred_mirror(a) || protocol != htons(ETH_P_ALL))
		if (!is_tcf_mirred_egress_mirror(a) ||
		    protocol != htons(ETH_P_ALL)) {
			return -ENOTSUPP;
		}

		err = mlxsw_sp_port_add_cls_matchall_mirror(mlxsw_sp_port, cls,
							    a, ingress);
+1 −1
Original line number Diff line number Diff line
@@ -128,7 +128,7 @@ nfp_net_bpf_get_act(struct nfp_net *nn, struct tc_cls_bpf_offload *cls_bpf)
		if (is_tcf_gact_shot(a))
			return NN_ACT_TC_DROP;

		if (is_tcf_mirred_redirect(a) &&
		if (is_tcf_mirred_egress_redirect(a) &&
		    tcf_mirred_ifindex(a) == nn->netdev->ifindex)
			return NN_ACT_TC_REDIR;
	}
Loading