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;
}
}
spec = ofpbuf_put_zeros(ofpacts, sizeof *spec);
- learn = ofpacts->l2;
+ learn = ofpacts->frame;
learn->n_specs++;
spec->src_type = header & NX_LEARN_SRC_MASK;
struct nx_action_learn *nal;
size_t start_ofs;
- start_ofs = openflow->size;
+ start_ofs = ofpbuf_size(openflow);
nal = ofputil_put_NXAST_LEARN(openflow);
nal->idle_timeout = htons(learn->idle_timeout);
nal->hard_timeout = htons(learn->hard_timeout);
}
}
- if ((openflow->size - start_ofs) % 8) {
- ofpbuf_put_zeros(openflow, 8 - (openflow->size - start_ofs) % 8);
+ if ((ofpbuf_size(openflow) - start_ofs) % 8) {
+ ofpbuf_put_zeros(openflow, 8 - (ofpbuf_size(openflow) - start_ofs) % 8);
}
nal = ofpbuf_at_assert(openflow, start_ofs, sizeof *nal);
- nal->len = htons(openflow->size - start_ofs);
+ nal->len = htons(ofpbuf_size(openflow) - start_ofs);
}
/* Composes 'fm' so that executing it will implement 'learn' given that the
fm->cookie = htonll(0);
fm->cookie_mask = htonll(0);
fm->new_cookie = htonll(learn->cookie);
- fm->modify_cookie = fm->new_cookie != htonll(UINT64_MAX);
+ fm->modify_cookie = fm->new_cookie != OVS_BE64_MAX;
fm->table_id = learn->table_id;
fm->command = OFPFC_MODIFY_STRICT;
fm->idle_timeout = learn->idle_timeout;
}
ofpact_pad(ofpacts);
- fm->ofpacts = ofpacts->data;
- fm->ofpacts_len = ofpacts->size;
+ fm->ofpacts = ofpbuf_data(ofpacts);
+ fm->ofpacts_len = ofpbuf_size(ofpacts);
}
/* Perform a bitwise-OR on 'wc''s fields that are relevant as sources in
char *error;
spec = ofpbuf_put_zeros(ofpacts, sizeof *spec);
- learn = ofpacts->l2;
+ learn = ofpacts->frame;
learn->n_specs++;
error = learn_parse_spec(orig, name, value, spec);