mirror of
https://github.com/openvswitch/ovs
synced 2025-08-31 14:25:26 +00:00
nicra-ext: New action NXAST_OUTPUT_REG.
The NXAST_OUTPUT_REG action outputs to the OpenFlow port contained in a supplied NXM field.
This commit is contained in:
@@ -1979,6 +1979,22 @@ check_resubmit_table(const struct nx_action_resubmit *nar)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
check_output_reg(const struct nx_action_output_reg *naor,
|
||||
const struct flow *flow)
|
||||
{
|
||||
size_t i;
|
||||
|
||||
for (i = 0; i < sizeof naor->zero; i++) {
|
||||
if (naor->zero[i]) {
|
||||
return ofp_mkerr(OFPET_BAD_ACTION, OFPBAC_BAD_ARGUMENT);
|
||||
}
|
||||
}
|
||||
|
||||
return nxm_src_check(naor->src, nxm_decode_ofs(naor->ofs_nbits),
|
||||
nxm_decode_n_bits(naor->ofs_nbits), flow);
|
||||
}
|
||||
|
||||
int
|
||||
validate_actions(const union ofp_action *actions, size_t n_actions,
|
||||
const struct flow *flow, int max_ports)
|
||||
@@ -2057,6 +2073,11 @@ validate_actions(const union ofp_action *actions, size_t n_actions,
|
||||
max_ports, flow);
|
||||
break;
|
||||
|
||||
case OFPUTIL_NXAST_OUTPUT_REG:
|
||||
error = check_output_reg((const struct nx_action_output_reg *) a,
|
||||
flow);
|
||||
break;
|
||||
|
||||
case OFPUTIL_NXAST_RESUBMIT_TABLE:
|
||||
error = check_resubmit_table(
|
||||
(const struct nx_action_resubmit *) a);
|
||||
@@ -2170,6 +2191,7 @@ ofputil_decode_nxast_action(const union ofp_action *a)
|
||||
NXAST_ACTION(NXAST_BUNDLE, struct nx_action_bundle, true);
|
||||
NXAST_ACTION(NXAST_BUNDLE_LOAD, struct nx_action_bundle, true);
|
||||
NXAST_ACTION(NXAST_RESUBMIT_TABLE, struct nx_action_resubmit, false);
|
||||
NXAST_ACTION(NXAST_OUTPUT_REG, struct nx_action_output_reg, false);
|
||||
#undef NXAST_ACTION
|
||||
|
||||
case NXAST_SNAT__OBSOLETE:
|
||||
|
Reference in New Issue
Block a user