summaryrefslogtreecommitdiff
path: root/lib/learn.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/learn.c')
-rw-r--r--lib/learn.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/lib/learn.c b/lib/learn.c
index 49d9efdba..68d95cbed 100644
--- a/lib/learn.c
+++ b/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;
}