mirror of
https://github.com/openvswitch/ovs
synced 2025-08-31 06:15:47 +00:00
ofp-util: Abstract flow_mod OFPFF_* flags.
The OFPFF_* flags used in flow_mods are just confusing enough that it seems worthwhile to try to abstract them out. In particular: * OFPFF_EMERG was introduced in OF1.0, deleted in OF1.1, and then its bit was reused for a different purpose in OF1.2. * OFPFF_RESET_COUNTS was introduced in OF1.2 but the semantics that it specifies are implied by "add" commands in earlier versions, so proper translation requires the OpenFlow version number and flow_mod command. This commit does the abstraction. Signed-off-by: Ben Pfaff <blp@nicira.com> Acked-by: Ethan Jackson <ethan@nicira.com>
This commit is contained in:
15
lib/learn.c
15
lib/learn.c
@@ -97,12 +97,23 @@ learn_from_openflow(const struct nx_action_learn *nal, struct ofpbuf *ofpacts)
|
||||
learn->hard_timeout = ntohs(nal->hard_timeout);
|
||||
learn->priority = ntohs(nal->priority);
|
||||
learn->cookie = ntohll(nal->cookie);
|
||||
learn->flags = ntohs(nal->flags);
|
||||
learn->table_id = nal->table_id;
|
||||
learn->fin_idle_timeout = ntohs(nal->fin_idle_timeout);
|
||||
learn->fin_hard_timeout = ntohs(nal->fin_hard_timeout);
|
||||
|
||||
if (learn->flags & ~OFPFF_SEND_FLOW_REM || learn->table_id == 0xff) {
|
||||
/* We only support "send-flow-removed" for now. */
|
||||
switch (ntohs(nal->flags)) {
|
||||
case 0:
|
||||
learn->flags = 0;
|
||||
break;
|
||||
case OFPFF_SEND_FLOW_REM:
|
||||
learn->flags = OFPUTIL_FF_SEND_FLOW_REM;
|
||||
break;
|
||||
default:
|
||||
return OFPERR_OFPBAC_BAD_ARGUMENT;
|
||||
}
|
||||
|
||||
if (learn->table_id == 0xff) {
|
||||
return OFPERR_OFPBAC_BAD_ARGUMENT;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user