X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=ofproto%2Ffail-open.c;h=495197e755cd7e87e23a261044d4083702b2ef02;hb=95f61ba8829a545d5e3edfb5b4d6e7341bd58f0f;hp=99bbccd3178f88a1b66fb5bf1043b4bd9bb9b190;hpb=e0edde6fee279cdbbf3c179f5f50adaf0c7c7f1e;p=openvswitch diff --git a/ofproto/fail-open.c b/ofproto/fail-open.c index 99bbccd3..495197e7 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" @@ -121,7 +122,7 @@ send_bogus_packet_ins(struct fail_open *fo) ofpbuf_init(&b, 128); eth_addr_nicira_random(mac); - compose_benign_packet(&b, "Open vSwitch Controller Probe", 0xa033, mac); + compose_rarp(&b, mac); memset(&pin, 0, sizeof pin); pin.packet = b.data; @@ -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); } }