X-Git-Url: http://git.cascardo.eti.br/?a=blobdiff_plain;f=lib%2Flearn.c;h=606ea9ed0b0bf29e6f5ea2154bd44955ac7ab726;hb=bcd2633a5be;hp=ab403bee5686f6d17c6f95a546a8a75ddbd8fcda;hpb=368eefac37c490ad4f63e5d40deb94c724cf25c5;p=cascardo%2Fovs.git diff --git a/lib/learn.c b/lib/learn.c index ab403bee5..606ea9ed0 100644 --- a/lib/learn.c +++ b/lib/learn.c @@ -374,6 +374,22 @@ learn_execute(const struct ofpact_learn *learn, const struct flow *flow, fm->ofpacts_len = ofpacts->size; } +/* Perform a bitwise-OR on 'wc''s fields that are relevant as sources in + * the learn action 'learn'. */ +void +learn_mask(const struct ofpact_learn *learn, struct flow_wildcards *wc) +{ + const struct ofpact_learn_spec *spec; + union mf_subvalue value; + + memset(&value, 0xff, sizeof value); + for (spec = learn->specs; spec < &learn->specs[learn->n_specs]; spec++) { + if (spec->src_type == NX_LEARN_SRC_FIELD) { + mf_write_subfield_flow(&spec->src, &value, &wc->masks); + } + } +} + static void learn_parse_load_immediate(const char *s, struct ofpact_learn_spec *spec) {