OFPFF_SEND_FLOW_REM = 1 << 0, /* Send flow removed message when flow
* expires or is deleted. */
OFPFF_CHECK_OVERLAP = 1 << 1, /* Check for overlapping entries first. */
- OFPFF_EMERG = 1 << 2 /* Ramark this is for emergency. */
+ OFPFF_EMERG = 1 << 2 /* Use emergency flow cache (not supported
+ * by Open vSwitch). */
};
/* Flow setup and teardown (controller -> datapath). */
matching entries to include this as an
output port. A value of OFPP_NONE
indicates no restriction. */
- uint16_t flags; /* One of OFPFF_*. */
+ uint16_t flags; /* Zero or more of OFPFF_*. */
struct ofp_action_header actions[0]; /* The action length is inferred
from the length field in the
header. */
struct fail_open *fail_open;
struct netflow *netflow;
struct ofproto_sflow *sflow;
- bool tun_id_from_cookie;
+ bool tun_id_from_cookie; /* NXT_TUN_ID_FROM_COOKIE enabled? */
/* In-band control. */
struct in_band *in_band;
wdp_flow_for_each_match(p->wdp, &target, UINT_MAX,
modify_flows_cb, &cbdata);
if (cbdata.match) {
- /* This credits the packet to whichever flow happened to happened to
- * match last. That's weird. Maybe we should do a lookup for the
- * flow that actually matches the packet? Who knows. */
+ /* This credits the packet to whichever flow happened to match last.
+ * That's weird. Maybe we should do a lookup for the flow that
+ * actually matches the packet? Who knows. */
send_buffered_packet(p, ofconn, cbdata.match, ofm);
return 0;
} else {