|
@@ -75,17 +75,23 @@ static int bnxt_tc_parse_redir(struct bnxt *bp,
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
-static void bnxt_tc_parse_vlan(struct bnxt *bp,
|
|
|
|
- struct bnxt_tc_actions *actions,
|
|
|
|
- const struct tc_action *tc_act)
|
|
|
|
|
|
+static int bnxt_tc_parse_vlan(struct bnxt *bp,
|
|
|
|
+ struct bnxt_tc_actions *actions,
|
|
|
|
+ const struct tc_action *tc_act)
|
|
{
|
|
{
|
|
- if (tcf_vlan_action(tc_act) == TCA_VLAN_ACT_POP) {
|
|
|
|
|
|
+ switch (tcf_vlan_action(tc_act)) {
|
|
|
|
+ case TCA_VLAN_ACT_POP:
|
|
actions->flags |= BNXT_TC_ACTION_FLAG_POP_VLAN;
|
|
actions->flags |= BNXT_TC_ACTION_FLAG_POP_VLAN;
|
|
- } else if (tcf_vlan_action(tc_act) == TCA_VLAN_ACT_PUSH) {
|
|
|
|
|
|
+ break;
|
|
|
|
+ case TCA_VLAN_ACT_PUSH:
|
|
actions->flags |= BNXT_TC_ACTION_FLAG_PUSH_VLAN;
|
|
actions->flags |= BNXT_TC_ACTION_FLAG_PUSH_VLAN;
|
|
actions->push_vlan_tci = htons(tcf_vlan_push_vid(tc_act));
|
|
actions->push_vlan_tci = htons(tcf_vlan_push_vid(tc_act));
|
|
actions->push_vlan_tpid = tcf_vlan_push_proto(tc_act);
|
|
actions->push_vlan_tpid = tcf_vlan_push_proto(tc_act);
|
|
|
|
+ break;
|
|
|
|
+ default:
|
|
|
|
+ return -EOPNOTSUPP;
|
|
}
|
|
}
|
|
|
|
+ return 0;
|
|
}
|
|
}
|
|
|
|
|
|
static int bnxt_tc_parse_tunnel_set(struct bnxt *bp,
|
|
static int bnxt_tc_parse_tunnel_set(struct bnxt *bp,
|
|
@@ -134,7 +140,9 @@ static int bnxt_tc_parse_actions(struct bnxt *bp,
|
|
|
|
|
|
/* Push/pop VLAN */
|
|
/* Push/pop VLAN */
|
|
if (is_tcf_vlan(tc_act)) {
|
|
if (is_tcf_vlan(tc_act)) {
|
|
- bnxt_tc_parse_vlan(bp, actions, tc_act);
|
|
|
|
|
|
+ rc = bnxt_tc_parse_vlan(bp, actions, tc_act);
|
|
|
|
+ if (rc)
|
|
|
|
+ return rc;
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|
|
|
|
|