|
@@ -67,16 +67,22 @@ static int mlxsw_sp_flower_parse_actions(struct mlxsw_sp *mlxsw_sp,
|
|
list_for_each_entry(a, &actions, list) {
|
|
list_for_each_entry(a, &actions, list) {
|
|
if (is_tcf_gact_ok(a)) {
|
|
if (is_tcf_gact_ok(a)) {
|
|
err = mlxsw_sp_acl_rulei_act_terminate(rulei);
|
|
err = mlxsw_sp_acl_rulei_act_terminate(rulei);
|
|
- if (err)
|
|
|
|
|
|
+ if (err) {
|
|
|
|
+ NL_SET_ERR_MSG_MOD(extack, "Cannot append terminate action");
|
|
return err;
|
|
return err;
|
|
|
|
+ }
|
|
} else if (is_tcf_gact_shot(a)) {
|
|
} else if (is_tcf_gact_shot(a)) {
|
|
err = mlxsw_sp_acl_rulei_act_drop(rulei);
|
|
err = mlxsw_sp_acl_rulei_act_drop(rulei);
|
|
- if (err)
|
|
|
|
|
|
+ if (err) {
|
|
|
|
+ NL_SET_ERR_MSG_MOD(extack, "Cannot append drop action");
|
|
return err;
|
|
return err;
|
|
|
|
+ }
|
|
} else if (is_tcf_gact_trap(a)) {
|
|
} else if (is_tcf_gact_trap(a)) {
|
|
err = mlxsw_sp_acl_rulei_act_trap(rulei);
|
|
err = mlxsw_sp_acl_rulei_act_trap(rulei);
|
|
- if (err)
|
|
|
|
|
|
+ if (err) {
|
|
|
|
+ NL_SET_ERR_MSG_MOD(extack, "Cannot append trap action");
|
|
return err;
|
|
return err;
|
|
|
|
+ }
|
|
} else if (is_tcf_gact_goto_chain(a)) {
|
|
} else if (is_tcf_gact_goto_chain(a)) {
|
|
u32 chain_index = tcf_gact_goto_chain_index(a);
|
|
u32 chain_index = tcf_gact_goto_chain_index(a);
|
|
struct mlxsw_sp_acl_ruleset *ruleset;
|
|
struct mlxsw_sp_acl_ruleset *ruleset;
|
|
@@ -90,8 +96,10 @@ static int mlxsw_sp_flower_parse_actions(struct mlxsw_sp *mlxsw_sp,
|
|
|
|
|
|
group_id = mlxsw_sp_acl_ruleset_group_id(ruleset);
|
|
group_id = mlxsw_sp_acl_ruleset_group_id(ruleset);
|
|
err = mlxsw_sp_acl_rulei_act_jump(rulei, group_id);
|
|
err = mlxsw_sp_acl_rulei_act_jump(rulei, group_id);
|
|
- if (err)
|
|
|
|
|
|
+ if (err) {
|
|
|
|
+ NL_SET_ERR_MSG_MOD(extack, "Cannot append jump action");
|
|
return err;
|
|
return err;
|
|
|
|
+ }
|
|
} else if (is_tcf_mirred_egress_redirect(a)) {
|
|
} else if (is_tcf_mirred_egress_redirect(a)) {
|
|
struct net_device *out_dev;
|
|
struct net_device *out_dev;
|
|
struct mlxsw_sp_fid *fid;
|
|
struct mlxsw_sp_fid *fid;
|
|
@@ -127,6 +135,7 @@ static int mlxsw_sp_flower_parse_actions(struct mlxsw_sp *mlxsw_sp,
|
|
action, vid,
|
|
action, vid,
|
|
proto, prio, extack);
|
|
proto, prio, extack);
|
|
} else {
|
|
} else {
|
|
|
|
+ NL_SET_ERR_MSG_MOD(extack, "Unsupported action");
|
|
dev_err(mlxsw_sp->bus_info->dev, "Unsupported action\n");
|
|
dev_err(mlxsw_sp->bus_info->dev, "Unsupported action\n");
|
|
return -EOPNOTSUPP;
|
|
return -EOPNOTSUPP;
|
|
}
|
|
}
|
|
@@ -203,6 +212,7 @@ static int mlxsw_sp_flower_parse_ports(struct mlxsw_sp *mlxsw_sp,
|
|
return 0;
|
|
return 0;
|
|
|
|
|
|
if (ip_proto != IPPROTO_TCP && ip_proto != IPPROTO_UDP) {
|
|
if (ip_proto != IPPROTO_TCP && ip_proto != IPPROTO_UDP) {
|
|
|
|
+ NL_SET_ERR_MSG_MOD(f->common.extack, "Only UDP and TCP keys are supported");
|
|
dev_err(mlxsw_sp->bus_info->dev, "Only UDP and TCP keys are supported\n");
|
|
dev_err(mlxsw_sp->bus_info->dev, "Only UDP and TCP keys are supported\n");
|
|
return -EINVAL;
|
|
return -EINVAL;
|
|
}
|
|
}
|
|
@@ -231,6 +241,7 @@ static int mlxsw_sp_flower_parse_tcp(struct mlxsw_sp *mlxsw_sp,
|
|
return 0;
|
|
return 0;
|
|
|
|
|
|
if (ip_proto != IPPROTO_TCP) {
|
|
if (ip_proto != IPPROTO_TCP) {
|
|
|
|
+ NL_SET_ERR_MSG_MOD(f->common.extack, "TCP keys supported only for TCP");
|
|
dev_err(mlxsw_sp->bus_info->dev, "TCP keys supported only for TCP\n");
|
|
dev_err(mlxsw_sp->bus_info->dev, "TCP keys supported only for TCP\n");
|
|
return -EINVAL;
|
|
return -EINVAL;
|
|
}
|
|
}
|
|
@@ -257,6 +268,7 @@ static int mlxsw_sp_flower_parse_ip(struct mlxsw_sp *mlxsw_sp,
|
|
return 0;
|
|
return 0;
|
|
|
|
|
|
if (n_proto != ETH_P_IP && n_proto != ETH_P_IPV6) {
|
|
if (n_proto != ETH_P_IP && n_proto != ETH_P_IPV6) {
|
|
|
|
+ NL_SET_ERR_MSG_MOD(f->common.extack, "IP keys supported only for IPv4/6");
|
|
dev_err(mlxsw_sp->bus_info->dev, "IP keys supported only for IPv4/6\n");
|
|
dev_err(mlxsw_sp->bus_info->dev, "IP keys supported only for IPv4/6\n");
|
|
return -EINVAL;
|
|
return -EINVAL;
|
|
}
|
|
}
|
|
@@ -301,6 +313,7 @@ static int mlxsw_sp_flower_parse(struct mlxsw_sp *mlxsw_sp,
|
|
BIT(FLOW_DISSECTOR_KEY_IP) |
|
|
BIT(FLOW_DISSECTOR_KEY_IP) |
|
|
BIT(FLOW_DISSECTOR_KEY_VLAN))) {
|
|
BIT(FLOW_DISSECTOR_KEY_VLAN))) {
|
|
dev_err(mlxsw_sp->bus_info->dev, "Unsupported key\n");
|
|
dev_err(mlxsw_sp->bus_info->dev, "Unsupported key\n");
|
|
|
|
+ NL_SET_ERR_MSG_MOD(f->common.extack, "Unsupported key");
|
|
return -EOPNOTSUPP;
|
|
return -EOPNOTSUPP;
|
|
}
|
|
}
|
|
|
|
|