X-Git-Url: http://git.cascardo.eti.br/?p=cascardo%2Fovs.git;a=blobdiff_plain;f=ofproto%2Ffail-open.c;h=495197e755cd7e87e23a261044d4083702b2ef02;hp=912dc4e4cefd0e185413f64a527fee20c6d5f2ab;hb=f25d0cf3c366;hpb=690a61c50a4744603be2ee3de8e22c97f9140d94 diff --git a/ofproto/fail-open.c b/ofproto/fail-open.c index 912dc4e4c..495197e75 100644 --- a/ofproto/fail-open.c +++ b/ofproto/fail-open.c @@ -23,6 +23,7 @@ #include "flow.h" #include "mac-learning.h" #include "odp-util.h" +#include "ofp-actions.h" #include "ofp-util.h" #include "ofpbuf.h" #include "ofproto.h" @@ -214,18 +215,19 @@ fail_open_flushed(struct fail_open *fo) int disconn_secs = connmgr_failure_duration(fo->connmgr); bool open = disconn_secs >= trigger_duration(fo); if (open) { - union ofp_action action; + struct ofpbuf ofpacts; struct cls_rule rule; /* Set up a flow that matches every packet and directs them to * OFPP_NORMAL. */ - memset(&action, 0, sizeof action); - action.type = htons(OFPAT10_OUTPUT); - action.output.len = htons(sizeof action); - action.output.port = htons(OFPP_NORMAL); + ofpbuf_init(&ofpacts, OFPACT_OUTPUT_SIZE); + ofpact_put_OUTPUT(&ofpacts)->port = OFPP_NORMAL; + ofpact_pad(&ofpacts); cls_rule_init_catchall(&rule, FAIL_OPEN_PRIORITY); - ofproto_add_flow(fo->ofproto, &rule, &action, 1); + ofproto_add_flow(fo->ofproto, &rule, ofpacts.data, ofpacts.size); + + ofpbuf_uninit(&ofpacts); } }